예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
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])
예제 #4
0
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])
예제 #5
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:
예제 #6
0
 def __asciiToUnicode(self, s):
     return BrewPiUtil.asciiToUnicode(s)
예제 #7
0
 def test_ascii_to_unicode_extended_ascii_is_discarded(self):
     s = 'test\xff'
     s = util.asciiToUnicode(s)
     self.assertEqual(s, u'test')
예제 #8
0
 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)
예제 #9
0
 def test_ascii_to_unicode_degree_sign(self):
     s = 'temp: 18\xB0C'
     s = util.asciiToUnicode(s)
     self.assertEqual(s, u'temp: 18&degC')
예제 #10
0
 def test_ascii_to_unicode_extended_ascii_is_discarded(self):
     s = 'test\xff'
     s = util.asciiToUnicode(s)
     self.assertEqual(s, u'test')
예제 #11
0
 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)
예제 #12
0
 def test_ascii_to_unicode_degree_sign(self):
     s = 'temp: 18\xB0C'
     s = util.asciiToUnicode(s)
     self.assertEqual(s, u'temp: 18&degC')