00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "includes.h"
00010
00011 #define MenuIdleState 0
00012 #define MenuInitial0State 1
00013 #define MenuInitial1State 2
00014 #define MenuInitial2State 3
00015 #define MenuInitial3State 4
00016 #define MenuNoMenuState 5
00017 #define MenuRunMenuState 6
00018
00019 MENU_CONTROL MenuCtrl;
00020
00021 void MenuInit(void){
00022 MenuCtrl.pCurMenu=(const MENU_ENTRY *)0;
00023 MenuCtrl.pCurItem=(const ITEM_ENTRY *)0;
00024 MenuCtrl.HasKey=FALSE;
00025 MenuCtrl.Timer=0;
00026 MenuCtrl.State=MenuInitial0State;
00027
00028 }
00029
00030 void MenuSvc(void){
00031 switch(MenuCtrl.State){
00032 case MenuIdleState:
00033 break;
00034 case MenuInitial0State:
00035 if(LcmStateGet()!=0) break;
00036 if(LcmUpdate(LcmInitialCommand0,LCM_COMMAND)==IS_ERROR){
00037 MenuCtrl.State=MenuIdleState;
00038 break;
00039 }
00040 MenuCtrl.State=MenuInitial1State;
00041 break;
00042 case MenuInitial1State:
00043 if(LcmStateGet()!=0) break;
00044
00045 MenuReset();
00046 MenuCtrl.State=MenuInitial2State;
00047 break;
00048 case MenuInitial2State:
00049
00050 MenuCtrl.State=MenuInitial3State;
00051 break;
00052 case MenuInitial3State:
00053 MenuCtrl.pCurMenu=&MenuMainMenu;
00054 MenuCtrl.pCurItem=MenuCtrl.pCurMenu->pItemList;
00055 MenuMenuInit(MenuCtrl.pCurMenu);
00056 MenuItemInit(MenuCtrl.pCurItem);
00057 MenuCtrl.State=MenuRunMenuState;
00058 break;
00059 case MenuNoMenuState:
00060 break;
00061 case MenuRunMenuState:
00062 KeySvc();
00063 if(KeyStatusCheck()==TRUE){
00064
00065
00066
00067 MenuKeySet(KeyGet());
00068 }
00069 if(MenuCtrl.HasKey==FALSE) break;
00070 MenuCtrl.HasKey=FALSE;
00071 MenuOpcodeParser(MenuCtrl.KeyValue);
00072 break;
00073 }
00074 }
00075
00076 void MenuStop(void){
00077 MenuCtrl.State=MenuIdleState;
00078 }
00079
00080 void MenuStart(void){
00081 MenuCtrl.State=MenuInitial0State;
00082 }
00083
00084 void MenuReset(void){
00085 MenuCtrl.pCurMenu=(const MENU_ENTRY *)0;
00086 MenuCtrl.pCurItem=(const ITEM_ENTRY *)0;
00087 MenuCtrl.HasKey=FALSE;
00088 MenuCtrl.Timer=0;
00089 }
00090
00091 void MenuKeySet(INT8U KeyValue){
00092 if(MenuCtrl.HasKey==FALSE){
00093 MenuCtrl.KeyValue=KeyValue;
00094 MenuCtrl.HasKey=TRUE;
00095 }
00096 }
00097
00098 void MenuMenuInit(const struct _MENU_ENTRY_ *pMenu){
00099 LcmUpdate(Lcm1stLineStart,LCM_COMMAND);
00100 LcmUpdate((INT8U *)MenuMessage[pMenu->MsgIndex],LCM_DATA);
00101 }
00102
00103 void MenuItemInit(const struct _ITEM_ENTRY_ *pItem){
00104 LcmUpdate(Lcm2ndLineStart,LCM_COMMAND);
00105
00106 LcmUpdate(Lcm2ndLineStart,LCM_COMMAND);
00107 LcmUpdate((INT8U *)MenuMessage[pItem->MsgIndex],LCM_DATA);
00108 }
00109
00110 void MenuItemAct(const struct _ITEM_ENTRY_ *pItem){
00111 if(pItem->pValue==(const void *)0) return;
00112 MenuCtrl.pCurMenu=(const struct _MENU_ENTRY_ *)((void *)pItem->pValue);
00113 MenuCtrl.pCurItem=MenuCtrl.pCurMenu->pItemList;
00114 MenuMenuInit(MenuCtrl.pCurMenu);
00115 MenuItemInit(MenuCtrl.pCurItem);
00116 }
00117
00118 void MenuOpcodeParser(INT8U KeyValue){
00119 if(KeyValue==KEY_UP){
00120 if(MenuCtrl.pCurItem->pUpItem==(const ITEM_ENTRY *)0) return;
00121 MenuCtrl.pCurItem=MenuCtrl.pCurItem->pUpItem;
00122 MenuItemInit(MenuCtrl.pCurItem);
00123 }
00124 else if(KeyValue==KEY_DOWN){
00125 if(MenuCtrl.pCurItem->pDownItem==(const ITEM_ENTRY *)0) return;
00126 MenuCtrl.pCurItem=MenuCtrl.pCurItem->pDownItem;
00127 MenuItemInit(MenuCtrl.pCurItem);
00128 }
00129 else if(KeyValue==KEY_LEFT){
00130 if(MenuCtrl.pCurMenu->pPrevMenu==(const struct _MENU_ENTRY_ *)0) return;
00131 MenuCtrl.pCurMenu=MenuCtrl.pCurMenu->pPrevMenu;
00132 MenuCtrl.pCurItem=MenuCtrl.pCurMenu->pItemList;
00133 MenuMenuInit(MenuCtrl.pCurMenu);
00134 MenuItemInit(MenuCtrl.pCurItem);
00135 }
00136 else if(KeyValue==KEY_RIGHT){
00137 if(MenuCtrl.pCurItem->pValue==(const void *)0) return;
00138 MenuCtrl.pCurMenu=(const struct _MENU_ENTRY_ *)MenuCtrl.pCurItem->pValue;
00139 MenuCtrl.pCurItem=MenuCtrl.pCurMenu->pItemList;
00140 MenuMenuInit(MenuCtrl.pCurMenu);
00141 MenuItemInit(MenuCtrl.pCurItem);
00142 }
00143 else if(KeyValue==KEY_ENTER){
00144 MenuItemAct(MenuCtrl.pCurItem);
00145 }
00146 }
00147
00148
00149
00150 const ITEM_ENTRY MenuMainmenuItem[MENU_MAINMENU_ITEM_MAX]={
00151 {
00152 MenuItemInit,
00153 MenuItemAct,
00154 (const ITEM_ENTRY *)0,
00155 &MenuMainmenuItem[1],
00156 (const void *)&MenuSytemSubmenu,
00157 MENU_MSG_SYSTEM,
00158 },
00159 {
00160 MenuItemInit,
00161 MenuItemAct,
00162 &MenuMainmenuItem[0],
00163 &MenuMainmenuItem[2],
00164 (const void *)&MenuVideoEncoderSubmenu,
00165 MENU_MSG_VIDEO_ENCODER,
00166 },
00167 {
00168 MenuItemInit,
00169 MenuItemAct,
00170 &MenuMainmenuItem[1],
00171 &MenuMainmenuItem[3],
00172 (const void *)&MenuAudioEncoderSubmenu,
00173 MENU_MSG_AUDIO_ENCODER,
00174 },
00175 {
00176 MenuItemInit,
00177 MenuItemAct,
00178 &MenuMainmenuItem[2],
00179 &MenuMainmenuItem[4],
00180 (const void *)&MenuCodecSubmenu,
00181 MENU_MSG_HARDWARE_CODEC,
00182 },
00183 {
00184 MenuItemInit,
00185 MenuItemAct,
00186 &MenuMainmenuItem[3],
00187 (const ITEM_ENTRY *)0,
00188 (const void *)&MenuMuxSubmenu,
00189 MENU_MUX_SETTING,
00190 },
00191 };
00192
00193 const MENU_ENTRY MenuMainMenu={
00194 (ITEM_ENTRY *)MenuMainmenuItem,
00195 (MENU_ENTRY *)0,
00196 MenuMenuInit,
00197 MenuOpcodeParser,
00198 MENU_MAINMENU_ITEM_MAX,
00199 MENU_MSG_1ST_LAYER,
00200 };
00201
00202
00203
00204
00205 const ITEM_ENTRY MenuSystemmenuItem[MENU_SYSTEMMENU_ITEM_MAX]={
00206 {
00207 MenuItemInit,
00208 MenuItemAct,
00209 (const ITEM_ENTRY *)0,
00210 &MenuSystemmenuItem[1],
00211 (const void *)0,
00212 MENU_MSG_SYSTEM_ITEM0,
00213 },
00214 {
00215 MenuItemInit,
00216 MenuItemAct,
00217 &MenuSystemmenuItem[0],
00218 &MenuSystemmenuItem[2],
00219 (const void *)0,
00220 MENU_MSG_SYSTEM_ITEM1,
00221 },
00222 {
00223 MenuItemInit,
00224 MenuItemAct,
00225 &MenuSystemmenuItem[1],
00226 &MenuSystemmenuItem[3],
00227 (const void *)0,
00228 MENU_MSG_SYSTEM_ITEM2,
00229 },
00230 {
00231 MenuItemInit,
00232 MenuItemAct,
00233 &MenuSystemmenuItem[2],
00234 &MenuSystemmenuItem[4],
00235 (const void *)0,
00236 MENU_MSG_SYSTEM_ITEM3,
00237 },
00238 {
00239 MenuItemInit,
00240 MenuItemAct,
00241 &MenuSystemmenuItem[3],
00242 (const ITEM_ENTRY *)0,
00243 (const void *)0,
00244 MENU_MSG_SYSTEM_ITEM4,
00245 },
00246 };
00247
00248 const MENU_ENTRY MenuSytemSubmenu={
00249 (const ITEM_ENTRY *)MenuSystemmenuItem,
00250 (const MENU_ENTRY *)&MenuMainMenu,
00251 MenuMenuInit,
00252 MenuOpcodeParser,
00253 MENU_SYSTEMMENU_ITEM_MAX,
00254 MENU_MSG_SYSTEM,
00255 };
00256
00257
00258
00259
00260 const ITEM_ENTRY MenuVideoEncoderMenuItem[MENU_VIDEOMENU_ITEM_MAX]={
00261 {
00262 MenuItemInit,
00263 MenuItemAct,
00264 (const ITEM_ENTRY *)0,
00265 &MenuVideoEncoderMenuItem[1],
00266 (const void *)0,
00267 MENU_MSG_VIDEO_ENCODER_ITEM0,
00268 },
00269 {
00270 MenuItemInit,
00271 MenuItemAct,
00272 &MenuVideoEncoderMenuItem[0],
00273 &MenuVideoEncoderMenuItem[2],
00274 (const void *)0,
00275 MENU_MSG_VIDEO_ENCODER_ITEM1,
00276 },
00277 {
00278 MenuItemInit,
00279 MenuItemAct,
00280 &MenuVideoEncoderMenuItem[1],
00281 &MenuVideoEncoderMenuItem[3],
00282 (const void *)0,
00283 MENU_MSG_VIDEO_ENCODER_ITEM2,
00284 },
00285 {
00286 MenuItemInit,
00287 MenuItemAct,
00288 &MenuVideoEncoderMenuItem[2],
00289 &MenuVideoEncoderMenuItem[4],
00290 (const void *)0,
00291 MENU_MSG_VIDEO_ENCODER_ITEM3,
00292 },
00293 {
00294 MenuItemInit,
00295 MenuItemAct,
00296 &MenuVideoEncoderMenuItem[3],
00297 (const ITEM_ENTRY *)0,
00298 (const void *)0,
00299 MENU_MSG_VIDEO_ENCODER_ITEM4,
00300 },
00301 };
00302
00303 const MENU_ENTRY MenuVideoEncoderSubmenu={
00304 (const ITEM_ENTRY *)MenuVideoEncoderMenuItem,
00305 (const MENU_ENTRY *)&MenuMainMenu,
00306 MenuMenuInit,
00307 MenuOpcodeParser,
00308 MENU_VIDEOMENU_ITEM_MAX,
00309 MENU_MSG_VIDEO_ENCODER,
00310 };
00311
00312
00313
00314
00315 const ITEM_ENTRY MenuAudioEncoderMenuItem[MENU_AUDIOMENU_ITEM_MAX]={
00316 {
00317 MenuItemInit,
00318 MenuItemAct,
00319 (const ITEM_ENTRY *)0,
00320 &MenuAudioEncoderMenuItem[1],
00321 (const void *)0,
00322 MENU_MSG_AUDIO_ENCODER_ITEM0,
00323 },
00324 {
00325 MenuItemInit,
00326 MenuItemAct,
00327 &MenuAudioEncoderMenuItem[0],
00328 &MenuAudioEncoderMenuItem[2],
00329 (const void *)0,
00330 MENU_MSG_AUDIO_ENCODER_ITEM1,
00331 },
00332 {
00333 MenuItemInit,
00334 MenuItemAct,
00335 &MenuAudioEncoderMenuItem[1],
00336 &MenuAudioEncoderMenuItem[3],
00337 (const void *)0,
00338 MENU_MSG_AUDIO_ENCODER_ITEM2,
00339 },
00340 {
00341 MenuItemInit,
00342 MenuItemAct,
00343 &MenuAudioEncoderMenuItem[2],
00344 &MenuAudioEncoderMenuItem[4],
00345 (const void *)0,
00346 MENU_MSG_AUDIO_ENCODER_ITEM3,
00347 },
00348 {
00349 MenuItemInit,
00350 MenuItemAct,
00351 &MenuAudioEncoderMenuItem[3],
00352 (const ITEM_ENTRY *)0,
00353 (const void *)0,
00354 MENU_MSG_AUDIO_ENCODER_ITEM4,
00355 },
00356 };
00357
00358 const MENU_ENTRY MenuAudioEncoderSubmenu={
00359 (const ITEM_ENTRY *)MenuAudioEncoderMenuItem,
00360 (const MENU_ENTRY *)&MenuMainMenu,
00361 MenuMenuInit,
00362 MenuOpcodeParser,
00363 MENU_AUDIOMENU_ITEM_MAX,
00364 MENU_MSG_AUDIO_ENCODER,
00365 };
00366
00367
00368
00369
00370 const ITEM_ENTRY MenuCodecMenuItem[MENU_CODECMENU_ITEM_MAX]={
00371 {
00372 MenuItemInit,
00373 MenuItemAct,
00374 (const ITEM_ENTRY *)0,
00375 &MenuCodecMenuItem[1],
00376 (const void *)0,
00377 MENU_MSG_HARDWARE_CODEC_ITEM0,
00378 },
00379 {
00380 MenuItemInit,
00381 MenuItemAct,
00382 &MenuCodecMenuItem[0],
00383 &MenuCodecMenuItem[2],
00384 (const void *)0,
00385 MENU_MSG_HARDWARE_CODEC_ITEM1,
00386 },
00387 {
00388 MenuItemInit,
00389 MenuItemAct,
00390 &MenuCodecMenuItem[1],
00391 &MenuCodecMenuItem[3],
00392 (const void *)0,
00393 MENU_MSG_HARDWARE_CODEC_ITEM2,
00394 },
00395 {
00396 MenuItemInit,
00397 MenuItemAct,
00398 &MenuCodecMenuItem[2],
00399 &MenuCodecMenuItem[4],
00400 (const void *)0,
00401 MENU_MSG_HARDWARE_CODEC_ITEM3,
00402 },
00403 {
00404 MenuItemInit,
00405 MenuItemAct,
00406 &MenuCodecMenuItem[3],
00407 (const ITEM_ENTRY *)0,
00408 (const void *)0,
00409 MENU_MSG_HARDWARE_CODEC_ITEM4,
00410 },
00411 };
00412
00413 const MENU_ENTRY MenuCodecSubmenu={
00414 (const ITEM_ENTRY *)MenuCodecMenuItem,
00415 (const MENU_ENTRY *)&MenuMainMenu,
00416 MenuMenuInit,
00417 MenuOpcodeParser,
00418 MENU_CODECMENU_ITEM_MAX,
00419 MENU_MSG_HARDWARE_CODEC,
00420 };
00421
00422
00423
00424
00425 const ITEM_ENTRY MenuMuxMenuItem[MENU_MUXMENU_ITEM_MAX]={
00426 {
00427 MenuItemInit,
00428 MenuItemAct,
00429 (const ITEM_ENTRY *)0,
00430 &MenuMuxMenuItem[1],
00431 (const void *)0,
00432 MENU_MUX_SETTING_ITEM0,
00433 },
00434 {
00435 MenuItemInit,
00436 MenuItemAct,
00437 &MenuMuxMenuItem[0],
00438 &MenuMuxMenuItem[2],
00439 (const void *)0,
00440 MENU_MUX_SETTING_ITEM1,
00441 },
00442 {
00443 MenuItemInit,
00444 MenuItemAct,
00445 &MenuMuxMenuItem[1],
00446 &MenuMuxMenuItem[3],
00447 (const void *)0,
00448 MENU_MUX_SETTING_ITEM2,
00449 },
00450 {
00451 MenuItemInit,
00452 MenuItemAct,
00453 &MenuMuxMenuItem[2],
00454 &MenuMuxMenuItem[4],
00455 (const void *)0,
00456 MENU_MUX_SETTING_ITEM3,
00457 },
00458 {
00459 MenuItemInit,
00460 MenuItemAct,
00461 &MenuMuxMenuItem[3],
00462 (const ITEM_ENTRY *)0,
00463 (const void *)0,
00464 MENU_MUX_SETTING_ITEM4,
00465 },
00466 };
00467
00468 const MENU_ENTRY MenuMuxSubmenu={
00469 (const ITEM_ENTRY *)MenuMuxMenuItem,
00470 (const MENU_ENTRY *)&MenuMainMenu,
00471 MenuMenuInit,
00472 MenuOpcodeParser,
00473 MENU_MUXMENU_ITEM_MAX,
00474 MENU_MUX_SETTING,
00475 };
00476
00477
00478
00479
00480 const INT8U MsgLineChange[]="\n\r";
00481 const INT8U MenuMsg00[]=" ";
00482 const INT8U MenuMsg01[]="main menu ";
00483 const INT8U MenuMsg02[]="sub menu ";
00484 const INT8U MenuMsg03[]="item menu ";
00485 const INT8U MenuMsg04[]="MAINMENU ITEM 0 ";
00486 const INT8U MenuMsg05[]="MAINMENU ITEM 1 ";
00487 const INT8U MenuMsg06[]="MAINMENU ITEM 2 ";
00488 const INT8U MenuMsg07[]="MAINMENU ITEM 3 ";
00489 const INT8U MenuMsg08[]="MAINMENU ITEM 4 ";
00490 const INT8U MenuMsg09[]="ITEM0 SUBITEM 0 ";
00491 const INT8U MenuMsg10[]="ITEM0 SUBITEM 1 ";
00492 const INT8U MenuMsg11[]="ITEM0 SUBITEM 2 ";
00493 const INT8U MenuMsg12[]="ITEM0 SUBITEM 3 ";
00494 const INT8U MenuMsg13[]="ITEM0 SUBITEM 4 ";
00495 const INT8U MenuMsg14[]="ITEM1 SUBITEM 0 ";
00496 const INT8U MenuMsg15[]="ITEM1 SUBITEM 1 ";
00497 const INT8U MenuMsg16[]="ITEM1 SUBITEM 2 ";
00498 const INT8U MenuMsg17[]="ITEM1 SUBITEM 3 ";
00499 const INT8U MenuMsg18[]="ITEM1 SUBITEM 4 ";
00500 const INT8U MenuMsg19[]="ITEM2 SUBITEM 0 ";
00501 const INT8U MenuMsg20[]="ITEM2 SUBITEM 1 ";
00502 const INT8U MenuMsg21[]="ITEM2 SUBITEM 2 ";
00503 const INT8U MenuMsg22[]="ITEM2 SUBITEM 3 ";
00504 const INT8U MenuMsg23[]="ITEM2 SUBITEM 4 ";
00505 const INT8U MenuMsg24[]="ITEM3 SUBITEM 0 ";
00506 const INT8U MenuMsg25[]="ITEM3 SUBITEM 1 ";
00507 const INT8U MenuMsg26[]="ITEM3 SUBITEM 2 ";
00508 const INT8U MenuMsg27[]="ITEM3 SUBITEM 3 ";
00509 const INT8U MenuMsg28[]="ITEM3 SUBITEM 4 ";
00510 const INT8U MenuMsg29[]="ITEM4 SUBITEM 0 ";
00511 const INT8U MenuMsg30[]="ITEM4 SUBITEM 1 ";
00512 const INT8U MenuMsg31[]="ITEM4 SUBITEM 2 ";
00513 const INT8U MenuMsg32[]="ITEM4 SUBITEM 3 ";
00514 const INT8U MenuMsg33[]="ITEM4 SUBITEM 4 ";
00515 const INT8U MenuMsg34[]="SYSTEM POWER ON ";
00516 const INT8U MenuMsg35[]="PLEASE WAIT... ";
00517 const INT8U MenuMsg36[]="PPPP CONNECTED ";
00518 const INT8U MenuMsg37[]="ON PPPP BOOTUP ";
00519 const INT8U MenuMsg38[]="PPPP BOOTUP OK ";
00520
00521 const INT8U *MenuMessage[39]={
00522 MenuMsg00,
00523 MenuMsg01,
00524 MenuMsg02,
00525 MenuMsg03,
00526 MenuMsg04,
00527 MenuMsg05,
00528 MenuMsg06,
00529 MenuMsg07,
00530 MenuMsg08,
00531 MenuMsg09,
00532 MenuMsg10,
00533 MenuMsg11,
00534 MenuMsg12,
00535 MenuMsg13,
00536 MenuMsg14,
00537 MenuMsg15,
00538 MenuMsg16,
00539 MenuMsg17,
00540 MenuMsg18,
00541 MenuMsg19,
00542 MenuMsg20,
00543 MenuMsg21,
00544 MenuMsg22,
00545 MenuMsg23,
00546 MenuMsg24,
00547 MenuMsg25,
00548 MenuMsg26,
00549 MenuMsg27,
00550 MenuMsg28,
00551 MenuMsg29,
00552 MenuMsg30,
00553 MenuMsg31,
00554 MenuMsg32,
00555 MenuMsg33,
00556 MenuMsg34,
00557 MenuMsg35,
00558 MenuMsg36,
00559 MenuMsg37,
00560 MenuMsg38
00561 };
00562