3737#include "modwlan.h"
3838#include "pybioctl.h"
3939#include "pybuart.h"
40- #include "osi.h"
4140#include "debug.h"
4241#include "serverstask.h"
4342#include "mpexception.h"
4443
45- #ifdef USE_FREERTOS
46- #include "FreeRTOS.h"
47- #include "task.h"
48- #include "semphr.h"
49- #endif
50-
5144
5245/******************************************************************************
5346 DEFINE TYPES
@@ -88,7 +81,6 @@ typedef struct _wlan_obj_t {
8881 uint8_t macAddr [SL_MAC_ADDR_LEN ];
8982 uint8_t ssid_name [33 ];
9083 uint8_t bssid [6 ];
91- bool servers_enabled ;
9284
9385 // IPVv4 data
9486 uint32_t ip ;
@@ -152,7 +144,7 @@ STATIC wlan_obj_t wlan_obj;
152144/******************************************************************************
153145 DECLARE EXPORTED DATA
154146 ******************************************************************************/
155- SemaphoreHandle_t xWlanSemaphore = NULL ;
147+ OsiLockObj_t wlan_LockObj ;
156148
157149/******************************************************************************
158150 DECLARE PRIVATE FUNCTIONS
@@ -355,11 +347,7 @@ void wlan_init0 (void) {
355347 wlan_obj .mode = -1 ;
356348 wlan_obj .base .type = NULL ;
357349 memset (wlan_obj .macAddr , 0 , SL_MAC_ADDR_LEN );
358- #ifdef USE_FREERTOS
359- if (NULL == xWlanSemaphore ) {
360- xWlanSemaphore = xSemaphoreCreateBinary ();
361- }
362- #endif
350+ ASSERT (OSI_OK == sl_LockObjCreate (& wlan_LockObj , "WlanLock" ));
363351 wlan_initialize_data ();
364352}
365353
@@ -369,9 +357,7 @@ modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ss
369357 if (mode == ROLE_STA || mode == ROLE_AP || mode == ROLE_P2P ) {
370358 if (wlan_obj .mode < 0 ) {
371359 wlan_obj .mode = sl_Start (0 , 0 , 0 );
372- #ifdef USE_FREERTOS
373- xSemaphoreGive (xWlanSemaphore );
374- #endif
360+ sl_LockObjUnlock (& wlan_LockObj );
375361 }
376362
377363 // get the mac address
@@ -492,9 +478,7 @@ modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ss
492478
493479void wlan_sl_disable (void ) {
494480 if (wlan_obj .mode >= 0 ) {
495- #ifdef USE_FREERTOS
496- xSemaphoreTake (xWlanSemaphore , portMAX_DELAY );
497- #endif
481+ sl_LockObjLock (& wlan_LockObj , SL_OS_WAIT_FOREVER );
498482 wlan_obj .mode = -1 ;
499483 sl_Stop (SL_STOP_TIMEOUT );
500484 }
@@ -543,14 +527,10 @@ STATIC void wlan_initialize_data (void) {
543527STATIC void wlan_reenable (SlWlanMode_t mode ) {
544528 // Stop and start again
545529 wlan_obj .mode = -1 ;
546- #ifdef USE_FREERTOS
547- xSemaphoreTake (xWlanSemaphore , portMAX_DELAY );
548- #endif
530+ sl_LockObjLock (& wlan_LockObj , SL_OS_WAIT_FOREVER );
549531 sl_Stop (SL_STOP_TIMEOUT );
550532 wlan_obj .mode = sl_Start (0 , 0 , 0 );
551- #ifdef USE_FREERTOS
552- xSemaphoreGive (xWlanSemaphore );
553- #endif
533+ sl_LockObjUnlock (& wlan_LockObj );
554534 ASSERT (wlan_obj .mode == mode );
555535}
556536
@@ -647,7 +627,8 @@ STATIC mp_obj_t wlan_make_new (mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_k
647627 SlWlanMode_t mode = mp_obj_get_int (args [0 ]);
648628
649629 // Stop all other processes using the wlan engine
650- if ( (wlan_obj .servers_enabled = servers_are_enabled ()) ) {
630+ bool servers_enabled ;
631+ if ( (servers_enabled = servers_are_enabled ()) ) {
651632 wlan_servers_stop ();
652633 }
653634 if (mode == ROLE_AP ) {
@@ -667,7 +648,7 @@ STATIC mp_obj_t wlan_make_new (mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_k
667648 }
668649
669650 // Start the servers again
670- if (wlan_obj . servers_enabled ) {
651+ if (servers_enabled ) {
671652 servers_enable ();
672653 }
673654 } else if (wlan_obj .mode < 0 ) {
0 commit comments