初始化demo版本
This commit is contained in:
33
examples/CMakeLists.txt
Normal file
33
examples/CMakeLists.txt
Normal file
@ -0,0 +1,33 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
# 添加当前目录和上级目录作为包含目录
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hmi/inc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/language
|
||||
${CMAKE_SOURCE_DIR}
|
||||
)
|
||||
|
||||
# 收集示例所需的源文件
|
||||
set(EXAMPLE_SOURCES
|
||||
demo.c
|
||||
language/language.c
|
||||
hmi/src/mainhmi.c
|
||||
hmi/src/hmi_common.c
|
||||
hmi/src/hmi_camera.c
|
||||
hmi/src/hmi_more_set.c
|
||||
hmi/src/hmi_music.c
|
||||
hmi/src/hmi_set.c
|
||||
hmi/src/hmi_video.c
|
||||
)
|
||||
|
||||
# 创建demo可执行程序
|
||||
add_executable(demo ${EXAMPLE_SOURCES})
|
||||
|
||||
# 链接menu库
|
||||
target_link_libraries(demo PRIVATE menu)
|
||||
|
||||
# 安装规则
|
||||
install(TARGETS demo
|
||||
RUNTIME DESTINATION bin
|
||||
)
|
||||
65
examples/demo.c
Normal file
65
examples/demo.c
Normal file
@ -0,0 +1,65 @@
|
||||
|
||||
/* 菜单显示效果图可看:
|
||||
|
||||
https://blog.csdn.net/qq_24130227/article/details/121167276
|
||||
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
#include "mainhmi.h"
|
||||
#include "language.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int isEnterMenu = 0;
|
||||
|
||||
void EnterMainMenu(const MenuItemInfo_t *pItemInfo)
|
||||
{
|
||||
isEnterMenu = 1;
|
||||
}
|
||||
|
||||
void ExitMainMenu(const MenuItemInfo_t *pItemInfo)
|
||||
{
|
||||
isEnterMenu = 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int cmd = 0;
|
||||
int8_t musicMenuId, languageMenuId, moreSetMenuId;
|
||||
|
||||
MainMenuCfg_t tMainMenu = MENU_ITEM_BIND(TEXT_MAIN_MENU, EnterMainMenu, ExitMainMenu, Hmi_LoadMainHmi, Hmi_MainTask, NULL);
|
||||
|
||||
Menu_Init(&tMainMenu);
|
||||
|
||||
while (1)
|
||||
{
|
||||
CLEAR();
|
||||
MOVETO(0, 0);
|
||||
|
||||
if (!isEnterMenu)
|
||||
{
|
||||
printf("%s(0-%s%s; 1-%s): ", get_text(TEXT_SELECT_OPTION),
|
||||
get_text(TEXT_ENTER), get_text(TEXT_MAIN_MENU), get_text(TEXT_EXIT));
|
||||
scanf(" %d", &cmd); // 空格作用是忽略上次的回车
|
||||
|
||||
if (cmd == 0)
|
||||
{
|
||||
Menu_MainEnter();
|
||||
|
||||
CLEAR();
|
||||
MOVETO(0, 0);
|
||||
}
|
||||
else if (cmd == 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Menu_Task();
|
||||
}
|
||||
|
||||
Menu_DeInit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
13
examples/hmi/inc/hmi_camera.h
Normal file
13
examples/hmi/inc/hmi_camera.h
Normal 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
|
||||
20
examples/hmi/inc/hmi_common.h
Normal file
20
examples/hmi/inc/hmi_common.h
Normal 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
|
||||
12
examples/hmi/inc/hmi_more_set.h
Normal file
12
examples/hmi/inc/hmi_more_set.h
Normal 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
|
||||
14
examples/hmi/inc/hmi_music.h
Normal file
14
examples/hmi/inc/hmi_music.h
Normal 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
|
||||
13
examples/hmi/inc/hmi_set.h
Normal file
13
examples/hmi/inc/hmi_set.h
Normal 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
|
||||
12
examples/hmi/inc/hmi_video.h
Normal file
12
examples/hmi/inc/hmi_video.h
Normal 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
|
||||
9
examples/hmi/inc/mainhmi.h
Normal file
9
examples/hmi/inc/mainhmi.h
Normal 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
|
||||
103
examples/hmi/src/hmi_camera.c
Normal file
103
examples/hmi/src/hmi_camera.c
Normal 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;
|
||||
}
|
||||
}
|
||||
28
examples/hmi/src/hmi_common.c
Normal file
28
examples/hmi/src/hmi_common.c
Normal 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);
|
||||
}
|
||||
}
|
||||
110
examples/hmi/src/hmi_more_set.c
Normal file
110
examples/hmi/src/hmi_more_set.c
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
58
examples/hmi/src/hmi_music.c
Normal file
58
examples/hmi/src/hmi_music.c
Normal 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
176
examples/hmi/src/hmi_set.c
Normal 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);
|
||||
}
|
||||
}
|
||||
67
examples/hmi/src/hmi_video.c
Normal file
67
examples/hmi/src/hmi_video.c
Normal 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
140
examples/hmi/src/mainhmi.c
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
70
examples/language/language.c
Normal file
70
examples/language/language.c
Normal file
@ -0,0 +1,70 @@
|
||||
#include "language.h"
|
||||
|
||||
static SystemLanguage_e sg_eSystemLanguage = SYSTEM_LANGUAGE_CHINESE;
|
||||
|
||||
const char *(sg_kSystemLanguage[TEXT_ALL])[SYSTEM_LANGUAGE_ALL] =
|
||||
{
|
||||
[TEXT_MENU] = {"菜单", "menu"},
|
||||
[TEXT_MAIN_MENU] = {"主菜单", "main menu"},
|
||||
[TEXT_SELECT_OPTION] = {"选择操作", "select option"},
|
||||
[TEXT_ENTER] = {"进入", "enter"},
|
||||
[TEXT_EXIT] = {"退出", "exit"},
|
||||
[TEXT_RETURN] = {"返回", "return"},
|
||||
[TEXT_MUSIC] = {"音乐", "music"},
|
||||
[TEXT_VIDEO] = {"视频", "video"},
|
||||
[TEXT_CAMERA] = {"摄像机", "camera"},
|
||||
[TEXT_SETTING] = {"设置", "setting"},
|
||||
[TEXT_SHORTCUT] = {"快捷", "shortcut"},
|
||||
[TEXT_MORE] = {"更多", "more"},
|
||||
[TEXT_LANGUAGE] = {"语言", "language"},
|
||||
[TEXT_NEXT] = {"下一个", "next"},
|
||||
[TEXT_PREVIOUS] = {"上一个", "previous"},
|
||||
[TEXT_FUNCTION_TEST] = {"功能测试", "functional testing"},
|
||||
[TEXT_TEST] = {"测试", "test"},
|
||||
[TEXT_BLUETOOTH] = {"蓝牙", "bluetooth"},
|
||||
[TEXT_BATTERY] = {"电池", "battery"},
|
||||
[TEXT_STORE] = {"储存", "store"},
|
||||
[TEXT_UPGRADE] = {"升级", "upgrade"},
|
||||
[TEXT_ABOUT] = {"关于", "about"},
|
||||
[TEXT_PHOTO] = {"拍照", "Photo"},
|
||||
[TEXT_PHOTOGRAPHY] = {"摄影", "photography"},
|
||||
[TEXT_LOADING] = {"加载中", "loading"},
|
||||
[TEXT_STOPPING_PLAYBACK] = {"正在停止播放", "stopping playback"},
|
||||
[TEXT_EXIT_MAIN_MENU] = {"退出主菜单", "exit main menu"},
|
||||
[TEXT_RETURN_MAIN_MENU] = {"返回主菜单", "return main menu"},
|
||||
[TEXT_MORE_SETTING] = {"更多设置", "more setting"},
|
||||
|
||||
};
|
||||
|
||||
void set_language(SystemLanguage_e lang)
|
||||
{
|
||||
if (lang >= 0 && lang < SYSTEM_LANGUAGE_ALL)
|
||||
{
|
||||
sg_eSystemLanguage = lang;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const char *get_text(TextId_e id)
|
||||
{
|
||||
static const char *pszNullString = "N/A";
|
||||
|
||||
if (id >= 0 && id < TEXT_ALL)
|
||||
{
|
||||
return sg_kSystemLanguage[id][sg_eSystemLanguage];
|
||||
}
|
||||
|
||||
return pszNullString; // 未找到对应的文本
|
||||
}
|
||||
|
||||
const char *get_text_by_language(SystemLanguage_e lang, TextId_e id)
|
||||
{
|
||||
static const char *pszNullString = "N/A";
|
||||
|
||||
if (id >= 0 && id < TEXT_ALL)
|
||||
{
|
||||
return sg_kSystemLanguage[id][lang];
|
||||
}
|
||||
|
||||
return pszNullString; // 未找到对应的文本
|
||||
}
|
||||
52
examples/language/language.h
Normal file
52
examples/language/language.h
Normal file
@ -0,0 +1,52 @@
|
||||
#ifndef LANGUAGE_H
|
||||
#define LANGUAGE_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SYSTEM_LANGUAGE_CHINESE = 0,
|
||||
SYSTEM_LANGUAGE_ENGLISH,
|
||||
|
||||
SYSTEM_LANGUAGE_ALL,
|
||||
} SystemLanguage_e;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TEXT_MENU = 0, // 菜单
|
||||
TEXT_MAIN_MENU, // 主菜单
|
||||
TEXT_SELECT_OPTION, // 选择操作
|
||||
TEXT_ENTER, // 进入
|
||||
TEXT_EXIT, // 退出
|
||||
TEXT_RETURN, // 返回
|
||||
TEXT_MUSIC, // 音乐
|
||||
TEXT_VIDEO, // 视频
|
||||
TEXT_CAMERA, // 摄像机
|
||||
TEXT_SETTING, // 设置
|
||||
TEXT_SHORTCUT, // 快捷
|
||||
TEXT_MORE, // 更多
|
||||
TEXT_LANGUAGE, // 语言
|
||||
TEXT_NEXT, // 下一个
|
||||
TEXT_PREVIOUS, // 上一个
|
||||
TEXT_FUNCTION_TEST, // 功能测试
|
||||
TEXT_TEST, // 测试
|
||||
TEXT_BLUETOOTH, // 蓝牙
|
||||
TEXT_BATTERY, // 电池
|
||||
TEXT_STORE, // 储存
|
||||
TEXT_UPGRADE, // 升级
|
||||
TEXT_ABOUT, // 关于
|
||||
TEXT_PHOTO, // 拍照
|
||||
TEXT_PHOTOGRAPHY, // 摄影
|
||||
TEXT_LOADING, // 加载中
|
||||
TEXT_STOPPING_PLAYBACK, // 正在停止播放
|
||||
TEXT_EXIT_MAIN_MENU, // 退出主菜单
|
||||
TEXT_RETURN_MAIN_MENU, // 返回主菜单
|
||||
TEXT_MORE_SETTING, // 更多设置
|
||||
|
||||
TEXT_ALL,
|
||||
} TextId_e;
|
||||
|
||||
void set_language(SystemLanguage_e lang);
|
||||
const char *get_text(TextId_e id);
|
||||
const char *get_text_by_language(SystemLanguage_e lang, TextId_e id);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user