87 lines
2.1 KiB
C
87 lines
2.1 KiB
C
/**
|
|
* 菜单系统与 UI 交互
|
|
* 基于 OLED 128x64 的层级菜单
|
|
* 支持: 模型选择、高频头配置、通道映射、混控、PWM驱动、首页设置
|
|
*/
|
|
#ifndef MENU_H
|
|
#define MENU_H
|
|
|
|
#include "main.h"
|
|
#include "oled.h"
|
|
#include "input.h"
|
|
#include "storage.h"
|
|
#include "pwm_out.h"
|
|
#include "nrf24l01.h"
|
|
|
|
/* 页面 ID */
|
|
#define PAGE_HOME 0
|
|
#define PAGE_MAIN_MENU 1
|
|
#define PAGE_MODEL_LIST 2
|
|
#define PAGE_MODEL_NEW 3
|
|
#define PAGE_MODEL_EDIT 4
|
|
#define PAGE_CHANNEL_MAP 5
|
|
#define PAGE_MIXER 6
|
|
#define PAGE_MIXER_EDIT 7
|
|
#define PAGE_TELEM 8
|
|
#define PAGE_RF_CONFIG 9
|
|
#define PAGE_NRF_CONFIG 10
|
|
#define PAGE_CRFS_CONFIG 11
|
|
#define PAGE_PWM_CONFIG 12
|
|
#define PAGE_HOME_SET 13
|
|
#define PAGE_BIND 14
|
|
#define PAGE_RF_QUICK 15
|
|
|
|
/* 菜单项最大数 */
|
|
#define MENU_MAX_ITEMS 10
|
|
|
|
/* 菜单项结构 */
|
|
typedef struct {
|
|
const char *text;
|
|
uint8_t target_page;
|
|
void (*action)(void); /* 可选回调 */
|
|
} MenuItem_t;
|
|
|
|
/* 页面上下文 */
|
|
typedef struct {
|
|
uint8_t page_id;
|
|
uint8_t cursor; /* 当前选中项 */
|
|
uint8_t scroll_offset; /* 滚动偏移 */
|
|
uint8_t item_count;
|
|
MenuItem_t items[MENU_MAX_ITEMS];
|
|
uint8_t edit_idx; /* 编辑模式下的索引 */
|
|
uint8_t edit_value; /* 编辑值 */
|
|
char edit_str[16]; /* 编辑字符串 */
|
|
uint8_t edit_str_len;
|
|
} Page_t;
|
|
|
|
/* 函数声明 */
|
|
void Menu_Init(void);
|
|
void Menu_Run(void); /* 主循环调用 */
|
|
|
|
/* 页面渲染 */
|
|
void Menu_DrawHome(void);
|
|
void Menu_DrawMainMenu(void);
|
|
void Menu_DrawModelList(void);
|
|
void Menu_DrawModelNew(void);
|
|
void Menu_DrawChannelMap(void);
|
|
void Menu_DrawMixer(void);
|
|
void Menu_DrawMixerEdit(void);
|
|
void Menu_DrawRFConfig(void);
|
|
void Menu_DrawNRFConfig(void);
|
|
void Menu_DrawCRFSConfig(void);
|
|
void Menu_DrawPWMConfig(void);
|
|
void Menu_DrawHomeSet(void);
|
|
void Menu_DrawBind(void);
|
|
void Menu_DrawRFQuick(void);
|
|
|
|
/* 混控计算 */
|
|
void Mixer_Compute(int16_t *channels);
|
|
|
|
/* 全局页面状态 */
|
|
extern Page_t g_page;
|
|
|
|
/* 通道输出值 (混控后) */
|
|
extern int16_t g_channels[CHANNEL_COUNT];
|
|
|
|
#endif /* MENU_H */
|