Mercurial > avr_jtag
diff tests/cp_ping.py @ 1:f7c60e525801
cptest and cp_ping.py to test cmd_proto.c.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sat, 21 Feb 2009 20:20:06 +0800 |
parents | |
children | e410832c3280 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/cp_ping.py Sat Feb 21 20:20:06 2009 +0800 @@ -0,0 +1,59 @@ +import struct + +CP_CMD_PING = 1 +CP_CMD_PONG = 2 + +def csum_add(csum, c): + return (((csum << 3) | (csum >> 5)) ^ c) & 0xff + +def cp_ping(seq, data): + csum = 0 + csum = csum_add(0, CP_CMD_PING) + for c in data: + csum = csum_add(csum, ord(c)) + pass + csum = csum_add(csum, 0) + + cmd_str = struct.pack('BBBBB', ord('J'), ord('C'), seq, + len(data) + 1, CP_CMD_PING) + cmd_str = cmd_str + data + chr(csum) + return cmd_str + +def get_reply(fo): + import fcntl, os + import time + + reply = '' + fcntl.fcntl(fo.fileno(), fcntl.F_SETFL, os.O_NONBLOCK) + while True: + try: + s = os.read(fo.fileno(), 256) + except OSError: + time.sleep(0.5) + try: + s = os.read(fo.fileno(), 256) + except OSError: + break + pass + reply = reply + s + pass + return reply + +if __name__ == '__main__': + import sys + + if len(sys.argv) != 2: + print >> sys.stderr, 'Usage: prog <port device>' + sys.exit(1) + pass + + port = sys.argv[1] + + fo = open(port, 'r+b') + cmd_str = cp_ping(0, 'hello') + fo.write(cmd_str) + fo.flush() + + reply = get_reply(fo) + print repr(reply) + pass