78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# midware/drivers/base_driver.py
|
||
|
||
"""
|
||
Tan mingyan
|
||
2026/3/9
|
||
驱动基类(base_driver.py)—— 定义标准接口(核心)
|
||
所有总线驱动继承该基类,保证接口统一,解耦 bus_udp_decoupler.py 与具体驱动实现:
|
||
"""
|
||
from abc import ABC, abstractmethod
|
||
from typing import Optional, Dict, Any
|
||
from loguru import logger
|
||
|
||
class BaseBusDriver(ABC):
|
||
"""
|
||
总线驱动基类:定义所有总线必须实现的标准接口
|
||
遵循「开闭原则」:新增总线只需继承该类实现接口,无需修改现有代码
|
||
"""
|
||
def __init__(self, config: Optional[Dict[str, Any]] = None):
|
||
"""
|
||
初始化驱动
|
||
:param config: 驱动配置(如波特率、端口、IP等)
|
||
"""
|
||
self.config = config or {}
|
||
self.is_connected = False # 驱动连接状态
|
||
self._init_config() # 初始化配置
|
||
|
||
def _init_config(self):
|
||
"""初始化默认配置(子类可重写)"""
|
||
logger.info(f"初始化 {self.__class__.__name__} 默认配置")
|
||
|
||
@abstractmethod
|
||
def connect(self) -> bool:
|
||
"""
|
||
连接总线(如打开串口、建立CAN通道、连接1553B板卡)
|
||
:return: 连接成功返回True,失败返回False
|
||
"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def disconnect(self) -> bool:
|
||
"""
|
||
断开总线连接
|
||
:return: 断开成功返回True,失败返回False
|
||
"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def send(self, data: bytes, **kwargs) -> bool:
|
||
"""
|
||
发送数据到总线
|
||
:param data: 待发送的原始字节数据
|
||
:param kwargs: 扩展参数(如优先级、地址、帧ID等)
|
||
:return: 发送成功返回True,失败返回False
|
||
"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def recv(self, timeout: float = 0.1, **kwargs) -> Optional[bytes]:
|
||
"""
|
||
从总线接收数据
|
||
:param timeout: 接收超时时间(秒)
|
||
:param kwargs: 扩展参数(如过滤条件、地址等)
|
||
:return: 接收到的字节数据,超时/失败返回None
|
||
"""
|
||
pass
|
||
|
||
def check_status(self) -> bool:
|
||
"""
|
||
检查驱动状态(默认实现,子类可重写)
|
||
:return: 驱动正常返回True,异常返回False
|
||
"""
|
||
return self.is_connected
|
||
|
||
def __del__(self):
|
||
"""析构函数:自动断开连接"""
|
||
if self.is_connected:
|
||
self.disconnect()
|
||
logger.info(f"{self.__class__.__name__} 自动断开连接") |