/**************************************************************************** * * NAME: AppWarmStart * * DESCRIPTION: * * RETURNS: * ****************************************************************************/ PUBLIC void cbAppWarmStart(bool_t bAfterAhiInit) { if (!bAfterAhiInit) { // before AHI init, very first of code. // to check interrupt source, etc. sAppData.bWakeupByButton = FALSE; if(u8AHI_WakeTimerFiredStatus()) { } else if(u32AHI_DioWakeStatus() & u32DioPortWakeUp) { // woke up from DIO events sAppData.bWakeupByButton = TRUE; } } else { // Other Hardware vSerialInit(TOCONET_DEBUG_LEVEL); ToCoNet_vDebugInit(&sSerStream); ToCoNet_vDebugLevel(TOCONET_DEBUG_LEVEL); vInitHardware(FALSE); if (!sAppData.bWakeupByButton) { // タイマーで起床した } else { // ボタンで起床した } // アプリケーション処理は vProcessEvCore で実行するので、ここでは // 処理は行っていない。 } }
/**************************************************************************** * * NAME: AppColdStart * * DESCRIPTION: * * RETURNS: * ****************************************************************************/ PUBLIC void cbAppColdStart(bool_t bAfterAhiInit) { if (!bAfterAhiInit) { // before AHI initialization (very first of code) // check DIO source sAppData.bWakeupByButton = FALSE; if(u8AHI_WakeTimerFiredStatus()) { } else if(u32AHI_DioWakeStatus() & u32DioPortWakeUp) { // woke up from DIO events sAppData.bWakeupByButton = 1; } // Module Registration ToCoNet_REG_MOD_ALL(); } else { // clear application context memset(&sAppData, 0x00, sizeof(sAppData)); // SPRINTF SPRINTF_vInit128(); // フラッシュメモリからの読み出し // フラッシュからの読み込みが失敗した場合、ID=15 で設定する sAppData.bFlashLoaded = Config_bLoad(&sAppData.sFlash); // ToCoNet configuration sToCoNet_AppContext.u32AppId = sAppData.sFlash.sData.u32appid; sToCoNet_AppContext.u8Channel = sAppData.sFlash.sData.u8ch; sToCoNet_AppContext.u32ChMask = sAppData.sFlash.sData.u32chmask; sToCoNet_AppContext.u8TxMacRetry = 1; sToCoNet_AppContext.bRxOnIdle = TRUE; // Other Hardware vSerialInit(); ToCoNet_vDebugInit(&sSerStream); ToCoNet_vDebugLevel(TOCONET_DEBUG_LEVEL); vInitHardware(FALSE); // event machine if (sAppData.bConfigMode) { ToCoNet_Event_Register_State_Machine(vProcessEvCoreConfig); // デバッグ用の動作マシン } else { ToCoNet_Event_Register_State_Machine(vProcessEvCore); // main state machine } } }
/**************************************************************************** * * NAME: AppColdStart * * DESCRIPTION: * * RETURNS: * ****************************************************************************/ void cbAppColdStart(bool_t bAfterAhiInit) { if (!bAfterAhiInit) { // before AHI initialization (very first of code) // Module Registration ToCoNet_REG_MOD_ALL(); } else { // clear application context memset(&sAppData, 0x00, sizeof(sAppData)); // SPRINTF SPRINTF_vInit128(); // Configuration // フラッシュメモリからの読み出し // フラッシュからの読み込みが失敗した場合、ID=15 で設定する sAppData.bFlashLoaded = Config_bLoad(&sAppData.sFlash); // ToCoNet configuration sToCoNet_AppContext.u32AppId = sAppData.sFlash.sData.u32appid; sToCoNet_AppContext.u8Channel = sAppData.sFlash.sData.u8ch; sToCoNet_AppContext.u32ChMask = sAppData.sFlash.sData.u32chmask; sToCoNet_AppContext.u8TxMacRetry = 1; sToCoNet_AppContext.bRxOnIdle = TRUE; // event machine ToCoNet_Event_Register_State_Machine(vProcessEvCore); // main state machine // Other Hardware vSerialInit(); ToCoNet_vDebugInit(&sSerStream); ToCoNet_vDebugLevel(TOCONET_DEBUG_LEVEL); vInitHardware(FALSE); Interactive_vInit(); // START UP MESSAGE vfPrintf(&sSerStream, "\r\n*** ToCoTemp Parent %d.%02d-%d ***", VERSION_MAIN, VERSION_SUB, VERSION_VAR); vfPrintf(&sSerStream, LB "* App ID:%08x Long Addr:%08x Short Addr %04x", sToCoNet_AppContext.u32AppId, ToCoNet_u32GetSerial(), sToCoNet_AppContext.u16ShortAddress); } }
/**************************************************************************** * * NAME: AppColdStart * * DESCRIPTION: * * RETURNS: * ****************************************************************************/ PUBLIC void cbAppColdStart(bool_t bAfterAhiInit) { if (!bAfterAhiInit) { // before AHI initialization (very first of code) // Module Registration ToCoNet_REG_MOD_ALL(); } else { // clear application context memset(&sAppData, 0x00, sizeof(sAppData)); memset(&sSerCmd, 0x00, sizeof(sSerCmd)); // SPRINTF SPRINTF_vInit128(); // configure network] sToCoNet_AppContext.u32AppId = APP_ID; sToCoNet_AppContext.u8Channel = CHANNEL; sToCoNet_AppContext.u32ChMask = CHMASK; sToCoNet_AppContext.u8TxMacRetry = 1; sToCoNet_AppContext.bRxOnIdle = TRUE; // version info sAppData.u32ToCoNetVersion = ToCoNet_u32GetVersion(); // event machine ToCoNet_Event_Register_State_Machine(vProcessEvCore); // main state machine // Other Hardware vSerialInit(); ToCoNet_vDebugInit(&sSerStream); ToCoNet_vDebugLevel(TOCONET_DEBUG_LEVEL); vInitHardware(FALSE); // START UP MESSAGE vfPrintf(&sSerStream, "\r\n\r\n*** " APP_NAME " %d.%02d-%d ***", VERSION_MAIN, VERSION_SUB, VERSION_VAR); vfPrintf(&sSerStream, LB "* App ID:%08x Long Addr:%08x Short Addr %04x", sToCoNet_AppContext.u32AppId, ToCoNet_u32GetSerial(), sToCoNet_AppContext.u16ShortAddress); } }
/**************************************************************************** * * NAME: vHandleSerialInput * * DESCRIPTION: * * PARAMETERS: Name RW Usage * * RETURNS: * * NOTES: ****************************************************************************/ PRIVATE void vHandleSerialInput() { // handle UART command while (!SERIAL_bRxQueueEmpty(sSerPort.u8SerialPort)) { int16 i16Char; i16Char = SERIAL_i16RxChar(sSerPort.u8SerialPort); // process if (i16Char >=0 && i16Char <= 0xFF) { uint8 u8res = u8ParseSerCmd(&sSerCmd, (uint8)i16Char); if (u8res == E_SERCMD_VERBOSE) { vfPrintf(&sSerStream, "\n\rVERBOSE MODE = %s", bSerCmd_VerboseMode ? "ON" : "OFF"); continue; } if (!bSerCmd_VerboseMode) continue; switch (i16Char) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': sAppData.sFlash.sData.u8Layer = i16Char - '0'; if (bFlash_Write(&sAppData.sFlash, FLASH_SECTOR_NUMBER - 1, 0)) { V_PRINTF( LB "Flash Saved (Router Layer #%d)... RESETTING", sAppData.sFlash.sData.u8Layer); vWait(100000); vAHI_SwReset(); } else { V_PRINTF( LB "Failed to save flash..."); } break; case 'i': // info _C { tsToCoNet_NwkLyTr_Context *pc = (tsToCoNet_NwkLyTr_Context *)(sAppData.pContextNwk); V_PRINTF( LB "Info: la=%d ty=%d ro=%02x st=%02x", pc->sInfo.u8Layer, pc->sInfo.u8NwkTypeId, pc->sInfo.u8Role, pc->sInfo.u8State); V_PRINTF( LB "Parent: %08x", pc->u32AddrHigherLayer); V_PRINTF( LB "LostParent: %d", pc->u8Ct_LostParent); V_PRINTF( LB "SecRescan: %d, SecRelocate: %d", pc->u8Ct_Second_To_Rescan, pc->u8Ct_Second_To_Relocate); } break; case '>': sToCoNet_AppContext.u8Channel++; if (sToCoNet_AppContext.u8Channel > 25) sToCoNet_AppContext.u8Channel = 0; ToCoNet_vRfConfig(); V_PRINTF( LB"channel set to %d.", sToCoNet_AppContext.u8Channel); break; case '<': sToCoNet_AppContext.u8Channel--; if (sToCoNet_AppContext.u8Channel < 11) sToCoNet_AppContext.u8Channel = 25; ToCoNet_vRfConfig(); V_PRINTF( LB"channel set to %d.", sToCoNet_AppContext.u8Channel); break; case 't': SPRINTF_vRewind(); vfPrintf(SPRINTF_Stream, "TEST FROM ROUTER(#%08X)", ToCoNet_u32GetSerial()); bTransmitToParent(sAppData.pContextNwk, SPRINTF_pu8GetBuff(), SPRINTF_u16Length()); break; case 'd': case 'D': _C { static uint8 u8DgbLvl; u8DgbLvl++; if(u8DgbLvl > 10) u8DgbLvl = 0; ToCoNet_vDebugLevel(u8DgbLvl); V_PRINTF( LB"set NwkCode debug level to %d.", u8DgbLvl); } break; default: break; } } }