def retrieve_settings_from_serial(self): ser = self.ser self.oldSettings.clear() printStdErr("\nRequesting old settings from %(a)s." % msg_map) expected_responses = 2 # versions older than 2.0.0 did not have a device manager if not self.versionOld.isNewer("0.2.0"): expected_responses += 1 ser.write("d{}".encode()) # installed devices time.sleep(1) ser.write("c".encode()) # control constants ser.write("s".encode()) # control settings time.sleep(2) while expected_responses: line = ser.readline().decode() if line: line = util.asciiToUnicode(str(line)) if line[0] == 'C': expected_responses -= 1 self.oldSettings['controlConstants'] = json_decode_response( line) elif line[0] == 'S': expected_responses -= 1 self.oldSettings['controlSettings'] = json_decode_response( line) elif line[0] == 'd': expected_responses -= 1 self.oldSettings['installedDevices'] = json_decode_response( line)
def retrieve_settings_from_serial(self): ser = self.ser self.oldSettings.clear() printStdErr("Requesting old settings from %(a)s..." % msg_map) expected_responses = 2 if not self.versionOld.isNewer("0.2.0"): # versions older than 2.0.0 did not have a device manager expected_responses += 1 ser.write("d{}") # installed devices time.sleep(1) ser.write("c") # control constants ser.write("s") # control settings time.sleep(2) while expected_responses: line = ser.readline() if line: line = util.asciiToUnicode(line) if line[0] == 'C': expected_responses -= 1 self.oldSettings['controlConstants'] = json_decode_response(line) elif line[0] == 'S': expected_responses -= 1 self.oldSettings['controlSettings'] = json_decode_response(line) elif line[0] == 'd': expected_responses -= 1 self.oldSettings['installedDevices'] = json_decode_response(line)
def lineFromSerial(ser): global serialBuffer inWaiting = None newData = None try: inWaiting = ser.inWaiting() if inWaiting > 0: newData = ser.read(inWaiting) except (IOError, OSError, SerialException) as e: logMessage('Serial Error: {0})'.format(str(e))) return if newData: serialBuffer = serialBuffer + newData if '\n' in serialBuffer: lines = serialBuffer.partition('\n') # returns 3-tuple with line, separator, rest if(lines[1] == ''): # '\n' not found, first element is incomplete line serialBuffer = lines[0] return None else: # complete line received, [0] is complete line [1] is separator [2] is the rest serialBuffer = lines[2] return util.asciiToUnicode(lines[0])
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) inp, outp, err = select.select([sys.stdin], [], []) received = sys.stdin.read() if received == 'q': ser.close() break elif received == 's': termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) userInput = input( "Type the string you want to send to the controller: ") print("Sending: " + userInput) ser.write(userInput.encode(encoding="cp437")) line = ser.readline() line = util.asciiToUnicode(line) line = line.decode(encoding="cp437") if line: if (line[0] == 'D'): try: decoded = json.loads(line[2:]) print("Debug message received: " + expandLogMessage.expandLogMessage(line[2:])) except json.JSONDecodeError: # Print line normally, is not json print("Debug message received: " + line[2:]) else: print(line) finally:
def __asciiToUnicode(self, s): return BrewPiUtil.asciiToUnicode(s)
def test_ascii_to_unicode_extended_ascii_is_discarded(self): s = 'test\xff' s = util.asciiToUnicode(s) self.assertEqual(s, u'test')
def testAsciiToUnicodeCanBeJsonSerialized(self): s = '{"test": "18\xB0C"}' # without next line, error will be: # UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte s = util.asciiToUnicode(s) json.loads(s)
def test_ascii_to_unicode_degree_sign(self): s = 'temp: 18\xB0C' s = util.asciiToUnicode(s) self.assertEqual(s, u'temp: 18°C')
def testAsciiToUnicodeCanBeJsonSerialized(self): s = '{"test": "18\xB0C"}' # without next line, error will be: # UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte s = util.asciiToUnicode(s) simplejson.loads(s)