From 25267411d8dcf27c1d1a0cf3af2cd2a7940a93d6 Mon Sep 17 00:00:00 2001 From: Roy Date: Mon, 10 Jul 2023 13:00:06 +0800 Subject: [PATCH] [update] fix connect & write function --- python/biopro/device/device_cc2650.py | 48 ++++++++++----------------- python/biopro/devlib/device.py | 2 +- 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/python/biopro/device/device_cc2650.py b/python/biopro/device/device_cc2650.py index 0558d94..650484b 100644 --- a/python/biopro/device/device_cc2650.py +++ b/python/biopro/device/device_cc2650.py @@ -2186,7 +2186,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): pack_len = connect_response[0] connect_ack = connect_response[1:pack_len+1] - print('connect_ack:', connect_ack) if pack_len == 1: if connect_ack[0] == 3: connected = True @@ -2206,7 +2205,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): dont_care = 0 self._device = ret = CC2650Device(device_id=dont_care, master=self, response_info=response) self.log_verbose('[CC2650]', DEVICE_CONNECTED, address_s) - sleep(2) return ret self.log_verbose('[CC2650]', 'connect fail') @@ -2275,31 +2273,20 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): ins.append(0xF1) self._interface.flush_input() - for _ in range(5): + try: + self.log_verbose('[CC2650]', 'write_characteristic', device, str(hex(handle).upper())) + self.log_verbose('[CC2650]', 'write_characteristic att_write','0x'+str.upper(ins.hex())) + self._cc2650.send("bytes", bytes(ins)) + + except SerialTimeoutException: + self.log_verbose('[CC2650]', 'write_characteristic send fail') + + else: try: - self.log_verbose('[CC2650]', 'write_characteristic', device, str(hex(handle).upper())) - self.log_verbose('[CC2650]', 'write_characteristic att_write','0x'+str.upper(ins.hex())) - self._cc2650.send("bytes", bytes(ins)) - - except SerialTimeoutException: - self.log_verbose('[CC2650]', 'write_characteristic send fail') + write_response = self._cc2650.recv_uart(0.5) - else: - try: - write_response = self._cc2650.recv_uart(0.1) - - except RecvTimeout: - self.log_verbose('[CC2650]', 'write_characteristic response timeout, write retry') - continue - else: - pack_len = write_response[0] - write_ack = write_response[1:pack_len+1] - write_response_hex = ''.join(format(i, '02X') for i in write_response) - if write_ack == [255]: - self.log_verbose('[CC2650]', 'write_characteristic fail, write retry', '0x'+write_response_hex) - continue - else: - break + except RecvTimeout: + self.log_verbose('[CC2650]', 'write_characteristic response timeout') if write_response is None: self.log_verbose('[CC2650]', 'write_characteristic fail') @@ -2307,13 +2294,14 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): pack_len = write_response[0] write_ack = write_response[1:pack_len+1] - write_response_hex = ''.join(format(i, '02X') for i in write_response) + if write_ack == [3]: + write_response_hex = ''.join(format(i, '02X') for i in write_response) self.log_verbose('[CC2650]', 'write_characteristic success', '0x'+write_response_hex) return True - else: - self.log_verbose('[CC2650]', 'write_characteristic fail', '0x'+write_response_hex) - return False + + self.log_verbose('[CC2650]', 'write_characteristic fail') + return False @synchronized def read_characteristic(self, device: int, handle: int) -> Optional[bytes]: @@ -2336,7 +2324,7 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): else: try: - read_response = self._cc2650.recv_uart(0.5) + read_response = self._cc2650.recv_uart(1) except RecvTimeout: self.log_verbose('[CC2650]', 'read_characteristic response timeout') diff --git a/python/biopro/devlib/device.py b/python/biopro/devlib/device.py index a759663..30b6f48 100644 --- a/python/biopro/devlib/device.py +++ b/python/biopro/devlib/device.py @@ -734,7 +734,7 @@ class DeviceCommonInstruction: # don't create DeviceCommonInstruction instance, just return tuple def __new__(cls, instruction: str) -> Optional[Tuple[str, ...]]: if instruction == cls.RESET: - return '_sync(False)', 'VIS_RST' + return '_sync(False)', '_notify(False)', 'VIS_RST' elif instruction == cls.START: return '_data_format("TDC4VAF2")', '_notify(True)', 'VIS_STI', '_sync(True)' elif instruction == cls.INTERRUPT: