From: SourceForge.net <no...@so...> - 2010-03-02 14:37:30
|
Bugs item #2953593, was opened at 2010-02-17 16:12 Message generated for change (Comment added) made by ferrieux You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2953593&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 24. Channel Commands Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Emiliano (egavilan) Assigned to: Andreas Kupries (andreas_kupries) Summary: [gets $fd data] returns 0 in nonblocking mode Initial Comment: Reading a serial port in nonblocking mode sometimes returns 0 for the number of bytes read. The [gets] documentation states "If varName is specified and an empty string is returned in varName because of end-of-file or because of insufficient data in non-blocking mode, then the return count is -1". In this case I expect either -1 or 10 (the length of the incoming message from the device, which never sends empty lines). The next script shows the issue: =========================================================================== proc readserial {fd} { global short empty normal set chars [chan gets $fd data] if {$chars == -1} { if {[chan eof $fd]} { chan close $fd done } incr short return } # this shouldn't happen, but it does anyway if {$chars == 0} { incr empty return } incr normal if {$normal == 10000} { done } } proc done {} { global short empty chan puts "Empty reads: $empty\nShort reads: $short" exit } set empty 0 set short 0 set normal 0 set fd [open /dev/ttyUSB0 r] chan configure $fd \ -mode 9600,n,8,1 \ -buffering line \ -blocking 0 chan event $fd readable [list readserial $fd] =========================================================================== Notes: In blocking mode there's no "empty" reads. This happen in both windows and linux. The serial port is a usb<->serial adapter. The whole script has a Tk gui, showing the value read in a label. ---------------------------------------------------------------------- >Comment By: Alexandre Ferrieux (ferrieux) Date: 2010-03-02 15:37 Message: strace appreciated ;-) ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2953593&group_id=10894 |