int f_mngDatetimeDone(unsigned *pMsg) { //func_t func; switch(((msg_t *)pMsg)->msgType) { case CMSG_INIT: g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); All_Screen(0); MDATETIME_READ("读出时间,存入到g_u8password[]中"); //g_u8menuNO = CDATETIME_MIN; //数值索引 //MDATETIME_GET(g_u8menuNO, g_u8pswordSel); //g_u8pswordSel = MBCD2HEX(g_u8pswordSel); DISP_GetOrSetDateTime(1); //DISP_line3rd_menu_select(); //第三行 OLED_cleanPages(6, 7); break; case CMSG_TMR: if(g_tick++ > 3) { promptInit(); goto CGOTO_DATETIME_DONE; } break; case CMSG_DKEY: /** 检测到按键按下 **/ switch(((msg_t *)pMsg)->msgValue) { case CKEY_asterisk: ledPrompt(10, TIMER_100MS); promptInit(); beep(); goto CGOTO_DATETIME_DONE; break; case CKEY_pound: ledPrompt(12, TIMER_100MS); promptInit(); beep(); CGOTO_DATETIME_DONE: g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_pop(&g_fstack); fstack_pop(&g_fstack); break; default: /** 可能的错误 **/ break; } default: /** 可能的错误 **/ break; } return 0; #undef CDATETIME_MIN #undef CDATETIME_MAX }
/******************************************************************************* * Description: 开锁操作完成后,是否要查低电压报警 * 低电报警 *******************************************************************************/ int f_LowPowerAlarm(unsigned *pMsg) { // msg_t msg; func_t func; switch(((msg_t *)pMsg)->msgType) { case CMSG_TMR: /** 低电报警提示计时 **/ g_tick++; if(g_tick >= 10) { GOTO_ALLOFF: promptInit(); fstack_init(&g_fstack); func.func = f_idle; fstack_push(&g_fstack, &func); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); //SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_INIT); All_Screen(0); DISP_idle(); /*******************************************************************/ } break; case CMSG_INIT: promptInit(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); if(g_flag & (1 << 9)){ /** 查低电报警 **/ /** 报警提示 **/ vp_stor(CVOPID_POWERLOW); promptDelay(TIMER_500MS); DISP_lowPower(); } else { goto GOTO_ALLOFF; /** 无报警动作,直接结束 **/ } break; case CPMT_OVER: /** 锁体操作过程结束 **/ promptInit(); bbbeep(); promptDelay(TIMER_500MS); break; default: break; } return 0; }
/** * @brief main routine for blinky example * @return Function should not exit. */ int main(void) { uint32_t current_systick = 0; ticksSet(0); SystemCoreClockUpdate(); promptInit(&CmdlineHistory); /* Enable and setup SysTick Timer at a periodic rate */ SysTick_Config(SystemCoreClock / SYSTICKS_PER_S); flashInit(); fsInit(); while (1) { // blink the led to show the device works if((current_systick + SYSTICKS_PER_S/4) < systick) { current_systick = systick; Chip_GPIO_SetPinToggle(LPC_GPIO, LED_PORT, LED_PIN); } promptProcess(cmdLineEntries); } return 0; }
int f_mngRestoreFactoryDone(unsigned *pMsg) { func_t func; switch(((msg_t *)pMsg)->msgType) { case CACT_OVER: break; case CMSG_INIT: //DISP_menu_MNGSYS_line2nd_RestoreDoing(); DISP_menu_MNGSYS_line3rd_succ(5); vp_stor(CVOPID_RESTORE); vp_stor(CVOPID_SUCESS); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); break; case CMSG_TMR: if(g_tick++ >= 10) { g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_init(&g_fstack); func.func = f_idle; fstack_push(&g_fstack, &func); } break; case CPMT_OVER: promptInit(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_init(&g_fstack); func.func = f_idle; fstack_push(&g_fstack, &func); break; default: /** 可能的错误 **/ break; } return 0; }
int f_mngOpenModeDone(unsigned *pMsg) { //func_t func; #if 1 switch(((msg_t *)pMsg)->msgType) { case CACT_OVER: break; case CMSG_INIT: DISP_menu_MNGSYS_line3rd_succ(5); vp_stor(CVOPID_SET); vp_stor(CVOPID_SUCESS); DISP_L2_menu_OpenModemng(OpenMode_getValue()); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); break; case CMSG_TMR: if(g_tick++ >= 2) { g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_pop(&g_fstack); fstack_pop(&g_fstack); } break; case CPMT_OVER: promptInit(); break; default: /** 可能的错误 **/ break; } #endif return 0; }
/******************************************************************************* * 设置时间日期 *******************************************************************************/ int f_mngDatetime(unsigned *pMsg) { #define CDATETIME_MIN 0 #define CDATETIME_MAX (MTABSIZE(boundary_datetime) - 1) func_t func; switch(((msg_t *)pMsg)->msgType) { case CMSG_INIT: g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); All_Screen(0); //OLED_cleanPages(5, 5); MDATETIME_READ("读出时间,存入到g_u8password[]中"); g_u8menuNO = CDATETIME_MIN; //数值索引 MDATETIME_COOKED(g_u8menuNO); MDATETIME_GET(g_u8menuNO, g_u8pswordSel); g_u8pswordSel = MBCD2HEX(g_u8pswordSel); DISP_GetOrSetDateTime(1); DISP_line3rd_menu_select(); //第三行 break; case CMSG_TMR: //SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); DISP_SetDateTime_Blink(g_u8menuNO, (g_tick & 0x01), MHEX2BCD(g_u8pswordSel)); g_tick++; if(g_tick > 10) { promptInit(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_pop(&g_fstack); } break; case CMSG_DKEY: /** 检测到按键按下 **/ switch(((msg_t *)pMsg)->msgValue) { case CKEY_2: ledPrompt(2, TIMER_100MS); promptInit(); beep(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); g_u8pswordSel = value_dec(g_u8pswordSel, boundary_datetime[g_u8menuNO][1], boundary_datetime[g_u8menuNO][0]); DISP_SetDateTime_Blink(g_u8menuNO, 0, MHEX2BCD(g_u8pswordSel)); break; case CKEY_8: ledPrompt(8, TIMER_100MS); promptInit(); beep(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); g_u8pswordSel = value_inc(g_u8pswordSel, boundary_datetime[g_u8menuNO][1], boundary_datetime[g_u8menuNO][0]); DISP_SetDateTime_Blink(g_u8menuNO, 0, MHEX2BCD(g_u8pswordSel)); break; case CKEY_asterisk: ledPrompt(10, TIMER_100MS); promptInit(); beep(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_pop(&g_fstack); break; case CKEY_pound: ledPrompt(12, TIMER_100MS); promptInit(); beep(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); MDATETIME_STORE(g_u8menuNO, MHEX2BCD(g_u8pswordSel)); DISP_SetDateTime_Blink(g_u8menuNO, 0, MHEX2BCD(g_u8pswordSel)); datetime_ByteWrite(boundary_datetime[g_u8menuNO][3], MHEX2BCD(g_u8pswordSel)); g_u8menuNO++; if(g_u8menuNO < CDATETIME_MAX) { MDATETIME_COOKED(g_u8menuNO); MDATETIME_GET(g_u8menuNO, g_u8pswordSel); g_u8pswordSel = MBCD2HEX(g_u8pswordSel); DISP_SetDateTime_Blink(g_u8menuNO, 0, MHEX2BCD(g_u8pswordSel)); } else { MDATETIME_WRITE("写入到芯片"); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); func.func = f_mngDatetimeDone; fstack_push(&g_fstack, &func); } break; default: /** 可能的错误 **/ break; } default: /** 可能的错误 **/ break; } return 0; #undef CDATETIME_MIN #undef CDATETIME_MAX }
/******************************************************************************* * 开锁方式 *******************************************************************************/ int f_mngOpenMode(unsigned *pMsg) { #define COPENMODE_MIN 0 #define COPENMODE_MAX 2 func_t func; switch(((msg_t *)pMsg)->msgType) { case CMSG_INIT: g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_TMR); g_u8menuNO = COPENMODE_MIN; All_Screen(0); DISP_menu_MNGSYS_line1st_OpenMode(); //第一行 DISP_L2_menu_OpenModemng(g_u8menuNO); //第二行 OLED_cleanPages(5, 5); DISP_line3rd_menu_select(); //第三行 break; case CMSG_DKEY: /** 检测到按键按下 **/ switch(((msg_t *)pMsg)->msgValue) { case CKEY_2: ledPrompt(2, TIMER_100MS); promptInit(); beep(); g_u8menuNO = value_dec(g_u8menuNO, COPENMODE_MAX, COPENMODE_MIN); DISP_L2_menu_OpenModemng(g_u8menuNO); break; case CKEY_8: ledPrompt(8, TIMER_100MS); promptInit(); beep(); g_u8menuNO = value_inc(g_u8menuNO, COPENMODE_MAX, COPENMODE_MIN); DISP_L2_menu_OpenModemng(g_u8menuNO); break; case CKEY_asterisk: ledPrompt(10, TIMER_100MS); promptInit(); beep(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); fstack_pop(&g_fstack); break; case CKEY_pound: ledPrompt(12, TIMER_100MS); promptInit(); beep(); OpenMode_setValue(g_u8menuNO); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); func.func = f_mngOpenModeDone; fstack_push(&g_fstack, &func); break; default: /** 可能的错误 **/ break; } default: /** 可能的错误 **/ break; } return 0; #undef COPENMODE_MIN #undef COPENMODE_MAX }
/******************************************************************************* * 恢复出厂值 *******************************************************************************/ int f_mngRestoreFactory(unsigned *pMsg) { func_t func; switch(((msg_t *)pMsg)->msgType) { case CMSG_INIT: OLED_cleanPages(0, 1); //第1行 DISP_menu_MNGSYS_line2nd_RestoreConfirm(); //恢复出厂? DISP_line3rd_menu_confirm(6); /** (否(*) 是(#) ) **/ g_u8pswordNO = 0; break; case CPMT_OVER: promptInit(); break; case CFIGER_INIT: g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_300MS, CFIGER_INIT); FP_INIT(); break; case CMSG_FGINIT: //完成指纹传感器初始化. 可以进行删除了 g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_3SEC, CMSG_FGINIT); g_u8pswordNO = 0; //MFP_DelAll(); //删除全部指纹 FP_DelAll(); //删除全部指纹 break; case CMSG_FGOPFAIL: /** 如果清除全部指纹失败,意味着什么? 该怎么办? **/ break; case CMSG_FGDERG: //完成指纹模板删除 promptInit(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT); MFPOWER_OFF(); //指纹传感器断电 func.func = f_mngRestoreFactoryDone; fstack_push(&g_fstack, &func); break; case CMSG_DKEY: /** 检测到按键按下 **/ switch(((msg_t *)pMsg)->msgValue) { case CKEY_asterisk: ledPrompt(10, TIMER_100MS); promptInit(); beep(); g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_INIT); fstack_pop(&g_fstack); break; case CKEY_pound: ledPrompt(12, TIMER_100MS); promptInit(); beep(); g_u8pswordNO++; if(g_u8pswordNO == 1) { //第n次按下#号 DISP_menu_MNGSYS_line2nd_RestoreDoing(); //恢复出厂 //DISP_menu_MNGSYS_line3rd_RestoreDoing(6); OLED_cleanPages(5, 5); DISP_menu_MNGSYS_line3rd_Waiting(6); //请稍等 MFPOWER_ON(); //指纹传感器供电 psword_delAll(); //全部密码 bluetoothEntry_delAll(); //全部蓝牙设备 fingerTab_clean(); //指纹索引表 record_clean(); //开锁记录 g_tick = 0; SetTimer_irq(&g_timer[0], TIMER_300MS, CFIGER_INIT); } break; default: /** 可能的错误 **/ break; } default: /** 可能的错误 **/ break; } return 0; }