Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d866d48cbf |
@@ -163,14 +163,12 @@ def is_headstage_device(info: cc2650.GapEvt_DeviceInformation) -> Optional[Devic
|
|||||||
version_info[3],
|
version_info[3],
|
||||||
version_info[4],
|
version_info[4],
|
||||||
version_info[5])
|
version_info[5])
|
||||||
|
|
||||||
return DeviceResponseInfo(local_name.decode(), serial_number, info.address, battery=battery_percentage)
|
return DeviceResponseInfo(local_name.decode(), serial_number, info.address, battery=battery_percentage)
|
||||||
|
|
||||||
elif company_code[:2] == b'HS':
|
elif company_code[:2] == b'HS':
|
||||||
# legacy device
|
# legacy device
|
||||||
|
|
||||||
serial_number = DeviceSerialNumber(0, 0, 0, 0, 0, 0)
|
serial_number = DeviceSerialNumber(0, 0, 0, 0, 0, 0)
|
||||||
|
|
||||||
return DeviceResponseInfo(local_name.decode(), serial_number, info.address)
|
return DeviceResponseInfo(local_name.decode(), serial_number, info.address)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -200,7 +198,7 @@ def is_headstage_device_central_version(device_mac: ADDRESS = EMPTY_ADDRESS,
|
|||||||
version_info[3],
|
version_info[3],
|
||||||
version_info[4],
|
version_info[4],
|
||||||
version_info[5])
|
version_info[5])
|
||||||
|
print('***********', version_info, device_mac)
|
||||||
return DeviceResponseInfo(local_name,
|
return DeviceResponseInfo(local_name,
|
||||||
serial_number,
|
serial_number,
|
||||||
device_mac,
|
device_mac,
|
||||||
@@ -2147,7 +2145,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
|||||||
connected = False
|
connected = False
|
||||||
connect_response = None
|
connect_response = None
|
||||||
ins = bytearray()
|
ins = bytearray()
|
||||||
|
|
||||||
ins.append(0x05)
|
ins.append(0x05)
|
||||||
ins.append(0x08) #length
|
ins.append(0x08) #length
|
||||||
ins.append(addr_type)
|
ins.append(addr_type)
|
||||||
@@ -2159,7 +2156,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
|||||||
ins.append(address[5])
|
ins.append(address[5])
|
||||||
ins.append(0xF1)
|
ins.append(0xF1)
|
||||||
self._interface.flush_input()
|
self._interface.flush_input()
|
||||||
|
|
||||||
for retry in range(5):
|
for retry in range(5):
|
||||||
try:
|
try:
|
||||||
self.log_verbose('[CC2650]', 'connect att_write', '0x'+str.upper(ins.hex()))
|
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:
|
if connect_response is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
pack_len = connect_response[0]
|
pack_len = connect_response[0]
|
||||||
connect_ack = connect_response[1:pack_len+1]
|
connect_ack = connect_response[1:pack_len+1]
|
||||||
|
|
||||||
@@ -2574,15 +2569,15 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
|||||||
|
|
||||||
return ret
|
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')
|
self.log_verbose('connect')
|
||||||
|
|
||||||
master = None
|
master = None
|
||||||
|
print('self._foreach_empty_master()', self._foreach_empty_master())
|
||||||
for master in self._foreach_empty_master():
|
for master in self._foreach_empty_master():
|
||||||
m = self._cc2650[master]
|
m = self._cc2650[master]
|
||||||
d = self._device[master]
|
d = self._device[master]
|
||||||
|
print('master', master, d, m)
|
||||||
if direct_connect is True and d is None:
|
if direct_connect is True and d is None:
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -2593,22 +2588,27 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
|||||||
if master is None:
|
if master is None:
|
||||||
raise RuntimeError('cannot connect any more device')
|
raise RuntimeError('cannot connect any more device')
|
||||||
else:
|
else:
|
||||||
|
print('456')
|
||||||
raise RuntimeError('rescan please')
|
raise RuntimeError('rescan please')
|
||||||
|
|
||||||
#
|
#
|
||||||
|
master = 4
|
||||||
self.log_verbose('use', master)
|
self.log_verbose('use', master)
|
||||||
m = self._cc2650[master]
|
m = self._cc2650[master]
|
||||||
d = self._device[master]
|
d = self._device[master]
|
||||||
|
print('4')
|
||||||
|
|
||||||
if d is not None:
|
if d is not None:
|
||||||
raise RuntimeError('cc2650 has connected a device')
|
raise RuntimeError('cc2650 has connected a device')
|
||||||
|
|
||||||
with self:
|
with self:
|
||||||
|
print('5')
|
||||||
self._interface.flush()
|
self._interface.flush()
|
||||||
self._selector.select(master)
|
self._selector.select(master)
|
||||||
|
|
||||||
sleep(0.0001)
|
sleep(0.0001)
|
||||||
d = m.connect(response, direct_connect)
|
d = m.connect(response, direct_connect)
|
||||||
|
print('6')
|
||||||
|
|
||||||
if d is None:
|
if d is None:
|
||||||
raise RuntimeError('connect failed, retry please')
|
raise RuntimeError('connect failed, retry please')
|
||||||
|
|||||||
@@ -683,12 +683,12 @@ class DeviceManager(MasterDevice, Synchronized):
|
|||||||
address = address_str(response.mac_address)
|
address = address_str(response.mac_address)
|
||||||
self.log_info(DEVICE_CONNECTING, address)
|
self.log_info(DEVICE_CONNECTING, address)
|
||||||
|
|
||||||
response = self.found_device(response)
|
# response = self.found_device(response)
|
||||||
|
|
||||||
''' device not found'''
|
# ''' device not found'''
|
||||||
if response is None:
|
# if response is None:
|
||||||
self.log_warn(DEVICE_CONNECT_FAIL, address, DEVICE_NOT_FOUND)
|
# self.log_warn(DEVICE_CONNECT_FAIL, address, DEVICE_NOT_FOUND)
|
||||||
return None
|
# return None
|
||||||
# raise RuntimeError(DEVICE_NOT_FOUND, address)
|
# raise RuntimeError(DEVICE_NOT_FOUND, address)
|
||||||
|
|
||||||
# get device library
|
# get device library
|
||||||
@@ -718,7 +718,9 @@ class DeviceManager(MasterDevice, Synchronized):
|
|||||||
serial_number=response.serial_number)
|
serial_number=response.serial_number)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
print('here!!!!!!!!!!!!!!!!!!!!!!!', response)
|
||||||
device = self._centralMaster.connect(response)
|
device = self._centralMaster.connect(response)
|
||||||
|
print('connect', device)
|
||||||
|
|
||||||
device = CompletedDevice(self, library, device.device_id, device)
|
device = CompletedDevice(self, library, device.device_id, device)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -532,6 +532,7 @@ class ComplexExpression(Expression[T]):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def parse(cls, json: JSON_OBJECT) -> Union['ComplexExpression', UndeterminedExpression]:
|
def parse(cls, json: JSON_OBJECT) -> Union['ComplexExpression', UndeterminedExpression]:
|
||||||
expression = _get(json, 'expression', str, _truncate(json), nullable=True)
|
expression = _get(json, 'expression', str, _truncate(json), nullable=True)
|
||||||
|
print('expression parse', expression, json)
|
||||||
|
|
||||||
if expression is None:
|
if expression is None:
|
||||||
# un-determined expression
|
# un-determined expression
|
||||||
@@ -879,9 +880,13 @@ class WhenExpression(ComplexExpression[T]):
|
|||||||
self._when: Dict[str, Expression[T]] = when
|
self._when: Dict[str, Expression[T]] = when
|
||||||
|
|
||||||
def value(self, context: Scope) -> Union[str, T]:
|
def value(self, context: Scope) -> Union[str, T]:
|
||||||
|
print('value', context)
|
||||||
value = super().value(context)
|
value = super().value(context)
|
||||||
|
|
||||||
|
|
||||||
key = str(value)
|
key = str(value)
|
||||||
|
print('value1', key,value)
|
||||||
|
print('when', self._when)
|
||||||
|
|
||||||
if key in self._when:
|
if key in self._when:
|
||||||
return self._when[key].value(context.child(VALUE=value))
|
return self._when[key].value(context.child(VALUE=value))
|
||||||
|
|||||||
@@ -404,7 +404,9 @@ class ListInstruction(Instruction, ImmutableListNode[Union[Instruction, Expressi
|
|||||||
ImmutableListNode.__init__(self, list(ins))
|
ImmutableListNode.__init__(self, list(ins))
|
||||||
|
|
||||||
def eval_instruction(self, context: Scope) -> Iterable['SingleInstruction']:
|
def eval_instruction(self, context: Scope) -> Iterable['SingleInstruction']:
|
||||||
|
print('eval_instruction', context)
|
||||||
for ins in self:
|
for ins in self:
|
||||||
|
print(ins)
|
||||||
# foreach instructions
|
# foreach instructions
|
||||||
|
|
||||||
# ins type could be Union[str, Expression]
|
# ins type could be Union[str, Expression]
|
||||||
|
|||||||
@@ -329,6 +329,30 @@ class ControlServer(SocketServer, ControlServerAPI):
|
|||||||
finally:
|
finally:
|
||||||
self.led_thread.set_state(LED.AVAILABLE)
|
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]]:
|
def _setup_get_available_channel(self) -> Optional[List[int]]:
|
||||||
client = self.data_server.client()
|
client = self.data_server.client()
|
||||||
|
|
||||||
@@ -558,7 +582,6 @@ class ControlServer(SocketServer, ControlServerAPI):
|
|||||||
response = content
|
response = content
|
||||||
else:
|
else:
|
||||||
response = to_device_info(content)
|
response = to_device_info(content)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ret = self.device_manager.connect(response)
|
ret = self.device_manager.connect(response)
|
||||||
except DeviceInstructionError as e:
|
except DeviceInstructionError as e:
|
||||||
@@ -1398,7 +1421,6 @@ class ControlServer(SocketServer, ControlServerAPI):
|
|||||||
if client is not None:
|
if client is not None:
|
||||||
with client:
|
with client:
|
||||||
client.show_data(device)
|
client.show_data(device)
|
||||||
|
|
||||||
class _RandomCrashThread(ServerThread):
|
class _RandomCrashThread(ServerThread):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__('Crash')
|
super().__init__('Crash')
|
||||||
|
|||||||
Reference in New Issue
Block a user