Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0977e9bd87 | |||
| 6203584a48 |
@@ -1950,22 +1950,18 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
@synchronized
|
||||
def reset_software(self):
|
||||
"""software reset cc2650 (master)"""
|
||||
# print('resettt---------14')
|
||||
# print()
|
||||
# self.log_verbose('reset (software)')
|
||||
|
||||
# try:
|
||||
# #self._cc2650.send("3B", 1, 0, 0)
|
||||
# pass
|
||||
self.log_verbose('reset (software)')
|
||||
|
||||
# except SerialTimeoutException as e:
|
||||
# raise RecvTimeout('device CC2650 reset fail') from e
|
||||
try:
|
||||
#self._cc2650.send("3B", 1, 0, 0)
|
||||
pass
|
||||
|
||||
# finally:
|
||||
# sleep(0.1)
|
||||
print("pass")
|
||||
print()
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
raise RecvTimeout('device CC2650 reset fail') from e
|
||||
|
||||
finally:
|
||||
sleep(0.1)
|
||||
|
||||
@synchronized
|
||||
def init_hardware(self, timeout=1):
|
||||
@@ -1979,7 +1975,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
# send scan command
|
||||
try:
|
||||
print(':: scan_send_ins ::', self.CC2650_COMMAND_LEN, 3, 0, 0)
|
||||
print()
|
||||
self._cc2650.send(self.CC2650_COMMAND_LEN, 3, 0, 0)
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
@@ -2015,7 +2010,7 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
scan_ins.append(1) #length
|
||||
scan_ins.append(0xF1)
|
||||
|
||||
print('send_scan', list(scan_ins))
|
||||
# print('send_scan', bytes(scan_ins))
|
||||
self._cc2650.send("bytes", bytes(scan_ins))
|
||||
|
||||
# for wait_scan_response in range(5):
|
||||
@@ -2175,7 +2170,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
# send device mac and addrType
|
||||
try:
|
||||
print('send_connect..',list(connect_ins))
|
||||
self._cc2650.send("bytes", bytes(connect_ins))
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
@@ -2208,26 +2202,39 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
# send device mac and addrType
|
||||
try:
|
||||
print('send_connect',list(connect_ins))
|
||||
# print('send_connect',bytes(connect_ins))
|
||||
self._cc2650.send("bytes", bytes(connect_ins))
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
raise RecvTimeout('device CC2650 connect fail') from e
|
||||
|
||||
else:
|
||||
sleep(1)
|
||||
sleep(2)
|
||||
|
||||
# connection establish done?
|
||||
for retry_recv_ack in range(5):
|
||||
self._cc2650.send("bytes", bytes((0, 0, 0, 0)))
|
||||
|
||||
try:
|
||||
con_done = self._cc2650.recv_uart(timeout = 0.1)
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_info("recv connection timeout, fail... ")
|
||||
self.log_info("recv connection timeout, retry... ")
|
||||
continue
|
||||
|
||||
if con_done[0] is 46 and \
|
||||
# is the ack valid?
|
||||
if con_done is None:
|
||||
continue
|
||||
|
||||
elif con_done[0] is 46 and \
|
||||
con_done[1] is 80 and \
|
||||
con_done[2] is 48 and \
|
||||
con_done[3] is 4:
|
||||
connected = True
|
||||
print('con_done=', con_done)
|
||||
# print('con_done=', con_done)
|
||||
break
|
||||
else:
|
||||
continue
|
||||
|
||||
# if select device is invalid or connect failed
|
||||
self._interface.flush_input()
|
||||
@@ -2248,36 +2255,6 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
return ret
|
||||
|
||||
def check_mem_survive(self) -> Optional[CC2650Device]:
|
||||
|
||||
ack = []
|
||||
ins = bytearray()
|
||||
ins.append(10)
|
||||
ins.append(1) #length
|
||||
ins.append(0xF1)
|
||||
|
||||
try:
|
||||
self._cc2650.send("bytes", bytes(ins))
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
raise RecvTimeout('device CC2650 check_mem_survive timeout') from e
|
||||
|
||||
else:
|
||||
# sleep(1)
|
||||
try:
|
||||
ack = self._cc2650.recv_uart(timeout = 0.1)
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_info("no survive device")
|
||||
|
||||
else:
|
||||
print('ack=', ack)
|
||||
|
||||
if ack == [3]:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
@synchronized
|
||||
def disconnect(self, device: int, force=False) -> bool:
|
||||
self.log_info(DEVICE_DISCONNECTING, device)
|
||||
@@ -2288,7 +2265,7 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
ins.append(0xF1)
|
||||
|
||||
try:
|
||||
print('send_disconnect',list(ins))
|
||||
# print('send_disconnect',bytes(ins))
|
||||
self._cc2650.send("bytes", bytes(ins))
|
||||
|
||||
except RecvTimeout:
|
||||
@@ -2323,20 +2300,28 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
ins.append(handle)
|
||||
ins.append(0xF1)
|
||||
|
||||
try:
|
||||
print('read_characteristic',list(ins))
|
||||
self._cc2650.send("bytes", bytes(ins))
|
||||
|
||||
except SerialTimeoutException:
|
||||
raise RecvTimeout('device CC2650 send read_characteristic fail')
|
||||
for _ in range(2):
|
||||
try:
|
||||
# print('send_read',bytes(ins))
|
||||
self._cc2650.send("bytes", bytes(ins))
|
||||
except SerialTimeoutException:
|
||||
raise RecvTimeout('device CC2650 send read_characteristic fail')
|
||||
|
||||
try:
|
||||
ret = self._cc2650.recv_uart(timeout = 2)
|
||||
except Exception as e2:
|
||||
raise RecvTimeout()
|
||||
else:
|
||||
# print("======== read ret = ", ret)
|
||||
self._interface.flush_input()
|
||||
try:
|
||||
ret = self._cc2650.recv_uart(timeout = 2)
|
||||
except Exception as e2:
|
||||
raise RecvTimeout()
|
||||
else:
|
||||
# print("======== read ret = ", ret)
|
||||
self._interface.flush_input()
|
||||
|
||||
# try:
|
||||
# ret = self._cc2650.recv_uart(timeout = 1)
|
||||
# except Exception as e2:
|
||||
# raise RecvTimeout()
|
||||
# else:
|
||||
# # print("read_characteristic ret = ", ret)
|
||||
# pass
|
||||
|
||||
if ret is None:
|
||||
return None
|
||||
@@ -2364,21 +2349,23 @@ class CC2650SingleMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
|
||||
|
||||
try:
|
||||
self._cc2650.send("bytes", list(data_array))
|
||||
print('send_write',list(data_array))
|
||||
self._cc2650.send("bytes", bytes(data_array))
|
||||
# print('send_write',bytes(data_array))
|
||||
|
||||
except SerialTimeoutException as e:
|
||||
raise RecvTimeout('device CC2650 send instruction fail') from e
|
||||
|
||||
# read error code
|
||||
try:
|
||||
ret = self._cc2650.recv_uart(timeout = 0.1)
|
||||
print('ret=', ret)
|
||||
ret = self._cc2650.recv_uart()
|
||||
|
||||
# print("_______ write ack = ", ret)
|
||||
except Exception as e2:
|
||||
pass
|
||||
|
||||
else:
|
||||
pass
|
||||
|
||||
self._interface.flush_input()
|
||||
self._interface.flush_output()
|
||||
|
||||
@@ -2555,78 +2542,24 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
else:
|
||||
self.log_warn('cannot %s notify for device : %s' % (message, device.__class__.__name__))
|
||||
|
||||
# def reset(self, device: Optional[List[int]] = None, software_reset=True):
|
||||
# print('resettt---------15')
|
||||
# print()
|
||||
|
||||
# # self.log_verbose('reset')
|
||||
|
||||
# # reset hardware
|
||||
# # print("reset device = ", device)
|
||||
# print('device:', device, software_reset)
|
||||
# print('self._device', list(self._device))
|
||||
# print('self._cc2650_once:', list(self._cc2650))
|
||||
# print('|')
|
||||
# print('|')
|
||||
# for i in range(len(self._cc2650)):
|
||||
# print('i', i)
|
||||
# if device is None or i in device:
|
||||
# self._device[i] = None
|
||||
|
||||
# m = self._cc2650[i]
|
||||
|
||||
# if m is None:
|
||||
# m = CC2650SingleMasterCentralDevice(self._master, self._interface, self._options)
|
||||
|
||||
# self._interface.flush()
|
||||
# self._selector.select(i)
|
||||
|
||||
# try:
|
||||
# self.log_info('reset device', i)
|
||||
|
||||
# with m:
|
||||
# m.reset_internal()
|
||||
# m.reset_hardware()
|
||||
|
||||
# if software_reset:
|
||||
# check_mem_survive_flag = m.check_mem_survive()
|
||||
# if check_mem_survive_flag:
|
||||
# self._cc2650[i] = m
|
||||
|
||||
# except RecvTimeout:
|
||||
# self.log_warn('reset device', i, 'fail')
|
||||
# self._cc2650[i] = None
|
||||
|
||||
# print('self._cc2650::', list(self._cc2650))
|
||||
|
||||
# return
|
||||
|
||||
def reset(self, device: Optional[List[int]] = None, software_reset=True):
|
||||
print('resettt---------15')
|
||||
print()
|
||||
|
||||
# self.log_verbose('reset')
|
||||
|
||||
# reset hardware
|
||||
# print("reset device = ", device)
|
||||
print('device:', device, software_reset)
|
||||
print('self._device', list(self._device))
|
||||
print('self._cc2650_once:', list(self._cc2650))
|
||||
print('|')
|
||||
print('|')
|
||||
|
||||
for i in range(len(self._cc2650)):
|
||||
if device is None:
|
||||
if device is None or i in device:
|
||||
self._device[i] = None
|
||||
|
||||
m = self._cc2650[i]
|
||||
|
||||
if m 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)
|
||||
@@ -2634,20 +2567,51 @@ class CC2650MultiMasterCentralDevice(CC2650MasterDevice, Synchronized):
|
||||
with m:
|
||||
m.reset_internal()
|
||||
m.reset_hardware()
|
||||
|
||||
|
||||
if not software_reset:
|
||||
check_mem_survive_flag = m.check_mem_survive()
|
||||
if check_mem_survive_flag:
|
||||
self._cc2650[i] = m
|
||||
|
||||
if software_reset:
|
||||
m.reset_software()
|
||||
self._cc2650[i] = m
|
||||
|
||||
except RecvTimeout:
|
||||
self.log_warn('reset device', i, 'fail')
|
||||
self._cc2650[i] = None
|
||||
|
||||
print('self._cc2650::', list(self._cc2650))
|
||||
if not software_reset:
|
||||
return
|
||||
|
||||
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')
|
||||
|
||||
@@ -261,8 +261,7 @@ class DeviceManager(MasterDevice, Synchronized):
|
||||
|
||||
__slots__ = ('_handler', '_options',
|
||||
'_library_path', '_library',
|
||||
'_interface', '_master', '_found_history', '_found', '_device', '_master_log_level',
|
||||
'_mem_survive_channel')
|
||||
'_interface', '_master', '_found_history', '_found', '_device', '_master_log_level')
|
||||
|
||||
def __init__(self,
|
||||
options: DeviceManagerOptions,
|
||||
@@ -382,13 +381,8 @@ class DeviceManager(MasterDevice, Synchronized):
|
||||
"""reset master device"""
|
||||
self._device.clear()
|
||||
self._demo.clear()
|
||||
print('resettt---------21')
|
||||
print()
|
||||
self._centralMaster.reset(device, software_reset)
|
||||
|
||||
def get_mem_survive_channel(self):
|
||||
return self._mem_survive_channel
|
||||
|
||||
def available_device(self) -> List[int]:
|
||||
return self._centralMaster.available_device()
|
||||
|
||||
|
||||
@@ -890,11 +890,11 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
|
||||
finish_mode_falg = data[19]
|
||||
|
||||
# print('decode', list(data[20:]))
|
||||
mem_wrong = data[120]
|
||||
mem_retry_cnt = data[121]
|
||||
mem_green_wrong = data[122]
|
||||
mem_green_retry_cnt = data[123]
|
||||
ram_num = data[124]
|
||||
mem_wrong = data[20]
|
||||
mem_retry_cnt = data[21]
|
||||
mem_green_wrong = data[22]
|
||||
mem_green_retry_cnt = data[23]
|
||||
ram_num = data[24]
|
||||
broken_flag = data[-1]
|
||||
|
||||
if (finish_mode_falg & 0b11110000 == 0b10100000):
|
||||
@@ -1378,41 +1378,46 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
||||
|
||||
index = 20
|
||||
for i in range(index, index+16, 8):
|
||||
phase_para_a.append(struct.unpack('>I', cali_coeff[i+1:i+5])[0])
|
||||
phase_para_a.append(struct.unpack('>i', cali_coeff[i+1:i+5])[0])
|
||||
phase_para_b.append(struct.unpack('>i', cali_coeff[i+5:i+9])[0])
|
||||
|
||||
index = 40
|
||||
for i in range(index, index+16, 8):
|
||||
phase_para_a.append(struct.unpack('>I', cali_coeff[i+1:i+5])[0])
|
||||
phase_para_a.append(struct.unpack('>i', cali_coeff[i+1:i+5])[0])
|
||||
phase_para_b.append(struct.unpack('>i', cali_coeff[i+5:i+9])[0])
|
||||
|
||||
#Lv[0] 160k
|
||||
index = 60
|
||||
hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
|
||||
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4)
|
||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[0])
|
||||
|
||||
#Lv[1] 20k
|
||||
index = 80
|
||||
hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
|
||||
hsrtia_c.append(struct.unpack('>I', cali_coeff[index+9:index+13])[0]/1e4)
|
||||
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4)
|
||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[0])
|
||||
|
||||
#Lv[2] 5k
|
||||
index = 100
|
||||
hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
|
||||
hsrtia_c.append(struct.unpack('>I', cali_coeff[index+9:index+13])[0]/1e4)
|
||||
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4)
|
||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[0])
|
||||
|
||||
#Lv[3] 200R
|
||||
index = 120
|
||||
hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0])
|
||||
hsrtia_b.append(struct.unpack('>I', cali_coeff[index+5:index+9])[0]/1e6)
|
||||
hsrtia_c.append(struct.unpack('>I', cali_coeff[index+9:index+13])[0]/1e5)
|
||||
hsrtia_d.append(struct.unpack('>I', cali_coeff[index+13:index+17])[0]/1e6)
|
||||
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
|
||||
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
|
||||
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4)
|
||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[0])
|
||||
|
||||
# hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0])
|
||||
# hsrtia_b.append(struct.unpack('>I', cali_coeff[index+5:index+9])[0]/1e6)
|
||||
# hsrtia_c.append(struct.unpack('>I', cali_coeff[index+9:index+13])[0]/1e5)
|
||||
# hsrtia_d.append(struct.unpack('>I', cali_coeff[index+13:index+17])[0]/1e6)
|
||||
|
||||
# print('cutoff_freq', cutoff_freq)
|
||||
# print('hsrtia_a', hsrtia_a)
|
||||
@@ -1492,13 +1497,19 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
||||
|
||||
voltage_mag = math.sqrt(img ** 2 + real ** 2) * (1 + freq ** 2 / cutoff_freq ** 2)
|
||||
|
||||
if (gain == 3):
|
||||
current = hsrtia_a[gain] * math.exp(hsrtia_b[gain] * voltage_mag) + hsrtia_c[gain] * math.exp(hsrtia_d[gain] * voltage_mag)
|
||||
else:
|
||||
current = voltage_mag ** 2 * hsrtia_a[gain] + voltage_mag * hsrtia_b[gain] + hsrtia_c[gain]
|
||||
# if (gain == 3):
|
||||
# current = hsrtia_a[gain] * math.exp(hsrtia_b[gain] * voltage_mag) + hsrtia_c[gain] * math.exp(hsrtia_d[gain] * voltage_mag)
|
||||
# else:
|
||||
current = voltage_mag ** 2 * hsrtia_a[gain] + voltage_mag * hsrtia_b[gain] + hsrtia_c[gain]
|
||||
# print(current)
|
||||
# print(voltage_mag)
|
||||
# print(hsrtia_a[gain])
|
||||
# print(hsrtia_b[gain])
|
||||
# print(hsrtia_c[gain])
|
||||
|
||||
if (current != 0):
|
||||
impedance = voltage_amp * 1000000 / current
|
||||
# impedance = voltage_amp * 1000_000 / 1.414213 / current
|
||||
impedance = voltage_amp * 707106.78 / current
|
||||
else:
|
||||
impedance = 0
|
||||
|
||||
|
||||
+294
-58
@@ -25,26 +25,25 @@ _SLEEP_TIME_ = 0.001
|
||||
def zero_buffer(size: int) -> List[int]:
|
||||
return [0] * size
|
||||
|
||||
class MultiExtMemSpiInterface(LowLevelHardwareInterface):
|
||||
|
||||
class ExtMemSpiInterface(LowLevelHardwareInterface):
|
||||
MEM_INS_MARKED = [MEM_INS_WRITE, 0, 2, 1, 1]
|
||||
MEM_INS_RESET = [MEM_INS_WRITE, 0, 2, 1, 1, 0, 0xFF]
|
||||
|
||||
__slots__ = ('_selector', '_wait_for_first_data', '_spi', '_tx_buffer', '_tx_buffer_header', '_tx_buffer_data',
|
||||
__slots__ = ('_spi', '_tx_buffer', '_tx_buffer_header', '_tx_buffer_data',
|
||||
'pin_busy', 'pin_request', 'pin_reset', 'pin_sel',
|
||||
'_pin_sel_val',
|
||||
'_read_green_times','_read_red_times',
|
||||
'_elite_data_len', '_mem_header_len', '_mem_tailer_len', '_single_data_len',
|
||||
'_head_wrong_cnt')
|
||||
|
||||
def __init__(self,
|
||||
select: Selector,
|
||||
device: Tuple[int, int] = None):
|
||||
|
||||
def __init__(self, device: Tuple[int, int] = None):
|
||||
super().__init__()
|
||||
self._spi = HardwareImplSpiInterface(device,
|
||||
spi_speed=12_000_000 # XXX temp parameter
|
||||
)
|
||||
|
||||
self._elite_data_len = 120
|
||||
self._elite_data_len = 20
|
||||
self._mem_header_len = 3
|
||||
self._mem_tailer_len = 8
|
||||
self._single_data_len = self._elite_data_len + self._mem_header_len + self._mem_tailer_len
|
||||
@@ -60,70 +59,46 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface):
|
||||
self.pin_reset = OutputPin.get_used(P3Pin.MEM_RST, True)
|
||||
self.pin_sel: Optional[InputPin] = InputPin.get_used(P3Pin.MEM_SEL)
|
||||
|
||||
self._pin_sel_val = False
|
||||
|
||||
self._read_green_times = 0
|
||||
self._read_red_times = 0
|
||||
|
||||
self._head_wrong_cnt = [0, 0, 0, 0, 0, 0, 0, 0]
|
||||
|
||||
|
||||
self._selector = select
|
||||
|
||||
self._pin_sel_val = [False for _ in range(Selector.SIZE)]
|
||||
self._wait_for_first_data = [True for _ in range(Selector.SIZE)]
|
||||
|
||||
@property
|
||||
def select(self) -> int:
|
||||
return self._selector.channel
|
||||
|
||||
@select.setter
|
||||
def select(self, value: int):
|
||||
self._selector.select(value)
|
||||
|
||||
def changed(self, flip=False) -> bool:
|
||||
channel = self._selector.channel
|
||||
old = self._pin_sel_val[channel]
|
||||
value = bool(self.pin_sel)
|
||||
|
||||
if flip:
|
||||
self._pin_sel_val[channel] = value
|
||||
|
||||
return value != old
|
||||
|
||||
def reset(self):
|
||||
self._spi.reset()
|
||||
|
||||
def close(self):
|
||||
self._selector.close()
|
||||
self._spi.close()
|
||||
|
||||
def flush(self):
|
||||
self.pin_reset.output(False)
|
||||
self.pin_reset.output(True)
|
||||
|
||||
@property
|
||||
def select(self) -> int:
|
||||
return 0
|
||||
|
||||
@select.setter
|
||||
def select(self, value: int):
|
||||
pass
|
||||
|
||||
def changed(self, flip=False) -> bool:
|
||||
old = self._pin_sel_val
|
||||
value = self.pin_sel.input()
|
||||
|
||||
if flip:
|
||||
self._pin_sel_val = value
|
||||
|
||||
return value != old
|
||||
|
||||
def send_byte(self, data: bytes):
|
||||
raise RuntimeError()
|
||||
|
||||
def recv_byte(self, size: int) -> Optional[bytes]:
|
||||
raise RuntimeError()
|
||||
|
||||
# def flush_all(self):
|
||||
# for _ in self._selector.foreach():
|
||||
# self.pin_reset.output(False)
|
||||
# self.pin_reset.output(True)
|
||||
|
||||
def foreach(self) -> Iterable[int]:
|
||||
for channel in self._selector.foreach():
|
||||
yield channel
|
||||
|
||||
def set_wait_flag(self, spi_idx:int = None, value:bool = None):
|
||||
self._wait_for_first_data[spi_idx] = value
|
||||
|
||||
def get_wait_flag(self, spi_idx:int = None) -> Optional[bool]:
|
||||
if spi_idx < Selector.SIZE:
|
||||
return self._wait_for_first_data[spi_idx]
|
||||
else:
|
||||
return None
|
||||
|
||||
def request_data(self):
|
||||
self.pin_request.output(False)
|
||||
sleep(0.001)
|
||||
@@ -187,6 +162,7 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface):
|
||||
address = 0
|
||||
|
||||
# first read to get data length
|
||||
tx = self._tx_buffer
|
||||
tx_h = self._tx_buffer_header
|
||||
|
||||
tx_h[0] = MEM_INS_READ
|
||||
@@ -380,23 +356,90 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface):
|
||||
|
||||
self._spi.send_byte(tx)
|
||||
|
||||
def flush_all(self):
|
||||
self.flush()
|
||||
|
||||
def foreach(self) -> Iterable[int]:
|
||||
yield 0
|
||||
|
||||
|
||||
class MultiExtMemSpiInterface(ExtMemSpiInterface):
|
||||
__slots__ = ('_selector', '_wait_for_first_data')
|
||||
|
||||
def __init__(self,
|
||||
select: Selector,
|
||||
device: Tuple[int, int] = None):
|
||||
super().__init__(device)
|
||||
|
||||
self._selector = select
|
||||
|
||||
self._pin_sel_val = [False for _ in range(Selector.SIZE)]
|
||||
self._wait_for_first_data = [True for _ in range(Selector.SIZE)]
|
||||
|
||||
@property
|
||||
def select(self) -> int:
|
||||
return self._selector.channel
|
||||
|
||||
@select.setter
|
||||
def select(self, value: int):
|
||||
self._selector.select(value)
|
||||
|
||||
def changed(self, flip=False) -> bool:
|
||||
channel = self._selector.channel
|
||||
old = self._pin_sel_val[channel]
|
||||
value = bool(self.pin_sel)
|
||||
|
||||
if flip:
|
||||
self._pin_sel_val[channel] = value
|
||||
|
||||
return value != old
|
||||
|
||||
def reset(self):
|
||||
self._spi.reset()
|
||||
|
||||
def close(self):
|
||||
self._selector.close()
|
||||
super().close()
|
||||
|
||||
def flush_all(self):
|
||||
for _ in self._selector.foreach():
|
||||
self.pin_reset.output(False)
|
||||
self.pin_reset.output(True)
|
||||
|
||||
def foreach(self) -> Iterable[int]:
|
||||
for channel in self._selector.foreach():
|
||||
yield channel
|
||||
|
||||
def set_wait_flag(self, spi_idx:int = None, value:bool = None):
|
||||
self._wait_for_first_data[spi_idx] = value
|
||||
|
||||
def get_wait_flag(self, spi_idx:int = None) -> Optional[bool]:
|
||||
if spi_idx < Selector.SIZE:
|
||||
return self._wait_for_first_data[spi_idx]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class ExtMemManager:
|
||||
def __init__(self, ext_mem: MultiExtMemSpiInterface):
|
||||
def __init__(self, ext_mem: ExtMemSpiInterface):
|
||||
self._mem_sel = InputPin.get_used(P3Pin.MEM_SEL, pull_up_down=True)
|
||||
self._mem_req = OutputPin.get_used(P3Pin.MEM_REQ, initial=True)
|
||||
|
||||
self._ext_mem = ext_mem
|
||||
|
||||
print('ExtMemManager.....')
|
||||
print()
|
||||
@property
|
||||
def mem_sel(self) -> int:
|
||||
return int(self._mem_sel)
|
||||
|
||||
@property
|
||||
def mem_req(self) -> int:
|
||||
return int(self._mem_req)
|
||||
|
||||
def mem_request(self):
|
||||
self._mem_req.pulse()
|
||||
sleep(_SLEEP_TIME_)
|
||||
|
||||
def get_ext_mem_register(self) -> List[Tuple[Optional[int], Optional[int]]]:
|
||||
print('get_ext_mem_register......')
|
||||
print()
|
||||
ret = [(None, None) for _ in range(Selector.SIZE)]
|
||||
|
||||
for channel in self._ext_mem.foreach():
|
||||
@@ -440,12 +483,36 @@ class ExtMemManager:
|
||||
|
||||
return 0
|
||||
|
||||
def get_available_channel(self, result: List[Tuple[Optional[int], Optional[int]]] = None) -> List[int]:
|
||||
print('get_available_channel......')
|
||||
print()
|
||||
def get_no_device_channel(self, result: List[Tuple[Optional[int], Optional[int]]] = None) -> List[int]:
|
||||
if result is None:
|
||||
result = self.get_ext_mem_register()
|
||||
|
||||
ret = []
|
||||
|
||||
for channel, result in enumerate(result):
|
||||
if self.is_no_device(result):
|
||||
ret.append(channel)
|
||||
|
||||
return ret
|
||||
|
||||
def get_memory_test_fail(self, result: List[Tuple[Optional[int], Optional[int]]] = None) -> List[int]:
|
||||
if result is None:
|
||||
result = self.get_ext_mem_register()
|
||||
|
||||
ret = []
|
||||
|
||||
for channel, result in enumerate(result):
|
||||
if self.is_no_device(result):
|
||||
continue
|
||||
|
||||
if self.is_memory_test_fail(result) != 0:
|
||||
ret.append(channel)
|
||||
|
||||
return ret
|
||||
|
||||
def get_available_channel(self, result: List[Tuple[Optional[int], Optional[int]]] = None) -> List[int]:
|
||||
if result is None:
|
||||
result = self.get_ext_mem_register()
|
||||
|
||||
ret = []
|
||||
|
||||
@@ -460,3 +527,172 @@ class ExtMemManager:
|
||||
|
||||
return ret
|
||||
|
||||
def test_available_channel(self, result: List[Tuple[Optional[int], Optional[int]]] = None) -> List[int]:
|
||||
if result is None:
|
||||
result = self.get_ext_mem_register()
|
||||
|
||||
available_channel = []
|
||||
|
||||
for channel, result in enumerate(result):
|
||||
r1, r2 = result
|
||||
|
||||
if self.is_no_device(result):
|
||||
print('channel', channel, 'no device')
|
||||
continue
|
||||
|
||||
test_pass = True
|
||||
|
||||
if r1 is None or r2 is None:
|
||||
test_pass = False
|
||||
print('channel', channel, 'mem_sel', 'x', 'not change')
|
||||
|
||||
if r1 is not None and r1 > 0 and r1 != DEFAULT_REGISTER_VALUE:
|
||||
test_pass = False
|
||||
print('channel', channel, 'mem_sel', 0, 'register', r1)
|
||||
|
||||
if r2 is not None and r2 > 0 and r2 != DEFAULT_REGISTER_VALUE:
|
||||
test_pass = False
|
||||
print('channel', channel, 'mem_sel', 1, 'register', r2)
|
||||
|
||||
if test_pass:
|
||||
print('channel', channel, 'mem_sel', 0, 'register', r1)
|
||||
print('channel', channel, 'mem_sel', 1, 'register', r2)
|
||||
available_channel.append(channel)
|
||||
|
||||
return available_channel
|
||||
|
||||
def test_memory_read_write(self, channel: int, print_result=False) -> bool:
|
||||
self._ext_mem.select = channel
|
||||
|
||||
addr = 4
|
||||
size = 100
|
||||
test_pass = True
|
||||
|
||||
while addr < MEM_SIZE:
|
||||
d1 = [randint(10, 99) for _ in range(size)]
|
||||
d2 = [randint(10, 99) for _ in range(size)]
|
||||
|
||||
self.mem_request()
|
||||
m1 = int(self._mem_sel)
|
||||
self._ext_mem.write_memory(addr, d1)
|
||||
|
||||
self.mem_request()
|
||||
m2 = int(self._mem_sel)
|
||||
self._ext_mem.write_memory(addr, d2)
|
||||
|
||||
self.mem_request()
|
||||
m11 = int(self._mem_sel)
|
||||
r1 = self._ext_mem.read_memory(addr, size)
|
||||
|
||||
if m1 != m11:
|
||||
test_pass = False
|
||||
if print_result:
|
||||
print('channel', channel, 'mem_sel not change')
|
||||
|
||||
if d1 != r1:
|
||||
test_pass = False
|
||||
if print_result:
|
||||
self.print_bytes_diff(d1, r1)
|
||||
|
||||
self.mem_request()
|
||||
m22 = int(self._mem_sel)
|
||||
r2 = self._ext_mem.read_memory(addr, size)
|
||||
|
||||
if m2 != m22:
|
||||
test_pass = False
|
||||
if print_result:
|
||||
print('channel', channel, 'mem_sel not change')
|
||||
|
||||
if d2 != r2:
|
||||
test_pass = False
|
||||
if print_result:
|
||||
self.print_bytes_diff(d2, r2)
|
||||
|
||||
addr += size
|
||||
|
||||
return test_pass
|
||||
|
||||
@staticmethod
|
||||
def print_bytes_diff(_1: List[int], _2: List[int]):
|
||||
s1 = ''
|
||||
s2 = ''
|
||||
|
||||
l1 = len(_1)
|
||||
l2 = len(_2)
|
||||
|
||||
for i in range(min(l1, l2)):
|
||||
v1 = _1[i]
|
||||
v2 = _2[i]
|
||||
|
||||
if v1 == v2:
|
||||
s1 += '%02X ' % v1
|
||||
s2 += '%02X ' % v2
|
||||
else:
|
||||
s1 += '%02X ' % v1
|
||||
s2 += pc('%02X' % v2, RED) + ' '
|
||||
|
||||
if l1 == l2:
|
||||
pass
|
||||
|
||||
elif l1 < l2:
|
||||
for i in range(l1, l2):
|
||||
s2 += pc('%02X' % _2[i], GREEN) + ' '
|
||||
else:
|
||||
for i in range(l2, l1):
|
||||
s1 += pc('%02X' % _1[i], RED) + ' '
|
||||
|
||||
print(s1)
|
||||
print(s2)
|
||||
|
||||
|
||||
def hardware_test():
|
||||
ext_mem = MultiExtMemSpiInterface(Selector.get(Selector.MEM_SELECTOR))
|
||||
|
||||
fake_mode = False
|
||||
|
||||
try:
|
||||
ext_mem.reset()
|
||||
except FileNotFoundError:
|
||||
fake_mode = True
|
||||
|
||||
ret = {
|
||||
'channel_count': Selector.SIZE,
|
||||
'memory_size': MEM_SIZE,
|
||||
'pin_mem_req': P3Pin.MEM_REQ,
|
||||
'pin_mem_sel': P3Pin.MEM_SEL,
|
||||
}
|
||||
|
||||
if not fake_mode:
|
||||
tester = ExtMemManager(ext_mem)
|
||||
|
||||
result = tester.get_ext_mem_register()
|
||||
no_device = tester.get_no_device_channel(result)
|
||||
reg_fail = tester.get_memory_test_fail(result)
|
||||
available = tester.get_available_channel(result)
|
||||
|
||||
channel = ['unknown' for _ in range(Selector.SIZE)]
|
||||
|
||||
for ch in range(len(channel)):
|
||||
if ch in no_device:
|
||||
channel[ch] = 'no_device'
|
||||
|
||||
elif ch in reg_fail:
|
||||
channel[ch] = 'reg_fail'
|
||||
|
||||
elif not tester.test_memory_read_write(ch):
|
||||
channel[ch] = 'mem_fail'
|
||||
|
||||
else:
|
||||
channel[ch] = 'available'
|
||||
|
||||
ret['register'] = result
|
||||
ret['available'] = available
|
||||
ret['channel'] = channel
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from pprint import pprint
|
||||
|
||||
pprint(hardware_test())
|
||||
|
||||
+6
-17
@@ -280,14 +280,11 @@ class Main(CliMain):
|
||||
@cli_command('controller')
|
||||
def _controller_server(self, command: str, argv: List[str]):
|
||||
"""controller server"""
|
||||
print(self, command, argv)
|
||||
print('##_controller_server')
|
||||
return _ControlServer
|
||||
|
||||
@cli_command('data')
|
||||
def _data_server(self, command: str, argv: List[str]):
|
||||
"""data server"""
|
||||
print('##_data_server')
|
||||
return _DataServer
|
||||
|
||||
@cli_command('export')
|
||||
@@ -305,7 +302,6 @@ class Main(CliMain):
|
||||
return LEDControlMain(command)
|
||||
|
||||
def run(self):
|
||||
print('RUN!!!!!!!!!!!!!!!!!!!')
|
||||
self.print_help()
|
||||
|
||||
|
||||
@@ -339,16 +335,15 @@ class _ServerMain(CliSubCommandMain, metaclass=abc.ABCMeta):
|
||||
def run(self):
|
||||
exit_code = 1
|
||||
|
||||
print('create_server')
|
||||
|
||||
server = self.create_server()
|
||||
exit_code = server.main()
|
||||
print('....after create_server')
|
||||
print('.. ..')
|
||||
print()
|
||||
|
||||
if _RUNTIME_COMPILE:
|
||||
exit_code = server.main()
|
||||
else:
|
||||
with self.profiling_options.generate_profile_context():
|
||||
exit_code = server.main()
|
||||
|
||||
sys.exit(exit_code)
|
||||
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
@@ -360,7 +355,6 @@ class _ControlServer(_ServerMain):
|
||||
from biopro.device.manager import DeviceManagerOptions
|
||||
from biopro.server.data import DataServerOptions
|
||||
from biopro.exp_pro.manager import ExpManagerOption
|
||||
print('command', command)
|
||||
|
||||
super().__init__(command)
|
||||
|
||||
@@ -462,8 +456,6 @@ class _ControlServer(_ServerMain):
|
||||
def create_server(self) -> SocketServer:
|
||||
from biopro.server.main import ControlServer
|
||||
|
||||
print('..create_server')
|
||||
|
||||
return ControlServer(self.server_device_options,
|
||||
self.server_data_options,
|
||||
self.server_controller_options,
|
||||
@@ -485,11 +477,8 @@ class _DataServer(_ServerMain):
|
||||
def create_server(self) -> SocketServer:
|
||||
from biopro.server.data import DataServer
|
||||
|
||||
print('.1.create_server')
|
||||
|
||||
return DataServer(self.server_data_options)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print('START!!!!!!!!!!!!!!!!!!!!!!!!')
|
||||
Main().main()
|
||||
|
||||
@@ -10,7 +10,7 @@ import base64
|
||||
from biopro.data import *
|
||||
from biopro.devlib.data import *
|
||||
from biopro.generator import GeneratorOptions
|
||||
from biopro.impl.ext_mem import MultiExtMemSpiInterface, ExtMemManager
|
||||
from biopro.impl.ext_mem import ExtMemSpiInterface, MultiExtMemSpiInterface, ExtMemManager
|
||||
from biopro.impl.selector import Selector
|
||||
from biopro.recording import RecordingMetaFile, RecordingFileWriter
|
||||
from biopro.util.address import EMPTY_ADDRESS, address_str
|
||||
@@ -132,7 +132,7 @@ class DataServer(SocketServer, DataAPI):
|
||||
|
||||
if self._spi is not None:
|
||||
self.log_verbose('spi flush')
|
||||
# self._spi.flush_all()
|
||||
self._spi.flush_all()
|
||||
|
||||
self.reset_available_channel()
|
||||
|
||||
@@ -199,8 +199,6 @@ class DataServer(SocketServer, DataAPI):
|
||||
|
||||
self.setup_spi(spi_mode)
|
||||
|
||||
print('self.setup()')
|
||||
print()
|
||||
# restart
|
||||
self.setup()
|
||||
|
||||
@@ -226,9 +224,9 @@ class DataServer(SocketServer, DataAPI):
|
||||
return
|
||||
elif spi_mode == self.MODE_DISABLE:
|
||||
spi = None
|
||||
elif spi_mode == self.MODE_SINGLE:
|
||||
spi = ExtMemSpiInterface()
|
||||
elif spi_mode == self.MODE_SELECTOR:
|
||||
print('~~~~~')
|
||||
print()
|
||||
spi = MultiExtMemSpiInterface(Selector.get(Selector.MEM_SELECTOR))
|
||||
else:
|
||||
raise ValueError('illegal spi mode : ' + spi_mode)
|
||||
@@ -306,8 +304,6 @@ class DataServer(SocketServer, DataAPI):
|
||||
return self._spi_mode
|
||||
|
||||
def available_channel(self, reset=False) -> List[int]:
|
||||
print('!!!!!!!!!!!!!!')
|
||||
print()
|
||||
if reset:
|
||||
self.reset_available_channel()
|
||||
|
||||
|
||||
@@ -84,9 +84,7 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
# data server
|
||||
data_options = DataServerOptions.get_options(*options)
|
||||
data_options.repository = device_option.repository
|
||||
print('self.data_server')
|
||||
self.data_server = DataServerProcess(data_options)
|
||||
print('self.data_server')
|
||||
|
||||
# experimental protocol
|
||||
# exp_options = ExpManagerOption.get_options(*options)
|
||||
@@ -200,8 +198,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
def setup(self) -> None:
|
||||
"""setup the control server
|
||||
"""
|
||||
print('ControlServer: setup')
|
||||
print()
|
||||
# print allow host
|
||||
from biopro.util.inet import allow_host
|
||||
|
||||
@@ -221,7 +217,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
self.run_thread(_RandomCrashThread())
|
||||
|
||||
# data server
|
||||
print('start_process')
|
||||
interface = self.device_manager.interface
|
||||
options = self.data_server.options
|
||||
if interface == DeviceHardwareInterface.INTERFACE_DUMMY:
|
||||
@@ -232,7 +227,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
options.storage_root = str(self.file_manager.storage_root)
|
||||
|
||||
self.data_server.start_process()
|
||||
print('start_process___')
|
||||
|
||||
# file manager
|
||||
self.log_verbose('setup file manager')
|
||||
@@ -242,9 +236,7 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
|
||||
# device manager
|
||||
self.log_verbose('setup device manager')
|
||||
print('self.device_manager.setup()')
|
||||
self.device_manager.setup()
|
||||
print('self.device_manager.setup()____')
|
||||
self.submit_thread(self._setup_library)
|
||||
|
||||
# device manager reset
|
||||
@@ -277,9 +269,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
self.mqtt_thread.start()
|
||||
# self.run_thread(self.mqtt_thread)
|
||||
|
||||
print('ControlServer: setup______end')
|
||||
print()
|
||||
|
||||
def _setup_file_manager(self):
|
||||
self.log_verbose('setup file manager')
|
||||
|
||||
@@ -323,8 +312,7 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
|
||||
def _setup_device(self):
|
||||
# wait data server
|
||||
print('resettt---------30')
|
||||
print()
|
||||
|
||||
self.log_verbose('device hardware reset')
|
||||
self.device_manager.reset(software_reset=False)
|
||||
|
||||
@@ -374,8 +362,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
while retry < 10:
|
||||
try:
|
||||
with client:
|
||||
print('resettt---------31')
|
||||
print()
|
||||
client.reset()
|
||||
break
|
||||
except RuntimeError:
|
||||
@@ -417,8 +403,6 @@ class ControlServer(SocketServer, ControlServerAPI, CacheAPI, CacheNotifyHandler
|
||||
def _setup_device_manager(self, available_channel: List[int]):
|
||||
# device reset
|
||||
# only reset those device has channel available
|
||||
print('resettt---------33')
|
||||
print()
|
||||
self.log_verbose('reset device')
|
||||
self.device_manager.reset(available_channel)
|
||||
|
||||
|
||||
@@ -121,7 +121,6 @@ class ControllerProcess(LoggerFlag, Generic[PO, PC], metaclass=abc.ABCMeta):
|
||||
cmd = current_command_header()
|
||||
|
||||
cmd.extend(arg)
|
||||
print('cmd', cmd, env)
|
||||
|
||||
self.__process = process = Popen(cmd, env=env)
|
||||
self.log_info('process PID :', process.pid)
|
||||
|
||||
@@ -465,7 +465,7 @@ class RecordingProcess(Process):
|
||||
"""
|
||||
raw_data = []
|
||||
index = 0
|
||||
elite_data_len = 120
|
||||
elite_data_len = 20
|
||||
mem_header_len = 3
|
||||
mem_tailer_len = 8
|
||||
single_data_len = elite_data_len + mem_header_len + mem_tailer_len
|
||||
|
||||
@@ -621,20 +621,16 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
self.__cli_help_document[handle] = _resolve_doc(handle.help_doc)
|
||||
|
||||
def main(self, argv: List[str] = None):
|
||||
print('main', argv)
|
||||
if argv is None:
|
||||
print('Main None', sys.argv[1:])
|
||||
argv = sys.argv[1:]
|
||||
|
||||
try:
|
||||
argv = self.parsing(argv)
|
||||
print('1', argv)
|
||||
|
||||
if argv is None:
|
||||
self.run()
|
||||
else:
|
||||
command, *argv = argv
|
||||
print('2', command, argv)
|
||||
|
||||
self.invoke_subcommand(command, argv)
|
||||
|
||||
@@ -658,7 +654,6 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
|
||||
while i < len(argv):
|
||||
arg = argv[i]
|
||||
print('arg', i, arg)
|
||||
|
||||
if not left_all and arg.startswith('-'):
|
||||
|
||||
@@ -681,7 +676,6 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
|
||||
else:
|
||||
# sub command
|
||||
print('self._cli_commands', self._cli_commands)
|
||||
if parsing_sub_command and j == 0:
|
||||
if arg in self._cli_commands:
|
||||
return argv[i:]
|
||||
@@ -717,7 +711,7 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
# handle not found
|
||||
return False
|
||||
|
||||
print('_handle_flags_', arg)
|
||||
# print('_handle_flags_', arg)
|
||||
handle.invoke(arg)
|
||||
|
||||
if handle.force_return:
|
||||
@@ -734,7 +728,6 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
:return: number of arguments consumed, 0 if fail.
|
||||
"""
|
||||
arg, value = part_suffix(arg, '=')
|
||||
print('_handle_options_', arg, value)
|
||||
|
||||
handle = self._cli_options.get(arg, None)
|
||||
|
||||
@@ -768,7 +761,6 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
:return: None if fail, true if left all.
|
||||
"""
|
||||
a = self._cli_arguments
|
||||
print('cli_argument', arg, pos, a)
|
||||
handle = a.get(pos, None)
|
||||
|
||||
if handle is None and pos == 0:
|
||||
@@ -825,11 +817,10 @@ class CliMain(AbstractCliMain, metaclass=abc.ABCMeta):
|
||||
:return:
|
||||
"""
|
||||
handle = self._cli_commands.get(command, None)
|
||||
print('handle', handle)
|
||||
|
||||
if handle is None:
|
||||
raise RuntimeError('sub-command not found : ' + command)
|
||||
|
||||
|
||||
return handle.invoke(command, argv)
|
||||
|
||||
def print_help(self, print_usage=True, file: Optional[IO] = None) -> None:
|
||||
|
||||
@@ -529,7 +529,6 @@ class CliHandleCommand(CliHandle):
|
||||
"""
|
||||
try:
|
||||
main = self.handle(self._target, command, argv)
|
||||
print('3', main, self._target, command, argv)
|
||||
|
||||
except (MainForceReturn, SystemExit, KeyboardInterrupt):
|
||||
raise
|
||||
@@ -547,7 +546,6 @@ class CliHandleCommand(CliHandle):
|
||||
elif isinstance(main, type):
|
||||
# initialize CliSubCommandMain
|
||||
main = main(command)
|
||||
print('4', main)
|
||||
|
||||
if not isinstance(main, AbstractCliMain):
|
||||
raise RuntimeError('not a CliSubCommandMain : ' + type(main).__class__)
|
||||
|
||||
@@ -64,10 +64,8 @@ class ProfileOptions(CliOptions):
|
||||
self.profiling_sorting = fields
|
||||
|
||||
def generate_profile_context(self) -> 'ProfileContext':
|
||||
print('self.profiling_method:', self.profiling_method)
|
||||
if self.profiling_method is None:
|
||||
ret = _NullProfileContext(self)
|
||||
print('ret=', ret)
|
||||
|
||||
else:
|
||||
try:
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"record_meta": true,
|
||||
"initial": 0,
|
||||
"domain": [
|
||||
4096
|
||||
35001
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
|
||||
Reference in New Issue
Block a user