getting location and activity

Dependencies:   Cayenne-LPP GPS

Committer:
kimutaingetich
Date:
Mon Mar 11 09:24:37 2019 +0000
Revision:
0:68ca78749806
time changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kimutaingetich 0:68ca78749806 1 #ifndef _DSA_STANDBY_H_
kimutaingetich 0:68ca78749806 2 #define _DSA_STANDBY_H_
kimutaingetich 0:68ca78749806 3
kimutaingetich 0:68ca78749806 4 #include "mbed.h"
kimutaingetich 0:68ca78749806 5 #include "rtc_api_hal.h"
kimutaingetich 0:68ca78749806 6
kimutaingetich 0:68ca78749806 7 enum WakeupType {
kimutaingetich 0:68ca78749806 8 WAKEUP_RESET,
kimutaingetich 0:68ca78749806 9 WAKEUP_TIMER,
kimutaingetich 0:68ca78749806 10 WAKEUP_PIN
kimutaingetich 0:68ca78749806 11 };
kimutaingetich 0:68ca78749806 12
kimutaingetich 0:68ca78749806 13 static RTC_HandleTypeDef RtcHandle;
kimutaingetich 0:68ca78749806 14
kimutaingetich 0:68ca78749806 15 void rtc_set_wake_up_timer_s(uint32_t delta)
kimutaingetich 0:68ca78749806 16 {
kimutaingetich 0:68ca78749806 17 uint32_t clock = RTC_WAKEUPCLOCK_CK_SPRE_16BITS;
kimutaingetich 0:68ca78749806 18
kimutaingetich 0:68ca78749806 19 // HAL_RTCEx_SetWakeUpTimer_IT will assert that delta is 0xFFFF at max
kimutaingetich 0:68ca78749806 20 if (delta > 0xFFFF) {
kimutaingetich 0:68ca78749806 21 delta -= 0x10000;
kimutaingetich 0:68ca78749806 22 clock = RTC_WAKEUPCLOCK_CK_SPRE_17BITS;
kimutaingetich 0:68ca78749806 23 }
kimutaingetich 0:68ca78749806 24
kimutaingetich 0:68ca78749806 25 RtcHandle.Instance = RTC;
kimutaingetich 0:68ca78749806 26
kimutaingetich 0:68ca78749806 27 HAL_StatusTypeDef status = HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, delta, clock);
kimutaingetich 0:68ca78749806 28
kimutaingetich 0:68ca78749806 29 if (status != HAL_OK) {
kimutaingetich 0:68ca78749806 30 printf("Set wake up timer failed: %d\n", status);
kimutaingetich 0:68ca78749806 31 NVIC_SystemReset();
kimutaingetich 0:68ca78749806 32 }
kimutaingetich 0:68ca78749806 33 }
kimutaingetich 0:68ca78749806 34
kimutaingetich 0:68ca78749806 35 WakeupType get_wakeup_type() {
kimutaingetich 0:68ca78749806 36
kimutaingetich 0:68ca78749806 37 if(READ_BIT(RTC->ISR, RTC_ISR_WUTF))
kimutaingetich 0:68ca78749806 38 return WAKEUP_TIMER;
kimutaingetich 0:68ca78749806 39
kimutaingetich 0:68ca78749806 40 // this is set by timer too, but that's checked already
kimutaingetich 0:68ca78749806 41 // above.
kimutaingetich 0:68ca78749806 42 if(READ_BIT(PWR->CSR, PWR_CSR_WUF))
kimutaingetich 0:68ca78749806 43 return WAKEUP_PIN;
kimutaingetich 0:68ca78749806 44
kimutaingetich 0:68ca78749806 45 return WAKEUP_RESET;
kimutaingetich 0:68ca78749806 46 }
kimutaingetich 0:68ca78749806 47
kimutaingetich 0:68ca78749806 48 void standby(int seconds) {
kimutaingetich 0:68ca78749806 49 printf("Going to sleep!\n");
kimutaingetich 0:68ca78749806 50
kimutaingetich 0:68ca78749806 51 core_util_critical_section_enter();
kimutaingetich 0:68ca78749806 52
kimutaingetich 0:68ca78749806 53 // Clear wakeup flag, just in case.
kimutaingetich 0:68ca78749806 54 SET_BIT(PWR->CR, PWR_CR_CWUF);
kimutaingetich 0:68ca78749806 55
kimutaingetich 0:68ca78749806 56 // Enable wakeup timer.
kimutaingetich 0:68ca78749806 57 rtc_set_wake_up_timer_s(seconds);
kimutaingetich 0:68ca78749806 58
kimutaingetich 0:68ca78749806 59 // Enable debug interface working in standby. Causes power consumption to increase drastically while in standby.
kimutaingetich 0:68ca78749806 60 //HAL_DBGMCU_EnableDBGStandbyMode();
kimutaingetich 0:68ca78749806 61
kimutaingetich 0:68ca78749806 62 HAL_PWR_EnterSTANDBYMode();
kimutaingetich 0:68ca78749806 63
kimutaingetich 0:68ca78749806 64 // this should not happen...
kimutaingetich 0:68ca78749806 65 rtc_deactivate_wake_up_timer();
kimutaingetich 0:68ca78749806 66 core_util_critical_section_exit();
kimutaingetich 0:68ca78749806 67
kimutaingetich 0:68ca78749806 68 // something went wrong, let's reset
kimutaingetich 0:68ca78749806 69 NVIC_SystemReset();
kimutaingetich 0:68ca78749806 70 }
kimutaingetich 0:68ca78749806 71
kimutaingetich 0:68ca78749806 72 #endif // _DSA_STANDBY_H_