Skip to content
Snippets Groups Projects
Commit 760a6eca authored by Daniel Campora's avatar Daniel Campora
Browse files

cc3200: Minor refactorings on modwlan and pybsleep.

parent 4be44014
No related branches found
No related tags found
No related merge requests found
...@@ -191,8 +191,7 @@ STATIC void wlan_lpds_callback_disable (mp_obj_t self_in); ...@@ -191,8 +191,7 @@ STATIC void wlan_lpds_callback_disable (mp_obj_t self_in);
//! \return None //! \return None
//! //!
//***************************************************************************** //*****************************************************************************
void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
{
if (!pWlanEvent) { if (!pWlanEvent) {
return; return;
} }
...@@ -249,8 +248,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) ...@@ -249,8 +248,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
//! \return None //! \return None
//! //!
//***************************************************************************** //*****************************************************************************
void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent) void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent) {
{
if(!pNetAppEvent) { if(!pNetAppEvent) {
return; return;
} }
...@@ -295,8 +293,7 @@ void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent) ...@@ -295,8 +293,7 @@ void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent)
//! \return None //! \return None
//! //!
//**************************************************************************** //****************************************************************************
void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pHttpEvent, SlHttpServerResponse_t *pHttpResponse) void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pHttpEvent, SlHttpServerResponse_t *pHttpResponse) {
{
if (!pHttpEvent) { if (!pHttpEvent) {
return; return;
} }
...@@ -320,8 +317,7 @@ void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pHttpEvent, SlHttpServerR ...@@ -320,8 +317,7 @@ void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pHttpEvent, SlHttpServerR
//! \return None //! \return None
//! //!
//***************************************************************************** //*****************************************************************************
void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent) void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent) {
{
if (!pDevEvent) { if (!pDevEvent) {
return; return;
} }
...@@ -339,8 +335,7 @@ void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent) ...@@ -339,8 +335,7 @@ void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent)
//! \return None //! \return None
//! //!
//***************************************************************************** //*****************************************************************************
void SimpleLinkSockEventHandler(SlSockEvent_t *pSock) void SimpleLinkSockEventHandler(SlSockEvent_t *pSock) {
{
if (!pSock) { if (!pSock) {
return; return;
} }
...@@ -357,11 +352,11 @@ void SimpleLinkSockEventHandler(SlSockEvent_t *pSock) ...@@ -357,11 +352,11 @@ void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
case SL_SOCKET_ASYNC_EVENT: case SL_SOCKET_ASYNC_EVENT:
switch(pSock->socketAsyncEvent.SockAsyncData.type) { switch(pSock->socketAsyncEvent.SockAsyncData.type) {
case SSL_ACCEPT: case SSL_ACCEPT:
//accept failed due to ssl issue ( tcp pass)
break; break;
case RX_FRAGMENTATION_TOO_BIG: case RX_FRAGMENTATION_TOO_BIG:
break; break;
case OTHER_SIDE_CLOSE_SSL_DATA_NOT_ENCRYPTED: case OTHER_SIDE_CLOSE_SSL_DATA_NOT_ENCRYPTED:
break;
default: default:
break; break;
} }
...@@ -512,9 +507,7 @@ void wlan_update(void) { ...@@ -512,9 +507,7 @@ void wlan_update(void) {
#endif #endif
} }
// call this function to disable the complete WLAN subsystem before a system reset
void wlan_stop (uint32_t timeout) { void wlan_stop (uint32_t timeout) {
if (wlan_obj.mode >= 0) {
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP) #if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
// Stop all other processes using the wlan engine // Stop all other processes using the wlan engine
if ((wlan_obj.servers_enabled = servers_are_enabled())) { if ((wlan_obj.servers_enabled = servers_are_enabled())) {
...@@ -522,9 +515,19 @@ void wlan_stop (uint32_t timeout) { ...@@ -522,9 +515,19 @@ void wlan_stop (uint32_t timeout) {
} }
#endif #endif
sl_LockObjLock (&wlan_LockObj, SL_OS_WAIT_FOREVER); sl_LockObjLock (&wlan_LockObj, SL_OS_WAIT_FOREVER);
sl_Stop(timeout);
wlan_obj.mode = -1; wlan_obj.mode = -1;
sl_Stop(MAX(timeout, SL_STOP_TIMEOUT));
} }
void wlan_start (void) {
wlan_obj.mode = sl_Start(0, 0, 0);
sl_LockObjUnlock (&wlan_LockObj);
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
// start the servers if they were enabled before
if (wlan_obj.servers_enabled) {
servers_start();
}
#endif
} }
void wlan_get_mac (uint8_t *macAddress) { void wlan_get_mac (uint8_t *macAddress) {
...@@ -554,8 +557,7 @@ STATIC void wlan_initialize_data (void) { ...@@ -554,8 +557,7 @@ STATIC void wlan_initialize_data (void) {
} }
STATIC void wlan_reenable (SlWlanMode_t mode) { STATIC void wlan_reenable (SlWlanMode_t mode) {
// Stop and start again // stop and start again
wlan_obj.mode = -1;
sl_LockObjLock (&wlan_LockObj, SL_OS_WAIT_FOREVER); sl_LockObjLock (&wlan_LockObj, SL_OS_WAIT_FOREVER);
sl_Stop(SL_STOP_TIMEOUT); sl_Stop(SL_STOP_TIMEOUT);
wlan_obj.mode = sl_Start(0, 0, 0); wlan_obj.mode = sl_Start(0, 0, 0);
...@@ -566,13 +568,11 @@ STATIC void wlan_reenable (SlWlanMode_t mode) { ...@@ -566,13 +568,11 @@ STATIC void wlan_reenable (SlWlanMode_t mode) {
STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, const char* bssid, uint8_t sec, STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, const char* bssid, uint8_t sec,
const char* key, uint32_t key_len) { const char* key, uint32_t key_len) {
SlSecParams_t secParams; SlSecParams_t secParams;
secParams.Key = (_i8*)key; secParams.Key = (_i8*)key;
secParams.KeyLen = ((key != NULL) ? key_len : 0); secParams.KeyLen = ((key != NULL) ? key_len : 0);
secParams.Type = sec; secParams.Type = sec;
if (0 == sl_WlanConnect((_i8*)ssid, ssid_len, (_u8*)bssid, &secParams, NULL)) { if (0 == sl_WlanConnect((_i8*)ssid, ssid_len, (_u8*)bssid, &secParams, NULL)) {
// Wait for the WLAN Event // Wait for the WLAN Event
uint32_t waitForConnectionMs = 0; uint32_t waitForConnectionMs = 0;
while (!IS_CONNECTED(wlan_obj.status)) { while (!IS_CONNECTED(wlan_obj.status)) {
...@@ -584,10 +584,8 @@ STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, co ...@@ -584,10 +584,8 @@ STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, co
return MODWLAN_ERROR_TIMEOUT; return MODWLAN_ERROR_TIMEOUT;
} }
} }
return MODWLAN_OK; return MODWLAN_OK;
} }
return MODWLAN_ERROR_INVALID_PARAMS; return MODWLAN_ERROR_INVALID_PARAMS;
} }
...@@ -782,8 +780,7 @@ STATIC mp_obj_t wlan_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_ ...@@ -782,8 +780,7 @@ STATIC mp_obj_t wlan_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(wlan_connect_obj, 1, wlan_connect); STATIC MP_DEFINE_CONST_FUN_OBJ_KW(wlan_connect_obj, 1, wlan_connect);
/// \method wlan_disconnect() /// \method wlan_disconnect()
/// Closes the current WLAN connection /// Close the current WLAN connection
///
STATIC mp_obj_t wlan_disconnect(mp_obj_t self_in) { STATIC mp_obj_t wlan_disconnect(mp_obj_t self_in) {
sl_WlanDisconnect(); sl_WlanDisconnect();
return mp_const_none; return mp_const_none;
...@@ -791,8 +788,7 @@ STATIC mp_obj_t wlan_disconnect(mp_obj_t self_in) { ...@@ -791,8 +788,7 @@ STATIC mp_obj_t wlan_disconnect(mp_obj_t self_in) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_disconnect_obj, wlan_disconnect); STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_disconnect_obj, wlan_disconnect);
/// \method is_connected() /// \method is_connected()
/// Returns true if connected to the AP and an IP address has been assigned. False otherwise. /// Return true if connected to the AP and an IP address has been assigned. False otherwise.
///
STATIC mp_obj_t wlan_isconnected(mp_obj_t self_in) { STATIC mp_obj_t wlan_isconnected(mp_obj_t self_in) {
if (GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION) && if (GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION) &&
GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED)) { GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED)) {
...@@ -803,7 +799,6 @@ STATIC mp_obj_t wlan_isconnected(mp_obj_t self_in) { ...@@ -803,7 +799,6 @@ STATIC mp_obj_t wlan_isconnected(mp_obj_t self_in) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_isconnected_obj, wlan_isconnected); STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_isconnected_obj, wlan_isconnected);
STATIC mp_obj_t wlan_ifconfig (mp_obj_t self_in) { STATIC mp_obj_t wlan_ifconfig (mp_obj_t self_in) {
unsigned char len = sizeof(SlNetCfgIpV4Args_t); unsigned char len = sizeof(SlNetCfgIpV4Args_t);
unsigned char dhcpIsOn; unsigned char dhcpIsOn;
SlNetCfgIpV4Args_t ipV4; SlNetCfgIpV4Args_t ipV4;
...@@ -870,7 +865,7 @@ STATIC mp_obj_t wlan_urn (uint n_args, const mp_obj_t *args) { ...@@ -870,7 +865,7 @@ STATIC mp_obj_t wlan_urn (uint n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(wlan_urn_obj, 1, 2, wlan_urn); STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(wlan_urn_obj, 1, 2, wlan_urn);
/// \method wlan_netlist() /// \method wlan_netlist()
/// Returns a list of tuples with all the acces points within range /// Return a list of tuples with all the acces points within range
STATIC mp_obj_t wlan_scan(mp_obj_t self_in) { STATIC mp_obj_t wlan_scan(mp_obj_t self_in) {
Sl_WlanNetworkEntry_t wlanEntry; Sl_WlanNetworkEntry_t wlanEntry;
uint8_t _index = 0; uint8_t _index = 0;
...@@ -912,7 +907,7 @@ STATIC mp_obj_t wlan_scan(mp_obj_t self_in) { ...@@ -912,7 +907,7 @@ STATIC mp_obj_t wlan_scan(mp_obj_t self_in) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_scan_obj, wlan_scan); STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_scan_obj, wlan_scan);
/// \method callback(handler, pwrmode) /// \method callback(handler, pwrmode)
/// Creates a callback object associated with WLAN /// Create a callback object associated with WLAN
/// min num of arguments is 1 (pwrmode) /// min num of arguments is 1 (pwrmode)
STATIC mp_obj_t wlan_callback (mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t wlan_callback (mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
mp_arg_val_t args[mpcallback_INIT_NUM_ARGS]; mp_arg_val_t args[mpcallback_INIT_NUM_ARGS];
......
...@@ -58,6 +58,7 @@ extern modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uin ...@@ -58,6 +58,7 @@ extern modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uin
const char *key, uint8_t key_len, uint8_t channel); const char *key, uint8_t key_len, uint8_t channel);
extern void wlan_first_start (void); extern void wlan_first_start (void);
extern void wlan_stop (uint32_t timeout); extern void wlan_stop (uint32_t timeout);
extern void wlan_start (void);
extern void wlan_get_mac (uint8_t *macAddress); extern void wlan_get_mac (uint8_t *macAddress);
extern void wlan_get_ip (uint32_t *ip); extern void wlan_get_ip (uint32_t *ip);
......
...@@ -114,14 +114,14 @@ typedef struct { ...@@ -114,14 +114,14 @@ typedef struct {
mp_obj_t timer_lpds_wake_cb; mp_obj_t timer_lpds_wake_cb;
mp_obj_t gpio_lpds_wake_cb; mp_obj_t gpio_lpds_wake_cb;
uint timer_wake_pwrmode; uint timer_wake_pwrmode;
} pybsleep_wake_cb_t; } pybsleep_data_t;
/****************************************************************************** /******************************************************************************
DECLARE PRIVATE DATA DECLARE PRIVATE DATA
******************************************************************************/ ******************************************************************************/
STATIC const mp_obj_type_t pybsleep_type; STATIC const mp_obj_type_t pybsleep_type;
STATIC nvic_reg_store_t *nvic_reg_store; STATIC nvic_reg_store_t *nvic_reg_store;
STATIC pybsleep_wake_cb_t pybsleep_wake_cb = {NULL, NULL, NULL, 0}; STATIC pybsleep_data_t pybsleep_data = {NULL, NULL, NULL, 0};
volatile arm_cm4_core_regs_t vault_arm_registers; volatile arm_cm4_core_regs_t vault_arm_registers;
STATIC pybsleep_reset_cause_t pybsleep_reset_cause = PYB_SLP_PWRON_RESET; STATIC pybsleep_reset_cause_t pybsleep_reset_cause = PYB_SLP_PWRON_RESET;
...@@ -211,19 +211,19 @@ void pybsleep_remove (const mp_obj_t obj) { ...@@ -211,19 +211,19 @@ void pybsleep_remove (const mp_obj_t obj) {
} }
void pybsleep_set_wlan_lpds_callback (mp_obj_t cb_obj) { void pybsleep_set_wlan_lpds_callback (mp_obj_t cb_obj) {
pybsleep_wake_cb.wlan_lpds_wake_cb = cb_obj; pybsleep_data.wlan_lpds_wake_cb = cb_obj;
} }
void pybsleep_set_gpio_lpds_callback (mp_obj_t cb_obj) { void pybsleep_set_gpio_lpds_callback (mp_obj_t cb_obj) {
pybsleep_wake_cb.gpio_lpds_wake_cb = cb_obj; pybsleep_data.gpio_lpds_wake_cb = cb_obj;
} }
void pybsleep_set_timer_lpds_callback (mp_obj_t cb_obj) { void pybsleep_set_timer_lpds_callback (mp_obj_t cb_obj) {
pybsleep_wake_cb.timer_lpds_wake_cb = cb_obj; pybsleep_data.timer_lpds_wake_cb = cb_obj;
} }
void pybsleep_configure_timer_wakeup (uint pwrmode) { void pybsleep_configure_timer_wakeup (uint pwrmode) {
pybsleep_wake_cb.timer_wake_pwrmode = pwrmode; pybsleep_data.timer_wake_pwrmode = pwrmode;
} }
pybsleep_reset_cause_t pybsleep_get_reset_cause (void) { pybsleep_reset_cause_t pybsleep_get_reset_cause (void) {
...@@ -404,22 +404,22 @@ STATIC void PRCMInterruptHandler (void) { ...@@ -404,22 +404,22 @@ STATIC void PRCMInterruptHandler (void) {
// reading the interrupt status automatically clears the interrupt // reading the interrupt status automatically clears the interrupt
if (PRCM_INT_SLOW_CLK_CTR == MAP_PRCMIntStatus()) { if (PRCM_INT_SLOW_CLK_CTR == MAP_PRCMIntStatus()) {
// this interrupt is triggered during active mode // this interrupt is triggered during active mode
mpcallback_handler(pybsleep_wake_cb.timer_lpds_wake_cb); mpcallback_handler(pybsleep_data.timer_lpds_wake_cb);
} }
else { else {
// interrupt has been triggered while waking up from LPDS // interrupt has been triggered while waking up from LPDS
switch (MAP_PRCMLPDSWakeupCauseGet()) { switch (MAP_PRCMLPDSWakeupCauseGet()) {
case PRCM_LPDS_HOST_IRQ: case PRCM_LPDS_HOST_IRQ:
mpcallback_handler(pybsleep_wake_cb.wlan_lpds_wake_cb); mpcallback_handler(pybsleep_data.wlan_lpds_wake_cb);
break; break;
case PRCM_LPDS_GPIO: case PRCM_LPDS_GPIO:
mpcallback_handler(pybsleep_wake_cb.gpio_lpds_wake_cb); mpcallback_handler(pybsleep_data.gpio_lpds_wake_cb);
break; break;
case PRCM_LPDS_TIMER: case PRCM_LPDS_TIMER:
// disable the timer as a wake-up source // disable the timer as a wake-up source
pybsleep_wake_cb.timer_wake_pwrmode &= ~PYB_PWR_MODE_LPDS; pybsleep_data.timer_wake_pwrmode &= ~PYB_PWR_MODE_LPDS;
MAP_PRCMLPDSWakeupSourceDisable(PRCM_LPDS_TIMER); MAP_PRCMLPDSWakeupSourceDisable(PRCM_LPDS_TIMER);
mpcallback_handler(pybsleep_wake_cb.timer_lpds_wake_cb); mpcallback_handler(pybsleep_data.timer_lpds_wake_cb);
break; break;
default: default:
break; break;
...@@ -567,24 +567,24 @@ STATIC mp_obj_t pyb_sleep_suspend (mp_obj_t self_in) { ...@@ -567,24 +567,24 @@ STATIC mp_obj_t pyb_sleep_suspend (mp_obj_t self_in) {
nlr_buf_t nlr; nlr_buf_t nlr;
// check if we should enable timer wake-up // check if we should enable timer wake-up
if (pybsleep_wake_cb.timer_wake_pwrmode & PYB_PWR_MODE_LPDS) { if (pybsleep_data.timer_wake_pwrmode & PYB_PWR_MODE_LPDS) {
if (!setup_timer_lpds_wake()) { if (!setup_timer_lpds_wake()) {
// lpds entering is not possible, wait for the forced interrupt and return // lpds entering is not possible, wait for the forced interrupt and return
pybsleep_wake_cb.timer_wake_pwrmode &= ~PYB_PWR_MODE_LPDS; pybsleep_data.timer_wake_pwrmode &= ~PYB_PWR_MODE_LPDS;
HAL_Delay (FAILED_SLEEP_DELAY_MS); HAL_Delay (FAILED_SLEEP_DELAY_MS);
return mp_const_none; return mp_const_none;
} }
} }
// check if we need to enable network wake-up // do we need network wake-up?
if (pybsleep_wake_cb.wlan_lpds_wake_cb) { if (pybsleep_data.wlan_lpds_wake_cb) {
MAP_PRCMLPDSWakeupSourceEnable (PRCM_LPDS_HOST_IRQ); MAP_PRCMLPDSWakeupSourceEnable (PRCM_LPDS_HOST_IRQ);
} }
else { else {
MAP_PRCMLPDSWakeupSourceDisable (PRCM_LPDS_HOST_IRQ); MAP_PRCMLPDSWakeupSourceDisable (PRCM_LPDS_HOST_IRQ);
} }
// entering and exiting suspend mode must be an atomic operation // entering and exiting suspended mode must be an atomic operation
// therefore interrupts need to be disabled // therefore interrupts need to be disabled
uint primsk = disable_irq(); uint primsk = disable_irq();
if (nlr_push(&nlr) == 0) { if (nlr_push(&nlr) == 0) {
...@@ -604,10 +604,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_sleep_suspend_obj, pyb_sleep_suspend); ...@@ -604,10 +604,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_sleep_suspend_obj, pyb_sleep_suspend);
/// calling this method. /// calling this method.
STATIC mp_obj_t pyb_sleep_hibernate (mp_obj_t self_in) { STATIC mp_obj_t pyb_sleep_hibernate (mp_obj_t self_in) {
// check if we should enable timer wake-up // check if we should enable timer wake-up
if (pybsleep_wake_cb.timer_wake_pwrmode & PYB_PWR_MODE_HIBERNATE) { if (pybsleep_data.timer_wake_pwrmode & PYB_PWR_MODE_HIBERNATE) {
if (!setup_timer_hibernate_wake()) { if (!setup_timer_hibernate_wake()) {
// hibernating is not possible, wait for the forced interrupt and return // hibernating is not possible, wait for the forced interrupt and return
pybsleep_wake_cb.timer_wake_pwrmode &= ~PYB_PWR_MODE_HIBERNATE; pybsleep_data.timer_wake_pwrmode &= ~PYB_PWR_MODE_HIBERNATE;
HAL_Delay (FAILED_SLEEP_DELAY_MS); HAL_Delay (FAILED_SLEEP_DELAY_MS);
return mp_const_none; return mp_const_none;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment