初始化版本
This commit is contained in:
98
port/menu_port.c
Normal file
98
port/menu_port.c
Normal file
@ -0,0 +1,98 @@
|
||||
/**
|
||||
* @file menu_port.c
|
||||
* @brief 菜单组件硬件端口层示例实现(用户需要根据实际硬件修改)
|
||||
* @note 工业级嵌入式菜单组件 - 硬件端口层示例
|
||||
* @attention 用户需要根据自己的硬件平台修改此文件
|
||||
*/
|
||||
#include "menu_port.h"
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/**
|
||||
* @brief 硬件打印接口示例实现(使用标准C库printf)
|
||||
* @param fmt 格式化字符串
|
||||
* @param args 可变参数列表
|
||||
* @note 实际项目中,用户需要将此接口重定向到硬件的串口、LCD等输出设备
|
||||
*/
|
||||
void menu_port_printf(const char* fmt, va_list args)
|
||||
{
|
||||
// 示例:使用标准C库的vprintf函数
|
||||
// 实际项目中,这里应该调用硬件相关的打印函数,如串口打印
|
||||
vprintf(fmt, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取系统滴答时间示例实现(使用标准C库time函数)
|
||||
* @return 当前系统滴答时间(ms)
|
||||
* @note 实际项目中,用户需要将此接口实现为硬件定时器的计数值
|
||||
*/
|
||||
uint32_t menu_port_get_tick(void)
|
||||
{
|
||||
// 示例:使用标准C库的time函数(仅用于演示,精度低)
|
||||
// 实际项目中,这里应该返回硬件定时器的计数值,如SysTick
|
||||
return (uint32_t)time(NULL) * 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 硬件延迟函数示例实现(使用标准C库sleep函数)
|
||||
* @param ms 延迟时间(ms)
|
||||
* @note 实际项目中,用户需要将此接口实现为硬件定时器的延迟
|
||||
*/
|
||||
void menu_port_delay_ms(uint32_t ms)
|
||||
{
|
||||
// 示例:使用标准C库的sleep函数(仅用于演示,精度低)
|
||||
// 实际项目中,这里应该使用硬件定时器实现精确延迟
|
||||
sleep(ms / 1000);
|
||||
usleep((ms % 1000) * 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 菜单显示接口示例实现(使用标准C库printf)
|
||||
* @param menu_name 菜单名称字符串
|
||||
* @param menu_id 菜单ID
|
||||
* @note 实际项目中,用户需要将此接口实现为在LCD、OLED等显示设备上的显示
|
||||
*/
|
||||
void menu_port_display(const char* menu_name, uint16_t menu_id)
|
||||
{
|
||||
// 示例:使用标准C库的printf函数在控制台显示
|
||||
// 实际项目中,这里应该调用硬件显示函数,将菜单显示在LCD等设备上
|
||||
printf("\r\nCurrent Menu: %s (ID: %d)\r\n", menu_name, menu_id);
|
||||
printf("Use UP/DOWN keys to navigate, ENTER to select, BACK to return\r\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按键扫描接口示例实现(使用标准C库getchar函数)
|
||||
* @return 当前按键事件(MenuEventType类型)
|
||||
* @note 实际项目中,用户需要将此接口实现为硬件按键的扫描
|
||||
*/
|
||||
/*
|
||||
MenuEventType menu_port_key_scan(void)
|
||||
{
|
||||
// 示例:使用标准C库的getchar函数获取键盘输入(仅用于演示)
|
||||
// 实际项目中,这里应该扫描硬件按键的状态
|
||||
if (kbhit())
|
||||
{
|
||||
char key = getchar();
|
||||
switch (key)
|
||||
{
|
||||
case 'w':
|
||||
case 'W':
|
||||
return MENU_EVENT_KEY_UP;
|
||||
case 's':
|
||||
case 'S':
|
||||
return MENU_EVENT_KEY_DOWN;
|
||||
case '\r':
|
||||
case '\n':
|
||||
return MENU_EVENT_KEY_ENTER;
|
||||
case 'b':
|
||||
case 'B':
|
||||
return MENU_EVENT_KEY_BACK;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return MENU_EVENT_NONE;
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user