|
|
|
@ -37,7 +37,7 @@ from .utils import pollStrategy
|
|
|
|
# ====================== 分割線 =====================
|
|
|
|
# ====================== 分割線 =====================
|
|
|
|
|
|
|
|
|
|
|
|
logger = setup_logger(os.path.basename(__file__))
|
|
|
|
logger = setup_logger(os.path.basename(__file__))
|
|
|
|
MODULE_VER = "2.00"
|
|
|
|
MODULE_VER = "2.02"
|
|
|
|
|
|
|
|
|
|
|
|
rx_module_ack = RingBuffer(capacity=64, buffer_id=253)
|
|
|
|
rx_module_ack = RingBuffer(capacity=64, buffer_id=253)
|
|
|
|
|
|
|
|
|
|
|
|
@ -147,10 +147,13 @@ class XBeeFrameProcessor_Base(FrameProcessor):
|
|
|
|
|
|
|
|
|
|
|
|
DEST_ADDR64_BRAODCAST = b'\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
|
|
DEST_ADDR64_BRAODCAST = b'\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, at_handler: "ATCommandHandler" = None):
|
|
|
|
def __init__(self, at_handler: "ATCommandHandler" = None):
|
|
|
|
super().__init__()
|
|
|
|
super().__init__()
|
|
|
|
self.at_handler = at_handler
|
|
|
|
self.at_handler = at_handler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ---- 對外契約 ----
|
|
|
|
# ---- 對外契約 ----
|
|
|
|
def process_incoming(self, data: bytes) -> bytes:
|
|
|
|
def process_incoming(self, data: bytes) -> bytes:
|
|
|
|
"""處理 XBee API 幀並提取 payload"""
|
|
|
|
"""處理 XBee API 幀並提取 payload"""
|
|
|
|
@ -1398,51 +1401,51 @@ if __name__ == '__main__':
|
|
|
|
# UDP_REMOTE_PORT = 14571
|
|
|
|
# UDP_REMOTE_PORT = 14571
|
|
|
|
# sm.create_serial_link(SERIAL_PORT, SERIAL_BAUDRATE, UDP_REMOTE_PORT, SerialMode.STRAIGHT)
|
|
|
|
# sm.create_serial_link(SERIAL_PORT, SERIAL_BAUDRATE, UDP_REMOTE_PORT, SerialMode.STRAIGHT)
|
|
|
|
|
|
|
|
|
|
|
|
# 測試項二
|
|
|
|
# # 測試項二
|
|
|
|
print("運行 測試項二")
|
|
|
|
# print("運行 測試項二")
|
|
|
|
SERIAL_PORT = '/dev/ttyUSB0' # 手動指定
|
|
|
|
# SERIAL_PORT = '/dev/ttyUSB0' # 手動指定
|
|
|
|
SERIAL_BAUDRATE = 115200
|
|
|
|
# SERIAL_BAUDRATE = 115200
|
|
|
|
UDP_REMOTE_PORT = 14561
|
|
|
|
# UDP_REMOTE_PORT = 14561
|
|
|
|
sm.create_serial_link(SERIAL_PORT, SERIAL_BAUDRATE, UDP_REMOTE_PORT, SerialMode.XBEEAPI2AT)
|
|
|
|
# sm.create_serial_link(SERIAL_PORT, SERIAL_BAUDRATE, UDP_REMOTE_PORT, SerialMode.XBEEAPI2AT)
|
|
|
|
serial_id = 1
|
|
|
|
# serial_id = 1
|
|
|
|
device_sys_id = 10
|
|
|
|
# device_sys_id = 10
|
|
|
|
|
|
|
|
|
|
|
|
linked_serial = sm.get_serial_link()
|
|
|
|
# linked_serial = sm.get_serial_link()
|
|
|
|
print(f"連結完成 : {linked_serial}. 等待兩秒")
|
|
|
|
# print(f"連結完成 : {linked_serial}. 等待兩秒")
|
|
|
|
|
|
|
|
|
|
|
|
# 等 connection_made 完成 writer 注入,再發一筆 AT 指令測試
|
|
|
|
# # 等 connection_made 完成 writer 注入,再發一筆 AT 指令測試
|
|
|
|
time.sleep(2)
|
|
|
|
# time.sleep(2)
|
|
|
|
rssi_request = ATRequest(command=b'DB', parameter=b'', frame_id=device_sys_id)
|
|
|
|
# rssi_request = ATRequest(command=b'DB', parameter=b'', frame_id=device_sys_id)
|
|
|
|
print(f"手動送出 DB AT Command:")
|
|
|
|
# print(f"手動送出 DB AT Command:")
|
|
|
|
for i in range(20):
|
|
|
|
# for i in range(20):
|
|
|
|
sm.send_at_command(1, rssi_request)
|
|
|
|
# sm.send_at_command(1, rssi_request)
|
|
|
|
time.sleep(1)
|
|
|
|
# time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
sm.remove_serial_link(1)
|
|
|
|
# sm.remove_serial_link(1)
|
|
|
|
time.sleep(2)
|
|
|
|
# time.sleep(2)
|
|
|
|
sm.shutdown()
|
|
|
|
# sm.shutdown()
|
|
|
|
print("結束運行")
|
|
|
|
# print("結束運行")
|
|
|
|
|
|
|
|
|
|
|
|
# # 測試項三
|
|
|
|
# 測試項三
|
|
|
|
# SERIAL_PORT = '/dev/ttyUSB0'
|
|
|
|
SERIAL_PORT = '/dev/ttyUSB0'
|
|
|
|
# SERIAL_BAUDRATE = 115200
|
|
|
|
SERIAL_BAUDRATE = 115200
|
|
|
|
# UDP_REMOTE_PORT = 14561
|
|
|
|
UDP_REMOTE_PORT = 14561
|
|
|
|
# sm.create_serial_link(SERIAL_PORT, SERIAL_BAUDRATE, UDP_REMOTE_PORT, SerialMode.XBEEAPI_espv1)
|
|
|
|
sm.create_serial_link(SERIAL_PORT, SERIAL_BAUDRATE, UDP_REMOTE_PORT, SerialMode.XBEEAPI_espv1)
|
|
|
|
|
|
|
|
|
|
|
|
# time.sleep(2) # 等 serial 連線與 operator 啟動
|
|
|
|
time.sleep(2) # 等 serial 連線與 operator 啟動
|
|
|
|
|
|
|
|
|
|
|
|
# serial_id = 1
|
|
|
|
serial_id = 1
|
|
|
|
# processor = sm.get_espv1_processor(serial_id)
|
|
|
|
processor = sm.get_espv1_processor(serial_id)
|
|
|
|
# if processor is not None:
|
|
|
|
if processor is not None:
|
|
|
|
# processor.request_discovery()
|
|
|
|
processor.request_discovery()
|
|
|
|
# processor.request_poll(target_system_id=1)
|
|
|
|
processor.request_poll(target_system_id=1)
|
|
|
|
# processor.request_poll(target_system_id=1, grant_bytes=200)
|
|
|
|
processor.request_poll(target_system_id=1, grant_bytes=200)
|
|
|
|
# print(processor.get_status_snapshot())
|
|
|
|
print(processor.get_status_snapshot())
|
|
|
|
# print(processor.get_gcs_queue_byte_count())
|
|
|
|
print(processor.get_gcs_queue_byte_count())
|
|
|
|
|
|
|
|
|
|
|
|
# sm.remove_serial_link(serial_id)
|
|
|
|
time.sleep(120)
|
|
|
|
# time.sleep(30)
|
|
|
|
sm.remove_serial_link(serial_id)
|
|
|
|
# sm.shutdown()
|
|
|
|
sm.shutdown()
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
'''
|
|
|
|
================= 改版記錄 ============================
|
|
|
|
================= 改版記錄 ============================
|
|
|
|
|