PRSEV_HANDLER_DEF(E_STATE_APP_SLEEP, tsEvent *pEv, teEvent eEvent, uint32 u32evarg) { if (eEvent == E_EVENT_NEW_STATE) { // Sleep は必ず E_EVENT_NEW_STATE 内など1回のみ呼び出される場所で呼び出す。 V_PRINTF(LB"! Sleeping..."); V_FLUSH(); pEv->bKeepStateOnSetAll = FALSE; // スリープ復帰の状態を維持 // Mininode の場合、特別な処理は無いのだが、ポーズ処理を行う ToCoNet_Nwk_bPause(sAppData.pContextNwk); // センサー用の電源制御回路を Hi に戻す vPortSetSns(FALSE); #ifdef LITE2525A vPortSetLo(LED); #else vPortSetHi(LED); #endif // 周期スリープに入る if(sAppData.sFlash.sData.i16param == NORMAL || sAppData.sFlash.sData.i16param == NEKOTTER ){ vSleep(sAppData.sFlash.sData.u32Slp, sAppData.u16frame_count == 1 ? FALSE : TRUE, FALSE); }else{ // 割り込みの設定 vAHI_DioSetDirection(PORT_INPUT_MASK_ADXL345, 0); // set as input (void)u32AHI_DioInterruptStatus(); // clear interrupt register vAHI_DioWakeEnable(PORT_INPUT_MASK_ADXL345, 0); // also use as DIO WAKE SOURCE vAHI_DioWakeEdge(PORT_INPUT_MASK_ADXL345, 0); // 割り込みエッジ(立上がりに設定) vSleep(0, FALSE, FALSE); } } }
/** * センサー値を格納する */ static void vStoreSensorValue() { // パルス数の読み込み bAHI_Read16BitCounter(E_AHI_PC_0, &sAppData.sSns.u16PC1); // 16bitの場合 // パルス数のクリア bAHI_Clear16BitPulseCounter(E_AHI_PC_0); // 16bitの場合 // パルス数の読み込み bAHI_Read16BitCounter(E_AHI_PC_1, &sAppData.sSns.u16PC2); // 16bitの場合 // パルス数のクリア bAHI_Clear16BitPulseCounter(E_AHI_PC_1); // 16bitの場合 // センサー値の保管 sAppData.sSns.u16Adc1 = sAppData.sObjADC.ai16Result[TEH_ADC_IDX_ADC_1]; #ifdef USE_TEMP_INSTDOF_ADC2 sAppData.sSns.u16Adc2 = sAppData.sObjADC.ai16Result[TEH_ADC_IDX_TEMP]; #else sAppData.sSns.u16Adc2 = sAppData.sObjADC.ai16Result[TEH_ADC_IDX_ADC_2]; #endif sAppData.sSns.u8Batt = ENCODE_VOLT(sAppData.sObjADC.ai16Result[TEH_ADC_IDX_VOLT]); // ADC1 が 1300mV 以上(SuperCAP が 2600mV 以上)である場合は SUPER CAP の直結を有効にする if (sAppData.sSns.u16Adc1 >= VOLT_SUPERCAP_CONTROL) { vPortSetLo(DIO_SUPERCAP_CONTROL); } // センサー用の電源制御回路を Hi に戻す vPortSetSns(FALSE); }
/** * センサー値を格納する */ static void vStoreSensorValue() { // センサー値の保管 sAppData.sSns.u16Adc1 = sAppData.sObjADC.ai16Result[TEH_ADC_IDX_ADC_1]; #ifdef USE_TEMP_INSTDOF_ADC2 sAppData.sSns.u16Adc2 = sAppData.sObjADC.ai16Result[TEH_ADC_IDX_TEMP]; #else sAppData.sSns.u16Adc2 = sAppData.sObjADC.ai16Result[TEH_ADC_IDX_ADC_2]; #endif sAppData.sSns.u8Batt = ENCODE_VOLT(sAppData.sObjADC.ai16Result[TEH_ADC_IDX_VOLT]); // ADC1 が 1300mV 以上(SuperCAP が 2600mV 以上)である場合は SUPER CAP の直結を有効にする if (sAppData.sSns.u16Adc1 >= VOLT_SUPERCAP_CONTROL) { vPortSetLo(DIO_SUPERCAP_CONTROL); } // センサー用の電源制御回路を Hi に戻す vPortSetSns(FALSE); }
PRSEV_HANDLER_DEF(E_STATE_APP_SLEEP, tsEvent *pEv, teEvent eEvent, uint32 u32evarg) { if (eEvent == E_EVENT_NEW_STATE) { // Sleep は必ず E_EVENT_NEW_STATE 内など1回のみ呼び出される場所で呼び出す。 V_PRINTF(LB"! Sleeping..."); V_FLUSH(); pEv->bKeepStateOnSetAll = FALSE; // スリープ復帰の状態を維持 // Mininode の場合、特別な処理は無いのだが、ポーズ処理を行う ToCoNet_Nwk_bPause(sAppData.pContextNwk); // センサー用の電源制御回路を Hi に戻す vPortSetSns(FALSE); // 周期スリープに入る // - 初回は5秒あけて、次回以降はスリープ復帰を基点に5秒 vSleep(sAppData.sFlash.sData.u32Slp, sAppData.u16frame_count == 1 ? FALSE : TRUE, FALSE); } }
PRSEV_HANDLER_DEF(E_STATE_APP_SLEEP, tsEvent *pEv, teEvent eEvent, uint32 u32evarg) { if (eEvent == E_EVENT_NEW_STATE) { // Sleep は必ず E_EVENT_NEW_STATE 内など1回のみ呼び出される場所で呼び出す。 V_PRINTF(LB"! Sleeping..."); V_FLUSH(); // Mininode の場合、特別な処理は無いのだが、ポーズ処理を行う ToCoNet_Nwk_bPause(sAppData.pContextNwk); // センサー用の電源制御回路を Hi に戻す vPortSetSns(FALSE); #ifdef LITE2525A vPortSetLo(LED); #else vPortSetHi(LED); #endif vAHI_DioWakeEnable(0, PORT_INPUT_MASK); // DISABLE DIO WAKE SOURCE ToCoNet_vSleep( E_AHI_WAKE_TIMER_0, sAppData.sFlash.sData.u32Slp, FALSE, FALSE); } }
/** * スリープへの遷移 * * @param E_STATE_APP_SLEEP * @param pEv * @param eEvent * @param u32evarg */ PRSEV_HANDLER_DEF(E_STATE_APP_SLEEP, tsEvent *pEv, teEvent eEvent, uint32 u32evarg) { if (eEvent == E_EVENT_NEW_STATE) { pEv->bKeepStateOnSetAll = FALSE; u8RetryCount = 0xff; // センサー用の電源制御回路を Hi に戻す vPortSetSns(FALSE); // RTS0 を通信禁止にする vPortSetHi(PORT_RTS0); // Sleep は必ず E_EVENT_NEW_STATE 内など1回のみ呼び出される場所で呼び出す。 V_PRINTF(LB"Sleeping..."); V_FLUSH(); // Mininode の場合、特別な処理は無いのだが、ポーズ処理を行う ToCoNet_Nwk_bPause(sAppData.pContextNwk); // スリープ状態に遷移 vSleep(0, FALSE, FALSE); } }