mmu_man

dump from CMS 50F 3.7 v0.3

Aug 17th, 2014
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. # Contec CMS 50F firmware 3.7 dumper
  4. # (C) 2014, François Revol <revol@free.fr>
  5.  
  6. #cf. http://elinux.org/Serial_port_programming
  7.  
  8. import serial
  9. import sys
  10. import time
  11.  
  12.  
  13. def send_cmd(p, c):
  14.     print "> %s" % c
  15.     c = c.replace(' ', '')
  16.     c = c.decode("hex")
  17.     #print c.encode("hex")
  18.     p.write(c)
  19.     #p.flush()
  20.  
  21. def recv_data(p, l=None):
  22.     data = ''
  23.     while l is None or len(data) < l:
  24.         time.sleep(0.5)
  25.         if p.inWaiting() < 1:
  26.             print "No more data..."
  27.             # XXX: do something?
  28.             if l is None:
  29.                 break
  30.         want = max(p.inWaiting(), 1)
  31.         if l is not None:
  32.             want = min(want, l - len(data))
  33.         # just for nicer hex dump, wrap at 8 bytes
  34.         want = min(want, 8)
  35.         #print len
  36.         d = p.read(want)
  37.         hx = d.encode("hex")
  38.         print "< %s" % " ".join(hx[i:i+2] for i in range(0, len(hx), 2))
  39.         data += d
  40.     print
  41.     return data
  42.  
  43. if len(sys.argv) < 2:
  44.     print "Usage: %s serialdev" % sys.argv[0]
  45.     exit(1)
  46.  
  47. #, parity=serial.PARITY_ODD
  48. with serial.Serial(port=sys.argv[1], baudrate=115200) as p:
  49.  
  50.     send_cmd(p, '7d 81 a7 80 80 80 80 80 80')
  51.     recv_data(p, 2)
  52.     send_cmd(p, '7d 81 a2 80 80 80 80 80 80')
  53.     recv_data(p, 2)
  54.     send_cmd(p, '7d 81 a0 80 80 80 80 80 80')
  55.     recv_data(p, 4)
  56.  
  57.     send_cmd(p, '7d 81 b0 80 80 80 80 80 80')
  58.     recv_data(p)
  59.  
  60.     send_cmd(p, '7d 81 ac 80 80 80 80 80 80')
  61.     recv_data(p)
  62.  
  63.     send_cmd(p, '7d 81 b3 80 80 80 80 80 80')
  64.     recv_data(p)
  65.  
  66.     send_cmd(p, '7d 81 ad 80 80 80 80 80 80')
  67.     recv_data(p)
  68.  
  69.     send_cmd(p, '7d 81 a3 80 80 80 80 80 80')
  70.     recv_data(p)
  71.  
  72.     send_cmd(p, '7d 81 ab 80 80 80 80 80 80')
  73.     recv_data(p)
  74.  
  75.     send_cmd(p, '7d 81 a4 80 80 80 80 80 80')
  76.     recv_data(p)
  77.  
  78.     send_cmd(p, '7d 81 a5 80 80 80 80 80 80')
  79.     d = recv_data(p)
  80.     print "timestamp:"
  81.     packet = d[0:8]
  82.     if packet[0] == '\x07':
  83.         print "%02d%02d-%02d-%02d" % (
  84.             ord(packet[4]) & ~0x80,
  85.             ord(packet[5]) & ~0x80,
  86.             ord(packet[6]) & ~0x80,
  87.             ord(packet[7]) & ~0x80)
  88.     packet = d[8:16]
  89.     if packet[0] == '\x12':
  90.         print "%02d:%02d:%02d.%02d" % (
  91.             ord(packet[4]) & ~0x80,
  92.             ord(packet[5]) & ~0x80,
  93.             ord(packet[6]) & ~0x80,
  94.             ord(packet[7]) & ~0x80)
  95.  
  96.     send_cmd(p, '7d 81 af 80 80 80 80 80 80')
  97.     recv_data(p)
  98.  
  99.     send_cmd(p, '7d 81 a7 80 80 80 80 80 80')
  100.     recv_data(p)
  101.  
  102.     send_cmd(p, '7d 81 a2 80 80 80 80 80 80')
  103.     recv_data(p)
  104.  
  105.  
  106.     send_cmd(p, '7d 81 a6 80 80 80 80 80 80')
  107.     d = recv_data(p)
  108.     print "data:"
  109.     for i in range(0, len(d) / 8):
  110.         packet = d[i*8:i*8+8]
  111.         print "packet %d" % (i)
  112.         if packet[0] != '\x0f':
  113.             print "invalid data packet:"
  114.             print packet.encode("hex")
  115.             continue
  116.         if packet[1] != '\x80':
  117.             print "unknown code for packet: %02x" % ord(packet[1])
  118.  
  119.         print "%d%% %dbpm" % (ord(packet[2]) & ~0x80, ord(packet[3]) & ~0x80)
  120.         print "%d%% %dbpm" % (ord(packet[4]) & ~0x80, ord(packet[5]) & ~0x80)
  121.         print "%d%% %dbpm" % (ord(packet[6]) & ~0x80, ord(packet[7]) & ~0x80)
Add Comment
Please, Sign In to add comment