Files
menu/port/menu_port.c
2025-12-18 21:24:20 +08:00

98 lines
3.2 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.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;
}
*/