[update] remove available_device
This commit is contained in:
@@ -955,9 +955,6 @@ class CC2650SingleMasterDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
self._cc2650.recv_util(..., when=self._cond, timeout=timeout)
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return [0]
|
||||
|
||||
@synchronized
|
||||
def scan_callback(self, callback: Callable[[DeviceResponseInfo], None], timeout=5, all_device=False) -> bool:
|
||||
if self._scan_max_time != timeout:
|
||||
@@ -1442,11 +1439,6 @@ class CC2650MultiMasterDevice(CC2650MasterDevice, Synchronized):
|
||||
super().shutdown()
|
||||
self._selector.close()
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return list(map(lambda it: it[0],
|
||||
filter(lambda it: it[1] is not None,
|
||||
enumerate(self._cc2650))))
|
||||
|
||||
def get_device(self, device: int) -> Optional[Device]:
|
||||
return self._device[device]
|
||||
|
||||
@@ -1968,9 +1960,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
"""initialize cc2650 (master)"""
|
||||
pass
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return [0]
|
||||
|
||||
def scan_send_ins(self):
|
||||
# send scan command
|
||||
try:
|
||||
@@ -1994,10 +1983,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
@synchronized
|
||||
def scan_callback(self, callback: Callable[[DeviceResponseInfo], None], timeout=5, all_device=False) -> bool:
|
||||
# if self._scan_max_time != timeout:
|
||||
# self.log_info('set max scan limit time', timeout)
|
||||
# self._scan_max_time = timeout
|
||||
|
||||
self._found = found = []
|
||||
self._found_with_id = []
|
||||
number_of_device = 0
|
||||
@@ -2013,33 +1998,8 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
# print('send_scan', bytes(scan_ins))
|
||||
self._cc2650.send("bytes", bytes(scan_ins))
|
||||
|
||||
# for wait_scan_response in range(5):
|
||||
# try:
|
||||
# scan_response = self._cc2650.recv_uart(0.2)
|
||||
# except RecvTimeout:
|
||||
# if wait_scan_response == 4:
|
||||
# self.reset_internal()
|
||||
# self.reset_hardware()
|
||||
# self._interface.flush()
|
||||
# return True
|
||||
# else:
|
||||
# self.log_info("wait for scan response")
|
||||
# continue
|
||||
|
||||
# # check if response is valid
|
||||
# if scan_response is None:
|
||||
# if wait_scan_response == 4:
|
||||
# self.reset_internal()
|
||||
# self.reset_hardware()
|
||||
# self._interface.flush()
|
||||
# else:
|
||||
# self.log_info("wait for scan response")
|
||||
# continue
|
||||
# else:
|
||||
# break
|
||||
|
||||
try:
|
||||
scan_response = self._cc2650.recv_uart(0.2)
|
||||
scan_response = self._cc2650.recv_uart(0.002)
|
||||
except RecvTimeout:
|
||||
self.reset_internal()
|
||||
self.reset_hardware()
|
||||
@@ -2140,6 +2100,35 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
def found(self) -> List[DeviceResponseInfo]:
|
||||
return self._found
|
||||
|
||||
def check_mem_survive(self) -> Optional[CC2650Device]:
|
||||
ack = []
|
||||
ins = bytearray()
|
||||
ins.append(10)
|
||||
ins.append(1) #length
|
||||
ins.append(0xF1)
|
||||
# print('ins', list(ins))
|
||||
|
||||
try:
|
||||
self._cc2650.send("bytes", bytes(ins))
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
raise RecvTimeout('device CC2650 check_mem_survive timeout') from e
|
||||
|
||||
else:
|
||||
try:
|
||||
ack = self._cc2650.recv_uart(timeout = 0.001)
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_info("unavailable device")
|
||||
|
||||
# else:
|
||||
# print('ack=', ack)
|
||||
|
||||
if ack == [3]:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
@synchronized
|
||||
def connect(self, response: DeviceResponseInfo, direct_connect: bool = False) -> Optional[CC2650Device]:
|
||||
if self._handle is not None:
|
||||
@@ -2555,11 +2544,10 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
if m is None:
|
||||
m = CC2650SingleMasterCentralDevice(self._master, self._interface, self._options)
|
||||
# m.set_log_level(self._cc2650_log_level)
|
||||
self._cc2650[i] = m
|
||||
|
||||
self._interface.flush()
|
||||
self._selector.select(i)
|
||||
# self._mem_selector.select(i)
|
||||
|
||||
try:
|
||||
self.log_info('reset device', i)
|
||||
@@ -2567,10 +2555,7 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
with m:
|
||||
m.reset_internal()
|
||||
m.reset_hardware()
|
||||
|
||||
if software_reset:
|
||||
m.reset_software()
|
||||
self._cc2650[i] = m
|
||||
m.reset_software()
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_warn('reset device', i, 'fail')
|
||||
@@ -2579,83 +2564,11 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
if not software_reset:
|
||||
return
|
||||
|
||||
# check reset result
|
||||
available_device_id = list(map(lambda it: it[0],
|
||||
filter(lambda it: it[1] is not None,
|
||||
enumerate(self._cc2650))))
|
||||
|
||||
if len(available_device_id) == 0:
|
||||
raise RuntimeError("reset fail, no device found")
|
||||
|
||||
self.log_verbose('available device', ' '.join(map(str, available_device_id)))
|
||||
|
||||
# initial hardware
|
||||
for i in range(len(self._cc2650)):
|
||||
m = self._cc2650[i]
|
||||
|
||||
if m is not None:
|
||||
self._interface.flush()
|
||||
self._selector.select(i)
|
||||
# self._mem_selector.select(i)
|
||||
|
||||
try:
|
||||
self.log_info('init device', i)
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_warn('init device', i, 'fail')
|
||||
self._cc2650[i] = None
|
||||
|
||||
# check init result, again
|
||||
available_device_id = list(map(lambda it: it[0],
|
||||
filter(lambda it: it[1] is not None,
|
||||
enumerate(self._cc2650))))
|
||||
|
||||
if len(available_device_id) == 0:
|
||||
raise RuntimeError("init fail, no device success")
|
||||
|
||||
def reset_empty_master(self, device: Optional[List[int]] = None, software_reset=True):
|
||||
self.log_verbose('reset')
|
||||
|
||||
# reset hardware
|
||||
# print("reset device = ", device)
|
||||
for i in range(len(self._cc2650)):
|
||||
# print(i)
|
||||
|
||||
m = self._cc2650[i]
|
||||
d = self._device[i]
|
||||
|
||||
# print(m, d)
|
||||
|
||||
if m is not None and d is None:
|
||||
m = CC2650SingleMasterCentralDevice(self._master, self._interface, self._options)
|
||||
# m.set_log_level(self._cc2650_log_level)
|
||||
|
||||
self._interface.flush()
|
||||
self._selector.select(i)
|
||||
self._mem_selector.select(i)
|
||||
|
||||
try:
|
||||
self.log_info('reset device', i)
|
||||
|
||||
with m:
|
||||
m.reset_internal()
|
||||
m.reset_hardware()
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_warn('reset device', i, 'fail')
|
||||
self._cc2650[i] = None
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return list(map(lambda it: it[0],
|
||||
filter(lambda it: it[1] is not None,
|
||||
enumerate(self._cc2650))))
|
||||
|
||||
def _foreach_empty_master(self) -> Iterable[int]:
|
||||
for i in range(len(self._cc2650)):
|
||||
m = self._cc2650[i]
|
||||
for i in range(len(self._device)):
|
||||
d = self._device[i]
|
||||
|
||||
if m is not None and d is None:
|
||||
if d is None:
|
||||
yield i
|
||||
|
||||
def scan_callback(self, callback: Callable[[DeviceResponseInfo], None], timeout=5, all_device=False) -> bool:
|
||||
@@ -2663,22 +2576,22 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
all_result = False
|
||||
|
||||
for device in self._foreach_empty_master():
|
||||
for device in range(len(self._cc2650)):
|
||||
self.log_verbose('use', device)
|
||||
|
||||
m = self._cc2650[device]
|
||||
d = self._device[device]
|
||||
|
||||
if m is not None and d is None:
|
||||
if d is None:
|
||||
error = None
|
||||
|
||||
with self:
|
||||
self._interface.flush()
|
||||
self._selector.select(device)
|
||||
# self._mem_selector.select(device)
|
||||
|
||||
try:
|
||||
sleep(0.0001)
|
||||
if m.check_mem_survive() == False:
|
||||
continue
|
||||
result = m.scan_callback(callback, timeout=timeout)
|
||||
|
||||
except RuntimeError as e:
|
||||
@@ -2692,8 +2605,7 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
if error is not None:
|
||||
self.log_warn('suppressed error : ' + str(error))
|
||||
# self.reset(device)
|
||||
sleep(1)
|
||||
|
||||
return all_result
|
||||
|
||||
def found(self) -> List[DeviceResponseInfo]:
|
||||
@@ -2746,7 +2658,6 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
with self:
|
||||
self._interface.flush()
|
||||
self._selector.select(master)
|
||||
# self._mem_selector.select(device)
|
||||
|
||||
sleep(0.0001)
|
||||
d = m.connect(response, direct_connect)
|
||||
|
||||
@@ -383,9 +383,6 @@ class DeviceManager(MasterDevice, Synchronized):
|
||||
self._demo.clear()
|
||||
self._centralMaster.reset(device, software_reset)
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return self._centralMaster.available_device()
|
||||
|
||||
@logging_info
|
||||
def shutdown(self, release_resource=True):
|
||||
# shutdown reset memeryboard
|
||||
|
||||
@@ -963,10 +963,6 @@ class MasterDevice(LoggerFlag, metaclass=abc.ABCMeta):
|
||||
"""
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def available_device(self) -> List[int]:
|
||||
pass
|
||||
|
||||
def scan(self, timeout=5, all_device=False) -> List[DeviceResponseInfo]:
|
||||
"""scan the nearby device.
|
||||
|
||||
@@ -1101,9 +1097,6 @@ class NullMasterDevice(MasterDevice):
|
||||
def shutdown(self, release_resource=True):
|
||||
pass
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return []
|
||||
|
||||
def scan(self, timeout=5, all_device=False) -> List[DeviceResponseInfo]:
|
||||
return []
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ class RoutineConnectDeviceThread(ServerThread):
|
||||
self._current_times = 0
|
||||
self._time = time()
|
||||
|
||||
if len(self._manager._device) < len(self._manager.available_device()) and not self.check_device_status('update') and not self.check_device_status('running') and self._current_times < 3:
|
||||
if not self.check_device_status('update') and not self.check_device_status('running') and self._current_times < 3:
|
||||
self._current_times += 1
|
||||
register_device = DeviceAPI.getAll()
|
||||
if register_device is not None:
|
||||
|
||||
@@ -213,8 +213,8 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
self.led_thread.set_state(LED.POWER_ON)
|
||||
|
||||
# sha checking
|
||||
if _RUNTIME_COMPILE or not self._controller_options.flag_disable_sha_check:
|
||||
self.run_thread(_RandomCrashThread())
|
||||
# if _RUNTIME_COMPILE or not self._controller_options.flag_disable_sha_check:
|
||||
# self.run_thread(_RandomCrashThread())
|
||||
|
||||
# data server
|
||||
interface = self.device_manager.interface
|
||||
@@ -328,7 +328,7 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
if available_channel is None:
|
||||
self.device_manager.setup(DeviceHardwareInterface.INTERFACE_DUMMY)
|
||||
else:
|
||||
self._setup_device_manager(available_channel)
|
||||
self.broadcast_command('state:device_available')
|
||||
|
||||
except ServerShutdownException as e:
|
||||
self.interrupt(e)
|
||||
@@ -400,24 +400,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
self.log_verbose('available channel', available_channel)
|
||||
return available_channel
|
||||
|
||||
def _setup_device_manager(self, available_channel: List[int]):
|
||||
# device reset
|
||||
# only reset those device has channel available
|
||||
self.log_verbose('reset device')
|
||||
self.device_manager.reset(available_channel)
|
||||
|
||||
# device checking
|
||||
available_device = self.device_manager.available_device()
|
||||
|
||||
self.log_verbose('available device', available_device)
|
||||
self.broadcast_command('state:device_available')
|
||||
|
||||
if len(available_device) == 0:
|
||||
raise RuntimeError('empty device')
|
||||
|
||||
elif available_device != available_channel:
|
||||
raise RuntimeError('device/channel mismatch')
|
||||
|
||||
def _setup_restart_device_manager(self, interface: str):
|
||||
self.log_info('shutdown device manager')
|
||||
self.device_manager.shutdown()
|
||||
|
||||
Reference in New Issue
Block a user