10 class rdevice(object):
11 def __init__(self, rcon = None):
13 self.wait_stamp_sqn = random.randint(1, 1000)
15 def set_rcon(self, rcon):
16 if self.rcon is not None:
21 def init_communication(self):
22 s = self.rcon.read(1024)
24 self.rcon.write("InvBuff\n")
25 s = self.rcon.read(1024)
27 self.rcon.write("ECHO:0\n")
28 s = self.rcon.read(1024)
29 self.rcon.write("VER?\n")
30 s = self.rcon.read(1024)
34 s = self.rcon.read(2000)
37 def set_int_param(self, param, val):
39 self.rcon.write(param+':'+valstr+'\n')
42 s = self.rcon.read(1024)
43 self.wait_stamp_sqn = self.wait_stamp_sqn + 1
44 sqnstr = str(int(self.wait_stamp_sqn))
45 self.rcon.write("STAMP:"+sqnstr+"\n")
47 s = self.rcon.read(1024)
48 for sl in s.splitlines():
49 if (sl == "STAMP="+sqnstr):
53 def get_multiline(self, last_line = None, try_cycles = 10):
57 s = self.rcon.read(10*1024)
62 if try_cnt > try_cycles:
67 if last_line is not None:
68 for sl in res.splitlines():
72 def rdevice_com_test(rcon):
76 print("Wait stamp done")
79 if __name__ == '__main__':
80 help_msg = '''SYNOPSIS: dadpyscan.py [-d /dev/ttyXXX]
83 parser = argparse.ArgumentParser(description='BlueBot rdevice commander')
84 parser.add_argument('-s', '--skip-setup', dest='skip_setup', action='store_true',
85 default=False, help='skip hard-home inicialization of rdevice')
86 parser.add_argument('-d', '--tty-device', dest='tty_dev', type=str,
87 default='/dev/ttyACM0', help='tty line/device to rdevice')
88 parser.add_argument('-a', '--action', dest='action', type = str,
89 default=None, help='action to run')
91 args = parser.parse_args()
93 tty_dev = args.tty_dev
94 skip_setup = args.skip_setup
106 print("Opening %s ...\n" % tty_dev)
107 ser = serial.Serial(tty_dev,
109 bytesize=serial.EIGHTBITS,
110 parity=serial.PARITY_NONE,
111 stopbits=serial.STOPBITS_ONE,
118 #ser.write("SPIMST0:4(%02X,%02X)\n"%((output_data>>8)&0xFF,(output_data)&0xFF))
122 r.init_communication()
124 if not skip_setup or (action == 'home'):
127 print("Setup skipped")
129 print('action:'+action)
131 if action == 'cyclic':
133 r.rcon.write("init\n");
135 scan_all=numpy.ndarray(shape=(0,0), dtype=float)
138 r.rcon.write("run\n");
139 s = r.get_multiline(last_line = 'end')
141 print("scan read timeout")
145 if (si == -1) or (ei == -1):
146 print("bank, end not found")
148 si = s.find('\n', si, ei)
149 scan_act=numpy.fromstring(s[si:ei], dtype=float, count=-1, sep=' ')
151 if scan_all.size == 0:
152 scan_all=numpy.ndarray(shape=(scan_count,scan_act.size), dtype=float)
153 scan_all[scan_cnt,:]=scan_act
154 scan_cnt = scan_cnt + 1
155 if scan_cnt >= scan_count:
156 F=open('scan.dat', mode='wt')
157 numpy.savetxt(F, scan_all, fmt='%8g')
159 numpy.savetxt(F, numpy.amin(scan_all, axis = 0), fmt='%8g', newline = ' ')
162 numpy.savetxt(F, numpy.amax(scan_all, axis = 0), fmt='%8g', newline = ' ')
165 numpy.savetxt(F, numpy.std(scan_all, axis = 0), fmt='%8g', newline = ' ')