def debug_query(atcom, dest): command_dict = {'PL': b'QP', 'CH': b'QC', 'A': b'QA', 'T': b'QT'} data = command_dict[atcom] print('data: {}({})'.format(data, type(data))) payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
def decodelog_rxpacket(fp, payload): src = hexstr(payload[1:9]) res = hexstr(payload[9:11]) rxopt = payload[11] data = hexstr(payload[12:]) # Format (hex): 90, src, res, rxopt, data fp.write('---- 90, {}, {}, {}, {}\n'.format(src, res, rxopt, data))
def cmdtest_local_atquery(ser,at): from packet_encode import atcom_query from packet_decode import rxpacket tx_packet = atcom_query(at) print('Tx Packet: {}'.format(mf.hexstr(tx_packet))) print('-----') ser.write(tx_packet) status, payload = rxpacket(ser) print('Payload: {}'.format(mf.hexstr(payload))) pd.decode_payload(payload) print('-----')
def cmdtest_remote_unicast2(ser,n,dest): from packet_encode import debug_unicast2 from packet_decode import rxpacket tx_packet = debug_unicast2(n,dest) print('Tx Packet: {}'.format(mf.hexstr(tx_packet))) print('-----') ser.write(tx_packet) for i in range(n+1): status, payload = rxpacket(ser) print('Payload: {}'.format(mf.hexstr(payload))) pd.decode_payload(payload) print('-----')
def debug_unicast2(n, dest): if n > 255: print('Error: number of transmissions exceeds limit') return b'' data = b'DU' + (n).to_bytes(1, 'big') payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
def cmdtest_remote_unicast(ser,n,dest): from packet_encode import debug_unicast from packet_decode import rxpacket tx_packet = debug_unicast(n,dest) print('Tx Packet: {}'.format(mf.hexstr(tx_packet))) print('-----') ser.write(tx_packet) for i in range(n+1): status, payload = rxpacket(ser) print('Payload: {}'.format(mf.hexstr(payload))) status = pd.decode_payload(payload) if status != 0: print('Aborting listen') return 1 print('-----')
def decode_txstat(payload): fid = payload[1] dest16 = hexstr(payload[2:4]) txretry = payload[4] delivery = payload[5] delivery_dict = { 0x00: 'Success', 0x01: 'MAC ACK failure', 0x02: 'Collision avoidance failure', 0x21: 'Network ACK failure', 0x25: 'Route not found', 0x31: 'Internal resource error', 0x32: 'Internal error' } discovery = payload[6] discovery_dict = {0x00: 'No discovery overhead', 0x02: 'Route discovery'} print('Transmit Status frame (0x8b)') print(' Frame ID: {}'.format(hex(fid))) print(' 16-bit dest addr: {}'.format(dest16)) print(' Tx retry count: {}'.format(txretry)) print(' Delivery status: {} ({})'.format(delivery, delivery_dict[delivery])) print(' Discovery status: {} ({})'.format(discovery, discovery_dict[discovery])) if delivery == 0: return 0 else: return 1
def decode_atcomres(payload): fid = payload[1] athi = (payload[2]).to_bytes(1, 'big') atlo = (payload[3]).to_bytes(1, 'big') status = payload[4] status_dict = { 0: 'OK', 1: 'ERROR', 2: 'Invalid command', 3: 'Invalid parameter' } print('AT Command Response frame (0x88)') print(' Frame ID: {}'.format(hex(fid))) print(' AT command: {}{}'.format(athi.decode(), atlo.decode())) print(' Command status: {} ({})'.format(status, status_dict[status])) # Presence of Command Data if len(payload) > 5: print(' Command data: 0x{}'.format(hexstr(payload[5:]))) if status == 0: return 0 else: return 1
def remote_nodeloc(ser, remote, loc): success = 0 maxlen = 20 length = len(loc) if length > maxlen: print('Exceeded maximum node loc length') return 0 length_b = (length).to_bytes(1, 'big') data = b'DL' + length_b + bytes(loc, 'ascii') payload = pe.gen_txreq('01', remote, '00', '00', mf.hexstr(data)) bytestr = pe.gen_headtail(payload) ser.write(bytestr) while success == 0: success, payload = pd.rxpacket_buffered(ser) if payload == b'': print('Serial timeout') return 0 else: if success == 1: if payload[0] == 0x8b: error = pd.decode_txstat(payload) if error == 0: print('Remote node {} node loc set'.format(remote)) return 1 success = 0
def cmdtest_remote_setchannel(ser,ch,dest): tx_packet = pe.debug_channel(ch,dest) print('Tx Packet: {}'.format(mf.hexstr(tx_packet))) print('-----') ser.write(tx_packet) status, payload = pd.rxpacket(ser) pd.decode_payload(payload) print('-----')
def cmdtest_listen(ser): print('Listening to transmissions') print('-----') while 1: status, payload = pd.rxpacket(ser) print('Payload: {}'.format(mf.hexstr(payload))) status = pd.decode_payload(payload) print('-----')
def cmdtest_remote_setaddr(ser,newaddr,dest): tx_packet = pe.debug_setaddr(newaddr,dest) print('Sending Change aggregator address') print('Tx Packet: {}'.format(mf.hexstr(tx_packet))) print('-----') ser.write(tx_packet) status, payload = pd.rxpacket(ser) pd.decode_payload(payload) print('-----')
def cmdtest_remote_stop(ser,dest): tx_packet = pe.stop_sensing(dest) print('Sending stop signal') print('Tx Packet: {}'.format(mf.hexstr(tx_packet))) print('-----') ser.write(tx_packet) status, payload = pd.rxpacket(ser) pd.decode_payload(payload) print('-----')
def remote_query(ser, remote, param): success = 0 command_dict = { 'PL': b'QP', 'CH': b'QC', 'A': b'QA', 'T': b'QT', 'WR': b'DW', 'S': b'QS' } data = command_dict[param] payload = pe.gen_txreq('01', remote, '00', '00', mf.hexstr(data)) bytestr = pe.gen_headtail(payload) ser.write(bytestr) while success == 0: success, payload = pd.rxpacket_buffered(ser) if payload == b'': print('Serial timeout') return 0 if success == 0: print('Error receiving response from Transmit request') return success if payload[0] == 0x8b: error = pd.decode_txstat(payload) if error == 1: print('Error reported by transmit status') return 0 else: success = 1 else: success = 0 # Read Transmitted values success = 0 print('Remote node response:') while success == 0: success, payload = pd.rxpacket_buffered(ser) #print('payload: {}'.format(payload)) if payload == b'': print('Serial timeout') return 0 if payload[0] == 0x90: #print('-- received packet') pd.decode_rxpacket(payload) success = 1 else: success = 0
def decode_rxpacket(payload): src = hexstr(payload[1:9]) res = hexstr(payload[9:11]) rxopt = payload[11] rxopt_dict = { 0x01: 'Packet acknowledged', 0x02: 'Packet was a broadcast packet' } data = hexstr(payload[12:]) print('Receive Packet frame (0x90)') print(' 64-bit source addr: {}'.format(src)) print(' Reserved: {}'.format(res)) if rxopt in rxopt_dict: print(' Rx options: {} ({})'.format(rxopt, rxopt_dict[rxopt])) else: print(' Rx options: ({})'.format(hex(rxopt))) print(' Rx data: 0x{} ({})'.format(data, payload[12:]))
def cmdtest_remote_query(ser,atcom,dest): tx_packet = pe.debug_query(atcom,dest) print('Sending remote query parameter') print('Tx Packet : {}'.format(mf.hexstr(tx_packet))) print('----') ser.write(tx_packet) status, payload = pd.rxpacket(ser) status = pd.decode_payload(payload) print('----') if status != 0: print('Aborting listen') return 1 print('-> Response') status, payload = pd.rxpacket(ser) pd.decode_payload(payload) print('----')
def start_sensing(period, dest): data = b'S' + (period).to_bytes(1, 'big') payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
def stop_sensing(dest): data = b'X' payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
else: ch = b'\x19' if args.numtx: numtx = int(args.numtx) else: numtx = 1 ## Configure UART print('** Step 1. Configuring local UART **') dev = 0 ser = c.cmdtest_uartsetup(dev) remote = c.cmdtest_addrconv(args.nodeaddr) ## Set channel print('** Step 2. Setting local channel to 0x{} **'.format(mf.hexstr(ch))) tx_packet = pe.atcom_query('CH') ser.write(tx_packet) status, payload = pd.rxpacket(ser) if status != 1: print('-- Error receiving internal packet (atcom_query)') quit() status = pd.decode_payload(payload) if status != 0: print('-- Error decoding internal packet (atcom_query)') quit() tx_packet = pe.atcom_set('CH',ch) ser.write(tx_packet) status, payload = pd.rxpacket(ser) status = pd.decode_payload(payload)
def debug_setaddr(newaddr, dest): data = b'DA' + newaddr payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
def msgformer(msg, dest): payload = gen_txreq('01', hexstr(dest), '00', '00', msg) bytestr = gen_headtail(payload) return bytestr
dev = 0 if args.timeout: timeout_max = int(args.timeout) else: timeout_max = 5 ## Configure UART print('** Step 1. Configuring local UART **') #ser = c.cmdtest_uartsetup(port=dev,timeout=5) device = '/dev/ttyUSB' + str(dev) ser = serial.Serial(port=device, timeout=5) remote = c.cmdtest_addrconv(args.nodeaddr) ## Set channel print('** Step 2. Setting local channel to 0x{} **'.format(mf.hexstr(ch))) tx_packet = pe.atcom_query('CH') ser.write(tx_packet) status, payload = pd.rxpacket_buffered(ser) if status != 1: print('-- Error receiving internal packet (atcom_query)') quit() status = pd.decode_payload(payload) if status != 0: print('-- Error decoding internal packet (atcom_query)') quit() tx_packet = pe.atcom_set('CH', ch) ser.write(tx_packet) status, payload = pd.rxpacket_buffered(ser) status = pd.decode_payload(payload)
def debug_channel(ch, dest): data = b'DC' + ch payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
aggre_addr = args.aggre else: aggre_addr = '0013a200409a0a81' if args.portusb: dev = int(args.portusb) else: dev = 0 ## Configure UART print('** Step 1. Configuring local UART **') ser = c.cmdtest_uartsetup(dev) remote = c.cmdtest_addrconv(args.nodeaddr) ## Set channel print('** Step 2. Setting local channel to 0x{} **'.format(mf.hexstr(ch))) tx_packet = pe.atcom_query('CH') ser.write(tx_packet) status, payload = pd.rxpacket(ser) if status != 1: print('-- Error receiving internal packet (atcom_query)') quit() status = pd.decode_payload(payload) if status != 0: print('-- Error decoding internal packet (atcom_query)') quit() tx_packet = pe.atcom_set('CH',ch) ser.write(tx_packet) status, payload = pd.rxpacket(ser) status = pd.decode_payload(payload)
def debug_power(pow, dest): data = b'DP' + pow payload = gen_txreq('01', hexstr(dest), '00', '00', hexstr(data)) bytestr = gen_headtail(payload) return bytestr
quit() tx_packet = pe.atcom_set('CH', ch) ser.write(tx_packet) status, payload = pd.rxpacket(ser) status = pd.decode_payload(payload) if status != 0: print('-- Error setting AT parameter CH') quit() tx_packet = pe.atcom_query('CH') ser.write(tx_packet) status, payload = pd.rxpacket(ser) if status != 1: print('-- Error receiving internal packet (atcom_query)') quit() status = pd.decode_payload(payload) if status != 0: print('-- Error decoding internal packet (atcom_query)') quit() print(' ') ## Listen #c.cmdtest_listen(ser) while 1: status, payload = pd.rxpacket(ser) print(datetime.now()) print('Payload: {}'.format(mf.hexstr(payload))) status = pd.decode_payload(payload) print('-----')
dev = int(args.portusb) else: dev = 0 if args.parameter: param = args.parameter else: param = 'PL' ## Configure UART print('** Step 1. Configuring local UART **') ser = c.cmdtest_uartsetup(dev) remote = c.cmdtest_addrconv(args.nodeaddr) ## Set channel print('** Step 2. Setting local channel to 0x{} **'.format(mf.hexstr(ch))) tx_packet = pe.atcom_query('CH') ser.write(tx_packet) status, payload = pd.rxpacket(ser) if status != 1: print('-- Error receiving internal packet (atcom_query)') quit() status = pd.decode_payload(payload) if status != 0: print('-- Error decoding internal packet (atcom_query)') quit() tx_packet = pe.atcom_set('CH', ch) ser.write(tx_packet) status, payload = pd.rxpacket(ser) status = pd.decode_payload(payload)
if args.oldchannel: ch_old = mf.hexstr2byte(args.oldchannel) else: ch_old = b'\x0c' if args.newchannel: ch_new = mf.hexstr2byte(args.newchannel) else: ch_new = b'\x1a' if args.portusb: dev = int(args.portusb) else: dev = 0 print('-- Switching channel from 0x{} to 0x{}'.format(mf.hexstr(ch_old),mf.hexstr(ch_new))) print(' ') ## Configure UART print('** Step 1. Configuring local UART **') ser = c.cmdtest_uartsetup(0) remote = c.cmdtest_addrconv(args.nodeaddr) print(' ') ## Set local channel to old channel print('** Step 2. Setting local channel to 0x{} **'.format(mf.hexstr(ch_old))) tx_packet = pe.atcom_query('CH') ser.write(tx_packet) status, payload = pd.rxpacket(ser) if status != 1: print('-- Error receiving internal packet (atcom_query)')