Skip to content

Commit f54bdec

Browse files
author
Daniel Campora
committed
cc3200: Implement Sleep.wake_reason()
1 parent 71d482d commit f54bdec

6 files changed

Lines changed: 25 additions & 12 deletions

File tree

cc3200/mods/modwlan.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ void SimpleLinkSockEventHandler(SlSockEvent_t *pSock) {
380380
//*****************************************************************************
381381

382382
__attribute__ ((section (".boot")))
383-
void wlan_init0 (void) {
383+
void wlan_pre_init (void) {
384384
// create the wlan lock
385385
ASSERT(OSI_OK == sl_LockObjCreate(&wlan_LockObj, "WlanLock"));
386386
}

cc3200/mods/modwlan.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ extern _SlLockObj_t wlan_LockObj;
5353
/******************************************************************************
5454
DECLARE PUBLIC FUNCTIONS
5555
******************************************************************************/
56-
extern void wlan_init0 (void);
56+
extern void wlan_pre_init (void);
5757
extern modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ssid_len, uint8_t sec,
5858
const char *key, uint8_t key_len, uint8_t channel);
5959
extern void wlan_first_start (void);

cc3200/mods/pybsleep.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ STATIC nvic_reg_store_t *nvic_reg_store;
123123
STATIC pybsleep_data_t pybsleep_data = {NULL, NULL, NULL, 0};
124124
volatile arm_cm4_core_regs_t vault_arm_registers;
125125
STATIC pybsleep_reset_cause_t pybsleep_reset_cause = PYB_SLP_PWRON_RESET;
126+
STATIC pybsleep_reset_cause_t pybsleep_wake_reason = PYB_SLP_WAKED_PWRON;
126127

127128
/******************************************************************************
128129
DECLARE PRIVATE FUNCTIONS
@@ -179,6 +180,17 @@ void pybsleep_init0 (void) {
179180
}
180181
else {
181182
pybsleep_reset_cause = PYB_SLP_HIB_RESET;
183+
// set the correct wake reason
184+
switch (MAP_PRCMHibernateWakeupCauseGet()) {
185+
case PRCM_HIB_WAKEUP_CAUSE_SLOW_CLOCK:
186+
pybsleep_wake_reason = PYB_SLP_WAKED_BY_RTC;
187+
break;
188+
case PRCM_HIB_WAKEUP_CAUSE_GPIO:
189+
pybsleep_wake_reason = PYB_SLP_WAKED_BY_GPIO;
190+
break;
191+
default:
192+
break;
193+
}
182194
}
183195
break;
184196
default:
@@ -410,15 +422,18 @@ STATIC void PRCMInterruptHandler (void) {
410422
switch (MAP_PRCMLPDSWakeupCauseGet()) {
411423
case PRCM_LPDS_HOST_IRQ:
412424
mpcallback_handler(pybsleep_data.wlan_lpds_wake_cb);
425+
pybsleep_wake_reason = PYB_SLP_WAKED_BY_WLAN;
413426
break;
414427
case PRCM_LPDS_GPIO:
415428
mpcallback_handler(pybsleep_data.gpio_lpds_wake_cb);
429+
pybsleep_wake_reason = PYB_SLP_WAKED_BY_GPIO;
416430
break;
417431
case PRCM_LPDS_TIMER:
418432
// disable the timer as a wake-up source
419433
pybsleep_data.timer_wake_pwrmode &= ~PYB_PWR_MODE_LPDS;
420434
MAP_PRCMLPDSWakeupSourceDisable(PRCM_LPDS_TIMER);
421435
mpcallback_handler(pybsleep_data.timer_lpds_wake_cb);
436+
pybsleep_wake_reason = PYB_SLP_WAKED_BY_RTC;
422437
break;
423438
default:
424439
break;
@@ -630,7 +645,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_sleep_reset_cause_obj, pyb_sleep_reset_caus
630645
/// \function wake_reason()
631646
/// Returns the wake up reson from ldps or hibernate
632647
STATIC mp_obj_t pyb_sleep_wake_reason (mp_obj_t self_in) {
633-
return mp_const_none;
648+
return MP_OBJ_NEW_SMALL_INT(pybsleep_wake_reason);
634649
}
635650
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_sleep_wake_reason_obj, pyb_sleep_wake_reason);
636651

@@ -646,13 +661,13 @@ STATIC const mp_map_elem_t pybsleep_locals_dict_table[] = {
646661
{ MP_OBJ_NEW_QSTR(MP_QSTR_ACTIVE), MP_OBJ_NEW_SMALL_INT(PYB_PWR_MODE_ACTIVE) },
647662
{ MP_OBJ_NEW_QSTR(MP_QSTR_SUSPENDED), MP_OBJ_NEW_SMALL_INT(PYB_PWR_MODE_LPDS) },
648663
{ MP_OBJ_NEW_QSTR(MP_QSTR_HIBERNATING), MP_OBJ_NEW_SMALL_INT(PYB_PWR_MODE_HIBERNATE) },
649-
{ MP_OBJ_NEW_QSTR(MP_QSTR_PWR_ON_RESET), MP_OBJ_NEW_SMALL_INT(PYB_SLP_PWRON_RESET) },
664+
{ MP_OBJ_NEW_QSTR(MP_QSTR_POWER_ON), MP_OBJ_NEW_SMALL_INT(PYB_SLP_PWRON_RESET) },
650665
{ MP_OBJ_NEW_QSTR(MP_QSTR_HARD_RESET), MP_OBJ_NEW_SMALL_INT(PYB_SLP_HARD_RESET) },
651666
{ MP_OBJ_NEW_QSTR(MP_QSTR_WDT_RESET), MP_OBJ_NEW_SMALL_INT(PYB_SLP_WDT_RESET) },
652667
{ MP_OBJ_NEW_QSTR(MP_QSTR_HIB_RESET), MP_OBJ_NEW_SMALL_INT(PYB_SLP_HIB_RESET) },
653668
{ MP_OBJ_NEW_QSTR(MP_QSTR_SOFT_RESET), MP_OBJ_NEW_SMALL_INT(PYB_SLP_SOFT_RESET) },
654669
{ MP_OBJ_NEW_QSTR(MP_QSTR_WLAN_WAKE), MP_OBJ_NEW_SMALL_INT(PYB_SLP_WAKED_BY_WLAN) },
655-
{ MP_OBJ_NEW_QSTR(MP_QSTR_PIN_WAKE), MP_OBJ_NEW_SMALL_INT(PYB_SLP_WAKED_BY_PIN) },
670+
{ MP_OBJ_NEW_QSTR(MP_QSTR_PIN_WAKE), MP_OBJ_NEW_SMALL_INT(PYB_SLP_WAKED_BY_GPIO) },
656671
{ MP_OBJ_NEW_QSTR(MP_QSTR_RTC_WAKE), MP_OBJ_NEW_SMALL_INT(PYB_SLP_WAKED_BY_RTC) },
657672
};
658673

cc3200/mods/pybsleep.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,17 @@ typedef enum {
4242
PYB_SLP_HARD_RESET,
4343
PYB_SLP_WDT_RESET,
4444
PYB_SLP_HIB_RESET,
45-
PYB_SLP_SOFT_RESET,
46-
45+
PYB_SLP_SOFT_RESET
4746
} pybsleep_reset_cause_t;
4847

4948
typedef enum {
49+
PYB_SLP_WAKED_PWRON = 0,
5050
PYB_SLP_WAKED_BY_WLAN,
51-
PYB_SLP_WAKED_BY_PIN,
51+
PYB_SLP_WAKED_BY_GPIO,
5252
PYB_SLP_WAKED_BY_RTC
53-
5453
} pybsleep_wake_reason_t;
5554

5655
typedef void (*WakeUpCB_t)(const mp_obj_t self);
57-
typedef void (*DeinitCB_t)(const mp_obj_t self);
5856

5957
/******************************************************************************
6058
DECLARE EXPORTED VARIABLES

cc3200/mptask.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ STATIC void mptask_pre_init (void) {
273273
pybsleep_pre_init();
274274

275275
// this one allocates mameory for the WLAN semaphore
276-
wlan_init0();
276+
wlan_pre_init();
277277

278278
#if MICROPY_HW_HAS_SDCARD
279279
pybsd_init0();

cc3200/qstrdefsport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ Q(wake_reason)
305305
Q(ACTIVE)
306306
Q(SUSPENDED)
307307
Q(HIBERNATING)
308-
Q(PWR_ON_RESET)
308+
Q(POWER_ON)
309309
Q(HARD_RESET)
310310
Q(WDT_RESET)
311311
Q(HIB_RESET)

0 commit comments

Comments
 (0)