Changeset 85 for trunk/MultiChannelUSB
- Timestamp:
- Dec 21, 2009, 5:13:58 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MultiChannelUSB/UserInterface.tcl
r82 r85 5 5 package require usb 6 6 7 wm minsize . 800 600 7 package require zlib 8 9 wm minsize . 1000 700 8 10 9 11 namespace eval ::mca { … … 14 16 namespace import ::blt::tabnotebook 15 17 16 proc validate { value} {17 if {![regexp {^[ 1-9][0-9]*$} $value]} {18 proc validate {max value} { 19 if {![regexp {^[0-9]*$} $value]} { 18 20 return 0 19 } elseif {$value > 4095} {21 } elseif {$value > $max} { 20 22 return 0 21 23 } elseif {[string length $value] > 4} { … … 28 30 # ------------------------------------------------------------------------- 29 31 30 Class CfgDisplay -parameter { 32 Class Display 33 34 # ------------------------------------------------------------------------- 35 36 Display instproc usbCmd {command} { 37 global usb_handle 38 39 if {[catch {$usb_handle writeRaw [usb::convert $command]} result]} { 40 puts {Error during write} 41 puts $result 42 } 43 } 44 45 # ------------------------------------------------------------------------- 46 47 Display instproc usbCmdRead {command width size} { 48 global usb_handle 49 50 my usbCmd $command 51 52 set usb_data {} 53 if {[catch {$usb_handle readHex $width $size} result]} { 54 puts {Error during read} 55 puts $result 56 set result {} 57 } 58 59 my set data $result 60 } 61 62 # ------------------------------------------------------------------------- 63 64 Display instproc usbCmdReadEpt {command size} { 65 global usb_handle 66 67 my usbCmd $command 68 69 set usb_data {} 70 if {[catch {$usb_handle readEpt $size} result]} { 71 puts {Error during read} 72 puts $result 73 set result {} 74 } 75 76 my set data $result 77 } 78 79 # ------------------------------------------------------------------------- 80 81 Class CfgDisplay -superclass Display -parameter { 31 82 {master} 32 83 } … … 116 167 set command 0005012000050030000500[string range $value 0 1]000502[string index $value 2]0 117 168 118 my send_data [usb::convert $command]169 my usbCmd $command 119 170 } 120 171 … … 127 178 set command 0005012400050030000500[string range $value 0 1]000502[string index $value 2]0 128 179 129 my send_data [usb::convert $command]180 my usbCmd $command 130 181 } 131 182 … … 137 188 set value [format {0%x%x%x} $polar(3) $polar(2) $polar(1)] 138 189 139 my send_data [usb::convert 000A${value}] 140 } 141 142 # ------------------------------------------------------------------------- 143 144 CfgDisplay instproc send_data {data} { 145 global usb_handle 146 147 if {[catch {$usb_handle writeRaw $data} result]} { 148 puts {Error during write} 149 puts $result 150 } 151 } 152 153 # ------------------------------------------------------------------------- 154 155 Class OscDisplay -parameter { 190 my usbCmd 000A${value} 191 } 192 193 # ------------------------------------------------------------------------- 194 195 Class OscDisplay -superclass Display -parameter { 156 196 {number} 157 197 {master} … … 199 239 set disp_mux 2 200 240 241 trace add variable [myvar data] write [myproc data_update] 201 242 trace add variable [myvar auto] write [myproc auto_update] 202 243 trace add variable [myvar thrs] write [myproc thrs_update] … … 207 248 ${config}.auto_check select 208 249 ${config}.thrs_check select 209 ${config}.thrs_field set 60250 ${config}.thrs_field set 1278 210 251 ${config}.disp_uwt2 select 211 252 ${config}.trig_uwt2 select … … 218 259 my instvar data xvec yvec 219 260 my instvar config auto thrs thrs_val disp_val trig_val 220 221 my set restart_command [usb::convert 0001000${number}]222 my set acquire_command [usb::convert 0002000${number}]223 261 224 262 # create a graph widget and show a grid … … 239 277 spinbox ${config}.thrs_field -from 1 -to 4095 \ 240 278 -increment 5 -width 10 -textvariable [myvar thrs_val] \ 241 -validate all -vcmd {::mca::validate %P}279 -validate all -vcmd {::mca::validate 4095 %P} 242 280 243 281 frame ${config}.spc2 -width 10 -height 10 … … 313 351 # ------------------------------------------------------------------------- 314 352 353 OscDisplay instproc data_update args { 354 my instvar data yvec 355 $yvec set $data 356 } 357 358 # ------------------------------------------------------------------------- 359 315 360 OscDisplay instproc auto_update args { 316 361 my instvar config auto after_handle … … 344 389 } else { 345 390 ${config}.thrs_field configure -state disabled 346 my send_data [usb::convert ${val_addr}0000]391 my usbCmd ${val_addr}0000 347 392 } 348 393 } … … 353 398 my instvar config number thrs_val 354 399 400 if {[string equal $thrs_val {}]} { 401 set thrs_val 0 402 } 403 355 404 set val_addr [format %04x [expr {17 + ${number}}]] 356 405 set value [format %04x $thrs_val] 357 406 358 my send_data [usb::convert ${val_addr}${value}]407 my usbCmd ${val_addr}${value} 359 408 } 360 409 … … 377 426 data { 378 427 set disp_mux 0 379 my send_data [usb::convert ${mux_addr}[my mux]]428 my usbCmd ${mux_addr}[my mux] 380 429 } 381 430 uwt1 { 382 431 set disp_mux 1 383 my send_data [usb::convert ${mux_addr}[my mux]]432 my usbCmd ${mux_addr}[my mux] 384 433 } 385 434 uwt2 { 386 435 set disp_mux 2 387 my send_data [usb::convert ${mux_addr}[my mux]]436 my usbCmd ${mux_addr}[my mux] 388 437 } 389 438 uwt3 { 390 439 set disp_mux 3 391 my send_data [usb::convert ${mux_addr}[my mux]]440 my usbCmd ${mux_addr}[my mux] 392 441 } 393 442 base { 394 443 set disp_mux 4 395 my send_data [usb::convert ${mux_addr}[my mux]]444 my usbCmd ${mux_addr}[my mux] 396 445 } 397 446 } … … 408 457 data { 409 458 set trig_mux 0 410 my send_data [usb::convert ${mux_addr}[my mux]]459 my usbCmd ${mux_addr}[my mux] 411 460 } 412 461 uwt1 { 413 462 set trig_mux 1 414 my send_data [usb::convert ${mux_addr}[my mux]]463 my usbCmd ${mux_addr}[my mux] 415 464 } 416 465 uwt2 { 417 466 set trig_mux 2 418 my send_data [usb::convert ${mux_addr}[my mux]]467 my usbCmd ${mux_addr}[my mux] 419 468 } 420 469 uwt3 { 421 470 set trig_mux 3 422 my send_data [usb::convert ${mux_addr}[my mux]]471 my usbCmd ${mux_addr}[my mux] 423 472 } 424 473 base { 425 474 set trig_mux 4 426 my send_data [usb::convert ${mux_addr}[my mux]]475 my usbCmd ${mux_addr}[my mux] 427 476 } 428 477 } … … 452 501 # ------------------------------------------------------------------------- 453 502 503 OscDisplay instproc acquire {} { 504 my instvar number 505 my usbCmdRead 0002000${number} 2 1024 506 } 507 508 # ------------------------------------------------------------------------- 509 510 OscDisplay instproc restart {} { 511 my instvar number 512 my usbCmd 0001000${number} 513 } 514 515 # ------------------------------------------------------------------------- 516 454 517 OscDisplay instproc register {} { 455 518 my save_data [my set data] … … 458 521 # ------------------------------------------------------------------------- 459 522 460 OscDisplay instproc send_data {data} {461 global usb_handle462 463 if {[catch {$usb_handle writeRaw $data} result]} {464 puts {Error during write}465 puts $result466 }467 }468 469 # -------------------------------------------------------------------------470 471 OscDisplay instproc restart {} {472 my instvar restart_command473 my send_data $restart_command474 }475 476 # -------------------------------------------------------------------------477 478 OscDisplay instproc acquire {} {479 global usb_handle480 my instvar xvec yvec data481 my instvar acquire_command482 483 my send_data $acquire_command484 485 set usb_data {}486 if {[catch {$usb_handle readHex 2 1024} usb_data]} {487 puts {Error during read}488 puts $usb_data489 set usb_data {}490 }491 492 set data $usb_data493 494 $yvec set $usb_data495 }496 497 # -------------------------------------------------------------------------498 499 523 OscDisplay instproc acquire_restart_loop {} { 500 my instvar after_handle524 my instvar number after_handle 501 525 502 526 my acquire … … 508 532 # ------------------------------------------------------------------------- 509 533 510 Class HstDisplay - parameter {534 Class HstDisplay -superclass Display -parameter { 511 535 {number} 512 536 {master} … … 554 578 set peak_mux 1 555 579 580 trace add variable [myvar axis] write [myproc axis_update] 581 trace add variable [myvar data] write [myproc data_update] 556 582 trace add variable [myvar auto] write [myproc auto_update] 557 583 trace add variable [myvar peak] write [myproc peak_update] … … 562 588 trace add variable [myvar base_val] write [myproc base_val_update] 563 589 590 ${config}.axis_check deselect 564 591 ${config}.auto_check select 565 592 ${config}.peak_check select 593 566 594 ${config}.thrs_check select 567 ${config}.thrs_field set 1 0568 ${config}.base_check select 595 ${config}.thrs_field set 1278 596 569 597 ${config}.base_const select 570 598 ${config}.base_field set 35 599 ${config}.base_check deselect 571 600 } 572 601 … … 575 604 HstDisplay instproc setup {} { 576 605 my instvar number master 577 my instvar data xvec yvec 606 my instvar data xvec yvec graph 578 607 my instvar config auto thrs thrs_val base base_typ base_val 579 580 my set restart_command [usb::convert 0001001${number}]581 my set acquire_command [usb::convert 0002001${number}]582 608 583 609 # create a graph widget and show a grid … … 590 616 set config [frame ${master}.config] 591 617 618 checkbutton ${config}.axis_check -text {log scale} -variable [myvar axis] 619 620 frame ${config}.spc1 -width 10 -height 10 621 592 622 checkbutton ${config}.auto_check -text {auto update} -variable [myvar auto] 593 623 594 frame ${config}.spc 1-width 10 -height 10624 frame ${config}.spc2 -width 10 -height 10 595 625 596 626 checkbutton ${config}.peak_check -text {peak detect} -variable [myvar peak] 597 627 598 frame ${config}.spc 2-width 10 -height 10628 frame ${config}.spc3 -width 10 -height 10 599 629 600 630 checkbutton ${config}.thrs_check -text threshold -variable [myvar thrs] 601 631 spinbox ${config}.thrs_field -from 1 -to 4095 \ 602 632 -increment 5 -width 10 -textvariable [myvar thrs_val] \ 603 -validate all -vcmd {::mca::validate %P}604 605 frame ${config}.spc 3-width 10 -height 10633 -validate all -vcmd {::mca::validate 4095 %P} 634 635 frame ${config}.spc4 -width 10 -height 10 606 636 607 637 checkbutton ${config}.base_check -text baseline -variable [myvar base] … … 610 640 spinbox ${config}.base_field -from 1 -to 4095 \ 611 641 -increment 5 -width 10 -textvariable [myvar base_val] \ 612 -validate all -vcmd {::mca::validate %P}613 614 frame ${config}.spc 4-width 10 -height 10642 -validate all -vcmd {::mca::validate 4095 %P} 643 644 frame ${config}.spc5 -width 10 -height 10 615 645 616 646 button ${config}.acquire -text Acquire \ … … 621 651 -bg lightblue -activebackground lightblue -command [myproc register] 622 652 653 grid ${config}.axis_check -sticky w 654 grid ${config}.spc1 623 655 grid ${config}.auto_check -sticky w 624 grid ${config}.spc 1656 grid ${config}.spc2 625 657 grid ${config}.peak_check -sticky w 626 grid ${config}.spc 2658 grid ${config}.spc3 627 659 grid ${config}.thrs_check -sticky w 628 660 grid ${config}.thrs_field -sticky ew -pady 1 -padx 5 629 grid ${config}.spc 3661 grid ${config}.spc4 630 662 grid ${config}.base_check -sticky w 631 663 grid ${config}.base_auto -sticky w 632 664 grid ${config}.base_const -sticky w 633 665 grid ${config}.base_field -sticky ew -pady 1 -padx 5 634 grid ${config}.spc 4666 grid ${config}.spc5 635 667 grid ${config}.acquire -sticky ew -pady 3 -padx 5 636 668 grid ${config}.restart -sticky ew -pady 3 -padx 5 … … 651 683 # create one element with data for the x and y axis, no dots 652 684 $graph element create Spectrum1 -symbol none -smooth step -xdata $xvec -ydata $yvec 685 } 686 687 # ------------------------------------------------------------------------- 688 689 HstDisplay instproc axis_update args { 690 my instvar axis graph 691 if {$axis} { 692 $graph axis configure y -min 1 -max 1E10 -logscale yes 693 } else { 694 $graph axis configure y -min {} -max {} -logscale no 695 } 696 } 697 698 # ------------------------------------------------------------------------- 699 700 HstDisplay instproc data_update args { 701 my instvar data yvec 702 $yvec set $data 653 703 } 654 704 … … 689 739 if {$peak} { 690 740 set peak_mux 1 691 my send_data [usb::convert ${mux_addr}[my mux]]741 my usbCmd ${mux_addr}[my mux] 692 742 } else { 693 743 set peak_mux 0 694 my send_data [usb::convert ${mux_addr}[my mux]]744 my usbCmd ${mux_addr}[my mux] 695 745 } 696 746 } … … 702 752 703 753 set val_addr [format %04x [expr {14 + ${number}}]] 704 set value [format %04x $thrs_val]705 754 706 755 if {$thrs} { … … 709 758 } else { 710 759 ${config}.thrs_field configure -state disabled 711 my send_data [usb::convert ${val_addr}0000]760 my usbCmd ${val_addr}0000 712 761 } 713 762 } … … 718 767 my instvar config number thrs_val 719 768 769 if {[string equal $thrs_val {}]} { 770 set thrs_val 0 771 } 772 720 773 set val_addr [format %04x [expr {14 + ${number}}]] 721 774 set value [format %04x $thrs_val] 722 775 723 my send_data [usb::convert ${val_addr}${value}]776 my usbCmd ${val_addr}${value} 724 777 } 725 778 … … 741 794 ${config}.base_field configure -state disabled 742 795 set base_mux 0 743 my send_data [usb::convert ${mux_addr}[my mux]${val_addr}0000]796 my usbCmd ${mux_addr}[my mux]${val_addr}0000 744 797 } 745 798 } … … 758 811 ${config}.base_field configure -state disabled 759 812 set base_mux 1 760 my send_data [usb::convert ${mux_addr}[my mux]]813 my usbCmd ${mux_addr}[my mux] 761 814 } 762 815 const { 763 816 ${config}.base_field configure -state normal 764 817 set base_mux 0 765 my send_data [usb::convert ${mux_addr}[my mux]${val_addr}${value}]818 my usbCmd ${mux_addr}[my mux]${val_addr}${value} 766 819 } 767 820 } … … 773 826 my instvar number base_val 774 827 828 if {[string equal $base_val {}]} { 829 set base_val 0 830 } 831 775 832 set val_addr [format %04x [expr {11 + ${number}}]] 776 833 set value [format %04x $base_val] 777 834 778 my send_data [usb::convert ${val_addr}${value}] 835 my usbCmd ${val_addr}${value} 836 } 837 838 # ------------------------------------------------------------------------- 839 840 HstDisplay instproc acquire {} { 841 my instvar number 842 my usbCmdRead 0002001${number} 4 4096 843 } 844 845 # ------------------------------------------------------------------------- 846 847 HstDisplay instproc restart {} { 848 my instvar number 849 my usbCmd 0001001${number} 779 850 } 780 851 … … 808 879 # ------------------------------------------------------------------------- 809 880 810 HstDisplay instproc send_data {data} {811 global usb_handle812 813 if {[catch {$usb_handle writeRaw $data} result]} {814 puts {Error during write}815 puts $result816 }817 }818 819 # -------------------------------------------------------------------------820 821 HstDisplay instproc restart {} {822 my instvar restart_command823 my send_data $restart_command824 }825 826 # -------------------------------------------------------------------------827 828 HstDisplay instproc acquire {} {829 global usb_handle830 my instvar xvec yvec data fltr_val831 my instvar acquire_command832 833 my send_data $acquire_command834 835 set usb_data {}836 if {[catch {$usb_handle readHex 4 4096} usb_data]} {837 puts {Error during read}838 puts $usb_data839 set usb_data {}840 }841 842 set data $usb_data843 844 $yvec set $usb_data845 }846 847 # -------------------------------------------------------------------------848 849 881 HstDisplay instproc acquire_loop {} { 882 my instvar number after_handle 883 884 my acquire 885 886 set after_handle [after 1000 [myproc acquire_loop]] 887 } 888 889 # ------------------------------------------------------------------------- 890 891 Class EptDisplay -superclass Display -parameter { 892 {number} 893 {master} 894 } 895 896 # ------------------------------------------------------------------------- 897 898 EptDisplay instproc init {} { 899 my instvar data xvec yvec 900 901 set xvec [vector #auto] 902 903 for {set i 0} {$i < 11} {incr i} { 904 set yvec($i) [vector #auto] 905 } 906 907 # fill one vector for the x axis 908 $xvec seq 0 10000 909 910 my reset 911 912 my setup 913 914 next 915 } 916 917 # ------------------------------------------------------------------------- 918 919 EptDisplay instproc destroy {} { 920 next 921 } 922 923 # ------------------------------------------------------------------------- 924 925 EptDisplay instproc reset {} { 926 my instvar data xvec yvec 927 my instvar number_val directory 928 929 set data {} 930 931 set directory $::env(HOMEPATH) 932 set number_val 10 933 934 for {set i 0} {$i < 11} {incr i} { 935 $yvec($i) set {} 936 } 937 } 938 939 # ------------------------------------------------------------------------- 940 941 EptDisplay instproc start {} { 942 my instvar config 943 944 trace add variable [myvar recs_val] write [myproc recs_val_update] 945 trace add variable [myvar data] write [myproc data_update] 946 trace add variable [myvar last] write [myproc data_update] 947 948 } 949 950 # ------------------------------------------------------------------------- 951 952 EptDisplay instproc setup {} { 953 my instvar master 954 my instvar data xvec yvec graph 955 my instvar config number_val 956 957 # create a graph widget and show a grid 958 set display [frame ${master}.display] 959 960 set graph(0) [graph ${display}.graph0 -height 200 -leftmargin 80] 961 $graph(0) crosshairs configure -hide no -linewidth 2 -dashes { 1 1 } 962 $graph(0) grid configure -hide no 963 $graph(0) legend configure -hide yes 964 $graph(0) axis configure x -min 0 -max 10000 965 $graph(0) axis configure y -min 0 -max 4100 966 967 set graph(1) [graph ${display}.graph1 -height 200 -leftmargin 80] 968 $graph(1) crosshairs configure -hide no -linewidth 2 -dashes { 1 1 } 969 $graph(1) grid configure -hide no 970 $graph(1) legend configure -hide yes 971 $graph(1) axis configure x -min 0 -max 10000 -hide yes 972 $graph(1) axis configure y -min 0 -max 4100 973 974 set graph(2) [graph ${display}.graph2 -height 200 -leftmargin 80] 975 $graph(2) crosshairs configure -hide no -linewidth 2 -dashes { 1 1 } 976 $graph(2) grid configure -hide no 977 $graph(2) legend configure -hide yes 978 $graph(2) axis configure x -min 0 -max 10000 -hide yes 979 $graph(2) axis configure y -min 0 -max 4100 980 981 set graph(3) [graph ${display}.graph3 -height 100 -leftmargin 80] 982 $graph(3) crosshairs configure -hide no -linewidth 2 -dashes { 1 1 } 983 $graph(3) grid configure -hide no 984 $graph(3) legend configure -hide yes 985 $graph(3) axis configure x -min 0 -max 10000 -hide yes 986 $graph(3) axis configure y -min 0 -max 25 987 988 scale ${master}.last -orient horizontal -from 1 -to 35 -tickinterval 0 -showvalue no -variable [myvar last] 989 990 set config [frame ${master}.config -width 120] 991 992 label ${config}.recs -text {number of records} 993 spinbox ${config}.recs_field -from 5 -to 100 \ 994 -increment 5 -width 10 -textvariable [myvar recs_val] \ 995 -validate all -vcmd {::mca::validate 100 %P} 996 997 frame ${config}.spc1 -width 10 -height 10 998 999 button ${config}.sequence -text {Start Recording} \ 1000 -bg red -activebackground red -command [myproc sequence] 1001 1002 frame ${config}.spc2 -width 10 -height 10 1003 1004 label ${config}.stat -text {} 1005 1006 frame ${config}.spc3 -width 10 -height 20 1007 1008 button ${config}.acquire -text Acquire \ 1009 -bg green -activebackground green -command [myproc acquire] 1010 button ${config}.register -text Register \ 1011 -bg lightblue -activebackground lightblue -command [myproc register] 1012 1013 1014 grid ${config}.recs -sticky w -pady 1 -padx 3 1015 grid ${config}.recs_field -sticky ew -pady 1 -padx 5 1016 grid ${config}.spc1 1017 grid ${config}.sequence -sticky ew -pady 3 -padx 5 1018 grid ${config}.spc2 1019 grid ${config}.stat -sticky w -pady 1 -padx 3 1020 grid ${config}.spc3 1021 grid ${config}.acquire -sticky ew -pady 3 -padx 5 1022 grid ${config}.register -sticky ew -pady 3 -padx 5 1023 1024 grid ${graph(3)} -row 0 -column 0 -sticky news 1025 grid ${graph(2)} -row 1 -column 0 -sticky news 1026 grid ${graph(1)} -row 2 -column 0 -sticky news 1027 grid ${graph(0)} -row 3 -column 0 -sticky news 1028 1029 grid ${display} -row 0 -column 0 -sticky news 1030 grid ${config} -row 0 -column 1 1031 1032 grid ${master}.last -row 1 -column 0 -columnspan 2 -sticky ew 1033 1034 grid rowconfigure ${master} 0 -weight 1 1035 grid columnconfigure ${master} 0 -weight 1 1036 grid columnconfigure ${master} 1 -weight 0 -minsize 120 1037 1038 grid columnconfigure ${display} 0 -weight 1 1039 grid rowconfigure ${display} 0 -weight 1 1040 grid rowconfigure ${display} 1 -weight 1 1041 grid rowconfigure ${display} 2 -weight 1 1042 grid rowconfigure ${display} 3 -weight 1 1043 1044 # enable zooming 1045 Blt_ZoomStack $graph(0) 1046 Blt_ZoomStack $graph(1) 1047 Blt_ZoomStack $graph(2) 1048 Blt_ZoomStack $graph(3) 1049 1050 #bind .graph <Motion> {%W crosshairs configure -position @%x,%y} 1051 1052 # create one element with data for the x and y axis, no dots 1053 $graph(0) element create Spectrum0 -symbol none -xdata $xvec -ydata $yvec(0) 1054 $graph(1) element create Spectrum1 -symbol none -xdata $xvec -ydata $yvec(1) 1055 $graph(2) element create Spectrum2 -symbol none -xdata $xvec -ydata $yvec(2) 1056 for {set i 3} {$i < 11} {incr i} { 1057 $graph(3) element create Spectrum$i -symbol none -xdata $xvec -ydata $yvec($i) 1058 } 1059 } 1060 1061 # ------------------------------------------------------------------------- 1062 1063 EptDisplay instproc recs_val_update args { 1064 my instvar recs_val 1065 if {[string equal $recs_val {}]} { 1066 set number_val 0 1067 } 1068 } 1069 1070 # ------------------------------------------------------------------------- 1071 1072 EptDisplay instproc data_update args { 1073 my instvar data xvec yvec graph last 1074 1075 set first [expr {$last - 1}] 1076 1077 $xvec seq ${first}0000 ${last}0000 1078 for {set i 0} {$i < 4} {incr i} { 1079 $graph($i) axis configure x -min ${first}0000 -max ${last}0000 1080 } 1081 1082 for {set i 0} {$i < 11} {incr i} { 1083 $yvec($i) set [lrange [lindex $data $i] ${first}0000 ${last}0000] 1084 } 1085 } 1086 1087 1088 # ------------------------------------------------------------------------- 1089 1090 EptDisplay instproc save_data {data} { 1091 set file [tk_getSaveFile] 1092 if {[string equal $file {}]} { 1093 return 1094 } 1095 1096 set x [catch {set fid [open $file w+]}] 1097 set y [catch {puts $fid $data}] 1098 set z [catch {close $fid}] 1099 1100 if { $x || $y || $z || ![file exists $file] || ![file isfile $file] || ![file readable $file] } { 1101 tk_messageBox -icon error \ 1102 -message "An error occurred while writing to \"$file\"" 1103 } else { 1104 tk_messageBox -icon info \ 1105 -message "File \"$file\" written successfully" 1106 } 1107 } 1108 1109 # ------------------------------------------------------------------------- 1110 1111 EptDisplay instproc acquire {} { 1112 my usbCmdReadEpt 00060000 2097152 1113 } 1114 1115 # ------------------------------------------------------------------------- 1116 1117 EptDisplay instproc register {} { 1118 my save_data [my set data] 1119 } 1120 1121 # ------------------------------------------------------------------------- 1122 1123 EptDisplay instproc sequence {} { 1124 my instvar config recs_val directory counter 1125 1126 set directory [tk_chooseDirectory -initialdir $directory -title {Choose a directory}] 1127 1128 if {[string equal $directory {}]} { 1129 return 1130 } 1131 1132 ${config}.recs_field configure -state disabled 1133 ${config}.sequence configure -state disabled 1134 ${config}.acquire configure -state disabled 1135 ${config}.register configure -state disabled 1136 1137 set counter 1 1138 1139 if {$counter <= $recs_val} { 1140 ${config}.stat configure -text "record $counter of $recs_val" 1141 set after_handle [after 100 [myproc acquire_register_loop]] 1142 } 1143 } 1144 1145 # ------------------------------------------------------------------------- 1146 1147 EptDisplay instproc acquire_register_loop {} { 850 1148 my instvar after_handle 1149 my instvar config data recs_val directory counter 851 1150 852 1151 my acquire 853 1152 854 set after_handle [after 1000 [myproc acquire_loop]] 855 } 856 857 # ------------------------------------------------------------------------- 858 1153 set file [file join $directory ept_$counter.dat.gz] 1154 1155 set x [catch {set fid [open $file w+]}] 1156 fconfigure $fid -translation binary -encoding binary 1157 1158 set y [catch { 1159 puts -nonewline $fid [binary format "H*iH*" "1f8b0800" [clock seconds] "0003"] 1160 puts -nonewline $fid [zlib deflate $data] 1161 puts -nonewline $fid [binary format i [zlib crc32 $data]] 1162 puts -nonewline $fid [binary format i [string length $data]] 1163 }] 1164 1165 set z [catch {close $fid}] 1166 1167 my incr counter 1168 1169 if { $x || $y || $z || ![file exists $file] || ![file isfile $file] || ![file readable $file] } { 1170 tk_messageBox -icon error -message "An error occurred while writing to \"$file\"" 1171 } elseif {$counter <= $recs_val} { 1172 ${config}.stat configure -text "record $counter of $recs_val" 1173 set after_handle [after 100 [myproc acquire_register_loop]] 1174 return 1175 } 1176 1177 ${config}.stat configure -text {} 1178 ${config}.recs_field configure -state normal 1179 ${config}.sequence configure -state active 1180 ${config}.acquire configure -state active 1181 ${config}.register configure -state active 1182 1183 } 1184 1185 # ------------------------------------------------------------------------- 1186 1187 Class MemDisplay -superclass Display -parameter { 1188 {number} 1189 {master} 1190 } 1191 1192 # ------------------------------------------------------------------------- 1193 1194 MemDisplay instproc init {} { 1195 my instvar data xvec yvec 1196 1197 set xvec [vector #auto] 1198 set yvec [vector #auto] 1199 1200 # fill one vector for the x axis 1201 $xvec seq 0 10000 1202 1203 my reset 1204 1205 my setup 1206 1207 next 1208 } 1209 1210 # ------------------------------------------------------------------------- 1211 1212 MemDisplay instproc destroy {} { 1213 next 1214 } 1215 1216 # ------------------------------------------------------------------------- 1217 1218 MemDisplay instproc reset {} { 1219 my instvar data xvec yvec 1220 1221 set data {} 1222 1223 $yvec set {} 1224 } 1225 1226 # ------------------------------------------------------------------------- 1227 1228 MemDisplay instproc start {} { 1229 my instvar config 1230 1231 trace add variable [myvar data] write [myproc data_update] 1232 trace add variable [myvar last] write [myproc data_update] 1233 } 1234 1235 # ------------------------------------------------------------------------- 1236 1237 MemDisplay instproc setup {} { 1238 my instvar master 1239 my instvar data xvec yvec 1240 my instvar config auto thrs thrs_val disp_val trig_val 1241 1242 # create a graph widget and show a grid 1243 set graph [graph ${master}.graph -height 250 -leftmargin 80] 1244 $graph crosshairs configure -hide no -linewidth 2 -dashes { 1 1 } 1245 $graph grid configure -hide no 1246 $graph legend configure -hide yes 1247 $graph axis configure x -min 0 -max 10000 1248 # $graph axis configure y -min 0 -max 4100 1249 1250 scale ${master}.last -orient horizontal -from 1 -to 105 -tickinterval 0 -variable [myvar last] 1251 1252 set config [frame ${master}.config] 1253 1254 button ${config}.acquire -text Acquire \ 1255 -bg green -activebackground green -command [myproc acquire] 1256 button ${config}.register -text Register \ 1257 -bg lightblue -activebackground lightblue -command [myproc register] 1258 1259 grid ${config}.acquire -sticky ew -pady 3 -padx 5 1260 grid ${config}.register -sticky ew -pady 3 -padx 5 1261 1262 grid ${graph} -row 0 -column 0 -sticky news 1263 grid ${config} -row 0 -column 1 1264 1265 grid ${master}.last -row 1 -column 0 -columnspan 2 -sticky ew 1266 1267 grid rowconfigure ${master} 0 -weight 1 1268 grid columnconfigure ${master} 0 -weight 1 1269 grid columnconfigure ${master} 1 -weight 0 -minsize 80 1270 1271 # enable zooming 1272 Blt_ZoomStack $graph 1273 1274 #bind .graph <Motion> {%W crosshairs configure -position @%x,%y} 1275 1276 # create one element with data for the x and y axis, no dots 1277 $graph element create Spectrum -symbol none -xdata $xvec -ydata $yvec 1278 } 1279 1280 # ------------------------------------------------------------------------- 1281 1282 MemDisplay instproc data_update args { 1283 my instvar data yvec last 1284 1285 set first [expr {$last - 1}] 1286 $yvec set [lrange $data ${first}0000 ${last}0000] 1287 } 1288 1289 # ------------------------------------------------------------------------- 1290 1291 MemDisplay instproc save_data {data} { 1292 set file [tk_getSaveFile] 1293 if {[string equal $file {}]} { 1294 return 1295 } 1296 1297 set x [catch {set fid [open $file w+]}] 1298 set y [catch {puts $fid $data}] 1299 set z [catch {close $fid}] 1300 1301 if { $x || $y || $z || ![file exists $file] || ![file isfile $file] || ![file readable $file] } { 1302 tk_messageBox -icon error \ 1303 -message "An error occurred while writing to \"$file\"" 1304 } else { 1305 tk_messageBox -icon info \ 1306 -message "File \"$file\" written successfully" 1307 } 1308 } 1309 1310 # ------------------------------------------------------------------------- 1311 1312 MemDisplay instproc acquire {} { 1313 my usbCmdRead 00040000 1 524288 1314 # my usbCmdRead 00060000 1 1048576 1315 } 1316 1317 # ------------------------------------------------------------------------- 1318 1319 MemDisplay instproc register {} { 1320 my save_data [my set data] 1321 } 1322 1323 # ------------------------------------------------------------------------- 1324 1325 namespace export MemDisplay 1326 namespace export EptDisplay 859 1327 namespace export HstDisplay 860 1328 namespace export OscDisplay … … 888 1356 ::mca::CfgDisplay cfg -master $config 889 1357 1358 set window [frame ${notebook}.ept] 1359 $notebook insert end -text "EPT" -window $window -fill both 1360 ::mca::EptDisplay ept -master $window 1361 1362 #set window [frame ${notebook}.mem] 1363 #$notebook insert end -text "Memory test" -window $window -fill both 1364 #::mca::MemDisplay mem -master $window 1365 890 1366 set usb_handle {} 891 1367 … … 893 1369 set answer [tk_messageBox -icon error -type retrycancel \ 894 1370 -message {Cannot access USB device} -detail $usb_handle] 895 if {[string equal $answer cancel]} exit1371 if {[string equal $answer cancel]} break 896 1372 } 897 1373 898 1374 # cfg reset 899 set reset_command [usb::convert 00000000] 900 if {[catch {$usb_handle writeRaw $reset_command} result]} { 901 puts {Error during write} 902 puts $result 903 } 1375 cfg reset 904 1376 905 1377 cfg start … … 912 1384 osc_$i restart 913 1385 } 1386 1387 ept start 1388 #mem start
Note:
See TracChangeset
for help on using the changeset viewer.