初始化demo版本

This commit is contained in:
冯佳
2025-12-19 10:22:28 +08:00
parent 1cd79af915
commit 294a49f207
22 changed files with 2101 additions and 0 deletions

View File

@ -0,0 +1,13 @@
#ifndef HMI_CAMERA_H
#define HMI_CAMERA_H
#include "hmi_common.h"
extern const MenuImage_t sgc_CameraImage;
void Hmi_CameraEnter(const MenuItemInfo_t *pItemInfo);
void Hmi_CameraExit(const MenuItemInfo_t *pItemInfo);
void Hmi_CameraLoad(const MenuItemInfo_t *pItemInfo);
void Hmi_CameraTask(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,20 @@
#ifndef HMI_COMMON_H
#define HMI_COMMON_H
#include "menu.h"
/* 自定义图标数据 */
typedef struct
{
const char *pImageFrame;
const char *pImage;
} MenuImage_t;
// 清除屏幕
#define CLEAR() printf("\033[2J")
// 定位光标
#define MOVETO(x,y) printf("\033[%d;%dH", (x), (y))
void Hmi_OnCommonFunction(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,12 @@
#ifndef HMI_MORE_SET_H
#define HMI_MORE_SET_H
#include "hmi_common.h"
void Hmi_MoreSetEnter(const MenuItemInfo_t *pItemInfo);
void Hmi_MoreSetExit(const MenuItemInfo_t *pItemInfo);
void Hmi_MoreSetLoad(const MenuItemInfo_t *pItemInfo);
void Hmi_MoreSetTask(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,14 @@
#ifndef HMI_MUSIC_H
#define HMI_MUSIC_H
#include "hmi_common.h"
extern const MenuImage_t sgc_MusicImage;
void Hmi_MusicEnter(const MenuItemInfo_t *pItemInfo);
void Hmi_MusicExit(const MenuItemInfo_t *pItemInfo);
void Hmi_MusicLoad(const MenuItemInfo_t *pItemInfo);
void Hmi_MusicTask(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,13 @@
#ifndef HMI_SET_H
#define HMI_SET_H
#include "hmi_common.h"
extern const MenuImage_t sgc_SettingImage;
void Hmi_SetEnter(const MenuItemInfo_t *pItemInfo);
void Hmi_SetExit(const MenuItemInfo_t *pItemInfo);
void Hmi_SetLoad(const MenuItemInfo_t *pItemInfo);
void Hmi_SetTask(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,12 @@
#ifndef HMI_VIDEO_H
#define HMI_VIDEO_H
#include "hmi_common.h"
extern const MenuImage_t sgc_VideoImage;
void Hmi_VideoLoad(const MenuItemInfo_t *pItemInfo);
void Hmi_VideoExit(const MenuItemInfo_t *pItemInfo);
void Hmi_VideoTask(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,9 @@
#ifndef MAIN_HMI_H
#define MAIN_HMI_H
#include "hmi_common.h"
void Hmi_LoadMainHmi(const MenuItemInfo_t *pItemInfo);
void Hmi_MainTask(const MenuItemInfo_t *pItemInfo);
#endif

View File

@ -0,0 +1,103 @@
#include "hmi_camera.h"
#include "menu.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
const MenuImage_t sgc_CameraImage = {
"**********",
"&"
};
MenuList_t sg_CameraMenuTable[] =
{
MENU_ITEM_BIND("TEXT_PHOTO", NULL, NULL, NULL, Hmi_OnCommonFunction, NULL),
MENU_ITEM_BIND(TEXT_PHOTOGRAPHY, NULL, NULL, NULL, Hmi_OnCommonFunction, NULL),
};
static void ShowCameraMenu(MenuShow_t *ptShowInfo)
{
uint8_t showNum = 3;
menusize_t tmpselect;
Menu_LimitShowListNum(ptShowInfo, &showNum);
printf("\e[0;30;46m ------------- %s ------------- \e[0m\n", get_text(ptShowInfo->uMenuDesc.textId));
for (int i = 0; i < showNum; i++)
{
tmpselect = i + ptShowInfo->showBaseItem;
if (tmpselect == ptShowInfo->selectItem)
{
printf("\e[0;30;47m %d. %-34s\e[0m\n", tmpselect + 1, get_text(ptShowInfo->uItemsListDesc[tmpselect].textId));
}
else
{
printf("\e[7;30;47m %d. %-34s\e[0m\n", tmpselect + 1, get_text(ptShowInfo->uItemsListDesc[tmpselect].textId));
}
}
}
void Hmi_CameraEnter(const MenuItemInfo_t *pItemInfo)
{
Menu_Bind(sg_CameraMenuTable, MENU_GET_NUM(sg_CameraMenuTable), ShowCameraMenu);
}
void Hmi_CameraLoad(const MenuItemInfo_t *pItemInfo)
{
CLEAR();
MOVETO(0, 0);
printf("---%s-----\n", get_text(TEXT_LOADING));
}
void Hmi_CameraExit(const MenuItemInfo_t *pItemInfo)
{
printf("--------------------------\n");
printf(" %s%s...\n", get_text(TEXT_VIDEO), get_text(TEXT_STOPPING_PLAYBACK));
printf("--------------------------\n");
#ifdef _WIN32
Sleep(1000);
#else
sleep(1);
#endif
}
void Hmi_CameraTask(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("%s(0-%s; 1-%s%s; 2-%s; 3-%s; 4-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_RETURN), get_text(TEXT_RETURN), get_text(TEXT_MAIN_MENU),
get_text(TEXT_ENTER), get_text(TEXT_NEXT), get_text(TEXT_PREVIOUS));
scanf(" %d", &cmd);
switch (cmd)
{
case 0:
Menu_Exit(true);
break;
case 1:
Menu_Reset();
break;
case 2:
Menu_Enter();
break;
case 3:
Menu_SelectNext(true);
break;
case 4:
Menu_SelectPrevious(true);
break;
default:
break;
}
}

View File

@ -0,0 +1,28 @@
#include "hmi_common.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
void Hmi_OnCommonFunction(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("--------------------------\n");
printf(" %s%s\n", get_text(pItemInfo->uMenuDesc.textId), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
printf("%s(0-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT));
scanf(" %d", &cmd); // 空格作用是忽略上次的回车
if (cmd == 0)
{
Menu_Exit(false);
}
}

View File

@ -0,0 +1,110 @@
#include "hmi_more_set.h"
#include "menu.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
MenuList_t sg_MoreSetMenuTable[] =
{
MENU_ITEM_BIND(TEXT_UPGRADE, NULL, NULL, NULL, Hmi_OnCommonFunction, NULL),
MENU_ITEM_BIND(TEXT_ABOUT, NULL, NULL, NULL, Hmi_OnCommonFunction, NULL),
};
static void ShowMoreSetMenu(MenuShow_t *ptShowInfo)
{
uint8_t showNum = 3;
uint8_t showsubNum = 3;
menusize_t tmpselect;
MenuShow_t tParentMenuShowInfo;
if (Menu_QueryParentMenu(&tParentMenuShowInfo, 1) != 0)
{
return;
}
Menu_LimitShowListNum(&tParentMenuShowInfo, &showNum);
Menu_LimitShowListNum(ptShowInfo, &showsubNum);
printf("\e[0;30;46m ------------- %s ------------- \e[0m\n", get_text(tParentMenuShowInfo.uMenuDesc.textId));
for (int i = 0; i < showNum; i++)
{
tmpselect = i + tParentMenuShowInfo.showBaseItem;
if (tmpselect == tParentMenuShowInfo.selectItem)
{
printf("\e[0;30;47m %d. %-16s\e[0m |", tmpselect + 1, get_text(tParentMenuShowInfo.uItemsListDesc[tmpselect].textId));
}
else
{
printf("\e[7;30;47m %d. %-16s\e[0m |", tmpselect + 1, get_text(tParentMenuShowInfo.uItemsListDesc[tmpselect].textId));
}
if (i < showsubNum)
{
tmpselect = i + ptShowInfo->showBaseItem;
if (tmpselect == ptShowInfo->selectItem)
{
printf(" \e[0;30;47m %-14s\e[0m", get_text(ptShowInfo->uItemsListDesc[tmpselect].textId));
}
else
{
printf(" \e[7;30;47m %-14s\e[0m", get_text(ptShowInfo->uItemsListDesc[tmpselect].textId));
}
}
printf("\n");
}
}
void Hmi_MoreSetEnter(const MenuItemInfo_t *pItemInfo)
{
Menu_Bind(sg_MoreSetMenuTable, MENU_GET_NUM(sg_MoreSetMenuTable), ShowMoreSetMenu);
}
void Hmi_MoreSetLoad(const MenuItemInfo_t *pItemInfo)
{
}
void Hmi_MoreSetExit(const MenuItemInfo_t *pItemInfo)
{
}
void Hmi_MoreSetTask(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("%s(0-%s; 1-%s%s; 2-%s; 3-%s; 4-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_RETURN), get_text(TEXT_RETURN), get_text(TEXT_MAIN_MENU),
get_text(TEXT_ENTER), get_text(TEXT_NEXT), get_text(TEXT_PREVIOUS));
scanf(" %d", &cmd);
switch (cmd)
{
case 0:
Menu_Exit(false);
break;
case 1:
Menu_Reset();
break;
case 2:
Menu_Enter();
break;
case 3:
Menu_SelectNext(true);
break;
case 4:
Menu_SelectPrevious(true);
break;
default:
break;
}
}

View File

@ -0,0 +1,58 @@
#include "hmi_music.h"
#include "menu.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
static bool sg_isInit = false;
const MenuImage_t sgc_MusicImage = {
"mmmmmmmmmm",
"@"
};
void Hmi_MusicEnter(const MenuItemInfo_t *pItemInfo)
{
}
void Hmi_MusicExit(const MenuItemInfo_t *pItemInfo)
{
}
void Hmi_MusicLoad(const MenuItemInfo_t *pItemInfo)
{
sg_isInit = true;
}
void Hmi_MusicTask(const MenuItemInfo_t *pItemInfo)
{
int cmd = 0;
if (sg_isInit)
{
sg_isInit = false;
printf("--------------------------\n");
printf(" %s%s\n", get_text(pItemInfo->uMenuDesc.textId), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
#ifdef _WIN32
Sleep(1000);
#else
sleep(1);
#endif
}
printf("%s(0-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT));
scanf(" %d", &cmd);
if (cmd == 0)
{
Menu_Exit(false);
}
}

176
examples/hmi/src/hmi_set.c Normal file
View File

@ -0,0 +1,176 @@
#include "hmi_set.h"
#include "hmi_more_set.h"
#include "menu.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
const MenuImage_t sgc_SettingImage = {
"$$$$$$$$$$",
"%"
};
static void OnLanguageFunction(const MenuItemInfo_t *pItemInfo);
static void OnBluetoothFunction(const MenuItemInfo_t *pItemInfo);
static void OnBatteryFunction(const MenuItemInfo_t *pItemInfo);
static void OnStorageFunction(const MenuItemInfo_t *pItemInfo);
MenuList_t sg_SetMenuTable[] =
{
MENU_ITEM_BIND(TEXT_LANGUAGE, NULL, NULL, NULL, OnLanguageFunction, NULL),
MENU_ITEM_BIND(TEXT_BLUETOOTH, NULL, NULL, NULL, OnBluetoothFunction, NULL),
MENU_ITEM_BIND(TEXT_BATTERY, NULL, NULL, NULL, OnBatteryFunction, NULL),
MENU_ITEM_BIND(TEXT_STORE, NULL, NULL, NULL, OnStorageFunction, NULL),
MENU_ITEM_BIND(TEXT_MORE, Hmi_MoreSetEnter, Hmi_MoreSetExit, Hmi_MoreSetLoad, Hmi_MoreSetTask, NULL),
};
static void ShowSetMenu(MenuShow_t *ptShowInfo)
{
uint8_t showNum = 3;
menusize_t tmpselect;
Menu_LimitShowListNum(ptShowInfo, &showNum);
printf("\e[0;30;46m ------------- %s ------------- \e[0m\n", get_text(ptShowInfo->uMenuDesc.textId));
for (int i = 0; i < showNum; i++)
{
tmpselect = i + ptShowInfo->showBaseItem;
if (tmpselect == ptShowInfo->selectItem)
{
printf("\e[0;30;47m %d. %-16s\e[0m |\n", tmpselect + 1, get_text(ptShowInfo->uItemsListDesc[tmpselect].textId));
}
else
{
printf("\e[7;30;47m %d. %-16s\e[0m |\n", tmpselect + 1, get_text(ptShowInfo->uItemsListDesc[tmpselect].textId));
}
}
}
void Hmi_SetEnter(const MenuItemInfo_t *pItemInfo)
{
Menu_Bind(sg_SetMenuTable, MENU_GET_NUM(sg_SetMenuTable), ShowSetMenu);
}
void Hmi_SetLoad(const MenuItemInfo_t *pItemInfo)
{
}
void Hmi_SetExit(const MenuItemInfo_t *pItemInfo)
{
}
void Hmi_SetTask(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("%s(0-%s; 1-%s; 2-%s; 3-%s; 4-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_RETURN), get_text(TEXT_RETURN_MAIN_MENU),
get_text(TEXT_ENTER), get_text(TEXT_NEXT), get_text(TEXT_PREVIOUS));
scanf(" %d", &cmd);
switch (cmd)
{
case 0:
Menu_Exit(false);
break;
case 1:
Menu_Reset();
break;
case 2:
Menu_Enter();
break;
case 3:
Menu_SelectNext(true);
break;
case 4:
Menu_SelectPrevious(true);
break;
default:
break;
}
}
static void OnLanguageFunction(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("--------------------------\n");
printf(" %s%s\n", get_text(TEXT_LANGUAGE), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
printf("%s(0-中文; 1-English): ",
get_text(TEXT_SELECT_OPTION));
scanf(" %d", &cmd);
if (cmd == 0)
{
set_language(SYSTEM_LANGUAGE_CHINESE);
}
else
{
set_language(SYSTEM_LANGUAGE_ENGLISH);
}
Menu_Exit(false);
}
static void OnBluetoothFunction(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("--------------------------\n");
printf(" %s%s\n", get_text(TEXT_BLUETOOTH), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
printf("%s(0-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT));
scanf(" %d", &cmd);
if (cmd == 0)
{
Menu_Exit(false);
}
}
static void OnBatteryFunction(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("--------------------------\n");
printf(" %s%s\n", get_text(TEXT_BATTERY), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
printf("%s(0-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT));
scanf(" %d", &cmd);
if (cmd == 0)
{
Menu_Exit(false);
}
}
static void OnStorageFunction(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("--------------------------\n");
printf(" %s%s\n", get_text(TEXT_STORE), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
printf("%s(0-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT));
scanf(" %d", &cmd);
if (cmd == 0)
{
Menu_Exit(false);
}
}

View File

@ -0,0 +1,67 @@
#include "hmi_video.h"
#include "menu.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
const MenuImage_t sgc_VideoImage = {
"vvvvvvvvvv",
"#"
};
void Hmi_VideoLoad(const MenuItemInfo_t *pItemInfo)
{
printf("--------------------------\n");
printf(" %s %s...\n", get_text(pItemInfo->uMenuDesc.textId), get_text(TEXT_LOADING));
printf("--------------------------\n");
#ifdef _WIN32
Sleep(1000);
#else
sleep(1);
#endif
CLEAR();
MOVETO(0, 0);
}
void Hmi_VideoExit(const MenuItemInfo_t *pItemInfo)
{
CLEAR();
MOVETO(0, 0);
printf("--------------------------\n");
printf(" %s %s...\n", get_text(pItemInfo->uMenuDesc.textId), get_text(TEXT_EXIT));
printf("--------------------------\n");
#ifdef _WIN32
Sleep(1000);
#else
sleep(1);
#endif
}
void Hmi_VideoTask(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("--------------------------\n");
printf(" %s%s\n", get_text(pItemInfo->uMenuDesc.textId), get_text(TEXT_FUNCTION_TEST));
printf("--------------------------\n");
printf("%s(0-%s): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT));
scanf(" %d", &cmd);
if (cmd == 0)
{
Menu_Exit(false);
}
}

140
examples/hmi/src/mainhmi.c Normal file
View File

@ -0,0 +1,140 @@
#include "mainhmi.h"
#include "hmi_camera.h"
#include "hmi_music.h"
#include "hmi_set.h"
#include "hmi_video.h"
#include "hmi_common.h"
#include "menu.h"
#include "language.h"
#include <stdio.h>
#include <string.h>
MenuList_t sg_MainMenuTable[] =
{
MENU_ITEM_BIND(TEXT_MUSIC, Hmi_MusicEnter, Hmi_MusicExit, Hmi_MusicLoad, Hmi_MusicTask, (MenuImage_t *)&sgc_MusicImage),
MENU_ITEM_BIND(TEXT_VIDEO, NULL, Hmi_VideoExit, Hmi_VideoLoad, Hmi_VideoTask, (MenuImage_t *)&sgc_VideoImage),
MENU_ITEM_BIND(TEXT_CAMERA, Hmi_CameraEnter, Hmi_CameraExit, Hmi_CameraLoad, Hmi_CameraTask, (MenuImage_t *)&sgc_CameraImage),
MENU_ITEM_BIND(TEXT_SETTING, Hmi_SetEnter, Hmi_SetExit, Hmi_SetLoad, Hmi_SetTask, (MenuImage_t *)&sgc_SettingImage),
};
static void ShowMainMenu(MenuShow_t *ptShowInfo)
{
uint8_t showNum = 3;
MenuImage_t *pMenuImage;
menusize_t tmpselect;
Menu_LimitShowListNum(ptShowInfo, &showNum);
printf("\e[0;30;47m ------------- %s ------------- \e[0m\n", get_text(ptShowInfo->uMenuDesc.textId));
for (int i = 0; i < showNum; i++)
{
tmpselect = i + ptShowInfo->showBaseItem;
pMenuImage = (MenuImage_t *)ptShowInfo->pItemsListExtendData[tmpselect];
if (tmpselect == ptShowInfo->selectItem)
{
printf("\e[0;30;47m %-10s \e[0m", pMenuImage->pImageFrame);
}
else
{
printf("\e[7;30;47m %-10s \e[0m", pMenuImage->pImageFrame);
}
}
printf("\n");
for (int i = 0; i < showNum; i++)
{
tmpselect = i + ptShowInfo->showBaseItem;
pMenuImage = (MenuImage_t *)ptShowInfo->pItemsListExtendData[tmpselect];
if (tmpselect == ptShowInfo->selectItem)
{
printf("\e[0;30;47m %-s%-8s%-s \e[0m", pMenuImage->pImage, get_text(ptShowInfo->uItemsListDesc[tmpselect].textId), pMenuImage->pImage);
}
else
{
printf("\e[7;30;47m %-s%-8s%-s \e[0m", pMenuImage->pImage, get_text(ptShowInfo->uItemsListDesc[tmpselect].textId), pMenuImage->pImage);
}
}
printf("\n");
for (int i = 0; i < showNum; i++)
{
tmpselect = i + ptShowInfo->showBaseItem;
pMenuImage = (MenuImage_t *)ptShowInfo->pItemsListExtendData[tmpselect];
if (tmpselect == ptShowInfo->selectItem)
{
printf("\e[0;30;47m %-10s \e[0m", pMenuImage->pImageFrame);
}
else
{
printf("\e[7;30;47m %-10s \e[0m", pMenuImage->pImageFrame);
}
}
printf("\n");
}
void Hmi_LoadMainHmi(const MenuItemInfo_t *pItemInfo)
{
Menu_Bind(sg_MainMenuTable, MENU_GET_NUM(sg_MainMenuTable), ShowMainMenu);
}
void Hmi_MainTask(const MenuItemInfo_t *pItemInfo)
{
int cmd;
printf("%s(0-%s; 2-%s; 3-%s; 4-%s; 5-%s(%s); 6-%s(%s); 7-%s(%s)): ",
get_text(TEXT_SELECT_OPTION), get_text(TEXT_EXIT_MAIN_MENU),
get_text(TEXT_ENTER), get_text(TEXT_NEXT), get_text(TEXT_PREVIOUS),
get_text(TEXT_MUSIC), get_text(TEXT_SHORTCUT),
get_text(TEXT_LANGUAGE), get_text(TEXT_SHORTCUT),
get_text(TEXT_MORE_SETTING), get_text(TEXT_SHORTCUT));
scanf(" %d", &cmd);
switch (cmd)
{
case 0:
Menu_MainExit();
break;
case 1:
Menu_Reset();
break;
case 2:
Menu_Enter();
break;
case 3:
Menu_SelectNext(true);
break;
case 4:
Menu_SelectPrevious(true);
break;
case 5:
Menu_ShortcutEnter(true, 1, 0);
break;
case 6:
Menu_ShortcutEnter(true, 2, 3, 0);
break;
case 7:
Menu_ShortcutEnter(true, 2, 3, 4);
break;
default:
break;
}
}