From d866d48cbfae72b705cea2da07520ba8a6d0abdc Mon Sep 17 00:00:00 2001 From: peterlu14 Date: Wed, 14 Jun 2023 12:08:04 +0800 Subject: [PATCH] -testing --- python/biopro/device/device_cc2650.py | 18 +++++++++--------- python/biopro/device/manager.py | 12 +++++++----- python/biopro/devlib/expression.py | 5 +++++ python/biopro/devlib/instruction.py | 2 ++ python/biopro/server/main.py | 26 ++++++++++++++++++++++++-- 5 files changed, 47 insertions(+), 16 deletions(-) diff --git a/python/biopro/device/device_cc2650.py b/python/biopro/device/device_cc2650.py index b1503a2..bcb9fe5 100644 --- a/python/biopro/device/device_cc2650.py +++ b/python/biopro/device/device_cc2650.py @@ -163,14 +163,12 @@ def is_headstage_device(info: cc2650.GapEvt_DeviceInformation) -> Optional[Devic version_info[3], version_info[4], version_info[5]) - return DeviceResponseInfo(local_name.decode(), serial_number, info.address, battery=battery_percentage) elif company_code[:2] == b'HS': # legacy device serial_number = DeviceSerialNumber(0, 0, 0, 0, 0, 0) - return DeviceResponseInfo(local_name.decode(), serial_number, info.address) else: @@ -200,7 +198,7 @@ def is_headstage_device_central_version(device_mac: ADDRESS = EMPTY_ADDRESS, version_info[3], version_info[4], version_info[5]) - + print('***********', version_info, device_mac) return DeviceResponseInfo(local_name, serial_number, device_mac, @@ -2147,7 +2145,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): connected = False connect_response = None ins = bytearray() - ins.append(0x05) ins.append(0x08) #length ins.append(addr_type) @@ -2159,7 +2156,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): ins.append(address[5]) ins.append(0xF1) self._interface.flush_input() - for retry in range(5): try: self.log_verbose('[CC2650]', 'connect att_write', '0x'+str.upper(ins.hex())) @@ -2182,7 +2178,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized): if connect_response is None: return False - pack_len = connect_response[0] connect_ack = connect_response[1:pack_len+1] @@ -2574,15 +2569,15 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized): return ret - def connect(self, response: DeviceResponseInfo, direct_connect: bool = False) -> Device: + def connect(self, response: DeviceResponseInfo, direct_connect: bool = True) -> Device: self.log_verbose('connect') master = None - + print('self._foreach_empty_master()', self._foreach_empty_master()) for master in self._foreach_empty_master(): m = self._cc2650[master] d = self._device[master] - + print('master', master, d, m) if direct_connect is True and d is None: break @@ -2593,22 +2588,27 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized): if master is None: raise RuntimeError('cannot connect any more device') else: + print('456') raise RuntimeError('rescan please') # + master = 4 self.log_verbose('use', master) m = self._cc2650[master] d = self._device[master] + print('4') if d is not None: raise RuntimeError('cc2650 has connected a device') with self: + print('5') self._interface.flush() self._selector.select(master) sleep(0.0001) d = m.connect(response, direct_connect) + print('6') if d is None: raise RuntimeError('connect failed, retry please') diff --git a/python/biopro/device/manager.py b/python/biopro/device/manager.py index d9a0fef..63be1e8 100644 --- a/python/biopro/device/manager.py +++ b/python/biopro/device/manager.py @@ -683,12 +683,12 @@ class DeviceManager(MasterDevice, Synchronized): address = address_str(response.mac_address) self.log_info(DEVICE_CONNECTING, address) - response = self.found_device(response) + # response = self.found_device(response) - ''' device not found''' - if response is None: - self.log_warn(DEVICE_CONNECT_FAIL, address, DEVICE_NOT_FOUND) - return None + # ''' device not found''' + # if response is None: + # self.log_warn(DEVICE_CONNECT_FAIL, address, DEVICE_NOT_FOUND) + # return None # raise RuntimeError(DEVICE_NOT_FOUND, address) # get device library @@ -718,7 +718,9 @@ class DeviceManager(MasterDevice, Synchronized): serial_number=response.serial_number) else: try: + print('here!!!!!!!!!!!!!!!!!!!!!!!', response) device = self._centralMaster.connect(response) + print('connect', device) device = CompletedDevice(self, library, device.device_id, device) except Exception as e: diff --git a/python/biopro/devlib/expression.py b/python/biopro/devlib/expression.py index cd5c3ec..5117577 100644 --- a/python/biopro/devlib/expression.py +++ b/python/biopro/devlib/expression.py @@ -532,6 +532,7 @@ class ComplexExpression(Expression[T]): @classmethod def parse(cls, json: JSON_OBJECT) -> Union['ComplexExpression', UndeterminedExpression]: expression = _get(json, 'expression', str, _truncate(json), nullable=True) + print('expression parse', expression, json) if expression is None: # un-determined expression @@ -879,9 +880,13 @@ class WhenExpression(ComplexExpression[T]): self._when: Dict[str, Expression[T]] = when def value(self, context: Scope) -> Union[str, T]: + print('value', context) value = super().value(context) + key = str(value) + print('value1', key,value) + print('when', self._when) if key in self._when: return self._when[key].value(context.child(VALUE=value)) diff --git a/python/biopro/devlib/instruction.py b/python/biopro/devlib/instruction.py index 81e199e..13bc081 100644 --- a/python/biopro/devlib/instruction.py +++ b/python/biopro/devlib/instruction.py @@ -404,7 +404,9 @@ class ListInstruction(Instruction, ImmutableListNode[Union[Instruction, Expressi ImmutableListNode.__init__(self, list(ins)) def eval_instruction(self, context: Scope) -> Iterable['SingleInstruction']: + print('eval_instruction', context) for ins in self: + print(ins) # foreach instructions # ins type could be Union[str, Expression] diff --git a/python/biopro/server/main.py b/python/biopro/server/main.py index 508e8f6..ae05807 100644 --- a/python/biopro/server/main.py +++ b/python/biopro/server/main.py @@ -329,6 +329,30 @@ class ControlServer(SocketServer, ControlServerAPI): finally: self.led_thread.set_state(LED.AVAILABLE) + # version_info = [0, 2, 1, 7, 23, 2] + # serial_number = DeviceSerialNumber(version_info[0], + # version_info[1], + # version_info[2], + # version_info[3], + # version_info[4], + # version_info[5]) + # response = DeviceResponseInfo('Elite-EDC', serial_number, (164, 218, 50, 212, 231, 12), addr_type=0) + # print('setup done', response) + # ret = self.device_manager.connect(response) + # print('ret', ret) + + version_info = [0, 5, 1, 0, 23, 5] + serial_number = DeviceSerialNumber(version_info[0], + version_info[1], + version_info[2], + version_info[3], + version_info[4], + version_info[5]) + response = DeviceResponseInfo('Elite-EDC', serial_number, (164, 218, 50, 212, 238, 89), addr_type=0) + print('setup done', response) + ret = self.device_manager.connect(response) + print('ret', ret) + def _setup_get_available_channel(self) -> Optional[List[int]]: client = self.data_server.client() @@ -558,7 +582,6 @@ class ControlServer(SocketServer, ControlServerAPI): response = content else: response = to_device_info(content) - try: ret = self.device_manager.connect(response) except DeviceInstructionError as e: @@ -1398,7 +1421,6 @@ class ControlServer(SocketServer, ControlServerAPI): if client is not None: with client: client.show_data(device) - class _RandomCrashThread(ServerThread): def __init__(self): super().__init__('Crash')