Browse Source

cc3200: Make the WDT aware of the servers sleep/wake state.

pull/1288/head
Daniel Campora 10 years ago
parent
commit
6545336206
  1. 10
      cc3200/mods/pybwdt.c
  2. 1
      cc3200/mods/pybwdt.h
  3. 8
      cc3200/serverstask.c

10
cc3200/mods/pybwdt.c

@ -54,6 +54,7 @@
******************************************************************************/ ******************************************************************************/
typedef struct { typedef struct {
bool servers; bool servers;
bool servers_sleeping;
bool simplelink; bool simplelink;
bool running; bool running;
}pybwdt_data_t; }pybwdt_data_t;
@ -61,7 +62,7 @@ typedef struct {
/****************************************************************************** /******************************************************************************
DECLARE PRIVATE DATA DECLARE PRIVATE DATA
******************************************************************************/ ******************************************************************************/
static pybwdt_data_t pybwdt_data; static pybwdt_data_t pybwdt_data = {.servers = false, .servers_sleeping = false, .simplelink = false, .running = false};
/****************************************************************************** /******************************************************************************
DEFINE PUBLIC FUNCTIONS DEFINE PUBLIC FUNCTIONS
@ -69,12 +70,11 @@ static pybwdt_data_t pybwdt_data;
// must be called in main.c just after initializing the hal // must be called in main.c just after initializing the hal
__attribute__ ((section (".boot"))) __attribute__ ((section (".boot")))
void pybwdt_init0 (void) { void pybwdt_init0 (void) {
pybwdt_data.running = false;
} }
void pybwdt_kick (void) { void pybwdt_kick (void) {
// check that the servers and simplelink are running fine // check that the servers and simplelink are running fine
if (pybwdt_data.servers && pybwdt_data.simplelink && pybwdt_data.running) { if ((pybwdt_data.servers || pybwdt_data.servers_sleeping) && pybwdt_data.simplelink && pybwdt_data.running) {
pybwdt_data.servers = false; pybwdt_data.servers = false;
pybwdt_data.simplelink = false; pybwdt_data.simplelink = false;
MAP_WatchdogIntClear(WDT_BASE); MAP_WatchdogIntClear(WDT_BASE);
@ -85,6 +85,10 @@ void pybwdt_srv_alive (void) {
pybwdt_data.servers = true; pybwdt_data.servers = true;
} }
void pybwdt_srv_sleeping (bool state) {
pybwdt_data.servers_sleeping = state;
}
void pybwdt_sl_alive (void) { void pybwdt_sl_alive (void) {
pybwdt_data.simplelink = true; pybwdt_data.simplelink = true;
} }

1
cc3200/mods/pybwdt.h

@ -34,6 +34,7 @@ extern const mp_obj_base_t pyb_wdt_obj;
void pybwdt_init0 (void); void pybwdt_init0 (void);
void pybwdt_kick (void); void pybwdt_kick (void);
void pybwdt_srv_alive (void); void pybwdt_srv_alive (void);
void pybwdt_srv_sleeping (bool state);
void pybwdt_sl_alive (void); void pybwdt_sl_alive (void);
#endif /* PYBWDT_H_ */ #endif /* PYBWDT_H_ */

8
cc3200/serverstask.c

@ -121,14 +121,16 @@ void TASK_Servers (void *pvParameters) {
} }
} }
// set the alive flag for the wdt
pybwdt_srv_alive();
if (sleep_sockets) { if (sleep_sockets) {
sleep_sockets = false; sleep_sockets = false;
pybwdt_srv_sleeping(true);
modusocket_enter_sleep(); modusocket_enter_sleep();
pybwdt_srv_sleeping(false);
} }
// set the alive flag for the wdt
pybwdt_srv_alive();
// move to the next cycle // move to the next cycle
cycle = cycle ? false : true; cycle = cycle ? false : true;
HAL_Delay(SERVERS_CYCLE_TIME_MS); HAL_Delay(SERVERS_CYCLE_TIME_MS);

Loading…
Cancel
Save