diff --git a/src/fc_network_adapter/fc_network_adapter/mainOrchestrator.py b/src/fc_network_adapter/fc_network_adapter/mainOrchestrator.py index a07a330..99be627 100644 --- a/src/fc_network_adapter/fc_network_adapter/mainOrchestrator.py +++ b/src/fc_network_adapter/fc_network_adapter/mainOrchestrator.py @@ -435,6 +435,10 @@ class ControlPanel: state.serial_info_temp["CommunicationType"] = "XBee(API-AT)" menu_stack.pop() idx_stack.pop() + elif selected.action == "SET_SERIAL_COMM_XBEE_ESP": + state.serial_info_temp["CommunicationType"] = "XBee(API-API) espv1" + menu_stack.pop() + idx_stack.pop() elif selected.action == "SET_SERIAL_COMM_TELEMETRY": state.serial_info_temp["CommunicationType"] = "TELEMETRY" menu_stack.pop() @@ -812,6 +816,7 @@ class ControlPanel: port_menu = MenuNode(f"{port}", children=[ MenuNode("Set Comm Type", "設定通訊形態", "SET_SERIAL_COMM", children=[ MenuNode("XBee(API-AT)", "XBee 模式", "SET_SERIAL_COMM_XBEE"), + MenuNode("XBee(API-API)", "XBee 模式(with ESP)", "SET_SERIAL_COMM_XBEE_ESP"), MenuNode("Telemetry", "數傳模式", "SET_SERIAL_COMM_TELEMETRY"), ]), MenuNode("Set Baud", "設定 Baud", "TEXT_BAUD_SERIAL"), @@ -1595,6 +1600,7 @@ class Orchestrator: # 定義通訊類型映射表 COMM_TYPE_MAP = { "XBee(API-AT)": sm.SerialMode.XBEEAPI2AT, + "XBee(API-AT)": sm.SerialMode.XBEEAPI_espv1, "TELEMETRY": sm.SerialMode.STRAIGHT, # 新增區 } @@ -1638,25 +1644,7 @@ class Orchestrator: def main(): - # =========== 各項模組的版本先驗 =========== - # 除非你有在做這幾項模組的改版 不然動到這邊的版本號 代表執行環境有很大的問題!!!!!! - version_check = True - if mo.MODULE_VER != "1.50": - print("Module Version Error! : mavlinkObkect") - version_check = False - if mros.MODULE_VER != "2.50": - print("Module Version Error! : mavlinkROS2Nodes") - version_check = False - if mvv.MODULE_VER != "1.10": - print("Module Version Error! : mavlinkVehicleView") - version_check = False - if sm.MODULE_VER != "2.00": - print("Module Version Error! : serialManager") - version_check = False - if version_check == False: - print("Environment Obstacle! Check YOUR Execution System Path First!!") - return - # ======================================== + logger.info(f"Each Module Running Version at mavlinkObkect:{mo.MODULE_VER}, mavlinkROS2Nodes:{mros.MODULE_VER}, mavlinkVehicleView:{mvv.MODULE_VER}, serialManager:{sm.MODULE_VER}") stop_evt = threading.Event() def signal_handler(signum, frame): diff --git a/src/fc_network_adapter/fc_network_adapter/mavlinkROS2Nodes.py b/src/fc_network_adapter/fc_network_adapter/mavlinkROS2Nodes.py index 34e9828..7f080a5 100644 --- a/src/fc_network_adapter/fc_network_adapter/mavlinkROS2Nodes.py +++ b/src/fc_network_adapter/fc_network_adapter/mavlinkROS2Nodes.py @@ -214,7 +214,7 @@ class VehicleStatusPublisher(Node): topic_name = f'{self.topicString_prefix}/sys{sysid}/{topic}' publisher = self.create_publisher(msg_type, topic_name, qos) self.fc_publishers[key] = publisher - logger.info(f"Created publisher: {topic_name}") + logger.debug(f"Created publisher: {topic_name}") return self.fc_publishers[key] def _publish_position_gnss(self, sysid: int, status: mvv.ComponentStatus): diff --git a/src/fc_network_adapter/fc_network_adapter/serialManager.py b/src/fc_network_adapter/fc_network_adapter/serialManager.py index 8ad482c..8e321b7 100644 --- a/src/fc_network_adapter/fc_network_adapter/serialManager.py +++ b/src/fc_network_adapter/fc_network_adapter/serialManager.py @@ -19,6 +19,7 @@ from enum import Enum, auto from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Callable, Optional +from typing import List # # XBee 模組 # from xbee.frame import APIFrame @@ -449,11 +450,11 @@ class XBeeFrameProcessor_ESPv1(XBeeFrameProcessor_Base): return len(self.gcs_transmit_queue) # 把 gcs_transmit_queue 的 mavlink 封包依照大小打包出來 - def _pop_flush_batch(self, max_bytes: int) -> list[bytes]: + def _pop_flush_batch(self, max_bytes: int) -> List[bytes]: if not self.gcs_transmit_queue: return [] - batch: list[bytes] = [] + batch: List[bytes] = [] total_bytes = 0 while self.gcs_transmit_queue: @@ -507,7 +508,7 @@ class XBeeFrameProcessor_ESPv1(XBeeFrameProcessor_Base): # ---- POLL 排程輔助 ---- # 計算下次要 poll 的對象跟大小 - def _pick_poll_target(self) -> tuple[Optional[bytes], int]: + def _pick_poll_target(self): poll_devices = [ pollStrategy.PollDevice( address_64=address_64, @@ -529,7 +530,7 @@ class XBeeFrameProcessor_ESPv1(XBeeFrameProcessor_Base): stale_addresses = [ address_64 for address_64, device in self.esp32_address_mapping.items() - if (now - device.last_hello_time > self.device_offline_timeout) and \ + if (now - device.last_hello_time > self.device_offline_timeout) and \ (now - device.last_done_time > self.device_offline_timeout) ] for address_64 in stale_addresses: diff --git a/src/fc_network_adapter/fc_network_adapter/utils/pollStrategy.py b/src/fc_network_adapter/fc_network_adapter/utils/pollStrategy.py index 92290d8..ca40ded 100644 --- a/src/fc_network_adapter/fc_network_adapter/utils/pollStrategy.py +++ b/src/fc_network_adapter/fc_network_adapter/utils/pollStrategy.py @@ -5,6 +5,7 @@ POLL 輪詢策略,供 XBeeFrameProcessor_ESPv1 使用。 """ from dataclasses import dataclass +from typing import List @dataclass(frozen=True) @@ -23,10 +24,9 @@ class PollSchedulerState: def pick_next( - devices: list[PollDevice], - scheduler_state: PollSchedulerState, - # default_grant_bytes: int = 600, -) -> tuple[bytes | None, int]: + devices: List[PollDevice], + scheduler_state: PollSchedulerState +): """ 選下一個 POLL 目標。