def getData(self): length = self.cc2538Spi.writeByte(self._SPI_MASTER_DUMMY) if length < MIN_TRIUMVI_PKT_LEN or length > MAX_TRIUMVI_PKT_LEN: dummy = self.cc2538Spi.write( [self._SPI_MASTER_GET_DATA, MAX_TRIUMVI_PKT_LEN - 1] + (MAX_TRIUMVI_PKT_LEN - 2) * [0]) return self.blueLed.leds_on() #print('data length: {0}'.format(length)) dataOut = [self._SPI_MASTER_GET_DATA, length - 1] + (length - 2) * [0] data = self.cc2538Spi.write(dataOut) #print("Data: {0}".format(data)) timeStamp = datetime.now() # print('Time Stamp: {0}, {1:02d}/{2:02d}, {3:02d}:{4:02d}:{5:02d}'.\ # format(timeStamp.year, timeStamp.month, timeStamp.day,\ # timeStamp.hour, timeStamp.minute, timeStamp.second)) #newPacket = triumviPacket(data) #if newPacket: # self.callback(newPacket) # self.blueLed.leds_off() # self.resetCount = 0 newPacket = packet(data) if newPacket.valid == True: # RSSI byte is not encrypted rssi = newPacket.dictionary['payload'].pop() rssi = rssi - 256 if rssi >= 128 else rssi if newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \ and newPacket.dictionary['payload'][0] == TRIUMVI_PACKET_ID: decrypted_data = triumviDecrypt( KEY, newPacket.dictionary['src_address'], newPacket.dictionary['payload']) if decrypted_data: newPacketFormatted = triumviPacket( [TRIUMVI_PACKET_ID] + newPacket.dictionary['src_address'] + decrypted_data) newPacketFormatted.dictionary['RSSI'] = rssi self.callback(newPacketFormatted) self.resetCount = 0 # calibration coefficients packet elif newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \ and newPacket.dictionary['payload'][0] == TRIUMVI_CALIBRATION_ID0 \ and newPacket.dictionary['payload'][1] == TRIUMVI_CALIBRATION_ID1 \ and (len(newPacket.dictionary['payload'])-8) % 26 == 0: coef_packet = triumviCalCoefPacketFormatter( newPacket.dictionary['payload'], newPacket.dictionary['src_address']) skt = socket.socket() try: skt.connect(('141.212.11.247', 4911)) skt.send(json.dumps(coef_packet.dictionary)) skt.close() except: pass self.callback(coef_packet) # waveform packet elif newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \ and newPacket.dictionary['payload'][0] == TRIUMVI_WAVEFORM_ID0 \ and newPacket.dictionary['payload'][1] == TRIUMVI_WAVEFORM_ID1: self.waveform_packets.append(newPacket) if len(self.waveform_packets) == 2: waveformPacket = waveformPacketFormatter( self.waveform_packets[0], self.waveform_packets[1]) if waveformPacket.wdict['valid']: packetString = json.dumps(waveformPacket.wdict) skt = socket.socket() try: skt.connect(('141.212.11.247', 4910)) skt.send(packetString) skt.close() except: pass self.waveform_packets = [] else: self.waveform_packets.pop(0) # APS3B12 control packet elif newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \ and newPacket.dictionary['payload'][0] == APS3B12_PACKET_ID \ and len(newPacket.dictionary['payload'])==4: skt = socket.socket() try: if newPacket.dictionary['payload'][1] == APS3B12_ENABLE: if myDevice.state == 'off' and newPacket.dictionary[ 'payload'][2] == 1: skt.connect((HOST, PORT)) skt.send('on') myDevice.state = 'on' elif myDevice.state == 'on' and newPacket.dictionary[ 'payload'][2] == 0: skt.connect((HOST, PORT)) skt.send('off') myDevice.state = 'off' elif newPacket.dictionary['payload'][1] == APS3B12_SET_CURRENT: currentVal = float( int(newPacket.dictionary['payload'][2]) * 256 + int(newPacket.dictionary['payload'][3])) / 1000 if currentVal > myDevice.currentVal or ( currentVal < (myDevice.currentVal - 3.5)) or ( currentVal == CALIBRATION_START_SETTING and abs(currentVal - myDevice.currentVal) > 0.01): print("Set load current to: {:}".format(currentVal)) skt.connect((HOST, PORT)) skt.send('amp=' + str(currentVal)) myDevice.currentVal = currentVal print("Flushing FIFO...") self.flushCC2538TXFIFO() elif newPacket.dictionary['payload'][1] == APS3B12_READ: if newPacket.dictionary['payload'][ 2] == APS3B12_READ_CURRENT: skt.connect((HOST, PORT)) skt.send('readI') value = skt.recv(1024).strip() try: value = float(value) except: value = None if value: print('Read Current: {:}'.format(value)) myDevice.currentVal = value value = int(value * 1000) value_arr = [] for i in range(4): value_arr.append(value % 256) value /= 256 dataout = [ self._SPI_RF_PACKET_SEND, 7, APS3B12_PACKET_ID, APS3B12_CURRENT_INFO ] + value_arr[::-1] dummy = self.cc2538Spi.write(dataout) skt.close() except: pass self.blueLed.leds_off()
from parsePacket import * from triumviDecrypt import triumviDecrypt KEY = ['0x46', '0xe2', '0xe5', '0x28', '0x9a', '0x65', '0x3c', '0xe9', '0x0', '0x2f', '0xc1', '0x6e', '0x65', '0xee', '0xc', '0x3e'] data = [65, 216, 98, 34, 0, 255, 255, 51, 0, 160, 82, 84, 229, 152, 192, 160, 164, 160, 119, 254, 135, 48, 140, 126, 239, 0, 58, 181, 236, 247, 157, 182, 191, 196, 189, 57, 242] newpacket = packet(data) if newpacket.dictionary['payload'][0] == 160: decrypted_data = triumviDecrypt(KEY, newpacket.dictionary['src_address'], newpacket.dictionary['payload']) if decrypted_data: print('decrypted data: {0}'.format(decrypted_data))
from parsePacket import * from triumviDecrypt import triumviDecrypt KEY = [ '0x46', '0xe2', '0xe5', '0x28', '0x9a', '0x65', '0x3c', '0xe9', '0x0', '0x2f', '0xc1', '0x6e', '0x65', '0xee', '0xc', '0x3e' ] data = [ 65, 216, 98, 34, 0, 255, 255, 51, 0, 160, 82, 84, 229, 152, 192, 160, 164, 160, 119, 254, 135, 48, 140, 126, 239, 0, 58, 181, 236, 247, 157, 182, 191, 196, 189, 57, 242 ] newpacket = packet(data) if newpacket.dictionary['payload'][0] == 160: decrypted_data = triumviDecrypt(KEY, newpacket.dictionary['src_address'], newpacket.dictionary['payload']) if decrypted_data: print('decrypted data: {0}'.format(decrypted_data))
def getData(self): length = self.cc2538Spi.writeByte(self._SPI_MASTER_DUMMY) if length < MIN_TRIUMVI_PKT_LEN or length > MAX_TRIUMVI_PKT_LEN: self.flushCC2538TXFIFO() return self.blueLed.leds_on() #print('data length: {0}'.format(length)) dataOut = [self._SPI_MASTER_GET_DATA, length-1] + (length-2)*[0] data = self.cc2538Spi.write(dataOut) #print("Data: {0}".format(data)) timeStamp = datetime.now() # print('Time Stamp: {0}, {1:02d}/{2:02d}, {3:02d}:{4:02d}:{5:02d}'.\ # format(timeStamp.year, timeStamp.month, timeStamp.day,\ # timeStamp.hour, timeStamp.minute, timeStamp.second)) #newPacket = triumviPacket(data) #if newPacket: # self.callback(newPacket) # self.blueLed.leds_off() # self.resetCount = 0 newPacket = packet(data) if newPacket and newPacket.dictionary['payload'][0] == TRIUMVI_PACKET_ID: decrypted_data = triumviDecrypt(KEY, newPacket.dictionary['src_address'], newPacket.dictionary['payload']) if decrypted_data: newPacketFormatted = triumviPacket([TRIUMVI_PACKET_ID] + newPacket.dictionary['src_address'] + decrypted_data) self.callback(newPacketFormatted) self.resetCount = 0 # APS3B12 control packet elif newPacket and newPacket.dictionary['payload'][0] == APS3B12_PACKET_ID and len(newPacket.dictionary['payload'])==4: skt = socket.socket() try: skt.connect((HOST, PORT)) if newPacket.dictionary['payload'][1] == APS3B12_ENABLE: if myDevice.state == 'off' and newPacket.dictionary['payload'][2] == 1: skt.send('on') myDevice.state = 'on' elif myDevice.state == 'on' and newPacket.dictionary['payload'][2] == 0: skt.send('off') myDevice.state = 'off' elif newPacket.dictionary['payload'][1] == APS3B12_SET_CURRENT: currentVal = float(int(newPacket.dictionary['payload'][2])*256 + int(newPacket.dictionary['payload'][3]))/1000 if currentVal != myDevice.currentVal: print("Set load current to: {:}".format(currentVal)) skt.send('amp='+str(currentVal)) myDevice.currentVal = currentVal elif newPacket.dictionary['payload'][1] == APS3B12_READ: if newPacket.dictionary['payload'][2] == APS3B12_READ_CURRENT: skt.send('readI') value = skt.recv(1024).strip() try: value = float(value) except: value = None if value: print('Read Current: {:}'.format(value)) myDevice.currentVal = value value = int(value*1000) value_arr = [] for i in range(4): value_arr.append(value%256) value /= 256 dataout = [self._SPI_RF_PACKET_SEND, 7, APS3B12_PACKET_ID, APS3B12_CURRENT_INFO]+value_arr[::-1] dummy = self.cc2538Spi.write(dataout) skt.close() except: pass self.blueLed.leds_off()