Files
menu/port/menu_port.h
2025-12-19 17:01:27 +08:00

112 lines
3.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
**********************************************************************************************************************
* @file menu_port.h
* @brief 菜单组件硬件端口层定义
* @author menu_component
* @date 2025-12-19
**********************************************************************************************************************
*/
#ifndef MENU_PORT_H
#define MENU_PORT_H
/* Includes ----------------------------------------------------------------------------------------------------------*/
#include "../src/core/menu_config.h"
#include <stdarg.h>
/* 类型定义 ---------------------------------------------------------------------------------------------------------*/
/**
* @brief Modbus寄存器类型
*/
typedef enum {
MODBUS_REG_TYPE_COIL, /*!< 线圈寄存器 */
MODBUS_REG_TYPE_DISCRETE_INPUT, /*!< 离散输入寄存器 */
MODBUS_REG_TYPE_HOLDING_REG, /*!< 保持寄存器 */
MODBUS_REG_TYPE_INPUT_REG, /*!< 输入寄存器 */
} ModbusRegType;
/**
* @brief 持久化操作回调函数类型定义
*/
typedef MenuErrCode (*MenuPersistenceSaveCallback)(const uint8_t* data, uint16_t size); ///< 保存持久化数据回调
typedef MenuErrCode (*MenuPersistenceRestoreCallback)(uint8_t* data, uint16_t* size); ///< 恢复持久化数据回调
/**
* @brief 硬件驱动结构体
*/
typedef struct {
void (*printf)(const char* fmt, va_list args); ///< 硬件打印接口
uint32_t (*get_tick)(void); ///< 获取系统滴答时间
void (*delay_ms)(uint32_t ms); ///< 硬件延迟函数
void (*display)(const char* menu_name, uint16_t menu_id); ///< 菜单显示接口
MenuEventType (*key_scan)(void); ///< 按键扫描接口(可选)
void (*irq_ctrl)(bool enable); ///< 中断管理接口(可选)
void (*error_handler)(MenuErrCode err_code); ///< 错误处理接口(可选)
MenuErrCode (*modbus_send)(ModbusRegType reg_type, uint16_t reg_addr, const uint8_t* reg_buf, uint8_t buf_len); ///< Modbus发送接口可选
MenuErrCode (*modbus_receive)(ModbusRegType reg_type, uint16_t reg_addr, uint8_t* reg_buf, uint8_t buf_len); ///< Modbus接收接口可选
MenuPersistenceSaveCallback persistence_save; ///< 持久化数据保存接口(可选)
MenuPersistenceRestoreCallback persistence_restore; ///< 持久化数据恢复接口(可选)
} MenuPortDriver;
/* 函数声明 ---------------------------------------------------------------------------------------------------------*/
/**
* @brief 初始化硬件端口层
* @param driver 硬件驱动结构体指针
* @return 错误码
*/
MenuErrCode menu_port_init(const MenuPortDriver* driver);
/**
* @brief 反初始化硬件端口层
* @return 错误码
*/
MenuErrCode menu_port_deinit(void);
/**
* @brief 获取当前系统时间ms
* @return 系统时间ms
*/
uint32_t menu_port_get_tick(void);
/**
* @brief 硬件延迟函数
* @param ms 延迟时间ms
*/
void menu_port_delay_ms(uint32_t ms);
/**
* @brief 打印函数
* @param fmt 格式化字符串
* @param ... 可变参数
*/
void menu_port_printf(const char* fmt, ...);
/**
* @brief 菜单显示函数
* @param menu_name 菜单名称
* @param menu_id 菜单ID
*/
void menu_port_display(const char* menu_name, uint16_t menu_id);
/**
* @brief 按键扫描函数
* @return 按键事件类型
*/
MenuEventType menu_port_key_scan(void);
/**
* @brief 中断管理函数
* @param enable 是否启用中断
*/
void menu_port_irq_ctrl(bool enable);
/**
* @brief 错误处理函数
* @param err_code 错误码
*/
void menu_port_error_handler(MenuErrCode err_code);
#endif /* MENU_PORT_H */