URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
Compare Revisions
- This comparison shows the changes necessary to convert path
/openmsp430/trunk/tools/openmsp430-gdbproxy
- from Rev 124 to Rev 158
- ↔ Reverse comparison
Rev 124 → Rev 158
/commands.tcl
48,36 → 48,36
set cmd_tail [string range $rsp_cmd 1 [string length $rsp_cmd]] |
|
switch -exact -- [string index $rsp_cmd 0] { |
"!" {set rsp_answer "OK"} |
"?" {set rsp_answer [rsp_stop_reply $sock "?"]} |
"A" {} |
"b" {} |
"c" {set rsp_answer [rsp_c $sock $cmd_tail]} |
"C" {set rsp_answer [rsp_c $sock $cmd_tail]} |
"D" {} |
"F" {} |
"g" {set rsp_answer [rsp_g]} |
"G" {set rsp_answer [rsp_G $cmd_tail]} |
"H" {set rsp_answer ""} |
"i" {} |
"I" {} |
"k" {set rsp_answer [rsp_k $cmd_tail]} |
"m" {set rsp_answer [rsp_m $cmd_tail]} |
"M" {set rsp_answer [rsp_M $cmd_tail]} |
"p" {} |
"P" {} |
"q" {set rsp_answer [rsp_q $sock $cmd_tail]} |
"Q" {} |
"R" {} |
"s" {set rsp_answer [rsp_s $sock $cmd_tail]} |
"S" {set rsp_answer [rsp_s $sock $cmd_tail]} |
"t" {} |
"T" {} |
"v" {} |
"X" {} |
"z" {set rsp_answer [rsp_z $sock $cmd_tail]} |
"Z" {set rsp_answer [rsp_Z $sock $cmd_tail]} |
default {} |
"!" {set rsp_answer "OK"} |
"?" {set rsp_answer [rsp_stop_reply $sock "?"]} |
"A" {} |
"b" {} |
"c" {set rsp_answer [rsp_c $sock $cmd_tail]} |
"C" {set rsp_answer [rsp_c $sock $cmd_tail]} |
"D" {} |
"F" {} |
"g" {set rsp_answer [rsp_g]} |
"G" {set rsp_answer [rsp_G $cmd_tail]} |
"H" {set rsp_answer ""} |
"i" {} |
"I" {} |
"k" {set rsp_answer [rsp_k $cmd_tail]} |
"m" {set rsp_answer [rsp_m $cmd_tail]} |
"M" {set rsp_answer [rsp_M $cmd_tail]} |
"p" {} |
"P" {} |
"q" {set rsp_answer [rsp_q $sock $cmd_tail]} |
"Q" {} |
"R" {} |
"s" {set rsp_answer [rsp_s $sock $cmd_tail]} |
"S" {set rsp_answer [rsp_s $sock $cmd_tail]} |
"t" {} |
"T" {} |
"v" {} |
"X" {} |
"z" {set rsp_answer [rsp_z $sock $cmd_tail]} |
"Z" {set rsp_answer [rsp_Z $sock $cmd_tail]} |
default {} |
} |
|
|
96,15 → 96,17
#-----------------------------------------------------------------------------# |
proc rsp_g {} { |
|
global CpuNr |
|
# Read register value |
set reg_val [ReadRegAll] |
set reg_val [ReadRegAll $CpuNr] |
|
# Format answer |
set rsp_answer "" |
for {set i 0} {$i < [llength $reg_val]} {incr i} { |
|
regexp {0x(..)(..)} [lindex $reg_val $i] match msb lsb |
append rsp_answer "$lsb$msb" |
regexp {0x(..)(..)} [lindex $reg_val $i] match msb lsb |
append rsp_answer "$lsb$msb" |
} |
|
return $rsp_answer |
115,6 → 117,8
#-----------------------------------------------------------------------------# |
proc rsp_G {cmd} { |
|
global CpuNr |
|
# Format register value |
set num_reg [expr [string length $cmd]/4] |
|
121,13 → 125,13
set reg_val "" |
for {set i 0} {$i < $num_reg} {incr i} { |
|
set lsb "[string index $cmd [expr $i*4+0]][string index $cmd [expr $i*4+1]]" |
set msb "[string index $cmd [expr $i*4+2]][string index $cmd [expr $i*4+3]]" |
lappend reg_val "0x$msb$lsb" |
set lsb "[string index $cmd [expr $i*4+0]][string index $cmd [expr $i*4+1]]" |
set msb "[string index $cmd [expr $i*4+2]][string index $cmd [expr $i*4+3]]" |
lappend reg_val "0x$msb$lsb" |
} |
|
# Write registers |
WriteRegAll $reg_val |
WriteRegAll $CpuNr $reg_val |
|
return "OK" |
} |
137,8 → 141,10
#-----------------------------------------------------------------------------# |
proc rsp_k {cmd} { |
|
global CpuNr |
|
# Reset & Stop CPU |
ExecutePOR_Halt |
ExecutePOR_Halt $CpuNr |
|
return "-1" |
} |
149,6 → 155,7
proc rsp_M {cmd} { |
|
global mem_breakpoint |
global CpuNr |
|
# Parse command |
regexp {(.*),(.*):(.*)} $cmd match addr length data |
158,26 → 165,26
# Format data |
set mem_val "" |
for {set i 0} {$i<$length} {incr i} { |
lappend mem_val "0x[string range $data [expr $i*2] [expr $i*2+1]]" |
lappend mem_val "0x[string range $data [expr $i*2] [expr $i*2+1]]" |
} |
|
# Write memory |
if {$length==2} { |
regexp {(..)(..)} $data match data_lo data_hi |
WriteMem 0 "0x$addr" "0x${data_hi}${data_lo}" |
regexp {(..)(..)} $data match data_lo data_hi |
WriteMem $CpuNr 0 "0x$addr" "0x${data_hi}${data_lo}" |
} else { |
WriteMemQuick8 "0x$addr" $mem_val |
WriteMemQuick8 $CpuNr "0x$addr" $mem_val |
} |
|
# Eventually re-set the software breakpoints in case they have been overwritten |
set addr_start [format %d "0x$addr"] |
foreach {brk_addr brk_val} [array get mem_breakpoint] { |
set brk_addr_dec [format %d "0x$brk_addr"] |
set brk_addr_offset [expr $brk_addr_dec-$addr_start] |
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} { |
set mem_breakpoint($brk_addr) [lindex $mem_val $brk_addr_offset] |
WriteMem 0 "0x$brk_addr" 0x4343 |
} |
set brk_addr_dec [format %d "0x$brk_addr"] |
set brk_addr_offset [expr $brk_addr_dec-$addr_start] |
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} { |
set mem_breakpoint($brk_addr) [lindex $mem_val $brk_addr_offset] |
WriteMem $CpuNr 0 "0x$brk_addr" 0x4343 |
} |
} |
|
return "OK" |
190,6 → 197,7
proc rsp_m {cmd} { |
|
global mem_breakpoint |
global CpuNr |
|
# Parse command |
regexp {(.*),(.*)} $cmd match addr length |
197,17 → 205,17
set length [format %d "0x$length"] |
|
# Read memory |
set data [ReadMemQuick8 "0x$addr" $length] |
set data [ReadMemQuick8 $CpuNr "0x$addr" $length] |
|
|
# Eventually replace read data by the original software breakpoint value |
set addr_start [format %d "0x$addr"] |
foreach {brk_addr brk_val} [array get mem_breakpoint] { |
set brk_addr_dec [format %d "0x$brk_addr"] |
set brk_addr_offset [expr $brk_addr_dec-$addr_start] |
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} { |
set data [lreplace $data $brk_addr_offset $brk_addr_offset "0x$mem_breakpoint($brk_addr)"] |
} |
set brk_addr_dec [format %d "0x$brk_addr"] |
set brk_addr_offset [expr $brk_addr_dec-$addr_start] |
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} { |
set data [lreplace $data $brk_addr_offset $brk_addr_offset "0x$mem_breakpoint($brk_addr)"] |
} |
} |
|
# Format data |
224,6 → 232,7
proc rsp_Z {sock cmd} { |
|
global mem_breakpoint |
global CpuNr |
|
# Parse command |
regexp {(.),(.*),(.*)} $cmd match type addr length |
230,41 → 239,41
set addr [format %04x "0x$addr"] |
|
switch -exact -- $type { |
"0" {# Memory breakpoint |
set mem_breakpoint($addr) [ReadMem 0 "0x$addr"] |
WriteMem 0 "0x$addr" 0x4343 |
return "OK" |
"0" {# Memory breakpoint |
set mem_breakpoint($addr) [ReadMem $CpuNr 0 "0x$addr"] |
WriteMem $CpuNr 0 "0x$addr" 0x4343 |
return "OK" |
} |
|
"1" {# Hardware breakpoint |
if {[SetHWBreak 1 [format "0x%04x" 0x$addr] 1 0]} { |
return "OK" |
} |
return "" |
"1" {# Hardware breakpoint |
if {[SetHWBreak $CpuNr 1 [format "0x%04x" 0x$addr] 1 0]} { |
return "OK" |
} |
return "" |
} |
|
"2" {# Write watchpoint |
if {[SetHWBreak 0 [format "0x%04x" 0x$addr] 0 1]} { |
return "OK" |
} |
return "" |
"2" {# Write watchpoint |
if {[SetHWBreak $CpuNr 0 [format "0x%04x" 0x$addr] 0 1]} { |
return "OK" |
} |
return "" |
} |
|
"3" {# Read watchpoint |
if {[SetHWBreak 0 [format "0x%04x" 0x$addr] 1 0]} { |
return "OK" |
} |
return "" |
"3" {# Read watchpoint |
if {[SetHWBreak $CpuNr 0 [format "0x%04x" 0x$addr] 1 0]} { |
return "OK" |
} |
return "" |
} |
|
"4" {# Access watchpoint |
if {[SetHWBreak 0 [format "0x%04x" 0x$addr] 1 1]} { |
return "OK" |
} |
return "" |
"4" {# Access watchpoint |
if {[SetHWBreak $CpuNr 0 [format "0x%04x" 0x$addr] 1 1]} { |
return "OK" |
} |
return "" |
} |
|
default {return ""} |
default {return ""} |
} |
} |
|
274,6 → 283,7
proc rsp_z {sock cmd} { |
|
global mem_breakpoint |
global CpuNr |
|
# Parse command |
regexp {(.),(.*),(.*)} $cmd match type addr length |
280,41 → 290,41
set addr [format %04x "0x$addr"] |
|
switch -exact -- $type { |
"0" {# Memory breakpoint |
WriteMem 0 "0x$addr" $mem_breakpoint($addr) |
unset mem_breakpoint($addr) |
return "OK" |
"0" {# Memory breakpoint |
WriteMem $CpuNr 0 "0x$addr" $mem_breakpoint($addr) |
unset mem_breakpoint($addr) |
return "OK" |
} |
|
"1" {# Hardware breakpoint |
if {[ClearHWBreak 1 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
"1" {# Hardware breakpoint |
if {[ClearHWBreak $CpuNr 1 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
} |
|
"2" {# Write watchpoint |
if {[ClearHWBreak 0 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
"2" {# Write watchpoint |
if {[ClearHWBreak $CpuNr 0 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
} |
|
"3" {# Read watchpoint |
if {[ClearHWBreak 0 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
"3" {# Read watchpoint |
if {[ClearHWBreak $CpuNr 0 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
} |
|
"4" {# Access watchpoint |
if {[ClearHWBreak 0 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
"4" {# Access watchpoint |
if {[ClearHWBreak $CpuNr 0 [format "0x%04x" 0x$addr]]} { |
return "OK" |
} |
return "" |
} |
|
default {return ""} |
default {return ""} |
} |
} |
|
323,17 → 333,19
#-----------------------------------------------------------------------------# |
proc rsp_c {sock cmd} { |
|
global CpuNr |
|
# Set address if required |
if {$cmd!=""} { |
set cmd [format %04x "0x$cmd"] |
SetPC "0x$cmd" |
set cmd [format %04x "0x$cmd"] |
SetPC $CpuNr "0x$cmd" |
} |
|
# Clear status |
ClrStatus |
ClrStatus $CpuNr |
|
# Continue |
ReleaseCPU |
ReleaseCPU $CpuNr |
|
|
return [rsp_stop_reply $sock "c"] |
344,20 → 356,22
#-----------------------------------------------------------------------------# |
proc rsp_s {sock cmd} { |
|
global CpuNr |
|
# Set address if required |
if {$cmd!=""} { |
set cmd [format %04x "0x$cmd"] |
SetPC "0x$cmd" |
set cmd [format %04x "0x$cmd"] |
SetPC $CpuNr "0x$cmd" |
} |
|
# Clear status |
ClrStatus |
ClrStatus $CpuNr |
|
# Read current PC value |
set pc [ReadReg 0] |
set pc [ReadReg $CpuNr 0] |
|
# Incremental step |
StepCPU |
StepCPU $CpuNr |
|
return [rsp_stop_reply $sock "s" $pc] |
} |
370,40 → 384,42
#-----------------------------------------------------------------------------# |
proc rsp_stop_reply {sock cmd {opt_val "0"}} { |
|
global CpuNr |
|
# Wait until halted |
while {![IsHalted]} { |
while {![IsHalted $CpuNr]} { |
|
# Wait a few milliseconds to prevent the gui from freezing |
after 100 {set end 1} |
vwait end |
# Wait a few milliseconds to prevent the gui from freezing |
after 100 {set end 1} |
vwait end |
|
# Check if we are interrupted by GDB |
fconfigure $sock -blocking 0 |
set break_char [read -nonewline $sock] |
fconfigure $sock -blocking 1 |
binary scan $break_char H* break_char |
if {$break_char=="03"} { |
putsVerbose "--> BREAK" |
HaltCPU |
} |
# Check if we are interrupted by GDB |
fconfigure $sock -blocking 0 |
set break_char [read -nonewline $sock] |
fconfigure $sock -blocking 1 |
binary scan $break_char H* break_char |
if {$break_char=="03"} { |
putsVerbose "--> BREAK" |
HaltCPU $CpuNr |
} |
} |
|
# Read some important registers |
set pc [ReadReg 0] |
set pc [ReadReg $CpuNr 0] |
regexp {0x(..)(..)} $pc match pc_hi pc_lo |
set r4 [ReadReg 4] |
set r4 [ReadReg $CpuNr 4] |
regexp {0x(..)(..)} $r4 match r4_hi r4_lo |
|
# In case of a single step command, make sure that the PC |
# value changes. If not, return an error otherwise GDB will |
# end-up in an infinite loop. |
if {$cmd == "s"} { |
if {$opt_val == $pc} { |
return "E05" |
} |
} |
#return "S05" |
return "T0500:$pc_lo$pc_hi;04:$r4_lo$r4_hi;" |
# In case of a single step command, make sure that the PC |
# value changes. If not, return an error otherwise GDB will |
# end-up in an infinite loop. |
if {$cmd == "s"} { |
if {$opt_val == $pc} { |
return "E05" |
} |
} |
#return "S05" |
return "T0500:$pc_lo$pc_hi;04:$r4_lo$r4_hi;" |
} |
|
|
414,10 → 430,10
|
switch -regexp -- $cmd { |
|
"C" {set rsp_answer ""} |
"Offsets" {set rsp_answer "Text=0;Data=0;Bss=0"} |
"Rcmd,.+" {set rsp_answer [rsp_qRcmd $sock $cmd]} |
default {set rsp_answer ""} |
"C" {set rsp_answer ""} |
"Offsets" {set rsp_answer "Text=0;Data=0;Bss=0"} |
"Rcmd,.+" {set rsp_answer [rsp_qRcmd $sock $cmd]} |
default {set rsp_answer ""} |
} |
return $rsp_answer |
} |
433,20 → 449,22
#-----------------------------------------------------------------------------# |
proc rsp_qRcmd {sock cmd} { |
|
global CpuNr |
|
regsub {^Rcmd,} $cmd {} cmd |
set cmd [binary format H* $cmd]; # Convert hex to ascii |
|
switch -exact -- $cmd { |
"erase all" {;# Convert ascii to hex |
binary scan "Erasing target program memory..." H* text1 |
binary scan " Erased OK\n" H* text2 |
;# Execute erase command |
sendRSPpacket $sock "O$text1" |
EraseROM |
sendRSPpacket $sock "O$text2" |
set rsp_answer "OK" |
"erase all" {;# Convert ascii to hex |
binary scan "Erasing target program memory..." H* text1 |
binary scan " Erased OK\n" H* text2 |
;# Execute erase command |
sendRSPpacket $sock "O$text1" |
EraseROM $CpuNr |
sendRSPpacket $sock "O$text2" |
set rsp_answer "OK" |
} |
default {set rsp_answer "OK"} |
default {set rsp_answer "OK"} |
} |
|
return $rsp_answer |
/server.tcl
48,38 → 48,40
|
global server |
if {![info exists server(socket)]} { |
putsLog "Open socket on port $server(port) ... " 1 |
if {[catch {socket -server clientAccept $server(port)} server(socket)]} { |
putsLog "failed" |
putsLog "ERROR: $server(socket)." |
unset server(socket) |
return 0 |
} |
putsLog "done" |
putsLog "INFO: Waiting on TCP port $server(port)" |
putsLog "Open socket on port $server(port) ... " 1 |
if {[catch {socket -server clientAccept $server(port)} server(socket)]} { |
putsLog "failed" |
putsLog "ERROR: $server(socket)." |
unset server(socket) |
return 0 |
} |
putsLog "done" |
putsLog "INFO: Waiting on TCP port $server(port)" |
} else { |
putsLog "Server is already up." |
putsLog "Server is already up." |
} |
return 1 |
} |
|
proc stopServer { } { |
global serial_status |
global omsp_info |
global server |
global CpuNr |
|
if {[info exists server(socket)]} { |
set port [lindex [fconfigure $server(socket) -sockname] 2] |
putsLog "Stop server (port $port)" |
close $server(socket) |
unset server(socket) |
set port [lindex [fconfigure $server(socket) -sockname] 2] |
putsLog "Stop server (port $port)" |
close $server(socket) |
unset server(socket) |
} |
if {$serial_status} { |
ReleaseDevice 0xfffe |
if {$omsp_info($CpuNr,connected)} { |
ReleaseDevice $CpuNr 0xfffe |
} |
} |
|
proc clientAccept {sock addr port} { |
global clients |
global CpuNr |
|
putsLog "Accept client: $addr ($port)\n" |
|
87,57 → 89,57
fconfigure $sock -buffering none |
fileevent $sock readable [list receiveRSPpacket $sock] |
|
InitBreakUnits |
InitBreakUnits $CpuNr |
} |
|
proc startServerGUI { } { |
global serial_device |
global hw_break |
global omsp_conf |
global omsp_info |
global CpuNr |
|
# Connect to device |
if {![GetDevice]} { |
.info.cpu.con configure -text "Connection problem" -fg red |
putsLog "ERROR: Could not open \"$serial_device\"" |
putsLog "" |
putsLog " -------------------------------------------------------------" |
putsLog " !!!! Please consider the following options: !!!!" |
putsLog " !!!! !!!!" |
putsLog " !!!! - check the physical connection to the board. !!!!" |
putsLog " !!!! - adjust the serial connection baudrate. !!!!" |
putsLog " !!!! - don't forget to reset the serial debug interface !!!!" |
putsLog " !!!! between each attempt. !!!!" |
putsLog " -------------------------------------------------------------" |
putsLog "" |
return 0 |
if {![GetDevice $CpuNr]} { |
.info.cpu.con configure -text "Connection problem" -fg red |
putsLog "ERROR: Could not open \"$omsp_conf(device)\"" |
putsLog "" |
putsLog " -------------------------------------------------------------" |
putsLog " !!!! Please consider the following options: !!!!" |
putsLog " !!!! !!!!" |
putsLog " !!!! - check the physical connection to the board. !!!!" |
putsLog " !!!! - adjust the serial connection baudrate. !!!!" |
putsLog " !!!! - don't forget to reset the serial debug interface !!!!" |
putsLog " !!!! between each attempt. !!!!" |
putsLog " -------------------------------------------------------------" |
putsLog "" |
return 0 |
} |
|
if {$omsp_info(alias)==""} { |
.info.cpu.con configure -text "Connected" -fg "\#00ae00" |
if {$omsp_info($CpuNr,alias)==""} { |
.info.cpu.con configure -text "Connected" -fg "\#00ae00" |
} else { |
.info.cpu.con configure -text "Connected to $omsp_info(alias)" -fg "\#00ae00" |
.info.cpu.con configure -text "Connected to $omsp_info($CpuNr,alias)" -fg "\#00ae00" |
} |
|
# Display info |
putsLog "INFO: Sucessfully connected with the openMSP430 target." |
set sizes [GetCPU_ID_SIZE] |
if {$omsp_info(asic)} { |
putsLog "INFO: CPU Version - $omsp_info(cpu_ver) / ASIC" |
set sizes [GetCPU_ID_SIZE $CpuNr] |
if {$omsp_info($CpuNr,asic)} { |
putsLog "INFO: CPU Version - $omsp_info($CpuNr,cpu_ver) / ASIC" |
} else { |
putsLog "INFO: CPU Version - $omsp_info(cpu_ver) / FPGA" |
putsLog "INFO: CPU Version - $omsp_info($CpuNr,cpu_ver) / FPGA" |
} |
putsLog "INFO: User Version - $omsp_info(user_ver)" |
if {$omsp_info(cpu_ver)==1} { |
putsLog "INFO: Hardware Multiplier - --" |
} elseif {$omsp_info(mpy)} { |
putsLog "INFO: Hardware Multiplier - Yes" |
putsLog "INFO: User Version - $omsp_info($CpuNr,user_ver)" |
if {$omsp_info($CpuNr,cpu_ver)==1} { |
putsLog "INFO: Hardware Multiplier - --" |
} elseif {$omsp_info($CpuNr,mpy)} { |
putsLog "INFO: Hardware Multiplier - Yes" |
} else { |
putsLog "INFO: Hardware Multiplier - No" |
putsLog "INFO: Hardware Multiplier - No" |
} |
putsLog "INFO: Program Memory Size - $omsp_info(pmem_size) B" |
putsLog "INFO: Data Memory Size - $omsp_info(dmem_size) B" |
putsLog "INFO: Peripheral Address Space - $omsp_info(per_size) B" |
putsLog "INFO: $hw_break(num) Hardware Break/Watch-point unit(s) detected" |
putsLog "INFO: Program Memory Size - $omsp_info($CpuNr,pmem_size) B" |
putsLog "INFO: Data Memory Size - $omsp_info($CpuNr,dmem_size) B" |
putsLog "INFO: Peripheral Address Space - $omsp_info($CpuNr,per_size) B" |
putsLog "INFO: $omsp_info($CpuNr,hw_break) Hardware Break/Watch-point unit(s) detected" |
putsLog "" |
|
# Activate Load TCL script section |
150,20 → 152,29
.info.cpu.more configure -state normal |
|
# Reset & Stop CPU |
ExecutePOR_Halt |
ExecutePOR_Halt $CpuNr |
|
# Start server for GDB |
if {![startServer]} { |
.info.server.con configure -text "Connection problem" -fg red |
return 0 |
.info.server.con configure -text "Connection problem" -fg red |
return 0 |
} |
.info.server.con configure -text "Running" -fg "\#00ae00" |
|
# Disable gui entries |
.connect.config.serial_port.p1 configure -state disabled |
.connect.config.serial_baudrate.p2 configure -state disabled |
.connect.config.server_port.p configure -state disabled |
.connect.start.but configure -state disabled |
.connect.cfg.if.config1.adapter.p1 configure -state disabled |
.connect.cfg.if.config2.adapter.p2 configure -state disabled |
.connect.cfg.if.config1.serial_port.p1 configure -state disabled |
.connect.cfg.if.config2.serial_port.p2 configure -state disabled |
.connect.cfg.ad.server_port.p0 configure -state disabled |
.connect.cfg.ad.server_port.p1 configure -state disabled |
.connect.cfg.ad.server_port.p2 configure -state disabled |
.connect.cfg.ad.server_port.p3 configure -state disabled |
.connect.cfg.ad.i2c_addr.s0 configure -state disabled |
.connect.cfg.ad.i2c_addr.s1 configure -state disabled |
.connect.cfg.ad.i2c_addr.s2 configure -state disabled |
.connect.cfg.ad.i2c_addr.s3 configure -state disabled |
.connect.cfg.ad.i2c_nr.s configure -state disabled |
} |
|
############################################################################### |
174,6 → 185,8
|
proc receiveRSPpacket {sock} { |
|
global CpuNr |
|
# Get client info |
set ip [lindex [fconfigure $sock -peername] 0] |
set port [lindex [fconfigure $sock -peername] 2] |
183,47 → 196,47
set rsp_cmd [getDebugChar $sock] |
set rsp_sum "" |
if {[string eq $rsp_cmd "\$"]} { |
set rx_packet 1 |
set rsp_cmd "" |
set rx_packet 1 |
set rsp_cmd "" |
} else { |
binary scan $rsp_cmd H* rsp_cmd |
if {$rsp_cmd=="03"} { |
putsVerbose "--> BREAK" |
HaltCPU |
} |
binary scan $rsp_cmd H* rsp_cmd |
if {$rsp_cmd=="03"} { |
putsVerbose "--> BREAK" |
HaltCPU $CpuNr |
} |
} |
# Receive packet |
while {$rx_packet} { |
set char [getDebugChar $sock] |
if {$char==-1} { |
set rx_packet 0 |
} elseif {[string eq $char "\#"]} { |
set rx_packet 0 |
set rsp_sum [getDebugChar $sock] |
append rsp_sum [getDebugChar $sock] |
set char [getDebugChar $sock] |
if {$char==-1} { |
set rx_packet 0 |
} elseif {[string eq $char "\#"]} { |
set rx_packet 0 |
set rsp_sum [getDebugChar $sock] |
append rsp_sum [getDebugChar $sock] |
|
# Re-calculate the checksum |
set tmp_sum [RSPcheckSum $rsp_cmd] |
# Re-calculate the checksum |
set tmp_sum [RSPcheckSum $rsp_cmd] |
|
# Acknowledge and analyse the packet |
if {[string eq $rsp_sum $tmp_sum]} { |
putDebugChar $sock "+" |
# Acknowledge and analyse the packet |
if {[string eq $rsp_sum $tmp_sum]} { |
putDebugChar $sock "+" |
|
# Remove escape characters |
set rsp_cmd [removeEscapeChar $rsp_cmd] |
putsVerbose "+ w $rsp_cmd" |
# Remove escape characters |
set rsp_cmd [removeEscapeChar $rsp_cmd] |
putsVerbose "+ w $rsp_cmd" |
|
# Parse packet and send back the answer |
set rsp_answer [rspParse $sock $rsp_cmd] |
if {$rsp_answer != "-1"} { |
sendRSPpacket $sock $rsp_answer |
} |
} else { |
putDebugChar $sock "-" |
} |
} else { |
append rsp_cmd $char |
} |
# Parse packet and send back the answer |
set rsp_answer [rspParse $sock $rsp_cmd] |
if {$rsp_answer != "-1"} { |
sendRSPpacket $sock $rsp_answer |
} |
} else { |
putDebugChar $sock "-" |
} |
} else { |
append rsp_cmd $char |
} |
} |
} |
|
242,16 → 255,16
# Send the packet until the "+" aknowledge is received |
set send_ok 0 |
while {!$send_ok} { |
putDebugChar $sock "$rsp_packet" |
set char [getDebugChar $sock] |
putDebugChar $sock "$rsp_packet" |
set char [getDebugChar $sock] |
|
putsVerbose "$char r $rsp_cmd" |
putsVerbose "$char r $rsp_cmd" |
|
if {$char==-1} { |
set send_ok 1 |
} elseif {[string eq $char "+"]} { |
set send_ok 1 |
} |
if {$char==-1} { |
set send_ok 1 |
} elseif {[string eq $char "+"]} { |
set send_ok 1 |
} |
} |
} |
|
266,8 → 279,8
|
set rsp_sum 0 |
for {set i 0} {$i<[string length $rsp_cmd]} {incr i} { |
scan [string index $rsp_cmd $i] "%c" char_val |
set rsp_sum [expr $rsp_sum+$char_val] |
scan [string index $rsp_cmd $i] "%c" char_val |
set rsp_sum [expr $rsp_sum+$char_val] |
} |
set rsp_sum [format %02x [expr $rsp_sum%256]] |
|
311,13 → 324,13
set port [lindex [fconfigure $sock -peername] 2] |
|
if {[eof $sock] || [catch {set char [read $sock 1]}]} { |
# end of file or abnormal connection drop |
close $sock |
putsLog "Connection closed: $ip ($port)\n" |
unset clients(addr,$sock) |
return -1 |
# end of file or abnormal connection drop |
close $sock |
putsLog "Connection closed: $ip ($port)\n" |
unset clients(addr,$sock) |
return -1 |
} else { |
return $char |
return $char |
} |
} |
|
338,7 → 351,7
|
# Destroy windows if already existing |
if {[lsearch -exact [winfo children .] .omsp_extra_info]!=-1} { |
destroy .omsp_extra_info |
destroy .omsp_extra_info |
} |
|
# Create master window |
349,8 → 362,8
|
# Title |
set title "openMSP430" |
if {$omsp_info(alias)!=""} { |
set title $omsp_info(alias) |
if {$omsp_info($CpuNr,alias)!=""} { |
set title $omsp_info($CpuNr,alias) |
} |
label .omsp_extra_info.title -text "$title" -anchor center -fg "\#00ae00" -font {-weight bold -size 16} |
pack .omsp_extra_info.title -side top -padx {20 20} -pady {20 10} |
371,45 → 384,45
# Fill the text widget will configuration info |
.omsp_extra_info.extra.text tag configure bold -font {-family TkFixedFont -weight bold} |
.omsp_extra_info.extra.text insert end "Configuration\n\n" bold |
.omsp_extra_info.extra.text insert end [format "CPU Version : %5s\n" $omsp_info(cpu_ver)] |
.omsp_extra_info.extra.text insert end [format "User Version : %5s\n" $omsp_info(user_ver)] |
if {$omsp_info(cpu_ver)==1} { |
.omsp_extra_info.extra.text insert end [format "CPU Version : %5s\n" $omsp_info($CpuNr,cpu_ver)] |
.omsp_extra_info.extra.text insert end [format "User Version : %5s\n" $omsp_info($CpuNr,user_ver)] |
if {$omsp_info($CpuNr,cpu_ver)==1} { |
.omsp_extra_info.extra.text insert end [format "Implementation : %5s\n" --] |
} elseif {$omsp_info(asic)==0} { |
} elseif {$omsp_info($CpuNr,asic)==0} { |
.omsp_extra_info.extra.text insert end [format "Implementation : %5s\n" FPGA] |
} elseif {$omsp_info(asic)==1} { |
} elseif {$omsp_info($CpuNr,asic)==1} { |
.omsp_extra_info.extra.text insert end [format "Implementation : %5s\n" ASIC] |
} |
if {$omsp_info(mpy)==1} { |
if {$omsp_info($CpuNr,mpy)==1} { |
.omsp_extra_info.extra.text insert end [format "Hardware Multiplier support: %5s\n" Yes] |
} elseif {$omsp_info(mpy)==0} { |
} elseif {$omsp_info($CpuNr,mpy)==0} { |
.omsp_extra_info.extra.text insert end [format "Hardware Multiplier support: %5s\n" No] |
} else { |
.omsp_extra_info.extra.text insert end [format "Hardware Multiplier support: %5s\n" --] |
} |
.omsp_extra_info.extra.text insert end [format "Program memory size : %5s B\n" $omsp_info(pmem_size)] |
.omsp_extra_info.extra.text insert end [format "Data memory size : %5s B\n" $omsp_info(dmem_size)] |
.omsp_extra_info.extra.text insert end [format "Peripheral address space : %5s B\n" $omsp_info(per_size)] |
if {$omsp_info(alias)==""} { |
.omsp_extra_info.extra.text insert end [format "Program memory size : %5s B\n" $omsp_info($CpuNr,pmem_size)] |
.omsp_extra_info.extra.text insert end [format "Data memory size : %5s B\n" $omsp_info($CpuNr,dmem_size)] |
.omsp_extra_info.extra.text insert end [format "Peripheral address space : %5s B\n" $omsp_info($CpuNr,per_size)] |
if {$omsp_info($CpuNr,alias)==""} { |
.omsp_extra_info.extra.text insert end [format "Alias : %5s\n\n\n" None] |
} else { |
.omsp_extra_info.extra.text insert end [format "Alias : %5s\n\n\n" $omsp_info(alias)] |
.omsp_extra_info.extra.text insert end [format "Alias : %5s\n\n\n" $omsp_info($CpuNr,alias)] |
} |
|
.omsp_extra_info.extra.text insert end "Extra Info\n\n" bold |
|
if {$omsp_info(alias)!=""} { |
if {$omsp_info($CpuNr,alias)!=""} { |
|
set aliasEXTRA [lsort -increasing [array names omsp_info -glob "extra,*"]] |
if {[llength $aliasEXTRA]} { |
set aliasEXTRA [lsort -increasing [array names omsp_info -glob "extra,*"]] |
if {[llength $aliasEXTRA]} { |
|
foreach currentEXTRA $aliasEXTRA { |
regexp {^.+,.+,(.+)$} $currentEXTRA whole_match extraATTR |
.omsp_extra_info.extra.text insert end [format "%-15s: %s\n" $extraATTR $omsp_info($currentEXTRA)] |
} |
.omsp_extra_info.extra.text insert end "\n\n" |
} |
foreach currentEXTRA $aliasEXTRA { |
regexp {^.+,.+,(.+)$} $currentEXTRA whole_match extraATTR |
.omsp_extra_info.extra.text insert end [format "%-15s: %s\n" $extraATTR $omsp_info($CpuNr,$currentEXTRA)] |
} |
.omsp_extra_info.extra.text insert end "\n\n" |
} |
} else { |
.omsp_extra_info.extra.text insert end "No alias found in 'omsp_alias.xml' file" |
.omsp_extra_info.extra.text insert end "No alias found in 'omsp_alias.xml' file" |
} |
} |