This commit is contained in:
peterlu14
2023-06-14 12:08:04 +08:00
parent aae1ab7a33
commit d866d48cbf
5 changed files with 47 additions and 16 deletions
+9 -9
View File
@@ -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')
+7 -5
View File
@@ -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:
+5
View File
@@ -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))
+2
View File
@@ -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]
+24 -2
View File
@@ -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')