Ejemplo n.º 1
0
class TFSerial:
    def __init__(self, _):
        self.ipcon = IPConnection()  # Create IP connection
        self.master = BrickMaster(UID, self.ipcon)  # Create device object
        self.ipcon.connect(HOST, PORT)
        self.timeout = 1
        self.read_buffer = []
        self.baudrate = None
        time.sleep(1)

    # Implement Serial functions that we don't need
    def setDTR(self, _):
        pass

    def flushInput(self):
        pass

    def flushOutput(self):
        pass

    # We misuse the setRTS call to start the bootloader mode (flush everyting etc)
    def setRTS(self, value):
        if value:
            self.master.start_wifi2_bootloader()

    def write(self, data):
        try:
            data = map(ord, data)
            while data != []:
                data_chunk = data[:60]
                length = len(data_chunk)
                data_chunk.extend([0] * (60 - length))
                ret = self.master.write_wifi2_flash(data_chunk, length)
                data = data[60:]
        except:
            traceback.print_exc()

        print "write", length, data

    def read(self, length):
        if len(self.read_buffer) >= length:
            ret = self.read_buffer[:length]
            self.read_buffer = self.read_buffer[length:]
            return ''.join(map(chr, ret))

        try:
            length_read = 0
            t = time.time()
            while len(self.read_buffer) < length:
                data, l = self.master.read_wifi2_flash(60)
                data = data[:l]
                self.read_buffer.extend(data)
                if len(self.read_buffer) < length:
                    time.sleep(0.1)
                if time.time() - t > self.timeout:
                    break

            print "read", l, "of", length, data
            ret = ''.join(map(chr, data[:l]))
        except:
            traceback.print_exc()

        ret = self.read_buffer[:length]
        self.read_buffer = self.read_buffer[length:]
        return ''.join(map(chr, ret))

    def done(self):
        self.master.reset()
Ejemplo n.º 2
0
class TFSerial:
    def __init__(self, _):
        self.ipcon = IPConnection() # Create IP connection
        self.master = BrickMaster(UID, self.ipcon) # Create device object
        self.ipcon.connect(HOST, PORT)
        self.timeout = 1
        self.read_buffer = []
        self.baudrate = None
        time.sleep(1)

    # Implement Serial functions that we don't need
    def setDTR(self, _): pass
    def flushInput(self): pass
    def flushOutput(self): pass

    # We misuse the setRTS call to start the bootloader mode (flush everyting etc) 
    def setRTS(self, value):
        if value:
            self.master.start_wifi2_bootloader()

    def write(self, data):
        try:
            data = map(ord, data)
            while data != []:
                data_chunk = data[:60]
                length = len(data_chunk)
                data_chunk.extend([0]*(60-length))
                ret = self.master.write_wifi2_flash(data_chunk, length)
                data = data[60:]
        except:
            traceback.print_exc()

        print "write", length, data 

    def read(self, length):
        if len(self.read_buffer) >= length:
            ret = self.read_buffer[:length]
            self.read_buffer = self.read_buffer[length:]
            return ''.join(map(chr, ret))

        try:
            length_read = 0
            t = time.time()
            while len(self.read_buffer) < length:
                data, l = self.master.read_wifi2_flash(60)
                data = data[:l]
                self.read_buffer.extend(data)
                if len(self.read_buffer) < length:
                    time.sleep(0.1)
                if time.time() - t > self.timeout:
                    break

            print "read", l, "of", length, data
            ret = ''.join(map(chr, data[:l]))
        except:
            traceback.print_exc()

        ret = self.read_buffer[:length]
        self.read_buffer = self.read_buffer[length:]
        return ''.join(map(chr, ret))

    def done(self):
        self.master.reset()