int menuAction() { if(currentMenuItem->child != NULL) { childMenuItem(); showMenuItem(); } else { (*(currentMenuItem->executing))(); } return 0; }
void Ir_work(void) { switch (IRcord[2]){ //600us计时模式下 case IR_CHANNEL: if(setState==SET_STATE_NONE) { startSetting=1; } break; case IR_EQ: if(setState==SET_STATE_INIT){ setState=SET_STATE_MENU; curMenuIndex=0; showMenuItem(curMenuIndex,1); } else if(setState==SET_STATE_MENU){ setState=SET_STATE_MENU_ITEM_SEL; curSelBit=0; showMenuItem(curMenuIndex,1); digiBuf[0]=configValueArr[curMenuIndex]/100; digiBuf[1]=(configValueArr[curMenuIndex]%100)/10; digiBuf[2]=configValueArr[curMenuIndex]%10; dispDigit(); } else if(setState==SET_STATE_MENU_ITEM_SEL){ setState=SET_STATE_MENU_ITEM_BIT_SEL; showMenuItem(curMenuIndex,0); LCD_PutChar(2,3,26);//输出"->" dispDigit(); curSelBit=0; LCD_PutPosition(3+curSelBit,3); } else if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ if(curMenuIndex==CONFIG_EXIT){ // setState=SET_STATE_NONE; // inSetting=0; } else{ configValueArr[curMenuIndex]=digiBuf[0]*100+digiBuf[1]*10+digiBuf[2]; saveConfig(); LCD_PutString(2,4,"设置完毕!"); setState=SET_STATE_MENU_ITEM_FINISHED; } } break; case IR_CHANNEL_MINUS: if(setState==SET_STATE_MENU||setState==SET_STATE_INIT){ setState=SET_STATE_NONE; clearInfraredFlag(); ClrScreen();//强行清屏 inSetting=0; } else if(setState==SET_STATE_MENU_ITEM_SEL){ setState=SET_STATE_MENU; showMenuItem(curMenuIndex,1); } else if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ setState=SET_STATE_MENU; showMenuItem(curMenuIndex,1); } else if(setState==SET_STATE_MENU_ITEM_FINISHED){ setState=SET_STATE_MENU_ITEM_BIT_SEL; showMenuItem(curMenuIndex,0); LCD_PutChar(2,3,26);//输出"->" dispDigit(); curSelBit=0; LCD_PutPosition(3+curSelBit,3); } break; case IR_NEXT: if(setState==SET_STATE_MENU){ curMenuIndex=(curMenuIndex+1)%MENU_LEN; // curMenu=curMenuArr[curMenuIndex]; showMenuItem(curMenuIndex,1); } else if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ curSelBit=(curSelBit+1)%BITS_COUNT; LCD_PutPosition(3+curSelBit,3); } break; case IR_PREV: if(setState==SET_STATE_MENU){ curMenuIndex=(curMenuIndex+MENU_LEN-1)%MENU_LEN; // curMenu=curMenuArr[curMenuIndex]; showMenuItem(curMenuIndex,1); } else if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ curSelBit=(curSelBit+BITS_COUNT-1)%BITS_COUNT; LCD_PutPosition(3+curSelBit,3); } break; case IR_VOL_ADD: if(setState==SET_STATE_MENU){ curMenuIndex=(curMenuIndex+1)%MENU_LEN; // curMenu=curMenuArr[curMenuIndex]; showMenuItem(curMenuIndex,1); } else if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=(digiBuf[curSelBit]+1)%10; dispDigit(); } break; case IR_VOL_MINUS: if(setState==SET_STATE_MENU){ curMenuIndex=(curMenuIndex+MENU_LEN-1)%MENU_LEN; // curMenu=curMenuArr[curMenuIndex]; showMenuItem(curMenuIndex,1); }else if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=(digiBuf[curSelBit]+10-1)%10; dispDigit(); } break; case IR_ZERO: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=0; dispDigit(); } break; case IR_ONE: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=1; dispDigit(); } break; case IR_TWO: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=2; dispDigit(); } break; case IR_THREE: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=3; dispDigit(); } break; case IR_FOUR: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=4; dispDigit(); } break; case IR_FIVE: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=5; dispDigit(); } break; case IR_SIX: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=6; dispDigit(); } break; case IR_SEVEN: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=7; dispDigit(); } break; case IR_EIGHT: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=8; dispDigit(); } break; case IR_NINE: if(setState==SET_STATE_MENU_ITEM_BIT_SEL){ digiBuf[curSelBit]=9; dispDigit(); } break; default: break; } }