Эх сурвалжийг харах

update transport layer and formatting the code

Evlers 1 жил өмнө
parent
commit
eaa1ac9c54
57 өөрчлөгдсөн 7652 нэмэгдсэн , 10547 устгасан
  1. 9 15
      Kconfig
  2. 48 110
      README.md
  3. 0 4
      SConscript
  4. 60 60
      common/include/adapter.h
  5. 10 10
      common/include/esp_hosted_config.pb-c.h
  6. 506 506
      esp/esp_driver/network_adapter/main/app_main.c
  7. 2 2
      esp/esp_driver/network_adapter/main/app_main.h
  8. 38 38
      esp/esp_driver/network_adapter/main/interface.h
  9. 90 90
      esp/esp_driver/network_adapter/main/mempool.c
  10. 11 11
      esp/esp_driver/network_adapter/main/mempool.h
  11. 228 228
      esp/esp_driver/network_adapter/main/mempool_ll.c
  12. 255 255
      esp/esp_driver/network_adapter/main/protocomm_pserial.c
  13. 1 1
      esp/esp_driver/network_adapter/main/protocomm_pserial.h
  14. 251 251
      esp/esp_driver/network_adapter/main/sdio_slave_api.c
  15. 136 136
      esp/esp_driver/network_adapter/main/slave_bt.c
  16. 3 3
      esp/esp_driver/network_adapter/main/slave_bt.h
  17. 2382 2382
      esp/esp_driver/network_adapter/main/slave_control.c
  18. 12 12
      esp/esp_driver/network_adapter/main/slave_control.h
  19. 456 456
      esp/esp_driver/network_adapter/main/spi_slave_api.c
  20. 62 62
      esp/esp_driver/network_adapter/main/stats.c
  21. 4 4
      esp/esp_driver/network_adapter/main/stats.h
  22. 6 6
      host/common/common.c
  23. 24 24
      host/common/common.h
  24. 71 71
      host/common/stats.c
  25. 1 1
      host/common/trace.h
  26. 164 164
      host/common/util.c
  27. 3 3
      host/common/util.h
  28. 5 5
      host/components/include/esp_queue.h
  29. 64 64
      host/components/src/esp_queue.c
  30. 282 282
      host/control_lib/include/ctrl_api.h
  31. 48 48
      host/control_lib/src/ctrl_api.c
  32. 521 521
      host/control_lib/src/ctrl_core.c
  33. 10 10
      host/driver/netif/netdev_if.h
  34. 50 50
      host/driver/network/netdev_api.c
  35. 1 1
      host/driver/network/netdev_api.h
  36. 118 118
      host/driver/network/netdev_stub.c
  37. 14 14
      host/driver/network/netdev_stub.h
  38. 2 2
      host/driver/serial/serial_drv.h
  39. 216 216
      host/driver/serial/serial_ll_if.c
  40. 58 58
      host/driver/serial/serial_ll_if.h
  41. 0 160
      host/driver/transport/sdio/sdio_api.c
  42. 0 117
      host/driver/transport/sdio/sdio_api.h
  43. 0 668
      host/driver/transport/sdio/sdio_drv.c
  44. 0 44
      host/driver/transport/sdio/sdio_drv.h
  45. 0 439
      host/driver/transport/sdio/sdio_host.c
  46. 0 97
      host/driver/transport/sdio/sdio_host.h
  47. 0 981
      host/driver/transport/sdio/sdio_ll.c
  48. 0 110
      host/driver/transport/sdio/sdio_ll.h
  49. 0 175
      host/driver/transport/sdio/sdio_reg.h
  50. 461 463
      host/driver/transport/spi/spi_drv.c
  51. 138 139
      host/driver/transport/transport_drv.c
  52. 5 5
      host/driver/transport/transport_drv.h
  53. 2 2
      host/port/include/platform_wrapper.h
  54. 264 265
      host/port/src/platform_wrapper.c
  55. 124 124
      host/virtual_serial_if/src/serial_if.c
  56. 0 57
      sample/esp-hosted_port.c
  57. 436 407
      wlan/esp_wlan.c

+ 9 - 15
Kconfig

@@ -1,5 +1,5 @@
 menuconfig RT_USING_ESP_HOSTED
-    bool "Using esp-hosted form espressif"
+    bool "Using esp-hosted for espressif"
     select RT_USING_WIFI
     select RT_USING_SAL
     select RT_USING_SPI
@@ -32,28 +32,22 @@ menuconfig RT_USING_ESP_HOSTED
             range 0 32
             default 2
 
-        config ESP_HOSTED_USING_SAMPLE
-            bool "Initialize WiFi using the sample"
-            default y
-
-        if ESP_HOSTED_USING_SAMPLE
-            config ESP_HOSTED_SPI_BUS_NAME
-                string "Set the spi bus name"
-                default "spi1"
-
-            config ESP_HOSTED_SPI_CS_PIN
-                int "Set the SPI CS pin"
-                default -1
-        endif
-
         config ESP_HOSTED_SPI_DEVICE_NAME
             string "Set the spi device name"
             default "esp-hosted"
 
+        config ESP_HOSTED_SPI_BUS_NAME
+            string "Set the spi bus name"
+            default "spi1"
+
         config ESP_HOSTED_SPI_MAX_HZ
             int "Set the maximum spi frequency(Hz)"
             default 30000000
 
+        config ESP_HOSTED_SPI_CS_PIN
+            int "Set the SPI CS pin"
+            default -1
+
         config ESP_HOSTED_DATA_READY_PIN
             int "Set the data ready pin"
             default -1

+ 48 - 110
README.md

@@ -29,101 +29,33 @@ endmenu
 
 #### Configure ESP-Hosted
 - Use the `menuconfig` command in the env window
-- Select Open `Using esp-hosted form espressif` 
+- Select Open `Using esp-hosted for espressif` 
 ```
 → External Libraries
-     [*] Using esp-hosted form espressif  --->
+     [*] Using esp-hosted for espressif  --->
 ```
-- Enter `Using esp-hosted form espressif` menu to configure the pin and SPI bus:
+- Enter `Using esp-hosted for espressif` menu to configure the pin and SPI bus:
 ```
---- Using esp-hosted form espressif
+--- Using esp-hosted for espressif
 (8)   The priority of the esp-hosted thread
-(4096) The stack size of the esp-hosted thread
+(5120) The stack size of the esp-hosted thread
 (20)  The priority of the esp-hosted SPI thread
-(512) The stack size of the esp-hosted SPI thread
+(1024) The stack size of the esp-hosted SPI thread
 (2)   The size for esp-hosted SPI queue
-[*]   Initialize WiFi using the sample
-(spi1)  Set the spi bus name (NEW)
-(28)    Set the SPI CS pin
 (esp-hosted) Set the spi device name
-(25000000) Set the maximum spi frequency(Hz)
-(39)  Set the data ready pin
-(40)  Set the handshake pin
-(38)  Set the reset pin
+(spi1)  Set the spi bus name (NEW)
+(-1)    Set the SPI CS pin
+(30000000) Set the maximum spi frequency(Hz)
+(-1)  Set the data ready pin
+(-1)  Set the handshake pin
+(-1)  Set the reset pin
 [*]   Use thread initialization
 (2048)  The stack size of the init thread
 (20)    The priority of the init thread
 ```
-- If you do not use `sample` to initialize WiFi, copy `esp-hosted_port.c` in the `smaple` folder to the `board` folder for modification and add it to the project
-- Example of ART-PI(STM32H750):
-```
-/*
- * Copyright (c) 2006-2024, Evlers Developers
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date         Author      Notes
- * 2024-01-11   Evlers      first implementation
- */
-
-#include <rtthread.h>
-
-#if defined(RT_USING_ESP_HOSTED) && !defined(ESP_HOSTED_USING_SAMPLE)
-#include <rtdevice.h>
-#include <drv_spi.h>
-#include <board.h>
-
-#define ESP_HOSTED_SPI_BUS_NAME             "spi2"
-#define ESP_HOSTED_SPI_CS_PORT              GPIOI
-#define ESP_HOSTED_SPI_CS_PIN               GPIO_PIN_0
-
-extern int rt_hw_esp_wlan_init (void);
-
-static void esp_hosted_init (void *parameter)
-{
-    /* reset esp32 chip */
-    rt_pin_mode(ESP_HOSTED_RESET_PIN, PIN_MODE_OUTPUT);
-    rt_pin_write(ESP_HOSTED_RESET_PIN, PIN_LOW);
-    rt_thread_mdelay(50);
-    rt_pin_write(ESP_HOSTED_RESET_PIN, PIN_HIGH);
-    
-    /* stop spi transactions short time to avoid slave sync issues */
-	rt_thread_mdelay(50);
-
-    /* attach spi device */
-    rt_hw_spi_device_attach(ESP_HOSTED_SPI_BUS_NAME, ESP_HOSTED_SPI_DEVICE_NAME,
-							ESP_HOSTED_SPI_CS_PORT,
-							ESP_HOSTED_SPI_CS_PIN);
-
-    /* Initialize the esp-hosted */
-    rt_hw_esp_wlan_init();
-}
-
-int esp_spi_device_init (void)
-{
-#ifdef ESP_HOSTED_THREAD_INIT
-    /* Use thread initialization */
-    rt_thread_t init_thread = rt_thread_create("esp_init", esp_hosted_init, NULL, 
-                                                ESP_HOSTED_INIT_THREAD_STACK_SIZE,
-						ESP_HOSTED_INIT_THREAD_PRIORITY, 20);
-    RT_ASSERT(init_thread != NULL);
-    rt_thread_startup(init_thread);
-#else
-    /* Thread initialization is not used */
-    esp_hosted_init(NULL);
-#endif
-
-    return RT_EOK;
-}
-INIT_APP_EXPORT(esp_spi_device_init);
-
-
-#endif /* defined(RT_USING_ESP_HOSTED) && !defined(ESP_HOSTED_USING_SAMPLE) */
-```
 
-#### Hardware connections for ESP32
-| Function  | ESP32 Pin | ESP32-S2/S3 | ESP32-C2/C3/C6 |
+### Hardware connections for ESP32
+| Function  | ESP32 Pin | ESP32-S2/S3 | ESP32-C2/C3/C5/C6 |
 |-----------|-----------|-------------|----------------|
 | MISO      | IO19      | IO13        | IO2            |
 | CLK       | IO18      | IO12        | IO6            |
@@ -134,8 +66,10 @@ INIT_APP_EXPORT(esp_spi_device_init);
 | Data Ready| IO4       | IO4         | IO4            |
 | Reset ESP | EN        | RST         | RST            |
 
-#### Build esp32 firmware
-##### Set-up ESP-IDF
+If you are familiar with esp-idf, you can also try to modify the pins
+
+### Build ESP32 firmware
+#### Set-up ESP-IDF
 - Install the ESP-IDF using script
 ```sh
 $ cd esp/esp_driver
@@ -147,14 +81,14 @@ $ . ./esp-idf/export.sh
 # Optionally, You can add alias for this command in ~/.bashrc for later use
 ```
 
-##### Configure, Build & Flash ESP firmware
+#### Configure, Build & Flash ESP firmware
 - Set slave chipset environment
 ```
 $ cd network_adapter
 $ rm -rf sdkconfig build
 $ idf.py set-target <esp_chipset>
 ```
-where <esp_chipset> could be one from "esp32", "esp32s2", "esp32s3", "esp32c2", "esp32c3", "esp32c6"
+where <esp_chipset> could be one from "esp32", "esp32s2", "esp32s3", "esp32c2", "esp32c3", "esp32c5", "esp32c6"
 
 - Execute following command to configure the project
 ```sh
@@ -162,7 +96,7 @@ $ idf.py menuconfig
 ```
 - This will open project configuration window. To select SPI transport interface, navigate to `Example Configuration ->  Transport layer -> SPI interface -> select` and exit from menuconfig.
 
-:warning: Skip below step for ESP32-S2/S3/C2/C3/C6. Run for  ESP32 only.
+:warning: Skip below step for ESP32-S2/S3/C2/C3/C5/C6. Run for  ESP32 only.
 
 - If ESP32 slave, Change SPI controller to VSPI. Please navigate to `Example Configuration → SPI Configuration` and change value of `SPI controller to use` to `3`
 
@@ -177,7 +111,7 @@ $ idf.py -p <serial_port> build flash
 $ idf.py -p <serial_port> monitor
 ```
 
-#### Checking the Setup
+### Checking the Setup
 
 - Firmware log
 On successful flashing, you should see following entry in ESP log:
@@ -190,31 +124,34 @@ I (442) NETWORK_ADAPTER: *******************************************************
 
 - Host log
 you should see following entry in MCU log:
-```
+```shell
  \ | /
 - RT -     Thread Operating System
- / | \     5.0.0 build Jan  8 2024 16:11:56
+ / | \     5.0.2 build Dec 20 2024 10:02:05
  2006 - 2022 Copyright by RT-Thread team
-lwIP-2.0.3 initialized!
-[I/sal.skt] Socket Abstraction Layer initialize success.
-[I/esp.trans] Chip is: ESP32c3
-[I/esp.trans] Features supported are:
-[I/esp.trans]    * WLAN
-[I/esp.trans]    * BT/BLE
-[I/esp.trans]      - HCI over SPI
-[I/esp.trans]      - BLE only
-[I/esp.wlan] Register the wlan device.
-[I/WLAN.dev] wlan init success
-[I/WLAN.lwip] eth device init ok name:w0
-[I/WLAN.dev] wlan init success
-[I/WLAN.lwip] eth device init ok name:w1
+lwIP-2.1.2 initialized!
+[4] I/SFUD: Found a Winbond flash chip. Size is 16777216 bytes.
+[11] I/SFUD: norflash flash device initialized successfully.
+[17] I/SFUD: Probe SPI flash norflash by SPI device spi40 success.
 [I/FAL] RT-Thread Flash Abstraction Layer initialize success.
-[I/FAL] The FAL block device (root) created successfully
-[Flash] EasyFlash V4.1.0 is initialize success.
-[Flash] You can get the latest version on https://github.com/armink/EasyFlash .
-msh />[I/WLAN.mgnt] wifi connect success ssid:TP-LINK_86A9
-[I/WLAN.lwip] Got IP address : 192.168.0.105
-[I/ntp] Get local time from NTP server: Mon Jan  8 17:14:12 2024
+[47] I/sal.skt: Socket Abstraction Layer initialize success.
+[I/FAL] The FAL block device (filesystem) created successfully
+[238] I/SDIO: SD card capacity 31166976 KB.
+found part[0], begin: 16384, size: 29.740GB
+[258] I/filesystem: sd card mount to '/sdcard'
+[907] I/esp.netdev: Chip is: ESP32c3
+[911] I/esp.netdev: Features supported are:
+[917] I/esp.netdev:      * WLAN
+[922] I/esp.netdev:      * BT/BLE
+[926] I/esp.netdev:        - HCI over SPI
+[930] I/esp.netdev:        - BLE only
+[1934] I/WLAN.dev: wlan init success
+[1944] I/WLAN.lwip: eth device init ok name:w0
+[1949] I/WLAN.dev: wlan init success
+[1960] I/WLAN.lwip: eth device init ok name:w1
+msh />[10856] I/WLAN.mgnt: wifi connect success ssid:TP-LINK_86A9
+[11863] I/WLAN.lwip: Got IP address : 192.168.0.105
+[30173] I/ntp: Get local time from NTP server: Fri Dec 20 15:13:16 2024
 ```
 
 ### Supported Chip
@@ -223,10 +160,11 @@ msh />[I/WLAN.mgnt] wifi connect success ssid:TP-LINK_86A9
 |-----------|--------|-------|
 | ESP32     |   x    |   *   |
 | ESP32-C6  |   x    |   *   |
-| ESP32-S2  |   x    |   *   |
+| ESP32-C5  |   x    |   *   |
 | ESP32-C3  |   x    |   o   |
 | ESP32-C2  |   x    |   *   |
 | ESP32-S3  |   x    |   *   |
+| ESP32-S2  |   x    |   *   |
 
 'x' indicates no support<br>
 'o' indicates tested and supported<br>

+ 0 - 4
SConscript

@@ -48,10 +48,6 @@ path += [cwd + '/host/port/include']
 src += Glob('wlan/*.c')
 path += [cwd + '/wlan']
 
-# add sample source files
-if GetDepend(['ESP_HOSTED_USING_SAMPLE']):
-    src += Glob('sample/*.c')
-
 CPPDEFINES = ['']
 
 group = DefineGroup('esp-hosted', src, depend = ['RT_USING_ESP_HOSTED'], CPPPATH = path, CPPDEFINES = CPPDEFINES)

+ 60 - 60
common/include/adapter.h

@@ -21,100 +21,100 @@
 #define CTRL_EP_NAME_EVENT                        "ctrlEvnt"
 
 struct esp_payload_header {
-	uint8_t          if_type:4;
-	uint8_t          if_num:4;
-	uint8_t          flags;
-	uint16_t         len;
-	uint16_t         offset;
-	uint16_t         checksum;
-	uint16_t		 seq_num;
-	uint8_t          reserved2;
-	/* Position of union field has to always be last,
-	 * this is required for hci_pkt_type */
-	union {
-		uint8_t      reserved3;
-		uint8_t      hci_pkt_type;		/* Packet type for HCI interface */
-		uint8_t      priv_pkt_type;		/* Packet type for priv interface */
-	};
-	/* Do no add anything here */
+    uint8_t          if_type:4;
+    uint8_t          if_num:4;
+    uint8_t          flags;
+    uint16_t         len;
+    uint16_t         offset;
+    uint16_t         checksum;
+    uint16_t         seq_num;
+    uint8_t          reserved2;
+    /* Position of union field has to always be last,
+     * this is required for hci_pkt_type */
+    union {
+        uint8_t      reserved3;
+        uint8_t      hci_pkt_type;      /* Packet type for HCI interface */
+        uint8_t      priv_pkt_type;     /* Packet type for priv interface */
+    };
+    /* Do no add anything here */
 } __attribute__((packed));
 
 typedef enum {
-	ESP_STA_IF,
-	ESP_AP_IF,
-	ESP_SERIAL_IF,
-	ESP_HCI_IF,
-	ESP_PRIV_IF,
-	ESP_TEST_IF,
-	ESP_MAX_IF,
+    ESP_STA_IF,
+    ESP_AP_IF,
+    ESP_SERIAL_IF,
+    ESP_HCI_IF,
+    ESP_PRIV_IF,
+    ESP_TEST_IF,
+    ESP_MAX_IF,
 } ESP_INTERFACE_TYPE;
 
 typedef enum {
-	ESP_OPEN_DATA_PATH,
-	ESP_CLOSE_DATA_PATH,
-	ESP_RESET,
-	ESP_MAX_HOST_INTERRUPT,
+    ESP_OPEN_DATA_PATH,
+    ESP_CLOSE_DATA_PATH,
+    ESP_RESET,
+    ESP_MAX_HOST_INTERRUPT,
 } ESP_HOST_INTERRUPT;
 
 
 typedef enum {
-	ESP_WLAN_SDIO_SUPPORT = (1 << 0),
-	ESP_BT_UART_SUPPORT = (1 << 1),
-	ESP_BT_SDIO_SUPPORT = (1 << 2),
-	ESP_BLE_ONLY_SUPPORT = (1 << 3),
-	ESP_BR_EDR_ONLY_SUPPORT = (1 << 4),
-	ESP_WLAN_SPI_SUPPORT = (1 << 5),
-	ESP_BT_SPI_SUPPORT = (1 << 6),
-	ESP_CHECKSUM_ENABLED = (1 << 7),
+    ESP_WLAN_SDIO_SUPPORT = (1 << 0),
+    ESP_BT_UART_SUPPORT = (1 << 1),
+    ESP_BT_SDIO_SUPPORT = (1 << 2),
+    ESP_BLE_ONLY_SUPPORT = (1 << 3),
+    ESP_BR_EDR_ONLY_SUPPORT = (1 << 4),
+    ESP_WLAN_SPI_SUPPORT = (1 << 5),
+    ESP_BT_SPI_SUPPORT = (1 << 6),
+    ESP_CHECKSUM_ENABLED = (1 << 7),
 } ESP_CAPABILITIES;
 
 typedef enum {
-	ESP_TEST_RAW_TP = (1 << 0),
-	ESP_TEST_RAW_TP__ESP_TO_HOST = (1 << 1)
+    ESP_TEST_RAW_TP = (1 << 0),
+    ESP_TEST_RAW_TP__ESP_TO_HOST = (1 << 1)
 } ESP_RAW_TP_MEASUREMENT;
 
 typedef enum {
-	ESP_PACKET_TYPE_EVENT,
+    ESP_PACKET_TYPE_EVENT,
 } ESP_PRIV_PACKET_TYPE;
 
 typedef enum {
-	ESP_PRIV_EVENT_INIT,
+    ESP_PRIV_EVENT_INIT,
 } ESP_PRIV_EVENT_TYPE;
 
 typedef enum {
-	ESP_PRIV_CAPABILITY,
-	ESP_PRIV_SPI_CLK_MHZ,
-	ESP_PRIV_FIRMWARE_CHIP_ID,
-	ESP_PRIV_TEST_RAW_TP,
-	ESP_PRIV_FW_DATA,
+    ESP_PRIV_CAPABILITY,
+    ESP_PRIV_SPI_CLK_MHZ,
+    ESP_PRIV_FIRMWARE_CHIP_ID,
+    ESP_PRIV_TEST_RAW_TP,
+    ESP_PRIV_FW_DATA,
 } ESP_PRIV_TAG_TYPE;
 
 struct esp_priv_event {
-	uint8_t		event_type;
-	uint8_t		event_len;
-	uint8_t		event_data[0];
+    uint8_t     event_type;
+    uint8_t     event_len;
+    uint8_t     event_data[0];
 }__attribute__((packed));
 
 struct fw_version {
-	char		project_name[3];
-	uint8_t		major1;
-	uint8_t		major2;
-	uint8_t		minor;
-	uint8_t		revision_patch_1;
-	uint8_t		revision_patch_2;
+    char        project_name[3];
+    uint8_t     major1;
+    uint8_t     major2;
+    uint8_t     minor;
+    uint8_t     revision_patch_1;
+    uint8_t     revision_patch_2;
 }__attribute__((packed));
 
 static inline uint16_t compute_checksum(uint8_t *buf, uint16_t len)
 {
-	uint16_t checksum = 0;
-	uint16_t i = 0;
+    uint16_t checksum = 0;
+    uint16_t i = 0;
 
-	while(i < len) {
-		checksum += buf[i];
-		i++;
-	}
+    while(i < len) {
+        checksum += buf[i];
+        i++;
+    }
 
-	return checksum;
+    return checksum;
 }
 
 #endif

+ 10 - 10
common/include/esp_hosted_config.pb-c.h

@@ -70,7 +70,7 @@ typedef struct CtrlMsg CtrlMsg;
 /* --- enums --- */
 
 /*
- * Enums similar to ESP IDF 
+ * Enums similar to ESP IDF
  */
 typedef enum _CtrlVendorIEType {
   CTRL__VENDOR_IETYPE__Beacon = 0,
@@ -116,7 +116,7 @@ typedef enum _CtrlWifiSecProt {
     PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CTRL__WIFI_SEC_PROT)
 } CtrlWifiSecProt;
 /*
- * enums for Control path 
+ * enums for Control path
  */
 typedef enum _CtrlStatus {
   CTRL__STATUS__Connected = 0,
@@ -166,7 +166,7 @@ typedef enum _CtrlMsgId {
   CTRL_MSG_ID__Req_GetFwVersion = 123,
   /*
    * Add new control path command response before Req_Max
-   * and update Req_Max 
+   * and update Req_Max
    */
   CTRL_MSG_ID__Req_Max = 124,
   /*
@@ -198,7 +198,7 @@ typedef enum _CtrlMsgId {
   CTRL_MSG_ID__Resp_GetFwVersion = 223,
   /*
    * Add new control path command response before Resp_Max
-   * and update Resp_Max 
+   * and update Resp_Max
    */
   CTRL_MSG_ID__Resp_Max = 224,
   /*
@@ -213,7 +213,7 @@ typedef enum _CtrlMsgId {
   CTRL_MSG_ID__Event_StationConnectedToESPSoftAP = 306,
   /*
    * Add new control path command notification before Event_Max
-   * and update Event_Max 
+   * and update Event_Max
    */
   CTRL_MSG_ID__Event_Max = 307
     PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CTRL_MSG_ID)
@@ -228,7 +228,7 @@ typedef enum _HostedFeature {
 /* --- messages --- */
 
 /*
- * internal supporting structures for CtrlMsg 
+ * internal supporting structures for CtrlMsg
  */
 struct  ScanResult
 {
@@ -855,19 +855,19 @@ struct  CtrlMsg
 {
   ProtobufCMessage base;
   /*
-   * msg_type could be req, resp or Event 
+   * msg_type could be req, resp or Event
    */
   CtrlMsgType msg_type;
   /*
-   * msg id 
+   * msg id
    */
   CtrlMsgId msg_id;
   /*
-   * UID of message 
+   * UID of message
    */
   int32_t uid;
   /*
-   * Request/response type: sync or async 
+   * Request/response type: sync or async
    */
   uint32_t req_resp_type;
   CtrlMsg__PayloadCase payload_case;

+ 506 - 506
esp/esp_driver/network_adapter/main/app_main.c

@@ -94,102 +94,102 @@ static QueueHandle_t to_host_queue[MAX_PRIORITY_QUEUES] = {NULL};
 static protocomm_t *pc_pserial;
 
 static struct rx_data {
-	uint8_t valid;
-	uint16_t cur_seq_no;
-	int len;
-	uint8_t data[4096];
+    uint8_t valid;
+    uint16_t cur_seq_no;
+    int len;
+    uint8_t data[4096];
 } r;
 
 uint8_t ap_mac[MAC_LEN] = {0};
 
 static void print_firmware_version()
 {
-	ESP_LOGI(TAG, "*********************************************************************");
-	ESP_LOGI(TAG, "                ESP-Hosted Firmware version :: %s-%d.%d.%d.%d.%d",
-			PROJECT_NAME, PROJECT_VERSION_MAJOR_1, PROJECT_VERSION_MAJOR_2, PROJECT_VERSION_MINOR, PROJECT_REVISION_PATCH_1, PROJECT_REVISION_PATCH_2);
+    ESP_LOGI(TAG, "*********************************************************************");
+    ESP_LOGI(TAG, "                ESP-Hosted Firmware version :: %s-%d.%d.%d.%d.%d",
+            PROJECT_NAME, PROJECT_VERSION_MAJOR_1, PROJECT_VERSION_MAJOR_2, PROJECT_VERSION_MINOR, PROJECT_REVISION_PATCH_1, PROJECT_REVISION_PATCH_2);
 #if CONFIG_ESP_SPI_HOST_INTERFACE
   #if BLUETOOTH_UART
-	ESP_LOGI(TAG, "                Transport used :: SPI + UART                    ");
+    ESP_LOGI(TAG, "                Transport used :: SPI + UART                    ");
   #else
-	ESP_LOGI(TAG, "                Transport used :: SPI only                      ");
+    ESP_LOGI(TAG, "                Transport used :: SPI only                      ");
   #endif
 #else
   #if BLUETOOTH_UART
-	ESP_LOGI(TAG, "                Transport used :: SDIO + UART                   ");
+    ESP_LOGI(TAG, "                Transport used :: SDIO + UART                   ");
   #else
-	ESP_LOGI(TAG, "                Transport used :: SDIO only                     ");
+    ESP_LOGI(TAG, "                Transport used :: SDIO only                     ");
   #endif
 #endif
-	ESP_LOGI(TAG, "*********************************************************************");
+    ESP_LOGI(TAG, "*********************************************************************");
 }
 
 static uint8_t get_capabilities()
 {
-	uint8_t cap = 0;
+    uint8_t cap = 0;
 
-	ESP_LOGI(TAG, "Supported features are:");
+    ESP_LOGI(TAG, "Supported features are:");
 #if CONFIG_ESP_SPI_HOST_INTERFACE
-	ESP_LOGI(TAG, "- WLAN over SPI");
-	cap |= ESP_WLAN_SPI_SUPPORT;
+    ESP_LOGI(TAG, "- WLAN over SPI");
+    cap |= ESP_WLAN_SPI_SUPPORT;
 #else
-	ESP_LOGI(TAG, "- WLAN over SDIO");
-	cap |= ESP_WLAN_SDIO_SUPPORT;
+    ESP_LOGI(TAG, "- WLAN over SDIO");
+    cap |= ESP_WLAN_SDIO_SUPPORT;
 #endif
 
 #if CONFIG_ESP_SPI_CHECKSUM || CONFIG_ESP_SDIO_CHECKSUM
-	cap |= ESP_CHECKSUM_ENABLED;
+    cap |= ESP_CHECKSUM_ENABLED;
 #endif
 
 #ifdef CONFIG_BT_ENABLED
-	cap |= get_bluetooth_capabilities();
+    cap |= get_bluetooth_capabilities();
 #endif
-	ESP_LOGI(TAG, "capabilities: 0x%x", cap);
+    ESP_LOGI(TAG, "capabilities: 0x%x", cap);
 
-	return cap;
+    return cap;
 }
 
 static void esp_wifi_set_debug_log()
 {
-	/* set WiFi log level and module */
+    /* set WiFi log level and module */
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE
-	uint32_t g_wifi_log_level = WIFI_LOG_INFO;
-	uint32_t g_wifi_log_module = 0;
-	uint32_t g_wifi_log_submodule = 0;
+    uint32_t g_wifi_log_level = WIFI_LOG_INFO;
+    uint32_t g_wifi_log_module = 0;
+    uint32_t g_wifi_log_submodule = 0;
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_DEBUG
-	g_wifi_log_level = WIFI_LOG_DEBUG;
+    g_wifi_log_level = WIFI_LOG_DEBUG;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_VERBOSE
-	g_wifi_log_level = WIFI_LOG_VERBOSE;
+    g_wifi_log_level = WIFI_LOG_VERBOSE;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_ALL
-	g_wifi_log_module = WIFI_LOG_MODULE_ALL;
+    g_wifi_log_module = WIFI_LOG_MODULE_ALL;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_WIFI
-	g_wifi_log_module = WIFI_LOG_MODULE_WIFI;
+    g_wifi_log_module = WIFI_LOG_MODULE_WIFI;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_COEX
-	g_wifi_log_module = WIFI_LOG_MODULE_COEX;
+    g_wifi_log_module = WIFI_LOG_MODULE_COEX;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_MESH
-	g_wifi_log_module = WIFI_LOG_MODULE_MESH;
+    g_wifi_log_module = WIFI_LOG_MODULE_MESH;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL
-	g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_ALL;
+    g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_ALL;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_INIT
-	g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_INIT;
+    g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_INIT;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_IOCTL
-	g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_IOCTL;
+    g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_IOCTL;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_CONN
-	g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_CONN;
+    g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_CONN;
 #endif
 #if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_SCAN
-	g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_SCAN;
+    g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_SCAN;
 #endif
-	esp_wifi_internal_set_log_level(g_wifi_log_level);
-	esp_wifi_internal_set_log_mod(g_wifi_log_module, g_wifi_log_submodule, true);
+    esp_wifi_internal_set_log_level(g_wifi_log_level);
+    esp_wifi_internal_set_log_mod(g_wifi_log_module, g_wifi_log_submodule, true);
 
 #endif /* CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE*/
 
@@ -197,402 +197,402 @@ static void esp_wifi_set_debug_log()
 
 void esp_update_ap_mac(void)
 {
-	esp_err_t ret = ESP_OK;
-	char mac_str[BSSID_LENGTH] = "";
-
-	ret = esp_wifi_get_mac(ESP_IF_WIFI_AP, ap_mac);
-	ESP_LOGI(TAG,"Get softap mac address");
-	if (ret) {
-		ESP_LOGE(TAG,"Error in getting MAC of ESP softap %d", ret);
-	} else {
-		snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(ap_mac));
-		ESP_LOGI(TAG,"AP mac [%s] ", mac_str);
-	}
+    esp_err_t ret = ESP_OK;
+    char mac_str[BSSID_LENGTH] = "";
+
+    ret = esp_wifi_get_mac(ESP_IF_WIFI_AP, ap_mac);
+    ESP_LOGI(TAG,"Get softap mac address");
+    if (ret) {
+        ESP_LOGE(TAG,"Error in getting MAC of ESP softap %d", ret);
+    } else {
+        snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(ap_mac));
+        ESP_LOGI(TAG,"AP mac [%s] ", mac_str);
+    }
 }
 
 esp_err_t wlan_ap_rx_callback(void *buffer, uint16_t len, void *eb)
 {
-	interface_buffer_handle_t buf_handle = {0};
+    interface_buffer_handle_t buf_handle = {0};
 
-	if (!buffer || !eb || !datapath || ota_ongoing) {
-		if (eb) {
-			esp_wifi_internal_free_rx_buffer(eb);
-		}
-		return ESP_OK;
-	}
+    if (!buffer || !eb || !datapath || ota_ongoing) {
+        if (eb) {
+            esp_wifi_internal_free_rx_buffer(eb);
+        }
+        return ESP_OK;
+    }
 
-	buf_handle.if_type = ESP_AP_IF;
-	buf_handle.if_num = 0;
-	buf_handle.payload_len = len;
-	buf_handle.payload = buffer;
-	buf_handle.wlan_buf_handle = eb;
-	buf_handle.free_buf_handle = esp_wifi_internal_free_rx_buffer;
+    buf_handle.if_type = ESP_AP_IF;
+    buf_handle.if_num = 0;
+    buf_handle.payload_len = len;
+    buf_handle.payload = buffer;
+    buf_handle.wlan_buf_handle = eb;
+    buf_handle.free_buf_handle = esp_wifi_internal_free_rx_buffer;
 
-	if (send_to_host_queue(&buf_handle, PRIO_Q_OTHERS))
-		goto DONE;
+    if (send_to_host_queue(&buf_handle, PRIO_Q_OTHERS))
+        goto DONE;
 
-	return ESP_OK;
+    return ESP_OK;
 
 DONE:
-	esp_wifi_internal_free_rx_buffer(eb);
-	return ESP_OK;
+    esp_wifi_internal_free_rx_buffer(eb);
+    return ESP_OK;
 }
 
 esp_err_t wlan_sta_rx_callback(void *buffer, uint16_t len, void *eb)
 {
-	interface_buffer_handle_t buf_handle = {0};
+    interface_buffer_handle_t buf_handle = {0};
 
-	if (!buffer || !eb || !datapath || ota_ongoing) {
-		if (eb) {
-			esp_wifi_internal_free_rx_buffer(eb);
-		}
-		return ESP_OK;
-	}
+    if (!buffer || !eb || !datapath || ota_ongoing) {
+        if (eb) {
+            esp_wifi_internal_free_rx_buffer(eb);
+        }
+        return ESP_OK;
+    }
 
-	buf_handle.if_type = ESP_STA_IF;
-	buf_handle.if_num = 0;
-	buf_handle.payload_len = len;
-	buf_handle.payload = buffer;
-	buf_handle.wlan_buf_handle = eb;
-	buf_handle.free_buf_handle = esp_wifi_internal_free_rx_buffer;
+    buf_handle.if_type = ESP_STA_IF;
+    buf_handle.if_num = 0;
+    buf_handle.payload_len = len;
+    buf_handle.payload = buffer;
+    buf_handle.wlan_buf_handle = eb;
+    buf_handle.free_buf_handle = esp_wifi_internal_free_rx_buffer;
 
-	if (send_to_host_queue(&buf_handle, PRIO_Q_OTHERS))
-		goto DONE;
+    if (send_to_host_queue(&buf_handle, PRIO_Q_OTHERS))
+        goto DONE;
 
-	return ESP_OK;
+    return ESP_OK;
 
 DONE:
-	esp_wifi_internal_free_rx_buffer(eb);
-	return ESP_OK;
+    esp_wifi_internal_free_rx_buffer(eb);
+    return ESP_OK;
 }
 
 void process_tx_pkt(interface_buffer_handle_t *buf_handle)
 {
-	/* Check if data path is not yet open */
-	if (!datapath) {
-		/* Post processing */
-		if (buf_handle->free_buf_handle && buf_handle->priv_buffer_handle) {
-			buf_handle->free_buf_handle(buf_handle->priv_buffer_handle);
-			buf_handle->priv_buffer_handle = NULL;
-		}
-		ESP_LOGD(TAG, "Data path stopped");
-		usleep(100*1000);
-		return;
-	}
-	if (if_context && if_context->if_ops && if_context->if_ops->write) {
-		if_context->if_ops->write(if_handle, buf_handle);
-	}
-	/* Post processing */
-	if (buf_handle->free_buf_handle && buf_handle->priv_buffer_handle) {
-		buf_handle->free_buf_handle(buf_handle->priv_buffer_handle);
-		buf_handle->priv_buffer_handle = NULL;
-	}
+    /* Check if data path is not yet open */
+    if (!datapath) {
+        /* Post processing */
+        if (buf_handle->free_buf_handle && buf_handle->priv_buffer_handle) {
+            buf_handle->free_buf_handle(buf_handle->priv_buffer_handle);
+            buf_handle->priv_buffer_handle = NULL;
+        }
+        ESP_LOGD(TAG, "Data path stopped");
+        usleep(100*1000);
+        return;
+    }
+    if (if_context && if_context->if_ops && if_context->if_ops->write) {
+        if_context->if_ops->write(if_handle, buf_handle);
+    }
+    /* Post processing */
+    if (buf_handle->free_buf_handle && buf_handle->priv_buffer_handle) {
+        buf_handle->free_buf_handle(buf_handle->priv_buffer_handle);
+        buf_handle->priv_buffer_handle = NULL;
+    }
 }
 
 /* Send data to host */
 void send_task(void* pvParameters)
 {
-	uint8_t queue_type = 0;
-	interface_buffer_handle_t buf_handle = {0};
+    uint8_t queue_type = 0;
+    interface_buffer_handle_t buf_handle = {0};
 
-	while (1) {
+    while (1) {
 
-		if (!datapath) {
-			usleep(100*1000);
-			continue;
-		}
+        if (!datapath) {
+            usleep(100*1000);
+            continue;
+        }
 
-		if (xQueueReceive(meta_to_host_queue, &queue_type, portMAX_DELAY))
-			if (xQueueReceive(to_host_queue[queue_type], &buf_handle, portMAX_DELAY))
-				process_tx_pkt(&buf_handle);
-	}
+        if (xQueueReceive(meta_to_host_queue, &queue_type, portMAX_DELAY))
+            if (xQueueReceive(to_host_queue[queue_type], &buf_handle, portMAX_DELAY))
+                process_tx_pkt(&buf_handle);
+    }
 }
 
 void parse_protobuf_req(void)
 {
-	protocomm_pserial_data_ready(pc_pserial, r.data,
-		r.len, UNKNOWN_CTRL_MSG_ID);
+    protocomm_pserial_data_ready(pc_pserial, r.data,
+        r.len, UNKNOWN_CTRL_MSG_ID);
 }
 
 void send_event_to_host(int event_id)
 {
-	protocomm_pserial_data_ready(pc_pserial, NULL, 0, event_id);
+    protocomm_pserial_data_ready(pc_pserial, NULL, 0, event_id);
 }
 
 void send_event_data_to_host(int event_id, void *data, int size)
 {
-	protocomm_pserial_data_ready(pc_pserial, data, size, event_id);
+    protocomm_pserial_data_ready(pc_pserial, data, size, event_id);
 }
 
 void process_serial_rx_pkt(uint8_t *buf)
 {
-	struct esp_payload_header *header = NULL;
-	uint16_t payload_len = 0;
-	uint8_t *payload = NULL;
-	int rem_buff_size;
+    struct esp_payload_header *header = NULL;
+    uint16_t payload_len = 0;
+    uint8_t *payload = NULL;
+    int rem_buff_size;
 
-	header = (struct esp_payload_header *) buf;
-	payload_len = le16toh(header->len);
-	payload = buf + le16toh(header->offset);
-	rem_buff_size = sizeof(r.data) - r.len;
+    header = (struct esp_payload_header *) buf;
+    payload_len = le16toh(header->len);
+    payload = buf + le16toh(header->offset);
+    rem_buff_size = sizeof(r.data) - r.len;
 
 #if CONFIG_ESP_SERIAL_DEBUG
-	ESP_LOG_BUFFER_HEXDUMP(TAG_RX_S, payload, payload_len, ESP_LOG_INFO);
+    ESP_LOG_BUFFER_HEXDUMP(TAG_RX_S, payload, payload_len, ESP_LOG_INFO);
 #endif
 
-	while (r.valid)
-	{
-		ESP_LOGI(TAG,"More segment: %u curr seq: %u header seq: %u\n",
-			header->flags & MORE_FRAGMENT, r.cur_seq_no, header->seq_num);
-		vTaskDelay(10);
-	}
-
-	if (!r.len) {
-		/* New Buffer */
-		r.cur_seq_no = le16toh(header->seq_num);
-	}
-
-	if (header->seq_num != r.cur_seq_no) {
-		/* Sequence number mismatch */
-		r.valid = 1;
-		parse_protobuf_req();
-		return;
-	}
-
-	memcpy((r.data + r.len), payload, min(payload_len, rem_buff_size));
-	r.len += min(payload_len, rem_buff_size);
-
-	if (!(header->flags & MORE_FRAGMENT)) {
-		/* Received complete buffer */
-		r.valid = 1;
-		parse_protobuf_req();
-	}
+    while (r.valid)
+    {
+        ESP_LOGI(TAG,"More segment: %u curr seq: %u header seq: %u\n",
+            header->flags & MORE_FRAGMENT, r.cur_seq_no, header->seq_num);
+        vTaskDelay(10);
+    }
+
+    if (!r.len) {
+        /* New Buffer */
+        r.cur_seq_no = le16toh(header->seq_num);
+    }
+
+    if (header->seq_num != r.cur_seq_no) {
+        /* Sequence number mismatch */
+        r.valid = 1;
+        parse_protobuf_req();
+        return;
+    }
+
+    memcpy((r.data + r.len), payload, min(payload_len, rem_buff_size));
+    r.len += min(payload_len, rem_buff_size);
+
+    if (!(header->flags & MORE_FRAGMENT)) {
+        /* Received complete buffer */
+        r.valid = 1;
+        parse_protobuf_req();
+    }
 }
 
 void process_rx_pkt(interface_buffer_handle_t *buf_handle)
 {
-	struct esp_payload_header *header = NULL;
-	uint8_t *payload = NULL;
-	uint16_t payload_len = 0;
-	int ret = 0;
-
-	header = (struct esp_payload_header *) buf_handle->payload;
-	payload = buf_handle->payload + le16toh(header->offset);
-	payload_len = le16toh(header->len);
-
-	ESP_LOGV(TAG, "Rx pkt: type:%u\n",buf_handle->if_type);
-	ESP_LOG_BUFFER_HEXDUMP(TAG, payload, payload_len, ESP_LOG_VERBOSE);
-
-	if ((buf_handle->if_type == ESP_STA_IF) && station_connected) {
-		/* Forward data to wlan driver */
-		int retry = 6;
-
-		do {
-			ret = esp_wifi_internal_tx(ESP_IF_WIFI_STA, payload, payload_len);
-			retry--;
-
-			if (ret) {
-				if (retry % 3)
-					usleep(600);
-				else
-					vTaskDelay(1);
-			}
-
-		} while (ret && retry);
-		/*ESP_LOG_BUFFER_HEXDUMP("spi_sta_rx", payload, payload_len, ESP_LOG_INFO);*/
-	} else if (buf_handle->if_type == ESP_AP_IF && softap_started) {
-		int retry = 6;
-		/* Forward data to wlan driver */
-		do {
-			ret = esp_wifi_internal_tx(ESP_IF_WIFI_AP, payload, payload_len);
-			retry--;
-
-			if (ret) {
-				if (retry % 3)
-					usleep(600);
-				else
-					vTaskDelay(1);
-			}
-
-		} while (ret && retry);
-	} else if (buf_handle->if_type == ESP_SERIAL_IF) {
-		process_serial_rx_pkt(buf_handle->payload);
-	}
+    struct esp_payload_header *header = NULL;
+    uint8_t *payload = NULL;
+    uint16_t payload_len = 0;
+    int ret = 0;
+
+    header = (struct esp_payload_header *) buf_handle->payload;
+    payload = buf_handle->payload + le16toh(header->offset);
+    payload_len = le16toh(header->len);
+
+    ESP_LOGV(TAG, "Rx pkt: type:%u\n",buf_handle->if_type);
+    ESP_LOG_BUFFER_HEXDUMP(TAG, payload, payload_len, ESP_LOG_VERBOSE);
+
+    if ((buf_handle->if_type == ESP_STA_IF) && station_connected) {
+        /* Forward data to wlan driver */
+        int retry = 6;
+
+        do {
+            ret = esp_wifi_internal_tx(ESP_IF_WIFI_STA, payload, payload_len);
+            retry--;
+
+            if (ret) {
+                if (retry % 3)
+                    usleep(600);
+                else
+                    vTaskDelay(1);
+            }
+
+        } while (ret && retry);
+        /*ESP_LOG_BUFFER_HEXDUMP("spi_sta_rx", payload, payload_len, ESP_LOG_INFO);*/
+    } else if (buf_handle->if_type == ESP_AP_IF && softap_started) {
+        int retry = 6;
+        /* Forward data to wlan driver */
+        do {
+            ret = esp_wifi_internal_tx(ESP_IF_WIFI_AP, payload, payload_len);
+            retry--;
+
+            if (ret) {
+                if (retry % 3)
+                    usleep(600);
+                else
+                    vTaskDelay(1);
+            }
+
+        } while (ret && retry);
+    } else if (buf_handle->if_type == ESP_SERIAL_IF) {
+        process_serial_rx_pkt(buf_handle->payload);
+    }
 #if defined(CONFIG_BT_ENABLED) && BLUETOOTH_HCI
-	else if (buf_handle->if_type == ESP_HCI_IF) {
-		process_hci_rx_pkt(payload, payload_len);
-	}
+    else if (buf_handle->if_type == ESP_HCI_IF) {
+        process_hci_rx_pkt(payload, payload_len);
+    }
 #endif
 #if TEST_RAW_TP && TEST_RAW_TP__HOST_TO_ESP
-	else if (buf_handle->if_type == ESP_TEST_IF) {
-		debug_update_raw_tp_rx_count(payload_len);
-	}
+    else if (buf_handle->if_type == ESP_TEST_IF) {
+        debug_update_raw_tp_rx_count(payload_len);
+    }
 #endif
 
-	/* Free buffer handle */
-	if (buf_handle->free_buf_handle && buf_handle->priv_buffer_handle) {
-		buf_handle->free_buf_handle(buf_handle->priv_buffer_handle);
-		buf_handle->priv_buffer_handle = NULL;
-	}
+    /* Free buffer handle */
+    if (buf_handle->free_buf_handle && buf_handle->priv_buffer_handle) {
+        buf_handle->free_buf_handle(buf_handle->priv_buffer_handle);
+        buf_handle->priv_buffer_handle = NULL;
+    }
 }
 
 /* Get data from host */
 void recv_task(void* pvParameters)
 {
-	interface_buffer_handle_t buf_handle = {0};
-
-	for (;;) {
-
-		if (!datapath) {
-			/* Datapath is not enabled by host yet*/
-			usleep(100*1000);
-			continue;
-		}
-
-		/* receive data from transport layer */
-		if (if_context && if_context->if_ops && if_context->if_ops->read) {
-			int len = if_context->if_ops->read(if_handle, &buf_handle);
-			if (len <= 0) {
-				usleep(10*1000);
-				continue;
-			}
-		}
-
-		process_rx_pkt(&buf_handle);
-	}
+    interface_buffer_handle_t buf_handle = {0};
+
+    for (;;) {
+
+        if (!datapath) {
+            /* Datapath is not enabled by host yet*/
+            usleep(100*1000);
+            continue;
+        }
+
+        /* receive data from transport layer */
+        if (if_context && if_context->if_ops && if_context->if_ops->read) {
+            int len = if_context->if_ops->read(if_handle, &buf_handle);
+            if (len <= 0) {
+                usleep(10*1000);
+                continue;
+            }
+        }
+
+        process_rx_pkt(&buf_handle);
+    }
 }
 
 static ssize_t serial_read_data(uint8_t *data, ssize_t len)
 {
-	len = min(len, r.len);
-	if (r.valid) {
-		memcpy(data, r.data, len);
-		r.valid = 0;
-		r.len = 0;
-		r.cur_seq_no = 0;
-	} else {
-		ESP_LOGI(TAG,"No data to be read, len %d", len);
-	}
-	return len;
+    len = min(len, r.len);
+    if (r.valid) {
+        memcpy(data, r.data, len);
+        r.valid = 0;
+        r.len = 0;
+        r.cur_seq_no = 0;
+    } else {
+        ESP_LOGI(TAG,"No data to be read, len %d", len);
+    }
+    return len;
 }
 
 int send_to_host_queue(interface_buffer_handle_t *buf_handle, uint8_t queue_type)
 {
 
 #if 0
-	process_tx_pkt(buf_handle);
+    process_tx_pkt(buf_handle);
 #else
-	int ret = xQueueSend(to_host_queue[queue_type], buf_handle, portMAX_DELAY);
-	if (ret != pdTRUE) {
-		ESP_LOGE(TAG, "Failed to send buffer into queue[%u]\n",queue_type);
-		return ESP_FAIL;
-	}
-
-	if (queue_type == PRIO_Q_SERIAL)
-		ret = xQueueSendToFront(meta_to_host_queue, &queue_type, portMAX_DELAY);
-	else
-		ret = xQueueSend(meta_to_host_queue, &queue_type, portMAX_DELAY);
-
-	if (ret != pdTRUE) {
-		ESP_LOGE(TAG, "Failed to send buffer into meta queue[%u]\n",queue_type);
-		return ESP_FAIL;
-	}
+    int ret = xQueueSend(to_host_queue[queue_type], buf_handle, portMAX_DELAY);
+    if (ret != pdTRUE) {
+        ESP_LOGE(TAG, "Failed to send buffer into queue[%u]\n",queue_type);
+        return ESP_FAIL;
+    }
+
+    if (queue_type == PRIO_Q_SERIAL)
+        ret = xQueueSendToFront(meta_to_host_queue, &queue_type, portMAX_DELAY);
+    else
+        ret = xQueueSend(meta_to_host_queue, &queue_type, portMAX_DELAY);
+
+    if (ret != pdTRUE) {
+        ESP_LOGE(TAG, "Failed to send buffer into meta queue[%u]\n",queue_type);
+        return ESP_FAIL;
+    }
 #endif
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 static esp_err_t serial_write_data(uint8_t* data, ssize_t len)
 {
-	uint8_t *pos = data;
-	int32_t left_len = len;
-	int32_t frag_len = 0;
-	static uint16_t seq_num = 0;
-
-	do {
-		interface_buffer_handle_t buf_handle = {0};
-
-		seq_num++;
-
-		buf_handle.if_type = ESP_SERIAL_IF;
-		buf_handle.if_num = 0;
-		buf_handle.seq_num = seq_num;
-
-		if (left_len > ETH_DATA_LEN) {
-			frag_len = ETH_DATA_LEN;
-			buf_handle.flag = MORE_FRAGMENT;
-		} else {
-			frag_len = left_len;
-			buf_handle.flag = 0;
-			buf_handle.priv_buffer_handle = data;
-			buf_handle.free_buf_handle = free;
-		}
-
-		buf_handle.payload = pos;
-		buf_handle.payload_len = frag_len;
-
-		if (send_to_host_queue(&buf_handle, PRIO_Q_SERIAL)) {
-			if (data) {
-				free(data);
-				data = NULL;
-			}
-			return ESP_FAIL;
-		}
+    uint8_t *pos = data;
+    int32_t left_len = len;
+    int32_t frag_len = 0;
+    static uint16_t seq_num = 0;
+
+    do {
+        interface_buffer_handle_t buf_handle = {0};
+
+        seq_num++;
+
+        buf_handle.if_type = ESP_SERIAL_IF;
+        buf_handle.if_num = 0;
+        buf_handle.seq_num = seq_num;
+
+        if (left_len > ETH_DATA_LEN) {
+            frag_len = ETH_DATA_LEN;
+            buf_handle.flag = MORE_FRAGMENT;
+        } else {
+            frag_len = left_len;
+            buf_handle.flag = 0;
+            buf_handle.priv_buffer_handle = data;
+            buf_handle.free_buf_handle = free;
+        }
+
+        buf_handle.payload = pos;
+        buf_handle.payload_len = frag_len;
+
+        if (send_to_host_queue(&buf_handle, PRIO_Q_SERIAL)) {
+            if (data) {
+                free(data);
+                data = NULL;
+            }
+            return ESP_FAIL;
+        }
 
 #if CONFIG_ESP_SERIAL_DEBUG
-		ESP_LOG_BUFFER_HEXDUMP(TAG_TX_S, data, frag_len, ESP_LOG_INFO);
+        ESP_LOG_BUFFER_HEXDUMP(TAG_TX_S, data, frag_len, ESP_LOG_INFO);
 #endif
 
-		left_len -= frag_len;
-		pos += frag_len;
-	} while(left_len);
+        left_len -= frag_len;
+        pos += frag_len;
+    } while(left_len);
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 static esp_err_t initialise_wifi(void)
 {
-	wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
 
-	ESP_ERROR_CHECK(esp_event_loop_create_default());
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
 
-	ESP_ERROR_CHECK(esp_wifi_init(&cfg));
+    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
 
-	esp_wifi_set_debug_log();
+    esp_wifi_set_debug_log();
 
-	ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM) );
+    ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM) );
 
-	ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_NULL) );
+    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_NULL) );
 
-	ESP_ERROR_CHECK(esp_wifi_start());
+    ESP_ERROR_CHECK(esp_wifi_start());
 
-	return 0;
+    return 0;
 }
 
 int event_handler(uint8_t val)
 {
-	switch(val) {
-		case ESP_OPEN_DATA_PATH:
-			if (if_handle) {
-				if_handle->state = ACTIVE;
-				datapath = 1;
-				ESP_EARLY_LOGI(TAG, "Start Data Path");
-			} else {
-				ESP_EARLY_LOGI(TAG, "Failed to Start Data Path");
-			}
-			break;
-
-		case ESP_CLOSE_DATA_PATH:
-			datapath = 0;
-			if (if_handle) {
-				ESP_EARLY_LOGI(TAG, "Stop Data Path");
-				if_handle->state = DEACTIVE;
-			} else {
-				ESP_EARLY_LOGI(TAG, "Failed to Stop Data Path");
-			}
-			break;
-	}
-	return 0;
+    switch(val) {
+        case ESP_OPEN_DATA_PATH:
+            if (if_handle) {
+                if_handle->state = ACTIVE;
+                datapath = 1;
+                ESP_EARLY_LOGI(TAG, "Start Data Path");
+            } else {
+                ESP_EARLY_LOGI(TAG, "Failed to Start Data Path");
+            }
+            break;
+
+        case ESP_CLOSE_DATA_PATH:
+            datapath = 0;
+            if (if_handle) {
+                ESP_EARLY_LOGI(TAG, "Stop Data Path");
+                if_handle->state = DEACTIVE;
+            } else {
+                ESP_EARLY_LOGI(TAG, "Failed to Stop Data Path");
+            }
+            break;
+    }
+    return 0;
 }
 
 #ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
@@ -601,207 +601,207 @@ int event_handler(uint8_t val)
  */
 static esp_err_t print_real_time_stats(TickType_t xTicksToWait)
 {
-	TaskStatus_t *start_array = NULL, *end_array = NULL;
-	UBaseType_t start_array_size, end_array_size;
-	uint32_t start_run_time, end_run_time;
-	esp_err_t ret;
-
-	/* Allocate array to store current task states */
-	start_array_size = uxTaskGetNumberOfTasks() + ARRAY_SIZE_OFFSET;
-	start_array = malloc(sizeof(TaskStatus_t) * start_array_size);
-	if (start_array == NULL) {
-		ret = ESP_ERR_NO_MEM;
-		goto exit;
-	}
-	/* Get current task states */
-	start_array_size = uxTaskGetSystemState(start_array,
-			start_array_size, &start_run_time);
-	if (start_array_size == 0) {
-		ret = ESP_ERR_INVALID_SIZE;
-		goto exit;
-	}
-
-	vTaskDelay(xTicksToWait);
-
-	/* Allocate array to store tasks states post delay */
-	end_array_size = uxTaskGetNumberOfTasks() + ARRAY_SIZE_OFFSET;
-	end_array = malloc(sizeof(TaskStatus_t) * end_array_size);
-	if (end_array == NULL) {
-		ret = ESP_ERR_NO_MEM;
-		goto exit;
-	}
-	/* Get post delay task states */
-	end_array_size = uxTaskGetSystemState(end_array, end_array_size, &end_run_time);
-	if (end_array_size == 0) {
-		ret = ESP_ERR_INVALID_SIZE;
-		goto exit;
-	}
-
-	/* Calculate total_elapsed_time in units of run time stats clock period */
-	uint32_t total_elapsed_time = (end_run_time - start_run_time);
-	if (total_elapsed_time == 0) {
-		ret = ESP_ERR_INVALID_STATE;
-		goto exit;
-	}
-
-	ESP_LOGI(TAG,"| Task | Run Time | Percentage");
-	/* Match each task in start_array to those in the end_array */
-	for (int i = 0; i < start_array_size; i++) {
-		int k = -1;
-		for (int j = 0; j < end_array_size; j++) {
-			if (start_array[i].xHandle == end_array[j].xHandle) {
-				k = j;
-				/* Mark that task have been matched by overwriting their handles */
-				start_array[i].xHandle = NULL;
-				end_array[j].xHandle = NULL;
-				break;
-			}
-		}
-		/* Check if matching task found */
-		if (k >= 0) {
-			uint32_t task_elapsed_time = end_array[k].ulRunTimeCounter -
-				start_array[i].ulRunTimeCounter;
-			uint32_t percentage_time = (task_elapsed_time * 100UL) /
-				(total_elapsed_time * portNUM_PROCESSORS);
-			ESP_LOGI(TAG,"| %s | %d | %d%%", start_array[i].pcTaskName,
-					task_elapsed_time, percentage_time);
-		}
-	}
-
-	/* Print unmatched tasks */
-	for (int i = 0; i < start_array_size; i++) {
-		if (start_array[i].xHandle != NULL) {
-			ESP_LOGI(TAG,"| %s | Deleted", start_array[i].pcTaskName);
-		}
-	}
-	for (int i = 0; i < end_array_size; i++) {
-		if (end_array[i].xHandle != NULL) {
-			ESP_LOGI(TAG,"| %s | Created", end_array[i].pcTaskName);
-		}
-	}
-	ret = ESP_OK;
+    TaskStatus_t *start_array = NULL, *end_array = NULL;
+    UBaseType_t start_array_size, end_array_size;
+    uint32_t start_run_time, end_run_time;
+    esp_err_t ret;
+
+    /* Allocate array to store current task states */
+    start_array_size = uxTaskGetNumberOfTasks() + ARRAY_SIZE_OFFSET;
+    start_array = malloc(sizeof(TaskStatus_t) * start_array_size);
+    if (start_array == NULL) {
+        ret = ESP_ERR_NO_MEM;
+        goto exit;
+    }
+    /* Get current task states */
+    start_array_size = uxTaskGetSystemState(start_array,
+            start_array_size, &start_run_time);
+    if (start_array_size == 0) {
+        ret = ESP_ERR_INVALID_SIZE;
+        goto exit;
+    }
+
+    vTaskDelay(xTicksToWait);
+
+    /* Allocate array to store tasks states post delay */
+    end_array_size = uxTaskGetNumberOfTasks() + ARRAY_SIZE_OFFSET;
+    end_array = malloc(sizeof(TaskStatus_t) * end_array_size);
+    if (end_array == NULL) {
+        ret = ESP_ERR_NO_MEM;
+        goto exit;
+    }
+    /* Get post delay task states */
+    end_array_size = uxTaskGetSystemState(end_array, end_array_size, &end_run_time);
+    if (end_array_size == 0) {
+        ret = ESP_ERR_INVALID_SIZE;
+        goto exit;
+    }
+
+    /* Calculate total_elapsed_time in units of run time stats clock period */
+    uint32_t total_elapsed_time = (end_run_time - start_run_time);
+    if (total_elapsed_time == 0) {
+        ret = ESP_ERR_INVALID_STATE;
+        goto exit;
+    }
+
+    ESP_LOGI(TAG,"| Task | Run Time | Percentage");
+    /* Match each task in start_array to those in the end_array */
+    for (int i = 0; i < start_array_size; i++) {
+        int k = -1;
+        for (int j = 0; j < end_array_size; j++) {
+            if (start_array[i].xHandle == end_array[j].xHandle) {
+                k = j;
+                /* Mark that task have been matched by overwriting their handles */
+                start_array[i].xHandle = NULL;
+                end_array[j].xHandle = NULL;
+                break;
+            }
+        }
+        /* Check if matching task found */
+        if (k >= 0) {
+            uint32_t task_elapsed_time = end_array[k].ulRunTimeCounter -
+                start_array[i].ulRunTimeCounter;
+            uint32_t percentage_time = (task_elapsed_time * 100UL) /
+                (total_elapsed_time * portNUM_PROCESSORS);
+            ESP_LOGI(TAG,"| %s | %d | %d%%", start_array[i].pcTaskName,
+                    task_elapsed_time, percentage_time);
+        }
+    }
+
+    /* Print unmatched tasks */
+    for (int i = 0; i < start_array_size; i++) {
+        if (start_array[i].xHandle != NULL) {
+            ESP_LOGI(TAG,"| %s | Deleted", start_array[i].pcTaskName);
+        }
+    }
+    for (int i = 0; i < end_array_size; i++) {
+        if (end_array[i].xHandle != NULL) {
+            ESP_LOGI(TAG,"| %s | Created", end_array[i].pcTaskName);
+        }
+    }
+    ret = ESP_OK;
 
 exit:    /* Common return path */
-	if (start_array)
-		free(start_array);
-	if (end_array)
-		free(end_array);
-	return ret;
+    if (start_array)
+        free(start_array);
+    if (end_array)
+        free(end_array);
+    return ret;
 }
 
 void task_runtime_stats_task(void* pvParameters)
 {
-	while (1) {
-		ESP_LOGI(TAG,"\n\nGetting real time stats over %d ticks", STATS_TICKS);
-		if (print_real_time_stats(STATS_TICKS) == ESP_OK) {
-			ESP_LOGI(TAG,"Real time stats obtained");
-		} else {
-			ESP_LOGI(TAG,"Error getting real time stats");
-		}
-		vTaskDelay(pdMS_TO_TICKS(1000*2));
-	}
+    while (1) {
+        ESP_LOGI(TAG,"\n\nGetting real time stats over %d ticks", STATS_TICKS);
+        if (print_real_time_stats(STATS_TICKS) == ESP_OK) {
+            ESP_LOGI(TAG,"Real time stats obtained");
+        } else {
+            ESP_LOGI(TAG,"Error getting real time stats");
+        }
+        vTaskDelay(pdMS_TO_TICKS(1000*2));
+    }
 }
 #endif
 
 void app_main()
 {
-	esp_err_t ret;
-	uint8_t capa = 0;
-	uint8_t prio_q_idx = 0;
+    esp_err_t ret;
+    uint8_t capa = 0;
+    uint8_t prio_q_idx = 0;
 #ifdef CONFIG_BT_ENABLED
-	uint8_t mac[MAC_LEN] = {0};
+    uint8_t mac[MAC_LEN] = {0};
 #endif
-	print_firmware_version();
+    print_firmware_version();
 
-	capa = get_capabilities();
+    capa = get_capabilities();
 
-	/* Initialize NVS */
-	ret = nvs_flash_init();
+    /* Initialize NVS */
+    ret = nvs_flash_init();
 
-	if (ret == ESP_ERR_NVS_NO_FREE_PAGES ||
-	    ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
-		ESP_ERROR_CHECK(nvs_flash_erase());
-		ret = nvs_flash_init();
-	}
-	ESP_ERROR_CHECK( ret );
+    if (ret == ESP_ERR_NVS_NO_FREE_PAGES ||
+        ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
+        ESP_ERROR_CHECK(nvs_flash_erase());
+        ret = nvs_flash_init();
+    }
+    ESP_ERROR_CHECK( ret );
 
 #ifdef CONFIG_BT_ENABLED
-	initialise_bluetooth();
-
-	ret = esp_read_mac(mac, ESP_MAC_BT);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to read BT Mac addr\n");
-	} else {
-		ESP_LOGI(TAG, "ESP Bluetooth MAC addr: %2x:%2x:%2x:%2x:%2x:%2x",
-				mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-	}
+    initialise_bluetooth();
+
+    ret = esp_read_mac(mac, ESP_MAC_BT);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to read BT Mac addr\n");
+    } else {
+        ESP_LOGI(TAG, "ESP Bluetooth MAC addr: %2x:%2x:%2x:%2x:%2x:%2x",
+                mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+    }
 #endif
 
-	pc_pserial = protocomm_new();
-	if (pc_pserial == NULL) {
-		ESP_LOGE(TAG,"Failed to allocate memory for new instance of protocomm ");
-		return;
-	}
+    pc_pserial = protocomm_new();
+    if (pc_pserial == NULL) {
+        ESP_LOGE(TAG,"Failed to allocate memory for new instance of protocomm ");
+        return;
+    }
 
-	/* Endpoint for control command responses */
-	if (protocomm_add_endpoint(pc_pserial, CTRL_EP_NAME_RESP,
-				data_transfer_handler, NULL) != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to add enpoint");
-		return;
-	}
+    /* Endpoint for control command responses */
+    if (protocomm_add_endpoint(pc_pserial, CTRL_EP_NAME_RESP,
+                data_transfer_handler, NULL) != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to add enpoint");
+        return;
+    }
 
-	/* Endpoint for control notifications for events subscribed by user */
-	if (protocomm_add_endpoint(pc_pserial, CTRL_EP_NAME_EVENT,
-				ctrl_notify_handler, NULL) != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to add enpoint");
-		return;
-	}
+    /* Endpoint for control notifications for events subscribed by user */
+    if (protocomm_add_endpoint(pc_pserial, CTRL_EP_NAME_EVENT,
+                ctrl_notify_handler, NULL) != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to add enpoint");
+        return;
+    }
 
-	protocomm_pserial_start(pc_pserial, serial_write_data, serial_read_data);
+    protocomm_pserial_start(pc_pserial, serial_write_data, serial_read_data);
 
-	if_context = interface_insert_driver(event_handler);
+    if_context = interface_insert_driver(event_handler);
 
 #if CONFIG_ESP_SPI_HOST_INTERFACE
-	datapath = 1;
+    datapath = 1;
 #endif
 
-	if (!if_context || !if_context->if_ops) {
-		ESP_LOGE(TAG, "Failed to insert driver\n");
-		return;
-	}
-
-	if_handle = if_context->if_ops->init();
-
-	if (!if_handle) {
-		ESP_LOGE(TAG, "Failed to initialize driver\n");
-		return;
-	}
-
-	meta_to_host_queue = xQueueCreate(TO_HOST_QUEUE_SIZE*3, sizeof(uint8_t));
-	assert(meta_to_host_queue);
-	for (prio_q_idx=0; prio_q_idx<MAX_PRIORITY_QUEUES; prio_q_idx++) {
-		to_host_queue[prio_q_idx] = xQueueCreate(TO_HOST_QUEUE_SIZE,
-				sizeof(interface_buffer_handle_t));
-		assert(to_host_queue[prio_q_idx]);
-	}
-
-	assert(xTaskCreate(recv_task , "recv_task" ,
-			CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL ,
-			CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
-	assert(xTaskCreate(send_task , "send_task" ,
-			CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL ,
-			CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
-	create_debugging_tasks();
-
-	ESP_ERROR_CHECK(initialise_wifi());
-
-	while (!datapath) {
-		sleep(1);
-	}
-
-	/* send capabilities to host */
-	generate_startup_event(capa);
-	ESP_LOGI(TAG,"Initial set up done");
-
-	send_event_to_host(CTRL_MSG_ID__Event_ESPInit);
+    if (!if_context || !if_context->if_ops) {
+        ESP_LOGE(TAG, "Failed to insert driver\n");
+        return;
+    }
+
+    if_handle = if_context->if_ops->init();
+
+    if (!if_handle) {
+        ESP_LOGE(TAG, "Failed to initialize driver\n");
+        return;
+    }
+
+    meta_to_host_queue = xQueueCreate(TO_HOST_QUEUE_SIZE*3, sizeof(uint8_t));
+    assert(meta_to_host_queue);
+    for (prio_q_idx=0; prio_q_idx<MAX_PRIORITY_QUEUES; prio_q_idx++) {
+        to_host_queue[prio_q_idx] = xQueueCreate(TO_HOST_QUEUE_SIZE,
+                sizeof(interface_buffer_handle_t));
+        assert(to_host_queue[prio_q_idx]);
+    }
+
+    assert(xTaskCreate(recv_task , "recv_task" ,
+            CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL ,
+            CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
+    assert(xTaskCreate(send_task , "send_task" ,
+            CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL ,
+            CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
+    create_debugging_tasks();
+
+    ESP_ERROR_CHECK(initialise_wifi());
+
+    while (!datapath) {
+        sleep(1);
+    }
+
+    /* send capabilities to host */
+    generate_startup_event(capa);
+    ESP_LOGI(TAG,"Initial set up done");
+
+    send_event_to_host(CTRL_MSG_ID__Event_ESPInit);
 }

+ 2 - 2
esp/esp_driver/network_adapter/main/app_main.h

@@ -19,7 +19,7 @@
 
 #include "adapter.h"
 
-#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) 
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
   #include "esp_mac.h"
   #define ESP_TCPIP_INIT() esp_netif_init();
 #else
@@ -27,6 +27,6 @@
 #endif
 
 typedef struct {
-	interface_context_t *context;
+    interface_context_t *context;
 } adapter;
 #endif

+ 38 - 38
esp/esp_driver/network_adapter/main/interface.h

@@ -21,73 +21,73 @@
 #ifdef CONFIG_ESP_SDIO_HOST_INTERFACE
 
 #if defined(CONFIG_IDF_TARGET_ESP32)||defined(CONFIG_IDF_TARGET_ESP32C6)
-	#include "driver/sdio_slave.h"
+    #include "driver/sdio_slave.h"
 #else
-	#error "SDIO is not supported for this chipset"
+    #error "SDIO is not supported for this chipset"
 #endif
 
 #endif
 
 typedef enum {
-	LENGTH_1_BYTE  = 1,
-	LENGTH_2_BYTE  = 2,
-	LENGTH_3_BYTE  = 3,
-	LENGTH_4_BYTE  = 4,
+    LENGTH_1_BYTE  = 1,
+    LENGTH_2_BYTE  = 2,
+    LENGTH_3_BYTE  = 3,
+    LENGTH_4_BYTE  = 4,
 } byte_length;
 
 typedef void *wlan_buf_handle_t;
 
 typedef enum {
-	SDIO = 0,
-	SPI = 1,
+    SDIO = 0,
+    SPI = 1,
 } transport_layer;
 
 typedef enum {
-	DEINIT,
-	INIT,
-	ACTIVE,
-	DEACTIVE,
+    DEINIT,
+    INIT,
+    ACTIVE,
+    DEACTIVE,
 } INTERFACE_STATE;
 
 typedef struct {
-	union {
+    union {
 #ifdef CONFIG_ESP_SDIO_HOST_INTERFACE
-		sdio_slave_buf_handle_t sdio_buf_handle;
+        sdio_slave_buf_handle_t sdio_buf_handle;
 #endif
-		wlan_buf_handle_t	wlan_buf_handle;
-		void *priv_buffer_handle;
-	};
-	uint8_t if_type;
-	uint8_t if_num;
-	uint8_t *payload;
-	uint8_t flag;
-	uint16_t payload_len;
-	uint16_t seq_num;
+        wlan_buf_handle_t   wlan_buf_handle;
+        void *priv_buffer_handle;
+    };
+    uint8_t if_type;
+    uint8_t if_num;
+    uint8_t *payload;
+    uint8_t flag;
+    uint16_t payload_len;
+    uint16_t seq_num;
 
-	void (*free_buf_handle)(void *buf_handle);
+    void (*free_buf_handle)(void *buf_handle);
 } interface_buffer_handle_t;
 
 typedef struct {
-	/*
-	union {
-	} phy_context;
-	*/
-	INTERFACE_STATE state;
+    /*
+    union {
+    } phy_context;
+    */
+    INTERFACE_STATE state;
 }interface_handle_t;
 
 typedef struct {
-	interface_handle_t * (*init)(void);
-	int32_t (*write)(interface_handle_t *handle, interface_buffer_handle_t *buf_handle);
-	int (*read)(interface_handle_t *handle, interface_buffer_handle_t *buf_handle);
-	esp_err_t (*reset)(interface_handle_t *handle);
-	void (*deinit)(interface_handle_t *handle);
+    interface_handle_t * (*init)(void);
+    int32_t (*write)(interface_handle_t *handle, interface_buffer_handle_t *buf_handle);
+    int (*read)(interface_handle_t *handle, interface_buffer_handle_t *buf_handle);
+    esp_err_t (*reset)(interface_handle_t *handle);
+    void (*deinit)(interface_handle_t *handle);
 } if_ops_t;
 
 typedef struct {
-	transport_layer type;
-	void *priv;
-	if_ops_t *if_ops;
-	int (*event_handler)(uint8_t bitmap);
+    transport_layer type;
+    void *priv;
+    if_ops_t *if_ops;
+    int (*event_handler)(uint8_t bitmap);
 } interface_context_t;
 
 interface_context_t * interface_insert_driver(int (*callback)(uint8_t val));

+ 90 - 90
esp/esp_driver/network_adapter/main/mempool.c

@@ -23,139 +23,139 @@ const char *TAG = "HS_MP";
  * If NULL passed, will allocate from heap
  */
 struct hosted_mempool * hosted_mempool_create(void *pre_allocated_mem,
-		size_t pre_allocated_mem_size, size_t num_blocks, size_t block_size)
+        size_t pre_allocated_mem_size, size_t num_blocks, size_t block_size)
 {
 #ifdef CONFIG_ESP_CACHE_MALLOC
-	struct hosted_mempool *new = NULL;
-	struct os_mempool *pool = NULL;
-	uint8_t *heap = NULL;
-	char str[MEMPOOL_NAME_STR_SIZE] = {0};
-
-	if (!pre_allocated_mem) {
-		/* no pre-allocated mem, allocate new */
-		heap = (uint8_t *)CALLOC( MEMPOOL_ALIGNED(OS_MEMPOOL_BYTES(
-						num_blocks,block_size)), 1);
-		if (!heap) {
-			ESP_LOGE(TAG, "mempool create failed, no mem\n");
-			return NULL;
-		}
-	} else {
-		/* preallocated memory for mem pool */
-		heap = pre_allocated_mem;
-		if (pre_allocated_mem_size < num_blocks*block_size) {
-			ESP_LOGE(TAG, "mempool create failed, insufficient mem\n");
-			return NULL;
-		}
-
-		if (!IS_MEMPOOL_ALIGNED((unsigned long)pre_allocated_mem)) {
-			ESP_LOGE(TAG, "mempool create failed, mempool start addr unaligned\n");
-			return NULL;
-		}
-	}
-
-	new = (struct hosted_mempool*)CALLOC(1, sizeof(struct hosted_mempool));
-	pool = (struct os_mempool *)CALLOC(1, sizeof(struct os_mempool));
-
-	if(!new || !pool) {
-		goto free_buffs;
-	}
-
-	snprintf(str, MEMPOOL_NAME_STR_SIZE, "hosted_%p", pool);
-
-	if (os_mempool_init(pool, num_blocks, block_size, heap, str)) {
-		ESP_LOGE(TAG, "os_mempool_init failed\n");
-		goto free_buffs;
-	}
-
-	if (pre_allocated_mem)
-		new->static_heap = 1;
-
-	new->heap = heap;
-	new->pool = pool;
-	new->num_blocks = num_blocks;
-	new->block_size = block_size;
+    struct hosted_mempool *new = NULL;
+    struct os_mempool *pool = NULL;
+    uint8_t *heap = NULL;
+    char str[MEMPOOL_NAME_STR_SIZE] = {0};
+
+    if (!pre_allocated_mem) {
+        /* no pre-allocated mem, allocate new */
+        heap = (uint8_t *)CALLOC( MEMPOOL_ALIGNED(OS_MEMPOOL_BYTES(
+                        num_blocks,block_size)), 1);
+        if (!heap) {
+            ESP_LOGE(TAG, "mempool create failed, no mem\n");
+            return NULL;
+        }
+    } else {
+        /* preallocated memory for mem pool */
+        heap = pre_allocated_mem;
+        if (pre_allocated_mem_size < num_blocks*block_size) {
+            ESP_LOGE(TAG, "mempool create failed, insufficient mem\n");
+            return NULL;
+        }
+
+        if (!IS_MEMPOOL_ALIGNED((unsigned long)pre_allocated_mem)) {
+            ESP_LOGE(TAG, "mempool create failed, mempool start addr unaligned\n");
+            return NULL;
+        }
+    }
+
+    new = (struct hosted_mempool*)CALLOC(1, sizeof(struct hosted_mempool));
+    pool = (struct os_mempool *)CALLOC(1, sizeof(struct os_mempool));
+
+    if(!new || !pool) {
+        goto free_buffs;
+    }
+
+    snprintf(str, MEMPOOL_NAME_STR_SIZE, "hosted_%p", pool);
+
+    if (os_mempool_init(pool, num_blocks, block_size, heap, str)) {
+        ESP_LOGE(TAG, "os_mempool_init failed\n");
+        goto free_buffs;
+    }
+
+    if (pre_allocated_mem)
+        new->static_heap = 1;
+
+    new->heap = heap;
+    new->pool = pool;
+    new->num_blocks = num_blocks;
+    new->block_size = block_size;
 
 #if MEMPOOL_DEBUG
-	ESP_LOGI(MEM_TAG, "Create mempool %p with num_blk[%lu] blk_size:[%lu]", new->pool, new->num_blocks, new->block_size);
+    ESP_LOGI(MEM_TAG, "Create mempool %p with num_blk[%lu] blk_size:[%lu]", new->pool, new->num_blocks, new->block_size);
 #endif
 
-	return new;
+    return new;
 
 free_buffs:
-	FREE(new);
-	FREE(pool);
-	if (!pre_allocated_mem)
-		FREE(heap);
-	return NULL;
+    FREE(new);
+    FREE(pool);
+    if (!pre_allocated_mem)
+        FREE(heap);
+    return NULL;
 #else
-	return NULL;
+    return NULL;
 #endif
 }
 
 void hosted_mempool_destroy(struct hosted_mempool *mempool)
 {
 #ifdef CONFIG_ESP_CACHE_MALLOC
-	if (!mempool)
-		return;
+    if (!mempool)
+        return;
 #if MEMPOOL_DEBUG
-	ESP_LOGI(MEM_TAG, "Destroy mempool %p num_blk[%lu] blk_size:[%lu]", mempool->pool, mempool->num_blocks, mempool->block_size);
+    ESP_LOGI(MEM_TAG, "Destroy mempool %p num_blk[%lu] blk_size:[%lu]", mempool->pool, mempool->num_blocks, mempool->block_size);
 #endif
 
-	FREE(mempool->pool);
+    FREE(mempool->pool);
 
-	if (!mempool->static_heap)
-		FREE(mempool->heap);
+    if (!mempool->static_heap)
+        FREE(mempool->heap);
 
-	FREE(mempool);
+    FREE(mempool);
 #endif
 }
 
 void * hosted_mempool_alloc(struct hosted_mempool *mempool,
-		size_t nbytes, uint8_t need_memset)
+        size_t nbytes, uint8_t need_memset)
 {
-	void *mem = NULL;
+    void *mem = NULL;
 
 #ifdef CONFIG_ESP_CACHE_MALLOC
-	if (!mempool)
-		return NULL;
+    if (!mempool)
+        return NULL;
 
 #if MYNEWT_VAL(OS_MEMPOOL_CHECK)
-	assert(mempool->heap);
-	assert(mempool->pool);
-
-	if(nbytes > mempool->block_size) {
-		ESP_LOGE(TAG, "Exp alloc bytes[%u] > mempool block size[%u]\n",
-				nbytes, mempool->block_size);
-		return NULL;
-	}
+    assert(mempool->heap);
+    assert(mempool->pool);
+
+    if(nbytes > mempool->block_size) {
+        ESP_LOGE(TAG, "Exp alloc bytes[%u] > mempool block size[%u]\n",
+                nbytes, mempool->block_size);
+        return NULL;
+    }
 #endif
 
-	mem = os_memblock_get(mempool->pool);
+    mem = os_memblock_get(mempool->pool);
 #else
-	mem = MEM_ALLOC(MEMPOOL_ALIGNED(nbytes));
+    mem = MEM_ALLOC(MEMPOOL_ALIGNED(nbytes));
 #endif
-	if (mem && need_memset)
-		memset(mem, 0, nbytes);
+    if (mem && need_memset)
+        memset(mem, 0, nbytes);
 
-	return mem;
+    return mem;
 }
 
 int hosted_mempool_free(struct hosted_mempool *mempool, void *mem)
 {
-	if (!mem)
-		return 0;
+    if (!mem)
+        return 0;
 #ifdef CONFIG_ESP_CACHE_MALLOC
-	if (!mempool)
-		return MEMPOOL_FAIL;
+    if (!mempool)
+        return MEMPOOL_FAIL;
 
 #if MYNEWT_VAL(OS_MEMPOOL_CHECK)
-	assert(mempool->heap);
-	assert(mempool->pool);
+    assert(mempool->heap);
+    assert(mempool->pool);
 #endif
 
-	return os_memblock_put(mempool->pool, mem);
+    return os_memblock_put(mempool->pool, mem);
 #else
-	FREE(mem);
-	return 0;
+    FREE(mem);
+    return 0;
 #endif
 }

+ 11 - 11
esp/esp_driver/network_adapter/main/mempool.h

@@ -26,11 +26,11 @@
 #ifdef CONFIG_ESP_CACHE_MALLOC
 #include "mempool_ll.h"
 struct hosted_mempool {
-	struct os_mempool *pool;
-	uint8_t *heap;
-	uint8_t static_heap;
-	size_t num_blocks;
-	size_t block_size;
+    struct os_mempool *pool;
+    uint8_t *heap;
+    uint8_t static_heap;
+    size_t num_blocks;
+    size_t block_size;
 };
 #endif
 
@@ -46,10 +46,10 @@ struct hosted_mempool {
 #define CALLOC(x,y)                      calloc(x,y)
 #define MEM_ALLOC(x)                     heap_caps_malloc(x, MALLOC_CAP_DMA)
 #define FREE(x) do {                     \
-	if (x) {                             \
-		free(x);                         \
-		x = NULL;                        \
-	}                                    \
+    if (x) {                             \
+        free(x);                         \
+        x = NULL;                        \
+    }                                    \
 } while(0);
 
 #define MEMPOOL_NAME_STR_SIZE            32
@@ -71,10 +71,10 @@ struct hosted_mempool {
 
 
 struct hosted_mempool * hosted_mempool_create(void *pre_allocated_mem,
-		size_t pre_allocated_mem_size, size_t num_blocks, size_t block_size);
+        size_t pre_allocated_mem_size, size_t num_blocks, size_t block_size);
 void hosted_mempool_destroy(struct hosted_mempool *mempool);
 void * hosted_mempool_alloc(struct hosted_mempool *mempool,
-		size_t nbytes, uint8_t need_memset);
+        size_t nbytes, uint8_t need_memset);
 int hosted_mempool_free(struct hosted_mempool *mempool, void *mem);
 
 #endif

+ 228 - 228
esp/esp_driver/network_adapter/main/mempool_ll.c

@@ -40,26 +40,26 @@ static uint32_t os_mem_poison = 0xde7ec7ed;
 static void
 os_mempool_poison(void *start, int sz)
 {
-	int i;
-	char *p = start;
+    int i;
+    char *p = start;
 
-	for (i = sizeof(struct os_memblock); i < sz;
-			i = i + sizeof(os_mem_poison)) {
-		memcpy(p + i, &os_mem_poison, min(sizeof(os_mem_poison), sz - i));
-	}
+    for (i = sizeof(struct os_memblock); i < sz;
+            i = i + sizeof(os_mem_poison)) {
+        memcpy(p + i, &os_mem_poison, min(sizeof(os_mem_poison), sz - i));
+    }
 }
 
 static void
 os_mempool_poison_check(void *start, int sz)
 {
-	int i;
-	char *p = start;
-
-	for (i = sizeof(struct os_memblock); i < sz;
-			i = i + sizeof(os_mem_poison)) {
-		assert(!memcmp(p + i, &os_mem_poison,
-					min(sizeof(os_mem_poison), sz - i)));
-	}
+    int i;
+    char *p = start;
+
+    for (i = sizeof(struct os_memblock); i < sz;
+            i = i + sizeof(os_mem_poison)) {
+        assert(!memcmp(p + i, &os_mem_poison,
+                    min(sizeof(os_mem_poison), sz - i)));
+    }
 }
 #else
 #define os_mempool_poison(start, sz)
@@ -70,290 +70,290 @@ os_error_t
 os_mempool_init(struct os_mempool *mp, uint16_t blocks, uint32_t block_size,
                 void *membuf, const char *name)
 {
-	int true_block_size;
-	uint8_t *block_addr;
-	struct os_memblock *block_ptr;
-
-	/* Check for valid parameters */
-	if (!mp || (block_size == 0)) {
-		return OS_INVALID_PARM;
-	}
-
-	if ((!membuf) && (blocks != 0)) {
-		return OS_INVALID_PARM;
-	}
-	OS_INIT_CRITICAL();
-
-	if (membuf != NULL) {
-		/* Blocks need to be sized properly and memory buffer should be
-		 * aligned
-		 */
-		if (((uintptr_t)membuf & (OS_ALIGNMENT - 1)) != 0) {
-			return OS_MEM_NOT_ALIGNED;
-		}
-	}
-	true_block_size = OS_MEM_TRUE_BLOCK_SIZE(block_size);
-
-	/* Initialize the memory pool structure */
-	mp->mp_block_size = block_size;
-	mp->mp_num_free = blocks;
-	mp->mp_min_free = blocks;
-	mp->mp_flags = 0;
-	mp->mp_num_blocks = blocks;
-	mp->mp_membuf_addr = (uintptr_t)membuf;
-	mp->name = name;
-	os_mempool_poison(membuf, true_block_size);
-	SLIST_FIRST(mp) = membuf;
-
-	/* Chain the memory blocks to the free list */
-	block_addr = (uint8_t *)membuf;
-	block_ptr = (struct os_memblock *)block_addr;
-	while (blocks > 1) {
-		block_addr += true_block_size;
-		os_mempool_poison(block_addr, true_block_size);
-		SLIST_NEXT(block_ptr, mb_next) = (struct os_memblock *)block_addr;
-		block_ptr = (struct os_memblock *)block_addr;
-		--blocks;
-	}
-
-	/* Last one in the list should be NULL */
-	SLIST_NEXT(block_ptr, mb_next) = NULL;
-
-	STAILQ_INSERT_TAIL(&g_os_hosted_mempool_list, mp, mp_list);
-
-	return OS_OK;
+    int true_block_size;
+    uint8_t *block_addr;
+    struct os_memblock *block_ptr;
+
+    /* Check for valid parameters */
+    if (!mp || (block_size == 0)) {
+        return OS_INVALID_PARM;
+    }
+
+    if ((!membuf) && (blocks != 0)) {
+        return OS_INVALID_PARM;
+    }
+    OS_INIT_CRITICAL();
+
+    if (membuf != NULL) {
+        /* Blocks need to be sized properly and memory buffer should be
+         * aligned
+         */
+        if (((uintptr_t)membuf & (OS_ALIGNMENT - 1)) != 0) {
+            return OS_MEM_NOT_ALIGNED;
+        }
+    }
+    true_block_size = OS_MEM_TRUE_BLOCK_SIZE(block_size);
+
+    /* Initialize the memory pool structure */
+    mp->mp_block_size = block_size;
+    mp->mp_num_free = blocks;
+    mp->mp_min_free = blocks;
+    mp->mp_flags = 0;
+    mp->mp_num_blocks = blocks;
+    mp->mp_membuf_addr = (uintptr_t)membuf;
+    mp->name = name;
+    os_mempool_poison(membuf, true_block_size);
+    SLIST_FIRST(mp) = membuf;
+
+    /* Chain the memory blocks to the free list */
+    block_addr = (uint8_t *)membuf;
+    block_ptr = (struct os_memblock *)block_addr;
+    while (blocks > 1) {
+        block_addr += true_block_size;
+        os_mempool_poison(block_addr, true_block_size);
+        SLIST_NEXT(block_ptr, mb_next) = (struct os_memblock *)block_addr;
+        block_ptr = (struct os_memblock *)block_addr;
+        --blocks;
+    }
+
+    /* Last one in the list should be NULL */
+    SLIST_NEXT(block_ptr, mb_next) = NULL;
+
+    STAILQ_INSERT_TAIL(&g_os_hosted_mempool_list, mp, mp_list);
+
+    return OS_OK;
 }
 
 os_error_t
 os_mempool_ext_init(struct os_mempool_ext *mpe, uint16_t blocks,
                     uint32_t block_size, void *membuf, const char *name)
 {
-	int rc;
+    int rc;
 
-	rc = os_mempool_init(&mpe->mpe_mp, blocks, block_size, membuf, name);
-	if (rc != 0) {
-		return rc;
-	}
+    rc = os_mempool_init(&mpe->mpe_mp, blocks, block_size, membuf, name);
+    if (rc != 0) {
+        return rc;
+    }
 
-	mpe->mpe_mp.mp_flags = OS_MEMPOOL_F_EXT;
-	mpe->mpe_put_cb = NULL;
-	mpe->mpe_put_arg = NULL;
+    mpe->mpe_mp.mp_flags = OS_MEMPOOL_F_EXT;
+    mpe->mpe_put_cb = NULL;
+    mpe->mpe_put_arg = NULL;
 
-	return 0;
+    return 0;
 }
 
 os_error_t
 os_mempool_clear(struct os_mempool *mp)
 {
-	struct os_memblock *block_ptr;
-	int true_block_size;
-	uint8_t *block_addr;
-	uint16_t blocks;
-
-	if (!mp) {
-		return OS_INVALID_PARM;
-	}
-
-	true_block_size = OS_MEM_TRUE_BLOCK_SIZE(mp->mp_block_size);
-
-	/* cleanup the memory pool structure */
-	mp->mp_num_free = mp->mp_num_blocks;
-	mp->mp_min_free = mp->mp_num_blocks;
-	os_mempool_poison((void *)mp->mp_membuf_addr, true_block_size);
-	SLIST_FIRST(mp) = (void *)mp->mp_membuf_addr;
-
-	/* Chain the memory blocks to the free list */
-	block_addr = (uint8_t *)mp->mp_membuf_addr;
-	block_ptr = (struct os_memblock *)block_addr;
-	blocks = mp->mp_num_blocks;
-
-	while (blocks > 1) {
-		block_addr += true_block_size;
-		os_mempool_poison(block_addr, true_block_size);
-		SLIST_NEXT(block_ptr, mb_next) = (struct os_memblock *)block_addr;
-		block_ptr = (struct os_memblock *)block_addr;
-		--blocks;
-	}
-
-	/* Last one in the list should be NULL */
-	SLIST_NEXT(block_ptr, mb_next) = NULL;
-
-	return OS_OK;
+    struct os_memblock *block_ptr;
+    int true_block_size;
+    uint8_t *block_addr;
+    uint16_t blocks;
+
+    if (!mp) {
+        return OS_INVALID_PARM;
+    }
+
+    true_block_size = OS_MEM_TRUE_BLOCK_SIZE(mp->mp_block_size);
+
+    /* cleanup the memory pool structure */
+    mp->mp_num_free = mp->mp_num_blocks;
+    mp->mp_min_free = mp->mp_num_blocks;
+    os_mempool_poison((void *)mp->mp_membuf_addr, true_block_size);
+    SLIST_FIRST(mp) = (void *)mp->mp_membuf_addr;
+
+    /* Chain the memory blocks to the free list */
+    block_addr = (uint8_t *)mp->mp_membuf_addr;
+    block_ptr = (struct os_memblock *)block_addr;
+    blocks = mp->mp_num_blocks;
+
+    while (blocks > 1) {
+        block_addr += true_block_size;
+        os_mempool_poison(block_addr, true_block_size);
+        SLIST_NEXT(block_ptr, mb_next) = (struct os_memblock *)block_addr;
+        block_ptr = (struct os_memblock *)block_addr;
+        --blocks;
+    }
+
+    /* Last one in the list should be NULL */
+    SLIST_NEXT(block_ptr, mb_next) = NULL;
+
+    return OS_OK;
 }
 
 os_error_t
 os_mempool_ext_clear(struct os_mempool_ext *mpe)
 {
-	mpe->mpe_mp.mp_flags = 0;
-	mpe->mpe_put_cb = NULL;
-	mpe->mpe_put_arg = NULL;
+    mpe->mpe_mp.mp_flags = 0;
+    mpe->mpe_put_cb = NULL;
+    mpe->mpe_put_arg = NULL;
 
-	return os_mempool_clear(&mpe->mpe_mp);
+    return os_mempool_clear(&mpe->mpe_mp);
 }
 
 bool
 os_mempool_is_sane(const struct os_mempool *mp)
 {
-	struct os_memblock *block;
+    struct os_memblock *block;
 
-	/* Verify that each block in the free list belongs to the mempool. */
-	SLIST_FOREACH(block, mp, mb_next) {
-		if (!os_memblock_from(mp, block)) {
-			return false;
-		}
-		os_mempool_poison_check(block, OS_MEMPOOL_TRUE_BLOCK_SIZE(mp));
-	}
+    /* Verify that each block in the free list belongs to the mempool. */
+    SLIST_FOREACH(block, mp, mb_next) {
+        if (!os_memblock_from(mp, block)) {
+            return false;
+        }
+        os_mempool_poison_check(block, OS_MEMPOOL_TRUE_BLOCK_SIZE(mp));
+    }
 
-	return true;
+    return true;
 }
 
 int
 os_memblock_from(const struct os_mempool *mp, const void *block_addr)
 {
-	uintptr_t true_block_size;
-	uintptr_t baddr_ptr;
-	uintptr_t end;
+    uintptr_t true_block_size;
+    uintptr_t baddr_ptr;
+    uintptr_t end;
 
-	_Static_assert(sizeof block_addr == sizeof baddr_ptr,
-			"Pointer to void must be native word size.");
+    _Static_assert(sizeof block_addr == sizeof baddr_ptr,
+            "Pointer to void must be native word size.");
 
-	baddr_ptr = (uintptr_t)block_addr;
-	true_block_size = OS_MEMPOOL_TRUE_BLOCK_SIZE(mp);
-	end = mp->mp_membuf_addr + (mp->mp_num_blocks * true_block_size);
+    baddr_ptr = (uintptr_t)block_addr;
+    true_block_size = OS_MEMPOOL_TRUE_BLOCK_SIZE(mp);
+    end = mp->mp_membuf_addr + (mp->mp_num_blocks * true_block_size);
 
-	/* Check that the block is in the memory buffer range. */
-	if ((baddr_ptr < mp->mp_membuf_addr) || (baddr_ptr >= end)) {
-		return 0;
-	}
+    /* Check that the block is in the memory buffer range. */
+    if ((baddr_ptr < mp->mp_membuf_addr) || (baddr_ptr >= end)) {
+        return 0;
+    }
 
-	/* All freed blocks should be on true block size boundaries! */
-	if (((baddr_ptr - mp->mp_membuf_addr) % true_block_size) != 0) {
-		return 0;
-	}
+    /* All freed blocks should be on true block size boundaries! */
+    if (((baddr_ptr - mp->mp_membuf_addr) % true_block_size) != 0) {
+        return 0;
+    }
 
-	return 1;
+    return 1;
 }
 
 void *
 os_memblock_get(struct os_mempool *mp)
 {
-	struct os_memblock *block;
-
-	/* Check to make sure they passed in a memory pool (or something) */
-	block = NULL;
-	if (mp) {
-		OS_ENTER_CRITICAL();
-		/* Check for any free */
-		if (mp->mp_num_free) {
-			/* Get a free block */
-			block = SLIST_FIRST(mp);
-
-			/* Set new free list head */
-			SLIST_FIRST(mp) = SLIST_NEXT(block, mb_next);
-
-			/* Decrement number free by 1 */
-			mp->mp_num_free--;
-			if (mp->mp_min_free > mp->mp_num_free) {
-				mp->mp_min_free = mp->mp_num_free;
-			}
-		}
-		OS_EXIT_CRITICAL();
-
-		if (block) {
-			os_mempool_poison_check(block, OS_MEMPOOL_TRUE_BLOCK_SIZE(mp));
-		}
-	}
-
-	return (void *)block;
+    struct os_memblock *block;
+
+    /* Check to make sure they passed in a memory pool (or something) */
+    block = NULL;
+    if (mp) {
+        OS_ENTER_CRITICAL();
+        /* Check for any free */
+        if (mp->mp_num_free) {
+            /* Get a free block */
+            block = SLIST_FIRST(mp);
+
+            /* Set new free list head */
+            SLIST_FIRST(mp) = SLIST_NEXT(block, mb_next);
+
+            /* Decrement number free by 1 */
+            mp->mp_num_free--;
+            if (mp->mp_min_free > mp->mp_num_free) {
+                mp->mp_min_free = mp->mp_num_free;
+            }
+        }
+        OS_EXIT_CRITICAL();
+
+        if (block) {
+            os_mempool_poison_check(block, OS_MEMPOOL_TRUE_BLOCK_SIZE(mp));
+        }
+    }
+
+    return (void *)block;
 }
 
 os_error_t
 os_memblock_put_from_cb(struct os_mempool *mp, void *block_addr)
 {
-	struct os_memblock *block;
+    struct os_memblock *block;
 
-	os_mempool_poison(block_addr, OS_MEMPOOL_TRUE_BLOCK_SIZE(mp));
+    os_mempool_poison(block_addr, OS_MEMPOOL_TRUE_BLOCK_SIZE(mp));
 
-	block = (struct os_memblock *)block_addr;
-	OS_ENTER_CRITICAL();
+    block = (struct os_memblock *)block_addr;
+    OS_ENTER_CRITICAL();
 
-	/* Chain current free list pointer to this block; make this block head */
-	SLIST_NEXT(block, mb_next) = SLIST_FIRST(mp);
-	SLIST_FIRST(mp) = block;
+    /* Chain current free list pointer to this block; make this block head */
+    SLIST_NEXT(block, mb_next) = SLIST_FIRST(mp);
+    SLIST_FIRST(mp) = block;
 
-	/* XXX: Should we check that the number free <= number blocks? */
-	/* Increment number free */
-	mp->mp_num_free++;
+    /* XXX: Should we check that the number free <= number blocks? */
+    /* Increment number free */
+    mp->mp_num_free++;
 
-	OS_EXIT_CRITICAL();
+    OS_EXIT_CRITICAL();
 
-	return OS_OK;
+    return OS_OK;
 }
 
 os_error_t
 os_memblock_put(struct os_mempool *mp, void *block_addr)
 {
-	struct os_mempool_ext *mpe;
-	int rc;
+    struct os_mempool_ext *mpe;
+    int rc;
 #if MYNEWT_VAL(OS_MEMPOOL_CHECK)
-	struct os_memblock *block;
+    struct os_memblock *block;
 #endif
 
-	/* Make sure parameters are valid */
-	if ((mp == NULL) || (block_addr == NULL)) {
-		return OS_INVALID_PARM;
-	}
+    /* Make sure parameters are valid */
+    if ((mp == NULL) || (block_addr == NULL)) {
+        return OS_INVALID_PARM;
+    }
 
 #if MYNEWT_VAL(OS_MEMPOOL_CHECK)
-	/* Check that the block we are freeing is a valid block! */
-	assert(os_memblock_from(mp, block_addr));
-
-	/*
-	 * Check for duplicate free.
-	 */
-	SLIST_FOREACH(block, mp, mb_next) {
-		assert(block != (struct os_memblock *)block_addr);
-	}
+    /* Check that the block we are freeing is a valid block! */
+    assert(os_memblock_from(mp, block_addr));
+
+    /*
+     * Check for duplicate free.
+     */
+    SLIST_FOREACH(block, mp, mb_next) {
+        assert(block != (struct os_memblock *)block_addr);
+    }
 #endif
 
-	/* If this is an extended mempool with a put callback, call the callback
-	 * instead of freeing the block directly.
-	 */
-	if (mp->mp_flags & OS_MEMPOOL_F_EXT) {
-		mpe = (struct os_mempool_ext *)mp;
-		if (mpe->mpe_put_cb != NULL) {
-			rc = mpe->mpe_put_cb(mpe, block_addr, mpe->mpe_put_arg);
-			return rc;
-		}
-	}
-
-	/* No callback; free the block. */
-	return os_memblock_put_from_cb(mp, block_addr);
+    /* If this is an extended mempool with a put callback, call the callback
+     * instead of freeing the block directly.
+     */
+    if (mp->mp_flags & OS_MEMPOOL_F_EXT) {
+        mpe = (struct os_mempool_ext *)mp;
+        if (mpe->mpe_put_cb != NULL) {
+            rc = mpe->mpe_put_cb(mpe, block_addr, mpe->mpe_put_arg);
+            return rc;
+        }
+    }
+
+    /* No callback; free the block. */
+    return os_memblock_put_from_cb(mp, block_addr);
 }
 
 struct os_mempool *
 os_mempool_info_get_next(struct os_mempool *mp, struct os_mempool_info *omi)
 {
-	struct os_mempool *cur;
-
-	if (mp == NULL) {
-		cur = STAILQ_FIRST(&g_os_hosted_mempool_list);
-	} else {
-		cur = STAILQ_NEXT(mp, mp_list);
-	}
-
-	if (cur == NULL) {
-		return (NULL);
-	}
-
-	omi->omi_block_size = cur->mp_block_size;
-	omi->omi_num_blocks = cur->mp_num_blocks;
-	omi->omi_num_free = cur->mp_num_free;
-	omi->omi_min_free = cur->mp_min_free;
-	strncpy(omi->omi_name, cur->name, sizeof(omi->omi_name) - 1);
-	omi->omi_name[sizeof(omi->omi_name) - 1] = '\0';
-
-	return (cur);
+    struct os_mempool *cur;
+
+    if (mp == NULL) {
+        cur = STAILQ_FIRST(&g_os_hosted_mempool_list);
+    } else {
+        cur = STAILQ_NEXT(mp, mp_list);
+    }
+
+    if (cur == NULL) {
+        return (NULL);
+    }
+
+    omi->omi_block_size = cur->mp_block_size;
+    omi->omi_num_blocks = cur->mp_num_blocks;
+    omi->omi_num_free = cur->mp_num_free;
+    omi->omi_min_free = cur->mp_min_free;
+    strncpy(omi->omi_name, cur->name, sizeof(omi->omi_name) - 1);
+    omi->omi_name[sizeof(omi->omi_name) - 1] = '\0';
+
+    return (cur);
 }
 
 

+ 255 - 255
esp/esp_driver/network_adapter/main/protocomm_pserial.c

@@ -38,308 +38,308 @@ static const char TAG[] = "protocomm_pserial";
 #define PROTO_PSER_TLV_T_DATA         2
 
 struct pserial_config {
-	pserial_xmit    xmit;
-	pserial_recv    recv;
-	QUEUE_HANDLE    req_queue;
+    pserial_xmit    xmit;
+    pserial_recv    recv;
+    QUEUE_HANDLE    req_queue;
 };
 
 typedef struct {
-	int len;
-	uint8_t *data;
-	int msg_id;
+    int len;
+    uint8_t *data;
+    int msg_id;
 } serial_arg_t;
 
 static esp_err_t parse_tlv(uint8_t **buf, size_t *total_len,
-		int *type, size_t *len, uint8_t **ptr)
+        int *type, size_t *len, uint8_t **ptr)
 {
-	uint8_t *b = *buf;
-	uint16_t *out_len = NULL;
-
-	if (*total_len == 0) {
-		return ESP_FAIL;
-	}
-
-	*type = b[0];
-	out_len = (uint16_t *)(b + 1);
-	*len = *out_len;
-	*ptr = (uint8_t *) (b + 3);
-	/*printf("*len %d \n", *len); */
-	*total_len -= (*len + 1 + 2);
-	*buf = b + 1 + 2 + (*len);
-	return ESP_OK;
+    uint8_t *b = *buf;
+    uint16_t *out_len = NULL;
+
+    if (*total_len == 0) {
+        return ESP_FAIL;
+    }
+
+    *type = b[0];
+    out_len = (uint16_t *)(b + 1);
+    *len = *out_len;
+    *ptr = (uint8_t *) (b + 3);
+    /*printf("*len %d \n", *len); */
+    *total_len -= (*len + 1 + 2);
+    *buf = b + 1 + 2 + (*len);
+    return ESP_OK;
 }
 
 static esp_err_t compose_tlv(char *epname, uint8_t **out, size_t *outlen)
 {
-	uint16_t len = 0;
-	uint16_t ep_len = strlen(epname);
-	/*
-	 * TLV (Type - Length - Value) structure is as follows:
-	 * --------------------------------------------------------------------------------------------
-	 *  Endpoint Type | Endpoint Length | Endpoint Value  | Data Type | Data Length | Data Value  |
-	 * --------------------------------------------------------------------------------------------
-	 *
-	 *  Bytes used per field as follows:
-	 * --------------------------------------------------------------------------------------------
-	 *       1        |        2        | Endpoint length |     1     |      2      | Data length |
-	 * --------------------------------------------------------------------------------------------
-	 */
-	uint32_t buf_len = SIZE_OF_TYPE + SIZE_OF_LENGTH +
-		ep_len + SIZE_OF_TYPE + SIZE_OF_LENGTH + *outlen;
-	uint8_t *buf = (uint8_t *)calloc(1, buf_len);
-	if (buf == NULL) {
-		ESP_LOGE(TAG,"%s Failed to allocate memory", __func__);
-		return ESP_FAIL;
-	}
-	buf[len] = PROTO_PSER_TLV_T_EPNAME;
-	len++;
-	buf[len] = (ep_len & 0xFF);
-	len++;
-	buf[len] = ((ep_len >> 8) & 0xFF);
-	len++;
-	memcpy(&buf[len], epname, strlen(epname));
-	len = len + strlen(epname) ;
-	buf[len] = PROTO_PSER_TLV_T_DATA;
-	len++;
-	buf[len] = (*outlen & 0xFF);
-	len++;
-	buf[len] = ((*outlen >> 8) & 0xFF);
-	len++;
-	buf_len = len + *outlen;
-	memcpy(&buf[len], (*out), *outlen);
-	free(*out);
-	*out = buf;
-	*outlen = buf_len;
-	return ESP_OK;
+    uint16_t len = 0;
+    uint16_t ep_len = strlen(epname);
+    /*
+     * TLV (Type - Length - Value) structure is as follows:
+     * --------------------------------------------------------------------------------------------
+     *  Endpoint Type | Endpoint Length | Endpoint Value  | Data Type | Data Length | Data Value  |
+     * --------------------------------------------------------------------------------------------
+     *
+     *  Bytes used per field as follows:
+     * --------------------------------------------------------------------------------------------
+     *       1        |        2        | Endpoint length |     1     |      2      | Data length |
+     * --------------------------------------------------------------------------------------------
+     */
+    uint32_t buf_len = SIZE_OF_TYPE + SIZE_OF_LENGTH +
+        ep_len + SIZE_OF_TYPE + SIZE_OF_LENGTH + *outlen;
+    uint8_t *buf = (uint8_t *)calloc(1, buf_len);
+    if (buf == NULL) {
+        ESP_LOGE(TAG,"%s Failed to allocate memory", __func__);
+        return ESP_FAIL;
+    }
+    buf[len] = PROTO_PSER_TLV_T_EPNAME;
+    len++;
+    buf[len] = (ep_len & 0xFF);
+    len++;
+    buf[len] = ((ep_len >> 8) & 0xFF);
+    len++;
+    memcpy(&buf[len], epname, strlen(epname));
+    len = len + strlen(epname) ;
+    buf[len] = PROTO_PSER_TLV_T_DATA;
+    len++;
+    buf[len] = (*outlen & 0xFF);
+    len++;
+    buf[len] = ((*outlen >> 8) & 0xFF);
+    len++;
+    buf_len = len + *outlen;
+    memcpy(&buf[len], (*out), *outlen);
+    free(*out);
+    *out = buf;
+    *outlen = buf_len;
+    return ESP_OK;
 }
 
 static esp_err_t protocomm_pserial_ctrl_req_handler(protocomm_t *pc,
-		uint8_t *in, size_t in_len)
+        uint8_t *in, size_t in_len)
 {
-	uint8_t *buf = in;
-	size_t total_len = 0, len = 0;
-	int type = 0, ret = 0;
-	uint8_t *ptr = NULL;
-
-	char epname[EPNAME_MAX] = {0};
-	uint8_t *data = NULL;
-	size_t data_len = 0;
-
-	uint8_t *out = NULL;
-	size_t outlen = 0;
-	struct pserial_config *pserial_cfg = NULL;
-
-	total_len = in_len;
-
-	while (parse_tlv(&buf, &total_len, &type, &len, &ptr) == 0) {
-		/*ESP_LOGI(TAG, "Parsed type %d len %d", type, len); */
-		switch(type) {
-			case PROTO_PSER_TLV_T_EPNAME:
-				if (len >= EPNAME_MAX - 1) {
-					ESP_LOGE(TAG, "EP Name bigger than supported");
-					return ESP_FAIL;
-				}
-				memcpy(epname, ptr, len);
-				/*ESP_LOGI(TAG, "Found ep %s", epname); */
-				break;
-			case PROTO_PSER_TLV_T_DATA:
-				data = ptr;
-				data_len = len;
-				break;
-			default:
-				ESP_LOGE(TAG, "Invalid type found in the packet");
-				return ESP_FAIL;
-		}
-	}
-
-	if (data == NULL || data_len == 0 || strlen(epname) == 0) {
-		ESP_LOGE(TAG, "TLV components not complete for parsing");
-		return ESP_FAIL;
-	}
-	ret = protocomm_req_handle(pc, epname, 0, data,
-			data_len, &out, (ssize_t *) &outlen);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Error in handling protocomm request %d", ret);
-		return ESP_FAIL;
-	}
-
-	pserial_cfg = pc->priv;
-	ret = compose_tlv(CTRL_EP_NAME_RESP, &out, &outlen);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to compose tlv");
-		return ESP_FAIL;
-	}
-
-	/*ESP_LOG_BUFFER_HEXDUMP("serial_tx", out, outlen<16?outlen:16, ESP_LOG_INFO); */
-	ret = (pserial_cfg->xmit)(out, (ssize_t) outlen);
-
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to transmit data");
-		return ESP_FAIL;
-	}
-	return ESP_OK;
+    uint8_t *buf = in;
+    size_t total_len = 0, len = 0;
+    int type = 0, ret = 0;
+    uint8_t *ptr = NULL;
+
+    char epname[EPNAME_MAX] = {0};
+    uint8_t *data = NULL;
+    size_t data_len = 0;
+
+    uint8_t *out = NULL;
+    size_t outlen = 0;
+    struct pserial_config *pserial_cfg = NULL;
+
+    total_len = in_len;
+
+    while (parse_tlv(&buf, &total_len, &type, &len, &ptr) == 0) {
+        /*ESP_LOGI(TAG, "Parsed type %d len %d", type, len); */
+        switch(type) {
+            case PROTO_PSER_TLV_T_EPNAME:
+                if (len >= EPNAME_MAX - 1) {
+                    ESP_LOGE(TAG, "EP Name bigger than supported");
+                    return ESP_FAIL;
+                }
+                memcpy(epname, ptr, len);
+                /*ESP_LOGI(TAG, "Found ep %s", epname); */
+                break;
+            case PROTO_PSER_TLV_T_DATA:
+                data = ptr;
+                data_len = len;
+                break;
+            default:
+                ESP_LOGE(TAG, "Invalid type found in the packet");
+                return ESP_FAIL;
+        }
+    }
+
+    if (data == NULL || data_len == 0 || strlen(epname) == 0) {
+        ESP_LOGE(TAG, "TLV components not complete for parsing");
+        return ESP_FAIL;
+    }
+    ret = protocomm_req_handle(pc, epname, 0, data,
+            data_len, &out, (ssize_t *) &outlen);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Error in handling protocomm request %d", ret);
+        return ESP_FAIL;
+    }
+
+    pserial_cfg = pc->priv;
+    ret = compose_tlv(CTRL_EP_NAME_RESP, &out, &outlen);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to compose tlv");
+        return ESP_FAIL;
+    }
+
+    /*ESP_LOG_BUFFER_HEXDUMP("serial_tx", out, outlen<16?outlen:16, ESP_LOG_INFO); */
+    ret = (pserial_cfg->xmit)(out, (ssize_t) outlen);
+
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to transmit data");
+        return ESP_FAIL;
+    }
+    return ESP_OK;
 }
 
 static esp_err_t protocomm_pserial_ctrl_evnt_handler(protocomm_t *pc,
-		uint8_t *in, size_t in_len, int msg_id)
+        uint8_t *in, size_t in_len, int msg_id)
 {
-	int ret = 0;
-
-	char epname[EPNAME_MAX] = CTRL_EP_NAME_EVENT;
-
-	uint8_t *out = NULL;
-	size_t outlen = 0;
-	struct pserial_config *pserial_cfg = NULL;
-
-	ret = protocomm_req_handle(pc, epname, msg_id,
-			in, in_len, &out, (ssize_t *) &outlen);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Error in handling protocomm request %d", ret);
-		return ESP_FAIL;
-	}
-
-	pserial_cfg = pc->priv;
-	ret = compose_tlv(CTRL_EP_NAME_EVENT, &out, &outlen);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to compose tlv");
-		return ESP_FAIL;
-	}
-
-	ret = (pserial_cfg->xmit)(out, (ssize_t) outlen);
-
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to transmit data");
-		return ESP_FAIL;
-	}
-	return ESP_OK;
+    int ret = 0;
+
+    char epname[EPNAME_MAX] = CTRL_EP_NAME_EVENT;
+
+    uint8_t *out = NULL;
+    size_t outlen = 0;
+    struct pserial_config *pserial_cfg = NULL;
+
+    ret = protocomm_req_handle(pc, epname, msg_id,
+            in, in_len, &out, (ssize_t *) &outlen);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Error in handling protocomm request %d", ret);
+        return ESP_FAIL;
+    }
+
+    pserial_cfg = pc->priv;
+    ret = compose_tlv(CTRL_EP_NAME_EVENT, &out, &outlen);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to compose tlv");
+        return ESP_FAIL;
+    }
+
+    ret = (pserial_cfg->xmit)(out, (ssize_t) outlen);
+
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to transmit data");
+        return ESP_FAIL;
+    }
+    return ESP_OK;
 }
 
 esp_err_t protocomm_pserial_data_ready(protocomm_t *pc,
-		uint8_t *in, int len, int msg_id)
+        uint8_t *in, int len, int msg_id)
 {
-	struct pserial_config *pserial_cfg = NULL;
-	serial_arg_t arg = {0};
-	uint8_t *buf = NULL;
-
-	pserial_cfg = (struct pserial_config *) pc->priv;
-	if (!pserial_cfg) {
-		ESP_LOGE(TAG, "Unexpected. No pserial_cfg found");
-		return ESP_FAIL;
-	}
-
-	if (len) {
-			buf = (uint8_t *)malloc(len);
-			if (buf == NULL) {
-					ESP_LOGE(TAG,"%s Failed to allocate memory", __func__);
-					return ESP_FAIL;
-			}
-			memcpy(buf, in, len);
-	}
-
-	arg.msg_id = msg_id;
-	arg.len = len;
-	arg.data = buf;
-
-	if (xQueueSend(pserial_cfg->req_queue, &arg, portMAX_DELAY) != pdTRUE) {
-		ESP_LOGE(TAG, "Failed to indicate data ready");
-		return ESP_FAIL;
-	}
-
-	return ESP_OK;
+    struct pserial_config *pserial_cfg = NULL;
+    serial_arg_t arg = {0};
+    uint8_t *buf = NULL;
+
+    pserial_cfg = (struct pserial_config *) pc->priv;
+    if (!pserial_cfg) {
+        ESP_LOGE(TAG, "Unexpected. No pserial_cfg found");
+        return ESP_FAIL;
+    }
+
+    if (len) {
+            buf = (uint8_t *)malloc(len);
+            if (buf == NULL) {
+                    ESP_LOGE(TAG,"%s Failed to allocate memory", __func__);
+                    return ESP_FAIL;
+            }
+            memcpy(buf, in, len);
+    }
+
+    arg.msg_id = msg_id;
+    arg.len = len;
+    arg.data = buf;
+
+    if (xQueueSend(pserial_cfg->req_queue, &arg, portMAX_DELAY) != pdTRUE) {
+        ESP_LOGE(TAG, "Failed to indicate data ready");
+        return ESP_FAIL;
+    }
+
+    return ESP_OK;
 }
 
 static esp_err_t protocomm_pserial_add_ep(const char *ep_name,
-		protocomm_req_handler_t req_handler, void *priv_data)
+        protocomm_req_handler_t req_handler, void *priv_data)
 {
-	ESP_LOGD(TAG, "Adding endpoint for control");
-	return ESP_OK;
+    ESP_LOGD(TAG, "Adding endpoint for control");
+    return ESP_OK;
 }
 
 static esp_err_t protocomm_pserial_remove_ep(const char *ep_name)
 {
-	ESP_LOGD(TAG, "Removing endpoint for control");
-	return ESP_OK;
+    ESP_LOGD(TAG, "Removing endpoint for control");
+    return ESP_OK;
 }
 
 static void pserial_task(void *params)
 {
-	protocomm_t *pc = (protocomm_t *) params;
-	struct pserial_config *pserial_cfg = NULL;
-	int len = 0, ret = 0;
-	serial_arg_t arg = {0};
-
-	pserial_cfg = (struct pserial_config *) pc->priv;
-	if (!pserial_cfg) {
-		ESP_LOGE(TAG, "Unexpected. No pserial_cfg found");
-		return;
-	}
-
-	while (xQueueReceive(pserial_cfg->req_queue, &arg, portMAX_DELAY) == pdTRUE) {
-
-		if ((arg.msg_id > CTRL_MSG_ID__Event_Base) &&
-		    (arg.msg_id < CTRL_MSG_ID__Event_Max)) {
-			/* Events */
-			ret = protocomm_pserial_ctrl_evnt_handler(pc, arg.data, arg.len, arg.msg_id);
-		} else {
-			/* Request */
-			len = pserial_cfg->recv(arg.data, arg.len);
-			if (len) {
-				/*ESP_LOG_BUFFER_HEXDUMP("serial_rx", arg.data, len<16?len:16, ESP_LOG_INFO);*/
-				ret = protocomm_pserial_ctrl_req_handler(pc, arg.data, len);
-			}
-		}
-
-
-		if (ret)
-			ESP_LOGI(TAG, "protobuf ctrl msg[0x%x] handling err[%d]", arg.msg_id, ret);
-
-		if (arg.data) {
-			free(arg.data);
-			arg.data = NULL;
-		}
-	}
-
-	ESP_LOGI(TAG, "Unexpected termination of pserial task");
+    protocomm_t *pc = (protocomm_t *) params;
+    struct pserial_config *pserial_cfg = NULL;
+    int len = 0, ret = 0;
+    serial_arg_t arg = {0};
+
+    pserial_cfg = (struct pserial_config *) pc->priv;
+    if (!pserial_cfg) {
+        ESP_LOGE(TAG, "Unexpected. No pserial_cfg found");
+        return;
+    }
+
+    while (xQueueReceive(pserial_cfg->req_queue, &arg, portMAX_DELAY) == pdTRUE) {
+
+        if ((arg.msg_id > CTRL_MSG_ID__Event_Base) &&
+            (arg.msg_id < CTRL_MSG_ID__Event_Max)) {
+            /* Events */
+            ret = protocomm_pserial_ctrl_evnt_handler(pc, arg.data, arg.len, arg.msg_id);
+        } else {
+            /* Request */
+            len = pserial_cfg->recv(arg.data, arg.len);
+            if (len) {
+                /*ESP_LOG_BUFFER_HEXDUMP("serial_rx", arg.data, len<16?len:16, ESP_LOG_INFO);*/
+                ret = protocomm_pserial_ctrl_req_handler(pc, arg.data, len);
+            }
+        }
+
+
+        if (ret)
+            ESP_LOGI(TAG, "protobuf ctrl msg[0x%x] handling err[%d]", arg.msg_id, ret);
+
+        if (arg.data) {
+            free(arg.data);
+            arg.data = NULL;
+        }
+    }
+
+    ESP_LOGI(TAG, "Unexpected termination of pserial task");
 }
 
 esp_err_t protocomm_pserial_start(protocomm_t *pc,
-		pserial_xmit xmit, pserial_recv recv)
+        pserial_xmit xmit, pserial_recv recv)
 {
-	struct pserial_config *pserial_cfg = NULL;
+    struct pserial_config *pserial_cfg = NULL;
 
-	if (pc == NULL) {
-		return ESP_ERR_INVALID_ARG;
-	}
+    if (pc == NULL) {
+        return ESP_ERR_INVALID_ARG;
+    }
 
-	pc->add_endpoint = protocomm_pserial_add_ep;
-	pc->remove_endpoint = protocomm_pserial_remove_ep;
+    pc->add_endpoint = protocomm_pserial_add_ep;
+    pc->remove_endpoint = protocomm_pserial_remove_ep;
 
-	pserial_cfg = (struct pserial_config *) malloc(sizeof(struct pserial_config));
-	if (pserial_cfg == NULL) {
-		ESP_LOGE(TAG,"%s Failed to allocate memory", __func__);
-		return ESP_ERR_NO_MEM;
-	}
-	pserial_cfg->xmit = xmit;
-	pserial_cfg->recv = recv;
-	pserial_cfg->req_queue = xQueueCreate(REQ_Q_MAX, sizeof(serial_arg_t));
+    pserial_cfg = (struct pserial_config *) malloc(sizeof(struct pserial_config));
+    if (pserial_cfg == NULL) {
+        ESP_LOGE(TAG,"%s Failed to allocate memory", __func__);
+        return ESP_ERR_NO_MEM;
+    }
+    pserial_cfg->xmit = xmit;
+    pserial_cfg->recv = recv;
+    pserial_cfg->req_queue = xQueueCreate(REQ_Q_MAX, sizeof(serial_arg_t));
 
-	pc->priv = pserial_cfg;
+    pc->priv = pserial_cfg;
 
-	xTaskCreate(pserial_task, "pserial_task", CONFIG_ESP_DEFAULT_TASK_STACK_SIZE,
-			(void *) pc, CONFIG_ESP_DEFAULT_TASK_PRIO, NULL);
+    xTaskCreate(pserial_task, "pserial_task", CONFIG_ESP_DEFAULT_TASK_STACK_SIZE,
+            (void *) pc, CONFIG_ESP_DEFAULT_TASK_PRIO, NULL);
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 esp_err_t protocomm_pserial_stop(protocomm_t *pc)
 {
-	struct pserial_config *pserial_cfg = NULL;
-	if (pc->priv) {
-		pserial_cfg = (struct pserial_config *) pc->priv;
-		vQueueDelete(pserial_cfg->req_queue);
-		free(pserial_cfg);
-		pc->priv = NULL;
-	}
-
-	return ESP_OK;
+    struct pserial_config *pserial_cfg = NULL;
+    if (pc->priv) {
+        pserial_cfg = (struct pserial_config *) pc->priv;
+        vQueueDelete(pserial_cfg->req_queue);
+        free(pserial_cfg);
+        pc->priv = NULL;
+    }
+
+    return ESP_OK;
 }

+ 1 - 1
esp/esp_driver/network_adapter/main/protocomm_pserial.h

@@ -27,7 +27,7 @@ esp_err_t protocomm_pserial_start(protocomm_t *pc, pserial_xmit xmit, pserial_re
 esp_err_t protocomm_pserial_data_ready(protocomm_t *pc, uint8_t * in, int len, int msg_id);
 
 
-#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) 
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
   #define QUEUE_HANDLE QueueHandle_t
 #else
   #define QUEUE_HANDLE xQueueHandle

+ 251 - 251
esp/esp_driver/network_adapter/main/sdio_slave_api.c

@@ -29,8 +29,8 @@
 #include "esp_fw_version.h"
 
 #define SDIO_SLAVE_QUEUE_SIZE   20
-#define BUFFER_SIZE     	1536 /* 512*3 */
-#define BUFFER_NUM      	10
+#define BUFFER_SIZE         1536 /* 512*3 */
+#define BUFFER_NUM          10
 static uint8_t sdio_slave_rx_buffer[BUFFER_NUM][BUFFER_SIZE];
 
 #define SDIO_MEMPOOL_NUM_BLOCKS     40
@@ -48,381 +48,381 @@ static esp_err_t sdio_reset(interface_handle_t *handle);
 static void sdio_deinit(interface_handle_t *handle);
 
 if_ops_t if_ops = {
-	.init = sdio_init,
-	.write = sdio_write,
-	.read = sdio_read,
-	.reset = sdio_reset,
-	.deinit = sdio_deinit,
+    .init = sdio_init,
+    .write = sdio_write,
+    .read = sdio_read,
+    .reset = sdio_reset,
+    .deinit = sdio_deinit,
 };
 
 static inline void sdio_mempool_create(void)
 {
-	buf_mp_tx_g = hosted_mempool_create(NULL, 0, SDIO_MEMPOOL_NUM_BLOCKS, BUFFER_SIZE);
+    buf_mp_tx_g = hosted_mempool_create(NULL, 0, SDIO_MEMPOOL_NUM_BLOCKS, BUFFER_SIZE);
 #ifdef CONFIG_ESP_CACHE_MALLOC
-	assert(buf_mp_tx_g);
+    assert(buf_mp_tx_g);
 #endif
 }
 static inline void sdio_mempool_destroy(void)
 {
-	hosted_mempool_destroy(buf_mp_tx_g);
+    hosted_mempool_destroy(buf_mp_tx_g);
 }
 static inline void *sdio_buffer_tx_alloc(uint need_memset)
 {
-	return hosted_mempool_alloc(buf_mp_tx_g, BUFFER_SIZE, need_memset);
+    return hosted_mempool_alloc(buf_mp_tx_g, BUFFER_SIZE, need_memset);
 }
 static inline void sdio_buffer_tx_free(void *buf)
 {
-	hosted_mempool_free(buf_mp_tx_g, buf);
+    hosted_mempool_free(buf_mp_tx_g, buf);
 }
 
 interface_context_t *interface_insert_driver(int (*event_handler)(uint8_t val))
 {
-	ESP_LOGI(TAG, "Using SDIO interface");
-	memset(&context, 0, sizeof(context));
+    ESP_LOGI(TAG, "Using SDIO interface");
+    memset(&context, 0, sizeof(context));
 
-	context.type = SDIO;
-	context.if_ops = &if_ops;
-	context.event_handler = event_handler;
+    context.type = SDIO;
+    context.if_ops = &if_ops;
+    context.event_handler = event_handler;
 
-	return &context;
+    return &context;
 }
 
 int interface_remove_driver()
 {
-	memset(&context, 0, sizeof(context));
-	return 0;
+    memset(&context, 0, sizeof(context));
+    return 0;
 }
 
 IRAM_ATTR static void event_cb(uint8_t val)
 {
-	if (val == ESP_RESET) {
-		sdio_reset(&if_handle_g);
-		return;
-	}
-
-	if (context.event_handler) {
-		context.event_handler(val);
-	}
+    if (val == ESP_RESET) {
+        sdio_reset(&if_handle_g);
+        return;
+    }
+
+    if (context.event_handler) {
+        context.event_handler(val);
+    }
 }
 
 void generate_startup_event(uint8_t cap)
 {
-	struct esp_payload_header *header = NULL;
-	interface_buffer_handle_t buf_handle = {0};
-	struct esp_priv_event *event = NULL;
-	uint8_t *pos = NULL;
-	uint16_t len = 0;
-	uint8_t raw_tp_cap = 0;
-	esp_err_t ret = ESP_OK;
-	struct fw_version fw_ver = { 0 };
+    struct esp_payload_header *header = NULL;
+    interface_buffer_handle_t buf_handle = {0};
+    struct esp_priv_event *event = NULL;
+    uint8_t *pos = NULL;
+    uint16_t len = 0;
+    uint8_t raw_tp_cap = 0;
+    esp_err_t ret = ESP_OK;
+    struct fw_version fw_ver = { 0 };
 
-	raw_tp_cap = debug_get_raw_tp_conf();
+    raw_tp_cap = debug_get_raw_tp_conf();
 
-	memset(&buf_handle, 0, sizeof(buf_handle));
+    memset(&buf_handle, 0, sizeof(buf_handle));
 
-	buf_handle.payload = sdio_buffer_tx_alloc(MEMSET_REQUIRED);
-	assert(buf_handle.payload);
+    buf_handle.payload = sdio_buffer_tx_alloc(MEMSET_REQUIRED);
+    assert(buf_handle.payload);
 
-	header = (struct esp_payload_header *) buf_handle.payload;
+    header = (struct esp_payload_header *) buf_handle.payload;
 
-	header->if_type = ESP_PRIV_IF;
-	header->if_num = 0;
-	header->offset = htole16(sizeof(struct esp_payload_header));
-	header->priv_pkt_type = ESP_PACKET_TYPE_EVENT;
+    header->if_type = ESP_PRIV_IF;
+    header->if_num = 0;
+    header->offset = htole16(sizeof(struct esp_payload_header));
+    header->priv_pkt_type = ESP_PACKET_TYPE_EVENT;
 
-	/* Populate event data */
-	event = (struct esp_priv_event *) (buf_handle.payload + sizeof(struct esp_payload_header));
+    /* Populate event data */
+    event = (struct esp_priv_event *) (buf_handle.payload + sizeof(struct esp_payload_header));
 
-	event->event_type = ESP_PRIV_EVENT_INIT;
+    event->event_type = ESP_PRIV_EVENT_INIT;
 
-	/* Populate TLVs for event */
-	pos = event->event_data;
+    /* Populate TLVs for event */
+    pos = event->event_data;
 
-	/* TLVs start */
+    /* TLVs start */
 
-	/* TLV - Board type */
-	*pos = ESP_PRIV_FIRMWARE_CHIP_ID;   pos++;len++;
-	*pos = LENGTH_1_BYTE;               pos++;len++;
-	*pos = CONFIG_IDF_FIRMWARE_CHIP_ID; pos++;len++;
+    /* TLV - Board type */
+    *pos = ESP_PRIV_FIRMWARE_CHIP_ID;   pos++;len++;
+    *pos = LENGTH_1_BYTE;               pos++;len++;
+    *pos = CONFIG_IDF_FIRMWARE_CHIP_ID; pos++;len++;
 
-	/* TLV - Capability */
-	*pos = ESP_PRIV_CAPABILITY;         pos++;len++;
-	*pos = LENGTH_1_BYTE;               pos++;len++;
-	*pos = cap;                         pos++;len++;
+    /* TLV - Capability */
+    *pos = ESP_PRIV_CAPABILITY;         pos++;len++;
+    *pos = LENGTH_1_BYTE;               pos++;len++;
+    *pos = cap;                         pos++;len++;
 
-	*pos = ESP_PRIV_TEST_RAW_TP;        pos++;len++;
-	*pos = LENGTH_1_BYTE;               pos++;len++;
-	*pos = raw_tp_cap;                  pos++;len++;
+    *pos = ESP_PRIV_TEST_RAW_TP;        pos++;len++;
+    *pos = LENGTH_1_BYTE;               pos++;len++;
+    *pos = raw_tp_cap;                  pos++;len++;
 
-	/* fill structure with fw info */
-	strncpy(fw_ver.project_name, PROJECT_NAME, sizeof(fw_ver.project_name) - 1);
-	fw_ver.project_name[sizeof(fw_ver.project_name) - 1] = '\0';
-	fw_ver.major1 = PROJECT_VERSION_MAJOR_1;
-	fw_ver.major2 = PROJECT_VERSION_MAJOR_2;
-	fw_ver.minor  = PROJECT_VERSION_MINOR;
-	fw_ver.revision_patch_1 = PROJECT_REVISION_PATCH_1;
-	fw_ver.revision_patch_2 = PROJECT_REVISION_PATCH_2;
+    /* fill structure with fw info */
+    strncpy(fw_ver.project_name, PROJECT_NAME, sizeof(fw_ver.project_name) - 1);
+    fw_ver.project_name[sizeof(fw_ver.project_name) - 1] = '\0';
+    fw_ver.major1 = PROJECT_VERSION_MAJOR_1;
+    fw_ver.major2 = PROJECT_VERSION_MAJOR_2;
+    fw_ver.minor  = PROJECT_VERSION_MINOR;
+    fw_ver.revision_patch_1 = PROJECT_REVISION_PATCH_1;
+    fw_ver.revision_patch_2 = PROJECT_REVISION_PATCH_2;
 
-	/* TLV - Firmware Version */
-	*pos = ESP_PRIV_FW_DATA;            pos++;len++;
-	*pos = sizeof(fw_ver);              pos++;len++;
-	memcpy(pos, &fw_ver, sizeof(fw_ver));
-	pos += sizeof(fw_ver);
-	len += sizeof(fw_ver);
+    /* TLV - Firmware Version */
+    *pos = ESP_PRIV_FW_DATA;            pos++;len++;
+    *pos = sizeof(fw_ver);              pos++;len++;
+    memcpy(pos, &fw_ver, sizeof(fw_ver));
+    pos += sizeof(fw_ver);
+    len += sizeof(fw_ver);
 
-	/* TLVs end */
+    /* TLVs end */
 
-	event->event_len = len;
+    event->event_len = len;
 
-	/* payload len = Event len + sizeof(event type) + sizeof(event len) */
-	len += 2;
-	header->len = htole16(len);
+    /* payload len = Event len + sizeof(event type) + sizeof(event len) */
+    len += 2;
+    header->len = htole16(len);
 
-	buf_handle.payload_len = len + sizeof(struct esp_payload_header);
+    buf_handle.payload_len = len + sizeof(struct esp_payload_header);
 #if CONFIG_ESP_SDIO_CHECKSUM
-	header->checksum = htole16(compute_checksum(buf_handle.payload, buf_handle.payload_len));
+    header->checksum = htole16(compute_checksum(buf_handle.payload, buf_handle.payload_len));
 #endif
 
-	ESP_LOG_BUFFER_HEXDUMP("sdio_tx", buf_handle.payload, buf_handle.payload_len, ESP_LOG_VERBOSE);
+    ESP_LOG_BUFFER_HEXDUMP("sdio_tx", buf_handle.payload, buf_handle.payload_len, ESP_LOG_VERBOSE);
 
-	ret = sdio_slave_transmit(buf_handle.payload, buf_handle.payload_len);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG , "sdio slave tx error, ret : 0x%x\r\n", ret);
-		sdio_buffer_tx_free(buf_handle.payload);
-		return;
-	}
+    ret = sdio_slave_transmit(buf_handle.payload, buf_handle.payload_len);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG , "sdio slave tx error, ret : 0x%x\r\n", ret);
+        sdio_buffer_tx_free(buf_handle.payload);
+        return;
+    }
 
-	sdio_buffer_tx_free(buf_handle.payload);
+    sdio_buffer_tx_free(buf_handle.payload);
 }
 
 static void sdio_read_done(void *handle)
 {
-	sdio_slave_recv_load_buf((sdio_slave_buf_handle_t) handle);
+    sdio_slave_recv_load_buf((sdio_slave_buf_handle_t) handle);
 }
 
 static interface_handle_t * sdio_init(void)
 {
-	esp_err_t ret = ESP_OK;
-	sdio_slave_buf_handle_t handle = {0};
-	sdio_slave_config_t config = {
-		.sending_mode       = SDIO_SLAVE_SEND_STREAM,
-		.send_queue_size    = SDIO_SLAVE_QUEUE_SIZE,
-		.recv_buffer_size   = BUFFER_SIZE,
-		.event_cb           = event_cb,
-
-		/* Note: For small devkits there may be no pullups on the board.
-		   This enables the internal pullups to help evaluate the driver
-		   quickly. However the internal pullups are not sufficient and not
-		   reliable, please make sure external pullups are connected to the
-		   bus in your real design.
-		   */
-		//.flags              = SDIO_SLAVE_FLAG_INTERNAL_PULLUP,
-		/* Note: Sometimes the SDIO card is detected but gets problem in
-		 * Read/Write or handling ISR because of SDIO timing issues.
-		 * In these cases, Please tune timing below using value from
-		 * https://github.com/espressif/esp-idf/blob/release/v5.0/components/hal/include/hal/sdio_slave_types.h#L26-L38
-		 * */
+    esp_err_t ret = ESP_OK;
+    sdio_slave_buf_handle_t handle = {0};
+    sdio_slave_config_t config = {
+        .sending_mode       = SDIO_SLAVE_SEND_STREAM,
+        .send_queue_size    = SDIO_SLAVE_QUEUE_SIZE,
+        .recv_buffer_size   = BUFFER_SIZE,
+        .event_cb           = event_cb,
+
+        /* Note: For small devkits there may be no pullups on the board.
+           This enables the internal pullups to help evaluate the driver
+           quickly. However the internal pullups are not sufficient and not
+           reliable, please make sure external pullups are connected to the
+           bus in your real design.
+           */
+        //.flags              = SDIO_SLAVE_FLAG_INTERNAL_PULLUP,
+        /* Note: Sometimes the SDIO card is detected but gets problem in
+         * Read/Write or handling ISR because of SDIO timing issues.
+         * In these cases, Please tune timing below using value from
+         * https://github.com/espressif/esp-idf/blob/release/v5.0/components/hal/include/hal/sdio_slave_types.h#L26-L38
+         * */
 #if defined(CONFIG_IDF_TARGET_ESP32C6)
-		.timing             = SDIO_SLAVE_TIMING_NSEND_PSAMPLE,
+        .timing             = SDIO_SLAVE_TIMING_NSEND_PSAMPLE,
 #endif
-	};
+    };
 #if CONFIG_ESP_SDIO_DEFAULT_SPEED
-	config.flags |= SDIO_SLAVE_FLAG_DEFAULT_SPEED;
+    config.flags |= SDIO_SLAVE_FLAG_DEFAULT_SPEED;
 #elif CONFIG_ESP_SDIO_HIGH_SPEED
-	config.flags |= SDIO_SLAVE_FLAG_HIGH_SPEED;
+    config.flags |= SDIO_SLAVE_FLAG_HIGH_SPEED;
 #else
 #error Invalid SDIO bus speed selection
 #endif
 
 #if defined(CONFIG_IDF_TARGET_ESP32C6)
-	ESP_LOGI(TAG, "%s: ESP32-C6 SDIO timing: %u\n", __func__, config.timing);
+    ESP_LOGI(TAG, "%s: ESP32-C6 SDIO timing: %u\n", __func__, config.timing);
 #else
-	ESP_LOGI(TAG, "%s: ESP32 SDIO timing: %u\n", __func__, config.timing);
+    ESP_LOGI(TAG, "%s: ESP32 SDIO timing: %u\n", __func__, config.timing);
 #endif
-	ret = sdio_slave_initialize(&config);
-	if (ret != ESP_OK) {
-		return NULL;
-	}
-
-	for (int i = 0; i < BUFFER_NUM; i++) {
-		handle = sdio_slave_recv_register_buf(sdio_slave_rx_buffer[i]);
-		assert(handle != NULL);
-
-		ret = sdio_slave_recv_load_buf(handle);
-		if (ret != ESP_OK) {
-			sdio_slave_deinit();
-			return NULL;
-		}
-	}
-
-	sdio_slave_set_host_intena(SDIO_SLAVE_HOSTINT_SEND_NEW_PACKET |
-			SDIO_SLAVE_HOSTINT_BIT0 |
-			SDIO_SLAVE_HOSTINT_BIT1 |
-			SDIO_SLAVE_HOSTINT_BIT2 |
-			SDIO_SLAVE_HOSTINT_BIT3 |
-			SDIO_SLAVE_HOSTINT_BIT4 |
-			SDIO_SLAVE_HOSTINT_BIT5 |
-			SDIO_SLAVE_HOSTINT_BIT6 |
-			SDIO_SLAVE_HOSTINT_BIT7);
-
-	ret = sdio_slave_start();
-	if (ret != ESP_OK) {
-		sdio_slave_deinit();
-		return NULL;
-	}
-
-	memset(&if_handle_g, 0, sizeof(if_handle_g));
-
-	sdio_mempool_create();
-	if_handle_g.state = INIT;
-
-	return &if_handle_g;
+    ret = sdio_slave_initialize(&config);
+    if (ret != ESP_OK) {
+        return NULL;
+    }
+
+    for (int i = 0; i < BUFFER_NUM; i++) {
+        handle = sdio_slave_recv_register_buf(sdio_slave_rx_buffer[i]);
+        assert(handle != NULL);
+
+        ret = sdio_slave_recv_load_buf(handle);
+        if (ret != ESP_OK) {
+            sdio_slave_deinit();
+            return NULL;
+        }
+    }
+
+    sdio_slave_set_host_intena(SDIO_SLAVE_HOSTINT_SEND_NEW_PACKET |
+            SDIO_SLAVE_HOSTINT_BIT0 |
+            SDIO_SLAVE_HOSTINT_BIT1 |
+            SDIO_SLAVE_HOSTINT_BIT2 |
+            SDIO_SLAVE_HOSTINT_BIT3 |
+            SDIO_SLAVE_HOSTINT_BIT4 |
+            SDIO_SLAVE_HOSTINT_BIT5 |
+            SDIO_SLAVE_HOSTINT_BIT6 |
+            SDIO_SLAVE_HOSTINT_BIT7);
+
+    ret = sdio_slave_start();
+    if (ret != ESP_OK) {
+        sdio_slave_deinit();
+        return NULL;
+    }
+
+    memset(&if_handle_g, 0, sizeof(if_handle_g));
+
+    sdio_mempool_create();
+    if_handle_g.state = INIT;
+
+    return &if_handle_g;
 }
 
 static int32_t sdio_write(interface_handle_t *handle, interface_buffer_handle_t *buf_handle)
 {
-	esp_err_t ret = ESP_OK;
-	int32_t total_len = 0;
-	uint8_t* sendbuf = NULL;
-	uint16_t offset = 0;
-	struct esp_payload_header *header = NULL;
+    esp_err_t ret = ESP_OK;
+    int32_t total_len = 0;
+    uint8_t* sendbuf = NULL;
+    uint16_t offset = 0;
+    struct esp_payload_header *header = NULL;
 
-	if (!handle || !buf_handle) {
-		ESP_LOGE(TAG , "Invalid arguments");
-		return ESP_FAIL;
-	}
+    if (!handle || !buf_handle) {
+        ESP_LOGE(TAG , "Invalid arguments");
+        return ESP_FAIL;
+    }
 
-	if (handle->state != ACTIVE) {
-		return ESP_FAIL;
-	}
+    if (handle->state != ACTIVE) {
+        return ESP_FAIL;
+    }
 
-	if (!buf_handle->payload_len || !buf_handle->payload) {
-		ESP_LOGE(TAG , "Invalid arguments, len:%d", buf_handle->payload_len);
-		return ESP_FAIL;
-	}
+    if (!buf_handle->payload_len || !buf_handle->payload) {
+        ESP_LOGE(TAG , "Invalid arguments, len:%d", buf_handle->payload_len);
+        return ESP_FAIL;
+    }
 
-	total_len = buf_handle->payload_len + sizeof (struct esp_payload_header);
+    total_len = buf_handle->payload_len + sizeof (struct esp_payload_header);
 
-	sendbuf = sdio_buffer_tx_alloc(MEMSET_REQUIRED);
-	if (sendbuf == NULL) {
-		ESP_LOGE(TAG , "Malloc send buffer fail!");
-		return ESP_FAIL;
-	}
+    sendbuf = sdio_buffer_tx_alloc(MEMSET_REQUIRED);
+    if (sendbuf == NULL) {
+        ESP_LOGE(TAG , "Malloc send buffer fail!");
+        return ESP_FAIL;
+    }
 
-	header = (struct esp_payload_header *) sendbuf;
+    header = (struct esp_payload_header *) sendbuf;
 
-	memset (header, 0, sizeof(struct esp_payload_header));
+    memset (header, 0, sizeof(struct esp_payload_header));
 
-	/* Initialize header */
-	header->if_type = buf_handle->if_type;
-	header->if_num = buf_handle->if_num;
-	header->len = htole16(buf_handle->payload_len);
-	offset = sizeof(struct esp_payload_header);
-	header->offset = htole16(offset);
+    /* Initialize header */
+    header->if_type = buf_handle->if_type;
+    header->if_num = buf_handle->if_num;
+    header->len = htole16(buf_handle->payload_len);
+    offset = sizeof(struct esp_payload_header);
+    header->offset = htole16(offset);
 
-	memcpy(sendbuf + offset, buf_handle->payload, buf_handle->payload_len);
+    memcpy(sendbuf + offset, buf_handle->payload, buf_handle->payload_len);
 
 #if CONFIG_ESP_SDIO_CHECKSUM
-	header->checksum = htole16(compute_checksum(sendbuf,
-				offset+buf_handle->payload_len));
+    header->checksum = htole16(compute_checksum(sendbuf,
+                offset+buf_handle->payload_len));
 #endif
 
-	ret = sdio_slave_transmit(sendbuf, total_len);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG , "sdio slave transmit error, ret : 0x%x\r\n", ret);
-		sdio_buffer_tx_free(sendbuf);
-		return ESP_FAIL;
-	}
+    ret = sdio_slave_transmit(sendbuf, total_len);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG , "sdio slave transmit error, ret : 0x%x\r\n", ret);
+        sdio_buffer_tx_free(sendbuf);
+        return ESP_FAIL;
+    }
 
-	sdio_buffer_tx_free(sendbuf);
+    sdio_buffer_tx_free(sendbuf);
 
-	return buf_handle->payload_len;
+    return buf_handle->payload_len;
 }
 
 static int sdio_read(interface_handle_t *if_handle, interface_buffer_handle_t *buf_handle)
 {
-	esp_err_t ret = ESP_OK;
-	struct esp_payload_header *header = NULL;
+    esp_err_t ret = ESP_OK;
+    struct esp_payload_header *header = NULL;
 #if CONFIG_ESP_SDIO_CHECKSUM
-	uint16_t rx_checksum = 0, checksum = 0;
+    uint16_t rx_checksum = 0, checksum = 0;
 #endif
-	uint16_t len = 0;
-	size_t sdio_read_len = 0;
+    uint16_t len = 0;
+    size_t sdio_read_len = 0;
 
 
-	if (!if_handle || !buf_handle) {
-		ESP_LOGE(TAG, "Invalid arguments to sdio_read");
-		return ESP_FAIL;
-	}
+    if (!if_handle || !buf_handle) {
+        ESP_LOGE(TAG, "Invalid arguments to sdio_read");
+        return ESP_FAIL;
+    }
 
-	if (if_handle->state != ACTIVE)
-		return ESP_FAIL;
+    if (if_handle->state != ACTIVE)
+        return ESP_FAIL;
 
-	ret = sdio_slave_recv(&(buf_handle->sdio_buf_handle), &(buf_handle->payload),
-			&(sdio_read_len), portMAX_DELAY);
-	if (ret) {
-		ESP_LOGD(TAG, "sdio_slave_recv returned failure");
-		return ESP_FAIL;
-	}
+    ret = sdio_slave_recv(&(buf_handle->sdio_buf_handle), &(buf_handle->payload),
+            &(sdio_read_len), portMAX_DELAY);
+    if (ret) {
+        ESP_LOGD(TAG, "sdio_slave_recv returned failure");
+        return ESP_FAIL;
+    }
 
-	buf_handle->payload_len = sdio_read_len & 0xFFFF;
+    buf_handle->payload_len = sdio_read_len & 0xFFFF;
 
-	header = (struct esp_payload_header *) buf_handle->payload;
+    header = (struct esp_payload_header *) buf_handle->payload;
 
-	len = le16toh(header->len) + le16toh(header->offset);
+    len = le16toh(header->len) + le16toh(header->offset);
 
 #if CONFIG_ESP_SDIO_CHECKSUM
-	rx_checksum = le16toh(header->checksum);
-	header->checksum = 0;
+    rx_checksum = le16toh(header->checksum);
+    header->checksum = 0;
 
-	checksum = compute_checksum(buf_handle->payload, len);
+    checksum = compute_checksum(buf_handle->payload, len);
 
-	if (checksum != rx_checksum) {
-		sdio_read_done(buf_handle->sdio_buf_handle);
-		return ESP_FAIL;
-	}
+    if (checksum != rx_checksum) {
+        sdio_read_done(buf_handle->sdio_buf_handle);
+        return ESP_FAIL;
+    }
 #endif
 
-	buf_handle->if_type = header->if_type;
-	buf_handle->if_num = header->if_num;
-	buf_handle->free_buf_handle = sdio_read_done;
-	return len;
+    buf_handle->if_type = header->if_type;
+    buf_handle->if_num = header->if_num;
+    buf_handle->free_buf_handle = sdio_read_done;
+    return len;
 }
 
 static esp_err_t sdio_reset(interface_handle_t *handle)
 {
-	esp_err_t ret = ESP_OK;
+    esp_err_t ret = ESP_OK;
 
-	sdio_slave_stop();
+    sdio_slave_stop();
 
-	ret = sdio_slave_reset();
-	if (ret != ESP_OK)
-		return ret;
+    ret = sdio_slave_reset();
+    if (ret != ESP_OK)
+        return ret;
 
-	ret = sdio_slave_start();
-	if (ret != ESP_OK)
-		return ret;
+    ret = sdio_slave_start();
+    if (ret != ESP_OK)
+        return ret;
 
-	while (1) {
-		sdio_slave_buf_handle_t handle = NULL;
+    while (1) {
+        sdio_slave_buf_handle_t handle = NULL;
 
-		/* Return buffers to driver */
-		ret = sdio_slave_send_get_finished(&handle, 0);
-		if (ret != ESP_OK)
-			break;
+        /* Return buffers to driver */
+        ret = sdio_slave_send_get_finished(&handle, 0);
+        if (ret != ESP_OK)
+            break;
 
-		if (handle) {
-			ret = sdio_slave_recv_load_buf(handle);
-			ESP_ERROR_CHECK_WITHOUT_ABORT(ret);
-		}
-	}
+        if (handle) {
+            ret = sdio_slave_recv_load_buf(handle);
+            ESP_ERROR_CHECK_WITHOUT_ABORT(ret);
+        }
+    }
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 static void sdio_deinit(interface_handle_t *handle)
 {
-	sdio_mempool_destroy();
-	sdio_slave_stop();
-	sdio_slave_reset();
+    sdio_mempool_destroy();
+    sdio_slave_stop();
+    sdio_slave_reset();
 }

+ 136 - 136
esp/esp_driver/network_adapter/main/slave_bt.c

@@ -38,93 +38,93 @@ static const char BT_TAG[] = "ESP_BT";
 
 static bool bt_available(void)
 {
-	return esp_bt_controller_get_status() >= ESP_BT_CONTROLLER_STATUS_INITED;
+    return esp_bt_controller_get_status() >= ESP_BT_CONTROLLER_STATUS_INITED;
 }
 
 #if BLUETOOTH_HCI
 
 static bool bt_running(void)
 {
-	return esp_bt_controller_get_status() > ESP_BT_CONTROLLER_STATUS_INITED;
+    return esp_bt_controller_get_status() > ESP_BT_CONTROLLER_STATUS_INITED;
 }
 /* ***** HCI specific part ***** */
 
-#define VHCI_MAX_TIMEOUT_MS 	2000
+#define VHCI_MAX_TIMEOUT_MS     2000
 static SemaphoreHandle_t vhci_send_sem;
 
 static void controller_rcv_pkt_ready(void)
 {
-	if (vhci_send_sem)
-		xSemaphoreGive(vhci_send_sem);
+    if (vhci_send_sem)
+        xSemaphoreGive(vhci_send_sem);
 }
 
 static int host_rcv_pkt(uint8_t *data, uint16_t len)
 {
-	interface_buffer_handle_t buf_handle;
-	uint8_t *buf = NULL;
+    interface_buffer_handle_t buf_handle;
+    uint8_t *buf = NULL;
 
-	buf = (uint8_t *) malloc(len);
+    buf = (uint8_t *) malloc(len);
 
-	if (!buf) {
-		ESP_LOGE(BT_TAG, "HCI Send packet: memory allocation failed");
-		return ESP_FAIL;
-	}
+    if (!buf) {
+        ESP_LOGE(BT_TAG, "HCI Send packet: memory allocation failed");
+        return ESP_FAIL;
+    }
 
-	memcpy(buf, data, len);
+    memcpy(buf, data, len);
 
-	memset(&buf_handle, 0, sizeof(buf_handle));
+    memset(&buf_handle, 0, sizeof(buf_handle));
 
-	buf_handle.if_type = ESP_HCI_IF;
-	buf_handle.if_num = 0;
-	buf_handle.payload_len = len;
-	buf_handle.payload = buf;
-	buf_handle.wlan_buf_handle = buf;
-	buf_handle.free_buf_handle = free;
+    buf_handle.if_type = ESP_HCI_IF;
+    buf_handle.if_num = 0;
+    buf_handle.payload_len = len;
+    buf_handle.payload = buf;
+    buf_handle.wlan_buf_handle = buf;
+    buf_handle.free_buf_handle = free;
 
 #if CONFIG_ESP_BT_DEBUG
-	ESP_LOG_BUFFER_HEXDUMP("bt_tx", data, len, ESP_LOG_INFO);
+    ESP_LOG_BUFFER_HEXDUMP("bt_tx", data, len, ESP_LOG_INFO);
 #endif
 
-	if (send_to_host_queue(&buf_handle, PRIO_Q_BT)) {
-		free(buf);
-		return ESP_FAIL;
-	}
+    if (send_to_host_queue(&buf_handle, PRIO_Q_BT)) {
+        free(buf);
+        return ESP_FAIL;
+    }
 
-	return 0;
+    return 0;
 }
 
 static esp_vhci_host_callback_t vhci_host_cb = {
-	.notify_host_send_available = controller_rcv_pkt_ready,
-	.notify_host_recv = host_rcv_pkt
+    .notify_host_send_available = controller_rcv_pkt_ready,
+    .notify_host_recv = host_rcv_pkt
 };
 
 void process_hci_rx_pkt(uint8_t *payload, uint16_t payload_len) {
 
-	if (!bt_running())
-		return;
+    if (!bt_running())
+        return;
 
-	/* VHCI needs one extra byte at the start of payload */
-	/* that is accomodated in esp_payload_header */
+    /* VHCI needs one extra byte at the start of payload */
+    /* that is accomodated in esp_payload_header */
 #if CONFIG_ESP_BT_DEBUG
     ESP_LOG_BUFFER_HEXDUMP("bt_rx", payload, payload_len, ESP_LOG_INFO);
 #endif
-	payload--;
-	payload_len++;
+    payload--;
+    payload_len++;
 
-	if (!esp_vhci_host_check_send_available()) {
-		ESP_LOGD(BT_TAG, "VHCI not available");
-	}
+    if (!esp_vhci_host_check_send_available()) {
+        ESP_LOGD(BT_TAG, "VHCI not available");
+    }
 
 #if SOC_ESP_NIMBLE_CONTROLLER
-	esp_vhci_host_send_packet(payload, payload_len);
+    esp_vhci_host_send_packet(payload, payload_len);
 #else
-	if (vhci_send_sem) {
-		if (xSemaphoreTake(vhci_send_sem, VHCI_MAX_TIMEOUT_MS) == pdTRUE) {
-			esp_vhci_host_send_packet(payload, payload_len);
-		} else {
-			ESP_LOGI(BT_TAG, "VHCI sem timeout");
-		}
-	}
+    if (vhci_send_sem) {
+        if (xSemaphoreTake(vhci_send_sem, VHCI_MAX_TIMEOUT_MS) == pdTRUE) {
+            esp_vhci_host_send_packet(payload, payload_len);
+        } else {
+            ESP_LOGI(BT_TAG, "VHCI sem timeout");
+        }
+    }
 #endif
 }
 
@@ -275,16 +275,16 @@ static IRAM_ATTR bool hci_uart_tl_tx_eof_callback(gdma_channel_handle_t dma_chan
 #if BT_OVER_C3_S3
 static void init_uart_c3_s3(void)
 {
-	ESP_LOGD(BT_TAG, "Set-up BLE for ESP32-C3/ESP32-S3");
+    ESP_LOGD(BT_TAG, "Set-up BLE for ESP32-C3/ESP32-S3");
 #if BLUETOOTH_UART == 1
-	periph_module_enable(PERIPH_UART1_MODULE);
+    periph_module_enable(PERIPH_UART1_MODULE);
     periph_module_reset(PERIPH_UART1_MODULE);
 #elif BLUETOOTH_UART == 2
-	periph_module_enable(PERIPH_UART2_MODULE);
+    periph_module_enable(PERIPH_UART2_MODULE);
     periph_module_reset(PERIPH_UART2_MODULE);
 #endif
 
-	periph_module_enable(PERIPH_UHCI0_MODULE);
+    periph_module_enable(PERIPH_UHCI0_MODULE);
     periph_module_reset(PERIPH_UHCI0_MODULE);
 
     gpio_config_t io_output_conf = {
@@ -305,14 +305,14 @@ static void init_uart_c3_s3(void)
     };
     gpio_config(&io_input_conf);
 
-	ESP_ERROR_CHECK( uart_set_pin(BLUETOOTH_UART, BT_TX_PIN,
-				BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN) );
-	ESP_LOGI(BT_TAG, "UART Pins: Tx:%u Rx:%u RTS:%u CTS:%u",
-			BT_TX_PIN, BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN);
+    ESP_ERROR_CHECK( uart_set_pin(BLUETOOTH_UART, BT_TX_PIN,
+                BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN) );
+    ESP_LOGI(BT_TAG, "UART Pins: Tx:%u Rx:%u RTS:%u CTS:%u",
+            BT_TX_PIN, BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN);
 
     // configure UART1
     ESP_LOGI(BT_TAG, "baud rate for HCI uart :: %d \n",
-			CONFIG_EXAMPLE_HCI_UART_BAUDRATE);
+            CONFIG_EXAMPLE_HCI_UART_BAUDRATE);
 
     uart_config_t uart_config = {
         .baud_rate = CONFIG_EXAMPLE_HCI_UART_BAUDRATE,
@@ -370,23 +370,23 @@ static void init_uart_c3_s3(void)
 #if CONFIG_IDF_TARGET_ESP32
 static void init_uart_esp32(void)
 {
-	ESP_LOGD(BT_TAG, "Set-up BLE for ESP32");
+    ESP_LOGD(BT_TAG, "Set-up BLE for ESP32");
 #if BLUETOOTH_UART == 1
-	periph_module_enable(PERIPH_UART1_MODULE);
-	periph_module_reset(PERIPH_UART1_MODULE);
+    periph_module_enable(PERIPH_UART1_MODULE);
+    periph_module_reset(PERIPH_UART1_MODULE);
 #elif BLUETOOTH_UART == 2
-	periph_module_enable(PERIPH_UART2_MODULE);
-	periph_module_reset(PERIPH_UART2_MODULE);
+    periph_module_enable(PERIPH_UART2_MODULE);
+    periph_module_reset(PERIPH_UART2_MODULE);
 #endif
 
-	periph_module_enable(PERIPH_UHCI0_MODULE);
-	periph_module_reset(PERIPH_UHCI0_MODULE);
+    periph_module_enable(PERIPH_UHCI0_MODULE);
+    periph_module_reset(PERIPH_UHCI0_MODULE);
 
 
-	ESP_ERROR_CHECK( uart_set_pin(BLUETOOTH_UART, BT_TX_PIN,
-		BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN) );
-	ESP_LOGI(BT_TAG, "UART Pins: Tx:%u Rx:%u RTS:%u CTS:%u",
-			BT_TX_PIN, BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN);
+    ESP_ERROR_CHECK( uart_set_pin(BLUETOOTH_UART, BT_TX_PIN,
+        BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN) );
+    ESP_LOGI(BT_TAG, "UART Pins: Tx:%u Rx:%u RTS:%u CTS:%u",
+            BT_TX_PIN, BT_RX_PIN, BT_RTS_PIN, BT_CTS_PIN);
 
 }
 #endif
@@ -411,11 +411,11 @@ static void init_uart_c2_c6(void)
 void init_uart(void)
 {
 #if CONFIG_IDF_TARGET_ESP32
-	init_uart_esp32();
+    init_uart_esp32();
 #elif (defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C6))
-	init_uart_c2_c6();
+    init_uart_c2_c6();
 #elif BT_OVER_C3_S3
-	init_uart_c3_s3();
+    init_uart_c3_s3();
 #endif
 }
 #endif
@@ -446,24 +446,24 @@ void ble_transport_ll_init(void)
 
 void esp_vhci_host_send_packet(uint8_t *data, uint16_t len)
 {
-	if (*(data) == DATA_TYPE_COMMAND) {
-		struct ble_hci_cmd *cmd = NULL;
-		cmd = (struct ble_hci_cmd *) ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD);
-		if (!cmd) {
-			ESP_LOGE(BT_TAG, "Failed to allocate memory for HCI transport buffer");
-			return;
-		}
-
-		memcpy((uint8_t *)cmd, data + 1, len - 1);
-		ble_hci_trans_hs_cmd_tx((uint8_t *)cmd);
-	}
-
-	if (*(data) == DATA_TYPE_ACL) {
-		struct os_mbuf *om = os_msys_get_pkthdr(len, ACL_DATA_MBUF_LEADINGSPACE);
-		assert(om);
-		os_mbuf_append(om, &data[1], len - 1);
-		ble_hci_trans_hs_acl_tx(om);
-	}
+    if (*(data) == DATA_TYPE_COMMAND) {
+        struct ble_hci_cmd *cmd = NULL;
+        cmd = (struct ble_hci_cmd *) ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD);
+        if (!cmd) {
+            ESP_LOGE(BT_TAG, "Failed to allocate memory for HCI transport buffer");
+            return;
+        }
+
+        memcpy((uint8_t *)cmd, data + 1, len - 1);
+        ble_hci_trans_hs_cmd_tx((uint8_t *)cmd);
+    }
+
+    if (*(data) == DATA_TYPE_ACL) {
+        struct os_mbuf *om = os_msys_get_pkthdr(len, ACL_DATA_MBUF_LEADINGSPACE);
+        assert(om);
+        os_mbuf_append(om, &data[1], len - 1);
+        ble_hci_trans_hs_acl_tx(om);
+    }
 
 }
 
@@ -505,102 +505,102 @@ ble_hs_rx_data(struct os_mbuf *om, void *arg)
 
 esp_err_t initialise_bluetooth(void)
 {
-	esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
+    esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
 
-	if (bt_available()) {
-		ESP_LOGI(BT_TAG, "BT is already configured earlier, ignoring");
-		return 0;
-	}
+    if (bt_available()) {
+        ESP_LOGI(BT_TAG, "BT is already configured earlier, ignoring");
+        return 0;
+    }
 
 #ifdef BLUETOOTH_UART
   #if BT_OVER_C3_S3
-	bt_cfg.hci_tl_funcs = &s_hci_uart_tl_funcs;
+    bt_cfg.hci_tl_funcs = &s_hci_uart_tl_funcs;
   #endif
 
-	init_uart();
+    init_uart();
 #endif
-	ESP_ERROR_CHECK( esp_bt_controller_init(&bt_cfg) );
+    ESP_ERROR_CHECK( esp_bt_controller_init(&bt_cfg) );
 #if BLUETOOTH_BLE
-	ESP_ERROR_CHECK( esp_bt_controller_enable(ESP_BT_MODE_BLE) );
+    ESP_ERROR_CHECK( esp_bt_controller_enable(ESP_BT_MODE_BLE) );
 #elif BLUETOOTH_BT
-	ESP_ERROR_CHECK( esp_bt_controller_enable(ESP_BT_MODE_CLASSIC_BT) );
+    ESP_ERROR_CHECK( esp_bt_controller_enable(ESP_BT_MODE_CLASSIC_BT) );
 #elif BLUETOOTH_BT_BLE
-	ESP_ERROR_CHECK( esp_bt_controller_enable(ESP_BT_MODE_BTDM) );
+    ESP_ERROR_CHECK( esp_bt_controller_enable(ESP_BT_MODE_BTDM) );
 #endif
 
 #if BLUETOOTH_HCI
-	esp_err_t ret = ESP_OK;
+    esp_err_t ret = ESP_OK;
 
 #if SOC_ESP_NIMBLE_CONTROLLER && (ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 3, 0))
     ble_hci_trans_cfg_hs((ble_hci_trans_rx_cmd_fn *)ble_hs_hci_rx_evt,NULL,
                          (ble_hci_trans_rx_acl_fn *)ble_hs_rx_data,NULL);
 #else
-	ret = esp_vhci_host_register_callback(&vhci_host_cb);
+    ret = esp_vhci_host_register_callback(&vhci_host_cb);
 #endif
 
-	if (ret != ESP_OK) {
-		ESP_LOGE(BT_TAG, "Failed to register VHCI callback");
-		return ret;
-	}
+    if (ret != ESP_OK) {
+        ESP_LOGE(BT_TAG, "Failed to register VHCI callback");
+        return ret;
+    }
 
-	vhci_send_sem = xSemaphoreCreateBinary();
-	if (vhci_send_sem == NULL) {
-		ESP_LOGE(BT_TAG, "Failed to create VHCI send sem");
-		return ESP_ERR_NO_MEM;
-	}
+    vhci_send_sem = xSemaphoreCreateBinary();
+    if (vhci_send_sem == NULL) {
+        ESP_LOGE(BT_TAG, "Failed to create VHCI send sem");
+        return ESP_ERR_NO_MEM;
+    }
 
-	xSemaphoreGive(vhci_send_sem);
+    xSemaphoreGive(vhci_send_sem);
 #endif
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 void deinitialize_bluetooth(void)
 {
-	if (!bt_available())
-		return;
+    if (!bt_available())
+        return;
 
 #if BLUETOOTH_HCI
-	if (vhci_send_sem) {
-		/* Dummy take and give sema before deleting it */
-		xSemaphoreTake(vhci_send_sem, portMAX_DELAY);
-		xSemaphoreGive(vhci_send_sem);
-		vSemaphoreDelete(vhci_send_sem);
-		vhci_send_sem = NULL;
-	}
+    if (vhci_send_sem) {
+        /* Dummy take and give sema before deleting it */
+        xSemaphoreTake(vhci_send_sem, portMAX_DELAY);
+        xSemaphoreGive(vhci_send_sem);
+        vSemaphoreDelete(vhci_send_sem);
+        vhci_send_sem = NULL;
+    }
 #endif
-	esp_bt_controller_disable();
-	esp_bt_controller_deinit();
+    esp_bt_controller_disable();
+    esp_bt_controller_deinit();
 }
 
 uint8_t get_bluetooth_capabilities(void)
 {
-	uint8_t cap = 0;
-	ESP_LOGI(BT_TAG, "- BT/BLE");
+    uint8_t cap = 0;
+    ESP_LOGI(BT_TAG, "- BT/BLE");
 #if BLUETOOTH_HCI
 #if CONFIG_ESP_SPI_HOST_INTERFACE
-	ESP_LOGI(BT_TAG, "   - HCI Over SPI");
-	cap |= ESP_BT_SPI_SUPPORT;
+    ESP_LOGI(BT_TAG, "   - HCI Over SPI");
+    cap |= ESP_BT_SPI_SUPPORT;
 #else
-	ESP_LOGI(BT_TAG, "   - HCI Over SDIO");
-	cap |= ESP_BT_SDIO_SUPPORT;
+    ESP_LOGI(BT_TAG, "   - HCI Over SDIO");
+    cap |= ESP_BT_SDIO_SUPPORT;
 #endif
 #elif BLUETOOTH_UART
-	ESP_LOGI(BT_TAG, "   - HCI Over UART");
-	cap |= ESP_BT_UART_SUPPORT;
+    ESP_LOGI(BT_TAG, "   - HCI Over UART");
+    cap |= ESP_BT_UART_SUPPORT;
 #endif
 
 #if BLUETOOTH_BLE
-	ESP_LOGI(BT_TAG, "   - BLE only");
-	cap |= ESP_BLE_ONLY_SUPPORT;
+    ESP_LOGI(BT_TAG, "   - BLE only");
+    cap |= ESP_BLE_ONLY_SUPPORT;
 #elif BLUETOOTH_BT
-	ESP_LOGI(BT_TAG, "   - BR_EDR only");
-	cap |= ESP_BR_EDR_ONLY_SUPPORT;
+    ESP_LOGI(BT_TAG, "   - BR_EDR only");
+    cap |= ESP_BR_EDR_ONLY_SUPPORT;
 #elif BLUETOOTH_BT_BLE
-	ESP_LOGI(BT_TAG, "   - BT/BLE dual mode");
-	cap |= ESP_BLE_ONLY_SUPPORT | ESP_BR_EDR_ONLY_SUPPORT;
+    ESP_LOGI(BT_TAG, "   - BT/BLE dual mode");
+    cap |= ESP_BLE_ONLY_SUPPORT | ESP_BR_EDR_ONLY_SUPPORT;
 #endif
-	return cap;
+    return cap;
 }
 
 

+ 3 - 3
esp/esp_driver/network_adapter/main/slave_bt.h

@@ -28,7 +28,7 @@
 #endif
 
 #if (defined(CONFIG_IDF_TARGET_ESP32C3) || \
-	 defined(CONFIG_IDF_TARGET_ESP32S3))
+     defined(CONFIG_IDF_TARGET_ESP32S3))
   #define BT_OVER_C3_S3 1
 #endif
 
@@ -80,8 +80,8 @@
 
   #if defined(CONFIG_IDF_TARGET_ESP32)
 
-    #define BT_TX_PIN	        5
-    #define BT_RX_PIN	        18
+    #define BT_TX_PIN           5
+    #define BT_RX_PIN           18
     #define BT_RTS_PIN         19
     #define BT_CTS_PIN         23
 

+ 2382 - 2382
esp/esp_driver/network_adapter/main/slave_control.c

@@ -66,9 +66,9 @@
         }
 
 typedef struct esp_ctrl_msg_cmd {
-	int req_num;
-	esp_err_t (*command_handler)(CtrlMsg *req,
-			CtrlMsg *resp, void *priv_data);
+    int req_num;
+    esp_err_t (*command_handler)(CtrlMsg *req,
+            CtrlMsg *resp, void *priv_data);
 } esp_ctrl_msg_req_t;
 
 static const char* TAG = "slave_ctrl";
@@ -86,11 +86,11 @@ const esp_partition_t* update_partition = NULL;
 static int ota_msg = 0;
 
 static void station_event_handler(void* arg, esp_event_base_t event_base,
-		int32_t event_id, void* event_data);
+        int32_t event_id, void* event_data);
 static void softap_event_handler(void* arg, esp_event_base_t event_base,
-		int32_t event_id, void* event_data);
+        int32_t event_id, void* event_data);
 static void ap_scan_list_event_handler(void* arg, esp_event_base_t event_base,
-		int32_t event_id, void* event_data);
+        int32_t event_id, void* event_data);
 static void station_event_register(void);
 static void softap_event_register(void);
 static void softap_event_unregister(void);
@@ -108,2728 +108,2728 @@ extern volatile uint8_t softap_started;
 /* OTA end timer callback */
 void vTimerCallback( TimerHandle_t xTimer )
 {
-	xTimerDelete(xTimer, 0);
-	esp_restart();
+    xTimerDelete(xTimer, 0);
+    esp_restart();
 }
 
 /* event handler for station connect/disconnect to/from AP */
 static void station_event_handler(void *arg, esp_event_base_t event_base,
-		int32_t event_id, void *event_data)
+        int32_t event_id, void *event_data)
 {
-	/* Event handlers are called from event loop callbacks.
-	 * Please make sure that this callback function is as small as possible to avoid stack overflow */
-
-	if (event_id == WIFI_EVENT_STA_DISCONNECTED) {
-		wifi_event_sta_disconnected_t * disconnected_event =
-			(wifi_event_sta_disconnected_t *) event_data;
-
-		/* Mark as station disconnected */
-		station_connected = false;
-
-		if ((WIFI_HOST_REQUEST_BIT & xEventGroupGetBits(wifi_event_group)) != WIFI_HOST_REQUEST_BIT) {
-			/* Event should not be triggered if event handler is
-			 * called as part of host triggered procedure like sta_disconnect etc
-			 **/
-
-			send_event_data_to_host(CTRL_MSG_ID__Event_StationDisconnectFromAP,
-					disconnected_event, sizeof(wifi_event_sta_disconnected_t));
-			ESP_LOGI(TAG, "Station disconnected, reason[%u]",
-					disconnected_event->reason);
-		} else {
-			ESP_LOGI(TAG, "Manual Wi-Fi disconnected, no event raised");
-		}
-		/* find out reason for failure and
-		 * set corresponding event bit */
-		if (disconnected_event->reason == WIFI_REASON_NO_AP_FOUND)
-			xEventGroupSetBits(wifi_event_group, WIFI_NO_AP_FOUND_BIT);
-		else if ((disconnected_event->reason == WIFI_REASON_CONNECTION_FAIL) ||
-				(disconnected_event->reason == WIFI_REASON_NOT_AUTHED))
-			xEventGroupSetBits(wifi_event_group, WIFI_WRONG_PASSWORD_BIT);
-		else
-			xEventGroupSetBits(wifi_event_group, WIFI_FAIL_BIT);
-	} else if (event_id == WIFI_EVENT_STA_CONNECTED) {
-		if ((WIFI_HOST_REQUEST_BIT & xEventGroupGetBits(wifi_event_group)) != WIFI_HOST_REQUEST_BIT) {
-			/* Event should not be triggered if event handler is
-			 * called as part of host triggered procedure like sta_disconnect etc
-			 **/
-			ESP_LOGI(TAG, "Wifi Connected");
-			send_event_data_to_host(CTRL_MSG_ID__Event_StationConnectedToAP,
-					event_data, sizeof(wifi_event_sta_connected_t));
-		} else {
-			ESP_LOGI(TAG, "Manual Wi-Fi connected, no event raised");
-		}
-		xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_BIT);
-	}
+    /* Event handlers are called from event loop callbacks.
+     * Please make sure that this callback function is as small as possible to avoid stack overflow */
+
+    if (event_id == WIFI_EVENT_STA_DISCONNECTED) {
+        wifi_event_sta_disconnected_t * disconnected_event =
+            (wifi_event_sta_disconnected_t *) event_data;
+
+        /* Mark as station disconnected */
+        station_connected = false;
+
+        if ((WIFI_HOST_REQUEST_BIT & xEventGroupGetBits(wifi_event_group)) != WIFI_HOST_REQUEST_BIT) {
+            /* Event should not be triggered if event handler is
+             * called as part of host triggered procedure like sta_disconnect etc
+             **/
+
+            send_event_data_to_host(CTRL_MSG_ID__Event_StationDisconnectFromAP,
+                    disconnected_event, sizeof(wifi_event_sta_disconnected_t));
+            ESP_LOGI(TAG, "Station disconnected, reason[%u]",
+                    disconnected_event->reason);
+        } else {
+            ESP_LOGI(TAG, "Manual Wi-Fi disconnected, no event raised");
+        }
+        /* find out reason for failure and
+         * set corresponding event bit */
+        if (disconnected_event->reason == WIFI_REASON_NO_AP_FOUND)
+            xEventGroupSetBits(wifi_event_group, WIFI_NO_AP_FOUND_BIT);
+        else if ((disconnected_event->reason == WIFI_REASON_CONNECTION_FAIL) ||
+                (disconnected_event->reason == WIFI_REASON_NOT_AUTHED))
+            xEventGroupSetBits(wifi_event_group, WIFI_WRONG_PASSWORD_BIT);
+        else
+            xEventGroupSetBits(wifi_event_group, WIFI_FAIL_BIT);
+    } else if (event_id == WIFI_EVENT_STA_CONNECTED) {
+        if ((WIFI_HOST_REQUEST_BIT & xEventGroupGetBits(wifi_event_group)) != WIFI_HOST_REQUEST_BIT) {
+            /* Event should not be triggered if event handler is
+             * called as part of host triggered procedure like sta_disconnect etc
+             **/
+            ESP_LOGI(TAG, "Wifi Connected");
+            send_event_data_to_host(CTRL_MSG_ID__Event_StationConnectedToAP,
+                    event_data, sizeof(wifi_event_sta_connected_t));
+        } else {
+            ESP_LOGI(TAG, "Manual Wi-Fi connected, no event raised");
+        }
+        xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_BIT);
+    }
 }
 
 /* event handler for starting softap */
 static void softap_event_handler(void *arg, esp_event_base_t event_base,
-		int32_t event_id, void *event_data)
+        int32_t event_id, void *event_data)
 {
-	/* Please make sure that this callback function is as small as possible */
-	if (event_id == WIFI_EVENT_AP_STACONNECTED) {
-		wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *) event_data;
-		ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",
-				MAC2STR(event->mac), event->aid);
-		send_event_data_to_host(CTRL_MSG_ID__Event_StationConnectedToESPSoftAP,
-				event, sizeof(wifi_event_ap_staconnected_t));
-	} else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {
-		wifi_event_ap_stadisconnected_t *event =
-			(wifi_event_ap_stadisconnected_t *) event_data;
-		ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",
-				MAC2STR(event->mac), event->aid);
-		send_event_data_to_host(CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP,
-				event, sizeof(wifi_event_ap_stadisconnected_t));
-	} else if (event_id == WIFI_EVENT_AP_START) {
-		esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP, (wifi_rxcb_t) wlan_ap_rx_callback);
-		esp_update_ap_mac();
-	} else if (event_id == WIFI_EVENT_AP_STOP) {
-		ESP_LOGI(TAG,"softap stop handler stop");
-		esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP,NULL);
-	}
+    /* Please make sure that this callback function is as small as possible */
+    if (event_id == WIFI_EVENT_AP_STACONNECTED) {
+        wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *) event_data;
+        ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",
+                MAC2STR(event->mac), event->aid);
+        send_event_data_to_host(CTRL_MSG_ID__Event_StationConnectedToESPSoftAP,
+                event, sizeof(wifi_event_ap_staconnected_t));
+    } else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {
+        wifi_event_ap_stadisconnected_t *event =
+            (wifi_event_ap_stadisconnected_t *) event_data;
+        ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",
+                MAC2STR(event->mac), event->aid);
+        send_event_data_to_host(CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP,
+                event, sizeof(wifi_event_ap_stadisconnected_t));
+    } else if (event_id == WIFI_EVENT_AP_START) {
+        esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP, (wifi_rxcb_t) wlan_ap_rx_callback);
+        esp_update_ap_mac();
+    } else if (event_id == WIFI_EVENT_AP_STOP) {
+        ESP_LOGI(TAG,"softap stop handler stop");
+        esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP,NULL);
+    }
 }
 
 /* event handler for scan list of available APs */
 static void ap_scan_list_event_handler(void *arg, esp_event_base_t event_base,
-		int32_t event_id, void *event_data)
+        int32_t event_id, void *event_data)
 {
-	/* Please make sure that this callback function is as small as possible */
-	if ((event_base == WIFI_EVENT) && (event_id == WIFI_EVENT_SCAN_DONE)) {
-		scan_done = true;
-	}
+    /* Please make sure that this callback function is as small as possible */
+    if ((event_base == WIFI_EVENT) && (event_id == WIFI_EVENT_SCAN_DONE)) {
+        scan_done = true;
+    }
 }
 
 /* register station connect/disconnect events */
 static void station_event_register(void)
 {
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_STA_CONNECTED, &station_event_handler, NULL));
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_STA_DISCONNECTED, &station_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_STA_CONNECTED, &station_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_STA_DISCONNECTED, &station_event_handler, NULL));
 }
 
 /* register softap start/stop, station connect/disconnect events */
 static void softap_event_register(void)
 {
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_AP_START, &softap_event_handler, NULL));
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_AP_STOP, &softap_event_handler, NULL));
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_AP_STACONNECTED, &softap_event_handler, NULL));
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_AP_STADISCONNECTED, &softap_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_AP_START, &softap_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_AP_STOP, &softap_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_AP_STACONNECTED, &softap_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_AP_STADISCONNECTED, &softap_event_handler, NULL));
 }
 
 /* unregister softap start/stop, station connect/disconnect events */
 static void softap_event_unregister(void)
 {
-	ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
-				WIFI_EVENT_AP_START, &softap_event_handler));
-	ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
-				WIFI_EVENT_AP_STOP, &softap_event_handler));
-	ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
-				WIFI_EVENT_AP_STACONNECTED, &softap_event_handler));
-	ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
-				WIFI_EVENT_AP_STADISCONNECTED, &softap_event_handler));
+    ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
+                WIFI_EVENT_AP_START, &softap_event_handler));
+    ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
+                WIFI_EVENT_AP_STOP, &softap_event_handler));
+    ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
+                WIFI_EVENT_AP_STACONNECTED, &softap_event_handler));
+    ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
+                WIFI_EVENT_AP_STADISCONNECTED, &softap_event_handler));
 }
 
 /* register scan ap list */
 static void ap_scan_list_event_register(void)
 {
-	ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
-				WIFI_EVENT_SCAN_DONE, &ap_scan_list_event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT,
+                WIFI_EVENT_SCAN_DONE, &ap_scan_list_event_handler, NULL));
 }
 
 /* unregister scan ap list */
 static void ap_scan_list_event_unregister(void)
 {
-	ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
-				WIFI_EVENT_SCAN_DONE, &ap_scan_list_event_handler));
+    ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,
+                WIFI_EVENT_SCAN_DONE, &ap_scan_list_event_handler));
 }
 
 /* Function converts mac string to byte stream */
 static esp_err_t convert_mac_to_bytes(uint8_t *out, char *s)
 {
-	int mac[MAC_LEN] = {0};
-	int num_bytes = 0;
-	if (!s || (strlen(s) < MAC_STR_LEN))  {
-		return ESP_FAIL;
-	}
-	num_bytes =  sscanf(s, "%2x:%2x:%2x:%2x:%2x:%2x",
-			&mac[0],&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
-	if ((num_bytes < MAC_LEN)  ||
-	    (mac[0] > 0xFF) ||
-	    (mac[1] > 0xFF) ||
-	    (mac[2] > 0xFF) ||
-	    (mac[3] > 0xFF) ||
-	    (mac[4] > 0xFF) ||
-	    (mac[5] > 0xFF)) {
-		return ESP_FAIL;
-	}
-	out[0] = mac[0]&0xff;
-	out[1] = mac[1]&0xff;
-	out[2] = mac[2]&0xff;
-	out[3] = mac[3]&0xff;
-	out[4] = mac[4]&0xff;
-	out[5] = mac[5]&0xff;
-	return ESP_OK;
+    int mac[MAC_LEN] = {0};
+    int num_bytes = 0;
+    if (!s || (strlen(s) < MAC_STR_LEN))  {
+        return ESP_FAIL;
+    }
+    num_bytes =  sscanf(s, "%2x:%2x:%2x:%2x:%2x:%2x",
+            &mac[0],&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
+    if ((num_bytes < MAC_LEN)  ||
+        (mac[0] > 0xFF) ||
+        (mac[1] > 0xFF) ||
+        (mac[2] > 0xFF) ||
+        (mac[3] > 0xFF) ||
+        (mac[4] > 0xFF) ||
+        (mac[5] > 0xFF)) {
+        return ESP_FAIL;
+    }
+    out[0] = mac[0]&0xff;
+    out[1] = mac[1]&0xff;
+    out[2] = mac[2]&0xff;
+    out[3] = mac[3]&0xff;
+    out[4] = mac[4]&0xff;
+    out[5] = mac[5]&0xff;
+    return ESP_OK;
 }
 
 /* Function returns mac address of station/softap */
 static esp_err_t req_get_mac_address_handler(CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	uint8_t mac[MAC_LEN] = {0};
-	char mac_str[BSSID_LENGTH] = "";
-	CtrlMsgRespGetMacAddress *resp_payload = NULL;
-
-	if (!req || !resp || !req->req_get_mac_address) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetMacAddress *)
-		calloc(1,sizeof(CtrlMsgRespGetMacAddress));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__get_mac_address__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_MAC_ADDRESS;
-	resp->resp_get_mac_address = resp_payload;
-
-	if (req->req_get_mac_address->mode == WIFI_MODE_STA) {
-		ret = esp_wifi_get_mac(ESP_IF_WIFI_STA , mac);
-		ESP_LOGI(TAG,"Get station mac address");
-		if (ret) {
-			ESP_LOGE(TAG,"Error in getting MAC of ESP Station %d", ret);
-			goto err;
-		}
-	} else if (req->req_get_mac_address->mode == WIFI_MODE_AP) {
-		ret = esp_wifi_get_mac(ESP_IF_WIFI_AP, mac);
-		ESP_LOGI(TAG,"Get softap mac address");
-		if (ret) {
-			ESP_LOGE(TAG,"Error in getting MAC of ESP softap %d", ret);
-			goto err;
-		}
-	} else {
-		ESP_LOGI(TAG,"Invalid get mac msg type");
-		goto err;
-	}
-
-	snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(mac));
-	ESP_LOGI(TAG,"mac [%s] ", mac_str);
-
-	resp_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
-	if (!resp_payload->mac.len) {
-		ESP_LOGE(TAG, "Invalid MAC address length");
-		goto err;
-	}
-	resp_payload->mac.data = (uint8_t *)strndup(mac_str, BSSID_LENGTH);
-	if (!resp_payload->mac.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for MAC address");
-		goto err;
-	}
-
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    uint8_t mac[MAC_LEN] = {0};
+    char mac_str[BSSID_LENGTH] = "";
+    CtrlMsgRespGetMacAddress *resp_payload = NULL;
+
+    if (!req || !resp || !req->req_get_mac_address) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetMacAddress *)
+        calloc(1,sizeof(CtrlMsgRespGetMacAddress));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__get_mac_address__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_MAC_ADDRESS;
+    resp->resp_get_mac_address = resp_payload;
+
+    if (req->req_get_mac_address->mode == WIFI_MODE_STA) {
+        ret = esp_wifi_get_mac(ESP_IF_WIFI_STA , mac);
+        ESP_LOGI(TAG,"Get station mac address");
+        if (ret) {
+            ESP_LOGE(TAG,"Error in getting MAC of ESP Station %d", ret);
+            goto err;
+        }
+    } else if (req->req_get_mac_address->mode == WIFI_MODE_AP) {
+        ret = esp_wifi_get_mac(ESP_IF_WIFI_AP, mac);
+        ESP_LOGI(TAG,"Get softap mac address");
+        if (ret) {
+            ESP_LOGE(TAG,"Error in getting MAC of ESP softap %d", ret);
+            goto err;
+        }
+    } else {
+        ESP_LOGI(TAG,"Invalid get mac msg type");
+        goto err;
+    }
+
+    snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(mac));
+    ESP_LOGI(TAG,"mac [%s] ", mac_str);
+
+    resp_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
+    if (!resp_payload->mac.len) {
+        ESP_LOGE(TAG, "Invalid MAC address length");
+        goto err;
+    }
+    resp_payload->mac.data = (uint8_t *)strndup(mac_str, BSSID_LENGTH);
+    if (!resp_payload->mac.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for MAC address");
+        goto err;
+    }
+
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function returns wifi mode */
 static esp_err_t req_get_wifi_mode_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	wifi_mode_t mode = 0;
-	CtrlMsgRespGetMode *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetMode *)calloc(1,sizeof(CtrlMsgRespGetMode));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__get_mode__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_WIFI_MODE;
-	resp->resp_get_wifi_mode = resp_payload;
-
-	ret = esp_wifi_get_mode(&mode);
-	if (ret) {
-		ESP_LOGE(TAG, "Failed to get wifi mode %d", ret);
-		goto err;
-	}
-
-	resp_payload->mode = mode;
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    wifi_mode_t mode = 0;
+    CtrlMsgRespGetMode *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetMode *)calloc(1,sizeof(CtrlMsgRespGetMode));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__get_mode__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_WIFI_MODE;
+    resp->resp_get_wifi_mode = resp_payload;
+
+    ret = esp_wifi_get_mode(&mode);
+    if (ret) {
+        ESP_LOGE(TAG, "Failed to get wifi mode %d", ret);
+        goto err;
+    }
+
+    resp_payload->mode = mode;
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function sets wifi mode */
 static esp_err_t req_set_wifi_mode_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	wifi_mode_t num = 0;
-	CtrlMsgRespSetMode *resp_payload = NULL;
-
-	if (!req || !resp || !req->req_set_wifi_mode) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	if (req->req_set_wifi_mode->mode >= WIFI_MODE_MAX) {
-		ESP_LOGE(TAG, "Invalid wifi mode");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespSetMode *)calloc(1,sizeof(CtrlMsgRespSetMode));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__set_mode__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_WIFI_MODE;
-	resp->resp_set_wifi_mode = resp_payload;
-
-	num = req->req_set_wifi_mode->mode;
-	ret = esp_wifi_set_mode(num);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to set mode");
-		goto err;
-	}
-	ESP_LOGI(TAG,"Set wifi mode %d ", num);
-
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    wifi_mode_t num = 0;
+    CtrlMsgRespSetMode *resp_payload = NULL;
+
+    if (!req || !resp || !req->req_set_wifi_mode) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    if (req->req_set_wifi_mode->mode >= WIFI_MODE_MAX) {
+        ESP_LOGE(TAG, "Invalid wifi mode");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespSetMode *)calloc(1,sizeof(CtrlMsgRespSetMode));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__set_mode__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_WIFI_MODE;
+    resp->resp_set_wifi_mode = resp_payload;
+
+    num = req->req_set_wifi_mode->mode;
+    ret = esp_wifi_set_mode(num);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to set mode");
+        goto err;
+    }
+    ESP_LOGI(TAG,"Set wifi mode %d ", num);
+
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function connects to received AP configuration. */
 static esp_err_t req_connect_ap_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	char mac_str[BSSID_LENGTH] = "";
-	uint8_t mac[MAC_LEN] = {0};
-	esp_err_t ret = ESP_OK;
-	wifi_config_t *wifi_cfg = NULL;
-	CtrlMsgRespConnectAP *resp_payload = NULL;
-	EventBits_t bits = {0};
-	int retry = 0;
+    char mac_str[BSSID_LENGTH] = "";
+    uint8_t mac[MAC_LEN] = {0};
+    esp_err_t ret = ESP_OK;
+    wifi_config_t *wifi_cfg = NULL;
+    CtrlMsgRespConnectAP *resp_payload = NULL;
+    EventBits_t bits = {0};
+    int retry = 0;
 #if WIFI_DUALBAND_SUPPORT
-	wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
-	wifi_band_mode_t requested_band_mode = 0; // 0 is currently an invalid value
+    wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
+    wifi_band_mode_t requested_band_mode = 0; // 0 is currently an invalid value
 #endif
 
-	if (!req || !resp || !req->req_connect_ap) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespConnectAP *)
-		calloc(1,sizeof(CtrlMsgRespConnectAP));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__connect_ap__init (resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_CONNECT_AP;
-	resp->resp_connect_ap = resp_payload;
-	resp_payload->resp = SUCCESS;
-
-	if (!event_registered) {
-		wifi_event_group = xEventGroupCreate();
-		event_registered = true;
-		station_event_register();
-	}
-	xEventGroupSetBits(wifi_event_group, WIFI_HOST_REQUEST_BIT);
-
-	if (station_connected) {
-		/* As station is already connected, disconnect from the AP
-		 * before connecting to requested AP */
-		ret = esp_wifi_disconnect();
-		if (ret) {
-			ESP_LOGE(TAG, "Failed to disconnect");
-			resp_payload->resp = ret;
-			goto err;
-		}
-		xEventGroupWaitBits(wifi_event_group,
-			(WIFI_FAIL_BIT),
-			pdFALSE,
-			pdFALSE,
-			STA_MODE_TIMEOUT);
-		ESP_LOGI(TAG, "Disconnected from previously connected AP");
-		esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, NULL);
-		xEventGroupClearBits(wifi_event_group,
-			(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT |
-			 WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
-		station_connected = false;
-	}
-
-	if (softap_started) {
-		ret = esp_wifi_set_mode(WIFI_MODE_APSTA);
-		ESP_LOGI(TAG,"softap+station mode set");
-	} else {
-		ret = esp_wifi_set_mode(WIFI_MODE_STA);
-		ESP_LOGI(TAG,"station mode set");
-	}
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to set mode");
-		resp_payload->resp = ret;
-		goto err;
-	}
-
-	wifi_cfg = (wifi_config_t *)calloc(1,sizeof(wifi_config_t));
-	if (!wifi_cfg) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		resp_payload->resp = FAILURE;
-		goto err;
-	}
-
-	if (req->req_connect_ap->ssid) {
-		strncpy((char *)wifi_cfg->sta.ssid, req->req_connect_ap->ssid,
-				min(sizeof(wifi_cfg->sta.ssid),
-					strlen(req->req_connect_ap->ssid)+1));
-	}
-	if (req->req_connect_ap->pwd) {
-		strncpy((char *)wifi_cfg->sta.password, req->req_connect_ap->pwd,
-				min(sizeof(wifi_cfg->sta.password),
-					strlen((char *)req->req_connect_ap->pwd)+1));
-	}
-	if ((req->req_connect_ap->bssid) &&
-	    (strlen((char *)req->req_connect_ap->bssid))) {
-		ret = convert_mac_to_bytes(wifi_cfg->sta.bssid, req->req_connect_ap->bssid);
-		if (ret) {
-			ESP_LOGE(TAG, "Failed to convert BSSID into bytes");
-			resp_payload->resp = ret;
-			goto err;
-		}
-		wifi_cfg->sta.bssid_set = true;
-	}
-	if (req->req_connect_ap->is_wpa3_supported) {
-		wifi_cfg->sta.pmf_cfg.capable = true;
-		wifi_cfg->sta.pmf_cfg.required = false;
-	}
-	if (req->req_connect_ap->listen_interval >= 0) {
-		wifi_cfg->sta.listen_interval = req->req_connect_ap->listen_interval;
-	}
+    if (!req || !resp || !req->req_connect_ap) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespConnectAP *)
+        calloc(1,sizeof(CtrlMsgRespConnectAP));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__connect_ap__init (resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_CONNECT_AP;
+    resp->resp_connect_ap = resp_payload;
+    resp_payload->resp = SUCCESS;
+
+    if (!event_registered) {
+        wifi_event_group = xEventGroupCreate();
+        event_registered = true;
+        station_event_register();
+    }
+    xEventGroupSetBits(wifi_event_group, WIFI_HOST_REQUEST_BIT);
+
+    if (station_connected) {
+        /* As station is already connected, disconnect from the AP
+         * before connecting to requested AP */
+        ret = esp_wifi_disconnect();
+        if (ret) {
+            ESP_LOGE(TAG, "Failed to disconnect");
+            resp_payload->resp = ret;
+            goto err;
+        }
+        xEventGroupWaitBits(wifi_event_group,
+            (WIFI_FAIL_BIT),
+            pdFALSE,
+            pdFALSE,
+            STA_MODE_TIMEOUT);
+        ESP_LOGI(TAG, "Disconnected from previously connected AP");
+        esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, NULL);
+        xEventGroupClearBits(wifi_event_group,
+            (WIFI_CONNECTED_BIT | WIFI_FAIL_BIT |
+             WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
+        station_connected = false;
+    }
+
+    if (softap_started) {
+        ret = esp_wifi_set_mode(WIFI_MODE_APSTA);
+        ESP_LOGI(TAG,"softap+station mode set");
+    } else {
+        ret = esp_wifi_set_mode(WIFI_MODE_STA);
+        ESP_LOGI(TAG,"station mode set");
+    }
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to set mode");
+        resp_payload->resp = ret;
+        goto err;
+    }
+
+    wifi_cfg = (wifi_config_t *)calloc(1,sizeof(wifi_config_t));
+    if (!wifi_cfg) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        resp_payload->resp = FAILURE;
+        goto err;
+    }
+
+    if (req->req_connect_ap->ssid) {
+        strncpy((char *)wifi_cfg->sta.ssid, req->req_connect_ap->ssid,
+                min(sizeof(wifi_cfg->sta.ssid),
+                    strlen(req->req_connect_ap->ssid)+1));
+    }
+    if (req->req_connect_ap->pwd) {
+        strncpy((char *)wifi_cfg->sta.password, req->req_connect_ap->pwd,
+                min(sizeof(wifi_cfg->sta.password),
+                    strlen((char *)req->req_connect_ap->pwd)+1));
+    }
+    if ((req->req_connect_ap->bssid) &&
+        (strlen((char *)req->req_connect_ap->bssid))) {
+        ret = convert_mac_to_bytes(wifi_cfg->sta.bssid, req->req_connect_ap->bssid);
+        if (ret) {
+            ESP_LOGE(TAG, "Failed to convert BSSID into bytes");
+            resp_payload->resp = ret;
+            goto err;
+        }
+        wifi_cfg->sta.bssid_set = true;
+    }
+    if (req->req_connect_ap->is_wpa3_supported) {
+        wifi_cfg->sta.pmf_cfg.capable = true;
+        wifi_cfg->sta.pmf_cfg.required = false;
+    }
+    if (req->req_connect_ap->listen_interval >= 0) {
+        wifi_cfg->sta.listen_interval = req->req_connect_ap->listen_interval;
+    }
 #if WIFI_DUALBAND_SUPPORT
-	// get current band_mode
-	ret = esp_wifi_get_band_mode(&band_mode);
-	if (ret != ESP_OK) {
-		ESP_LOGW(TAG, "failed to get band mode, defaulting to AUTO");
-		band_mode = WIFI_BAND_MODE_AUTO;
-	}
-
-	// get requested band mode
-	if (req->req_connect_ap->band_mode) {
-		requested_band_mode = req->req_connect_ap->band_mode;
-	} else {
-		// requested band mode not set: default to auto
-		requested_band_mode = WIFI_BAND_MODE_AUTO;
-	}
-
-	// compare and update current band mode, if needed
-	if (band_mode != requested_band_mode) {
-		ret = esp_wifi_set_band_mode(requested_band_mode);
-		if (ret) {
-			ESP_LOGE(TAG, "failed to set band mode");
-			goto err;
-		}
-		band_mode = requested_band_mode;
-	}
+    // get current band_mode
+    ret = esp_wifi_get_band_mode(&band_mode);
+    if (ret != ESP_OK) {
+        ESP_LOGW(TAG, "failed to get band mode, defaulting to AUTO");
+        band_mode = WIFI_BAND_MODE_AUTO;
+    }
+
+    // get requested band mode
+    if (req->req_connect_ap->band_mode) {
+        requested_band_mode = req->req_connect_ap->band_mode;
+    } else {
+        // requested band mode not set: default to auto
+        requested_band_mode = WIFI_BAND_MODE_AUTO;
+    }
+
+    // compare and update current band mode, if needed
+    if (band_mode != requested_band_mode) {
+        ret = esp_wifi_set_band_mode(requested_band_mode);
+        if (ret) {
+            ESP_LOGE(TAG, "failed to set band mode");
+            goto err;
+        }
+        band_mode = requested_band_mode;
+    }
 #endif
 
-	/* Make sure that we connect to strongest signal, when multiple SSID with
-	 * the same name. This should take a small extra time to search for all SSIDs,
-	 * but with this, there will be hige performace gain on data throughput
-	 */
-	wifi_cfg->sta.scan_method = WIFI_ALL_CHANNEL_SCAN;
-	wifi_cfg->sta.sort_method = WIFI_CONNECT_AP_BY_SIGNAL;
-
-	ret = esp_wifi_get_mac(ESP_IF_WIFI_STA , mac);
-	ESP_LOGI(TAG,"Get station mac address");
-	if (ret) {
-		ESP_LOGE(TAG,"Error in getting MAC of ESP Station %d", ret);
-		resp_payload->resp = ret;
-		goto err;
-	}
-	snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(mac));
-	ESP_LOGI(TAG,"mac [%s] ", mac_str);
-
-	resp_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
-	if (!resp_payload->mac.len) {
-		ESP_LOGE(TAG, "Invalid MAC address length");
-		resp_payload->resp = FAILURE;
-		goto err;
-	}
-	resp_payload->mac.data = (uint8_t *)strndup(mac_str, BSSID_LENGTH);
-	if (!resp_payload->mac.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for MAC address");
-		resp_payload->resp = FAILURE;
-		goto err;
-	}
-
-	do {
-		ret = esp_wifi_set_config(ESP_IF_WIFI_STA, wifi_cfg);
-		if (ret == ESP_ERR_WIFI_PASSWORD) {
-			ESP_LOGE(TAG,"Invalid password");
-			resp_payload->resp = ret;
-			goto err;
-		} else if (ret) {
-			resp_payload->resp = ret;
-			ESP_LOGE(TAG, "Failed to set AP config");
-			goto err;
-		}
-
-		ret = esp_wifi_connect();
-		if (ret) {
-			ESP_LOGI(TAG, "Failed to connect to SSID:'%s', password:'%s'",
-					req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)",
-					req->req_connect_ap->pwd ? req->req_connect_ap->pwd : "(null)");
-		}
-
-		if (event_registered)
-			bits = xEventGroupWaitBits(wifi_event_group,
-					(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT |
-					 WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT),
-					pdFALSE,
-					pdFALSE,
-					STA_MODE_TIMEOUT);
-		if (bits & WIFI_CONNECTED_BIT) {
-			ESP_LOGI(TAG, "connected to ap SSID:'%s', password:'%s'",
-					req->req_connect_ap->ssid ? req->req_connect_ap->ssid :"(null)",
-					req->req_connect_ap->pwd ? req->req_connect_ap->pwd :"(null)");
-			station_connected = true;
-			esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, (wifi_rxcb_t) wlan_sta_rx_callback);
-			ret = SUCCESS;
-			break;
-		} else {
-			if (bits & WIFI_NO_AP_FOUND_BIT) {
-				ESP_LOGI(TAG, "No AP available as SSID:'%s'",
-						req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)");
-				resp_payload->resp = CTRL__STATUS__No_AP_Found;
-			} else if (bits & WIFI_WRONG_PASSWORD_BIT) {
-				ESP_LOGI(TAG, "Password incorrect for SSID:'%s', password:'%s'",
-						req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)",
-						req->req_connect_ap->pwd ? req->req_connect_ap->pwd :"(null)");
-				resp_payload->resp = CTRL__STATUS__Connection_Fail;
-			} else if (bits & WIFI_FAIL_BIT) {
-				ESP_LOGI(TAG, "Failed to connect to SSID:'%s', password:'%s'",
-						req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)",
-						req->req_connect_ap->pwd ? req->req_connect_ap->pwd : "(null)");
-			} else {
-				ESP_LOGE(TAG, "STA_MODE_TIMEOUT occured");
-			}
-			esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, NULL);
-		}
-
-		if (event_registered)
-			xEventGroupClearBits(wifi_event_group,
-					(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT |
-					 WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
-		retry++;
-
-	} while(retry < MAX_STA_CONNECT_ATTEMPTS);
+    /* Make sure that we connect to strongest signal, when multiple SSID with
+     * the same name. This should take a small extra time to search for all SSIDs,
+     * but with this, there will be hige performace gain on data throughput
+     */
+    wifi_cfg->sta.scan_method = WIFI_ALL_CHANNEL_SCAN;
+    wifi_cfg->sta.sort_method = WIFI_CONNECT_AP_BY_SIGNAL;
+
+    ret = esp_wifi_get_mac(ESP_IF_WIFI_STA , mac);
+    ESP_LOGI(TAG,"Get station mac address");
+    if (ret) {
+        ESP_LOGE(TAG,"Error in getting MAC of ESP Station %d", ret);
+        resp_payload->resp = ret;
+        goto err;
+    }
+    snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(mac));
+    ESP_LOGI(TAG,"mac [%s] ", mac_str);
+
+    resp_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
+    if (!resp_payload->mac.len) {
+        ESP_LOGE(TAG, "Invalid MAC address length");
+        resp_payload->resp = FAILURE;
+        goto err;
+    }
+    resp_payload->mac.data = (uint8_t *)strndup(mac_str, BSSID_LENGTH);
+    if (!resp_payload->mac.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for MAC address");
+        resp_payload->resp = FAILURE;
+        goto err;
+    }
+
+    do {
+        ret = esp_wifi_set_config(ESP_IF_WIFI_STA, wifi_cfg);
+        if (ret == ESP_ERR_WIFI_PASSWORD) {
+            ESP_LOGE(TAG,"Invalid password");
+            resp_payload->resp = ret;
+            goto err;
+        } else if (ret) {
+            resp_payload->resp = ret;
+            ESP_LOGE(TAG, "Failed to set AP config");
+            goto err;
+        }
+
+        ret = esp_wifi_connect();
+        if (ret) {
+            ESP_LOGI(TAG, "Failed to connect to SSID:'%s', password:'%s'",
+                    req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)",
+                    req->req_connect_ap->pwd ? req->req_connect_ap->pwd : "(null)");
+        }
+
+        if (event_registered)
+            bits = xEventGroupWaitBits(wifi_event_group,
+                    (WIFI_CONNECTED_BIT | WIFI_FAIL_BIT |
+                     WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT),
+                    pdFALSE,
+                    pdFALSE,
+                    STA_MODE_TIMEOUT);
+        if (bits & WIFI_CONNECTED_BIT) {
+            ESP_LOGI(TAG, "connected to ap SSID:'%s', password:'%s'",
+                    req->req_connect_ap->ssid ? req->req_connect_ap->ssid :"(null)",
+                    req->req_connect_ap->pwd ? req->req_connect_ap->pwd :"(null)");
+            station_connected = true;
+            esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, (wifi_rxcb_t) wlan_sta_rx_callback);
+            ret = SUCCESS;
+            break;
+        } else {
+            if (bits & WIFI_NO_AP_FOUND_BIT) {
+                ESP_LOGI(TAG, "No AP available as SSID:'%s'",
+                        req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)");
+                resp_payload->resp = CTRL__STATUS__No_AP_Found;
+            } else if (bits & WIFI_WRONG_PASSWORD_BIT) {
+                ESP_LOGI(TAG, "Password incorrect for SSID:'%s', password:'%s'",
+                        req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)",
+                        req->req_connect_ap->pwd ? req->req_connect_ap->pwd :"(null)");
+                resp_payload->resp = CTRL__STATUS__Connection_Fail;
+            } else if (bits & WIFI_FAIL_BIT) {
+                ESP_LOGI(TAG, "Failed to connect to SSID:'%s', password:'%s'",
+                        req->req_connect_ap->ssid ? req->req_connect_ap->ssid : "(null)",
+                        req->req_connect_ap->pwd ? req->req_connect_ap->pwd : "(null)");
+            } else {
+                ESP_LOGE(TAG, "STA_MODE_TIMEOUT occured");
+            }
+            esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, NULL);
+        }
+
+        if (event_registered)
+            xEventGroupClearBits(wifi_event_group,
+                    (WIFI_CONNECTED_BIT | WIFI_FAIL_BIT |
+                     WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
+        retry++;
+
+    } while(retry < MAX_STA_CONNECT_ATTEMPTS);
 
 err:
-	if (station_connected) {
+    if (station_connected) {
 #if WIFI_DUALBAND_SUPPORT
-		resp_payload->band_mode = band_mode;
+        resp_payload->band_mode = band_mode;
 #endif
-		ESP_LOGI(TAG, "%s:%u Set resp to Success",__func__,__LINE__);
-		resp_payload->resp = SUCCESS;
-	} else {
-		ESP_LOGI(TAG, "%s:%u Set resp[%"PRId32"]",__func__,__LINE__, resp_payload->resp);
-		mem_free(resp_payload->mac.data);
-		resp_payload->mac.len = 0;
-	}
-	mem_free(wifi_cfg);
-
-	if (event_registered)
-		xEventGroupClearBits(wifi_event_group,
-			(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_HOST_REQUEST_BIT |
-			 WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
-	return ESP_OK;
+        ESP_LOGI(TAG, "%s:%u Set resp to Success",__func__,__LINE__);
+        resp_payload->resp = SUCCESS;
+    } else {
+        ESP_LOGI(TAG, "%s:%u Set resp[%"PRId32"]",__func__,__LINE__, resp_payload->resp);
+        mem_free(resp_payload->mac.data);
+        resp_payload->mac.len = 0;
+    }
+    mem_free(wifi_cfg);
+
+    if (event_registered)
+        xEventGroupClearBits(wifi_event_group,
+            (WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_HOST_REQUEST_BIT |
+             WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
+    return ESP_OK;
 }
 
 /* Function sends connected AP's configuration */
 static esp_err_t req_get_ap_config_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	credentials_t credentials = {0};
-	wifi_ap_record_t *ap_info = NULL;
-	CtrlMsgRespGetAPConfig *resp_payload = NULL;
+    esp_err_t ret = ESP_OK;
+    credentials_t credentials = {0};
+    wifi_ap_record_t *ap_info = NULL;
+    CtrlMsgRespGetAPConfig *resp_payload = NULL;
 #if WIFI_DUALBAND_SUPPORT
-	wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
+    wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
 #endif
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	ap_info = (wifi_ap_record_t *)calloc(1,sizeof(wifi_ap_record_t));
-	if (!ap_info) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	resp_payload = (CtrlMsgRespGetAPConfig *)
-		calloc(1,sizeof(CtrlMsgRespGetAPConfig));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		mem_free(ap_info);
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__get_apconfig__init (resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_AP_CONFIG;
-	resp->resp_get_ap_config = resp_payload;
-
-	if (!station_connected) {
-		ESP_LOGI(TAG,"ESP32 station is not connected with AP, can't get AP config");
-		resp_payload->resp = CTRL__STATUS__Not_Connected;
-		goto err;
-	}
-
-	ret = esp_wifi_sta_get_ap_info(ap_info);
-	if (ret == ESP_ERR_WIFI_NOT_CONNECT) {
-		ESP_LOGI(TAG,"Disconnected from previously connected AP");
-		resp_payload->resp = CTRL__STATUS__Not_Connected;
-		goto err;
-	} else if (ret) {
-		ESP_LOGE(TAG,"Failed to get AP config %d \n", ret);
-		resp_payload->resp = FAILURE;
-		goto err;
-	}
-
-	snprintf((char *)credentials.bssid,BSSID_LENGTH,MACSTR,MAC2STR(ap_info->bssid));
-	if (strlen((char *)ap_info->ssid)) {
-		strncpy((char *)credentials.ssid, (char *)ap_info->ssid,
-				min(sizeof(credentials.ssid), strlen((char *)ap_info->ssid)+1));
-	}
-	credentials.rssi = ap_info->rssi;
-	credentials.chnl = ap_info->primary;
-	credentials.ecn = ap_info->authmode;
-	resp_payload->ssid.len = min(strlen((char *)credentials.ssid)+1,
-			sizeof(credentials.ssid));
-	if (!resp_payload->ssid.len) {
-		ESP_LOGE(TAG, "Invalid SSID length");
-		goto err;
-	}
-	resp_payload->ssid.data = (uint8_t *)strndup((char *)credentials.ssid,
-			min(sizeof(credentials.ssid), strlen((char *)credentials.ssid) + 1));
-	if (!resp_payload->ssid.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for SSID");
-		goto err;
-	}
-
-	resp_payload->bssid.len = strnlen((char *)credentials.bssid,
-			sizeof(credentials.bssid));
-	if (!resp_payload->bssid.len) {
-		ESP_LOGE(TAG, "Invalid BSSID length");
-		goto err;
-	}
-	resp_payload->bssid.data = (uint8_t *)strndup((char *)credentials.bssid,
-			BSSID_LENGTH);
-	if (!resp_payload->bssid.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for BSSID");
-		goto err;
-	}
-
-	resp_payload->rssi = credentials.rssi;
-	resp_payload->chnl = credentials.chnl;
-	resp_payload->sec_prot = credentials.ecn;
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    ap_info = (wifi_ap_record_t *)calloc(1,sizeof(wifi_ap_record_t));
+    if (!ap_info) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    resp_payload = (CtrlMsgRespGetAPConfig *)
+        calloc(1,sizeof(CtrlMsgRespGetAPConfig));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        mem_free(ap_info);
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__get_apconfig__init (resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_AP_CONFIG;
+    resp->resp_get_ap_config = resp_payload;
+
+    if (!station_connected) {
+        ESP_LOGI(TAG,"ESP32 station is not connected with AP, can't get AP config");
+        resp_payload->resp = CTRL__STATUS__Not_Connected;
+        goto err;
+    }
+
+    ret = esp_wifi_sta_get_ap_info(ap_info);
+    if (ret == ESP_ERR_WIFI_NOT_CONNECT) {
+        ESP_LOGI(TAG,"Disconnected from previously connected AP");
+        resp_payload->resp = CTRL__STATUS__Not_Connected;
+        goto err;
+    } else if (ret) {
+        ESP_LOGE(TAG,"Failed to get AP config %d \n", ret);
+        resp_payload->resp = FAILURE;
+        goto err;
+    }
+
+    snprintf((char *)credentials.bssid,BSSID_LENGTH,MACSTR,MAC2STR(ap_info->bssid));
+    if (strlen((char *)ap_info->ssid)) {
+        strncpy((char *)credentials.ssid, (char *)ap_info->ssid,
+                min(sizeof(credentials.ssid), strlen((char *)ap_info->ssid)+1));
+    }
+    credentials.rssi = ap_info->rssi;
+    credentials.chnl = ap_info->primary;
+    credentials.ecn = ap_info->authmode;
+    resp_payload->ssid.len = min(strlen((char *)credentials.ssid)+1,
+            sizeof(credentials.ssid));
+    if (!resp_payload->ssid.len) {
+        ESP_LOGE(TAG, "Invalid SSID length");
+        goto err;
+    }
+    resp_payload->ssid.data = (uint8_t *)strndup((char *)credentials.ssid,
+            min(sizeof(credentials.ssid), strlen((char *)credentials.ssid) + 1));
+    if (!resp_payload->ssid.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for SSID");
+        goto err;
+    }
+
+    resp_payload->bssid.len = strnlen((char *)credentials.bssid,
+            sizeof(credentials.bssid));
+    if (!resp_payload->bssid.len) {
+        ESP_LOGE(TAG, "Invalid BSSID length");
+        goto err;
+    }
+    resp_payload->bssid.data = (uint8_t *)strndup((char *)credentials.bssid,
+            BSSID_LENGTH);
+    if (!resp_payload->bssid.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for BSSID");
+        goto err;
+    }
+
+    resp_payload->rssi = credentials.rssi;
+    resp_payload->chnl = credentials.chnl;
+    resp_payload->sec_prot = credentials.ecn;
 #if WIFI_DUALBAND_SUPPORT
-	// get current band_mode
-	ret = esp_wifi_get_band_mode(&band_mode);
-	if (ret != ESP_OK) {
-		ESP_LOGW(TAG, "failed to get band mode, defaulting to AUTO");
-		band_mode = WIFI_BAND_MODE_AUTO;
-	}
-	resp_payload->band_mode = band_mode;
+    // get current band_mode
+    ret = esp_wifi_get_band_mode(&band_mode);
+    if (ret != ESP_OK) {
+        ESP_LOGW(TAG, "failed to get band mode, defaulting to AUTO");
+        band_mode = WIFI_BAND_MODE_AUTO;
+    }
+    resp_payload->band_mode = band_mode;
 #endif
-	resp_payload->resp = SUCCESS;
+    resp_payload->resp = SUCCESS;
 
 err:
-	mem_free(ap_info);
-	return ESP_OK;
+    mem_free(ap_info);
+    return ESP_OK;
 }
 
 /* Functions disconnects from AP. */
 static esp_err_t req_disconnect_ap_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespGetStatus *resp_payload = NULL;
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetStatus *)
-		calloc(1,sizeof(CtrlMsgRespGetStatus));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__get_status__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_DISCONNECT_AP;
-	resp->resp_disconnect_ap = resp_payload;
-
-	if (!station_connected) {
-		ESP_LOGI(TAG,"ESP32 station is not connected with AP, can't disconnect from AP");
-		goto err;
-	}
-
-	if (event_registered) {
-		xEventGroupSetBits(wifi_event_group, WIFI_HOST_REQUEST_BIT);
-	}
-	ret = esp_wifi_disconnect();
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to disconnect");
-		goto err;
-	}
-	if (event_registered)
-		xEventGroupWaitBits(wifi_event_group,
-			(WIFI_FAIL_BIT),
-			pdFALSE,
-			pdFALSE,
-			STA_MODE_TIMEOUT);
-
-	ESP_LOGI(TAG,"Disconnected from AP");
-	resp_payload->resp = SUCCESS;
-	station_connected = false;
-
-	if (event_registered) {
-		xEventGroupClearBits(wifi_event_group,
-			(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_HOST_REQUEST_BIT |
-			 WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
-	}
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespGetStatus *resp_payload = NULL;
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetStatus *)
+        calloc(1,sizeof(CtrlMsgRespGetStatus));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__get_status__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_DISCONNECT_AP;
+    resp->resp_disconnect_ap = resp_payload;
+
+    if (!station_connected) {
+        ESP_LOGI(TAG,"ESP32 station is not connected with AP, can't disconnect from AP");
+        goto err;
+    }
+
+    if (event_registered) {
+        xEventGroupSetBits(wifi_event_group, WIFI_HOST_REQUEST_BIT);
+    }
+    ret = esp_wifi_disconnect();
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to disconnect");
+        goto err;
+    }
+    if (event_registered)
+        xEventGroupWaitBits(wifi_event_group,
+            (WIFI_FAIL_BIT),
+            pdFALSE,
+            pdFALSE,
+            STA_MODE_TIMEOUT);
+
+    ESP_LOGI(TAG,"Disconnected from AP");
+    resp_payload->resp = SUCCESS;
+    station_connected = false;
+
+    if (event_registered) {
+        xEventGroupClearBits(wifi_event_group,
+            (WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_HOST_REQUEST_BIT |
+             WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
+    }
+    return ESP_OK;
 
 err:
-	if (event_registered) {
-		xEventGroupClearBits(wifi_event_group,
-			(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_HOST_REQUEST_BIT |
-			 WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
-	}
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    if (event_registered) {
+        xEventGroupClearBits(wifi_event_group,
+            (WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_HOST_REQUEST_BIT |
+             WIFI_NO_AP_FOUND_BIT | WIFI_WRONG_PASSWORD_BIT));
+    }
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function returns softap's configuration */
 static esp_err_t req_get_softap_config_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	credentials_t credentials = {0};
-	wifi_config_t get_conf = {0};
-	CtrlMsgRespGetSoftAPConfig *resp_payload = NULL;
+    esp_err_t ret = ESP_OK;
+    credentials_t credentials = {0};
+    wifi_config_t get_conf = {0};
+    CtrlMsgRespGetSoftAPConfig *resp_payload = NULL;
 #if WIFI_DUALBAND_SUPPORT
-	wifi_bandwidths_t bandwidths = { 0 };
-	wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
+    wifi_bandwidths_t bandwidths = { 0 };
+    wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
 #else
-	wifi_bandwidth_t get_bw = 0;
+    wifi_bandwidth_t get_bw = 0;
 #endif
 
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetSoftAPConfig *)calloc(
-			1,sizeof(CtrlMsgRespGetSoftAPConfig));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__get_soft_apconfig__init (resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_SOFTAP_CONFIG;
-	resp->resp_get_softap_config = resp_payload;
-
-	if (!softap_started) {
-		ESP_LOGI(TAG,"ESP32 SoftAP mode aren't set, So can't get config");
-		goto err;
-	}
-
-	ret = esp_wifi_get_config(ESP_IF_WIFI_AP, &get_conf);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get SoftAP config");
-		goto err;
-	}
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetSoftAPConfig *)calloc(
+            1,sizeof(CtrlMsgRespGetSoftAPConfig));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__get_soft_apconfig__init (resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_SOFTAP_CONFIG;
+    resp->resp_get_softap_config = resp_payload;
+
+    if (!softap_started) {
+        ESP_LOGI(TAG,"ESP32 SoftAP mode aren't set, So can't get config");
+        goto err;
+    }
+
+    ret = esp_wifi_get_config(ESP_IF_WIFI_AP, &get_conf);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get SoftAP config");
+        goto err;
+    }
 
 #if WIFI_DUALBAND_SUPPORT
-	ret = esp_wifi_get_bandwidths(ESP_IF_WIFI_AP,&bandwidths);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get bandwidths");
-		goto err;
-	}
+    ret = esp_wifi_get_bandwidths(ESP_IF_WIFI_AP,&bandwidths);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get bandwidths");
+        goto err;
+    }
 #else
-	ret = esp_wifi_get_bandwidth(ESP_IF_WIFI_AP,&get_bw);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get bandwidth");
-		goto err;
-	}
+    ret = esp_wifi_get_bandwidth(ESP_IF_WIFI_AP,&get_bw);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get bandwidth");
+        goto err;
+    }
 #endif
 
-	if (strlen((char *)get_conf.ap.ssid)) {
-		strncpy((char *)credentials.ssid,(char *)&get_conf.ap.ssid,
-				min(sizeof(credentials.ssid), strlen((char *)&get_conf.ap.ssid)+1));
-	}
-	if (strlen((char *)get_conf.ap.password)) {
-		strncpy((char *)credentials.pwd,(char *)&get_conf.ap.password,
-				min(sizeof(credentials.pwd), strlen((char *)&get_conf.ap.password)+1));
-	}
-	credentials.chnl = get_conf.ap.channel;
-	credentials.max_conn = get_conf.ap.max_connection;
-	credentials.ecn = get_conf.ap.authmode;
-	credentials.ssid_hidden = get_conf.ap.ssid_hidden;
-
-	resp_payload->ssid.len = strnlen((char *)credentials.ssid,
-			sizeof(credentials.ssid));
-	if (!resp_payload->ssid.len) {
-		ESP_LOGE(TAG, "Invalid SSID length");
-		goto err;
-	}
-	resp_payload->ssid.data = (uint8_t *)strndup((char *)credentials.ssid,
-			min(sizeof(credentials.ssid), strlen((char *)credentials.ssid) + 1));
-	if (!resp_payload->ssid.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for SSID");
-		goto err;
-	}
-
-	if (credentials.ecn != WIFI_AUTH_OPEN) {
-		resp_payload->pwd.len = strnlen((char *)credentials.pwd,
-				sizeof(credentials.pwd));
-		if (!resp_payload->pwd.len) {
-			ESP_LOGE(TAG, "Invalid password length");
-			goto err;
-		}
-	}
-
-	resp_payload->pwd.data = (uint8_t *)strndup((char *)credentials.pwd,
-			min(sizeof(credentials.pwd), strlen((char *)credentials.pwd) + 1));
-	if (!resp_payload->pwd.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for password");
-		goto err;
-	}
-	resp_payload->chnl = credentials.chnl;
-	resp_payload->sec_prot = credentials.ecn;
-	resp_payload->max_conn = credentials.max_conn;
-	resp_payload->ssid_hidden = credentials.ssid_hidden;
+    if (strlen((char *)get_conf.ap.ssid)) {
+        strncpy((char *)credentials.ssid,(char *)&get_conf.ap.ssid,
+                min(sizeof(credentials.ssid), strlen((char *)&get_conf.ap.ssid)+1));
+    }
+    if (strlen((char *)get_conf.ap.password)) {
+        strncpy((char *)credentials.pwd,(char *)&get_conf.ap.password,
+                min(sizeof(credentials.pwd), strlen((char *)&get_conf.ap.password)+1));
+    }
+    credentials.chnl = get_conf.ap.channel;
+    credentials.max_conn = get_conf.ap.max_connection;
+    credentials.ecn = get_conf.ap.authmode;
+    credentials.ssid_hidden = get_conf.ap.ssid_hidden;
+
+    resp_payload->ssid.len = strnlen((char *)credentials.ssid,
+            sizeof(credentials.ssid));
+    if (!resp_payload->ssid.len) {
+        ESP_LOGE(TAG, "Invalid SSID length");
+        goto err;
+    }
+    resp_payload->ssid.data = (uint8_t *)strndup((char *)credentials.ssid,
+            min(sizeof(credentials.ssid), strlen((char *)credentials.ssid) + 1));
+    if (!resp_payload->ssid.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for SSID");
+        goto err;
+    }
+
+    if (credentials.ecn != WIFI_AUTH_OPEN) {
+        resp_payload->pwd.len = strnlen((char *)credentials.pwd,
+                sizeof(credentials.pwd));
+        if (!resp_payload->pwd.len) {
+            ESP_LOGE(TAG, "Invalid password length");
+            goto err;
+        }
+    }
+
+    resp_payload->pwd.data = (uint8_t *)strndup((char *)credentials.pwd,
+            min(sizeof(credentials.pwd), strlen((char *)credentials.pwd) + 1));
+    if (!resp_payload->pwd.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for password");
+        goto err;
+    }
+    resp_payload->chnl = credentials.chnl;
+    resp_payload->sec_prot = credentials.ecn;
+    resp_payload->max_conn = credentials.max_conn;
+    resp_payload->ssid_hidden = credentials.ssid_hidden;
 #if WIFI_DUALBAND_SUPPORT
-	// return the 2.4/5G band bandwidth based on the channel we are on
-	// if channel > 14, assume we are on 5G band
-	if (credentials.chnl <= 14) {
-		resp_payload->bw = bandwidths.ghz_2g;
-	} else {
-		resp_payload->bw = bandwidths.ghz_5g;
-	}
-	// return band mode
-	ret = esp_wifi_get_band_mode(&band_mode);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get current band_mode");
-		// force band mode value
-		band_mode = WIFI_BAND_MODE_AUTO;
-	}
-	resp_payload->band_mode = band_mode;
+    // return the 2.4/5G band bandwidth based on the channel we are on
+    // if channel > 14, assume we are on 5G band
+    if (credentials.chnl <= 14) {
+        resp_payload->bw = bandwidths.ghz_2g;
+    } else {
+        resp_payload->bw = bandwidths.ghz_5g;
+    }
+    // return band mode
+    ret = esp_wifi_get_band_mode(&band_mode);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get current band_mode");
+        // force band mode value
+        band_mode = WIFI_BAND_MODE_AUTO;
+    }
+    resp_payload->band_mode = band_mode;
 #else
-	resp_payload->bw = get_bw;
+    resp_payload->bw = get_bw;
 #endif
 
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function sets softap's configuration */
 static esp_err_t req_start_softap_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	char mac_str[BSSID_LENGTH] = "";
-	uint8_t mac[MAC_LEN] = {0};
-	wifi_config_t *wifi_config = NULL;
-	CtrlMsgRespStartSoftAP *resp_payload = NULL;
+    esp_err_t ret = ESP_OK;
+    char mac_str[BSSID_LENGTH] = "";
+    uint8_t mac[MAC_LEN] = {0};
+    wifi_config_t *wifi_config = NULL;
+    CtrlMsgRespStartSoftAP *resp_payload = NULL;
 #if WIFI_DUALBAND_SUPPORT
-	wifi_bandwidths_t bandwidths = { 0 };
-	wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
+    wifi_bandwidths_t bandwidths = { 0 };
+    wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
 #endif
 
-	if (!req || !resp || !req->req_start_softap) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	wifi_config = (wifi_config_t *)calloc(1,sizeof(wifi_config_t));
-	if (!wifi_config) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	resp_payload = (CtrlMsgRespStartSoftAP *)
-		calloc(1,sizeof(CtrlMsgRespStartSoftAP));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		mem_free(wifi_config);
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__start_soft_ap__init (resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_START_SOFTAP;
-	resp->resp_start_softap = resp_payload;
-
-	if ((req->req_start_softap->ssid) &&
-	    (strlen(req->req_start_softap->ssid) > SSID_LENGTH)) {
-		ESP_LOGE(TAG, "SoftAP SSID length is more than 32 Bytes");
-		goto err;
-	}
-	if ((req->req_start_softap->sec_prot != CTRL__WIFI_SEC_PROT__Open)
-			&& (strlen(req->req_start_softap->pwd) > PASSWORD_LENGTH)) {
-		ESP_LOGE(TAG, "PASSWORD Length is more than 64 Bytes");
-		goto err;
-	}
-
-	if (station_connected) {
-		ret = esp_wifi_set_mode(WIFI_MODE_APSTA);
-		ESP_LOGI(TAG,"station+softap mode set");
-	} else {
-		ret = esp_wifi_set_mode(WIFI_MODE_AP);
-		ESP_LOGI(TAG,"softap mode set");
-	}
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to set mode");
-		goto err;
-	}
-
-	wifi_config->ap.authmode = req->req_start_softap->sec_prot;
-	if (wifi_config->ap.authmode != WIFI_AUTH_OPEN) {
-		if (req->req_start_softap->pwd) {
-			strncpy((char *)wifi_config->ap.password,
-					req->req_start_softap->pwd,
-					min(sizeof(wifi_config->ap.password),
-						strlen(req->req_start_softap->pwd)+1));
-		}
-	}
-	if (req->req_start_softap->ssid) {
-		strncpy((char *)wifi_config->ap.ssid,
-				req->req_start_softap->ssid,
-				min(sizeof(wifi_config->ap.ssid),
-					strlen(req->req_start_softap->ssid)+1));
-		wifi_config->ap.ssid_len = strlen(req->req_start_softap->ssid);
-	}
-
-	wifi_config->ap.channel = req->req_start_softap->chnl;
-	wifi_config->ap.max_connection = req->req_start_softap-> max_conn;
-	wifi_config->ap.ssid_hidden = req->req_start_softap->ssid_hidden;
-
-	ret = esp_wifi_get_mac(WIFI_IF_AP, mac);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get MAC address of softap");
-		goto err;
-	}
-
-	snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(mac));
-	ESP_LOGI(TAG,"mac [%s] ", mac_str);
-
-	resp_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
-	if (!resp_payload->mac.len) {
-		ESP_LOGE(TAG, "Invalid MAC address length");
-		goto err;
-	}
-	resp_payload->mac.data = (uint8_t *)strndup(mac_str, BSSID_LENGTH);
-	if (!resp_payload->mac.data) {
-		ESP_LOGE(TAG, "Failed to allocate memory for MAC address");
-		goto err;
-	}
+    if (!req || !resp || !req->req_start_softap) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    wifi_config = (wifi_config_t *)calloc(1,sizeof(wifi_config_t));
+    if (!wifi_config) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    resp_payload = (CtrlMsgRespStartSoftAP *)
+        calloc(1,sizeof(CtrlMsgRespStartSoftAP));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        mem_free(wifi_config);
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__start_soft_ap__init (resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_START_SOFTAP;
+    resp->resp_start_softap = resp_payload;
+
+    if ((req->req_start_softap->ssid) &&
+        (strlen(req->req_start_softap->ssid) > SSID_LENGTH)) {
+        ESP_LOGE(TAG, "SoftAP SSID length is more than 32 Bytes");
+        goto err;
+    }
+    if ((req->req_start_softap->sec_prot != CTRL__WIFI_SEC_PROT__Open)
+            && (strlen(req->req_start_softap->pwd) > PASSWORD_LENGTH)) {
+        ESP_LOGE(TAG, "PASSWORD Length is more than 64 Bytes");
+        goto err;
+    }
+
+    if (station_connected) {
+        ret = esp_wifi_set_mode(WIFI_MODE_APSTA);
+        ESP_LOGI(TAG,"station+softap mode set");
+    } else {
+        ret = esp_wifi_set_mode(WIFI_MODE_AP);
+        ESP_LOGI(TAG,"softap mode set");
+    }
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to set mode");
+        goto err;
+    }
+
+    wifi_config->ap.authmode = req->req_start_softap->sec_prot;
+    if (wifi_config->ap.authmode != WIFI_AUTH_OPEN) {
+        if (req->req_start_softap->pwd) {
+            strncpy((char *)wifi_config->ap.password,
+                    req->req_start_softap->pwd,
+                    min(sizeof(wifi_config->ap.password),
+                        strlen(req->req_start_softap->pwd)+1));
+        }
+    }
+    if (req->req_start_softap->ssid) {
+        strncpy((char *)wifi_config->ap.ssid,
+                req->req_start_softap->ssid,
+                min(sizeof(wifi_config->ap.ssid),
+                    strlen(req->req_start_softap->ssid)+1));
+        wifi_config->ap.ssid_len = strlen(req->req_start_softap->ssid);
+    }
+
+    wifi_config->ap.channel = req->req_start_softap->chnl;
+    wifi_config->ap.max_connection = req->req_start_softap-> max_conn;
+    wifi_config->ap.ssid_hidden = req->req_start_softap->ssid_hidden;
+
+    ret = esp_wifi_get_mac(WIFI_IF_AP, mac);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get MAC address of softap");
+        goto err;
+    }
+
+    snprintf(mac_str,BSSID_LENGTH,MACSTR,MAC2STR(mac));
+    ESP_LOGI(TAG,"mac [%s] ", mac_str);
+
+    resp_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
+    if (!resp_payload->mac.len) {
+        ESP_LOGE(TAG, "Invalid MAC address length");
+        goto err;
+    }
+    resp_payload->mac.data = (uint8_t *)strndup(mac_str, BSSID_LENGTH);
+    if (!resp_payload->mac.data) {
+        ESP_LOGE(TAG, "Failed to allocate memory for MAC address");
+        goto err;
+    }
 
 #if WIFI_DUALBAND_SUPPORT
-	// set band mode
-	band_mode = req->req_start_softap->band_mode;
-
-	if (!band_mode)  {
-		// incoming band mode is 0: make it auto
-		band_mode = WIFI_BAND_MODE_AUTO;
-	}
-	ret = esp_wifi_set_band_mode(band_mode);
-	if (ret) {
-		ESP_LOGE(TAG, "failed to set band_mode");
-		goto err;
-	}
-
-	// set bandwidth, based on band mode
-	switch (band_mode) {
+    // set band mode
+    band_mode = req->req_start_softap->band_mode;
+
+    if (!band_mode)  {
+        // incoming band mode is 0: make it auto
+        band_mode = WIFI_BAND_MODE_AUTO;
+    }
+    ret = esp_wifi_set_band_mode(band_mode);
+    if (ret) {
+        ESP_LOGE(TAG, "failed to set band_mode");
+        goto err;
+    }
+
+    // set bandwidth, based on band mode
+    switch (band_mode) {
     case WIFI_BAND_MODE_2G_ONLY:
-		bandwidths.ghz_2g = req->req_start_softap->bw;
-		break;
+        bandwidths.ghz_2g = req->req_start_softap->bw;
+        break;
     case WIFI_BAND_MODE_5G_ONLY:
-		bandwidths.ghz_5g = req->req_start_softap->bw;
-		break;
-	// auto and default have the same settings
+        bandwidths.ghz_5g = req->req_start_softap->bw;
+        break;
+    // auto and default have the same settings
     case WIFI_BAND_MODE_AUTO:
-	default:
-		bandwidths.ghz_2g = req->req_start_softap->bw;
-		bandwidths.ghz_5g = req->req_start_softap->bw;
-		break;
-	}
-	ret = esp_wifi_set_bandwidths(ESP_IF_WIFI_AP, &bandwidths);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to set bandwidth");
-		goto err;
-	}
+    default:
+        bandwidths.ghz_2g = req->req_start_softap->bw;
+        bandwidths.ghz_5g = req->req_start_softap->bw;
+        break;
+    }
+    ret = esp_wifi_set_bandwidths(ESP_IF_WIFI_AP, &bandwidths);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to set bandwidth");
+        goto err;
+    }
 #else
-	ret = esp_wifi_set_bandwidth(ESP_IF_WIFI_AP,req->req_start_softap->bw);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to set bandwidth");
-		goto err;
-	}
+    ret = esp_wifi_set_bandwidth(ESP_IF_WIFI_AP,req->req_start_softap->bw);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to set bandwidth");
+        goto err;
+    }
 #endif
 
-	ESP_LOGI(TAG, MACSTR, MAC2STR(mac));
-
-	if (softap_started) {
-		softap_event_unregister();
-		softap_started = false;
-	}
-	softap_event_register();
-	softap_started = true;
-
-	ret = esp_wifi_set_config(ESP_IF_WIFI_AP, wifi_config);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to set softap config");
-		goto err;
-	}
-
-	ESP_LOGI(TAG,"ssid %s pwd %s authmode %d ssid_hidden %d max_conn %d channel %d",
-			wifi_config->ap.ssid, wifi_config->ap.password,
-			wifi_config->ap.authmode, wifi_config->ap.ssid_hidden,
-			wifi_config->ap.max_connection,wifi_config->ap.channel);
-	ESP_LOGI(TAG,"ESP32 SoftAP is avaliable ");
+    ESP_LOGI(TAG, MACSTR, MAC2STR(mac));
+
+    if (softap_started) {
+        softap_event_unregister();
+        softap_started = false;
+    }
+    softap_event_register();
+    softap_started = true;
+
+    ret = esp_wifi_set_config(ESP_IF_WIFI_AP, wifi_config);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to set softap config");
+        goto err;
+    }
+
+    ESP_LOGI(TAG,"ssid %s pwd %s authmode %d ssid_hidden %d max_conn %d channel %d",
+            wifi_config->ap.ssid, wifi_config->ap.password,
+            wifi_config->ap.authmode, wifi_config->ap.ssid_hidden,
+            wifi_config->ap.max_connection,wifi_config->ap.channel);
+    ESP_LOGI(TAG,"ESP32 SoftAP is avaliable ");
 #if WIFI_DUALBAND_SUPPORT
-	resp_payload->band_mode = band_mode;
+    resp_payload->band_mode = band_mode;
 #endif
-	resp_payload->resp = SUCCESS;
-	mem_free(wifi_config);
-	return ESP_OK;
+    resp_payload->resp = SUCCESS;
+    mem_free(wifi_config);
+    return ESP_OK;
 
 err:
-	if (softap_started) {
-		softap_event_unregister();
-		softap_started = false;
-	}
-	resp_payload->resp = FAILURE;
-	mem_free(wifi_config);
-	return ESP_OK;
+    if (softap_started) {
+        softap_event_unregister();
+        softap_started = false;
+    }
+    resp_payload->resp = FAILURE;
+    mem_free(wifi_config);
+    return ESP_OK;
 }
 
 /* Function sends scanned list of available APs */
 static esp_err_t req_get_ap_scan_list_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	wifi_mode_t mode = 0;
-	uint16_t ap_count = 0;
-	credentials_t credentials = {0};
-	wifi_ap_record_t *ap_info = NULL;
-	ScanResult **results = NULL;
-	CtrlMsgRespScanResult *resp_payload = NULL;
-	wifi_scan_config_t scanConf = {
-		.show_hidden = true
-	};
+    esp_err_t ret = ESP_OK;
+    wifi_mode_t mode = 0;
+    uint16_t ap_count = 0;
+    credentials_t credentials = {0};
+    wifi_ap_record_t *ap_info = NULL;
+    ScanResult **results = NULL;
+    CtrlMsgRespScanResult *resp_payload = NULL;
+    wifi_scan_config_t scanConf = {
+        .show_hidden = true
+    };
 #if WIFI_DUALBAND_SUPPORT
-	wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
+    wifi_band_mode_t band_mode = 0; // 0 is currently an invalid value
 #endif
 
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespScanResult *)
-		calloc(1,sizeof(CtrlMsgRespScanResult));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed To allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__scan_result__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SCAN_AP_LIST;
-	resp->resp_scan_ap_list = resp_payload;
-
-	ap_scan_list_event_register();
-	ret = esp_wifi_get_mode(&mode);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get wifi mode");
-		goto err;
-	}
-
-	if ((softap_started) &&
-	    ((mode != WIFI_MODE_STA) && (mode != WIFI_MODE_NULL))) {
-		ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
-		ESP_LOGI(TAG,"softap+station mode set in scan handler");
-	} else {
-		ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
-		ESP_LOGI(TAG,"Station mode set in scan handler");
-	}
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespScanResult *)
+        calloc(1,sizeof(CtrlMsgRespScanResult));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed To allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__scan_result__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SCAN_AP_LIST;
+    resp->resp_scan_ap_list = resp_payload;
+
+    ap_scan_list_event_register();
+    ret = esp_wifi_get_mode(&mode);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get wifi mode");
+        goto err;
+    }
+
+    if ((softap_started) &&
+        ((mode != WIFI_MODE_STA) && (mode != WIFI_MODE_NULL))) {
+        ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
+        ESP_LOGI(TAG,"softap+station mode set in scan handler");
+    } else {
+        ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
+        ESP_LOGI(TAG,"Station mode set in scan handler");
+    }
 
 #if WIFI_DUALBAND_SUPPORT
-	// ensure wifi band is set to auto to get all scan results (2.4G and 5G bands)
-	ret = esp_wifi_get_band_mode(&band_mode);
-	if (ret == ESP_OK) {
-		if (band_mode != WIFI_BAND_MODE_AUTO) {
-			ESP_LOGI(TAG, "Setting band_mode to AUTO");
-			ret = esp_wifi_set_band_mode(WIFI_BAND_MODE_AUTO);
-			if (ret) {
-				ESP_LOGE(TAG, "Failed to set band_mode to AUTO");
-			}
-		}
-	} else {
-		ESP_LOGE(TAG,"Failed to get current band_mode");
-	}
+    // ensure wifi band is set to auto to get all scan results (2.4G and 5G bands)
+    ret = esp_wifi_get_band_mode(&band_mode);
+    if (ret == ESP_OK) {
+        if (band_mode != WIFI_BAND_MODE_AUTO) {
+            ESP_LOGI(TAG, "Setting band_mode to AUTO");
+            ret = esp_wifi_set_band_mode(WIFI_BAND_MODE_AUTO);
+            if (ret) {
+                ESP_LOGE(TAG, "Failed to set band_mode to AUTO");
+            }
+        }
+    } else {
+        ESP_LOGE(TAG,"Failed to get current band_mode");
+    }
 #endif
 
-	ret = esp_wifi_scan_start(&scanConf, true);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to start scan start command");
-		goto err;
-	}
-	if (!scan_done) {
-		ESP_LOGE(TAG,"Scanning incomplete");
-		goto err;
-	}
-
-	ret = esp_wifi_scan_get_ap_num(&ap_count);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get scan AP number");
-		goto err;
-	}
-	if (!ap_count) {
-		ESP_LOGE(TAG,"No AP available");
-		goto err;
-	}
-
-	ap_info = (wifi_ap_record_t *)calloc(ap_count,sizeof(wifi_ap_record_t));
-	if (!ap_info) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		goto err;
-	}
-
-	ret = esp_wifi_scan_get_ap_records(&ap_count,ap_info);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to scan ap records");
-		goto err;
-	}
-
-	credentials.count = ap_count;
-
-	results = (ScanResult **)
-		calloc(credentials.count, sizeof(ScanResult));
-	if (!results) {
-		ESP_LOGE(TAG,"Failed To allocate memory");
-		goto err;
-	}
-
-	resp_payload->entries = results;
-	ESP_LOGI(TAG,"Total APs scanned = %u",ap_count);
-	for (int i = 0; i < credentials.count; i++ ) {
-		results[i] = (ScanResult *)calloc(1,sizeof(ScanResult));
-		if (!results[i]) {
-			ESP_LOGE(TAG,"Failed to allocate memory");
-			goto err;
-		}
-		scan_result__init(results[i]);
-
-		ESP_LOGI(TAG,"Details of AP no %d",i);
-
-		results[i]->ssid.len = strnlen((char *)ap_info[i].ssid, SSID_LENGTH);
-
-
-		results[i]->ssid.data = (uint8_t *)strndup((char *)ap_info[i].ssid,
-				SSID_LENGTH);
-		if (!results[i]->ssid.data) {
-			ESP_LOGE(TAG,"Failed to allocate memory for scan result entry SSID");
-			mem_free(results[i]);
-			goto err;
-		}
-
-		credentials.chnl = ap_info[i].primary;
-		results[i]->chnl = credentials.chnl;
-		credentials.rssi = ap_info[i].rssi;
-		results[i]->rssi = credentials.rssi;
-
-		snprintf((char *)credentials.bssid, BSSID_LENGTH,
-				MACSTR, MAC2STR(ap_info[i].bssid));
-		results[i]->bssid.len = strnlen((char *)credentials.bssid, BSSID_LENGTH);
-		if (!results[i]->bssid.len) {
-			ESP_LOGE(TAG, "Invalid BSSID length");
-			mem_free(results[i]);
-			goto err;
-		}
-		results[i]->bssid.data = (uint8_t *)strndup((char *)credentials.bssid,
-				BSSID_LENGTH);
-		if (!results[i]->bssid.data) {
-			ESP_LOGE(TAG, "Failed to allocate memory for scan result entry BSSID");
-			mem_free(results[i]);
-			goto err;
-		}
-
-		credentials.ecn = ap_info[i].authmode;
-		results[i]->sec_prot = credentials.ecn;
-#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) 
-		ESP_LOGI(TAG, "SSID      \t\t%s\nRSSI      \t\t%ld\nChannel   \t\t%lu\nBSSID     \t\t%s\nAuth mode \t\t%d\n",
+    ret = esp_wifi_scan_start(&scanConf, true);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to start scan start command");
+        goto err;
+    }
+    if (!scan_done) {
+        ESP_LOGE(TAG,"Scanning incomplete");
+        goto err;
+    }
+
+    ret = esp_wifi_scan_get_ap_num(&ap_count);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get scan AP number");
+        goto err;
+    }
+    if (!ap_count) {
+        ESP_LOGE(TAG,"No AP available");
+        goto err;
+    }
+
+    ap_info = (wifi_ap_record_t *)calloc(ap_count,sizeof(wifi_ap_record_t));
+    if (!ap_info) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        goto err;
+    }
+
+    ret = esp_wifi_scan_get_ap_records(&ap_count,ap_info);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to scan ap records");
+        goto err;
+    }
+
+    credentials.count = ap_count;
+
+    results = (ScanResult **)
+        calloc(credentials.count, sizeof(ScanResult));
+    if (!results) {
+        ESP_LOGE(TAG,"Failed To allocate memory");
+        goto err;
+    }
+
+    resp_payload->entries = results;
+    ESP_LOGI(TAG,"Total APs scanned = %u",ap_count);
+    for (int i = 0; i < credentials.count; i++ ) {
+        results[i] = (ScanResult *)calloc(1,sizeof(ScanResult));
+        if (!results[i]) {
+            ESP_LOGE(TAG,"Failed to allocate memory");
+            goto err;
+        }
+        scan_result__init(results[i]);
+
+        ESP_LOGI(TAG,"Details of AP no %d",i);
+
+        results[i]->ssid.len = strnlen((char *)ap_info[i].ssid, SSID_LENGTH);
+
+
+        results[i]->ssid.data = (uint8_t *)strndup((char *)ap_info[i].ssid,
+                SSID_LENGTH);
+        if (!results[i]->ssid.data) {
+            ESP_LOGE(TAG,"Failed to allocate memory for scan result entry SSID");
+            mem_free(results[i]);
+            goto err;
+        }
+
+        credentials.chnl = ap_info[i].primary;
+        results[i]->chnl = credentials.chnl;
+        credentials.rssi = ap_info[i].rssi;
+        results[i]->rssi = credentials.rssi;
+
+        snprintf((char *)credentials.bssid, BSSID_LENGTH,
+                MACSTR, MAC2STR(ap_info[i].bssid));
+        results[i]->bssid.len = strnlen((char *)credentials.bssid, BSSID_LENGTH);
+        if (!results[i]->bssid.len) {
+            ESP_LOGE(TAG, "Invalid BSSID length");
+            mem_free(results[i]);
+            goto err;
+        }
+        results[i]->bssid.data = (uint8_t *)strndup((char *)credentials.bssid,
+                BSSID_LENGTH);
+        if (!results[i]->bssid.data) {
+            ESP_LOGE(TAG, "Failed to allocate memory for scan result entry BSSID");
+            mem_free(results[i]);
+            goto err;
+        }
+
+        credentials.ecn = ap_info[i].authmode;
+        results[i]->sec_prot = credentials.ecn;
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
+        ESP_LOGI(TAG, "SSID      \t\t%s\nRSSI      \t\t%ld\nChannel   \t\t%lu\nBSSID     \t\t%s\nAuth mode \t\t%d\n",
 #else
-		ESP_LOGI(TAG,"\nSSID      \t\t%s\nRSSI      \t\t%d\nChannel   \t\t%d\nBSSID     \t\t%s\nAuth mode \t\t%d\n",
+        ESP_LOGI(TAG,"\nSSID      \t\t%s\nRSSI      \t\t%d\nChannel   \t\t%d\nBSSID     \t\t%s\nAuth mode \t\t%d\n",
 #endif
-				results[i]->ssid.data, results[i]->rssi, results[i]->chnl,
-				results[i]->bssid.data, results[i]->sec_prot);
-		vTaskDelay(1);
+                results[i]->ssid.data, results[i]->rssi, results[i]->chnl,
+                results[i]->bssid.data, results[i]->sec_prot);
+        vTaskDelay(1);
 
-		resp_payload->n_entries++;
-		resp_payload->count++;
-	}
+        resp_payload->n_entries++;
+        resp_payload->count++;
+    }
 
-	resp_payload->resp = SUCCESS;
-	mem_free(ap_info);
-	ap_scan_list_event_unregister();
-	return ESP_OK;
+    resp_payload->resp = SUCCESS;
+    mem_free(ap_info);
+    ap_scan_list_event_unregister();
+    return ESP_OK;
 
 err:
-	resp_payload->resp = FAILURE;
-	mem_free(ap_info);
-	ap_scan_list_event_unregister();
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    mem_free(ap_info);
+    ap_scan_list_event_unregister();
+    return ESP_OK;
 }
 
 /* Functions stops softap. */
 static esp_err_t req_stop_softap_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	wifi_mode_t mode = 0;
-	CtrlMsgRespGetStatus *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetStatus *)
-		calloc(1,sizeof(CtrlMsgRespGetStatus));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__get_status__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_STOP_SOFTAP;
-	resp->resp_stop_softap = resp_payload;
-
-	if (!softap_started) {
-		ESP_LOGI(TAG,"ESP32 softap is not started");
-		goto err;
-	}
-
-	ret = esp_wifi_get_mode(&mode);
-	if (ret) {
-		ESP_LOGE(TAG, "Failed to get wifi mode %d", ret);
-		goto err;
-	}
-
-	if (mode == WIFI_MODE_AP) {
-		ret = esp_wifi_set_mode(WIFI_MODE_NULL);
-	} else if (mode == WIFI_MODE_APSTA) {
-		ret = esp_wifi_set_mode(WIFI_MODE_STA);
-	}
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to stop ESP softap");
-		goto err;
-	}
-
-	softap_event_unregister();
-	softap_started = false;
-	ESP_LOGI(TAG,"softap stopped");
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    wifi_mode_t mode = 0;
+    CtrlMsgRespGetStatus *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetStatus *)
+        calloc(1,sizeof(CtrlMsgRespGetStatus));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__get_status__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_STOP_SOFTAP;
+    resp->resp_stop_softap = resp_payload;
+
+    if (!softap_started) {
+        ESP_LOGI(TAG,"ESP32 softap is not started");
+        goto err;
+    }
+
+    ret = esp_wifi_get_mode(&mode);
+    if (ret) {
+        ESP_LOGE(TAG, "Failed to get wifi mode %d", ret);
+        goto err;
+    }
+
+    if (mode == WIFI_MODE_AP) {
+        ret = esp_wifi_set_mode(WIFI_MODE_NULL);
+    } else if (mode == WIFI_MODE_APSTA) {
+        ret = esp_wifi_set_mode(WIFI_MODE_STA);
+    }
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to stop ESP softap");
+        goto err;
+    }
+
+    softap_event_unregister();
+    softap_started = false;
+    ESP_LOGI(TAG,"softap stopped");
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function returns list of softap's connected stations */
 static esp_err_t get_connected_sta_list_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	wifi_mode_t mode = 0;
-	credentials_t credentials = {0};
-	CtrlMsgRespSoftAPConnectedSTA *resp_payload = NULL;
-	ConnectedSTAList **results = NULL;
-	wifi_sta_list_t *stas_info = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	stas_info = (wifi_sta_list_t *)calloc(1,sizeof(wifi_sta_list_t));
-	if (!stas_info) {
-		ESP_LOGE(TAG,"Failed to allocate memory stas_info");
-		return ESP_ERR_NO_MEM;
-	}
-
-	resp_payload = (CtrlMsgRespSoftAPConnectedSTA *)
-		calloc(1,sizeof(CtrlMsgRespSoftAPConnectedSTA));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"failed to allocate memory resp payload");
-		mem_free(stas_info);
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__soft_apconnected_sta__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SOFTAP_CONNECTED_STAS_LIST;
-	resp->resp_softap_connected_stas_list = resp_payload;
-
-	ret = esp_wifi_get_mode(&mode);
-	if (ret) {
-		ESP_LOGE(TAG, "Failed to get wifi mode %d", ret);
-		goto err;
-	}
-
-	if ((mode == WIFI_MODE_STA) || (mode == WIFI_MODE_NULL)) {
-		ESP_LOGE(TAG,"Currnet mode is %d", mode);
-		goto err;
-	}
-	if (!softap_started) {
-		ESP_LOGE(TAG,"softap is not started, cant get connected stations List");
-		goto err;
-	}
-
-	ret = esp_wifi_ap_get_sta_list(stas_info);
-	if (ret) {
-		ESP_LOGE(TAG,"Failed to get connected stations list");
-		goto err;
-	}
-
-	if (!stas_info->num) {
-		ESP_LOGE(TAG,"No station is connected");
-	}
-	resp_payload->num = stas_info->num;
-	if (stas_info->num) {
-		resp_payload->n_stations = stas_info->num;
-		results = (ConnectedSTAList **)calloc(stas_info->num,
-				sizeof(ConnectedSTAList));
-		if (!results) {
-			ESP_LOGE(TAG,"Failed to allocate memory for connected stations");
-			goto err;
-		}
-		resp_payload->stations = results;
-		for (int i = 0; i < stas_info->num ; i++) {
-			snprintf((char *)credentials.bssid,BSSID_LENGTH,
-					MACSTR,MAC2STR(stas_info->sta[i].mac));
-			results[i] = (ConnectedSTAList *)calloc(1,
-					sizeof(ConnectedSTAList));
-			if (!results[i]) {
-				ESP_LOGE(TAG,"Failed to allocated memory");
-				goto err;
-			}
-			connected_stalist__init(results[i]);
-
-			results[i]->mac.len = strnlen((char *)credentials.bssid, BSSID_LENGTH);
-			if (!results[i]->mac.len) {
-				ESP_LOGE(TAG, "Invalid MAC length");
-				goto err;
-			}
-			results[i]->mac.data =
-				(uint8_t *)strndup((char *)credentials.bssid, BSSID_LENGTH);
-			if (!results[i]->mac.data) {
-				ESP_LOGE(TAG,"Failed to allocate memory mac address");
-				goto err;
-			}
-
-			results[i]->rssi = stas_info->sta[i].rssi;
-			ESP_LOGI(TAG,"MAC of %dth station %s",i, results[i]->mac.data);
-		}
-	}
-
-	resp_payload->resp = SUCCESS;
-	mem_free(stas_info);
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    wifi_mode_t mode = 0;
+    credentials_t credentials = {0};
+    CtrlMsgRespSoftAPConnectedSTA *resp_payload = NULL;
+    ConnectedSTAList **results = NULL;
+    wifi_sta_list_t *stas_info = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    stas_info = (wifi_sta_list_t *)calloc(1,sizeof(wifi_sta_list_t));
+    if (!stas_info) {
+        ESP_LOGE(TAG,"Failed to allocate memory stas_info");
+        return ESP_ERR_NO_MEM;
+    }
+
+    resp_payload = (CtrlMsgRespSoftAPConnectedSTA *)
+        calloc(1,sizeof(CtrlMsgRespSoftAPConnectedSTA));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"failed to allocate memory resp payload");
+        mem_free(stas_info);
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__soft_apconnected_sta__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SOFTAP_CONNECTED_STAS_LIST;
+    resp->resp_softap_connected_stas_list = resp_payload;
+
+    ret = esp_wifi_get_mode(&mode);
+    if (ret) {
+        ESP_LOGE(TAG, "Failed to get wifi mode %d", ret);
+        goto err;
+    }
+
+    if ((mode == WIFI_MODE_STA) || (mode == WIFI_MODE_NULL)) {
+        ESP_LOGE(TAG,"Currnet mode is %d", mode);
+        goto err;
+    }
+    if (!softap_started) {
+        ESP_LOGE(TAG,"softap is not started, cant get connected stations List");
+        goto err;
+    }
+
+    ret = esp_wifi_ap_get_sta_list(stas_info);
+    if (ret) {
+        ESP_LOGE(TAG,"Failed to get connected stations list");
+        goto err;
+    }
+
+    if (!stas_info->num) {
+        ESP_LOGE(TAG,"No station is connected");
+    }
+    resp_payload->num = stas_info->num;
+    if (stas_info->num) {
+        resp_payload->n_stations = stas_info->num;
+        results = (ConnectedSTAList **)calloc(stas_info->num,
+                sizeof(ConnectedSTAList));
+        if (!results) {
+            ESP_LOGE(TAG,"Failed to allocate memory for connected stations");
+            goto err;
+        }
+        resp_payload->stations = results;
+        for (int i = 0; i < stas_info->num ; i++) {
+            snprintf((char *)credentials.bssid,BSSID_LENGTH,
+                    MACSTR,MAC2STR(stas_info->sta[i].mac));
+            results[i] = (ConnectedSTAList *)calloc(1,
+                    sizeof(ConnectedSTAList));
+            if (!results[i]) {
+                ESP_LOGE(TAG,"Failed to allocated memory");
+                goto err;
+            }
+            connected_stalist__init(results[i]);
+
+            results[i]->mac.len = strnlen((char *)credentials.bssid, BSSID_LENGTH);
+            if (!results[i]->mac.len) {
+                ESP_LOGE(TAG, "Invalid MAC length");
+                goto err;
+            }
+            results[i]->mac.data =
+                (uint8_t *)strndup((char *)credentials.bssid, BSSID_LENGTH);
+            if (!results[i]->mac.data) {
+                ESP_LOGE(TAG,"Failed to allocate memory mac address");
+                goto err;
+            }
+
+            results[i]->rssi = stas_info->sta[i].rssi;
+            ESP_LOGI(TAG,"MAC of %dth station %s",i, results[i]->mac.data);
+        }
+    }
+
+    resp_payload->resp = SUCCESS;
+    mem_free(stas_info);
+    return ESP_OK;
 
 err:
-	resp_payload->resp = FAILURE;
-	mem_free(stas_info);
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    mem_free(stas_info);
+    return ESP_OK;
 }
 
 /* Function sets MAC address for station/softap */
 static esp_err_t req_set_mac_address_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	uint8_t mac[MAC_LEN] = {0};
-	uint8_t interface = 0;
-	CtrlMsgRespSetMacAddress *resp_payload = NULL;
-
-	if (!req || !resp || !req->req_set_mac_address ||
-	    !req->req_set_mac_address->mac.data) {
-		ESP_LOGE(TAG," Invalid command request");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespSetMacAddress *)
-		calloc(1,sizeof(CtrlMsgRespSetMacAddress));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__set_mac_address__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_MAC_ADDRESS;
-	resp->resp_set_mac_address = resp_payload;
-
-	if (req->req_set_mac_address->mac.len > MAC_STR_LEN) {
-		ESP_LOGE(TAG, "MAC address should be in aa:bb:cc:dd:ee:ff format");
-		goto err;
-	}
-
-	ret = convert_mac_to_bytes(mac, (char *)req->req_set_mac_address->mac.data);
-	if (ret) {
-		ESP_LOGE(TAG, "Mac address not recognized from %s",
-				(char *)req->req_set_mac_address->mac.data);
-		goto err;
-	}
-
-	if (req->req_set_mac_address->mode == WIFI_MODE_STA) {
-		interface = WIFI_IF_STA;
-	} else if (req->req_set_mac_address->mode == WIFI_MODE_AP) {
-		interface = WIFI_IF_AP;
-	} else {
-		ESP_LOGE(TAG, "Invalid mode to set MAC address");
-		goto err;
-	}
-
-	ret = esp_wifi_set_mac(interface, mac);
-	if (ret == ESP_ERR_WIFI_MODE) {
-		ESP_LOGE(TAG, "ESP32 mode is different than asked one");
-		goto err;
-	} else if (ret == ESP_ERR_WIFI_MAC) {
-		ESP_LOGE(TAG, "station and softap interface has same MAC address. OR");
-		ESP_LOGE(TAG, "Invalid MAC Address, The bit 0 of the first byte of ESP32 MAC address can not be 1, For example, the MAC address can set to be 1a:XX:XX:XX:XX:XX, but can not be 15:XX:XX:XX:XX:XX");
-		goto err;
-	} else if (ret) {
-		ESP_LOGE(TAG, "Failed to set MAC address, error %d ", ret);
-		goto err;
-	}
-
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    uint8_t mac[MAC_LEN] = {0};
+    uint8_t interface = 0;
+    CtrlMsgRespSetMacAddress *resp_payload = NULL;
+
+    if (!req || !resp || !req->req_set_mac_address ||
+        !req->req_set_mac_address->mac.data) {
+        ESP_LOGE(TAG," Invalid command request");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespSetMacAddress *)
+        calloc(1,sizeof(CtrlMsgRespSetMacAddress));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__set_mac_address__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_MAC_ADDRESS;
+    resp->resp_set_mac_address = resp_payload;
+
+    if (req->req_set_mac_address->mac.len > MAC_STR_LEN) {
+        ESP_LOGE(TAG, "MAC address should be in aa:bb:cc:dd:ee:ff format");
+        goto err;
+    }
+
+    ret = convert_mac_to_bytes(mac, (char *)req->req_set_mac_address->mac.data);
+    if (ret) {
+        ESP_LOGE(TAG, "Mac address not recognized from %s",
+                (char *)req->req_set_mac_address->mac.data);
+        goto err;
+    }
+
+    if (req->req_set_mac_address->mode == WIFI_MODE_STA) {
+        interface = WIFI_IF_STA;
+    } else if (req->req_set_mac_address->mode == WIFI_MODE_AP) {
+        interface = WIFI_IF_AP;
+    } else {
+        ESP_LOGE(TAG, "Invalid mode to set MAC address");
+        goto err;
+    }
+
+    ret = esp_wifi_set_mac(interface, mac);
+    if (ret == ESP_ERR_WIFI_MODE) {
+        ESP_LOGE(TAG, "ESP32 mode is different than asked one");
+        goto err;
+    } else if (ret == ESP_ERR_WIFI_MAC) {
+        ESP_LOGE(TAG, "station and softap interface has same MAC address. OR");
+        ESP_LOGE(TAG, "Invalid MAC Address, The bit 0 of the first byte of ESP32 MAC address can not be 1, For example, the MAC address can set to be 1a:XX:XX:XX:XX:XX, but can not be 15:XX:XX:XX:XX:XX");
+        goto err;
+    } else if (ret) {
+        ESP_LOGE(TAG, "Failed to set MAC address, error %d ", ret);
+        goto err;
+    }
+
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function sets power save mode */
 static esp_err_t req_set_power_save_mode_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespSetMode *resp_payload = NULL;
-
-	if (!req || !resp || !req->req_set_power_save_mode) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespSetMode *)calloc(1,sizeof(CtrlMsgRespSetMode));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__set_mode__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_POWER_SAVE_MODE;
-	resp->resp_set_power_save_mode = resp_payload;
-
-	/*
-	 * WIFI_PS_NONE mode can not use in case of coex i.e. Wi-Fi+BT/BLE.
-	 * By default ESP has WIFI_PS_MIN_MODEM power save mode
-	 */
-	if ((req->req_set_power_save_mode->mode == WIFI_PS_MIN_MODEM) ||
-	    (req->req_set_power_save_mode->mode == WIFI_PS_MAX_MODEM)) {
-		ret = esp_wifi_set_ps(req->req_set_power_save_mode->mode);
-		if (ret) {
-			ESP_LOGE(TAG, "Failed to set power save mode");
-			goto err;
-		}
-	} else {
-		ESP_LOGE(TAG, "Invalid Power Save Mode");
-		goto err;
-	}
-
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespSetMode *resp_payload = NULL;
+
+    if (!req || !resp || !req->req_set_power_save_mode) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespSetMode *)calloc(1,sizeof(CtrlMsgRespSetMode));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__set_mode__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_POWER_SAVE_MODE;
+    resp->resp_set_power_save_mode = resp_payload;
+
+    /*
+     * WIFI_PS_NONE mode can not use in case of coex i.e. Wi-Fi+BT/BLE.
+     * By default ESP has WIFI_PS_MIN_MODEM power save mode
+     */
+    if ((req->req_set_power_save_mode->mode == WIFI_PS_MIN_MODEM) ||
+        (req->req_set_power_save_mode->mode == WIFI_PS_MAX_MODEM)) {
+        ret = esp_wifi_set_ps(req->req_set_power_save_mode->mode);
+        if (ret) {
+            ESP_LOGE(TAG, "Failed to set power save mode");
+            goto err;
+        }
+    } else {
+        ESP_LOGE(TAG, "Invalid Power Save Mode");
+        goto err;
+    }
+
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function returns current power save mode */
 static esp_err_t req_get_power_save_mode_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	wifi_ps_type_t ps_type = 0;
-	CtrlMsgRespGetMode *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetMode *)calloc(1,sizeof(CtrlMsgRespGetMode));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__get_mode__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_POWER_SAVE_MODE;
-	resp->resp_get_power_save_mode = resp_payload;
-
-	ret = esp_wifi_get_ps(&ps_type);
-	if (ret) {
-		ESP_LOGE(TAG, "Failed to set power save mode");
-		resp_payload->resp = FAILURE;
-		return ESP_OK;
-	} else {
-		resp->resp_get_power_save_mode->mode = ps_type;
-	}
-
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    wifi_ps_type_t ps_type = 0;
+    CtrlMsgRespGetMode *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetMode *)calloc(1,sizeof(CtrlMsgRespGetMode));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__get_mode__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_POWER_SAVE_MODE;
+    resp->resp_get_power_save_mode = resp_payload;
+
+    ret = esp_wifi_get_ps(&ps_type);
+    if (ret) {
+        ESP_LOGE(TAG, "Failed to set power save mode");
+        resp_payload->resp = FAILURE;
+        return ESP_OK;
+    } else {
+        resp->resp_get_power_save_mode->mode = ps_type;
+    }
+
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 }
 
 /* Function OTA begin */
 static esp_err_t req_ota_begin_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespOTABegin *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	ESP_LOGI(TAG, "OTA update started");
-
-	resp_payload = (CtrlMsgRespOTABegin *)
-		calloc(1,sizeof(CtrlMsgRespOTABegin));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__otabegin__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_OTA_BEGIN;
-	resp->resp_ota_begin = resp_payload;
-
-	/* Identify next OTA partition */
-	update_partition = esp_ota_get_next_update_partition(NULL);
-	if (update_partition == NULL) {
-		ESP_LOGE(TAG, "Failed to get next update partition");
-		goto err;
-	}
-
-	ESP_LOGI(TAG, "Prepare partition for OTA\n");
-	ota_ongoing=1;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespOTABegin *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    ESP_LOGI(TAG, "OTA update started");
+
+    resp_payload = (CtrlMsgRespOTABegin *)
+        calloc(1,sizeof(CtrlMsgRespOTABegin));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__otabegin__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_OTA_BEGIN;
+    resp->resp_ota_begin = resp_payload;
+
+    /* Identify next OTA partition */
+    update_partition = esp_ota_get_next_update_partition(NULL);
+    if (update_partition == NULL) {
+        ESP_LOGE(TAG, "Failed to get next update partition");
+        goto err;
+    }
+
+    ESP_LOGI(TAG, "Prepare partition for OTA\n");
+    ota_ongoing=1;
 #if CONFIG_ESP_OTA_WORKAROUND
-	vTaskDelay(OTA_SLEEP_TIME_MS/portTICK_PERIOD_MS);
+    vTaskDelay(OTA_SLEEP_TIME_MS/portTICK_PERIOD_MS);
 #endif
-	ret = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &handle);
-	ota_ongoing=0;
-	if (ret) {
-		ESP_LOGE(TAG, "OTA update failed in OTA begin");
-		goto err;
-	}
+    ret = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &handle);
+    ota_ongoing=0;
+    if (ret) {
+        ESP_LOGE(TAG, "OTA update failed in OTA begin");
+        goto err;
+    }
 
-	ota_msg = 1;
+    ota_msg = 1;
 
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 
 }
 
 /* Function OTA write */
 static esp_err_t req_ota_write_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespOTAWrite *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespOTAWrite *)calloc(1,sizeof(CtrlMsgRespOTAWrite));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	if (ota_msg) {
-		ESP_LOGI(TAG, "Flashing image\n");
-		ota_msg = 0;
-	}
-	ctrl_msg__resp__otawrite__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_OTA_WRITE;
-	resp->resp_ota_write = resp_payload;
-
-	ota_ongoing=1;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespOTAWrite *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespOTAWrite *)calloc(1,sizeof(CtrlMsgRespOTAWrite));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    if (ota_msg) {
+        ESP_LOGI(TAG, "Flashing image\n");
+        ota_msg = 0;
+    }
+    ctrl_msg__resp__otawrite__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_OTA_WRITE;
+    resp->resp_ota_write = resp_payload;
+
+    ota_ongoing=1;
 #if CONFIG_ESP_OTA_WORKAROUND
-	/* Delay added is to give chance to transfer pending data at transport
-	 * Care to be taken, when OTA ongoing, no other processing should happen
-	 * So big sleep is added before any flash operations start
-	 * */
-	vTaskDelay(OTA_SLEEP_TIME_MS/portTICK_PERIOD_MS);
+    /* Delay added is to give chance to transfer pending data at transport
+     * Care to be taken, when OTA ongoing, no other processing should happen
+     * So big sleep is added before any flash operations start
+     * */
+    vTaskDelay(OTA_SLEEP_TIME_MS/portTICK_PERIOD_MS);
 #endif
-	printf(".");
-	fflush(stdout);
-	ret = esp_ota_write( handle, (const void *)req->req_ota_write->ota_data.data,
-			req->req_ota_write->ota_data.len);
-	ota_ongoing=0;
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "OTA write failed with return code 0x%x",ret);
-		resp_payload->resp = FAILURE;
-		return ESP_OK;
-	}
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    printf(".");
+    fflush(stdout);
+    ret = esp_ota_write( handle, (const void *)req->req_ota_write->ota_data.data,
+            req->req_ota_write->ota_data.len);
+    ota_ongoing=0;
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "OTA write failed with return code 0x%x",ret);
+        resp_payload->resp = FAILURE;
+        return ESP_OK;
+    }
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 }
 
 /* Function OTA end */
 static esp_err_t req_ota_end_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespOTAEnd *resp_payload = NULL;
-	TimerHandle_t xTimer = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespOTAEnd *)calloc(1,sizeof(CtrlMsgRespOTAEnd));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__otaend__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_OTA_END;
-	resp->resp_ota_end = resp_payload;
-
-	ota_ongoing=1;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespOTAEnd *resp_payload = NULL;
+    TimerHandle_t xTimer = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespOTAEnd *)calloc(1,sizeof(CtrlMsgRespOTAEnd));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__otaend__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_OTA_END;
+    resp->resp_ota_end = resp_payload;
+
+    ota_ongoing=1;
 #if CONFIG_ESP_OTA_WORKAROUND
-	vTaskDelay(OTA_SLEEP_TIME_MS/portTICK_PERIOD_MS);
+    vTaskDelay(OTA_SLEEP_TIME_MS/portTICK_PERIOD_MS);
 #endif
-	ret = esp_ota_end(handle);
-	ota_ongoing=0;
-	if (ret != ESP_OK) {
-		if (ret == ESP_ERR_OTA_VALIDATE_FAILED) {
-			ESP_LOGE(TAG, "Image validation failed, image is corrupted");
-		} else {
-			ESP_LOGE(TAG, "OTA update failed in end (%s)!", esp_err_to_name(ret));
-		}
-		goto err;
-	}
-
-	/* set OTA partition for next boot */
-	ret = esp_ota_set_boot_partition(update_partition);
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "esp_ota_set_boot_partition failed (%s)!", esp_err_to_name(ret));
-		goto err;
-	}
-	xTimer = xTimerCreate("Timer", RESTART_TIMEOUT , pdFALSE, 0, vTimerCallback);
-	if (xTimer == NULL) {
-		ESP_LOGE(TAG, "Failed to create timer to restart system");
-		goto err;
-	}
-	ret = xTimerStart(xTimer, 0);
-	if (ret != pdPASS) {
-		ESP_LOGE(TAG, "Failed to start timer to restart system");
-		goto err;
-	}
-	ESP_LOGE(TAG, "**** OTA updated successful, ESP32 will reboot in 5 sec ****");
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    ret = esp_ota_end(handle);
+    ota_ongoing=0;
+    if (ret != ESP_OK) {
+        if (ret == ESP_ERR_OTA_VALIDATE_FAILED) {
+            ESP_LOGE(TAG, "Image validation failed, image is corrupted");
+        } else {
+            ESP_LOGE(TAG, "OTA update failed in end (%s)!", esp_err_to_name(ret));
+        }
+        goto err;
+    }
+
+    /* set OTA partition for next boot */
+    ret = esp_ota_set_boot_partition(update_partition);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "esp_ota_set_boot_partition failed (%s)!", esp_err_to_name(ret));
+        goto err;
+    }
+    xTimer = xTimerCreate("Timer", RESTART_TIMEOUT , pdFALSE, 0, vTimerCallback);
+    if (xTimer == NULL) {
+        ESP_LOGE(TAG, "Failed to create timer to restart system");
+        goto err;
+    }
+    ret = xTimerStart(xTimer, 0);
+    if (ret != pdPASS) {
+        ESP_LOGE(TAG, "Failed to start timer to restart system");
+        goto err;
+    }
+    ESP_LOGE(TAG, "**** OTA updated successful, ESP32 will reboot in 5 sec ****");
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function vendor specific ie */
 static esp_err_t req_set_softap_vender_specific_ie_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespSetSoftAPVendorSpecificIE *resp_payload = NULL;
-	CtrlMsgReqSetSoftAPVendorSpecificIE *p_vsi = req->req_set_softap_vendor_specific_ie;
-	CtrlMsgReqVendorIEData *p_vid = NULL;
-	vendor_ie_data_t *v_data = NULL;
-
-	if (!req || !resp || !p_vsi) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-	p_vid = p_vsi->vendor_ie_data;
-
-	if (!p_vsi->enable) {
-
-		ESP_LOGI(TAG,"Disable softap vendor IE\n");
-
-	} else {
-
-		ESP_LOGI(TAG,"Enable softap vendor IE\n");
-
-		if (!p_vid ||
-		    !p_vid->payload.len ||
-		    !p_vid->payload.data) {
-			ESP_LOGE(TAG, "Invalid parameters");
-			return ESP_FAIL;
-		}
-
-		v_data = (vendor_ie_data_t*)calloc(1,sizeof(vendor_ie_data_t)+p_vid->payload.len);
-		if (!v_data) {
-			ESP_LOGE(TAG, "Malloc failed at %s:%u\n", __func__, __LINE__);
-			return ESP_FAIL;
-		}
-
-		v_data->length = p_vid->length;
-		v_data->element_id = p_vid->element_id;
-		v_data->vendor_oui_type = p_vid->vendor_oui_type;
-
-		memcpy(v_data->vendor_oui, p_vid->vendor_oui.data, VENDOR_OUI_BUF);
-
-		if (p_vid->payload.len && p_vid->payload.data) {
-			memcpy(v_data->payload, p_vid->payload.data, p_vid->payload.len);
-		}
-	}
-
-
-	resp_payload = (CtrlMsgRespSetSoftAPVendorSpecificIE *)
-		calloc(1,sizeof(CtrlMsgRespSetSoftAPVendorSpecificIE));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		if (v_data)
-			mem_free(v_data);
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__set_soft_apvendor_specific_ie__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_SOFTAP_VENDOR_SPECIFIC_IE;
-	resp->resp_set_softap_vendor_specific_ie = resp_payload;
-
-
-	ret = esp_wifi_set_vendor_ie(p_vsi->enable,
-			p_vsi->type,
-			p_vsi->idx,
-			v_data);
-
-	if (v_data)
-		mem_free(v_data);
-
-	if (ret != ESP_OK) {
-		ESP_LOGE(TAG, "Failed to set vendor information element %d \n", ret);
-		resp_payload->resp = FAILURE;
-		return ESP_OK;
-	}
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespSetSoftAPVendorSpecificIE *resp_payload = NULL;
+    CtrlMsgReqSetSoftAPVendorSpecificIE *p_vsi = req->req_set_softap_vendor_specific_ie;
+    CtrlMsgReqVendorIEData *p_vid = NULL;
+    vendor_ie_data_t *v_data = NULL;
+
+    if (!req || !resp || !p_vsi) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+    p_vid = p_vsi->vendor_ie_data;
+
+    if (!p_vsi->enable) {
+
+        ESP_LOGI(TAG,"Disable softap vendor IE\n");
+
+    } else {
+
+        ESP_LOGI(TAG,"Enable softap vendor IE\n");
+
+        if (!p_vid ||
+            !p_vid->payload.len ||
+            !p_vid->payload.data) {
+            ESP_LOGE(TAG, "Invalid parameters");
+            return ESP_FAIL;
+        }
+
+        v_data = (vendor_ie_data_t*)calloc(1,sizeof(vendor_ie_data_t)+p_vid->payload.len);
+        if (!v_data) {
+            ESP_LOGE(TAG, "Malloc failed at %s:%u\n", __func__, __LINE__);
+            return ESP_FAIL;
+        }
+
+        v_data->length = p_vid->length;
+        v_data->element_id = p_vid->element_id;
+        v_data->vendor_oui_type = p_vid->vendor_oui_type;
+
+        memcpy(v_data->vendor_oui, p_vid->vendor_oui.data, VENDOR_OUI_BUF);
+
+        if (p_vid->payload.len && p_vid->payload.data) {
+            memcpy(v_data->payload, p_vid->payload.data, p_vid->payload.len);
+        }
+    }
+
+
+    resp_payload = (CtrlMsgRespSetSoftAPVendorSpecificIE *)
+        calloc(1,sizeof(CtrlMsgRespSetSoftAPVendorSpecificIE));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        if (v_data)
+            mem_free(v_data);
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__set_soft_apvendor_specific_ie__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_SOFTAP_VENDOR_SPECIFIC_IE;
+    resp->resp_set_softap_vendor_specific_ie = resp_payload;
+
+
+    ret = esp_wifi_set_vendor_ie(p_vsi->enable,
+            p_vsi->type,
+            p_vsi->idx,
+            v_data);
+
+    if (v_data)
+        mem_free(v_data);
+
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to set vendor information element %d \n", ret);
+        resp_payload->resp = FAILURE;
+        return ESP_OK;
+    }
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 }
 
 /* Function set wifi maximum TX power */
 static esp_err_t req_set_wifi_max_tx_power_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespSetWifiMaxTxPower *resp_payload = NULL;
-
-	if (!req || !resp ) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespSetWifiMaxTxPower *)
-		calloc(1,sizeof(CtrlMsgRespSetWifiMaxTxPower));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__resp__set_wifi_max_tx_power__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_WIFI_MAX_TX_POWER;
-	resp->resp_set_wifi_max_tx_power = resp_payload;
-
-	if ((req->req_set_wifi_max_tx_power->wifi_max_tx_power > MAX_TX_POWER)
-			|| (req->req_set_wifi_max_tx_power->wifi_max_tx_power < MIN_TX_POWER)) {
-		ESP_LOGE(TAG, "Invalid maximum transmitting power value");
-		ESP_LOGE(TAG, "Value lies between [8,84]");
-		ESP_LOGE(TAG, "Please refer `wifi_set_max_tx_power` API documentation \n");
-		resp_payload->resp = CTRL__STATUS__Out_Of_Range;
-		return ESP_OK;
-	}
-
-	ret = esp_wifi_set_max_tx_power(req->req_set_wifi_max_tx_power->wifi_max_tx_power);
-	if (ret != SUCCESS) {
-		ESP_LOGE(TAG, "Failed to set TX power");
-		goto err;
-	}
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespSetWifiMaxTxPower *resp_payload = NULL;
+
+    if (!req || !resp ) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespSetWifiMaxTxPower *)
+        calloc(1,sizeof(CtrlMsgRespSetWifiMaxTxPower));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__resp__set_wifi_max_tx_power__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_SET_WIFI_MAX_TX_POWER;
+    resp->resp_set_wifi_max_tx_power = resp_payload;
+
+    if ((req->req_set_wifi_max_tx_power->wifi_max_tx_power > MAX_TX_POWER)
+            || (req->req_set_wifi_max_tx_power->wifi_max_tx_power < MIN_TX_POWER)) {
+        ESP_LOGE(TAG, "Invalid maximum transmitting power value");
+        ESP_LOGE(TAG, "Value lies between [8,84]");
+        ESP_LOGE(TAG, "Please refer `wifi_set_max_tx_power` API documentation \n");
+        resp_payload->resp = CTRL__STATUS__Out_Of_Range;
+        return ESP_OK;
+    }
+
+    ret = esp_wifi_set_max_tx_power(req->req_set_wifi_max_tx_power->wifi_max_tx_power);
+    if (ret != SUCCESS) {
+        ESP_LOGE(TAG, "Failed to set TX power");
+        goto err;
+    }
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function get wifi TX current power */
 static esp_err_t req_get_wifi_curr_tx_power_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	int8_t power = 0;
-	CtrlMsgRespGetWifiCurrTxPower *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetWifiCurrTxPower *)
-		calloc(1,sizeof(CtrlMsgRespGetWifiCurrTxPower));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__get_wifi_curr_tx_power__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_WIFI_CURR_TX_POWER;
-	resp->resp_get_wifi_curr_tx_power = resp_payload;
-
-	ret = esp_wifi_get_max_tx_power(&power);
-	if (ret != SUCCESS) {
-		ESP_LOGE(TAG, "Failed to get TX power");
-		goto err;
-	}
-	resp_payload->wifi_curr_tx_power = power;
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    int8_t power = 0;
+    CtrlMsgRespGetWifiCurrTxPower *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetWifiCurrTxPower *)
+        calloc(1,sizeof(CtrlMsgRespGetWifiCurrTxPower));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__get_wifi_curr_tx_power__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_WIFI_CURR_TX_POWER;
+    resp->resp_get_wifi_curr_tx_power = resp_payload;
+
+    ret = esp_wifi_get_max_tx_power(&power);
+    if (ret != SUCCESS) {
+        ESP_LOGE(TAG, "Failed to get TX power");
+        goto err;
+    }
+    resp_payload->wifi_curr_tx_power = power;
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 /* Function to return Firmware Version */
 static esp_err_t req_get_fw_version_handler (CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	CtrlMsgRespGetFwVersion *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespGetFwVersion *)
-		calloc(1,sizeof(CtrlMsgRespGetFwVersion));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__get_fw_version__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_FW_VERSION;
-	resp->resp_get_fw_version = resp_payload;
-
-	resp_payload->name = PROJECT_NAME;
-	resp_payload->major1 = PROJECT_VERSION_MAJOR_1;
-	resp_payload->major2 = PROJECT_VERSION_MAJOR_2;
-	resp_payload->minor = PROJECT_VERSION_MINOR;
-	resp_payload->rev_patch1 = PROJECT_REVISION_PATCH_1;
-	resp_payload->rev_patch2 = PROJECT_REVISION_PATCH_2;
-
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    CtrlMsgRespGetFwVersion *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespGetFwVersion *)
+        calloc(1,sizeof(CtrlMsgRespGetFwVersion));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__get_fw_version__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_GET_FW_VERSION;
+    resp->resp_get_fw_version = resp_payload;
+
+    resp_payload->name = PROJECT_NAME;
+    resp_payload->major1 = PROJECT_VERSION_MAJOR_1;
+    resp_payload->major2 = PROJECT_VERSION_MAJOR_2;
+    resp_payload->minor = PROJECT_VERSION_MINOR;
+    resp_payload->rev_patch1 = PROJECT_REVISION_PATCH_1;
+    resp_payload->rev_patch2 = PROJECT_REVISION_PATCH_2;
+
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 }
 
 static void heartbeat_timer_cb(TimerHandle_t xTimer)
 {
-	send_event_to_host(CTRL_MSG_ID__Event_Heartbeat);
-	hb_num++;
+    send_event_to_host(CTRL_MSG_ID__Event_Heartbeat);
+    hb_num++;
 }
 
 static void stop_heartbeat(void)
 {
-	if (handle_heartbeat_task &&
-	    xTimerIsTimerActive(handle_heartbeat_task)) {
-		ESP_LOGI(TAG, "Stopping HB timer");
-		xTimerStop(handle_heartbeat_task, portMAX_DELAY);
-		xTimerDelete(handle_heartbeat_task, portMAX_DELAY);
-		handle_heartbeat_task = NULL;
-	}
-	hb_num = 0;
+    if (handle_heartbeat_task &&
+        xTimerIsTimerActive(handle_heartbeat_task)) {
+        ESP_LOGI(TAG, "Stopping HB timer");
+        xTimerStop(handle_heartbeat_task, portMAX_DELAY);
+        xTimerDelete(handle_heartbeat_task, portMAX_DELAY);
+        handle_heartbeat_task = NULL;
+    }
+    hb_num = 0;
 }
 
 static esp_err_t start_heartbeat(int duration)
 {
-	esp_err_t ret = ESP_OK;
-
-	handle_heartbeat_task = xTimerCreate("HB_Timer",
-			duration*TIMEOUT_IN_SEC, pdTRUE, 0, heartbeat_timer_cb);
-	if (handle_heartbeat_task == NULL) {
-		ESP_LOGE(TAG, "Failed to Heartbeat");
-		return ESP_FAIL;
-	}
-
-	ret = xTimerStart(handle_heartbeat_task, 0);
-	if (ret != pdPASS) {
-		ESP_LOGE(TAG, "Failed to start Heartbeat");
-		return ESP_FAIL;
-	}
-	ESP_LOGI(TAG, "HB timer started for %u sec\n", duration);
-
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+
+    handle_heartbeat_task = xTimerCreate("HB_Timer",
+            duration*TIMEOUT_IN_SEC, pdTRUE, 0, heartbeat_timer_cb);
+    if (handle_heartbeat_task == NULL) {
+        ESP_LOGE(TAG, "Failed to Heartbeat");
+        return ESP_FAIL;
+    }
+
+    ret = xTimerStart(handle_heartbeat_task, 0);
+    if (ret != pdPASS) {
+        ESP_LOGE(TAG, "Failed to start Heartbeat");
+        return ESP_FAIL;
+    }
+    ESP_LOGI(TAG, "HB timer started for %u sec\n", duration);
+
+    return ESP_OK;
 }
 
 static esp_err_t enable_disable_feature(HostedFeature feature, bool enable)
 {
-	esp_err_t ret = ESP_OK;
-
-	esp_err_t val = 0;
-	wifi_mode_t mode = 0;
-	wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
-
-	switch(feature) {
-
-	case HOSTED_FEATURE__Hosted_Wifi:
-		if (enable) {
-			val = esp_wifi_get_mode(&mode);
-			if (val == ESP_ERR_WIFI_NOT_INIT) {
-				esp_wifi_init(&cfg);
-				esp_wifi_set_mode(WIFI_MODE_NULL);
-				esp_wifi_start();
-				ESP_LOGI(TAG, "Wifi configured, user need to trigger sta/softap APIs to further proceed");
-			} else {
-				ESP_LOGI(TAG, "Wifi already configured earlier, ignore");
-			}
-		} else {
-			esp_wifi_stop();
-			esp_wifi_deinit();
-			ESP_LOGI(TAG, "Destroy Wifi instance");
-		}
-		break;
-
-	case HOSTED_FEATURE__Hosted_Bluetooth:
+    esp_err_t ret = ESP_OK;
+
+    esp_err_t val = 0;
+    wifi_mode_t mode = 0;
+    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+
+    switch(feature) {
+
+    case HOSTED_FEATURE__Hosted_Wifi:
+        if (enable) {
+            val = esp_wifi_get_mode(&mode);
+            if (val == ESP_ERR_WIFI_NOT_INIT) {
+                esp_wifi_init(&cfg);
+                esp_wifi_set_mode(WIFI_MODE_NULL);
+                esp_wifi_start();
+                ESP_LOGI(TAG, "Wifi configured, user need to trigger sta/softap APIs to further proceed");
+            } else {
+                ESP_LOGI(TAG, "Wifi already configured earlier, ignore");
+            }
+        } else {
+            esp_wifi_stop();
+            esp_wifi_deinit();
+            ESP_LOGI(TAG, "Destroy Wifi instance");
+        }
+        break;
+
+    case HOSTED_FEATURE__Hosted_Bluetooth:
 #ifdef CONFIG_BT_ENABLED
-		if (enable) {
-			initialise_bluetooth();
-		} else {
-			deinitialize_bluetooth();
-			ESP_LOGI(TAG, "Destroy Bluetooth instance");
-		}
+        if (enable) {
+            initialise_bluetooth();
+        } else {
+            deinitialize_bluetooth();
+            ESP_LOGI(TAG, "Destroy Bluetooth instance");
+        }
 #else
-		if (enable)
-			ret = ESP_FAIL;
+        if (enable)
+            ret = ESP_FAIL;
 #endif
-		break;
+        break;
 
-	default:
-		ESP_LOGI(TAG, "Unsupported feature[%u]", feature);
-		ret = ESP_FAIL;
-		break;
-	}
+    default:
+        ESP_LOGI(TAG, "Unsupported feature[%u]", feature);
+        ret = ESP_FAIL;
+        break;
+    }
 
-	return ret;
+    return ret;
 }
 
 static esp_err_t configure_heartbeat(bool enable, int hb_duration)
 {
-	esp_err_t ret = ESP_OK;
-	int duration = hb_duration ;
+    esp_err_t ret = ESP_OK;
+    int duration = hb_duration ;
 
-	if (!enable) {
-		ESP_LOGI(TAG, "Stop Heatbeat");
-		stop_heartbeat();
+    if (!enable) {
+        ESP_LOGI(TAG, "Stop Heatbeat");
+        stop_heartbeat();
 
-	} else {
-		if (duration < MIN_HEARTBEAT_INTERVAL)
-			duration = MIN_HEARTBEAT_INTERVAL;
-		if (duration > MAX_HEARTBEAT_INTERVAL)
-			duration = MAX_HEARTBEAT_INTERVAL;
+    } else {
+        if (duration < MIN_HEARTBEAT_INTERVAL)
+            duration = MIN_HEARTBEAT_INTERVAL;
+        if (duration > MAX_HEARTBEAT_INTERVAL)
+            duration = MAX_HEARTBEAT_INTERVAL;
 
-		stop_heartbeat();
+        stop_heartbeat();
 
-		ret = start_heartbeat(duration);
-	}
+        ret = start_heartbeat(duration);
+    }
 
-	return ret;
+    return ret;
 }
 /* Function to config heartbeat */
 static esp_err_t req_config_heartbeat(CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	CtrlMsgRespConfigHeartbeat *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespConfigHeartbeat*)
-		calloc(1,sizeof(CtrlMsgRespConfigHeartbeat));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__config_heartbeat__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_CONFIG_HEARTBEAT;
-	resp->resp_config_heartbeat = resp_payload;
-
-	ret = configure_heartbeat(req->req_config_heartbeat->enable,
-			req->req_config_heartbeat->duration);
-	if (ret != SUCCESS) {
-		ESP_LOGE(TAG, "Failed to set heartbeat");
-		goto err;
-	}
-	resp_payload->resp = SUCCESS;
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    CtrlMsgRespConfigHeartbeat *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespConfigHeartbeat*)
+        calloc(1,sizeof(CtrlMsgRespConfigHeartbeat));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__config_heartbeat__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_CONFIG_HEARTBEAT;
+    resp->resp_config_heartbeat = resp_payload;
+
+    ret = configure_heartbeat(req->req_config_heartbeat->enable,
+            req->req_config_heartbeat->duration);
+    if (ret != SUCCESS) {
+        ESP_LOGE(TAG, "Failed to set heartbeat");
+        goto err;
+    }
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	resp_payload->resp = FAILURE;
-	return ESP_OK;
+    resp_payload->resp = FAILURE;
+    return ESP_OK;
 }
 
 static esp_err_t req_enable_disable(CtrlMsg *req,
-		CtrlMsg *resp, void *priv_data)
+        CtrlMsg *resp, void *priv_data)
 {
-	CtrlMsgRespEnableDisable *resp_payload = NULL;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters");
-		return ESP_FAIL;
-	}
-
-	resp_payload = (CtrlMsgRespEnableDisable*)
-		calloc(1,sizeof(CtrlMsgRespEnableDisable));
-	if (!resp_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__resp__enable_disable__init(resp_payload);
-	resp->payload_case = CTRL_MSG__PAYLOAD_RESP_ENABLE_DISABLE_FEAT;
-	resp->resp_enable_disable_feat = resp_payload;
-
-	if (ESP_OK == enable_disable_feature( req->req_enable_disable_feat->feature,
-			req->req_enable_disable_feat->enable)) {
-		resp_payload->resp = SUCCESS;
-		ESP_LOGI(TAG, "Request successful");
-	} else {
-		resp_payload->resp = FAILURE;
-		ESP_LOGI(TAG, "Request Failed");
-	}
-
-	return ESP_OK;
+    CtrlMsgRespEnableDisable *resp_payload = NULL;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (CtrlMsgRespEnableDisable*)
+        calloc(1,sizeof(CtrlMsgRespEnableDisable));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__resp__enable_disable__init(resp_payload);
+    resp->payload_case = CTRL_MSG__PAYLOAD_RESP_ENABLE_DISABLE_FEAT;
+    resp->resp_enable_disable_feat = resp_payload;
+
+    if (ESP_OK == enable_disable_feature( req->req_enable_disable_feat->feature,
+            req->req_enable_disable_feat->enable)) {
+        resp_payload->resp = SUCCESS;
+        ESP_LOGI(TAG, "Request successful");
+    } else {
+        resp_payload->resp = FAILURE;
+        ESP_LOGI(TAG, "Request Failed");
+    }
+
+    return ESP_OK;
 }
 
 static esp_ctrl_msg_req_t req_table[] = {
-	{
-		.req_num = CTRL_MSG_ID__Req_GetMACAddress ,
-		.command_handler = req_get_mac_address_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetWifiMode,
-		.command_handler = req_get_wifi_mode_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_SetWifiMode,
-		.command_handler = req_set_wifi_mode_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetAPConfig ,
-		.command_handler = req_get_ap_config_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_ConnectAP ,
-		.command_handler = req_connect_ap_handler
-	},
-	{
-		.req_num =  CTRL_MSG_ID__Req_GetSoftAPConfig ,
-		.command_handler = req_get_softap_config_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_StartSoftAP ,
-		.command_handler = req_start_softap_handler
-	},
-	{
-		.req_num =  CTRL_MSG_ID__Req_DisconnectAP ,
-		.command_handler = req_disconnect_ap_handler
-	},
-	{
-		.req_num =  CTRL_MSG_ID__Req_StopSoftAP ,
-		.command_handler = req_stop_softap_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetAPScanList ,
-		.command_handler = req_get_ap_scan_list_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetSoftAPConnectedSTAList ,
-		.command_handler = get_connected_sta_list_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_SetMacAddress,
-		.command_handler = req_set_mac_address_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_SetPowerSaveMode,
-		.command_handler = req_set_power_save_mode_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetPowerSaveMode,
-		.command_handler = req_get_power_save_mode_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_OTABegin,
-		.command_handler = req_ota_begin_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_OTAWrite,
-		.command_handler = req_ota_write_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_OTAEnd,
-		.command_handler = req_ota_end_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_SetSoftAPVendorSpecificIE,
-		.command_handler = req_set_softap_vender_specific_ie_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_SetWifiMaxTxPower,
-		.command_handler = req_set_wifi_max_tx_power_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetWifiCurrTxPower,
-		.command_handler = req_get_wifi_curr_tx_power_handler
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_ConfigHeartbeat,
-		.command_handler = req_config_heartbeat
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_EnableDisable,
-		.command_handler = req_enable_disable
-	},
-	{
-		.req_num = CTRL_MSG_ID__Req_GetFwVersion,
-		.command_handler = req_get_fw_version_handler
-	},
+    {
+        .req_num = CTRL_MSG_ID__Req_GetMACAddress ,
+        .command_handler = req_get_mac_address_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetWifiMode,
+        .command_handler = req_get_wifi_mode_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_SetWifiMode,
+        .command_handler = req_set_wifi_mode_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetAPConfig ,
+        .command_handler = req_get_ap_config_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_ConnectAP ,
+        .command_handler = req_connect_ap_handler
+    },
+    {
+        .req_num =  CTRL_MSG_ID__Req_GetSoftAPConfig ,
+        .command_handler = req_get_softap_config_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_StartSoftAP ,
+        .command_handler = req_start_softap_handler
+    },
+    {
+        .req_num =  CTRL_MSG_ID__Req_DisconnectAP ,
+        .command_handler = req_disconnect_ap_handler
+    },
+    {
+        .req_num =  CTRL_MSG_ID__Req_StopSoftAP ,
+        .command_handler = req_stop_softap_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetAPScanList ,
+        .command_handler = req_get_ap_scan_list_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetSoftAPConnectedSTAList ,
+        .command_handler = get_connected_sta_list_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_SetMacAddress,
+        .command_handler = req_set_mac_address_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_SetPowerSaveMode,
+        .command_handler = req_set_power_save_mode_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetPowerSaveMode,
+        .command_handler = req_get_power_save_mode_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_OTABegin,
+        .command_handler = req_ota_begin_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_OTAWrite,
+        .command_handler = req_ota_write_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_OTAEnd,
+        .command_handler = req_ota_end_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_SetSoftAPVendorSpecificIE,
+        .command_handler = req_set_softap_vender_specific_ie_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_SetWifiMaxTxPower,
+        .command_handler = req_set_wifi_max_tx_power_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetWifiCurrTxPower,
+        .command_handler = req_get_wifi_curr_tx_power_handler
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_ConfigHeartbeat,
+        .command_handler = req_config_heartbeat
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_EnableDisable,
+        .command_handler = req_enable_disable
+    },
+    {
+        .req_num = CTRL_MSG_ID__Req_GetFwVersion,
+        .command_handler = req_get_fw_version_handler
+    },
 };
 
 
 static int lookup_req_handler(int req_id)
 {
-	for (int i = 0; i < sizeof(req_table)/sizeof(esp_ctrl_msg_req_t); i++) {
-		if (req_table[i].req_num == req_id) {
-			return i;
-		}
-	}
-	return -1;
+    for (int i = 0; i < sizeof(req_table)/sizeof(esp_ctrl_msg_req_t); i++) {
+        if (req_table[i].req_num == req_id) {
+            return i;
+        }
+    }
+    return -1;
 }
 
 static esp_err_t esp_ctrl_msg_command_dispatcher(
-		CtrlMsg *req, CtrlMsg *resp,
-		void *priv_data)
+        CtrlMsg *req, CtrlMsg *resp,
+        void *priv_data)
 {
-	esp_err_t ret = ESP_OK;
-	int req_index = 0;
-
-	if (!req || !resp) {
-		ESP_LOGE(TAG, "Invalid parameters in command");
-		return ESP_FAIL;
-	}
-
-	if ((req->msg_id <= CTRL_MSG_ID__Req_Base) ||
-		(req->msg_id >= CTRL_MSG_ID__Req_Max)) {
-		ESP_LOGE(TAG, "Invalid command request lookup");
-	}
-
-	req_index = lookup_req_handler(req->msg_id);
-	if (req_index < 0) {
-		ESP_LOGE(TAG, "Invalid command handler lookup");
-		return ESP_FAIL;
-	}
-
-	ret = req_table[req_index].command_handler(req, resp, priv_data);
-	if (ret) {
-		ESP_LOGE(TAG, "Error executing command handler");
-		return ESP_FAIL;
-	}
-
-	return ESP_OK;
+    esp_err_t ret = ESP_OK;
+    int req_index = 0;
+
+    if (!req || !resp) {
+        ESP_LOGE(TAG, "Invalid parameters in command");
+        return ESP_FAIL;
+    }
+
+    if ((req->msg_id <= CTRL_MSG_ID__Req_Base) ||
+        (req->msg_id >= CTRL_MSG_ID__Req_Max)) {
+        ESP_LOGE(TAG, "Invalid command request lookup");
+    }
+
+    req_index = lookup_req_handler(req->msg_id);
+    if (req_index < 0) {
+        ESP_LOGE(TAG, "Invalid command handler lookup");
+        return ESP_FAIL;
+    }
+
+    ret = req_table[req_index].command_handler(req, resp, priv_data);
+    if (ret) {
+        ESP_LOGE(TAG, "Error executing command handler");
+        return ESP_FAIL;
+    }
+
+    return ESP_OK;
 }
 
 static void esp_ctrl_msg_cleanup(CtrlMsg *resp)
 {
-	if (!resp) {
-		return;
-	}
-
-	switch (resp->msg_id) {
-		case (CTRL_MSG_ID__Resp_GetMACAddress ) : {
-			if (resp->resp_get_mac_address) {
-				mem_free(resp->resp_get_mac_address->mac.data);
-				mem_free(resp->resp_get_mac_address);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_GetWifiMode) : {
-			mem_free(resp->resp_get_wifi_mode);
-			break;
-		} case (CTRL_MSG_ID__Resp_SetWifiMode ) : {
-			mem_free(resp->resp_set_wifi_mode);
-			break;
-		} case (CTRL_MSG_ID__Resp_GetAPConfig ) : {
-			if (resp->resp_get_ap_config) {
-				mem_free(resp->resp_get_ap_config->ssid.data);
-				mem_free(resp->resp_get_ap_config->bssid.data);
-				mem_free(resp->resp_get_ap_config);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_ConnectAP ) : {
-			if (resp->resp_connect_ap) {
-				mem_free(resp->resp_connect_ap->mac.data);
-				mem_free(resp->resp_connect_ap);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_GetSoftAPConfig ) : {
-			if (resp->resp_get_softap_config) {
-				mem_free(resp->resp_get_softap_config->ssid.data);
-				mem_free(resp->resp_get_softap_config->pwd.data);
-				mem_free(resp->resp_get_softap_config);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_StartSoftAP ) : {
-			if (resp->resp_start_softap) {
-				mem_free(resp->resp_start_softap->mac.data);
-				mem_free(resp->resp_start_softap);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_DisconnectAP ) : {
-			mem_free(resp->resp_disconnect_ap);
-			break;
-		} case (CTRL_MSG_ID__Resp_StopSoftAP ) : {
-			mem_free(resp->resp_stop_softap);
-			break;
-		} case (CTRL_MSG_ID__Resp_GetAPScanList) : {
-			if (resp->resp_scan_ap_list) {
-				if (resp->resp_scan_ap_list->entries) {
-					for (int i=0 ; i<resp->resp_scan_ap_list->n_entries; i++) {
-						if (resp->resp_scan_ap_list->entries[i]) {
-							if (resp->resp_scan_ap_list->entries[i]->ssid.data) {
-								mem_free(resp->resp_scan_ap_list->entries[i]->ssid.data);
-							}
-							if (resp->resp_scan_ap_list->entries[i]->bssid.data) {
-								mem_free(resp->resp_scan_ap_list->entries[i]->bssid.data);
-							}
-							mem_free(resp->resp_scan_ap_list->entries[i]);
-						}
-				   }
-					mem_free(resp->resp_scan_ap_list->entries);
-				}
-				mem_free(resp->resp_scan_ap_list);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_GetSoftAPConnectedSTAList ) : {
-			if (resp->resp_softap_connected_stas_list) {
-				if (resp->resp_softap_connected_stas_list->stations) {
-					for (int i=0 ; i < resp->resp_softap_connected_stas_list->num; i++) {
-						if (resp->resp_softap_connected_stas_list->stations[i]) {
-							if (resp->resp_softap_connected_stas_list->stations[i]->mac.data) {
-								mem_free(resp->resp_softap_connected_stas_list->stations[i]->mac.data);
-							}
-							mem_free(resp->resp_softap_connected_stas_list->stations[i]);
-						}
-					}
-					mem_free(resp->resp_softap_connected_stas_list->stations);
-				}
-				mem_free(resp->resp_softap_connected_stas_list);
-			}
-			break;
-		} case (CTRL_MSG_ID__Resp_SetMacAddress) : {
-			mem_free(resp->resp_set_mac_address);
-			break;
-		} case (CTRL_MSG_ID__Resp_SetPowerSaveMode) : {
-			mem_free(resp->resp_set_power_save_mode);
-			break;
-		} case (CTRL_MSG_ID__Resp_GetPowerSaveMode) : {
-			mem_free(resp->resp_get_power_save_mode);
-			break;
-		} case (CTRL_MSG_ID__Resp_OTABegin) : {
-			mem_free(resp->resp_ota_begin);
-			break;
-		} case (CTRL_MSG_ID__Resp_OTAWrite) : {
-			mem_free(resp->resp_ota_write);
-			break;
-		} case (CTRL_MSG_ID__Resp_OTAEnd) : {
-			mem_free(resp->resp_ota_end);
-			break;
-		} case (CTRL_MSG_ID__Resp_SetSoftAPVendorSpecificIE) : {
-			mem_free(resp->resp_set_softap_vendor_specific_ie);
-			break;
-		} case (CTRL_MSG_ID__Resp_SetWifiMaxTxPower) : {
-			mem_free(resp->resp_set_wifi_max_tx_power);
-			break;
-		} case (CTRL_MSG_ID__Resp_GetWifiCurrTxPower) : {
-			mem_free(resp->resp_get_wifi_curr_tx_power);
-			break;
-		} case (CTRL_MSG_ID__Resp_ConfigHeartbeat) : {
-			mem_free(resp->resp_config_heartbeat);
-			break;
-		} case (CTRL_MSG_ID__Resp_EnableDisable) : {
-			mem_free(resp->resp_enable_disable_feat);
-			break;
-		} case (CTRL_MSG_ID__Resp_GetFwVersion) : {
-			mem_free(resp->resp_get_fw_version);
-			break;
-		} case (CTRL_MSG_ID__Event_ESPInit) : {
-			mem_free(resp->event_esp_init);
-			break;
-		} case (CTRL_MSG_ID__Event_Heartbeat) : {
-			mem_free(resp->event_heartbeat);
-			break;
-		} case (CTRL_MSG_ID__Event_StationConnectedToAP) : {
-			mem_free(resp->event_station_connected_to_ap->bssid.data);
-			mem_free(resp->event_station_connected_to_ap->ssid.data);
-			mem_free(resp->event_station_connected_to_ap);
-			break;
-		} case (CTRL_MSG_ID__Event_StationDisconnectFromAP) : {
-			mem_free(resp->event_station_disconnect_from_ap->bssid.data);
-			mem_free(resp->event_station_disconnect_from_ap->ssid.data);
-			mem_free(resp->event_station_disconnect_from_ap);
-			break;
-		} case (CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP) : {
-			mem_free(resp->event_station_disconnect_from_esp_softap->mac.data);
-			mem_free(resp->event_station_disconnect_from_esp_softap);
-			break;
-		} case (CTRL_MSG_ID__Event_StationConnectedToESPSoftAP) : {
-			mem_free(resp->event_station_connected_to_esp_softap->mac.data);
-			mem_free(resp->event_station_connected_to_esp_softap);
-			break;
-		} default: {
-			ESP_LOGE(TAG, "Unsupported CtrlMsg type[%u]",resp->msg_id);
-			break;
-		}
-	}
+    if (!resp) {
+        return;
+    }
+
+    switch (resp->msg_id) {
+        case (CTRL_MSG_ID__Resp_GetMACAddress ) : {
+            if (resp->resp_get_mac_address) {
+                mem_free(resp->resp_get_mac_address->mac.data);
+                mem_free(resp->resp_get_mac_address);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_GetWifiMode) : {
+            mem_free(resp->resp_get_wifi_mode);
+            break;
+        } case (CTRL_MSG_ID__Resp_SetWifiMode ) : {
+            mem_free(resp->resp_set_wifi_mode);
+            break;
+        } case (CTRL_MSG_ID__Resp_GetAPConfig ) : {
+            if (resp->resp_get_ap_config) {
+                mem_free(resp->resp_get_ap_config->ssid.data);
+                mem_free(resp->resp_get_ap_config->bssid.data);
+                mem_free(resp->resp_get_ap_config);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_ConnectAP ) : {
+            if (resp->resp_connect_ap) {
+                mem_free(resp->resp_connect_ap->mac.data);
+                mem_free(resp->resp_connect_ap);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_GetSoftAPConfig ) : {
+            if (resp->resp_get_softap_config) {
+                mem_free(resp->resp_get_softap_config->ssid.data);
+                mem_free(resp->resp_get_softap_config->pwd.data);
+                mem_free(resp->resp_get_softap_config);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_StartSoftAP ) : {
+            if (resp->resp_start_softap) {
+                mem_free(resp->resp_start_softap->mac.data);
+                mem_free(resp->resp_start_softap);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_DisconnectAP ) : {
+            mem_free(resp->resp_disconnect_ap);
+            break;
+        } case (CTRL_MSG_ID__Resp_StopSoftAP ) : {
+            mem_free(resp->resp_stop_softap);
+            break;
+        } case (CTRL_MSG_ID__Resp_GetAPScanList) : {
+            if (resp->resp_scan_ap_list) {
+                if (resp->resp_scan_ap_list->entries) {
+                    for (int i=0 ; i<resp->resp_scan_ap_list->n_entries; i++) {
+                        if (resp->resp_scan_ap_list->entries[i]) {
+                            if (resp->resp_scan_ap_list->entries[i]->ssid.data) {
+                                mem_free(resp->resp_scan_ap_list->entries[i]->ssid.data);
+                            }
+                            if (resp->resp_scan_ap_list->entries[i]->bssid.data) {
+                                mem_free(resp->resp_scan_ap_list->entries[i]->bssid.data);
+                            }
+                            mem_free(resp->resp_scan_ap_list->entries[i]);
+                        }
+                   }
+                    mem_free(resp->resp_scan_ap_list->entries);
+                }
+                mem_free(resp->resp_scan_ap_list);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_GetSoftAPConnectedSTAList ) : {
+            if (resp->resp_softap_connected_stas_list) {
+                if (resp->resp_softap_connected_stas_list->stations) {
+                    for (int i=0 ; i < resp->resp_softap_connected_stas_list->num; i++) {
+                        if (resp->resp_softap_connected_stas_list->stations[i]) {
+                            if (resp->resp_softap_connected_stas_list->stations[i]->mac.data) {
+                                mem_free(resp->resp_softap_connected_stas_list->stations[i]->mac.data);
+                            }
+                            mem_free(resp->resp_softap_connected_stas_list->stations[i]);
+                        }
+                    }
+                    mem_free(resp->resp_softap_connected_stas_list->stations);
+                }
+                mem_free(resp->resp_softap_connected_stas_list);
+            }
+            break;
+        } case (CTRL_MSG_ID__Resp_SetMacAddress) : {
+            mem_free(resp->resp_set_mac_address);
+            break;
+        } case (CTRL_MSG_ID__Resp_SetPowerSaveMode) : {
+            mem_free(resp->resp_set_power_save_mode);
+            break;
+        } case (CTRL_MSG_ID__Resp_GetPowerSaveMode) : {
+            mem_free(resp->resp_get_power_save_mode);
+            break;
+        } case (CTRL_MSG_ID__Resp_OTABegin) : {
+            mem_free(resp->resp_ota_begin);
+            break;
+        } case (CTRL_MSG_ID__Resp_OTAWrite) : {
+            mem_free(resp->resp_ota_write);
+            break;
+        } case (CTRL_MSG_ID__Resp_OTAEnd) : {
+            mem_free(resp->resp_ota_end);
+            break;
+        } case (CTRL_MSG_ID__Resp_SetSoftAPVendorSpecificIE) : {
+            mem_free(resp->resp_set_softap_vendor_specific_ie);
+            break;
+        } case (CTRL_MSG_ID__Resp_SetWifiMaxTxPower) : {
+            mem_free(resp->resp_set_wifi_max_tx_power);
+            break;
+        } case (CTRL_MSG_ID__Resp_GetWifiCurrTxPower) : {
+            mem_free(resp->resp_get_wifi_curr_tx_power);
+            break;
+        } case (CTRL_MSG_ID__Resp_ConfigHeartbeat) : {
+            mem_free(resp->resp_config_heartbeat);
+            break;
+        } case (CTRL_MSG_ID__Resp_EnableDisable) : {
+            mem_free(resp->resp_enable_disable_feat);
+            break;
+        } case (CTRL_MSG_ID__Resp_GetFwVersion) : {
+            mem_free(resp->resp_get_fw_version);
+            break;
+        } case (CTRL_MSG_ID__Event_ESPInit) : {
+            mem_free(resp->event_esp_init);
+            break;
+        } case (CTRL_MSG_ID__Event_Heartbeat) : {
+            mem_free(resp->event_heartbeat);
+            break;
+        } case (CTRL_MSG_ID__Event_StationConnectedToAP) : {
+            mem_free(resp->event_station_connected_to_ap->bssid.data);
+            mem_free(resp->event_station_connected_to_ap->ssid.data);
+            mem_free(resp->event_station_connected_to_ap);
+            break;
+        } case (CTRL_MSG_ID__Event_StationDisconnectFromAP) : {
+            mem_free(resp->event_station_disconnect_from_ap->bssid.data);
+            mem_free(resp->event_station_disconnect_from_ap->ssid.data);
+            mem_free(resp->event_station_disconnect_from_ap);
+            break;
+        } case (CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP) : {
+            mem_free(resp->event_station_disconnect_from_esp_softap->mac.data);
+            mem_free(resp->event_station_disconnect_from_esp_softap);
+            break;
+        } case (CTRL_MSG_ID__Event_StationConnectedToESPSoftAP) : {
+            mem_free(resp->event_station_connected_to_esp_softap->mac.data);
+            mem_free(resp->event_station_connected_to_esp_softap);
+            break;
+        } default: {
+            ESP_LOGE(TAG, "Unsupported CtrlMsg type[%u]",resp->msg_id);
+            break;
+        }
+    }
 }
 
 esp_err_t data_transfer_handler(uint32_t session_id,const uint8_t *inbuf,
-		ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data)
+        ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data)
 {
-	CtrlMsg *req = NULL, resp = {0};
-	esp_err_t ret = ESP_OK;
-
-	if (!inbuf || !outbuf || !outlen) {
-		ESP_LOGE(TAG,"Buffers are NULL");
-		return ESP_FAIL;
-	}
-
-	req = ctrl_msg__unpack(NULL, inlen, inbuf);
-	if (!req) {
-		ESP_LOGE(TAG, "Unable to unpack config data");
-		return ESP_FAIL;
-	}
-
-	ctrl_msg__init (&resp);
-	resp.msg_type = CTRL_MSG_TYPE__Resp;
-	resp.msg_id = req->msg_id - CTRL_MSG_ID__Req_Base + CTRL_MSG_ID__Resp_Base;
-
-	// link the response to the request via the request id
-	resp.uid = req->uid;
-
-	ret = esp_ctrl_msg_command_dispatcher(req,&resp,NULL);
-	if (ret) {
-		ESP_LOGE(TAG, "Command dispatching not happening");
-		goto err;
-	}
-
-	ctrl_msg__free_unpacked(req, NULL);
-
-	*outlen = ctrl_msg__get_packed_size (&resp);
-	if (*outlen <= 0) {
-		ESP_LOGE(TAG, "Invalid encoding for response");
-		goto err;
-	}
-
-	*outbuf = (uint8_t *)calloc(1, *outlen);
-	if (!*outbuf) {
-		ESP_LOGE(TAG, "No memory allocated for outbuf");
-		esp_ctrl_msg_cleanup(&resp);
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__pack (&resp, *outbuf);
-	esp_ctrl_msg_cleanup(&resp);
-	return ESP_OK;
+    CtrlMsg *req = NULL, resp = {0};
+    esp_err_t ret = ESP_OK;
+
+    if (!inbuf || !outbuf || !outlen) {
+        ESP_LOGE(TAG,"Buffers are NULL");
+        return ESP_FAIL;
+    }
+
+    req = ctrl_msg__unpack(NULL, inlen, inbuf);
+    if (!req) {
+        ESP_LOGE(TAG, "Unable to unpack config data");
+        return ESP_FAIL;
+    }
+
+    ctrl_msg__init (&resp);
+    resp.msg_type = CTRL_MSG_TYPE__Resp;
+    resp.msg_id = req->msg_id - CTRL_MSG_ID__Req_Base + CTRL_MSG_ID__Resp_Base;
+
+    // link the response to the request via the request id
+    resp.uid = req->uid;
+
+    ret = esp_ctrl_msg_command_dispatcher(req,&resp,NULL);
+    if (ret) {
+        ESP_LOGE(TAG, "Command dispatching not happening");
+        goto err;
+    }
+
+    ctrl_msg__free_unpacked(req, NULL);
+
+    *outlen = ctrl_msg__get_packed_size (&resp);
+    if (*outlen <= 0) {
+        ESP_LOGE(TAG, "Invalid encoding for response");
+        goto err;
+    }
+
+    *outbuf = (uint8_t *)calloc(1, *outlen);
+    if (!*outbuf) {
+        ESP_LOGE(TAG, "No memory allocated for outbuf");
+        esp_ctrl_msg_cleanup(&resp);
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__pack (&resp, *outbuf);
+    esp_ctrl_msg_cleanup(&resp);
+    return ESP_OK;
 
 err:
-	esp_ctrl_msg_cleanup(&resp);
-	return ESP_FAIL;
+    esp_ctrl_msg_cleanup(&resp);
+    return ESP_FAIL;
 }
 
 /* Function ESPInit Notification */
 static esp_err_t ctrl_ntfy_ESPInit(CtrlMsg *ntfy)
 {
-	CtrlMsgEventESPInit *ntfy_payload = NULL;
-
-	ESP_LOGI(TAG,"event ESPInit");
-	ntfy_payload = (CtrlMsgEventESPInit *)
-		calloc(1,sizeof(CtrlMsgEventESPInit));
-	if (!ntfy_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__event__espinit__init(ntfy_payload);
-	ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_ESP_INIT;
-	ntfy->event_esp_init = ntfy_payload;
-
-	return ESP_OK;
+    CtrlMsgEventESPInit *ntfy_payload = NULL;
+
+    ESP_LOGI(TAG,"event ESPInit");
+    ntfy_payload = (CtrlMsgEventESPInit *)
+        calloc(1,sizeof(CtrlMsgEventESPInit));
+    if (!ntfy_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__event__espinit__init(ntfy_payload);
+    ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_ESP_INIT;
+    ntfy->event_esp_init = ntfy_payload;
+
+    return ESP_OK;
 }
 
 static esp_err_t ctrl_ntfy_heartbeat(CtrlMsg *ntfy)
 {
-	CtrlMsgEventHeartbeat *ntfy_payload = NULL;
+    CtrlMsgEventHeartbeat *ntfy_payload = NULL;
 
 
-	ntfy_payload = (CtrlMsgEventHeartbeat*)
-		calloc(1,sizeof(CtrlMsgEventHeartbeat));
-	if (!ntfy_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__event__heartbeat__init(ntfy_payload);
+    ntfy_payload = (CtrlMsgEventHeartbeat*)
+        calloc(1,sizeof(CtrlMsgEventHeartbeat));
+    if (!ntfy_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__event__heartbeat__init(ntfy_payload);
 
-	ntfy_payload->hb_num = hb_num;
+    ntfy_payload->hb_num = hb_num;
 
-	ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_HEARTBEAT;
-	ntfy->event_heartbeat = ntfy_payload;
+    ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_HEARTBEAT;
+    ntfy->event_heartbeat = ntfy_payload;
 
-	return ESP_OK;
+    return ESP_OK;
 
 }
 
 static esp_err_t ctrl_ntfy_StationConnectedToAP(CtrlMsg *ntfy,
-		const uint8_t *data, ssize_t len)
+        const uint8_t *data, ssize_t len)
 {
-	wifi_event_sta_connected_t *evt = (wifi_event_sta_connected_t*) data;
-	CtrlMsgEventStationConnectedToAP *ntfy_payload = NULL;
-	char bssid_l[BSSID_LENGTH] = {0};
-
-	if (!evt)
-		goto err;
-
-	ntfy_payload = (CtrlMsgEventStationConnectedToAP*)
-		calloc(1,sizeof(CtrlMsgEventStationConnectedToAP));
-	if (!ntfy_payload) {
-		ESP_LOGE(TAG,"%s allocate [%u] bytes failed", __func__, sizeof(CtrlMsgEventStationConnectedToAP));
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__event__station_connected_to_ap__init(ntfy_payload);
-
-	ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_CONNECTED_TO__AP;
-	ntfy->event_station_connected_to_ap = ntfy_payload;
-
-	ntfy_payload->authmode = evt->authmode;
-	ntfy_payload->aid = evt->aid;
-	ntfy_payload->channel = evt->channel;
-	ntfy_payload->resp = FAILURE;
-
-	/* ssid */
-	ntfy_payload->ssid_len = evt->ssid_len;
-	ntfy_payload->ssid.data = (uint8_t *)strndup((const char*)evt->ssid, ntfy_payload->ssid.len);
-	if (!ntfy_payload->ssid.data) {
-		ESP_LOGE(TAG, "%s: mem allocate failed for[%" PRIu32 "] bytes",
-				__func__, ntfy_payload->ssid_len);
-		ntfy_payload->ssid_len = 0;
-		ntfy_payload->resp = ESP_ERR_NO_MEM;
-		goto err;
-	}
-
-	/* bssid */
-	snprintf(bssid_l, BSSID_LENGTH, MACSTR, MAC2STR(evt->bssid));
-	ntfy_payload->bssid.len = strnlen(bssid_l, BSSID_LENGTH);
-	if (!ntfy_payload->bssid.len) {
-		ESP_LOGE(TAG, "%s: Invalid BSSID length", __func__);
-	} else {
-		ntfy_payload->bssid.data = (uint8_t *)strndup(bssid_l, BSSID_LENGTH);
-		if (!ntfy_payload->bssid.data) {
-			ESP_LOGE(TAG, "%s: allocate failed for [%d] bytes",
-					__func__, ntfy_payload->bssid.len);
-
-			ntfy_payload->bssid.len = 0;
-			ntfy_payload->resp = ESP_ERR_NO_MEM;
-			goto err;
-		}
-	}
-
-	ntfy_payload->resp = SUCCESS;
-	return ESP_OK;
+    wifi_event_sta_connected_t *evt = (wifi_event_sta_connected_t*) data;
+    CtrlMsgEventStationConnectedToAP *ntfy_payload = NULL;
+    char bssid_l[BSSID_LENGTH] = {0};
+
+    if (!evt)
+        goto err;
+
+    ntfy_payload = (CtrlMsgEventStationConnectedToAP*)
+        calloc(1,sizeof(CtrlMsgEventStationConnectedToAP));
+    if (!ntfy_payload) {
+        ESP_LOGE(TAG,"%s allocate [%u] bytes failed", __func__, sizeof(CtrlMsgEventStationConnectedToAP));
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__event__station_connected_to_ap__init(ntfy_payload);
+
+    ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_CONNECTED_TO__AP;
+    ntfy->event_station_connected_to_ap = ntfy_payload;
+
+    ntfy_payload->authmode = evt->authmode;
+    ntfy_payload->aid = evt->aid;
+    ntfy_payload->channel = evt->channel;
+    ntfy_payload->resp = FAILURE;
+
+    /* ssid */
+    ntfy_payload->ssid_len = evt->ssid_len;
+    ntfy_payload->ssid.data = (uint8_t *)strndup((const char*)evt->ssid, ntfy_payload->ssid.len);
+    if (!ntfy_payload->ssid.data) {
+        ESP_LOGE(TAG, "%s: mem allocate failed for[%" PRIu32 "] bytes",
+                __func__, ntfy_payload->ssid_len);
+        ntfy_payload->ssid_len = 0;
+        ntfy_payload->resp = ESP_ERR_NO_MEM;
+        goto err;
+    }
+
+    /* bssid */
+    snprintf(bssid_l, BSSID_LENGTH, MACSTR, MAC2STR(evt->bssid));
+    ntfy_payload->bssid.len = strnlen(bssid_l, BSSID_LENGTH);
+    if (!ntfy_payload->bssid.len) {
+        ESP_LOGE(TAG, "%s: Invalid BSSID length", __func__);
+    } else {
+        ntfy_payload->bssid.data = (uint8_t *)strndup(bssid_l, BSSID_LENGTH);
+        if (!ntfy_payload->bssid.data) {
+            ESP_LOGE(TAG, "%s: allocate failed for [%d] bytes",
+                    __func__, ntfy_payload->bssid.len);
+
+            ntfy_payload->bssid.len = 0;
+            ntfy_payload->resp = ESP_ERR_NO_MEM;
+            goto err;
+        }
+    }
+
+    ntfy_payload->resp = SUCCESS;
+    return ESP_OK;
 
 err:
-	ESP_LOGE(TAG, "%s: event incomplete", __func__);
+    ESP_LOGE(TAG, "%s: event incomplete", __func__);
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 
 static esp_err_t ctrl_ntfy_StationDisconnectFromAP(CtrlMsg *ntfy,
-		const uint8_t *data, ssize_t len)
+        const uint8_t *data, ssize_t len)
 {
-	wifi_event_sta_disconnected_t *evt = (wifi_event_sta_disconnected_t*) data;
-	CtrlMsgEventStationDisconnectFromAP *ntfy_payload = NULL;
-	char bssid_l[BSSID_LENGTH] = {0};
-
-	if (!evt)
-		return ESP_FAIL;
-
-	ntfy_payload = (CtrlMsgEventStationDisconnectFromAP*)
-		calloc(1,sizeof(CtrlMsgEventStationDisconnectFromAP));
-	if (!ntfy_payload) {
-		ESP_LOGE(TAG,"%s allocate [%u] bytes failed", __func__, sizeof(CtrlMsgEventStationDisconnectFromAP));
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__event__station_disconnect_from_ap__init(ntfy_payload);
-
-	ntfy_payload->resp = FAILURE;
-	ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_DISCONNECT_FROM__AP;
-	ntfy->event_station_disconnect_from_ap = ntfy_payload;
-
-	ntfy_payload->reason = evt->reason;
-	ntfy_payload->rssi = evt->rssi;
-
-	/* ssid */
-	ntfy_payload->ssid.len = evt->ssid_len;
-	ntfy_payload->ssid.data = (uint8_t *)strndup((const char*)evt->ssid, ntfy_payload->ssid.len);
-	if (!ntfy_payload->ssid.data) {
-		ESP_LOGE(TAG, "%s: mem allocate failed for[%"PRIu32"] bytes",
-				__func__, ntfy_payload->ssid_len);
-		ntfy_payload->ssid.len = 0;
-		ntfy_payload->resp = ESP_ERR_NO_MEM;
-		goto err;
-	}
-
-	/* bssid */
-	snprintf(bssid_l, BSSID_LENGTH, MACSTR, MAC2STR(evt->bssid));
-	ntfy_payload->bssid.len = strnlen(bssid_l, BSSID_LENGTH);
-	if (!ntfy_payload->bssid.len) {
-		ESP_LOGE(TAG, "%s: Invalid BSSID length", __func__);
-	} else {
-		ntfy_payload->bssid.data = (uint8_t *)strndup(bssid_l, BSSID_LENGTH);
-		if (!ntfy_payload->bssid.data) {
-			ESP_LOGE(TAG, "%s: allocate failed for [%d] bytes",
-					__func__, ntfy_payload->bssid.len);
-			ntfy_payload->bssid.len = 0;
-			ntfy_payload->resp = ESP_ERR_NO_MEM;
-			goto err;
-		}
-	}
-
-	ntfy_payload->resp = SUCCESS;
-	return ESP_OK;
+    wifi_event_sta_disconnected_t *evt = (wifi_event_sta_disconnected_t*) data;
+    CtrlMsgEventStationDisconnectFromAP *ntfy_payload = NULL;
+    char bssid_l[BSSID_LENGTH] = {0};
+
+    if (!evt)
+        return ESP_FAIL;
+
+    ntfy_payload = (CtrlMsgEventStationDisconnectFromAP*)
+        calloc(1,sizeof(CtrlMsgEventStationDisconnectFromAP));
+    if (!ntfy_payload) {
+        ESP_LOGE(TAG,"%s allocate [%u] bytes failed", __func__, sizeof(CtrlMsgEventStationDisconnectFromAP));
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__event__station_disconnect_from_ap__init(ntfy_payload);
+
+    ntfy_payload->resp = FAILURE;
+    ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_DISCONNECT_FROM__AP;
+    ntfy->event_station_disconnect_from_ap = ntfy_payload;
+
+    ntfy_payload->reason = evt->reason;
+    ntfy_payload->rssi = evt->rssi;
+
+    /* ssid */
+    ntfy_payload->ssid.len = evt->ssid_len;
+    ntfy_payload->ssid.data = (uint8_t *)strndup((const char*)evt->ssid, ntfy_payload->ssid.len);
+    if (!ntfy_payload->ssid.data) {
+        ESP_LOGE(TAG, "%s: mem allocate failed for[%"PRIu32"] bytes",
+                __func__, ntfy_payload->ssid_len);
+        ntfy_payload->ssid.len = 0;
+        ntfy_payload->resp = ESP_ERR_NO_MEM;
+        goto err;
+    }
+
+    /* bssid */
+    snprintf(bssid_l, BSSID_LENGTH, MACSTR, MAC2STR(evt->bssid));
+    ntfy_payload->bssid.len = strnlen(bssid_l, BSSID_LENGTH);
+    if (!ntfy_payload->bssid.len) {
+        ESP_LOGE(TAG, "%s: Invalid BSSID length", __func__);
+    } else {
+        ntfy_payload->bssid.data = (uint8_t *)strndup(bssid_l, BSSID_LENGTH);
+        if (!ntfy_payload->bssid.data) {
+            ESP_LOGE(TAG, "%s: allocate failed for [%d] bytes",
+                    __func__, ntfy_payload->bssid.len);
+            ntfy_payload->bssid.len = 0;
+            ntfy_payload->resp = ESP_ERR_NO_MEM;
+            goto err;
+        }
+    }
+
+    ntfy_payload->resp = SUCCESS;
+    return ESP_OK;
 
 err:
-	ESP_LOGE(TAG, "%s: event incomplete", __func__);
+    ESP_LOGE(TAG, "%s: event incomplete", __func__);
 
-	return ESP_OK;
+    return ESP_OK;
 }
 
 
 static esp_err_t ctrl_ntfy_StationConnectedToESPSoftAP(CtrlMsg *ntfy,
-		const uint8_t *data, ssize_t len)
+        const uint8_t *data, ssize_t len)
 {
-	char mac_str[BSSID_LENGTH] = "";
-	CtrlMsgEventStationConnectedToESPSoftAP *ntfy_payload = NULL;
-	wifi_event_ap_staconnected_t *evt = (wifi_event_ap_staconnected_t*) data;
-
-	if (!evt)
-		return ESP_FAIL;
-
-	ntfy_payload = (CtrlMsgEventStationConnectedToESPSoftAP*)
-		calloc(1,sizeof(CtrlMsgEventStationConnectedToESPSoftAP));
-	if (!ntfy_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__event__station_connected_to_espsoft_ap__init(ntfy_payload);
-
-	ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_CONNECTED_TO__ESP__SOFT_AP;
-	ntfy->event_station_connected_to_esp_softap = ntfy_payload;
-
-	ntfy_payload->aid = evt->aid;
-	ntfy_payload->is_mesh_child = evt->is_mesh_child;
-	ntfy_payload->resp = FAILURE;
-
-	snprintf(mac_str, BSSID_LENGTH, MACSTR, MAC2STR(evt->mac));
-	ntfy_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
-	ESP_LOGI(TAG,"mac [%s]\n", mac_str);
-
-	ntfy_payload->mac.data = (uint8_t *)strndup(mac_str, ntfy_payload->mac.len);
-	if (!ntfy_payload->mac.data) {
-		ESP_LOGE(TAG, "%s: Failed allocating [%u] bytes",
-				__func__, ntfy_payload->mac.len);
-		ntfy_payload->mac.len = 0;
-		ntfy_payload->resp = ESP_ERR_NO_MEM;
-		goto err;
-	}
-
-	ntfy_payload->resp = SUCCESS;
-	return ESP_OK;
+    char mac_str[BSSID_LENGTH] = "";
+    CtrlMsgEventStationConnectedToESPSoftAP *ntfy_payload = NULL;
+    wifi_event_ap_staconnected_t *evt = (wifi_event_ap_staconnected_t*) data;
+
+    if (!evt)
+        return ESP_FAIL;
+
+    ntfy_payload = (CtrlMsgEventStationConnectedToESPSoftAP*)
+        calloc(1,sizeof(CtrlMsgEventStationConnectedToESPSoftAP));
+    if (!ntfy_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__event__station_connected_to_espsoft_ap__init(ntfy_payload);
+
+    ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_CONNECTED_TO__ESP__SOFT_AP;
+    ntfy->event_station_connected_to_esp_softap = ntfy_payload;
+
+    ntfy_payload->aid = evt->aid;
+    ntfy_payload->is_mesh_child = evt->is_mesh_child;
+    ntfy_payload->resp = FAILURE;
+
+    snprintf(mac_str, BSSID_LENGTH, MACSTR, MAC2STR(evt->mac));
+    ntfy_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
+    ESP_LOGI(TAG,"mac [%s]\n", mac_str);
+
+    ntfy_payload->mac.data = (uint8_t *)strndup(mac_str, ntfy_payload->mac.len);
+    if (!ntfy_payload->mac.data) {
+        ESP_LOGE(TAG, "%s: Failed allocating [%u] bytes",
+                __func__, ntfy_payload->mac.len);
+        ntfy_payload->mac.len = 0;
+        ntfy_payload->resp = ESP_ERR_NO_MEM;
+        goto err;
+    }
+
+    ntfy_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	return ESP_OK;
+    return ESP_OK;
 }
 
 static esp_err_t ctrl_ntfy_StationDisconnectFromESPSoftAP(CtrlMsg *ntfy,
-		const uint8_t *data, ssize_t len)
+        const uint8_t *data, ssize_t len)
 {
-	char mac_str[BSSID_LENGTH] = "";
-	CtrlMsgEventStationDisconnectFromESPSoftAP *ntfy_payload = NULL;
-	wifi_event_ap_stadisconnected_t *evt = (wifi_event_ap_stadisconnected_t*) data;
-
-	if (!evt)
-		return ESP_FAIL;
-
-	ntfy_payload = (CtrlMsgEventStationDisconnectFromESPSoftAP*)
-		calloc(1,sizeof(CtrlMsgEventStationDisconnectFromESPSoftAP));
-	if (!ntfy_payload) {
-		ESP_LOGE(TAG,"Failed to allocate memory");
-		return ESP_ERR_NO_MEM;
-	}
-	ctrl_msg__event__station_disconnect_from_espsoft_ap__init(ntfy_payload);
-
-	ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_DISCONNECT_FROM__ESP__SOFT_AP;
-	ntfy->event_station_disconnect_from_esp_softap = ntfy_payload;
-
-	ntfy_payload->resp = FAILURE;
-	ntfy_payload->aid = evt->aid;
-	ntfy_payload->is_mesh_child = evt->is_mesh_child;
+    char mac_str[BSSID_LENGTH] = "";
+    CtrlMsgEventStationDisconnectFromESPSoftAP *ntfy_payload = NULL;
+    wifi_event_ap_stadisconnected_t *evt = (wifi_event_ap_stadisconnected_t*) data;
+
+    if (!evt)
+        return ESP_FAIL;
+
+    ntfy_payload = (CtrlMsgEventStationDisconnectFromESPSoftAP*)
+        calloc(1,sizeof(CtrlMsgEventStationDisconnectFromESPSoftAP));
+    if (!ntfy_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    ctrl_msg__event__station_disconnect_from_espsoft_ap__init(ntfy_payload);
+
+    ntfy->payload_case = CTRL_MSG__PAYLOAD_EVENT_STATION_DISCONNECT_FROM__ESP__SOFT_AP;
+    ntfy->event_station_disconnect_from_esp_softap = ntfy_payload;
+
+    ntfy_payload->resp = FAILURE;
+    ntfy_payload->aid = evt->aid;
+    ntfy_payload->is_mesh_child = evt->is_mesh_child;
 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
-	ntfy_payload->reason = evt->reason;
+    ntfy_payload->reason = evt->reason;
 #endif
 
-	snprintf(mac_str, BSSID_LENGTH, MACSTR, MAC2STR(evt->mac));
-	ntfy_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
-	ESP_LOGI(TAG,"mac [%s]\n", mac_str);
+    snprintf(mac_str, BSSID_LENGTH, MACSTR, MAC2STR(evt->mac));
+    ntfy_payload->mac.len = strnlen(mac_str, BSSID_LENGTH);
+    ESP_LOGI(TAG,"mac [%s]\n", mac_str);
 
-	ntfy_payload->mac.data = (uint8_t *)strndup(mac_str, ntfy_payload->mac.len);
-	if (!ntfy_payload->mac.data) {
-		ESP_LOGE(TAG, "Failed to allocate sta disconnect from softap");
-		ntfy_payload->mac.len = 0;
-		ntfy_payload->resp = ESP_ERR_NO_MEM;
-		goto err;
-	}
+    ntfy_payload->mac.data = (uint8_t *)strndup(mac_str, ntfy_payload->mac.len);
+    if (!ntfy_payload->mac.data) {
+        ESP_LOGE(TAG, "Failed to allocate sta disconnect from softap");
+        ntfy_payload->mac.len = 0;
+        ntfy_payload->resp = ESP_ERR_NO_MEM;
+        goto err;
+    }
 
-	ntfy_payload->resp = SUCCESS;
-	return ESP_OK;
+    ntfy_payload->resp = SUCCESS;
+    return ESP_OK;
 err:
-	return ESP_OK;
+    return ESP_OK;
 }
 
 esp_err_t ctrl_notify_handler(uint32_t session_id,const uint8_t *inbuf,
-		ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data)
+        ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data)
 {
-	CtrlMsg ntfy = {0};
-	int ret = SUCCESS;
-
-	if (!outbuf || !outlen) {
-		ESP_LOGE(TAG,"Buffers are NULL");
-		return ESP_FAIL;
-	}
-
-	ctrl_msg__init (&ntfy);
-	ntfy.msg_id = session_id;
-	ntfy.msg_type = CTRL_MSG_TYPE__Event;
-
-	switch (ntfy.msg_id) {
-		case CTRL_MSG_ID__Event_ESPInit : {
-			ret = ctrl_ntfy_ESPInit(&ntfy);
-			break;
-		} case CTRL_MSG_ID__Event_Heartbeat: {
-			ret = ctrl_ntfy_heartbeat(&ntfy);
-			break;
-		} case CTRL_MSG_ID__Event_StationDisconnectFromAP: {
-			ret = ctrl_ntfy_StationDisconnectFromAP(&ntfy, inbuf, inlen);
-			break;
-		} case CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP: {
-			ret = ctrl_ntfy_StationDisconnectFromESPSoftAP(&ntfy, inbuf, inlen);
-			break;
-		} case (CTRL_MSG_ID__Event_StationConnectedToAP) : {
-			ret = ctrl_ntfy_StationConnectedToAP(&ntfy, inbuf, inlen);
-			break;
-		} case (CTRL_MSG_ID__Event_StationConnectedToESPSoftAP) : {
-			ret = ctrl_ntfy_StationConnectedToESPSoftAP(&ntfy, inbuf, inlen);
-			break;
-		} default: {
-			ESP_LOGE(TAG, "Incorrect/unsupported Ctrl Notification[%u]\n",ntfy.msg_id);
-			goto err;
-			break;
-		}
-	}
-
-	if (ret) {
-		ESP_LOGI(TAG, "notification[%u] not sent\n", ntfy.msg_id);
-		goto err;
-	}
-
-	*outlen = ctrl_msg__get_packed_size (&ntfy);
-	if (*outlen <= 0) {
-		ESP_LOGE(TAG, "Invalid encoding for notify");
-		goto err;
-	}
-
-	*outbuf = (uint8_t *)calloc(1, *outlen);
-	if (!*outbuf) {
-		ESP_LOGE(TAG, "No memory allocated for outbuf");
-		esp_ctrl_msg_cleanup(&ntfy);
-		return ESP_ERR_NO_MEM;
-	}
-
-	ctrl_msg__pack (&ntfy, *outbuf);
-	esp_ctrl_msg_cleanup(&ntfy);
-	return ESP_OK;
+    CtrlMsg ntfy = {0};
+    int ret = SUCCESS;
+
+    if (!outbuf || !outlen) {
+        ESP_LOGE(TAG,"Buffers are NULL");
+        return ESP_FAIL;
+    }
+
+    ctrl_msg__init (&ntfy);
+    ntfy.msg_id = session_id;
+    ntfy.msg_type = CTRL_MSG_TYPE__Event;
+
+    switch (ntfy.msg_id) {
+        case CTRL_MSG_ID__Event_ESPInit : {
+            ret = ctrl_ntfy_ESPInit(&ntfy);
+            break;
+        } case CTRL_MSG_ID__Event_Heartbeat: {
+            ret = ctrl_ntfy_heartbeat(&ntfy);
+            break;
+        } case CTRL_MSG_ID__Event_StationDisconnectFromAP: {
+            ret = ctrl_ntfy_StationDisconnectFromAP(&ntfy, inbuf, inlen);
+            break;
+        } case CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP: {
+            ret = ctrl_ntfy_StationDisconnectFromESPSoftAP(&ntfy, inbuf, inlen);
+            break;
+        } case (CTRL_MSG_ID__Event_StationConnectedToAP) : {
+            ret = ctrl_ntfy_StationConnectedToAP(&ntfy, inbuf, inlen);
+            break;
+        } case (CTRL_MSG_ID__Event_StationConnectedToESPSoftAP) : {
+            ret = ctrl_ntfy_StationConnectedToESPSoftAP(&ntfy, inbuf, inlen);
+            break;
+        } default: {
+            ESP_LOGE(TAG, "Incorrect/unsupported Ctrl Notification[%u]\n",ntfy.msg_id);
+            goto err;
+            break;
+        }
+    }
+
+    if (ret) {
+        ESP_LOGI(TAG, "notification[%u] not sent\n", ntfy.msg_id);
+        goto err;
+    }
+
+    *outlen = ctrl_msg__get_packed_size (&ntfy);
+    if (*outlen <= 0) {
+        ESP_LOGE(TAG, "Invalid encoding for notify");
+        goto err;
+    }
+
+    *outbuf = (uint8_t *)calloc(1, *outlen);
+    if (!*outbuf) {
+        ESP_LOGE(TAG, "No memory allocated for outbuf");
+        esp_ctrl_msg_cleanup(&ntfy);
+        return ESP_ERR_NO_MEM;
+    }
+
+    ctrl_msg__pack (&ntfy, *outbuf);
+    esp_ctrl_msg_cleanup(&ntfy);
+    return ESP_OK;
 
 err:
-	if (!*outbuf) {
-		free(*outbuf);
-		*outbuf = NULL;
-	}
-	esp_ctrl_msg_cleanup(&ntfy);
-	return ESP_FAIL;
+    if (!*outbuf) {
+        free(*outbuf);
+        *outbuf = NULL;
+    }
+    esp_ctrl_msg_cleanup(&ntfy);
+    return ESP_FAIL;
 }

+ 12 - 12
esp/esp_driver/network_adapter/main/slave_control.h

@@ -44,22 +44,22 @@
 #define VENDOR_OUI_BUF          3
 
 typedef struct {
-	uint8_t ssid[SSID_LENGTH];
-	uint8_t pwd[PASSWORD_LENGTH];
-	uint8_t bssid[BSSID_LENGTH];
-	uint8_t chnl;
-	uint8_t max_conn;
-	int8_t rssi;
-	bool ssid_hidden;
-	wifi_auth_mode_t ecn;
-	uint8_t bw;
-	uint16_t count;
+    uint8_t ssid[SSID_LENGTH];
+    uint8_t pwd[PASSWORD_LENGTH];
+    uint8_t bssid[BSSID_LENGTH];
+    uint8_t chnl;
+    uint8_t max_conn;
+    int8_t rssi;
+    bool ssid_hidden;
+    wifi_auth_mode_t ecn;
+    uint8_t bw;
+    uint16_t count;
 } credentials_t;
 
 esp_err_t data_transfer_handler(uint32_t session_id,const uint8_t *inbuf,
-		ssize_t inlen,uint8_t **outbuf, ssize_t *outlen, void *priv_data);
+        ssize_t inlen,uint8_t **outbuf, ssize_t *outlen, void *priv_data);
 esp_err_t ctrl_notify_handler(uint32_t session_id,const uint8_t *inbuf,
-		ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data);
+        ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data);
 void send_event_to_host(int event_id);
 void send_event_data_to_host(int event_id, void *data, int size);
 

+ 456 - 456
esp/esp_driver/network_adapter/main/spi_slave_api.c

@@ -44,7 +44,7 @@ static const char TAG[] = "SPI_DRIVER";
 #define SPI_DMA_ALIGNMENT_MASK     (SPI_DMA_ALIGNMENT_BYTES-1)
 #define IS_SPI_DMA_ALIGNED(VAL)    (!((VAL)& SPI_DMA_ALIGNMENT_MASK))
 #define MAKE_SPI_DMA_ALIGNED(VAL)  (VAL += SPI_DMA_ALIGNMENT_BYTES - \
-				((VAL)& SPI_DMA_ALIGNMENT_MASK))
+                ((VAL)& SPI_DMA_ALIGNMENT_MASK))
 
 /* Chipset specific configurations */
 #ifdef CONFIG_IDF_TARGET_ESP32
@@ -180,7 +180,7 @@ static interface_handle_t if_handle_g;
 
 static interface_handle_t * esp_spi_init(void);
 static int32_t esp_spi_write(interface_handle_t *handle,
-				interface_buffer_handle_t *buf_handle);
+                interface_buffer_handle_t *buf_handle);
 static int esp_spi_read(interface_handle_t *if_handle, interface_buffer_handle_t * buf_handle);
 static esp_err_t esp_spi_reset(interface_handle_t *handle);
 static void esp_spi_deinit(interface_handle_t *handle);
@@ -188,11 +188,11 @@ static void esp_spi_read_done(void *handle);
 static void queue_next_transaction(void);
 
 if_ops_t if_ops = {
-	.init = esp_spi_init,
-	.write = esp_spi_write,
-	.read = esp_spi_read,
-	.reset = esp_spi_reset,
-	.deinit = esp_spi_deinit,
+    .init = esp_spi_init,
+    .write = esp_spi_write,
+    .read = esp_spi_read,
+    .reset = esp_spi_reset,
+    .deinit = esp_spi_deinit,
 };
 
 #define SPI_MEMPOOL_NUM_BLOCKS     ((SPI_TX_TOTAL_QUEUE_SIZE+SPI_DRIVER_QUEUE_SIZE*2+SPI_RX_TOTAL_QUEUE_SIZE))
@@ -202,688 +202,688 @@ static struct hosted_mempool * trans_mp_g;
 
 static inline void spi_mempool_create()
 {
-	buf_mp_tx_g = hosted_mempool_create(NULL, 0,
-			SPI_MEMPOOL_NUM_BLOCKS, SPI_BUFFER_SIZE);
-	/* re-use the mempool, as same size, can be seperate, if needed */
-	buf_mp_rx_g = buf_mp_tx_g;
-	trans_mp_g = hosted_mempool_create(NULL, 0,
-			SPI_MEMPOOL_NUM_BLOCKS, sizeof(spi_slave_transaction_t));
+    buf_mp_tx_g = hosted_mempool_create(NULL, 0,
+            SPI_MEMPOOL_NUM_BLOCKS, SPI_BUFFER_SIZE);
+    /* re-use the mempool, as same size, can be seperate, if needed */
+    buf_mp_rx_g = buf_mp_tx_g;
+    trans_mp_g = hosted_mempool_create(NULL, 0,
+            SPI_MEMPOOL_NUM_BLOCKS, sizeof(spi_slave_transaction_t));
 #if CONFIG_ESP_CACHE_MALLOC
-	assert(buf_mp_tx_g);
-	assert(buf_mp_rx_g);
-	assert(trans_mp_g);
+    assert(buf_mp_tx_g);
+    assert(buf_mp_rx_g);
+    assert(trans_mp_g);
 #endif
 }
 
 static inline void spi_mempool_destroy()
 {
-	hosted_mempool_destroy(buf_mp_tx_g);
-	hosted_mempool_destroy(trans_mp_g);
+    hosted_mempool_destroy(buf_mp_tx_g);
+    hosted_mempool_destroy(trans_mp_g);
 }
 
 static inline void *spi_buffer_tx_alloc(uint need_memset)
 {
-	return hosted_mempool_alloc(buf_mp_tx_g, SPI_BUFFER_SIZE, need_memset);
+    return hosted_mempool_alloc(buf_mp_tx_g, SPI_BUFFER_SIZE, need_memset);
 }
 
 static inline void *spi_buffer_rx_alloc(uint need_memset)
 {
-	return hosted_mempool_alloc(buf_mp_rx_g, SPI_BUFFER_SIZE, need_memset);
+    return hosted_mempool_alloc(buf_mp_rx_g, SPI_BUFFER_SIZE, need_memset);
 }
 
 static inline spi_slave_transaction_t *spi_trans_alloc(uint need_memset)
 {
-	return hosted_mempool_alloc(trans_mp_g, sizeof(spi_slave_transaction_t), need_memset);
+    return hosted_mempool_alloc(trans_mp_g, sizeof(spi_slave_transaction_t), need_memset);
 }
 
 static inline void spi_buffer_tx_free(void *buf)
 {
-	hosted_mempool_free(buf_mp_tx_g, buf);
+    hosted_mempool_free(buf_mp_tx_g, buf);
 }
 
 static inline void spi_buffer_rx_free(void *buf)
 {
-	hosted_mempool_free(buf_mp_rx_g, buf);
+    hosted_mempool_free(buf_mp_rx_g, buf);
 }
 
 static inline void spi_trans_free(spi_slave_transaction_t *trans)
 {
-	hosted_mempool_free(trans_mp_g, trans);
+    hosted_mempool_free(trans_mp_g, trans);
 }
 
 static inline void set_handshake_gpio(void)
 {
-	WRITE_PERI_REG(GPIO_OUT_W1TS_REG, GPIO_MASK_HANDSHAKE);
+    WRITE_PERI_REG(GPIO_OUT_W1TS_REG, GPIO_MASK_HANDSHAKE);
 }
 
 static inline void reset_handshake_gpio(void)
 {
-	WRITE_PERI_REG(GPIO_OUT_W1TC_REG, GPIO_MASK_HANDSHAKE);
+    WRITE_PERI_REG(GPIO_OUT_W1TC_REG, GPIO_MASK_HANDSHAKE);
 }
 
 static inline void set_dataready_gpio(void)
 {
-	WRITE_PERI_REG(GPIO_OUT_W1TS_REG, GPIO_MASK_DATA_READY);
+    WRITE_PERI_REG(GPIO_OUT_W1TS_REG, GPIO_MASK_DATA_READY);
 }
 
 static inline void reset_dataready_gpio(void)
 {
-	WRITE_PERI_REG(GPIO_OUT_W1TC_REG, GPIO_MASK_DATA_READY);
+    WRITE_PERI_REG(GPIO_OUT_W1TC_REG, GPIO_MASK_DATA_READY);
 }
 
 interface_context_t *interface_insert_driver(int (*event_handler)(uint8_t val))
 {
-	ESP_LOGI(TAG, "Using SPI interface");
-	memset(&context, 0, sizeof(context));
+    ESP_LOGI(TAG, "Using SPI interface");
+    memset(&context, 0, sizeof(context));
 
-	context.type = SPI;
-	context.if_ops = &if_ops;
-	context.event_handler = event_handler;
+    context.type = SPI;
+    context.if_ops = &if_ops;
+    context.event_handler = event_handler;
 
-	return &context;
+    return &context;
 }
 
 int interface_remove_driver()
 {
-	memset(&context, 0, sizeof(context));
-	return 0;
+    memset(&context, 0, sizeof(context));
+    return 0;
 }
 
 void generate_startup_event(uint8_t cap)
 {
-	struct esp_payload_header *header = NULL;
-	interface_buffer_handle_t buf_handle = {0};
-	struct esp_priv_event *event = NULL;
-	uint8_t *pos = NULL;
-	uint16_t len = 0;
-	uint8_t raw_tp_cap = 0;
-	uint32_t total_len = 0;
-	struct fw_version fw_ver = { 0 };
+    struct esp_payload_header *header = NULL;
+    interface_buffer_handle_t buf_handle = {0};
+    struct esp_priv_event *event = NULL;
+    uint8_t *pos = NULL;
+    uint16_t len = 0;
+    uint8_t raw_tp_cap = 0;
+    uint32_t total_len = 0;
+    struct fw_version fw_ver = { 0 };
 
-	buf_handle.payload = spi_buffer_tx_alloc(MEMSET_REQUIRED);
+    buf_handle.payload = spi_buffer_tx_alloc(MEMSET_REQUIRED);
 
-	raw_tp_cap = debug_get_raw_tp_conf();
+    raw_tp_cap = debug_get_raw_tp_conf();
 
-	assert(buf_handle.payload);
-	header = (struct esp_payload_header *) buf_handle.payload;
+    assert(buf_handle.payload);
+    header = (struct esp_payload_header *) buf_handle.payload;
 
-	header->if_type = ESP_PRIV_IF;
-	header->if_num = 0;
-	header->offset = htole16(sizeof(struct esp_payload_header));
-	header->priv_pkt_type = ESP_PACKET_TYPE_EVENT;
+    header->if_type = ESP_PRIV_IF;
+    header->if_num = 0;
+    header->offset = htole16(sizeof(struct esp_payload_header));
+    header->priv_pkt_type = ESP_PACKET_TYPE_EVENT;
 
-	/* Populate event data */
-	event = (struct esp_priv_event *) (buf_handle.payload + sizeof(struct esp_payload_header));
+    /* Populate event data */
+    event = (struct esp_priv_event *) (buf_handle.payload + sizeof(struct esp_payload_header));
 
-	event->event_type = ESP_PRIV_EVENT_INIT;
+    event->event_type = ESP_PRIV_EVENT_INIT;
 
-	/* Populate TLVs for event */
-	pos = event->event_data;
+    /* Populate TLVs for event */
+    pos = event->event_data;
 
-	/* TLVs start */
+    /* TLVs start */
 
-	/* TLV - Board type */
-	*pos = ESP_PRIV_FIRMWARE_CHIP_ID;   pos++;len++;
-	*pos = LENGTH_1_BYTE;               pos++;len++;
-	*pos = CONFIG_IDF_FIRMWARE_CHIP_ID; pos++;len++;
+    /* TLV - Board type */
+    *pos = ESP_PRIV_FIRMWARE_CHIP_ID;   pos++;len++;
+    *pos = LENGTH_1_BYTE;               pos++;len++;
+    *pos = CONFIG_IDF_FIRMWARE_CHIP_ID; pos++;len++;
 
-	/* TLV - Capability */
-	*pos = ESP_PRIV_CAPABILITY;         pos++;len++;
-	*pos = LENGTH_1_BYTE;               pos++;len++;
-	*pos = cap;                         pos++;len++;
+    /* TLV - Capability */
+    *pos = ESP_PRIV_CAPABILITY;         pos++;len++;
+    *pos = LENGTH_1_BYTE;               pos++;len++;
+    *pos = cap;                         pos++;len++;
 
-	*pos = ESP_PRIV_TEST_RAW_TP;        pos++;len++;
-	*pos = LENGTH_1_BYTE;               pos++;len++;
-	*pos = raw_tp_cap;                  pos++;len++;
+    *pos = ESP_PRIV_TEST_RAW_TP;        pos++;len++;
+    *pos = LENGTH_1_BYTE;               pos++;len++;
+    *pos = raw_tp_cap;                  pos++;len++;
 
-	/* fill structure with fw info */
-	strncpy(fw_ver.project_name, PROJECT_NAME, sizeof(fw_ver.project_name) - 1);
-	fw_ver.project_name[sizeof(fw_ver.project_name) - 1] = '\0';
-	fw_ver.major1 = PROJECT_VERSION_MAJOR_1;
-	fw_ver.major2 = PROJECT_VERSION_MAJOR_2;
-	fw_ver.minor  = PROJECT_VERSION_MINOR;
-	fw_ver.revision_patch_1 = PROJECT_REVISION_PATCH_1;
-	fw_ver.revision_patch_2 = PROJECT_REVISION_PATCH_2;
+    /* fill structure with fw info */
+    strncpy(fw_ver.project_name, PROJECT_NAME, sizeof(fw_ver.project_name) - 1);
+    fw_ver.project_name[sizeof(fw_ver.project_name) - 1] = '\0';
+    fw_ver.major1 = PROJECT_VERSION_MAJOR_1;
+    fw_ver.major2 = PROJECT_VERSION_MAJOR_2;
+    fw_ver.minor  = PROJECT_VERSION_MINOR;
+    fw_ver.revision_patch_1 = PROJECT_REVISION_PATCH_1;
+    fw_ver.revision_patch_2 = PROJECT_REVISION_PATCH_2;
 
-	/* TLV - Firmware Version */
-	*pos = ESP_PRIV_FW_DATA;            pos++;len++;
-	*pos = sizeof(fw_ver);              pos++;len++;
-	memcpy(pos, &fw_ver, sizeof(fw_ver));
-	pos += sizeof(fw_ver);
-	len += sizeof(fw_ver);
+    /* TLV - Firmware Version */
+    *pos = ESP_PRIV_FW_DATA;            pos++;len++;
+    *pos = sizeof(fw_ver);              pos++;len++;
+    memcpy(pos, &fw_ver, sizeof(fw_ver));
+    pos += sizeof(fw_ver);
+    len += sizeof(fw_ver);
 
-	/* TLVs end */
+    /* TLVs end */
 
-	event->event_len = len;
+    event->event_len = len;
 
-	/* payload len = Event len + sizeof(event type) + sizeof(event len) */
-	len += 2;
-	header->len = htole16(len);
+    /* payload len = Event len + sizeof(event type) + sizeof(event len) */
+    len += 2;
+    header->len = htole16(len);
 
-	total_len = len + sizeof(struct esp_payload_header);
+    total_len = len + sizeof(struct esp_payload_header);
 
-	if (!IS_SPI_DMA_ALIGNED(total_len)) {
-		MAKE_SPI_DMA_ALIGNED(total_len);
-	}
+    if (!IS_SPI_DMA_ALIGNED(total_len)) {
+        MAKE_SPI_DMA_ALIGNED(total_len);
+    }
 
-	buf_handle.payload_len = total_len;
+    buf_handle.payload_len = total_len;
 
 #if CONFIG_ESP_SPI_CHECKSUM
-	header->checksum = htole16(compute_checksum(buf_handle.payload, len + sizeof(struct esp_payload_header)));
+    header->checksum = htole16(compute_checksum(buf_handle.payload, len + sizeof(struct esp_payload_header)));
 #endif
 
 #ifdef CONFIG_ESP_ENABLE_TX_PRIORITY_QUEUES
-	xQueueSend(spi_tx_queue[PRIO_Q_OTHERS], &buf_handle, portMAX_DELAY);
-	xSemaphoreGive(spi_tx_sem);
+    xQueueSend(spi_tx_queue[PRIO_Q_OTHERS], &buf_handle, portMAX_DELAY);
+    xSemaphoreGive(spi_tx_sem);
 #else
-	xQueueSend(spi_tx_queue, &buf_handle, portMAX_DELAY);
+    xQueueSend(spi_tx_queue, &buf_handle, portMAX_DELAY);
 #endif
 
-	set_dataready_gpio();
-	/* process first data packet here to start transactions */
-	queue_next_transaction();
+    set_dataready_gpio();
+    /* process first data packet here to start transactions */
+    queue_next_transaction();
 }
 
 
 /* Invoked after transaction is queued and ready for pickup by master */
 static void IRAM_ATTR spi_post_setup_cb(spi_slave_transaction_t *trans)
 {
-	/* ESP peripheral ready for spi transaction. Set hadnshake line high. */
-	set_handshake_gpio();
+    /* ESP peripheral ready for spi transaction. Set hadnshake line high. */
+    set_handshake_gpio();
 }
 
 /* Invoked after transaction is sent/received.
  * Use this to set the handshake line low */
 static void IRAM_ATTR spi_post_trans_cb(spi_slave_transaction_t *trans)
 {
-	/* Clear handshake line */
-	reset_handshake_gpio();
+    /* Clear handshake line */
+    reset_handshake_gpio();
 }
 
 static uint8_t * get_next_tx_buffer(uint32_t *len)
 {
-	interface_buffer_handle_t buf_handle = {0};
-	esp_err_t ret = ESP_OK;
-	uint8_t *sendbuf = NULL;
-	struct esp_payload_header *header = NULL;
+    interface_buffer_handle_t buf_handle = {0};
+    esp_err_t ret = ESP_OK;
+    uint8_t *sendbuf = NULL;
+    struct esp_payload_header *header = NULL;
 
-	/* Get or create new tx_buffer
-	 *	1. Check if SPI TX queue has pending buffers. Return if valid buffer is obtained.
-	 *	2. Create a new empty tx buffer and return */
+    /* Get or create new tx_buffer
+     *  1. Check if SPI TX queue has pending buffers. Return if valid buffer is obtained.
+     *  2. Create a new empty tx buffer and return */
 
-	/* Get buffer from SPI Tx queue */
+    /* Get buffer from SPI Tx queue */
 #ifdef CONFIG_ESP_ENABLE_TX_PRIORITY_QUEUES
-	ret = xSemaphoreTake(spi_tx_sem, 0);
-	if (pdTRUE == ret)
-		if (pdFALSE == xQueueReceive(spi_tx_queue[PRIO_Q_SERIAL], &buf_handle, 0))
-			if (pdFALSE == xQueueReceive(spi_tx_queue[PRIO_Q_BT], &buf_handle, 0))
-				if (pdFALSE == xQueueReceive(spi_tx_queue[PRIO_Q_OTHERS], &buf_handle, 0))
-					ret = pdFALSE;
+    ret = xSemaphoreTake(spi_tx_sem, 0);
+    if (pdTRUE == ret)
+        if (pdFALSE == xQueueReceive(spi_tx_queue[PRIO_Q_SERIAL], &buf_handle, 0))
+            if (pdFALSE == xQueueReceive(spi_tx_queue[PRIO_Q_BT], &buf_handle, 0))
+                if (pdFALSE == xQueueReceive(spi_tx_queue[PRIO_Q_OTHERS], &buf_handle, 0))
+                    ret = pdFALSE;
 #else
-	ret = xQueueReceive(spi_tx_queue, &buf_handle, 0);
+    ret = xQueueReceive(spi_tx_queue, &buf_handle, 0);
 #endif
 
-	if (ret == pdTRUE && buf_handle.payload) {
-		if (len)
-			*len = buf_handle.payload_len;
-		/* Return real data buffer from queue */
-		return buf_handle.payload;
-	}
-
-	/* No real data pending, clear ready line and indicate host an idle state */
-	reset_dataready_gpio();
-
-	/* Create empty dummy buffer */
-	sendbuf = spi_buffer_tx_alloc(MEMSET_REQUIRED);
-	if (!sendbuf) {
-		ESP_LOGE(TAG, "Failed to allocate memory for dummy transaction");
-		if (len)
-			*len = 0;
-		return NULL;
-	}
-
-	/* Initialize header */
-	header = (struct esp_payload_header *) sendbuf;
-
-	/* Populate header to indicate it as a dummy buffer */
-	header->if_type = ESP_MAX_IF;
-	header->if_num = 0xF;
-	header->len = 0;
-
-	if (len)
-		*len = 0;
-
-	return sendbuf;
+    if (ret == pdTRUE && buf_handle.payload) {
+        if (len)
+            *len = buf_handle.payload_len;
+        /* Return real data buffer from queue */
+        return buf_handle.payload;
+    }
+
+    /* No real data pending, clear ready line and indicate host an idle state */
+    reset_dataready_gpio();
+
+    /* Create empty dummy buffer */
+    sendbuf = spi_buffer_tx_alloc(MEMSET_REQUIRED);
+    if (!sendbuf) {
+        ESP_LOGE(TAG, "Failed to allocate memory for dummy transaction");
+        if (len)
+            *len = 0;
+        return NULL;
+    }
+
+    /* Initialize header */
+    header = (struct esp_payload_header *) sendbuf;
+
+    /* Populate header to indicate it as a dummy buffer */
+    header->if_type = ESP_MAX_IF;
+    header->if_num = 0xF;
+    header->len = 0;
+
+    if (len)
+        *len = 0;
+
+    return sendbuf;
 }
 
 static int process_spi_rx(interface_buffer_handle_t *buf_handle)
 {
-	struct esp_payload_header *header = NULL;
-	uint16_t len = 0, offset = 0;
+    struct esp_payload_header *header = NULL;
+    uint16_t len = 0, offset = 0;
 #if CONFIG_ESP_SPI_CHECKSUM
-	uint16_t rx_checksum = 0, checksum = 0;
+    uint16_t rx_checksum = 0, checksum = 0;
 #endif
 
-	/* Validate received buffer. Drop invalid buffer. */
+    /* Validate received buffer. Drop invalid buffer. */
 
-	if (!buf_handle || !buf_handle->payload) {
-		ESP_LOGE(TAG, "%s: Invalid params", __func__);
-		return -1;
-	}
+    if (!buf_handle || !buf_handle->payload) {
+        ESP_LOGE(TAG, "%s: Invalid params", __func__);
+        return -1;
+    }
 
-	header = (struct esp_payload_header *) buf_handle->payload;
-	len = le16toh(header->len);
-	offset = le16toh(header->offset);
+    header = (struct esp_payload_header *) buf_handle->payload;
+    len = le16toh(header->len);
+    offset = le16toh(header->offset);
 
-	if (!len)
-		return -1;
+    if (!len)
+        return -1;
 
-	if (len+offset > SPI_BUFFER_SIZE) {
-		ESP_LOGE(TAG, "rx_pkt len+offset[%u]>max[%u], dropping it", len+offset, SPI_BUFFER_SIZE);
-		return -1;
-	}
+    if (len+offset > SPI_BUFFER_SIZE) {
+        ESP_LOGE(TAG, "rx_pkt len+offset[%u]>max[%u], dropping it", len+offset, SPI_BUFFER_SIZE);
+        return -1;
+    }
 
 #if CONFIG_ESP_SPI_CHECKSUM
-	rx_checksum = le16toh(header->checksum);
-	header->checksum = 0;
+    rx_checksum = le16toh(header->checksum);
+    header->checksum = 0;
 
-	checksum = compute_checksum(buf_handle->payload, len+offset);
+    checksum = compute_checksum(buf_handle->payload, len+offset);
 
-	if (checksum != rx_checksum) {
-		ESP_LOGE(TAG, "%s: cal_chksum[%u] != exp_chksum[%u], drop len[%u] offset[%u]",
-				__func__, checksum, rx_checksum, len, offset);
-		return -1;
-	}
+    if (checksum != rx_checksum) {
+        ESP_LOGE(TAG, "%s: cal_chksum[%u] != exp_chksum[%u], drop len[%u] offset[%u]",
+                __func__, checksum, rx_checksum, len, offset);
+        return -1;
+    }
 #endif
 
-	/* Buffer is valid */
-	buf_handle->if_type = header->if_type;
-	buf_handle->if_num = header->if_num;
-	buf_handle->free_buf_handle = esp_spi_read_done;
-	buf_handle->payload_len = le16toh(header->len) + offset;
-	buf_handle->priv_buffer_handle = buf_handle->payload;
+    /* Buffer is valid */
+    buf_handle->if_type = header->if_type;
+    buf_handle->if_num = header->if_num;
+    buf_handle->free_buf_handle = esp_spi_read_done;
+    buf_handle->payload_len = le16toh(header->len) + offset;
+    buf_handle->priv_buffer_handle = buf_handle->payload;
 
 #if ESP_PKT_STATS
-	if (buf_handle->if_type == ESP_STA_IF)
-		pkt_stats.sta_rx_in++;
+    if (buf_handle->if_type == ESP_STA_IF)
+        pkt_stats.sta_rx_in++;
 #endif
 #ifdef CONFIG_ESP_ENABLE_RX_PRIORITY_QUEUES
-	if (header->if_type == ESP_SERIAL_IF) {
-		xQueueSend(spi_rx_queue[PRIO_Q_SERIAL], buf_handle, portMAX_DELAY);
-	} else if (header->if_type == ESP_HCI_IF) {
-		xQueueSend(spi_rx_queue[PRIO_Q_BT], buf_handle, portMAX_DELAY);
-	} else {
-		xQueueSend(spi_rx_queue[PRIO_Q_OTHERS], buf_handle, portMAX_DELAY);
-	}
-
-	xSemaphoreGive(spi_rx_sem);
+    if (header->if_type == ESP_SERIAL_IF) {
+        xQueueSend(spi_rx_queue[PRIO_Q_SERIAL], buf_handle, portMAX_DELAY);
+    } else if (header->if_type == ESP_HCI_IF) {
+        xQueueSend(spi_rx_queue[PRIO_Q_BT], buf_handle, portMAX_DELAY);
+    } else {
+        xQueueSend(spi_rx_queue[PRIO_Q_OTHERS], buf_handle, portMAX_DELAY);
+    }
+
+    xSemaphoreGive(spi_rx_sem);
 #else
-	xQueueSend(spi_rx_queue, buf_handle, portMAX_DELAY);
+    xQueueSend(spi_rx_queue, buf_handle, portMAX_DELAY);
 #endif
-	return 0;
+    return 0;
 }
 
 static void queue_next_transaction(void)
 {
-	spi_slave_transaction_t *spi_trans = NULL;
-	uint32_t len = 0;
-	uint8_t *tx_buffer = get_next_tx_buffer(&len);
-	if (!tx_buffer) {
-		/* Queue next transaction failed */
-		ESP_LOGE(TAG , "Failed to queue new transaction\r\n");
-		return;
-	}
+    spi_slave_transaction_t *spi_trans = NULL;
+    uint32_t len = 0;
+    uint8_t *tx_buffer = get_next_tx_buffer(&len);
+    if (!tx_buffer) {
+        /* Queue next transaction failed */
+        ESP_LOGE(TAG , "Failed to queue new transaction\r\n");
+        return;
+    }
 
-	spi_trans = spi_trans_alloc(MEMSET_REQUIRED);
-	assert(spi_trans);
+    spi_trans = spi_trans_alloc(MEMSET_REQUIRED);
+    assert(spi_trans);
 
-	/* Attach Rx Buffer */
-	spi_trans->rx_buffer = spi_buffer_rx_alloc(MEMSET_REQUIRED);
-	assert(spi_trans->rx_buffer);
+    /* Attach Rx Buffer */
+    spi_trans->rx_buffer = spi_buffer_rx_alloc(MEMSET_REQUIRED);
+    assert(spi_trans->rx_buffer);
 
-	/* Attach Tx Buffer */
-	spi_trans->tx_buffer = tx_buffer;
+    /* Attach Tx Buffer */
+    spi_trans->tx_buffer = tx_buffer;
 
-	/* Transaction len */
-	spi_trans->length = SPI_BUFFER_SIZE * SPI_BITS_PER_WORD;
+    /* Transaction len */
+    spi_trans->length = SPI_BUFFER_SIZE * SPI_BITS_PER_WORD;
 
-	spi_slave_queue_trans(ESP_SPI_CONTROLLER, spi_trans, portMAX_DELAY);
+    spi_slave_queue_trans(ESP_SPI_CONTROLLER, spi_trans, portMAX_DELAY);
 }
 
 static void spi_transaction_post_process_task(void* pvParameters)
 {
-	spi_slave_transaction_t *spi_trans = NULL;
-	esp_err_t ret = ESP_OK;
-	interface_buffer_handle_t rx_buf_handle;
-
-	for (;;) {
-		memset(&rx_buf_handle, 0, sizeof(rx_buf_handle));
-
-		/* Await transmission result, after any kind of transmission a new packet
-		 * (dummy or real) must be placed in SPI slave
-		 */
-		spi_slave_get_trans_result(ESP_SPI_CONTROLLER, &spi_trans,
-				portMAX_DELAY);
-		/* Queue new transaction to get ready as soon as possible */
-		queue_next_transaction();
-		assert(spi_trans);
-
-		/* Free any tx buffer, data is not relevant anymore */
-		spi_buffer_tx_free((void *)spi_trans->tx_buffer);
-
-		/* Process received data */
-		if (spi_trans->rx_buffer) {
-			rx_buf_handle.payload = spi_trans->rx_buffer;
-
-			ret = process_spi_rx(&rx_buf_handle);
-
-			/* free rx_buffer if process_spi_rx returns an error
-			 * In success case it will be freed later */
-			if (ret != ESP_OK) {
-				spi_buffer_rx_free((void *)spi_trans->rx_buffer);
-			}
-		} else {
-			ESP_LOGI(TAG, "no rx_buf");
-		}
-
-		/* Free Transfer structure */
-		spi_trans_free(spi_trans);
-	}
+    spi_slave_transaction_t *spi_trans = NULL;
+    esp_err_t ret = ESP_OK;
+    interface_buffer_handle_t rx_buf_handle;
+
+    for (;;) {
+        memset(&rx_buf_handle, 0, sizeof(rx_buf_handle));
+
+        /* Await transmission result, after any kind of transmission a new packet
+         * (dummy or real) must be placed in SPI slave
+         */
+        spi_slave_get_trans_result(ESP_SPI_CONTROLLER, &spi_trans,
+                portMAX_DELAY);
+        /* Queue new transaction to get ready as soon as possible */
+        queue_next_transaction();
+        assert(spi_trans);
+
+        /* Free any tx buffer, data is not relevant anymore */
+        spi_buffer_tx_free((void *)spi_trans->tx_buffer);
+
+        /* Process received data */
+        if (spi_trans->rx_buffer) {
+            rx_buf_handle.payload = spi_trans->rx_buffer;
+
+            ret = process_spi_rx(&rx_buf_handle);
+
+            /* free rx_buffer if process_spi_rx returns an error
+             * In success case it will be freed later */
+            if (ret != ESP_OK) {
+                spi_buffer_rx_free((void *)spi_trans->rx_buffer);
+            }
+        } else {
+            ESP_LOGI(TAG, "no rx_buf");
+        }
+
+        /* Free Transfer structure */
+        spi_trans_free(spi_trans);
+    }
 }
 
 static void IRAM_ATTR gpio_disable_hs_isr_handler(void* arg)
 {
-	reset_handshake_gpio();
+    reset_handshake_gpio();
 }
 
 static void register_hs_disable_pin(uint32_t gpio_num)
 {
-	if (gpio_num != -1) {
-		gpio_reset_pin(gpio_num);
-
-		gpio_config_t slave_disable_hs_pin_conf={
-			.intr_type=GPIO_INTR_DISABLE,
-			.mode=GPIO_MODE_INPUT,
-			.pull_up_en=1,
-			.pin_bit_mask=(1<<gpio_num)
-		};
-
-		gpio_config(&slave_disable_hs_pin_conf);
-		gpio_set_intr_type(gpio_num, GPIO_INTR_NEGEDGE);
-		gpio_install_isr_service(0);
-		gpio_isr_handler_add(gpio_num, gpio_disable_hs_isr_handler, NULL);
-	}
+    if (gpio_num != -1) {
+        gpio_reset_pin(gpio_num);
+
+        gpio_config_t slave_disable_hs_pin_conf={
+            .intr_type=GPIO_INTR_DISABLE,
+            .mode=GPIO_MODE_INPUT,
+            .pull_up_en=1,
+            .pin_bit_mask=(1<<gpio_num)
+        };
+
+        gpio_config(&slave_disable_hs_pin_conf);
+        gpio_set_intr_type(gpio_num, GPIO_INTR_NEGEDGE);
+        gpio_install_isr_service(0);
+        gpio_isr_handler_add(gpio_num, gpio_disable_hs_isr_handler, NULL);
+    }
 }
 
 static interface_handle_t * esp_spi_init(void)
 {
-	esp_err_t ret = ESP_OK;
-
-	/* Configuration for the SPI bus */
-	spi_bus_config_t buscfg={
-		.mosi_io_num=GPIO_MOSI,
-		.miso_io_num=GPIO_MISO,
-		.sclk_io_num=GPIO_SCLK,
-		.quadwp_io_num = -1,
-		.quadhd_io_num = -1,
-		.max_transfer_sz = SPI_BUFFER_SIZE,
+    esp_err_t ret = ESP_OK;
+
+    /* Configuration for the SPI bus */
+    spi_bus_config_t buscfg={
+        .mosi_io_num=GPIO_MOSI,
+        .miso_io_num=GPIO_MISO,
+        .sclk_io_num=GPIO_SCLK,
+        .quadwp_io_num = -1,
+        .quadhd_io_num = -1,
+        .max_transfer_sz = SPI_BUFFER_SIZE,
 #if 0
-		/*
-		 * Moving ESP32 SPI slave interrupts in flash, Keeping it in IRAM gives crash,
-		 * While performing flash erase operation.
-		 */
-		.intr_flags=ESP_INTR_FLAG_IRAM
+        /*
+         * Moving ESP32 SPI slave interrupts in flash, Keeping it in IRAM gives crash,
+         * While performing flash erase operation.
+         */
+        .intr_flags=ESP_INTR_FLAG_IRAM
 #endif
-	};
-
-	/* Configuration for the SPI slave interface */
-	spi_slave_interface_config_t slvcfg={
-		.mode=SPI_MODE_2,
-		.spics_io_num=GPIO_CS,
-		.queue_size=SPI_DRIVER_QUEUE_SIZE,
-		.flags=0,
-		.post_setup_cb=spi_post_setup_cb,
-		.post_trans_cb=spi_post_trans_cb
-	};
-
-	/* Configuration for the handshake line */
-	gpio_config_t io_conf={
-		.intr_type=GPIO_INTR_DISABLE,
-		.mode=GPIO_MODE_OUTPUT,
-		.pin_bit_mask=GPIO_MASK_HANDSHAKE
-	};
-
-	/* Configuration for data_ready line */
-	gpio_config_t io_data_ready_conf={
-		.intr_type=GPIO_INTR_DISABLE,
-		.mode=GPIO_MODE_OUTPUT,
-		.pin_bit_mask=GPIO_MASK_DATA_READY
-	};
-
-	spi_mempool_create();
-
-	/* Configure handshake and data_ready lines as output */
-	gpio_config(&io_conf);
-	gpio_config(&io_data_ready_conf);
-	reset_handshake_gpio();
-	reset_dataready_gpio();
-
-	/* Enable pull-ups on SPI lines
-	 * so that no rogue pulses when no master is connected
-	 */
-	gpio_set_pull_mode(CONFIG_ESP_SPI_GPIO_HANDSHAKE, GPIO_PULLDOWN_ONLY);
-	gpio_set_pull_mode(CONFIG_ESP_SPI_GPIO_DATA_READY, GPIO_PULLDOWN_ONLY);
-	gpio_set_pull_mode(GPIO_MOSI, GPIO_PULLUP_ONLY);
-	gpio_set_pull_mode(GPIO_SCLK, GPIO_PULLUP_ONLY);
-	gpio_set_pull_mode(GPIO_CS, GPIO_PULLUP_ONLY);
-
-	ESP_LOGI(TAG, "SPI Ctrl:%u mode: %u, GPIOs: MOSI: %u, MISO: %u, CS: %u, CLK: %u HS: %u DR: %u\n",
-			ESP_SPI_CONTROLLER, slvcfg.mode,
-			GPIO_MOSI, GPIO_MISO, GPIO_CS, GPIO_SCLK, GPIO_HS, GPIO_DR);
+    };
+
+    /* Configuration for the SPI slave interface */
+    spi_slave_interface_config_t slvcfg={
+        .mode=SPI_MODE_2,
+        .spics_io_num=GPIO_CS,
+        .queue_size=SPI_DRIVER_QUEUE_SIZE,
+        .flags=0,
+        .post_setup_cb=spi_post_setup_cb,
+        .post_trans_cb=spi_post_trans_cb
+    };
+
+    /* Configuration for the handshake line */
+    gpio_config_t io_conf={
+        .intr_type=GPIO_INTR_DISABLE,
+        .mode=GPIO_MODE_OUTPUT,
+        .pin_bit_mask=GPIO_MASK_HANDSHAKE
+    };
+
+    /* Configuration for data_ready line */
+    gpio_config_t io_data_ready_conf={
+        .intr_type=GPIO_INTR_DISABLE,
+        .mode=GPIO_MODE_OUTPUT,
+        .pin_bit_mask=GPIO_MASK_DATA_READY
+    };
+
+    spi_mempool_create();
+
+    /* Configure handshake and data_ready lines as output */
+    gpio_config(&io_conf);
+    gpio_config(&io_data_ready_conf);
+    reset_handshake_gpio();
+    reset_dataready_gpio();
+
+    /* Enable pull-ups on SPI lines
+     * so that no rogue pulses when no master is connected
+     */
+    gpio_set_pull_mode(CONFIG_ESP_SPI_GPIO_HANDSHAKE, GPIO_PULLDOWN_ONLY);
+    gpio_set_pull_mode(CONFIG_ESP_SPI_GPIO_DATA_READY, GPIO_PULLDOWN_ONLY);
+    gpio_set_pull_mode(GPIO_MOSI, GPIO_PULLUP_ONLY);
+    gpio_set_pull_mode(GPIO_SCLK, GPIO_PULLUP_ONLY);
+    gpio_set_pull_mode(GPIO_CS, GPIO_PULLUP_ONLY);
+
+    ESP_LOGI(TAG, "SPI Ctrl:%u mode: %u, GPIOs: MOSI: %u, MISO: %u, CS: %u, CLK: %u HS: %u DR: %u\n",
+            ESP_SPI_CONTROLLER, slvcfg.mode,
+            GPIO_MOSI, GPIO_MISO, GPIO_CS, GPIO_SCLK, GPIO_HS, GPIO_DR);
 
 #ifdef CONFIG_ESP_ENABLE_TX_PRIORITY_QUEUES
-	ESP_LOGI(TAG, "TX Queues :Wifi[%u] bt[%u] serial[%u]",
-			SPI_TX_WIFI_QUEUE_SIZE, SPI_TX_BT_QUEUE_SIZE, SPI_TX_SERIAL_QUEUE_SIZE);
+    ESP_LOGI(TAG, "TX Queues :Wifi[%u] bt[%u] serial[%u]",
+            SPI_TX_WIFI_QUEUE_SIZE, SPI_TX_BT_QUEUE_SIZE, SPI_TX_SERIAL_QUEUE_SIZE);
 #else
-	ESP_LOGI(TAG, "TX Queues:%u", SPI_TX_QUEUE_SIZE);
+    ESP_LOGI(TAG, "TX Queues:%u", SPI_TX_QUEUE_SIZE);
 #endif
 
 #ifdef CONFIG_ESP_ENABLE_RX_PRIORITY_QUEUES
-	ESP_LOGI(TAG, "RX Queues :Wifi[%u] bt[%u] serial[%u]",
-			SPI_RX_WIFI_QUEUE_SIZE, SPI_RX_BT_QUEUE_SIZE, SPI_RX_SERIAL_QUEUE_SIZE);
+    ESP_LOGI(TAG, "RX Queues :Wifi[%u] bt[%u] serial[%u]",
+            SPI_RX_WIFI_QUEUE_SIZE, SPI_RX_BT_QUEUE_SIZE, SPI_RX_SERIAL_QUEUE_SIZE);
 #else
-	ESP_LOGI(TAG, "RX Queues:%u", SPI_RX_QUEUE_SIZE);
+    ESP_LOGI(TAG, "RX Queues:%u", SPI_RX_QUEUE_SIZE);
 #endif
-	register_hs_disable_pin(GPIO_CS);
+    register_hs_disable_pin(GPIO_CS);
 
-	/* Initialize SPI slave interface */
-	ret=spi_slave_initialize(ESP_SPI_CONTROLLER, &buscfg, &slvcfg, DMA_CHAN);
-	assert(ret==ESP_OK);
+    /* Initialize SPI slave interface */
+    ret=spi_slave_initialize(ESP_SPI_CONTROLLER, &buscfg, &slvcfg, DMA_CHAN);
+    assert(ret==ESP_OK);
 
-	//gpio_set_drive_capability(CONFIG_ESP_SPI_GPIO_HANDSHAKE, GPIO_DRIVE_CAP_3);
-	//gpio_set_drive_capability(CONFIG_ESP_SPI_GPIO_DATA_READY, GPIO_DRIVE_CAP_3);
-	gpio_set_drive_capability(GPIO_SCLK, GPIO_DRIVE_CAP_3);
-	gpio_set_drive_capability(GPIO_MISO, GPIO_DRIVE_CAP_3);
-	gpio_set_pull_mode(GPIO_MISO, GPIO_PULLDOWN_ONLY);
+    //gpio_set_drive_capability(CONFIG_ESP_SPI_GPIO_HANDSHAKE, GPIO_DRIVE_CAP_3);
+    //gpio_set_drive_capability(CONFIG_ESP_SPI_GPIO_DATA_READY, GPIO_DRIVE_CAP_3);
+    gpio_set_drive_capability(GPIO_SCLK, GPIO_DRIVE_CAP_3);
+    gpio_set_drive_capability(GPIO_MISO, GPIO_DRIVE_CAP_3);
+    gpio_set_pull_mode(GPIO_MISO, GPIO_PULLDOWN_ONLY);
 
 
-	memset(&if_handle_g, 0, sizeof(if_handle_g));
-	if_handle_g.state = INIT;
+    memset(&if_handle_g, 0, sizeof(if_handle_g));
+    if_handle_g.state = INIT;
 
 #ifdef CONFIG_ESP_ENABLE_TX_PRIORITY_QUEUES
-	spi_tx_sem = xSemaphoreCreateCounting(SPI_TX_TOTAL_QUEUE_SIZE, 0);
-	assert(spi_tx_sem);
-
-	spi_tx_queue[PRIO_Q_OTHERS] = xQueueCreate(SPI_TX_WIFI_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_tx_queue[PRIO_Q_OTHERS]);
-	spi_tx_queue[PRIO_Q_BT] = xQueueCreate(SPI_TX_BT_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_tx_queue[PRIO_Q_BT]);
-	spi_tx_queue[PRIO_Q_SERIAL] = xQueueCreate(SPI_TX_SERIAL_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_tx_queue[PRIO_Q_SERIAL]);
+    spi_tx_sem = xSemaphoreCreateCounting(SPI_TX_TOTAL_QUEUE_SIZE, 0);
+    assert(spi_tx_sem);
+
+    spi_tx_queue[PRIO_Q_OTHERS] = xQueueCreate(SPI_TX_WIFI_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_tx_queue[PRIO_Q_OTHERS]);
+    spi_tx_queue[PRIO_Q_BT] = xQueueCreate(SPI_TX_BT_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_tx_queue[PRIO_Q_BT]);
+    spi_tx_queue[PRIO_Q_SERIAL] = xQueueCreate(SPI_TX_SERIAL_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_tx_queue[PRIO_Q_SERIAL]);
 #else
-	spi_tx_queue = xQueueCreate(SPI_TX_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_tx_queue);
+    spi_tx_queue = xQueueCreate(SPI_TX_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_tx_queue);
 #endif
 
 #ifdef CONFIG_ESP_ENABLE_RX_PRIORITY_QUEUES
-	spi_rx_sem = xSemaphoreCreateCounting(SPI_RX_TOTAL_QUEUE_SIZE, 0);
-	assert(spi_rx_sem);
-
-	spi_rx_queue[PRIO_Q_OTHERS] = xQueueCreate(SPI_RX_WIFI_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_rx_queue[PRIO_Q_OTHERS]);
-	spi_rx_queue[PRIO_Q_BT] = xQueueCreate(SPI_RX_BT_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_rx_queue[PRIO_Q_BT]);
-	spi_rx_queue[PRIO_Q_SERIAL] = xQueueCreate(SPI_RX_SERIAL_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_rx_queue[PRIO_Q_SERIAL]);
+    spi_rx_sem = xSemaphoreCreateCounting(SPI_RX_TOTAL_QUEUE_SIZE, 0);
+    assert(spi_rx_sem);
+
+    spi_rx_queue[PRIO_Q_OTHERS] = xQueueCreate(SPI_RX_WIFI_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_rx_queue[PRIO_Q_OTHERS]);
+    spi_rx_queue[PRIO_Q_BT] = xQueueCreate(SPI_RX_BT_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_rx_queue[PRIO_Q_BT]);
+    spi_rx_queue[PRIO_Q_SERIAL] = xQueueCreate(SPI_RX_SERIAL_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_rx_queue[PRIO_Q_SERIAL]);
 #else
-	spi_rx_queue = xQueueCreate(SPI_RX_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
-	assert(spi_rx_queue);
+    spi_rx_queue = xQueueCreate(SPI_RX_QUEUE_SIZE, sizeof(interface_buffer_handle_t));
+    assert(spi_rx_queue);
 #endif
 
 
-	assert(xTaskCreate(spi_transaction_post_process_task , "spi_post_process_task" ,
-			CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL,
-			CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
+    assert(xTaskCreate(spi_transaction_post_process_task , "spi_post_process_task" ,
+            CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL,
+            CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
 
-	usleep(500);
+    usleep(500);
 
-	return &if_handle_g;
+    return &if_handle_g;
 }
 
 static int32_t esp_spi_write(interface_handle_t *handle, interface_buffer_handle_t *buf_handle)
 {
-	int32_t total_len = 0;
-	uint16_t offset = 0;
-	struct esp_payload_header *header = NULL;
-	interface_buffer_handle_t tx_buf_handle = {0};
+    int32_t total_len = 0;
+    uint16_t offset = 0;
+    struct esp_payload_header *header = NULL;
+    interface_buffer_handle_t tx_buf_handle = {0};
 
-	if (!handle || !buf_handle) {
-		ESP_LOGE(TAG , "Invalid arguments\n");
-		return ESP_FAIL;
-	}
+    if (!handle || !buf_handle) {
+        ESP_LOGE(TAG , "Invalid arguments\n");
+        return ESP_FAIL;
+    }
 
-	if (!buf_handle->payload_len || !buf_handle->payload) {
-		ESP_LOGE(TAG , "Invalid arguments, len:%d\n", buf_handle->payload_len);
-		return ESP_FAIL;
-	}
+    if (!buf_handle->payload_len || !buf_handle->payload) {
+        ESP_LOGE(TAG , "Invalid arguments, len:%d\n", buf_handle->payload_len);
+        return ESP_FAIL;
+    }
 
-	total_len = buf_handle->payload_len + sizeof (struct esp_payload_header);
+    total_len = buf_handle->payload_len + sizeof (struct esp_payload_header);
 
-	/* make the adresses dma aligned */
-	if (!IS_SPI_DMA_ALIGNED(total_len)) {
-		MAKE_SPI_DMA_ALIGNED(total_len);
-	}
+    /* make the adresses dma aligned */
+    if (!IS_SPI_DMA_ALIGNED(total_len)) {
+        MAKE_SPI_DMA_ALIGNED(total_len);
+    }
 
-	if (total_len > SPI_BUFFER_SIZE) {
+    if (total_len > SPI_BUFFER_SIZE) {
 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
-		ESP_LOGE(TAG, "Max frame length exceeded %ld.. drop it\n", total_len);
+        ESP_LOGE(TAG, "Max frame length exceeded %ld.. drop it\n", total_len);
 #else
-		ESP_LOGE(TAG, "Max frame length exceeded %d.. drop it\n", total_len);
+        ESP_LOGE(TAG, "Max frame length exceeded %d.. drop it\n", total_len);
 #endif
-		return ESP_FAIL;
-	}
+        return ESP_FAIL;
+    }
 
-	tx_buf_handle.if_type = buf_handle->if_type;
-	tx_buf_handle.if_num = buf_handle->if_num;
-	tx_buf_handle.payload_len = total_len;
+    tx_buf_handle.if_type = buf_handle->if_type;
+    tx_buf_handle.if_num = buf_handle->if_num;
+    tx_buf_handle.payload_len = total_len;
 
-	tx_buf_handle.payload = spi_buffer_tx_alloc(MEMSET_REQUIRED);
-	assert(tx_buf_handle.payload);
+    tx_buf_handle.payload = spi_buffer_tx_alloc(MEMSET_REQUIRED);
+    assert(tx_buf_handle.payload);
 
-	header = (struct esp_payload_header *) tx_buf_handle.payload;
+    header = (struct esp_payload_header *) tx_buf_handle.payload;
 
-	memset (header, 0, sizeof(struct esp_payload_header));
+    memset (header, 0, sizeof(struct esp_payload_header));
 
-	/* Initialize header */
-	header->if_type = buf_handle->if_type;
-	header->if_num = buf_handle->if_num;
-	header->len = htole16(buf_handle->payload_len);
-	offset = sizeof(struct esp_payload_header);
-	header->offset = htole16(offset);
-	header->seq_num = htole16(buf_handle->seq_num);
-	header->flags = buf_handle->flag;
+    /* Initialize header */
+    header->if_type = buf_handle->if_type;
+    header->if_num = buf_handle->if_num;
+    header->len = htole16(buf_handle->payload_len);
+    offset = sizeof(struct esp_payload_header);
+    header->offset = htole16(offset);
+    header->seq_num = htole16(buf_handle->seq_num);
+    header->flags = buf_handle->flag;
 
-	/* copy the data from caller */
-	memcpy(tx_buf_handle.payload + offset, buf_handle->payload, buf_handle->payload_len);
+    /* copy the data from caller */
+    memcpy(tx_buf_handle.payload + offset, buf_handle->payload, buf_handle->payload_len);
 
 
 #if CONFIG_ESP_SPI_CHECKSUM
-	header->checksum = htole16(compute_checksum(tx_buf_handle.payload,
-				offset+buf_handle->payload_len));
+    header->checksum = htole16(compute_checksum(tx_buf_handle.payload,
+                offset+buf_handle->payload_len));
 #endif
 
 #ifdef CONFIG_ESP_ENABLE_TX_PRIORITY_QUEUES
-	if (header->if_type == ESP_SERIAL_IF)
-		xQueueSend(spi_tx_queue[PRIO_Q_SERIAL], &tx_buf_handle, portMAX_DELAY);
-	else if (header->if_type == ESP_HCI_IF)
-		xQueueSend(spi_tx_queue[PRIO_Q_BT], &tx_buf_handle, portMAX_DELAY);
-	else
-		xQueueSend(spi_tx_queue[PRIO_Q_OTHERS], &tx_buf_handle, portMAX_DELAY);
-
-	xSemaphoreGive(spi_tx_sem);
+    if (header->if_type == ESP_SERIAL_IF)
+        xQueueSend(spi_tx_queue[PRIO_Q_SERIAL], &tx_buf_handle, portMAX_DELAY);
+    else if (header->if_type == ESP_HCI_IF)
+        xQueueSend(spi_tx_queue[PRIO_Q_BT], &tx_buf_handle, portMAX_DELAY);
+    else
+        xQueueSend(spi_tx_queue[PRIO_Q_OTHERS], &tx_buf_handle, portMAX_DELAY);
+
+    xSemaphoreGive(spi_tx_sem);
 #else
-	xQueueSend(spi_tx_queue, &tx_buf_handle, portMAX_DELAY);
+    xQueueSend(spi_tx_queue, &tx_buf_handle, portMAX_DELAY);
 #endif
 
-	/* indicate waiting data on ready pin */
-	set_dataready_gpio();
+    /* indicate waiting data on ready pin */
+    set_dataready_gpio();
 
-	return buf_handle->payload_len;
+    return buf_handle->payload_len;
 }
 
 static void IRAM_ATTR esp_spi_read_done(void *handle)
 {
-	spi_buffer_rx_free(handle);
+    spi_buffer_rx_free(handle);
 }
 
 static int esp_spi_read(interface_handle_t *if_handle, interface_buffer_handle_t *buf_handle)
 {
-	if (!if_handle) {
-		ESP_LOGE(TAG, "Invalid arguments to esp_spi_read\n");
-		return ESP_FAIL;
-	}
+    if (!if_handle) {
+        ESP_LOGE(TAG, "Invalid arguments to esp_spi_read\n");
+        return ESP_FAIL;
+    }
 
 #ifdef CONFIG_ESP_ENABLE_RX_PRIORITY_QUEUES
-	xSemaphoreTake(spi_rx_sem, portMAX_DELAY);
-
-	if (pdFALSE == xQueueReceive(spi_rx_queue[PRIO_Q_SERIAL], buf_handle, 0))
-		if (pdFALSE == xQueueReceive(spi_rx_queue[PRIO_Q_BT], buf_handle, 0))
-			if (pdFALSE == xQueueReceive(spi_rx_queue[PRIO_Q_OTHERS], buf_handle, 0)) {
-				ESP_LOGI(TAG, "%s No element in rx queue", __func__);
-		return ESP_FAIL;
-	}
+    xSemaphoreTake(spi_rx_sem, portMAX_DELAY);
+
+    if (pdFALSE == xQueueReceive(spi_rx_queue[PRIO_Q_SERIAL], buf_handle, 0))
+        if (pdFALSE == xQueueReceive(spi_rx_queue[PRIO_Q_BT], buf_handle, 0))
+            if (pdFALSE == xQueueReceive(spi_rx_queue[PRIO_Q_OTHERS], buf_handle, 0)) {
+                ESP_LOGI(TAG, "%s No element in rx queue", __func__);
+        return ESP_FAIL;
+    }
 #else
-	xQueueReceive(spi_rx_queue, buf_handle, portMAX_DELAY);
+    xQueueReceive(spi_rx_queue, buf_handle, portMAX_DELAY);
 #endif
 
-	return buf_handle->payload_len;
+    return buf_handle->payload_len;
 }
 
 static esp_err_t esp_spi_reset(interface_handle_t *handle)
 {
-	esp_err_t ret = ESP_OK;
-	ret = spi_slave_free(ESP_SPI_CONTROLLER);
-	if (ESP_OK != ret) {
-		ESP_LOGE(TAG, "spi slave bus free failed\n");
-	}
-	return ret;
+    esp_err_t ret = ESP_OK;
+    ret = spi_slave_free(ESP_SPI_CONTROLLER);
+    if (ESP_OK != ret) {
+        ESP_LOGE(TAG, "spi slave bus free failed\n");
+    }
+    return ret;
 }
 
 static void esp_spi_deinit(interface_handle_t *handle)
 {
-	esp_err_t ret = ESP_OK;
+    esp_err_t ret = ESP_OK;
 
-	spi_mempool_destroy();
+    spi_mempool_destroy();
 
-	ret = spi_slave_free(ESP_SPI_CONTROLLER);
-	if (ESP_OK != ret) {
-		ESP_LOGE(TAG, "spi slave bus free failed\n");
-		return;
-	}
+    ret = spi_slave_free(ESP_SPI_CONTROLLER);
+    if (ESP_OK != ret) {
+        ESP_LOGE(TAG, "spi slave bus free failed\n");
+        return;
+    }
 
-	ret = spi_bus_free(ESP_SPI_CONTROLLER);
-	if (ESP_OK != ret) {
-		ESP_LOGE(TAG, "spi all bus free failed\n");
-		return;
-	}
+    ret = spi_bus_free(ESP_SPI_CONTROLLER);
+    if (ESP_OK != ret) {
+        ESP_LOGE(TAG, "spi all bus free failed\n");
+        return;
+    }
 }

+ 62 - 62
esp/esp_driver/network_adapter/main/stats.c

@@ -104,10 +104,10 @@ static esp_err_t log_real_time_stats(TickType_t xTicksToWait) {
     ret = ESP_OK;
 
 exit:    /*Common return path*/
-	if (start_array)
-		free(start_array);
-	if (end_array)
-		free(end_array);
+    if (start_array)
+        free(start_array);
+    if (end_array)
+        free(end_array);
     return ret;
 }
 
@@ -130,80 +130,80 @@ uint64_t test_raw_tp_rx_len;
 
 void debug_update_raw_tp_rx_count(uint16_t len)
 {
-	test_raw_tp_rx_len += len;
+    test_raw_tp_rx_len += len;
 }
 
 static void raw_tp_timer_func(void* arg)
 {
-	static int32_t cur = 0;
-	double actual_bandwidth = 0;
-	int32_t div = 1024;
+    static int32_t cur = 0;
+    double actual_bandwidth = 0;
+    int32_t div = 1024;
 
-	actual_bandwidth = (test_raw_tp_rx_len*8);
+    actual_bandwidth = (test_raw_tp_rx_len*8);
 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
-	printf("%lu-%lu sec       %.2f kbits/sec\n\r", cur, cur + 1, actual_bandwidth/div);
+    printf("%lu-%lu sec       %.2f kbits/sec\n\r", cur, cur + 1, actual_bandwidth/div);
 #else
-	printf("%u-%u sec       %.2f kbits/sec\n\r", cur, cur + 1, actual_bandwidth/div);
+    printf("%u-%u sec       %.2f kbits/sec\n\r", cur, cur + 1, actual_bandwidth/div);
 #endif
-	cur++;
-	test_raw_tp_rx_len = 0;
+    cur++;
+    test_raw_tp_rx_len = 0;
 }
 
 #if TEST_RAW_TP__ESP_TO_HOST
 extern volatile uint8_t datapath;
 static void raw_tp_tx_task(void* pvParameters)
 {
-	int ret;
-	unsigned int *ptr = raw_tp_tx_buf;
-	interface_buffer_handle_t buf_handle = {0};
+    int ret;
+    unsigned int *ptr = raw_tp_tx_buf;
+    interface_buffer_handle_t buf_handle = {0};
 
-	sleep(5);
+    sleep(5);
 
-	for(int i=0;i<sizeof(raw_tp_tx_buf) - sizeof(int);i+=sizeof(int)) {
-		*ptr = 0xefbeadde;
-		ptr++;
-	}
+    for(int i=0;i<sizeof(raw_tp_tx_buf) - sizeof(int);i+=sizeof(int)) {
+        *ptr = 0xefbeadde;
+        ptr++;
+    }
 
 
-	for (;;) {
+    for (;;) {
 
-		if (!datapath) {
-			sleep(1);
-			continue;
-		}
+        if (!datapath) {
+            sleep(1);
+            continue;
+        }
 
-		buf_handle.if_type = ESP_TEST_IF;
-		buf_handle.if_num = 0;
+        buf_handle.if_type = ESP_TEST_IF;
+        buf_handle.if_num = 0;
 
-		buf_handle.payload = raw_tp_tx_buf;
-		buf_handle.payload_len = TEST_RAW_TP__BUF_SIZE;
+        buf_handle.payload = raw_tp_tx_buf;
+        buf_handle.payload_len = TEST_RAW_TP__BUF_SIZE;
 
-		ret = send_to_host_queue(&buf_handle, PRIO_Q_OTHERS);
+        ret = send_to_host_queue(&buf_handle, PRIO_Q_OTHERS);
 
-		if (ret) {
-			printf("Failed to send to queue\n");
-			continue;
-		}
-		test_raw_tp_rx_len += (TEST_RAW_TP__BUF_SIZE+sizeof(struct esp_payload_header));
-	}
+        if (ret) {
+            printf("Failed to send to queue\n");
+            continue;
+        }
+        test_raw_tp_rx_len += (TEST_RAW_TP__BUF_SIZE+sizeof(struct esp_payload_header));
+    }
 }
 #endif
 
 static void start_timer_to_display_raw_tp(void)
 {
-	test_args_t args = {0};
-	esp_timer_handle_t raw_tp_timer = {0};
-	esp_timer_create_args_t create_args = {
-			.callback = &raw_tp_timer_func,
-			.arg = &args,
-			.name = "raw_tp_timer",
-	};
+    test_args_t args = {0};
+    esp_timer_handle_t raw_tp_timer = {0};
+    esp_timer_create_args_t create_args = {
+            .callback = &raw_tp_timer_func,
+            .arg = &args,
+            .name = "raw_tp_timer",
+    };
 
-	ESP_ERROR_CHECK(esp_timer_create(&create_args, &raw_tp_timer));
+    ESP_ERROR_CHECK(esp_timer_create(&create_args, &raw_tp_timer));
 
-	args.timer = raw_tp_timer;
+    args.timer = raw_tp_timer;
 
-	ESP_ERROR_CHECK(esp_timer_start_periodic(raw_tp_timer, TEST_RAW_TP__TIMEOUT));
+    ESP_ERROR_CHECK(esp_timer_start_periodic(raw_tp_timer, TEST_RAW_TP__TIMEOUT));
 }
 
 #endif
@@ -211,34 +211,34 @@ static void start_timer_to_display_raw_tp(void)
 void create_debugging_tasks(void)
 {
 #ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
-	assert(xTaskCreate(log_runtime_stats_task, "log_runtime_stats_task",
-				CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL,
-				CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
+    assert(xTaskCreate(log_runtime_stats_task, "log_runtime_stats_task",
+                CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL,
+                CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
 #endif
 
 #if TEST_RAW_TP
-	start_timer_to_display_raw_tp();
+    start_timer_to_display_raw_tp();
   #if TEST_RAW_TP__ESP_TO_HOST
-	assert(xTaskCreate(raw_tp_tx_task , "raw_tp_tx_task",
-				CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL ,
-				CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
+    assert(xTaskCreate(raw_tp_tx_task , "raw_tp_tx_task",
+                CONFIG_ESP_DEFAULT_TASK_STACK_SIZE, NULL ,
+                CONFIG_ESP_DEFAULT_TASK_PRIO, NULL) == pdTRUE);
   #endif
 #endif
 }
 
 uint8_t debug_get_raw_tp_conf(void) {
-	uint8_t raw_tp_cap = 0;
+    uint8_t raw_tp_cap = 0;
 #if TEST_RAW_TP
-	raw_tp_cap |= ESP_TEST_RAW_TP;
+    raw_tp_cap |= ESP_TEST_RAW_TP;
   #if TEST_RAW_TP__ESP_TO_HOST
-	raw_tp_cap |= ESP_TEST_RAW_TP__ESP_TO_HOST;
+    raw_tp_cap |= ESP_TEST_RAW_TP__ESP_TO_HOST;
   #endif
-	if ((raw_tp_cap & ESP_TEST_RAW_TP__ESP_TO_HOST) == ESP_TEST_RAW_TP__ESP_TO_HOST)
-		ESP_LOGI(TAG, "\n\n*** Raw Throughput testing: ESP --> Host started ***\n");
-	else
-		ESP_LOGI(TAG, "\n\n*** Raw Throughput testing: Host --> ESP started ***\n");
+    if ((raw_tp_cap & ESP_TEST_RAW_TP__ESP_TO_HOST) == ESP_TEST_RAW_TP__ESP_TO_HOST)
+        ESP_LOGI(TAG, "\n\n*** Raw Throughput testing: ESP --> Host started ***\n");
+    else
+        ESP_LOGI(TAG, "\n\n*** Raw Throughput testing: Host --> ESP started ***\n");
 #endif
-	return raw_tp_cap;
+    return raw_tp_cap;
 }
 
 void debug_set_wifi_logging(void) {

+ 4 - 4
esp/esp_driver/network_adapter/main/stats.h

@@ -80,10 +80,10 @@ void debug_runtime_stats_task(void* pvParameters);
 #define TEST_RAW_TP__TIMEOUT         SEC_TO_USEC(1)
 
 typedef struct {
-	esp_timer_handle_t timer;
-	size_t cur_interval;
-	int64_t t_start;
-	SemaphoreHandle_t done;
+    esp_timer_handle_t timer;
+    size_t cur_interval;
+    int64_t t_start;
+    SemaphoreHandle_t done;
 } test_args_t;
 
 void debug_update_raw_tp_rx_count(uint16_t len);

+ 6 - 6
host/common/common.c

@@ -126,7 +126,7 @@ void hard_delay(int x)
   * @brief  get numbers from string
   * @param  val - return integer value,
   *         arg - input string
-  * @retval STM_OK on success, else STM_FAIL
+  * @retval ESP_OK on success, else ESP_FAIL
   */
 int get_num_from_string(int *val, char *arg)
 {
@@ -135,12 +135,12 @@ int get_num_from_string(int *val, char *arg)
 
   if (!arg || (arg[0]=='\0')) {
     printf("No number Identified \n");
-    return STM_FAIL;
+    return ESP_FAIL;
   }
 
   if (!val) {
     printf("No memory allocated \n");
-    return STM_FAIL;
+    return ESP_FAIL;
   }
 
   errno = 0;
@@ -150,16 +150,16 @@ int get_num_from_string(int *val, char *arg)
   if (endptr == str) {
     printf("No digits found \n");
     *val = 0;
-    return STM_FAIL;
+    return ESP_FAIL;
   }
 
   if ((errno == ERANGE) && ((*val == INT32_MAX) || (*val == INT32_MIN))) {
     perror("strtol");
     *val = 0;
-    return STM_FAIL;
+    return ESP_FAIL;
   }
 
-  return STM_OK;
+  return ESP_OK;
 }
 
 /** Local functions **/

+ 24 - 24
host/common/common.h

@@ -54,36 +54,36 @@ extern "C" {
 
 #define FREQ_IN_MHZ(x)                    ((x)*1000000)
 
-typedef enum stm_ret_s {
-	STM_OK                =  0,
-	STM_FAIL              = -1,
-	STM_FAIL_TIMEOUT      = -2,
-	STM_FAIL_INVALID_ARG  = -3,
-	STM_FAIL_NO_MEMORY    = -4,
-	STM_FAIL_NOT_FOUND    = -5,
-	STM_FAIL_NOT_FINISHED = -6,
-	STM_FAIL_ALIGNMENT    = -7
-}stm_ret_t;
+typedef enum {
+    ESP_OK                =  0,
+    ESP_FAIL              = -1,
+    ESP_FAIL_TIMEOUT      = -2,
+    ESP_FAIL_INVALID_ARG  = -3,
+    ESP_FAIL_NO_MEMORY    = -4,
+    ESP_FAIL_NOT_FOUND    = -5,
+    ESP_FAIL_NOT_FINISHED = -6,
+    ESP_FAIL_ALIGNMENT    = -7
+} esp_ret;
 
 typedef enum {
-	TRANSPORT_INACTIVE,
-	TRANSPORT_ACTIVE
-} transport_drv_events_e;
+    TRANSPORT_INACTIVE,
+    TRANSPORT_ACTIVE
+} transport_drv_events;
 
 /** Exported Structures **/
 /* interface header */
 typedef struct {
-	union {
-		void *priv_buffer_handle;
-	};
-	uint8_t if_type;
-	uint8_t if_num;
-	uint8_t *payload;
-	uint8_t flag;
-	uint16_t payload_len;
-	uint16_t seq_num;
-
-	void (*free_buf_handle)(void *buf_handle);
+    union {
+        void *priv_buffer_handle;
+    };
+    uint8_t if_type;
+    uint8_t if_num;
+    uint8_t *payload;
+    uint8_t flag;
+    uint16_t payload_len;
+    uint16_t seq_num;
+
+    void (*free_buf_handle)(void *buf_handle);
 } interface_buffer_handle_t;
 
 /** Exported variables **/

+ 71 - 71
host/common/stats.c

@@ -41,106 +41,106 @@ static uint64_t test_raw_tp_len = 0;
 
 void test_raw_tp_cleanup(void)
 {
-	int ret = 0;
-
-	if (log_raw_tp_stats_timer_running) {
-		ret = hosted_timer_stop(hosted_timer_handler);
-		if (!ret) {
-			log_raw_tp_stats_timer_running = 0;
-		}
-		raw_tp_timer_count = 0;
-	}
-
-	if (raw_tp_tx_task_id) {
-		ret = osThreadTerminate(raw_tp_tx_task_id);
-		raw_tp_tx_task_id = 0;
-	}
+    int ret = 0;
+
+    if (log_raw_tp_stats_timer_running) {
+        ret = hosted_timer_stop(hosted_timer_handler);
+        if (!ret) {
+            log_raw_tp_stats_timer_running = 0;
+        }
+        raw_tp_timer_count = 0;
+    }
+
+    if (raw_tp_tx_task_id) {
+        ret = osThreadTerminate(raw_tp_tx_task_id);
+        raw_tp_tx_task_id = 0;
+    }
 }
 
 void raw_tp_timer_func(void const * arg)
 {
-	double actual_bandwidth = 0;
-	int32_t div = 1024;
+    double actual_bandwidth = 0;
+    int32_t div = 1024;
 
-	actual_bandwidth = (test_raw_tp_len*8);
-	printf("%lu-%lu sec %.5f Kbits/sec\n\r", raw_tp_timer_count, raw_tp_timer_count + 1, actual_bandwidth/div);
-	raw_tp_timer_count++;
-	test_raw_tp_len = 0;
+    actual_bandwidth = (test_raw_tp_len*8);
+    printf("%lu-%lu sec %.5f Kbits/sec\n\r", raw_tp_timer_count, raw_tp_timer_count + 1, actual_bandwidth/div);
+    raw_tp_timer_count++;
+    test_raw_tp_len = 0;
 }
 
 static void raw_tp_tx_task(void const* pvParameters)
 {
-	int ret;
-	static uint16_t seq_num = 0;
-	uint8_t *raw_tp_tx_buf = NULL;
-	sleep(5);
-	while (1) {
-
-		raw_tp_tx_buf = (uint8_t*)hosted_calloc(1, TEST_RAW_TP__BUF_SIZE);
-		ret = send_to_slave(ESP_TEST_IF, 0, raw_tp_tx_buf, TEST_RAW_TP__BUF_SIZE);
-		if (ret != STM_OK) {
-			printf("Failed to send to queue\n");
-			continue;
-		}
-		test_raw_tp_len += (TEST_RAW_TP__BUF_SIZE+sizeof(struct esp_payload_header));
-		seq_num++;
-	}
+    int ret;
+    static uint16_t seq_num = 0;
+    uint8_t *raw_tp_tx_buf = NULL;
+    sleep(5);
+    while (1) {
+
+        raw_tp_tx_buf = (uint8_t*)hosted_calloc(1, TEST_RAW_TP__BUF_SIZE);
+        ret = send_to_slave(ESP_TEST_IF, 0, raw_tp_tx_buf, TEST_RAW_TP__BUF_SIZE);
+        if (ret != ESP_OK) {
+            printf("Failed to send to queue\n");
+            continue;
+        }
+        test_raw_tp_len += (TEST_RAW_TP__BUF_SIZE+sizeof(struct esp_payload_header));
+        seq_num++;
+    }
 }
 
 static void process_raw_tp_flags(void)
 {
-	test_raw_tp_cleanup();
-
-	if (test_raw_tp) {
-		hosted_timer_handler = hosted_timer_start(TEST_RAW_TP__TIMEOUT, CTRL__TIMER_PERIODIC, raw_tp_timer_func, NULL);
-		if (!hosted_timer_handler) {
-			printf("Failed to create timer\n\r");
-			return;
-		}
-		log_raw_tp_stats_timer_running = 1;
-
-		if (test_raw_tp__host_to_esp) {
-			osThreadDef(raw_tp_tx_thread, raw_tp_tx_task,
-					osPriorityAboveNormal, 0, RAW_TP_TX_TASK_STACK_SIZE);
-			raw_tp_tx_task_id = osThreadCreate(osThread(raw_tp_tx_thread), NULL);
-			assert(raw_tp_tx_task_id);
-		}
-	}
+    test_raw_tp_cleanup();
+
+    if (test_raw_tp) {
+        hosted_timer_handler = hosted_timer_start(TEST_RAW_TP__TIMEOUT, CTRL__TIMER_PERIODIC, raw_tp_timer_func, NULL);
+        if (!hosted_timer_handler) {
+            printf("Failed to create timer\n\r");
+            return;
+        }
+        log_raw_tp_stats_timer_running = 1;
+
+        if (test_raw_tp__host_to_esp) {
+            osThreadDef(raw_tp_tx_thread, raw_tp_tx_task,
+                    osPriorityAboveNormal, 0, RAW_TP_TX_TASK_STACK_SIZE);
+            raw_tp_tx_task_id = osThreadCreate(osThread(raw_tp_tx_thread), NULL);
+            assert(raw_tp_tx_task_id);
+        }
+    }
 }
 
 static void start_test_raw_tp(int raw_tp__host_to_esp)
 {
-	test_raw_tp = 1;
-	test_raw_tp__host_to_esp = raw_tp__host_to_esp;
+    test_raw_tp = 1;
+    test_raw_tp__host_to_esp = raw_tp__host_to_esp;
 }
 
 static void stop_test_raw_tp(void)
 {
-	test_raw_tp = 0;
-	test_raw_tp__host_to_esp = 0;
+    test_raw_tp = 0;
+    test_raw_tp__host_to_esp = 0;
 }
 
 void process_test_capabilities(uint8_t cap)
 {
-	printf("ESP peripheral capabilities: 0x%x\n\r", cap);
-	if ((cap & ESP_TEST_RAW_TP) == ESP_TEST_RAW_TP) {
-		if ((cap & ESP_TEST_RAW_TP__ESP_TO_HOST) == ESP_TEST_RAW_TP__ESP_TO_HOST) {
-			start_test_raw_tp(ESP_TEST_RAW_TP__RX);
-			printf("esp: start testing of ESP->Host raw throughput\n\r");
-		} else {
-			start_test_raw_tp(ESP_TEST_RAW_TP__TX);
-			printf("esp: start testing of Host->ESP raw throughput\n\r");
-		}
-	} else {
-		printf("esp: stop raw throuput test if running\n");
-		stop_test_raw_tp();
-	}
-	process_raw_tp_flags();
+    printf("ESP peripheral capabilities: 0x%x\n\r", cap);
+    if ((cap & ESP_TEST_RAW_TP) == ESP_TEST_RAW_TP) {
+        if ((cap & ESP_TEST_RAW_TP__ESP_TO_HOST) == ESP_TEST_RAW_TP__ESP_TO_HOST) {
+            start_test_raw_tp(ESP_TEST_RAW_TP__RX);
+            printf("esp: start testing of ESP->Host raw throughput\n\r");
+        } else {
+            start_test_raw_tp(ESP_TEST_RAW_TP__TX);
+            printf("esp: start testing of Host->ESP raw throughput\n\r");
+        }
+    } else {
+        printf("esp: stop raw throuput test if running\n");
+        stop_test_raw_tp();
+    }
+    process_raw_tp_flags();
 }
 
 void update_test_raw_tp_rx_len(uint16_t len)
 {
-	test_raw_tp_len+=len;
+    test_raw_tp_len+=len;
 }
 
 #endif

+ 1 - 1
host/common/trace.h

@@ -29,7 +29,7 @@ extern "C" {
 #define DEBUG_HEX_STREAM_PRINT            0
 #ifndef assert
 #define assert(x) do { if (!(x)) { \
-	printf("Aborting at: %s:%u\n", __FILE__, __LINE__); while(1);}} while (0);
+    printf("Aborting at: %s:%u\n", __FILE__, __LINE__); while(1);}} while (0);
 #endif
 
 /** Exported Structures **/

+ 164 - 164
host/common/util.c

@@ -19,7 +19,7 @@
 #include "ctype.h"
 #include "string.h"
 
-#define isascii(x)		((x) <= 127)
+#define isascii(x)      ((x) <= 127)
 
 /** Constants/Macros **/
 
@@ -37,87 +37,87 @@
  */
 int ipv4_addr_aton(const char *cp, uint32_t *ip_uint32)
 {
-	u_long val, base, n;
-	char c;
-	u_long parts[4], *pp = parts;
+    u_long val, base, n;
+    char c;
+    u_long parts[4], *pp = parts;
 
-	for (;;) {
-		/*
-		 * Collect number up to ``.''.
-		 * Values are specified as for C:
-		 * 0x=hex, 0=octal, other=decimal.
-		 */
-		val = 0; base = 10;
-		if (*cp == '0') {
-			if (*++cp == 'x' || *cp == 'X')
-				base = 16, cp++;
-			else
-				base = 8;
-		}
-		while ((c = *cp) != '\0') {
-			if (isascii(c) && isdigit(c)) {
-				val = (val * base) + (c - '0');
-				cp++;
-				continue;
-			}
-			if (base == 16 && isascii(c) && isxdigit(c)) {
-				val = (val << 4) +
-					(c + 10 - (islower(c) ? 'a' : 'A'));
-				cp++;
-				continue;
-			}
-			break;
-		}
-		if (*cp == '.') {
-			/*
-			 * Internet format:
-			 *	a.b.c.d
-			 *	a.b.c	(with c treated as 16-bits)
-			 *	a.b	(with b treated as 24 bits)
-			 */
-			if (pp >= parts + 3 || val > 0xff)
-				return (0);
-			*pp++ = val, cp++;
-		} else
-			break;
-	}
-	/*
-	 * Check for trailing characters.
-	 */
-	if (*cp && (!isascii((uint8_t)*cp) || !isspace((uint8_t)*cp)))
-		return (0);
-	/*
-	 * Concoct the address according to
-	 * the number of parts specified.
-	 */
-	n = pp - parts + 1;
-	switch (n) {
+    for (;;) {
+        /*
+         * Collect number up to ``.''.
+         * Values are specified as for C:
+         * 0x=hex, 0=octal, other=decimal.
+         */
+        val = 0; base = 10;
+        if (*cp == '0') {
+            if (*++cp == 'x' || *cp == 'X')
+                base = 16, cp++;
+            else
+                base = 8;
+        }
+        while ((c = *cp) != '\0') {
+            if (isascii(c) && isdigit(c)) {
+                val = (val * base) + (c - '0');
+                cp++;
+                continue;
+            }
+            if (base == 16 && isascii(c) && isxdigit(c)) {
+                val = (val << 4) +
+                    (c + 10 - (islower(c) ? 'a' : 'A'));
+                cp++;
+                continue;
+            }
+            break;
+        }
+        if (*cp == '.') {
+            /*
+             * Internet format:
+             *  a.b.c.d
+             *  a.b.c   (with c treated as 16-bits)
+             *  a.b (with b treated as 24 bits)
+             */
+            if (pp >= parts + 3 || val > 0xff)
+                return (0);
+            *pp++ = val, cp++;
+        } else
+            break;
+    }
+    /*
+     * Check for trailing characters.
+     */
+    if (*cp && (!isascii((uint8_t)*cp) || !isspace((uint8_t)*cp)))
+        return (0);
+    /*
+     * Concoct the address according to
+     * the number of parts specified.
+     */
+    n = pp - parts + 1;
+    switch (n) {
 
-	case 1:				/* a -- 32 bits */
-		break;
+    case 1:             /* a -- 32 bits */
+        break;
 
-	case 2:				/* a.b -- 8.24 bits */
-		if (val > 0xffffff)
-			return (0);
-		val |= parts[0] << 24;
-		break;
+    case 2:             /* a.b -- 8.24 bits */
+        if (val > 0xffffff)
+            return (0);
+        val |= parts[0] << 24;
+        break;
 
-	case 3:				/* a.b.c -- 8.8.16 bits */
-		if (val > 0xffff)
-			return (0);
-		val |= (parts[0] << 24) | (parts[1] << 16);
-		break;
+    case 3:             /* a.b.c -- 8.8.16 bits */
+        if (val > 0xffff)
+            return (0);
+        val |= (parts[0] << 24) | (parts[1] << 16);
+        break;
 
-	case 4:				/* a.b.c.d -- 8.8.8.8 bits */
-		if (val > 0xff)
-			return (0);
-		val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
-		break;
-	}
-	if(ip_uint32) {
-		*ip_uint32 = hton_long(val);
-	}
-	return (1);
+    case 4:             /* a.b.c.d -- 8.8.8.8 bits */
+        if (val > 0xff)
+            return (0);
+        val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
+        break;
+    }
+    if(ip_uint32) {
+        *ip_uint32 = hton_long(val);
+    }
+    return (1);
 }
 
 /**
@@ -132,76 +132,76 @@ int ipv4_addr_aton(const char *cp, uint32_t *ip_uint32)
 
 char * ipv4_addr_ntoa(uint32_t addr, char *buf, int buflen)
 {
-	char inv[3];
-	char *rp;
-	uint8_t *ap;
-	uint8_t rem;
-	uint8_t n;
-	uint8_t i;
-	int len = 0;
-	uint32_t addr_nw = ntoh_long(addr);
+    char inv[3];
+    char *rp;
+    uint8_t *ap;
+    uint8_t rem;
+    uint8_t n;
+    uint8_t i;
+    int len = 0;
+    uint32_t addr_nw = ntoh_long(addr);
 
-	rp = buf;
-	ap = (uint8_t *)&addr_nw;
-	for (n = 0; n < 4; n++) {
-		i = 0;
-		do {
-			rem = *ap % (uint8_t)10;
-			*ap /= (uint8_t)10;
-			inv[i++] = (char)('0' + rem);
-		} while (*ap);
-		while (i--) {
-			if (len++ >= buflen) {
-				return NULL;
-			}
-			*rp++ = inv[i];
-		}
-		if (len++ >= buflen) {
-			return NULL;
-		}
-		*rp++ = '.';
-		ap++;
-	}
-	*--rp = 0;
-	return buf;
+    rp = buf;
+    ap = (uint8_t *)&addr_nw;
+    for (n = 0; n < 4; n++) {
+        i = 0;
+        do {
+            rem = *ap % (uint8_t)10;
+            *ap /= (uint8_t)10;
+            inv[i++] = (char)('0' + rem);
+        } while (*ap);
+        while (i--) {
+            if (len++ >= buflen) {
+                return NULL;
+            }
+            *rp++ = inv[i];
+        }
+        if (len++ >= buflen) {
+            return NULL;
+        }
+        *rp++ = '.';
+        ap++;
+    }
+    *--rp = 0;
+    return buf;
 }
 
 /**
   * @brief  Convert mac string to byte stream
   * @param  out - output mac in bytes
   *         s - input mac string
-  * @retval STM_OK/STM_FAIL
+  * @retval ESP_OK/ESP_FAIL
   */
-stm_ret_t convert_mac_to_bytes(uint8_t *out, const char *s)
+esp_ret convert_mac_to_bytes(uint8_t *out, const char *s)
 {
-	int mac[MAC_LEN] = {0};
-	int num_bytes = 0;
+    int mac[MAC_LEN] = {0};
+    int num_bytes = 0;
 
-	if (!s || (strlen(s) < MIN_MAC_STRING_LEN))  {
-		return STM_FAIL;
-	}
+    if (!s || (strlen(s) < MIN_MAC_STRING_LEN))  {
+        return ESP_FAIL;
+    }
 
-	num_bytes =  sscanf(s, "%2x:%2x:%2x:%2x:%2x:%2x",
-			&mac[0],&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
+    num_bytes =  sscanf(s, "%2x:%2x:%2x:%2x:%2x:%2x",
+            &mac[0],&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
 
-	if ((num_bytes < MAC_LEN)  ||
-		(mac[0] > 0xFF) ||
-		(mac[1] > 0xFF) ||
-		(mac[2] > 0xFF) ||
-		(mac[3] > 0xFF) ||
-		(mac[4] > 0xFF) ||
-		(mac[5] > 0xFF)) {
-		return STM_FAIL;
-	}
+    if ((num_bytes < MAC_LEN)  ||
+        (mac[0] > 0xFF) ||
+        (mac[1] > 0xFF) ||
+        (mac[2] > 0xFF) ||
+        (mac[3] > 0xFF) ||
+        (mac[4] > 0xFF) ||
+        (mac[5] > 0xFF)) {
+        return ESP_FAIL;
+    }
 
-	out[0] = mac[0]&0xff;
-	out[1] = mac[1]&0xff;
-	out[2] = mac[2]&0xff;
-	out[3] = mac[3]&0xff;
-	out[4] = mac[4]&0xff;
-	out[5] = mac[5]&0xff;
+    out[0] = mac[0]&0xff;
+    out[1] = mac[1]&0xff;
+    out[2] = mac[2]&0xff;
+    out[3] = mac[3]&0xff;
+    out[4] = mac[4]&0xff;
+    out[5] = mac[5]&0xff;
 
-	return STM_OK;
+    return ESP_OK;
 }
 
 /**
@@ -212,46 +212,46 @@ stm_ret_t convert_mac_to_bytes(uint8_t *out, const char *s)
   */
 uint8_t is_same_buff(void *buff1, void *buff2, uint16_t len)
 {
-	uint16_t idx;
-	uint8_t *b1 = (uint8_t*)buff1;
-	uint8_t *b2 = (uint8_t*)buff2;
+    uint16_t idx;
+    uint8_t *b1 = (uint8_t*)buff1;
+    uint8_t *b2 = (uint8_t*)buff2;
 
-	if ((b1 == NULL) && (b2==NULL)) {
-		if(len) {
-			return 0;
-		}
-		return 1;
-	}
+    if ((b1 == NULL) && (b2==NULL)) {
+        if(len) {
+            return 0;
+        }
+        return 1;
+    }
 
-	if(!b1 || !b2) {
-		return 0;
-	}
+    if(!b1 || !b2) {
+        return 0;
+    }
 
-	/* Function assumes buff1 and buff2 are allocated for len */
-	for (idx=0; idx < len; idx++) {
-		if (*b1 != *b2) {
-			return 0;
-		}
-		b1++;
-		b2++;
-	}
-	return 1;
+    /* Function assumes buff1 and buff2 are allocated for len */
+    for (idx=0; idx < len; idx++) {
+        if (*b1 != *b2) {
+            return 0;
+        }
+        b1++;
+        b2++;
+    }
+    return 1;
 }
 
 /**
   * @brief  Get ip in 32bit from dotted string notation
   * @param  ip_s - input ip address in string
   *         ip_x - output ip address in 32 bit
-  * @retval STM_OK/STM_FAIL
+  * @retval ESP_OK/ESP_FAIL
   */
-stm_ret_t get_ipaddr_from_str(const char *ip_s, uint32_t *ip_x)
+esp_ret get_ipaddr_from_str(const char *ip_s, uint32_t *ip_x)
 {
-	uint32_t ip_nw = 0;
-	if (! ipv4_addr_aton(ip_s, &ip_nw))
-	{
-		return STM_FAIL;
-	}
-	/* ipv4_addr_aton does conversion in network order. reverse */
-	*ip_x = ntoh_long(ip_nw);
-	return STM_OK;
+    uint32_t ip_nw = 0;
+    if (! ipv4_addr_aton(ip_s, &ip_nw))
+    {
+        return ESP_FAIL;
+    }
+    /* ipv4_addr_aton does conversion in network order. reverse */
+    *ip_x = ntoh_long(ip_nw);
+    return ESP_OK;
 }

+ 3 - 3
host/common/util.h

@@ -32,12 +32,12 @@ extern "C" {
 
 /** Exported Functions **/
 
-stm_ret_t get_ipaddr_from_str(const char *ip_s, uint32_t *ip_x);
+esp_ret get_ipaddr_from_str(const char *ip_s, uint32_t *ip_x);
 int ipv4_addr_aton(const char *cp, uint32_t *ip_uint32);
 char * ipv4_addr_ntoa(const uint32_t addr, char *buf, int buflen);
-stm_ret_t convert_mac_to_bytes(uint8_t *out, const char *s);
+esp_ret convert_mac_to_bytes(uint8_t *out, const char *s);
 uint8_t is_same_buff(void *buff1, void *buff2, uint16_t len);
-stm_ret_t get_self_ip(int iface_type, uint32_t *self_ip);
+esp_ret get_self_ip(int iface_type, uint32_t *self_ip);
 
 #ifdef __cplusplus
 }

+ 5 - 5
host/components/include/esp_queue.h

@@ -13,18 +13,18 @@
 #define ESP_QUEUE_ERR_MEMORY            -2
 
 typedef struct q_element {
-	void *buf;
-	int buf_len;
+    void *buf;
+    int buf_len;
 } esp_queue_elem_t;
 
 /* Queue based on Linked List */
 typedef struct esp_queue_node {
-	void *data;
-	struct esp_queue_node* next;
+    void *data;
+    struct esp_queue_node* next;
 } q_node_t;
 
 typedef struct esp_queue {
-	q_node_t *front, *rear;
+    q_node_t *front, *rear;
 } esp_queue_t;
 
 esp_queue_t* create_esp_queue(void);

+ 64 - 64
host/components/src/esp_queue.c

@@ -12,102 +12,102 @@
 /* create new node */
 static q_node_t * new_q_node(void *data)
 {
-	q_node_t* new_node = (q_node_t*)malloc(sizeof(q_node_t));
-	if (!new_node)
-		return NULL;
-	new_node->data = data;
-	new_node->next = NULL;
-	return new_node;
+    q_node_t* new_node = (q_node_t*)malloc(sizeof(q_node_t));
+    if (!new_node)
+        return NULL;
+    new_node->data = data;
+    new_node->next = NULL;
+    return new_node;
 }
 
 /* Create app queue */
 esp_queue_t* create_esp_queue(void)
 {
-	esp_queue_t* q = (esp_queue_t*)malloc(sizeof(esp_queue_t));
-	if (!q)
-		return NULL;
+    esp_queue_t* q = (esp_queue_t*)malloc(sizeof(esp_queue_t));
+    if (!q)
+        return NULL;
 
-	q->front = q->rear = NULL;
-	return q;
+    q->front = q->rear = NULL;
+    return q;
 }
 
 /* Put element in app queue */
 int esp_queue_put(esp_queue_t* q, void *data)
 {
-	q_node_t* new_node = NULL;
-
-	if (!q) {
-		printf("q undefined\n");
-		return ESP_QUEUE_ERR_UNINITALISED;
-	}
-
-	new_node = new_q_node(data);
-	if (!new_node) {
-		printf("malloc failed in qpp_q_put\n");
-		return ESP_QUEUE_ERR_MEMORY;
-	}
-
-	/* queue empty condition */
-	if (q->rear == NULL) {
-		q->front = q->rear = new_node;
-		return ESP_QUEUE_SUCCESS;
-	}
-
-	q->rear->next = new_node;
-	q->rear = new_node;
-	return ESP_QUEUE_SUCCESS;
+    q_node_t* new_node = NULL;
+
+    if (!q) {
+        printf("q undefined\n");
+        return ESP_QUEUE_ERR_UNINITALISED;
+    }
+
+    new_node = new_q_node(data);
+    if (!new_node) {
+        printf("malloc failed in qpp_q_put\n");
+        return ESP_QUEUE_ERR_MEMORY;
+    }
+
+    /* queue empty condition */
+    if (q->rear == NULL) {
+        q->front = q->rear = new_node;
+        return ESP_QUEUE_SUCCESS;
+    }
+
+    q->rear->next = new_node;
+    q->rear = new_node;
+    return ESP_QUEUE_SUCCESS;
 }
 
 /* Get element in app queue */
 void *esp_queue_get(esp_queue_t* q)
 {
-	void * data = NULL;
-	q_node_t* temp = NULL;
+    void * data = NULL;
+    q_node_t* temp = NULL;
 
-	if (!q || q->front == NULL)
-		return NULL;
+    if (!q || q->front == NULL)
+        return NULL;
 
-	/* move front one node ahead */
-	temp = q->front;
+    /* move front one node ahead */
+    temp = q->front;
 
-	if (!temp)
-		return NULL;
+    if (!temp)
+        return NULL;
 
-	q->front = q->front->next;
+    q->front = q->front->next;
 
-	data = temp->data;
+    data = temp->data;
 
-	free(temp);
-	temp = NULL;
+    free(temp);
+    temp = NULL;
 
-	/* If front is NULL, change rear also as NULL */
-	if (q->front == NULL)
-		q->rear = NULL;
+    /* If front is NULL, change rear also as NULL */
+    if (q->front == NULL)
+        q->rear = NULL;
 
-	return data;
+    return data;
 }
 
 void esp_queue_destroy(esp_queue_t** q)
 {
-	q_node_t* temp = NULL;
+    q_node_t* temp = NULL;
 
-	if (!q || !*q)
-		return;
+    if (!q || !*q)
+        return;
 
-	while ((*q)->front) {
+    while ((*q)->front) {
 
-		temp = (*q)->front;
-		(*q)->front = (*q)->front->next;
+        temp = (*q)->front;
+        (*q)->front = (*q)->front->next;
 
-		if (temp->data) {
-			free(temp->data);
-			temp->data = NULL;
-		}
+        if (temp->data) {
+            free(temp->data);
+            temp->data = NULL;
+        }
 
-		free(temp);
-		temp = NULL;
-	}
+        free(temp);
+        temp = NULL;
+    }
 
-	free(*q);
-	*q = NULL;
+    free(*q);
+    *q = NULL;
 }

+ 282 - 282
host/control_lib/include/ctrl_api.h

@@ -49,401 +49,401 @@
 /*---- Control structures ----*/
 
 enum {
-	CTRL_ERR_NOT_CONNECTED = 1,
-	CTRL_ERR_NO_AP_FOUND,
-	CTRL_ERR_INVALID_PASSWORD,
-	CTRL_ERR_INVALID_ARGUMENT,
-	CTRL_ERR_OUT_OF_RANGE,
-	CTRL_ERR_MEMORY_FAILURE,
-	CTRL_ERR_UNSUPPORTED_MSG,
-	CTRL_ERR_INCORRECT_ARG,
-	CTRL_ERR_PROTOBUF_ENCODE,
-	CTRL_ERR_PROTOBUF_DECODE,
-	CTRL_ERR_SET_ASYNC_CB,
-	CTRL_ERR_TRANSPORT_SEND,
-	CTRL_ERR_REQUEST_TIMEOUT,
-	CTRL_ERR_REQ_IN_PROG,
-	OUT_OF_RANGE
+    CTRL_ERR_NOT_CONNECTED = 1,
+    CTRL_ERR_NO_AP_FOUND,
+    CTRL_ERR_INVALID_PASSWORD,
+    CTRL_ERR_INVALID_ARGUMENT,
+    CTRL_ERR_OUT_OF_RANGE,
+    CTRL_ERR_MEMORY_FAILURE,
+    CTRL_ERR_UNSUPPORTED_MSG,
+    CTRL_ERR_INCORRECT_ARG,
+    CTRL_ERR_PROTOBUF_ENCODE,
+    CTRL_ERR_PROTOBUF_DECODE,
+    CTRL_ERR_SET_ASYNC_CB,
+    CTRL_ERR_TRANSPORT_SEND,
+    CTRL_ERR_REQUEST_TIMEOUT,
+    CTRL_ERR_REQ_IN_PROG,
+    OUT_OF_RANGE
 };
 
 
 typedef enum {
 
-	CTRL_MSGTYPE_INVALID = CTRL_MSG_TYPE__MsgType_Invalid,
-	CTRL_REQ = CTRL_MSG_TYPE__Req,
-	CTRL_RESP = CTRL_MSG_TYPE__Resp,
-	CTRL_EVENT = CTRL_MSG_TYPE__Event,
-	CTRL_MSGTYPE_MAX = CTRL_MSG_TYPE__MsgType_Max,
+    CTRL_MSGTYPE_INVALID = CTRL_MSG_TYPE__MsgType_Invalid,
+    CTRL_REQ = CTRL_MSG_TYPE__Req,
+    CTRL_RESP = CTRL_MSG_TYPE__Resp,
+    CTRL_EVENT = CTRL_MSG_TYPE__Event,
+    CTRL_MSGTYPE_MAX = CTRL_MSG_TYPE__MsgType_Max,
 
 } AppMsgType_e;
 
 typedef enum {
 
-	CTRL_MSGID_INVALID = CTRL_MSG_ID__MsgId_Invalid,
-	/*
-	 ** Request Msgs *
-	 */
-	CTRL_REQ_BASE                      = CTRL_MSG_ID__Req_Base,
-	CTRL_REQ_GET_MAC_ADDR              = CTRL_MSG_ID__Req_GetMACAddress, //0x65
-	CTRL_REQ_SET_MAC_ADDR              = CTRL_MSG_ID__Req_SetMacAddress, //0x66
-	CTRL_REQ_GET_WIFI_MODE             = CTRL_MSG_ID__Req_GetWifiMode,   //0x67
-	CTRL_REQ_SET_WIFI_MODE             = CTRL_MSG_ID__Req_SetWifiMode,   //0x68
-
-	CTRL_REQ_GET_AP_SCAN_LIST          = CTRL_MSG_ID__Req_GetAPScanList, //0x69
-	CTRL_REQ_GET_AP_CONFIG             = CTRL_MSG_ID__Req_GetAPConfig,   //0x6a
-	CTRL_REQ_CONNECT_AP                = CTRL_MSG_ID__Req_ConnectAP,     //0x6b
-	CTRL_REQ_DISCONNECT_AP             = CTRL_MSG_ID__Req_DisconnectAP,  //0x6c
-
-	CTRL_REQ_GET_SOFTAP_CONFIG         = CTRL_MSG_ID__Req_GetSoftAPConfig,            //0x6d
-	CTRL_REQ_SET_SOFTAP_VND_IE         = CTRL_MSG_ID__Req_SetSoftAPVendorSpecificIE,  //0x6e
-	CTRL_REQ_START_SOFTAP              = CTRL_MSG_ID__Req_StartSoftAP,                //0x6f
-	CTRL_REQ_GET_SOFTAP_CONN_STA_LIST  = CTRL_MSG_ID__Req_GetSoftAPConnectedSTAList,  //0x70
-	CTRL_REQ_STOP_SOFTAP               = CTRL_MSG_ID__Req_StopSoftAP,                 //0x71
-
-	CTRL_REQ_SET_PS_MODE               = CTRL_MSG_ID__Req_SetPowerSaveMode,   //0x72
-	CTRL_REQ_GET_PS_MODE               = CTRL_MSG_ID__Req_GetPowerSaveMode,   //0x73
-
-	CTRL_REQ_OTA_BEGIN                 = CTRL_MSG_ID__Req_OTABegin,           //0x74
-	CTRL_REQ_OTA_WRITE                 = CTRL_MSG_ID__Req_OTAWrite,           //0x75
-	CTRL_REQ_OTA_END                   = CTRL_MSG_ID__Req_OTAEnd,             //0x76
-
-	CTRL_REQ_SET_WIFI_MAX_TX_POWER     = CTRL_MSG_ID__Req_SetWifiMaxTxPower,  //0x77
-	CTRL_REQ_GET_WIFI_CURR_TX_POWER    = CTRL_MSG_ID__Req_GetWifiCurrTxPower, //0x78
-
-	CTRL_REQ_CONFIG_HEARTBEAT          = CTRL_MSG_ID__Req_ConfigHeartbeat,    //0x79
-	CTRL_REQ_ENABLE_DISABLE            = CTRL_MSG_ID__Req_EnableDisable,      //0x7a
-
-	CTRL_REQ_GET_FW_VERSION            = CTRL_MSG_ID__Req_GetFwVersion,       //0x7b
-	/*
-	 * Add new control path command response before Req_Max
-	 * and update Req_Max
-	 */
-	CTRL_REQ_MAX = CTRL_MSG_ID__Req_Max,
-	/*
-	 ** Response Msgs *
-	 */
-	CTRL_RESP_BASE                     = CTRL_MSG_ID__Resp_Base,
-	CTRL_RESP_GET_MAC_ADDR             = CTRL_MSG_ID__Resp_GetMACAddress,  //0x65 -> 0xc9
-	CTRL_RESP_SET_MAC_ADDRESS          = CTRL_MSG_ID__Resp_SetMacAddress,  //0x66 -> 0xca
-	CTRL_RESP_GET_WIFI_MODE            = CTRL_MSG_ID__Resp_GetWifiMode,    //0x67 -> 0xcb
-	CTRL_RESP_SET_WIFI_MODE            = CTRL_MSG_ID__Resp_SetWifiMode,    //0x68 -> 0xcc
-
-	CTRL_RESP_GET_AP_SCAN_LIST         = CTRL_MSG_ID__Resp_GetAPScanList,  //0x69 -> 0xcd
-	CTRL_RESP_GET_AP_CONFIG            = CTRL_MSG_ID__Resp_GetAPConfig,    //0x6a -> 0xce
-	CTRL_RESP_CONNECT_AP               = CTRL_MSG_ID__Resp_ConnectAP,      //0x6b -> 0xdf
-	CTRL_RESP_DISCONNECT_AP            = CTRL_MSG_ID__Resp_DisconnectAP,   //0x6c -> 0xd0
-
-	CTRL_RESP_GET_SOFTAP_CONFIG        = CTRL_MSG_ID__Resp_GetSoftAPConfig,           //0x6d -> 0xd1
-	CTRL_RESP_SET_SOFTAP_VND_IE        = CTRL_MSG_ID__Resp_SetSoftAPVendorSpecificIE, //0x6e -> 0xd2
-	CTRL_RESP_START_SOFTAP             = CTRL_MSG_ID__Resp_StartSoftAP,               //0x6f -> 0xd3
-	CTRL_RESP_GET_SOFTAP_CONN_STA_LIST = CTRL_MSG_ID__Resp_GetSoftAPConnectedSTAList, //0x70 -> 0xd4
-	CTRL_RESP_STOP_SOFTAP              = CTRL_MSG_ID__Resp_StopSoftAP,                //0x71 -> 0xd5
-
-	CTRL_RESP_SET_PS_MODE              = CTRL_MSG_ID__Resp_SetPowerSaveMode, //0x72 -> 0xd6
-	CTRL_RESP_GET_PS_MODE              = CTRL_MSG_ID__Resp_GetPowerSaveMode, //0x73 -> 0xd7
-
-	CTRL_RESP_OTA_BEGIN                = CTRL_MSG_ID__Resp_OTABegin,         //0x74 -> 0xd8
-	CTRL_RESP_OTA_WRITE                = CTRL_MSG_ID__Resp_OTAWrite,         //0x75 -> 0xd9
-	CTRL_RESP_OTA_END                  = CTRL_MSG_ID__Resp_OTAEnd,           //0x76 -> 0xda
-
-	CTRL_RESP_SET_WIFI_MAX_TX_POWER     = CTRL_MSG_ID__Resp_SetWifiMaxTxPower,  //0x77 -> 0xdb
-	CTRL_RESP_GET_WIFI_CURR_TX_POWER    = CTRL_MSG_ID__Resp_GetWifiCurrTxPower, //0x78 -> 0xdc
-
-	CTRL_RESP_CONFIG_HEARTBEAT          = CTRL_MSG_ID__Resp_ConfigHeartbeat,    //0x79 -> 0xdd
-	CTRL_RESP_ENABLE_DISABLE            = CTRL_MSG_ID__Resp_EnableDisable,      //0x7a -> 0xde
-
-	CTRL_RESP_GET_FW_VERSION            = CTRL_MSG_ID__Resp_GetFwVersion,       //0x7b -> 0xdf
-	/*
-	 * Add new control path comm       and response before Resp_Max
-	 * and update Resp_Max
-	 */
-	CTRL_RESP_MAX = CTRL_MSG_ID__Resp_Max,
-	/*
-	 ** Events
-	 */
-	CTRL_EVENT_BASE            = CTRL_MSG_ID__Event_Base,
-	CTRL_EVENT_ESP_INIT        = CTRL_MSG_ID__Event_ESPInit,
-	CTRL_EVENT_HEARTBEAT       = CTRL_MSG_ID__Event_Heartbeat,
-	CTRL_EVENT_STATION_DISCONNECT_FROM_AP =
-		CTRL_MSG_ID__Event_StationDisconnectFromAP,
-	CTRL_EVENT_STATION_DISCONNECT_FROM_ESP_SOFTAP =
-		CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP,
-	CTRL_EVENT_STATION_CONNECTED_TO_AP =
-		CTRL_MSG_ID__Event_StationConnectedToAP,
-	CTRL_EVENT_STATION_CONNECTED_TO_ESP_SOFTAP =
-		CTRL_MSG_ID__Event_StationConnectedToESPSoftAP,
-	/*
-	 * Add new control path command notification before Event_Max
-	 * and update Event_Max
-	 */
-	CTRL_EVENT_MAX = CTRL_MSG_ID__Event_Max,
+    CTRL_MSGID_INVALID = CTRL_MSG_ID__MsgId_Invalid,
+    /*
+     ** Request Msgs *
+     */
+    CTRL_REQ_BASE                      = CTRL_MSG_ID__Req_Base,
+    CTRL_REQ_GET_MAC_ADDR              = CTRL_MSG_ID__Req_GetMACAddress, //0x65
+    CTRL_REQ_SET_MAC_ADDR              = CTRL_MSG_ID__Req_SetMacAddress, //0x66
+    CTRL_REQ_GET_WIFI_MODE             = CTRL_MSG_ID__Req_GetWifiMode,   //0x67
+    CTRL_REQ_SET_WIFI_MODE             = CTRL_MSG_ID__Req_SetWifiMode,   //0x68
+
+    CTRL_REQ_GET_AP_SCAN_LIST          = CTRL_MSG_ID__Req_GetAPScanList, //0x69
+    CTRL_REQ_GET_AP_CONFIG             = CTRL_MSG_ID__Req_GetAPConfig,   //0x6a
+    CTRL_REQ_CONNECT_AP                = CTRL_MSG_ID__Req_ConnectAP,     //0x6b
+    CTRL_REQ_DISCONNECT_AP             = CTRL_MSG_ID__Req_DisconnectAP,  //0x6c
+
+    CTRL_REQ_GET_SOFTAP_CONFIG         = CTRL_MSG_ID__Req_GetSoftAPConfig,            //0x6d
+    CTRL_REQ_SET_SOFTAP_VND_IE         = CTRL_MSG_ID__Req_SetSoftAPVendorSpecificIE,  //0x6e
+    CTRL_REQ_START_SOFTAP              = CTRL_MSG_ID__Req_StartSoftAP,                //0x6f
+    CTRL_REQ_GET_SOFTAP_CONN_STA_LIST  = CTRL_MSG_ID__Req_GetSoftAPConnectedSTAList,  //0x70
+    CTRL_REQ_STOP_SOFTAP               = CTRL_MSG_ID__Req_StopSoftAP,                 //0x71
+
+    CTRL_REQ_SET_PS_MODE               = CTRL_MSG_ID__Req_SetPowerSaveMode,   //0x72
+    CTRL_REQ_GET_PS_MODE               = CTRL_MSG_ID__Req_GetPowerSaveMode,   //0x73
+
+    CTRL_REQ_OTA_BEGIN                 = CTRL_MSG_ID__Req_OTABegin,           //0x74
+    CTRL_REQ_OTA_WRITE                 = CTRL_MSG_ID__Req_OTAWrite,           //0x75
+    CTRL_REQ_OTA_END                   = CTRL_MSG_ID__Req_OTAEnd,             //0x76
+
+    CTRL_REQ_SET_WIFI_MAX_TX_POWER     = CTRL_MSG_ID__Req_SetWifiMaxTxPower,  //0x77
+    CTRL_REQ_GET_WIFI_CURR_TX_POWER    = CTRL_MSG_ID__Req_GetWifiCurrTxPower, //0x78
+
+    CTRL_REQ_CONFIG_HEARTBEAT          = CTRL_MSG_ID__Req_ConfigHeartbeat,    //0x79
+    CTRL_REQ_ENABLE_DISABLE            = CTRL_MSG_ID__Req_EnableDisable,      //0x7a
+
+    CTRL_REQ_GET_FW_VERSION            = CTRL_MSG_ID__Req_GetFwVersion,       //0x7b
+    /*
+     * Add new control path command response before Req_Max
+     * and update Req_Max
+     */
+    CTRL_REQ_MAX = CTRL_MSG_ID__Req_Max,
+    /*
+     ** Response Msgs *
+     */
+    CTRL_RESP_BASE                     = CTRL_MSG_ID__Resp_Base,
+    CTRL_RESP_GET_MAC_ADDR             = CTRL_MSG_ID__Resp_GetMACAddress,  //0x65 -> 0xc9
+    CTRL_RESP_SET_MAC_ADDRESS          = CTRL_MSG_ID__Resp_SetMacAddress,  //0x66 -> 0xca
+    CTRL_RESP_GET_WIFI_MODE            = CTRL_MSG_ID__Resp_GetWifiMode,    //0x67 -> 0xcb
+    CTRL_RESP_SET_WIFI_MODE            = CTRL_MSG_ID__Resp_SetWifiMode,    //0x68 -> 0xcc
+
+    CTRL_RESP_GET_AP_SCAN_LIST         = CTRL_MSG_ID__Resp_GetAPScanList,  //0x69 -> 0xcd
+    CTRL_RESP_GET_AP_CONFIG            = CTRL_MSG_ID__Resp_GetAPConfig,    //0x6a -> 0xce
+    CTRL_RESP_CONNECT_AP               = CTRL_MSG_ID__Resp_ConnectAP,      //0x6b -> 0xdf
+    CTRL_RESP_DISCONNECT_AP            = CTRL_MSG_ID__Resp_DisconnectAP,   //0x6c -> 0xd0
+
+    CTRL_RESP_GET_SOFTAP_CONFIG        = CTRL_MSG_ID__Resp_GetSoftAPConfig,           //0x6d -> 0xd1
+    CTRL_RESP_SET_SOFTAP_VND_IE        = CTRL_MSG_ID__Resp_SetSoftAPVendorSpecificIE, //0x6e -> 0xd2
+    CTRL_RESP_START_SOFTAP             = CTRL_MSG_ID__Resp_StartSoftAP,               //0x6f -> 0xd3
+    CTRL_RESP_GET_SOFTAP_CONN_STA_LIST = CTRL_MSG_ID__Resp_GetSoftAPConnectedSTAList, //0x70 -> 0xd4
+    CTRL_RESP_STOP_SOFTAP              = CTRL_MSG_ID__Resp_StopSoftAP,                //0x71 -> 0xd5
+
+    CTRL_RESP_SET_PS_MODE              = CTRL_MSG_ID__Resp_SetPowerSaveMode, //0x72 -> 0xd6
+    CTRL_RESP_GET_PS_MODE              = CTRL_MSG_ID__Resp_GetPowerSaveMode, //0x73 -> 0xd7
+
+    CTRL_RESP_OTA_BEGIN                = CTRL_MSG_ID__Resp_OTABegin,         //0x74 -> 0xd8
+    CTRL_RESP_OTA_WRITE                = CTRL_MSG_ID__Resp_OTAWrite,         //0x75 -> 0xd9
+    CTRL_RESP_OTA_END                  = CTRL_MSG_ID__Resp_OTAEnd,           //0x76 -> 0xda
+
+    CTRL_RESP_SET_WIFI_MAX_TX_POWER     = CTRL_MSG_ID__Resp_SetWifiMaxTxPower,  //0x77 -> 0xdb
+    CTRL_RESP_GET_WIFI_CURR_TX_POWER    = CTRL_MSG_ID__Resp_GetWifiCurrTxPower, //0x78 -> 0xdc
+
+    CTRL_RESP_CONFIG_HEARTBEAT          = CTRL_MSG_ID__Resp_ConfigHeartbeat,    //0x79 -> 0xdd
+    CTRL_RESP_ENABLE_DISABLE            = CTRL_MSG_ID__Resp_EnableDisable,      //0x7a -> 0xde
+
+    CTRL_RESP_GET_FW_VERSION            = CTRL_MSG_ID__Resp_GetFwVersion,       //0x7b -> 0xdf
+    /*
+     * Add new control path comm       and response before Resp_Max
+     * and update Resp_Max
+     */
+    CTRL_RESP_MAX = CTRL_MSG_ID__Resp_Max,
+    /*
+     ** Events
+     */
+    CTRL_EVENT_BASE            = CTRL_MSG_ID__Event_Base,
+    CTRL_EVENT_ESP_INIT        = CTRL_MSG_ID__Event_ESPInit,
+    CTRL_EVENT_HEARTBEAT       = CTRL_MSG_ID__Event_Heartbeat,
+    CTRL_EVENT_STATION_DISCONNECT_FROM_AP =
+        CTRL_MSG_ID__Event_StationDisconnectFromAP,
+    CTRL_EVENT_STATION_DISCONNECT_FROM_ESP_SOFTAP =
+        CTRL_MSG_ID__Event_StationDisconnectFromESPSoftAP,
+    CTRL_EVENT_STATION_CONNECTED_TO_AP =
+        CTRL_MSG_ID__Event_StationConnectedToAP,
+    CTRL_EVENT_STATION_CONNECTED_TO_ESP_SOFTAP =
+        CTRL_MSG_ID__Event_StationConnectedToESPSoftAP,
+    /*
+     * Add new control path command notification before Event_Max
+     * and update Event_Max
+     */
+    CTRL_EVENT_MAX = CTRL_MSG_ID__Event_Max,
 } AppMsgId_e;
 
 typedef enum {
-	WIFI_MODE_NONE = CTRL__WIFI_MODE__NONE,
-	WIFI_MODE_STA = CTRL__WIFI_MODE__STA,
-	WIFI_MODE_AP = CTRL__WIFI_MODE__AP,
-	WIFI_MODE_APSTA = CTRL__WIFI_MODE__APSTA,
-	WIFI_MODE_MAX
+    WIFI_MODE_NONE = CTRL__WIFI_MODE__NONE,
+    WIFI_MODE_STA = CTRL__WIFI_MODE__STA,
+    WIFI_MODE_AP = CTRL__WIFI_MODE__AP,
+    WIFI_MODE_APSTA = CTRL__WIFI_MODE__APSTA,
+    WIFI_MODE_MAX
 } wifi_mode_e;
 
 typedef enum {
-	WIFI_AUTH_OPEN = CTRL__WIFI_SEC_PROT__Open,
-	WIFI_AUTH_WEP = CTRL__WIFI_SEC_PROT__WEP,
-	WIFI_AUTH_WPA_PSK = CTRL__WIFI_SEC_PROT__WPA_PSK,
-	WIFI_AUTH_WPA2_PSK = CTRL__WIFI_SEC_PROT__WPA2_PSK,
-	WIFI_AUTH_WPA_WPA2_PSK = CTRL__WIFI_SEC_PROT__WPA_WPA2_PSK,
-	WIFI_AUTH_WPA2_ENTERPRISE = CTRL__WIFI_SEC_PROT__WPA2_ENTERPRISE,
-	WIFI_AUTH_WPA3_PSK = CTRL__WIFI_SEC_PROT__WPA3_PSK,
-	WIFI_AUTH_WPA2_WPA3_PSK = CTRL__WIFI_SEC_PROT__WPA2_WPA3_PSK,
-	WIFI_AUTH_MAX,
+    WIFI_AUTH_OPEN = CTRL__WIFI_SEC_PROT__Open,
+    WIFI_AUTH_WEP = CTRL__WIFI_SEC_PROT__WEP,
+    WIFI_AUTH_WPA_PSK = CTRL__WIFI_SEC_PROT__WPA_PSK,
+    WIFI_AUTH_WPA2_PSK = CTRL__WIFI_SEC_PROT__WPA2_PSK,
+    WIFI_AUTH_WPA_WPA2_PSK = CTRL__WIFI_SEC_PROT__WPA_WPA2_PSK,
+    WIFI_AUTH_WPA2_ENTERPRISE = CTRL__WIFI_SEC_PROT__WPA2_ENTERPRISE,
+    WIFI_AUTH_WPA3_PSK = CTRL__WIFI_SEC_PROT__WPA3_PSK,
+    WIFI_AUTH_WPA2_WPA3_PSK = CTRL__WIFI_SEC_PROT__WPA2_WPA3_PSK,
+    WIFI_AUTH_MAX,
 } wifi_auth_mode_e;
 
 typedef enum {
-	WIFI_BW_HT20 = CTRL__WIFI_BW__HT20,
-	WIFI_BW_HT40 = CTRL__WIFI_BW__HT40,
+    WIFI_BW_HT20 = CTRL__WIFI_BW__HT20,
+    WIFI_BW_HT40 = CTRL__WIFI_BW__HT40,
 } wifi_bandwidth_e;
 
 typedef enum {
-	WIFI_PS_MIN_MODEM = CTRL__WIFI_POWER_SAVE__MIN_MODEM,
-	WIFI_PS_MAX_MODEM = CTRL__WIFI_POWER_SAVE__MAX_MODEM,
-	WIFI_PS_INVALID,
+    WIFI_PS_MIN_MODEM = CTRL__WIFI_POWER_SAVE__MIN_MODEM,
+    WIFI_PS_MAX_MODEM = CTRL__WIFI_POWER_SAVE__MAX_MODEM,
+    WIFI_PS_INVALID,
 } wifi_ps_type_e;
 
 typedef enum {
-	WIFI_VND_IE_TYPE_BEACON      = CTRL__VENDOR_IETYPE__Beacon,
-	WIFI_VND_IE_TYPE_PROBE_REQ   = CTRL__VENDOR_IETYPE__Probe_req,
-	WIFI_VND_IE_TYPE_PROBE_RESP  = CTRL__VENDOR_IETYPE__Probe_resp,
-	WIFI_VND_IE_TYPE_ASSOC_REQ   = CTRL__VENDOR_IETYPE__Assoc_req,
-	WIFI_VND_IE_TYPE_ASSOC_RESP  = CTRL__VENDOR_IETYPE__Assoc_resp,
+    WIFI_VND_IE_TYPE_BEACON      = CTRL__VENDOR_IETYPE__Beacon,
+    WIFI_VND_IE_TYPE_PROBE_REQ   = CTRL__VENDOR_IETYPE__Probe_req,
+    WIFI_VND_IE_TYPE_PROBE_RESP  = CTRL__VENDOR_IETYPE__Probe_resp,
+    WIFI_VND_IE_TYPE_ASSOC_REQ   = CTRL__VENDOR_IETYPE__Assoc_req,
+    WIFI_VND_IE_TYPE_ASSOC_RESP  = CTRL__VENDOR_IETYPE__Assoc_resp,
 } wifi_vendor_ie_type_e;
 
 typedef enum {
-	WIFI_VND_IE_ID_0 = CTRL__VENDOR_IEID__ID_0,
-	WIFI_VND_IE_ID_1 = CTRL__VENDOR_IEID__ID_1,
+    WIFI_VND_IE_ID_0 = CTRL__VENDOR_IEID__ID_0,
+    WIFI_VND_IE_ID_1 = CTRL__VENDOR_IEID__ID_1,
 } wifi_vendor_ie_id_e;
 
 
 enum hosted_features_t {
-	HOSTED_WIFI = HOSTED_FEATURE__Hosted_Wifi,
-	HOSTED_BT = HOSTED_FEATURE__Hosted_Bluetooth,
+    HOSTED_WIFI = HOSTED_FEATURE__Hosted_Wifi,
+    HOSTED_BT = HOSTED_FEATURE__Hosted_Bluetooth,
 };
 
 typedef struct {
-	/* Should be set to WIFI_VENDOR_IE_ELEMENT_ID (0xDD) */
-	uint8_t element_id;
-	/* Len of all bytes in the element data
-	 * following this field. Minimum 4 */
-	uint8_t length;
-	/* Vendor identifier (OUI) */
-	uint8_t vendor_oui[VENDOR_OUI_BUF];
-	/* Vendor-specific OUI type */
-	uint8_t vendor_oui_type;
-	/*length of payload field*/
-	uint16_t payload_len;
-	/* Payload. Length is equal to value in 'length' field, minus 4 */
-	uint8_t* payload;
+    /* Should be set to WIFI_VENDOR_IE_ELEMENT_ID (0xDD) */
+    uint8_t element_id;
+    /* Len of all bytes in the element data
+     * following this field. Minimum 4 */
+    uint8_t length;
+    /* Vendor identifier (OUI) */
+    uint8_t vendor_oui[VENDOR_OUI_BUF];
+    /* Vendor-specific OUI type */
+    uint8_t vendor_oui_type;
+    /*length of payload field*/
+    uint16_t payload_len;
+    /* Payload. Length is equal to value in 'length' field, minus 4 */
+    uint8_t* payload;
 
 } vendor_ie_data_t;
 
 typedef struct {
-	uint8_t ssid[SSID_LENGTH];
-	uint8_t bssid[BSSID_STR_SIZE];
-	int rssi;
-	int channel;
-	int encryption_mode;
+    uint8_t ssid[SSID_LENGTH];
+    uint8_t bssid[BSSID_STR_SIZE];
+    int rssi;
+    int channel;
+    int encryption_mode;
 } wifi_scanlist_t;
 
 typedef struct {
-	uint8_t bssid[BSSID_STR_SIZE];
-	int rssi;
+    uint8_t bssid[BSSID_STR_SIZE];
+    int rssi;
 } wifi_connected_stations_list_t;
 
 typedef struct {
-	int mode;
-	char mac[MAX_MAC_STR_SIZE];
+    int mode;
+    char mac[MAX_MAC_STR_SIZE];
 } wifi_mac_t;
 
 typedef struct {
-	int mode;
+    int mode;
 } wifi_mode_t;
 
 typedef struct {
-	uint8_t ssid[SSID_LENGTH];
-	uint8_t pwd[PASSWORD_LENGTH];
-	uint8_t bssid[BSSID_STR_SIZE];
-	bool is_wpa3_supported;
-	int rssi;
-	int channel;
-	int encryption_mode;
-	uint16_t listen_interval;
-	char status[STATUS_LENGTH];
-	char out_mac[MAX_MAC_STR_SIZE];
-	int band_mode;
+    uint8_t ssid[SSID_LENGTH];
+    uint8_t pwd[PASSWORD_LENGTH];
+    uint8_t bssid[BSSID_STR_SIZE];
+    bool is_wpa3_supported;
+    int rssi;
+    int channel;
+    int encryption_mode;
+    uint16_t listen_interval;
+    char status[STATUS_LENGTH];
+    char out_mac[MAX_MAC_STR_SIZE];
+    int band_mode;
 } wifi_ap_config_t;
 
 typedef struct {
-	uint8_t ssid[SSID_LENGTH];
-	uint8_t pwd[PASSWORD_LENGTH];
-	int channel;
-	int encryption_mode;
-	int max_connections;
-	bool ssid_hidden;
-	wifi_bandwidth_e bandwidth;
-	char out_mac[MAX_MAC_STR_SIZE];
-	int band_mode;
+    uint8_t ssid[SSID_LENGTH];
+    uint8_t pwd[PASSWORD_LENGTH];
+    int channel;
+    int encryption_mode;
+    int max_connections;
+    bool ssid_hidden;
+    wifi_bandwidth_e bandwidth;
+    char out_mac[MAX_MAC_STR_SIZE];
+    int band_mode;
 } softap_config_t;
 
 typedef struct {
-	int count;
-	/* dynamic size */
-	wifi_scanlist_t *out_list;
+    int count;
+    /* dynamic size */
+    wifi_scanlist_t *out_list;
 } wifi_ap_scan_list_t;
 
 typedef struct {
-	int count;
-	/* dynamic list*/
-	wifi_connected_stations_list_t *out_list;
+    int count;
+    /* dynamic list*/
+    wifi_connected_stations_list_t *out_list;
 } wifi_softap_conn_sta_list_t;
 
 typedef struct {
-	int ps_mode;
+    int ps_mode;
 } wifi_power_save_t;
 
 typedef struct {
-	bool enable;
-	wifi_vendor_ie_type_e type;
-	wifi_vendor_ie_id_e idx;
-	vendor_ie_data_t vnd_ie;
+    bool enable;
+    wifi_vendor_ie_type_e type;
+    wifi_vendor_ie_id_e idx;
+    vendor_ie_data_t vnd_ie;
 } wifi_softap_vendor_ie_t;
 
 typedef struct {
-	uint8_t *ota_data;
-	uint32_t ota_data_len;
+    uint8_t *ota_data;
+    uint32_t ota_data_len;
 } ota_write_t;
 
 typedef struct {
-	int power;
+    int power;
 } wifi_tx_power_t;
 
 typedef struct {
-	char project_name[3];
-	uint8_t major_1;
-	uint8_t major_2;
-	uint8_t minor;
-	uint8_t revision_patch_1;
-	uint8_t revision_patch_2;
+    char project_name[3];
+    uint8_t major_1;
+    uint8_t major_2;
+    uint8_t minor;
+    uint8_t revision_patch_1;
+    uint8_t revision_patch_2;
 } fw_version_t;
 
 typedef struct {
-	HostedFeature feature;
-	uint8_t enable;
+    HostedFeature feature;
+    uint8_t enable;
 } feature_enable_disable_t;
 
 typedef struct {
-	/* event */
-	uint32_t hb_num;
-	/* Req */
-	uint8_t enable;
-	uint32_t duration;
+    /* event */
+    uint32_t hb_num;
+    /* Req */
+    uint8_t enable;
+    uint32_t duration;
 } event_heartbeat_t;
 
 typedef struct {
-	uint8_t ssid[SSID_LENGTH];
-	uint32_t ssid_len;
-	uint8_t bssid[BSSID_STR_SIZE];
-	int channel;
-	int authmode;
-	int aid;
+    uint8_t ssid[SSID_LENGTH];
+    uint32_t ssid_len;
+    uint8_t bssid[BSSID_STR_SIZE];
+    int channel;
+    int authmode;
+    int aid;
 } event_sta_conn_t;
 
 typedef struct {
-	uint8_t ssid[SSID_LENGTH];
-	uint32_t ssid_len;
-	uint8_t bssid[BSSID_STR_SIZE];
-	uint32_t reason;
-	int32_t rssi;
+    uint8_t ssid[SSID_LENGTH];
+    uint32_t ssid_len;
+    uint8_t bssid[BSSID_STR_SIZE];
+    uint32_t reason;
+    int32_t rssi;
 } event_sta_disconn_t;
 
 typedef struct {
-	uint8_t mac[MAX_MAC_STR_SIZE];
-	int32_t aid;
-	int32_t is_mesh_child;
+    uint8_t mac[MAX_MAC_STR_SIZE];
+    int32_t aid;
+    int32_t is_mesh_child;
 } event_softap_sta_conn_t;
 
 typedef struct {
-	uint8_t mac[MAX_MAC_STR_SIZE];
-	int32_t aid;
-	int32_t is_mesh_child;
-	uint32_t reason;
+    uint8_t mac[MAX_MAC_STR_SIZE];
+    int32_t aid;
+    int32_t is_mesh_child;
+    uint32_t reason;
 } event_softap_sta_disconn_t;
 
 typedef struct Ctrl_cmd_t {
-	/* msg type could be 1. req 2. resp 3. notification */
-	uint8_t msg_type;
+    /* msg type could be 1. req 2. resp 3. notification */
+    uint8_t msg_type;
 
-	/* control path protobuf msg number */
-	uint16_t msg_id;
+    /* control path protobuf msg number */
+    uint16_t msg_id;
 
-	/* uid of request / response */
-	int32_t uid;
+    /* uid of request / response */
+    int32_t uid;
 
-	/* statusof response or notification */
-	int32_t resp_event_status;
+    /* statusof response or notification */
+    int32_t resp_event_status;
 
-	union {
-		wifi_mac_t                  wifi_mac;
-		wifi_mode_t                 wifi_mode;
+    union {
+        wifi_mac_t                  wifi_mac;
+        wifi_mode_t                 wifi_mode;
 
-		wifi_ap_scan_list_t         wifi_ap_scan;
-		wifi_ap_config_t            wifi_ap_config;
+        wifi_ap_scan_list_t         wifi_ap_scan;
+        wifi_ap_config_t            wifi_ap_config;
 
-		softap_config_t             wifi_softap_config;
-		wifi_softap_vendor_ie_t     wifi_softap_vendor_ie;
-		wifi_softap_conn_sta_list_t wifi_softap_con_sta;
+        softap_config_t             wifi_softap_config;
+        wifi_softap_vendor_ie_t     wifi_softap_vendor_ie;
+        wifi_softap_conn_sta_list_t wifi_softap_con_sta;
 
-		wifi_power_save_t           wifi_ps;
+        wifi_power_save_t           wifi_ps;
 
-		ota_write_t                 ota_write;
+        ota_write_t                 ota_write;
 
-		feature_enable_disable_t    feat_ena_disable;
+        feature_enable_disable_t    feat_ena_disable;
 
-		wifi_tx_power_t             wifi_tx_power;
+        wifi_tx_power_t             wifi_tx_power;
 
-		fw_version_t                fw_version;
+        fw_version_t                fw_version;
 
-		event_heartbeat_t           e_heartbeat;
+        event_heartbeat_t           e_heartbeat;
 
-		event_sta_conn_t            e_sta_conn;
-		event_sta_disconn_t         e_sta_disconn;
-		event_softap_sta_conn_t     e_softap_sta_conn;
-		event_softap_sta_disconn_t  e_softap_sta_disconn;
-	}u;
+        event_sta_conn_t            e_sta_conn;
+        event_sta_disconn_t         e_sta_disconn;
+        event_softap_sta_conn_t     e_softap_sta_conn;
+        event_softap_sta_disconn_t  e_softap_sta_disconn;
+    }u;
 
-	/* By default this callback is set to NULL.
-	 * When this callback is set by app while triggering request,
-	 * it will be automatically called asynchronously
-	 * by hosted control lib on receiving control response
-	 * in this case app will not be waiting for response.
-	 *
-	 * Whereas, when this is not set i.e. is NULL, it is understood
-	 * as synchronous response, and app after sending request,
-	 * will wait till getting a response
-	 */
-	int (*ctrl_resp_cb)(struct Ctrl_cmd_t *data);
+    /* By default this callback is set to NULL.
+     * When this callback is set by app while triggering request,
+     * it will be automatically called asynchronously
+     * by hosted control lib on receiving control response
+     * in this case app will not be waiting for response.
+     *
+     * Whereas, when this is not set i.e. is NULL, it is understood
+     * as synchronous response, and app after sending request,
+     * will wait till getting a response
+     */
+    int (*ctrl_resp_cb)(struct Ctrl_cmd_t *data);
 
-	/* Wait for timeout duration, if response not received,
-	 * it will send timeout response.
-	 * Default value for this time out is DEFAULT_CTRL_RESP_TIMEOUT */
-	int cmd_timeout_sec;
+    /* Wait for timeout duration, if response not received,
+     * it will send timeout response.
+     * Default value for this time out is DEFAULT_CTRL_RESP_TIMEOUT */
+    int cmd_timeout_sec;
 
-	/* assign the data pointer to free by lower layer.
-	 * Ignored if assigned as NULL */
-	void *free_buffer_handle;
+    /* assign the data pointer to free by lower layer.
+     * Ignored if assigned as NULL */
+    void *free_buffer_handle;
 
-	/* free handle to be registered
-	 * Ignored if assigned as NULL */
-	void (*free_buffer_func)(void *free_buffer_handle);
+    /* free handle to be registered
+     * Ignored if assigned as NULL */
+    void (*free_buffer_func)(void *free_buffer_handle);
 } ctrl_cmd_t;
 
 

+ 48 - 48
host/control_lib/src/ctrl_api.c

@@ -27,149 +27,149 @@ extern int deinit_hosted_control_lib_internal(void);
 
 int init_hosted_control_lib(void)
 {
-	return init_hosted_control_lib_internal();
+    return init_hosted_control_lib_internal();
 }
 
 int deinit_hosted_control_lib(void)
 {
-	return deinit_hosted_control_lib_internal();
+    return deinit_hosted_control_lib_internal();
 }
 
 /** Control Req->Resp APIs **/
 ctrl_cmd_t * wifi_get_mac(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_MAC_ADDR);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_MAC_ADDR);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_set_mac(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_SET_MAC_ADDR);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_SET_MAC_ADDR);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_get_mode(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_WIFI_MODE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_WIFI_MODE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_set_mode(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_SET_WIFI_MODE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_SET_WIFI_MODE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_set_power_save_mode(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_SET_PS_MODE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_SET_PS_MODE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_get_power_save_mode(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_PS_MODE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_PS_MODE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_ap_scan_list(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_AP_SCAN_LIST);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_AP_SCAN_LIST);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_get_ap_config(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_AP_CONFIG);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_AP_CONFIG);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_connect_ap(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_CONNECT_AP);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_CONNECT_AP);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_disconnect_ap(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_DISCONNECT_AP);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_DISCONNECT_AP);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_start_softap(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_START_SOFTAP);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_START_SOFTAP);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_get_softap_config(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_SOFTAP_CONFIG);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_SOFTAP_CONFIG);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_stop_softap(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_STOP_SOFTAP);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_STOP_SOFTAP);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_get_softap_connected_station_list(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_SOFTAP_CONN_STA_LIST);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_SOFTAP_CONN_STA_LIST);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_set_vendor_specific_ie(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_SET_SOFTAP_VND_IE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_SET_SOFTAP_VND_IE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_set_max_tx_power(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_SET_WIFI_MAX_TX_POWER);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_SET_WIFI_MAX_TX_POWER);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * wifi_get_curr_tx_power(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_WIFI_CURR_TX_POWER);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_WIFI_CURR_TX_POWER);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * config_heartbeat(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_CONFIG_HEARTBEAT);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_CONFIG_HEARTBEAT);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * ota_begin(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_OTA_BEGIN);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_OTA_BEGIN);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * ota_write(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_OTA_WRITE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_OTA_WRITE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * ota_end(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_OTA_END);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_OTA_END);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * feature_config(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_ENABLE_DISABLE);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_ENABLE_DISABLE);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }
 
 ctrl_cmd_t * get_fw_version(ctrl_cmd_t req)
 {
-	CTRL_SEND_REQ(CTRL_REQ_GET_FW_VERSION);
-	CTRL_DECODE_RESP_IF_NOT_ASYNC();
+    CTRL_SEND_REQ(CTRL_REQ_GET_FW_VERSION);
+    CTRL_DECODE_RESP_IF_NOT_ASYNC();
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 521 - 521
host/control_lib/src/ctrl_core.c


+ 10 - 10
host/driver/netif/netdev_if.h

@@ -25,10 +25,10 @@ extern "C" {
  * @brief Network data buffer
  */
 struct pbuf {
-	/* Data buffer */
-	uint8_t *payload;
-	/* Length of data buffer */
-	uint16_t len;
+    /* Data buffer */
+    uint8_t *payload;
+    /* Length of data buffer */
+    uint16_t len;
 };
 
 /**
@@ -40,12 +40,12 @@ typedef struct netdev * netdev_handle_t;
  * @brief Network operations implemented by driver
  */
 struct netdev_ops {
-	/* Open device */
-	int (* netdev_open) (netdev_handle_t netdev);
-	/* Close device */
-	int (* netdev_close) (netdev_handle_t netdev);
-	/* Transmit packet */
-	int (* netdev_xmit) (netdev_handle_t netdev, struct pbuf *net_buf);
+    /* Open device */
+    int (* netdev_open) (netdev_handle_t netdev);
+    /* Close device */
+    int (* netdev_close) (netdev_handle_t netdev);
+    /* Transmit packet */
+    int (* netdev_xmit) (netdev_handle_t netdev, struct pbuf *net_buf);
 };
 
 /**

+ 50 - 50
host/driver/network/netdev_api.c

@@ -18,12 +18,12 @@
 /**
   * @brief  init network interface
   * @param  None
-  * @retval STM_OK/STM_FAIL
+  * @retval ESP_OK/ESP_FAIL
   */
 int network_init(void)
 {
-	netdev_stub_init();
-	return STM_OK;
+    netdev_stub_init();
+    return ESP_OK;
 }
 
 
@@ -35,34 +35,34 @@ int network_init(void)
   */
 struct network_handle * network_open(char *if_name, void (* net_rx_callback)(struct network_handle *))
 {
-	struct netdev *ndev = NULL;
-	struct network_handle *net_handle = NULL;
+    struct netdev *ndev = NULL;
+    struct network_handle *net_handle = NULL;
 
-	if (!if_name)
-		return NULL;
+    if (!if_name)
+        return NULL;
 
-	ndev = netdev_stub_get(if_name);
+    ndev = netdev_stub_get(if_name);
 
-	if (!ndev) {
-		printf ("Invalid interface name\n");
-		return NULL;
-	}
+    if (!ndev) {
+        printf ("Invalid interface name\n");
+        return NULL;
+    }
 
-	/* create network handle */
-	net_handle = malloc(sizeof(struct network_handle));
+    /* create network handle */
+    net_handle = malloc(sizeof(struct network_handle));
 
-	net_handle->ndev = ndev;
-	net_handle->net_rx_callback = net_rx_callback;
+    net_handle->ndev = ndev;
+    net_handle->net_rx_callback = net_rx_callback;
 
-	if (netdev_stub_open(ndev)) {
-		printf ("Failed to setup netdev\n");
-		free(net_handle);
-		return NULL;
-	}
+    if (netdev_stub_open(ndev)) {
+        printf ("Failed to setup netdev\n");
+        free(net_handle);
+        return NULL;
+    }
 
-	ndev->net_handle = net_handle;
+    ndev->net_handle = net_handle;
 
-	return net_handle;
+    return net_handle;
 }
 
 
@@ -75,23 +75,23 @@ struct network_handle * network_open(char *if_name, void (* net_rx_callback)(str
   */
 struct pbuf * network_read(struct network_handle *handle, rt_int32_t timeout)
 {
-	struct pbuf *buffer = NULL;
+    struct pbuf *buffer = NULL;
 
-	if (!handle || !handle->ndev)
-		return NULL;
+    if (!handle || !handle->ndev)
+        return NULL;
 
-	buffer = malloc(sizeof(struct pbuf));
+    buffer = malloc(sizeof(struct pbuf));
 
-	if (!buffer)
-		return NULL;
+    if (!buffer)
+        return NULL;
 
-	if (rt_mq_recv(handle->ndev->rx_q, buffer, sizeof(struct pbuf), timeout) != sizeof(struct pbuf)) {
-		printf ("Failed to read from network\n");
-		free(buffer);
-		return NULL;
-	}
+    if (rt_mq_recv(handle->ndev->rx_q, buffer, sizeof(struct pbuf), timeout) != sizeof(struct pbuf)) {
+        printf ("Failed to read from network\n");
+        free(buffer);
+        return NULL;
+    }
 
-	return buffer;
+    return buffer;
 }
 
 
@@ -103,21 +103,21 @@ struct pbuf * network_read(struct network_handle *handle, rt_int32_t timeout)
   */
 int network_write(struct network_handle *net_handle, struct pbuf *buffer)
 {
-	struct netdev *ndev;
-	int ret;
+    struct netdev *ndev;
+    int ret;
 
-	if (!net_handle || !buffer)
-		return STM_FAIL;
+    if (!net_handle || !buffer)
+        return ESP_FAIL;
 
-	ndev = net_handle->ndev;
+    ndev = net_handle->ndev;
 
-	if (ndev && (ndev->state == NETDEV_STATE_UP)) {
-		if (ndev->net_ops && ndev->net_ops->netdev_xmit) {
-			ret = ndev->net_ops->netdev_xmit(ndev, buffer);
-		}
-	}
+    if (ndev && (ndev->state == NETDEV_STATE_UP)) {
+        if (ndev->net_ops && ndev->net_ops->netdev_xmit) {
+            ret = ndev->net_ops->netdev_xmit(ndev, buffer);
+        }
+    }
 
-	return ret;
+    return ret;
 }
 
 
@@ -128,10 +128,10 @@ int network_write(struct network_handle *net_handle, struct pbuf *buffer)
   */
 int network_close(struct network_handle *net_handle)
 {
-	netdev_stub_close(net_handle->ndev);
-	free(net_handle);
+    netdev_stub_close(net_handle->ndev);
+    free(net_handle);
 
-	return STM_OK;
+    return ESP_OK;
 }
 
 
@@ -142,5 +142,5 @@ int network_close(struct network_handle *net_handle)
   */
 int network_deinit(void)
 {
-	return STM_OK;
+    return ESP_OK;
 }

+ 1 - 1
host/driver/network/netdev_api.h

@@ -26,7 +26,7 @@ extern "C" {
 /**
   * @brief  init network interface
   * @param  None
-  * @retval STM_OK/STM_FAIL
+  * @retval ESP_OK/ESP_FAIL
   */
 int network_init(void);
 

+ 118 - 118
host/driver/network/netdev_stub.c

@@ -28,11 +28,11 @@ static uint8_t ndev_index = 0;
   */
 void netdev_stub_init(void)
 {
-	int i;
+    int i;
 
-	for (i = 0; i < MAX_INTERFACE; i++) {
-		ndev_db[i] = NULL;
-	}
+    for (i = 0; i < MAX_INTERFACE; i++) {
+        ndev_db[i] = NULL;
+    }
 }
 
 /**
@@ -42,22 +42,22 @@ void netdev_stub_init(void)
   */
 int netdev_stub_open(netdev_handle_t ndev)
 {
-	if (!ndev)
-		return STM_FAIL;
+    if (!ndev)
+        return ESP_FAIL;
 
-	if (ndev->rx_q) {
-		rt_mq_control(ndev->rx_q, RT_IPC_CMD_RESET, NULL);
-		return STM_OK;
-	}
+    if (ndev->rx_q) {
+        rt_mq_control(ndev->rx_q, RT_IPC_CMD_RESET, NULL);
+        return ESP_OK;
+    }
 
-	ndev->rx_q = rt_mq_create("netdv_rx", sizeof(struct pbuf), RX_QUEUE_SIZE, RT_IPC_FLAG_PRIO);
+    ndev->rx_q = rt_mq_create("netdv_rx", sizeof(struct pbuf), RX_QUEUE_SIZE, RT_IPC_FLAG_PRIO);
 
-	if (!ndev->rx_q)
-		return STM_FAIL;
+    if (!ndev->rx_q)
+        return ESP_FAIL;
 
-	ndev->state = NETDEV_STATE_UP;
+    ndev->state = NETDEV_STATE_UP;
 
-	return STM_OK;
+    return ESP_OK;
 }
 
 /**
@@ -67,16 +67,16 @@ int netdev_stub_open(netdev_handle_t ndev)
   */
 void netdev_stub_close(netdev_handle_t ndev)
 {
-	if (!ndev)
-		return;
+    if (!ndev)
+        return;
 
-	ndev->state = NETDEV_STATE_DOWN;
+    ndev->state = NETDEV_STATE_DOWN;
 
-	/* reset queue */
-	if (ndev->rx_q)
-		rt_mq_control(ndev->rx_q, RT_IPC_CMD_RESET, NULL);
+    /* reset queue */
+    if (ndev->rx_q)
+        rt_mq_control(ndev->rx_q, RT_IPC_CMD_RESET, NULL);
 
-	ndev->net_handle = NULL;
+    ndev->net_handle = NULL;
 }
 
 /**
@@ -86,24 +86,24 @@ void netdev_stub_close(netdev_handle_t ndev)
   */
 struct netdev *netdev_stub_get(char *if_name)
 {
-	int i = 0;
-	struct netdev *ndev;
+    int i = 0;
+    struct netdev *ndev;
 
-	if (!if_name)
-		return NULL;
+    if (!if_name)
+        return NULL;
 
-	while (i < MAX_INTERFACE) {
-		ndev = ndev_db[i];
+    while (i < MAX_INTERFACE) {
+        ndev = ndev_db[i];
 
-		if (ndev) {
-			if (strncmp(if_name, ndev->name, MAX_IF_NAME_SIZE) == 0)
-				return ndev;
-		}
+        if (ndev) {
+            if (strncmp(if_name, ndev->name, MAX_IF_NAME_SIZE) == 0)
+                return ndev;
+        }
 
-		i++;
-	}
+        i++;
+    }
 
-	return NULL;
+    return NULL;
 }
 
 /**
@@ -114,30 +114,30 @@ struct netdev *netdev_stub_get(char *if_name)
   */
 netdev_handle_t netdev_stub_alloc(uint32_t sizeof_priv, char *name)
 {
-	struct netdev *ndev = NULL;
+    struct netdev *ndev = NULL;
 
-	if (!name)
-		return NULL;
+    if (!name)
+        return NULL;
 
-	ndev = (struct netdev *) malloc(sizeof(struct netdev));
+    ndev = (struct netdev *) malloc(sizeof(struct netdev));
 
-	if (ndev) {
-		memset(ndev, 0, sizeof(struct netdev));
-		memcpy(ndev->name, name, MAX_IF_NAME_SIZE);
+    if (ndev) {
+        memset(ndev, 0, sizeof(struct netdev));
+        memcpy(ndev->name, name, MAX_IF_NAME_SIZE);
 
-		ndev->priv = malloc(sizeof_priv);
+        ndev->priv = malloc(sizeof_priv);
 
-		if (!ndev->priv) {
-			printf("Failed to allocate memory for priv\n");
-			free(ndev);
-			ndev = NULL;
-			return NULL;
-		}
-	} else {
-		printf("Failed to allocate memory for net dev\n");
-	}
+        if (!ndev->priv) {
+            printf("Failed to allocate memory for priv\n");
+            free(ndev);
+            ndev = NULL;
+            return NULL;
+        }
+    } else {
+        printf("Failed to allocate memory for net dev\n");
+    }
 
-	return ndev;
+    return ndev;
 }
 
 
@@ -148,23 +148,23 @@ netdev_handle_t netdev_stub_alloc(uint32_t sizeof_priv, char *name)
   */
 void netdev_stub_free(netdev_handle_t dev)
 {
-	struct netdev *ndev = (struct netdev *) dev;
+    struct netdev *ndev = (struct netdev *) dev;
 
-	if (ndev) {
-		if (ndev->priv) {
-			free(ndev->priv);
-			ndev->priv = NULL;
-		}
+    if (ndev) {
+        if (ndev->priv) {
+            free(ndev->priv);
+            ndev->priv = NULL;
+        }
 
-		if (ndev->net_handle) {
-			free(ndev->net_handle);
-			ndev->net_handle = NULL;
-		}
+        if (ndev->net_handle) {
+            free(ndev->net_handle);
+            ndev->net_handle = NULL;
+        }
 
 
-		free(ndev);
-		ndev = NULL;
-	}
+        free(ndev);
+        ndev = NULL;
+    }
 }
 
 
@@ -175,13 +175,13 @@ void netdev_stub_free(netdev_handle_t dev)
   */
 void *netdev_stub_get_priv(netdev_handle_t dev)
 {
-	struct netdev *ndev = (struct netdev *) dev;
+    struct netdev *ndev = (struct netdev *) dev;
 
-	if (ndev) {
-		return ndev->priv;
-	}
+    if (ndev) {
+        return ndev->priv;
+    }
 
-	return NULL;
+    return NULL;
 }
 
 
@@ -193,19 +193,19 @@ void *netdev_stub_get_priv(netdev_handle_t dev)
   */
 int netdev_stub_register(netdev_handle_t dev, struct netdev_ops *ops)
 {
-	struct netdev *ndev = (struct netdev *) dev;
+    struct netdev *ndev = (struct netdev *) dev;
 
-	if (!ndev || !ops) {
-		printf ("Invalid arguments\n");
-		return STM_FAIL;
-	}
+    if (!ndev || !ops) {
+        printf ("Invalid arguments\n");
+        return ESP_FAIL;
+    }
 
-	ndev->net_ops = ops;
-	ndev_db[ndev_index % MAX_INTERFACE] = ndev;
+    ndev->net_ops = ops;
+    ndev_db[ndev_index % MAX_INTERFACE] = ndev;
 
-	ndev_index++;
+    ndev_index++;
 
-	return STM_OK;
+    return ESP_OK;
 }
 
 
@@ -216,17 +216,17 @@ int netdev_stub_register(netdev_handle_t dev, struct netdev_ops *ops)
   */
 int netdev_stub_unregister(netdev_handle_t dev)
 {
-	struct netdev *ndev = (struct netdev *) dev;
+    struct netdev *ndev = (struct netdev *) dev;
 
-	if (!ndev) {
-		printf ("Invalid arguments\n");
-		return STM_FAIL;
-	}
+    if (!ndev) {
+        printf ("Invalid arguments\n");
+        return ESP_FAIL;
+    }
 
-	ndev->net_ops = NULL;
-	ndev->state = NETDEV_STATE_DOWN;
+    ndev->net_ops = NULL;
+    ndev->state = NETDEV_STATE_DOWN;
 
-	return STM_OK;
+    return ESP_OK;
 }
 
 /**
@@ -237,43 +237,43 @@ int netdev_stub_unregister(netdev_handle_t dev)
   */
 int netdev_stub_rx(netdev_handle_t dev, struct pbuf *net_buf)
 {
-	struct netdev *ndev = (struct netdev *) dev;
-	struct network_handle *net_handle;
+    struct netdev *ndev = (struct netdev *) dev;
+    struct network_handle *net_handle;
 
-	if (!ndev || !net_buf) {
-		printf ("Invalid arguments\n");
-		return STM_FAIL;
-	}
+    if (!ndev || !net_buf) {
+        printf ("Invalid arguments\n");
+        return ESP_FAIL;
+    }
 
-	if (ndev->state == NETDEV_STATE_UP) {
-		if (RT_EOK != rt_mq_send_wait(ndev->rx_q, net_buf, sizeof(struct pbuf), RT_WAITING_FOREVER)) {
-			printf ("Failed to enqueue received packet\n");
-			goto done;
-		}
+    if (ndev->state == NETDEV_STATE_UP) {
+        if (RT_EOK != rt_mq_send_wait(ndev->rx_q, net_buf, sizeof(struct pbuf), RT_WAITING_FOREVER)) {
+            printf ("Failed to enqueue received packet\n");
+            goto done;
+        }
 
-		net_handle = (struct network_handle *) ndev->net_handle;
+        net_handle = (struct network_handle *) ndev->net_handle;
 
-		if (net_handle->net_rx_callback)
-			net_handle->net_rx_callback(net_handle);
+        if (net_handle->net_rx_callback)
+            net_handle->net_rx_callback(net_handle);
 
-		free(net_buf);
-		net_buf = NULL;
+        free(net_buf);
+        net_buf = NULL;
 
-	} else {
-		goto done;
-	}
+    } else {
+        goto done;
+    }
 
-	return STM_OK;
+    return ESP_OK;
 
 done:
-	if (net_buf) {
-		if (net_buf->payload) {
-			free(net_buf->payload);
-			net_buf->payload = NULL;
-		}
-		free(net_buf);
-		net_buf = NULL;
-	}
-
-	return STM_FAIL;
+    if (net_buf) {
+        if (net_buf->payload) {
+            free(net_buf->payload);
+            net_buf->payload = NULL;
+        }
+        free(net_buf);
+        net_buf = NULL;
+    }
+
+    return ESP_FAIL;
 }

+ 14 - 14
host/driver/network/netdev_stub.h

@@ -36,28 +36,28 @@ extern "C" {
 struct network_handle;
 
 struct netdev {
-	/* Interface name */
-	char name[MAX_IF_NAME_SIZE];
+    /* Interface name */
+    char name[MAX_IF_NAME_SIZE];
 
-	/* Driver API's */
-	struct netdev_ops *net_ops;
+    /* Driver API's */
+    struct netdev_ops *net_ops;
 
-	/* Netdev state */
-	uint8_t state;
+    /* Netdev state */
+    uint8_t state;
 
-	/*Application handle */
-	struct network_handle *net_handle;
+    /*Application handle */
+    struct network_handle *net_handle;
 
-	/* Rx queue */
-	rt_mq_t rx_q;
+    /* Rx queue */
+    rt_mq_t rx_q;
 
-	/* Driver priv */
-	void *priv;
+    /* Driver priv */
+    void *priv;
 };
 
 struct network_handle {
-	struct netdev *ndev;
-	void (* net_rx_callback)();
+    struct netdev *ndev;
+    void (* net_rx_callback)();
 };
 
 /**

+ 2 - 2
host/driver/serial/serial_drv.h

@@ -25,9 +25,9 @@ extern "C" {
 #include "serial_ll_if.h"
 
 /** Exported Functions **/
-static inline stm_ret_t serial_rx_handler(interface_buffer_handle_t * buf_handle)
+static inline esp_ret serial_rx_handler(interface_buffer_handle_t * buf_handle)
 {
-	return serial_ll_rx_handler(buf_handle);
+    return serial_ll_rx_handler(buf_handle);
 }
 
 #ifdef __cplusplus

+ 216 - 216
host/driver/serial/serial_ll_if.c

@@ -24,14 +24,14 @@
 #define TO_SERIAL_INFT_QUEUE_SIZE         100
 
 typedef enum {
-	INIT,
-	ACTIVE,
-	DESTROY
+    INIT,
+    ACTIVE,
+    DESTROY
 } serial_ll_state_e;
 
 static struct rx_data {
-	int len;
-	uint8_t *data;
+    int len;
+    uint8_t *data;
 } r;
 
 /* data structures needed for serial driver */
@@ -42,18 +42,18 @@ static uint8_t conn_num = 0;
 /** Function Declarations **/
 static int       serial_ll_open    (serial_ll_handle_t *serial_ll_hdl);
 static uint8_t * serial_ll_read    (const serial_ll_handle_t * serial_ll_hdl,
-		uint16_t * rlen);
+        uint16_t * rlen);
 static int       serial_ll_write   (const serial_ll_handle_t * serial_ll_hdl,
-		uint8_t * wbuffer, const uint16_t wlen);
+        uint8_t * wbuffer, const uint16_t wlen);
 static int       serial_ll_close   (serial_ll_handle_t * serial_ll_hdl);
 
 
 /* define serial interface */
 static struct serial_ll_operations serial_ll_fops = {
-	.open    = serial_ll_open,
-	.read    = serial_ll_read,
-	.write   = serial_ll_write,
-	.close   = serial_ll_close,
+    .open    = serial_ll_open,
+    .read    = serial_ll_read,
+    .write   = serial_ll_write,
+    .close   = serial_ll_close,
 };
 
 /** function definition **/
@@ -67,29 +67,29 @@ static struct serial_ll_operations serial_ll_fops = {
   */
 static int serial_ll_open(serial_ll_handle_t *serial_ll_hdl)
 {
-	if (! serial_ll_hdl) {
-		printf("serial invalid hdr\n\r");
-		return STM_FAIL;
-	}
-
-	if (serial_ll_hdl->queue) {
-		/* clean up earlier queue */
-		rt_mq_delete(serial_ll_hdl->queue);
-	}
-
-	/* Queue - serial rx */
-	serial_ll_hdl->queue = rt_mq_create("serial_rx", 
-									 	sizeof(interface_buffer_handle_t),
-										TO_SERIAL_INFT_QUEUE_SIZE,
-										RT_IPC_FLAG_PRIO);
-
-	if (! serial_ll_hdl->queue) {
-		serial_ll_close(serial_ll_hdl);
-		return STM_FAIL;
-	}
-
-	serial_ll_hdl->state  = ACTIVE;
-	return STM_OK;
+    if (! serial_ll_hdl) {
+        printf("serial invalid hdr\n\r");
+        return ESP_FAIL;
+    }
+
+    if (serial_ll_hdl->queue) {
+        /* clean up earlier queue */
+        rt_mq_delete(serial_ll_hdl->queue);
+    }
+
+    /* Queue - serial rx */
+    serial_ll_hdl->queue = rt_mq_create("serial_rx",
+                                        sizeof(interface_buffer_handle_t),
+                                        TO_SERIAL_INFT_QUEUE_SIZE,
+                                        RT_IPC_FLAG_PRIO);
+
+    if (! serial_ll_hdl->queue) {
+        serial_ll_close(serial_ll_hdl);
+        return ESP_FAIL;
+    }
+
+    serial_ll_hdl->state  = ACTIVE;
+    return ESP_OK;
 }
 
 /**
@@ -99,13 +99,13 @@ static int serial_ll_open(serial_ll_handle_t *serial_ll_hdl)
   */
 static serial_ll_handle_t * get_serial_ll_handle(const uint8_t iface_num)
 {
-	if ((iface_num < MAX_SERIAL_INTF) &&
-		(interface_handle_g[iface_num]) &&
-		(interface_handle_g[iface_num]->state == ACTIVE)) {
+    if ((iface_num < MAX_SERIAL_INTF) &&
+        (interface_handle_g[iface_num]) &&
+        (interface_handle_g[iface_num]->state == ACTIVE)) {
 
-		return interface_handle_g[iface_num];
-	}
-	return NULL;
+        return interface_handle_g[iface_num];
+    }
+    return NULL;
 }
 
 /**
@@ -115,23 +115,23 @@ static serial_ll_handle_t * get_serial_ll_handle(const uint8_t iface_num)
   */
 static int serial_ll_close(serial_ll_handle_t * serial_ll_hdl)
 {
-	serial_ll_hdl->state = DESTROY;
-
-	if (serial_ll_hdl->queue) {
-		rt_mq_delete(serial_ll_hdl->queue);
-		serial_ll_hdl->queue = NULL;
-	}
-
-	/* reset connection */
-	if (conn_num > 0) {
-		interface_handle_g[--conn_num] = NULL;
-	}
-
-	if (serial_ll_hdl) {
-		free(serial_ll_hdl);
-		serial_ll_hdl = NULL;
-	}
-	return STM_OK;
+    serial_ll_hdl->state = DESTROY;
+
+    if (serial_ll_hdl->queue) {
+        rt_mq_delete(serial_ll_hdl->queue);
+        serial_ll_hdl->queue = NULL;
+    }
+
+    /* reset connection */
+    if (conn_num > 0) {
+        interface_handle_g[--conn_num] = NULL;
+    }
+
+    if (serial_ll_hdl) {
+        free(serial_ll_hdl);
+        serial_ll_hdl = NULL;
+    }
+    return ESP_OK;
 }
 
 
@@ -142,46 +142,46 @@ static int serial_ll_close(serial_ll_handle_t * serial_ll_hdl)
   * @retval rbuffer - ready buffer read on serial inerface
   */
 static uint8_t * serial_ll_read(const serial_ll_handle_t * serial_ll_hdl,
-							 uint16_t * rlen)
+                             uint16_t * rlen)
 {
-	/* This is a non-blocking call */
-	interface_buffer_handle_t buf_handle = {0};
-
-	/* Initial value */
-	*rlen = 0 ;
-
-	/* check if serial interface valid */
-	if ((! serial_ll_hdl) || (serial_ll_hdl->state != ACTIVE)) {
-		printf("serial invalid interface\n\r");
-		return NULL;
-	}
-
-	/* This is **blocking** receive.
-	 *
-	 * Although not needed in normal circumstances,
-	 * User can convert it to non blocking using below steps:
-	 *
-	 * To make it non blocking:
-	 *   As an another design option, serial_rx_callback can also be
-	 *   thought of incoming data indication, i.e. asynchronous rx
-	 *   indication, which can be used by higher layer in seperate
-	 *   dedicated rx task to receive and process rx data.
-	 *
-	 * In our example, first approach of blocking read is used.
-	 */
-	if (rt_mq_recv(serial_ll_hdl->queue, &buf_handle, sizeof(buf_handle), RT_WAITING_FOREVER) != sizeof(buf_handle)) {
-		printf("serial queue recv failed \n\r");
-		return NULL;
-	}
-
-	/* proceed only if payload and length are sane */
-	if (!buf_handle.payload || !buf_handle.payload_len) {
-		return NULL;
-	}
-
-	*rlen = buf_handle.payload_len;
-
-	return buf_handle.payload;
+    /* This is a non-blocking call */
+    interface_buffer_handle_t buf_handle = {0};
+
+    /* Initial value */
+    *rlen = 0 ;
+
+    /* check if serial interface valid */
+    if ((! serial_ll_hdl) || (serial_ll_hdl->state != ACTIVE)) {
+        printf("serial invalid interface\n\r");
+        return NULL;
+    }
+
+    /* This is **blocking** receive.
+     *
+     * Although not needed in normal circumstances,
+     * User can convert it to non blocking using below steps:
+     *
+     * To make it non blocking:
+     *   As an another design option, serial_rx_callback can also be
+     *   thought of incoming data indication, i.e. asynchronous rx
+     *   indication, which can be used by higher layer in seperate
+     *   dedicated rx task to receive and process rx data.
+     *
+     * In our example, first approach of blocking read is used.
+     */
+    if (rt_mq_recv(serial_ll_hdl->queue, &buf_handle, sizeof(buf_handle), RT_WAITING_FOREVER) != sizeof(buf_handle)) {
+        printf("serial queue recv failed \n\r");
+        return NULL;
+    }
+
+    /* proceed only if payload and length are sane */
+    if (!buf_handle.payload || !buf_handle.payload_len) {
+        return NULL;
+    }
+
+    *rlen = buf_handle.payload_len;
+
+    return buf_handle.payload;
 }
 
 /**
@@ -189,19 +189,19 @@ static uint8_t * serial_ll_read(const serial_ll_handle_t * serial_ll_hdl,
   * @param  serial_ll_hdl - handle
   *         wlen - number of bytes to write
   *         wbuffer - buffer to send
-  * @retval STM_FAIL/STM_OK
+  * @retval ESP_FAIL/ESP_OK
   */
 static int serial_ll_write(const serial_ll_handle_t * serial_ll_hdl,
-	uint8_t * wbuffer, const uint16_t wlen)
+    uint8_t * wbuffer, const uint16_t wlen)
 {
 
-	if ((! serial_ll_hdl) || (serial_ll_hdl->state != ACTIVE)) {
-		printf("serial invalid interface for write\n\r");
-		return STM_FAIL;
-	}
+    if ((! serial_ll_hdl) || (serial_ll_hdl->state != ACTIVE)) {
+        printf("serial invalid interface for write\n\r");
+        return ESP_FAIL;
+    }
 
-	return send_to_slave(serial_ll_hdl->if_type,
-		serial_ll_hdl->if_num, wbuffer, wlen);
+    return send_to_slave(serial_ll_hdl->if_type,
+        serial_ll_hdl->if_num, wbuffer, wlen);
 }
 
 /**
@@ -214,97 +214,97 @@ static int serial_ll_write(const serial_ll_handle_t * serial_ll_hdl,
   *         flag_more_frags - Flags for fragmentation
   * @retval 0 on success, else failure
   */
-stm_ret_t serial_ll_rx_handler(interface_buffer_handle_t * buf_handle)
+esp_ret serial_ll_rx_handler(interface_buffer_handle_t * buf_handle)
 {
 
 #define SERIAL_ALLOC_REALLOC_RDATA() \
-	do { \
-		if(!r.data) { \
-			r.data = (uint8_t *)hosted_malloc(buf_handle->payload_len); \
-		} else { \
-			r.data = (uint8_t *)hosted_realloc(r.data, r.len + buf_handle->payload_len); \
-		} \
-		if (!r.data) { \
-			printf("Failed to allocate serial data\n\r"); \
-			goto serial_buff_cleanup; \
-		} \
-	} while(0);
-
-	serial_ll_handle_t * serial_ll_hdl = NULL;
-	uint8_t *serial_buf = NULL;
-	interface_buffer_handle_t new_buf_handle = {0};
-
-	/* Check valid handle and length */
-	if (!buf_handle || !buf_handle->payload_len) {
-		printf("%s:%u Invalid parameters\n\r", __func__, __LINE__);
-		goto serial_buff_cleanup;
-	}
-
-	serial_ll_hdl = get_serial_ll_handle(buf_handle->if_num);
-
-	/* Is serial interface up */
-	if ((! serial_ll_hdl) || (serial_ll_hdl->state != ACTIVE)) {
-		printf("Serial interface not registered yet\n\r");
-		goto serial_buff_cleanup;
-	}
-
-
-	/* Accumulate fragments */
-	if (buf_handle->flag & MORE_FRAGMENT) {
-
-		SERIAL_ALLOC_REALLOC_RDATA();
-
-		memcpy((r.data + r.len), buf_handle->payload, buf_handle->payload_len);
-		r.len += buf_handle->payload_len;
-		return STM_OK;
-	}
-
-	SERIAL_ALLOC_REALLOC_RDATA();
-
-	/* No or last fragment */
-	memcpy((r.data + r.len), buf_handle->payload, buf_handle->payload_len);
-	r.len += buf_handle->payload_len;
-
-	serial_buf = (uint8_t *)malloc(r.len);
-	if(!serial_buf) {
-		printf("Malloc failed, drop pkt\n\r");
-		goto serial_buff_cleanup;
-	}
-	memcpy(serial_buf, r.data, r.len);
-
-	/* form new buf handle for processing of serial msg */
-	new_buf_handle.if_type = ESP_SERIAL_IF;
-	new_buf_handle.if_num = buf_handle->if_num;
-	new_buf_handle.payload_len = r.len;
-	new_buf_handle.payload = serial_buf;
-	new_buf_handle.priv_buffer_handle = serial_buf;
-	new_buf_handle.free_buf_handle = free;
-
-	r.len = 0;
-	hosted_free(r.data);
-	r.data = NULL;
-
-	/* send to serial queue */
-	if (RT_EOK != rt_mq_send_wait(serial_ll_hdl->queue,
-		    &new_buf_handle, sizeof(new_buf_handle), RT_WAITING_FOREVER)) {
-		printf("Failed send serialif queue[%u]\n\r", new_buf_handle.if_num);
-		goto serial_buff_cleanup;
-	}
-
-	/* Indicate higher layer about data ready for consumption */
-	if (serial_ll_hdl->serial_rx_callback) {
-		(*serial_ll_hdl->serial_rx_callback) ();
-	} else {
-		goto serial_buff_cleanup;
-	}
-
-	return STM_OK;
+    do { \
+        if(!r.data) { \
+            r.data = (uint8_t *)hosted_malloc(buf_handle->payload_len); \
+        } else { \
+            r.data = (uint8_t *)hosted_realloc(r.data, r.len + buf_handle->payload_len); \
+        } \
+        if (!r.data) { \
+            printf("Failed to allocate serial data\n\r"); \
+            goto serial_buff_cleanup; \
+        } \
+    } while(0);
+
+    serial_ll_handle_t * serial_ll_hdl = NULL;
+    uint8_t *serial_buf = NULL;
+    interface_buffer_handle_t new_buf_handle = {0};
+
+    /* Check valid handle and length */
+    if (!buf_handle || !buf_handle->payload_len) {
+        printf("%s:%u Invalid parameters\n\r", __func__, __LINE__);
+        goto serial_buff_cleanup;
+    }
+
+    serial_ll_hdl = get_serial_ll_handle(buf_handle->if_num);
+
+    /* Is serial interface up */
+    if ((! serial_ll_hdl) || (serial_ll_hdl->state != ACTIVE)) {
+        printf("Serial interface not registered yet\n\r");
+        goto serial_buff_cleanup;
+    }
+
+
+    /* Accumulate fragments */
+    if (buf_handle->flag & MORE_FRAGMENT) {
+
+        SERIAL_ALLOC_REALLOC_RDATA();
+
+        memcpy((r.data + r.len), buf_handle->payload, buf_handle->payload_len);
+        r.len += buf_handle->payload_len;
+        return ESP_OK;
+    }
+
+    SERIAL_ALLOC_REALLOC_RDATA();
+
+    /* No or last fragment */
+    memcpy((r.data + r.len), buf_handle->payload, buf_handle->payload_len);
+    r.len += buf_handle->payload_len;
+
+    serial_buf = (uint8_t *)malloc(r.len);
+    if(!serial_buf) {
+        printf("Malloc failed, drop pkt\n\r");
+        goto serial_buff_cleanup;
+    }
+    memcpy(serial_buf, r.data, r.len);
+
+    /* form new buf handle for processing of serial msg */
+    new_buf_handle.if_type = ESP_SERIAL_IF;
+    new_buf_handle.if_num = buf_handle->if_num;
+    new_buf_handle.payload_len = r.len;
+    new_buf_handle.payload = serial_buf;
+    new_buf_handle.priv_buffer_handle = serial_buf;
+    new_buf_handle.free_buf_handle = free;
+
+    r.len = 0;
+    hosted_free(r.data);
+    r.data = NULL;
+
+    /* send to serial queue */
+    if (RT_EOK != rt_mq_send_wait(serial_ll_hdl->queue,
+            &new_buf_handle, sizeof(new_buf_handle), RT_WAITING_FOREVER)) {
+        printf("Failed send serialif queue[%u]\n\r", new_buf_handle.if_num);
+        goto serial_buff_cleanup;
+    }
+
+    /* Indicate higher layer about data ready for consumption */
+    if (serial_ll_hdl->serial_rx_callback) {
+        (*serial_ll_hdl->serial_rx_callback) ();
+    } else {
+        goto serial_buff_cleanup;
+    }
+
+    return ESP_OK;
 
 serial_buff_cleanup:
-	r.len = 0;
-	hosted_free(serial_buf);
-	hosted_free(r.data);
-	return STM_FAIL;
+    r.len = 0;
+    hosted_free(serial_buf);
+    hosted_free(r.data);
+    return ESP_FAIL;
 }
 
 /** Exported Functions **/
@@ -316,30 +316,30 @@ serial_buff_cleanup:
   */
 serial_ll_handle_t * serial_ll_init(void(*serial_rx_callback)(void))
 {
-	serial_ll_handle_t  * serial_ll_hdl = NULL;
-
-	/* Check if more serial interfaces be created */
-	if ((conn_num + 1) < MAX_SERIAL_INTF) {
-
-		serial_ll_hdl = (serial_ll_handle_t *)malloc(sizeof(serial_ll_handle_t));
-		if (! serial_ll_hdl) {
-			printf("Serial interface - malloc failed\n\r");
-			return NULL;
-		}
-
-		serial_ll_hdl->if_type = ESP_SERIAL_IF;
-		serial_ll_hdl->if_num  = conn_num;
-		serial_ll_hdl->queue   = to_serial_ll_intf_queue[conn_num];
-		serial_ll_hdl->state   = INIT;
-		serial_ll_hdl->fops    = &serial_ll_fops;
-		serial_ll_hdl->serial_rx_callback   = serial_rx_callback;
-		interface_handle_g[conn_num] = serial_ll_hdl;
-		conn_num++;
-
-	} else {
-		printf("Number of serial interface connections overflow\n\r");
-		return NULL;
-	}
-
-	return serial_ll_hdl;
+    serial_ll_handle_t  * serial_ll_hdl = NULL;
+
+    /* Check if more serial interfaces be created */
+    if ((conn_num + 1) < MAX_SERIAL_INTF) {
+
+        serial_ll_hdl = (serial_ll_handle_t *)malloc(sizeof(serial_ll_handle_t));
+        if (! serial_ll_hdl) {
+            printf("Serial interface - malloc failed\n\r");
+            return NULL;
+        }
+
+        serial_ll_hdl->if_type = ESP_SERIAL_IF;
+        serial_ll_hdl->if_num  = conn_num;
+        serial_ll_hdl->queue   = to_serial_ll_intf_queue[conn_num];
+        serial_ll_hdl->state   = INIT;
+        serial_ll_hdl->fops    = &serial_ll_fops;
+        serial_ll_hdl->serial_rx_callback   = serial_rx_callback;
+        interface_handle_g[conn_num] = serial_ll_hdl;
+        conn_num++;
+
+    } else {
+        printf("Number of serial interface connections overflow\n\r");
+        return NULL;
+    }
+
+    return serial_ll_hdl;
 }

+ 58 - 58
host/driver/serial/serial_ll_if.h

@@ -28,67 +28,67 @@ struct serial_ll_operations;
 
 /* serial interface handle */
 typedef struct serial_handle_s {
-	rt_mq_t queue;
-	uint8_t if_type;
-	uint8_t if_num;
-	struct serial_ll_operations *fops;
-	uint8_t state;
-	void (*serial_rx_callback) (void);
+    rt_mq_t queue;
+    uint8_t if_type;
+    uint8_t if_num;
+    struct serial_ll_operations *fops;
+    uint8_t state;
+    void (*serial_rx_callback) (void);
 } serial_ll_handle_t;
 
 /* serial interface */
 struct serial_ll_operations {
-	/**
-	 * @brief Open new Serial interface
-	 * @param  serial_ll_hdl - handle of serial interface
-	 * @retval 0 if success, -1 on failure
-	 */
-	int        (*open)  (serial_ll_handle_t *serial_ll_hdl);
-
-
-	/**
-	 * @brief  Serial interface read non blocking
-	 *         This is non blocking receive
-	 *         In case higher layer using serial interface needs to make
-	 *         blocking read, it should register serial_rx_callback through
-	 *         serial_ll_init.
-	 *
-	 *         serial_rx_callback is notification mechanism to implementer of
-	 *         serial interface. Higher layer would understand there is data
-	 *         is ready through this notification. Then higer layer should do
-	 *         serial_read API to receive actual data.
-	 *
-	 *         As an another design option, serial_rx_callback can also be
-	 *         thought of incoming data indication, i.e. asynchronous rx
-	 *         indication, which can be used by higher layer in seperate
-	 *         dedicated rx task to receive and process rx data.
-	 *
-	 * @param  serial_ll_hdl - handle
-	 *         rlen - output param, number of bytes read
-	 *
-	 * @retval rbuffer - ready buffer read on serial inerface
-	 */
-	uint8_t *  (*read)  (const serial_ll_handle_t * serial_ll_hdl,
-		uint16_t * rlen);
-
-
-	/**
-	 * @brief Serial interface write
-	 * @param  serial_ll_hdl - handle
-	 *         wlen - number of bytes to write
-	 *         wbuffer - buffer to send
-	 * @retval STM_FAIL/STM_OK
-	 */
-	int        (*write) (const serial_ll_handle_t * serial_ll_hdl,
-		uint8_t * wbuffer, const uint16_t wlen);
-
-
-	/**
-	 * @brief close - Close serial interface
-	 * @param  serial_ll_hdl - handle
-	 * @retval rbuffer - ready buffer read on serial inerface
-	 */
-	int        (*close) (serial_ll_handle_t * serial_ll_hdl);
+    /**
+     * @brief Open new Serial interface
+     * @param  serial_ll_hdl - handle of serial interface
+     * @retval 0 if success, -1 on failure
+     */
+    int        (*open)  (serial_ll_handle_t *serial_ll_hdl);
+
+
+    /**
+     * @brief  Serial interface read non blocking
+     *         This is non blocking receive
+     *         In case higher layer using serial interface needs to make
+     *         blocking read, it should register serial_rx_callback through
+     *         serial_ll_init.
+     *
+     *         serial_rx_callback is notification mechanism to implementer of
+     *         serial interface. Higher layer would understand there is data
+     *         is ready through this notification. Then higer layer should do
+     *         serial_read API to receive actual data.
+     *
+     *         As an another design option, serial_rx_callback can also be
+     *         thought of incoming data indication, i.e. asynchronous rx
+     *         indication, which can be used by higher layer in seperate
+     *         dedicated rx task to receive and process rx data.
+     *
+     * @param  serial_ll_hdl - handle
+     *         rlen - output param, number of bytes read
+     *
+     * @retval rbuffer - ready buffer read on serial inerface
+     */
+    uint8_t *  (*read)  (const serial_ll_handle_t * serial_ll_hdl,
+        uint16_t * rlen);
+
+
+    /**
+     * @brief Serial interface write
+     * @param  serial_ll_hdl - handle
+     *         wlen - number of bytes to write
+     *         wbuffer - buffer to send
+     * @retval ESP_FAIL/ESP_OK
+     */
+    int        (*write) (const serial_ll_handle_t * serial_ll_hdl,
+        uint8_t * wbuffer, const uint16_t wlen);
+
+
+    /**
+     * @brief close - Close serial interface
+     * @param  serial_ll_hdl - handle
+     * @retval rbuffer - ready buffer read on serial inerface
+     */
+    int        (*close) (serial_ll_handle_t * serial_ll_hdl);
 };
 
 /**
@@ -98,7 +98,7 @@ struct serial_ll_operations {
   */
 serial_ll_handle_t * serial_ll_init(void(*rx_data_ind)(void));
 
-stm_ret_t serial_ll_rx_handler(interface_buffer_handle_t * buf_handle);
+esp_ret serial_ll_rx_handler(interface_buffer_handle_t * buf_handle);
 #ifdef __cplusplus
 }
 #endif

+ 0 - 160
host/driver/transport/sdio/sdio_api.c

@@ -1,160 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/** Includes **/
-#include "common.h"
-#include "sdio_ll.h"
-
-/** Constants/Macros **/
-
-#define CLK_IN_MHZ                      1000000
-#define SDIO_CLOCK                      10*CLK_IN_MHZ
-#define MAX_SUPPORTED_SDIO_CLOCK        10*CLK_IN_MHZ
-
-/**
- * @brief  Probe and initialize SDIO slave using given host
- * @param  None
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_init(void)
-{
-	sdio_init_t sdio_init = {
-		.width = WIDTH_4,
-		/* Max supported now is MAX_SUPPORTED_SDIO_CLOCK
-		 * Anything beyond MAX_SUPPORTED_SDIO_CLOCK will automatically be limited
-		 **/
-		.clock = SDIO_CLOCK
-	};
-
-	if (sdio_init.clock > MAX_SUPPORTED_SDIO_CLOCK) {
-		/* Limit clock to maximum supported */
-		sdio_init.clock = MAX_SUPPORTED_SDIO_CLOCK;
-	}
-
-	STM32SdioInit(sdio_init);
-	return STM_OK;
-}
-
-/**
- * @brief  Read multiple bytes from an SDIO card using CMD53
- * @param  function - IO function number
- *         addr - byte address within IO function where reading starts
- *         buffer - buffer which receives the data read from card
- *         len - number of bytes to read
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_read_bytes(uint32_t function, uint32_t addr, void* buffer,
-		uint32_t len, uint8_t multi_blocks)
-{
-	int ret = 0;
-	ret = STM32ReadData(function, addr, buffer, len, multi_blocks);
-	if (ret) {
-		printf("%s %d CMD53 error\r\n",__func__, __LINE__);
-		return STM_FAIL;
-	}
-
-	return STM_OK;
-}
-
-/**
- * @brief  Write multiple bytes to an SDIO card using CMD53
- * @param  function - IO function number
- *         addr - byte address within IO function where writing starts
- *         buffer - data to be written
- *         len - number of bytes to write
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_write_bytes(uint32_t function, uint32_t addr,
-		void* buffer, uint32_t len)
-{
-	int ret = STM32WriteData(function, addr, buffer, len);
-	if (ret < 0) {
-		printf("%s CMD53 write error\r\n",__func__);
-		return STM_FAIL;
-	}
-	return STM_OK;
-}
-
-/**
- * @brief  Write blocks of data to an SDIO card using CMD53
- * @param  function - IO function number
- *         addr - byte address within IO function where writing starts
- *         buffer - data to be written
- *         len - number of bytes to read, must be divisible by the card block size.
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_write_blocks(uint32_t function, uint32_t addr,
-		void* buffer, uint32_t len)
-{
-	return sdio_driver_write_bytes(function, addr, buffer, len);
-}
-
-/**
- * @brief  Read blocks of data from an SDIO card using CMD53
- * @param  function - IO function number
- *         addr - byte address within IO function where writing starts
- *         buffer - buffer which receives the data read from card
- *         len - number of bytes to read, must be divisible by the card block size.
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_read_blocks(uint32_t function, uint32_t addr,
-		void* buffer, uint32_t len, uint8_t multi_blocks)
-{
-	stm_ret_t ret = STM_OK;
-
-	ret = sdio_driver_read_bytes(function, addr, buffer, len, multi_blocks);
-	if (ret) {
-		printf("%s %d CMD53 error\r\n",__func__, __LINE__);
-		return STM_FAIL;
-	}
-	return ret;
-}
-
-/**
- * @brief  Read one byte from SDIO slave using CMD52
- * @param  function - IO function number
- *         reg - byte address within IO function
- *         [out]out_byte - output, receives the value read from the card
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_read_byte(uint32_t function, uint32_t reg, uint8_t *out_byte)
-{
-	uint8_t func = function & 0xf;
-	uint8_t result = STM32ReadReg(func, reg);
-	if (out_byte) {
-		*out_byte = result;
-	}
-	return STM_OK;
-}
-
-/**
- * @brief  Write one byte to SDIO slave using CMD52
- * @param  function - IO function number
- *         reg - byte address within IO function
- *         in_byte - value to be written
- *         [out]out_byte - if not NULL, receives new byte value read from
- *         the card (read-after-write).
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_write_byte(uint32_t function, uint32_t reg,
-		uint8_t in_byte, uint8_t* out_byte)
-{
-	uint8_t func = function & 0xf;
-	uint8_t result = STM32WriteReg(func, reg, in_byte);
-	if (out_byte) {
-		*out_byte = result;
-	}
-	return STM_OK;
-}

+ 0 - 117
host/driver/transport/sdio/sdio_api.h

@@ -1,117 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/** prevent recursive inclusion **/
-#ifndef __SDIO_API_H
-#define __SDIO_API_H
-
-/** Includes **/
-
-/** constants/macros **/
-
-/** Exported Structures **/
-
-/** Exported variables **/
-
-/** Inline functions **/
-
-/** Exported Functions **/
-
-/**
- * Probe and initialize SDIO slave using given host
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_init(void);
-
-/**
- * Write blocks of data to an SDIO card using CMD53
- *
- * This function performs write operation using CMD53 in block mode
- * For byte mode, see sdio_driver_write_bytes
- *
- * @param  function - IO function number
- *         addr - byte address within IO function where writing starts
- *         buffer - data to be written
- *         len - number of bytes to read, must be divisible by the card block size
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_write_blocks(uint32_t function, uint32_t addr, void* buffer, uint32_t len);
-
-/**
- * Read blocks of data from an SDIO card using CMD53
- *
- * This function performs read operation using CMD53 in block mode
- * For byte mode, see sdio_driver_read_bytes
- *
- * @param  function - IO function number
- *         addr - byte address within IO function where writing starts
- *         buffer - buffer which receives the data read from card
- *         len - number of bytes to read, must be divisible by the card block size
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_read_blocks(uint32_t function, uint32_t addr, void* buffer, uint32_t len, uint8_t multi_blocks);
-
-/**
- * Read multiple bytes from an SDIO card using CMD53
- *
- * This function performs read operation using CMD53 in byte mode
- * For block mode, see sdio_driver_read_blocks
- *
- * @param  function - IO function number
- *         addr - byte address within IO function where reading starts
- *         buffer - buffer which receives the data read from card
- *         len - number of bytes to read
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_read_bytes(uint32_t function, uint32_t addr, void* buffer, uint32_t len, uint8_t multi_blocks);
-
-/**
- * Write multiple bytes to an SDIO card using CMD53
- *
- * This function performs write operation using CMD53 in byte mode
- * For block mode, see sdio_driver_write_blocks
- *
- * @param  function - IO function number
- *         addr - byte address within IO function where writing starts
- *         buffer - data to be written
- *         len - number of bytes to write
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_write_bytes(uint32_t function, uint32_t addr, void* buffer, uint32_t len);
-
-/**
- * Read one byte from SDIO slave using CMD52
- *
- * @param  function - IO function number
- *         reg - byte address within IO function
- *         [out]out_byte - output, receives the value read from the card
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_read_byte(uint32_t function, uint32_t reg, uint8_t *out_byte);
-
-/**
- * Write one byte to SDIO slave using CMD52
- *
- * @param  function - IO function number
- *         reg - byte address within IO function
- *         in_byte - value to be written
- *         [out]out_byte - if not NULL, receives new byte value read from the
- *          card (read-after-write)
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_driver_write_byte(uint32_t function, uint32_t reg, uint8_t in_byte, uint8_t* out_byte);
-
-#endif /* __SDIO_API_H */

+ 0 - 668
host/driver/transport/sdio/sdio_drv.c

@@ -1,668 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/** Includes **/
-#include "string.h"
-#include "sdio.h"
-
-#include "sdio_drv.h"
-#include "sdio_reg.h"
-#include "sdio_host.h"
-#include "sdio_ll.h"
-#include "serial_drv.h"
-#include "stats.h"
-
-/** Constants/Macros **/
-#define TO_SLAVE_QUEUE_SIZE               10
-#define FROM_SLAVE_QUEUE_SIZE             10
-
-#define RX_TASK_STACK_SIZE                4096
-#define TX_TASK_STACK_SIZE                4096
-#define PROCESS_RX_TASK_STACK_SIZE        4096
-#define RX_TIMEOUT_TICKS                  50
-
-#define MAX_PAYLOAD_SIZE (MAX_SDIO_BUFFER_SIZE-sizeof(struct esp_payload_header))
-
-/** Enumeration **/
-enum hardware_type_e {
-	HARDWARE_TYPE_ESP32,
-	HARDWARE_TYPE_INVALID,
-};
-
-/** Function declaration **/
-
-static void sdio_recv(void);
-static stm_ret_t io_init_seq(void);
-static stm_ret_t sdio_rx_esp32(void);
-static stm_ret_t generate_slave_intr(uint8_t intr_no);
-
-static struct esp_private * esp_priv[MAX_NETWORK_INTERFACES];
-static struct esp_private * get_priv(uint8_t if_type, uint8_t if_num);
-
-static struct netdev_ops esp_net_ops = {
-	.netdev_open = esp_netdev_open,
-	.netdev_close = esp_netdev_close,
-	.netdev_xmit = esp_netdev_xmit,
-};
-
-static int init_netdev(void);
-static void deinit_netdev(void);
-
-static void rx_task(void const* pvParameters);
-static void tx_task(void const* pvParameters);
-static void process_rx_task(void const* pvParameters);
-
-static void set_hardware_type(void);
-
-/* SDIO transaction functions for different hardware types */
-static stm_ret_t (*sdio_trans_func[])(void) = {
-	sdio_rx_esp32,
-};
-
-/** Exported variables **/
-SemaphoreHandle_t sdio_recv_SemHandle;
-
-/** Global static variables **/
-static uint8_t hardware_type = HARDWARE_TYPE_INVALID;
-static osMutexId transmit_mux;
-static osThreadId process_rx_task_id = 0;
-static osThreadId rx_task_id = 0;
-static osThreadId tx_task_id = 0;
-
-/* Queue declaration */
-static QueueHandle_t to_slave_queue = NULL;
-static QueueHandle_t from_slave_queue = NULL;
-
-/* callback of event handler */
-static void (*sdio_drv_evt_handler_fp) (uint8_t);
-
-/** function definition **/
-
-/** Local Functions **/
-
-/**
- * @brief  get private interface of expected type and number
- * @param  if_type - interface type
- *         if_num - interface number
- * @retval interface handle if found, else NULL
- */
-static struct esp_private * get_priv(uint8_t if_type, uint8_t if_num)
-{
-	for (int i = 0; i < MAX_NETWORK_INTERFACES; i++) {
-		if((esp_priv[i]) &&
-		   (esp_priv[i]->if_type == if_type) &&
-		   (esp_priv[i]->if_num == if_num))
-			return esp_priv[i];
-	}
-
-	return NULL;
-}
-
-
-/**
- * @brief  create virtual network device
- * @param  None
- * @retval 0   on success
- *         -1  on failure
- */
-static int init_netdev(void)
-{
-	void *ndev = NULL;
-	struct esp_private *priv = NULL;
-	char *if_name[MAX_NETWORK_INTERFACES] = {STA_INTERFACE, SOFTAP_INTERFACE, };
-	uint8_t if_type[MAX_NETWORK_INTERFACES] = {ESP_STA_IF, ESP_AP_IF, };
-
-	for (int i = 0; i < MAX_NETWORK_INTERFACES; i++) {
-		/* Alloc and init netdev */
-		ndev = netdev_alloc(sizeof(struct esp_private), if_name[i]);
-		if (!ndev) {
-			deinit_netdev();
-			return STM_FAIL;
-		}
-
-		priv = (struct esp_private *) netdev_get_priv(ndev);
-		if (!priv) {
-			deinit_netdev();
-			return STM_FAIL;
-		}
-
-		priv->netdev = ndev;
-		priv->if_type = if_type[i];
-		priv->if_num = 0;
-
-		if (netdev_register(ndev, &esp_net_ops)) {
-			deinit_netdev();
-			return STM_FAIL;
-		}
-
-		esp_priv[i] = priv;
-	}
-
-	return STM_OK;
-}
-
-/**
- * @brief  destroy virtual network device
- * @param  None
- * @retval None
- */
-static void deinit_netdev(void)
-{
-	for (int i = 0; i < MAX_NETWORK_INTERFACES; i++) {
-		if (esp_priv[i]) {
-			if (esp_priv[i]->netdev) {
-				netdev_unregister(esp_priv[i]->netdev);
-				netdev_free(esp_priv[i]->netdev);
-			}
-			esp_priv[i] = NULL;
-		}
-	}
-}
-
-/**
- * @brief  Set hardware type
- *         This may be used when driver need differntiation based on hardware
- * @param  None
- * @retval None
- */
-static void set_hardware_type(void)
-{
-	/* currently supporting only ESP32 type */
-	hardware_type = HARDWARE_TYPE_ESP32;
-}
-
-/**
- * @brief  Generate slave interrupt
- *         Notify slave about important event
- * @param  intr_no - Bit value of notification
- * @retval register value on success
- *         STM_FAIL_INVALID_ARG on failure
- */
-static stm_ret_t generate_slave_intr(uint8_t intr_no)
-{
-	uint32_t intr_mask = BIT(intr_no + ESP_SDIO_CONF_OFFSET);
-	stm_ret_t ret = STM_OK;
-
-	if (intr_no >= BIT(ESP_MAX_HOST_INTERRUPT)) {
-		printf("Invalid slave interrupt number\n\r");
-		return STM_FAIL_INVALID_ARG;
-	}
-	xSemaphoreTake(transmit_mux, portMAX_DELAY);
-	ret = STM32WriteReg(SDIO_FUNC_1, SDIO_REG(ESP_SLAVE_SCRATCH_REG_7), intr_mask);
-	xSemaphoreGive(transmit_mux);
-
-	return ret;
-}
-
-/**
- * @brief  I/O initialization command sequence
- * @param  None
- * @retval
- *         STM_OK for success or failure from enum stm_ret_t
- */
-static stm_ret_t io_init_seq(void)
-{
-	stm_ret_t retval = STM_OK;
-
-	hard_delay(100000);
-	/* sdio host mode init */
-	retval = sdio_host_init();
-	if (retval != STM_OK) {
-		printf("sdio init error,ret:%d\n\r", retval);
-		return STM_FAIL;
-	}
-	/* notify slave application that host driver is ready */
-	generate_slave_intr(ESP_OPEN_DATA_PATH);
-
-	return STM_OK;
-}
-
-
-
-/** Local functions **/
-
-/**
- * @brief  Full duplex transaction sdio transaction for ESP32 hardware
- * @param  txbuff: TX sdio buffer
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-static stm_ret_t sdio_rx_esp32(void)
-{
-	stm_ret_t ret = STM_FAIL;
-	uint8_t *rxbuff = NULL;
-	interface_buffer_handle_t buf_handle = {0};
-	struct  esp_payload_header *payload_header = NULL;
-	uint16_t len = 0, offset = 0;
-	size_t size_read = MAX_SDIO_BUFFER_SIZE;
-
-	/* Allocate rx buffer */
-	rxbuff = (uint8_t *)malloc(MAX_SDIO_BUFFER_SIZE);
-	assert(rxbuff);
-	memset(rxbuff, 0, MAX_SDIO_BUFFER_SIZE);
-
-	while (1) {
-
-		/* Receive buffer from slave */
-		ret = sdio_host_get_packet(rxbuff, MAX_SDIO_BUFFER_SIZE,
-				&size_read, RX_TIMEOUT_TICKS);
-
-		if (ret == STM_FAIL_NOT_FOUND) {
-			printf("interrupt but no data can be read\n\r");
-			break;
-		} else if (ret == STM_FAIL_TIMEOUT) {
-			continue;
-		} else if (ret && ret != STM_FAIL_NOT_FINISHED) {
-			printf("rx packet error: %d\n\r", ret);
-			continue;
-		}
-
-#if DEBUG_TRANSPORT
-		/* Read buffer is easily accesible here, before processing */
-		//printf("data: %s size %u\n\r", (char*)(rxbuff), size_read);
-#endif
-
-		if (ret == STM_OK) {
-			break;
-		}
-	}
-
-	if (ret == STM_OK) {
-		/* Transaction successful */
-
-		/* create buffer rx handle, used for processing */
-		payload_header = (struct esp_payload_header *) rxbuff;
-
-		/* Fetch length and offset from payload header */
-		len = le16toh(payload_header->len);
-		offset = le16toh(payload_header->offset);
-
-		if ((!len) ||
-		    (len > MAX_PAYLOAD_SIZE) ||
-		    (offset != sizeof(struct esp_payload_header))) {
-
-			/* Free up buffer, as one of following -
-			 * 1. no payload to process
-			 * 2. input packet size > driver capacity
-			 * 3. payload header size mismatch,
-			 * wrong header/bit packing?
-			 * */
-			if (rxbuff) {
-				free(rxbuff);
-				rxbuff = NULL;
-			}
-			/* Give chance to other tasks */
-			osDelay(0);
-
-		} else {
-
-			buf_handle.priv_buffer_handle = rxbuff;
-			buf_handle.free_buf_handle    = free;
-			buf_handle.payload_len        = len;
-			buf_handle.if_type            = payload_header->if_type;
-			buf_handle.if_num             = payload_header->if_num;
-			buf_handle.payload            = rxbuff + offset;
-			if (pdTRUE != xQueueSend(from_slave_queue,
-						&buf_handle, portMAX_DELAY)) {
-				printf("Failed to send buffer\n\r");
-				goto done;
-			}
-		}
-	} else {
-		goto done;
-	}
-
-	return STM_OK;
-
-done:
-	/* error cases, return failure */
-	if (rxbuff) {
-		free(rxbuff);
-		rxbuff = NULL;
-	}
-	return STM_FAIL;
-}
-
-/**
- * @brief  Schedule sdio transaction if -
- *         a. valid TX buffer is ready at sdio host (STM)
- *         b. valid TX buffer is ready at sdio peripheral (ESP)
- *         c. Dummy transaction is expected from sdio peripheral (ESP)
- * @param  argument: Not used
- * @retval None
- */
-
-static void sdio_recv(void)
-{
-	uint32_t intr_st = 0;
-	stm_ret_t ret = STM_OK;
-
-	/* Get interrupt value */
-	ret = sdio_host_get_intr(&intr_st);
-	if (ret || !intr_st) {
-		hard_delay(30);
-		return;
-	}
-
-	/* Clear interrupt */
-	xSemaphoreTake(transmit_mux, portMAX_DELAY);
-	/* Clear interrupt */
-	ret = sdio_host_clear_intr(intr_st);
-	if (ret) {
-		//printf("clear intr %lx ret %x\n\r", intr_st, ret);
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_STATIC_DATA_FLAGS);
-	}
-	xSemaphoreGive(transmit_mux);
-
-	/* Fetch interrupt to check if new RX packet pending */
-	if ((intr_st & HOST_SLC0_RX_NEW_PACKET_INT_ST)) {
-
-		/* receive the packet */
-		sdio_trans_func[hardware_type]();
-	}
-}
-
-/**
- * @brief  Task for SDIO RX
- * @param  argument: Not used
- * @retval None
- */
-static void rx_task(void const* pvParameters)
-{
-	if (hardware_type == HARDWARE_TYPE_ESP32) {
-		printf("\n\rESP-Hosted for ESP32\n\r");
-	} else {
-		printf("Unsupported slave hardware\n\r");
-		assert(hardware_type != HARDWARE_TYPE_INVALID);
-	}
-
-	for (;;) {
-		sdio_recv();
-	}
-}
-
-/**
- * @brief  RX processing task
- * @param  argument: Not used
- * @retval None
- */
-static void process_rx_task(void const* pvParameters)
-{
-	stm_ret_t ret = STM_OK;
-	interface_buffer_handle_t buf_handle = {0};
-	uint8_t *payload = NULL, *serial_buf = NULL;
-	struct pbuf *buffer = NULL;
-	struct esp_priv_event *event = NULL;
-	struct esp_private *priv = NULL;
-
-	while (1) {
-		ret = xQueueReceive(from_slave_queue, &buf_handle, portMAX_DELAY);
-
-		if (ret != pdTRUE) {
-			continue;
-		}
-
-		/* point to payload */
-		payload = buf_handle.payload;
-		/* process received buffer for all possible interface types */
-		if (buf_handle.if_type == ESP_SERIAL_IF) {
-
-			serial_buf = (uint8_t *)malloc(buf_handle.payload_len);
-			assert(serial_buf);
-
-			memcpy(serial_buf, payload, buf_handle.payload_len);
-
-			/* serial interface path */
-			serial_rx_handler(&buf_handle);
-
-		} else if ((buf_handle.if_type == ESP_STA_IF) ||
-			      (buf_handle.if_type == ESP_AP_IF)) {
-			priv = get_priv(buf_handle.if_type, buf_handle.if_num);
-
-			if (priv) {
-				buffer = (struct pbuf *)malloc(sizeof(struct pbuf));
-				assert(buffer);
-
-				buffer->len = buf_handle.payload_len;
-				buffer->payload = malloc(buf_handle.payload_len);
-				assert(buffer->payload);
-
-				memcpy(buffer->payload, buf_handle.payload,
-						buf_handle.payload_len);
-
-				netdev_rx(priv->netdev, buffer);
-			}
-
-		} else if (buf_handle.if_type == ESP_PRIV_IF) {
-			buffer = (struct pbuf *)malloc(sizeof(struct pbuf));
-			assert(buffer);
-
-			buffer->len = buf_handle.payload_len;
-			buffer->payload = malloc(buf_handle.payload_len);
-			assert(buffer->payload);
-
-			memcpy(buffer->payload, buf_handle.payload,
-					buf_handle.payload_len);
-
-
-			process_priv_communication(buffer);
-			/* priv transaction received */
-			printf("Received INIT event\n\r");
-			event = (struct esp_priv_event *) (payload);
-			if (event->event_type == ESP_PRIV_EVENT_INIT) {
-				/* User can re-use this type of transaction */
-				if (sdio_drv_evt_handler_fp) {
-					sdio_drv_evt_handler_fp(TRANSPORT_ACTIVE);
-				}
-			} else {
-				/* User can re-use this type of transaction */
-			}
-		} else if (buf_handle.if_type == ESP_TEST_IF) {
-#if TEST_RAW_TP
-			update_test_raw_tp_rx_len(buf_handle.payload_len);
-#endif
-		} else {
-			printf("unknown type %d \n\r", buf_handle.if_type);
-		}
-		/* Free buffer handle */
-		/* When buffer offloaded to other module, that module is
-		 * responsible for freeing buffer. In case not offloaded or
-		 * failed to offload, buffer should be freed here
-		 */
-		if (buf_handle.free_buf_handle) {
-			buf_handle.free_buf_handle(buf_handle.priv_buffer_handle);
-		}
-	}
-}
-
-
-/**
- * @brief  Task for SDIO TX
- * @param  argument: Not used
- * @retval None
- */
-static void tx_task(void const* pvParameters)
-{
-	stm_ret_t ret = STM_OK;
-	struct  esp_payload_header *payload_header;
-	uint8_t *sendbuf = NULL, *payload = NULL;
-	interface_buffer_handle_t buf_handle = {0};
-	uint32_t total_len = 0;
-
-	if (hardware_type == HARDWARE_TYPE_ESP32) {
-		printf("\n\rESP-Hosted for ESP32\n\r");
-	} else {
-		printf("Unsupported slave hardware\n\r");
-		assert(hardware_type != HARDWARE_TYPE_INVALID);
-	}
-
-	for (;;) {
-
-		/* Check if higher layers have anything to transmit */
-		if (xQueueReceive(to_slave_queue, &buf_handle, portMAX_DELAY)) {
-
-			if (!buf_handle.payload_len)
-				continue;
-			if (buf_handle.payload_len > MAX_PAYLOAD_SIZE) {
-				printf("Pkt dropped. Size[%u] > Max pkt size for SDIO interface[%u]\n\r",
-						buf_handle.payload_len, MAX_PAYLOAD_SIZE);
-				continue;
-			}
-
-			total_len = buf_handle.payload_len + sizeof(struct esp_payload_header);
-
-			/* Allocate tx buffer */
-			sendbuf = (uint8_t *)malloc(total_len);
-
-			if (!sendbuf) {
-				printf("malloc failed\n\r");
-				goto done;
-			}
-			memset(sendbuf, 0, total_len);
-
-			/* Attach interface header */
-			payload_header = (struct esp_payload_header *) sendbuf;
-			payload  = sendbuf + sizeof(struct esp_payload_header);
-			payload_header->len = htole16(buf_handle.payload_len);
-			payload_header->offset = htole16(sizeof(struct esp_payload_header));
-			payload_header->if_type = buf_handle.if_type;
-			payload_header->if_num = buf_handle.if_num;
-			payload_header->reserved2 = 0;
-
-			/* Copy payload */
-			memcpy(payload, buf_handle.payload, buf_handle.payload_len);
-			/* Send packet */
-			xSemaphoreTake(transmit_mux, portMAX_DELAY);
-			ret = sdio_host_send_packet(sendbuf, total_len);
-			xSemaphoreGive(transmit_mux);
-
-			if (ret == STM_FAIL_TIMEOUT) {
-				printf("send timeout, maybe SDIO slave restart, reinit SDIO slave\n\r");
-			} else if (ret != STM_OK) {
-				printf("sdio send err 0x%x\n\r", ret);
-			}
-			/* De-allocate tx buffer */
-			free(sendbuf);
-			sendbuf = NULL;
-done:
-			/* free allocated buffer */
-			if (buf_handle.free_buf_handle)
-				buf_handle.free_buf_handle(buf_handle.priv_buffer_handle);
-		}
-	}
-}
-
-/** Exported Function **/
-
-/**
-  * @brief  transport initializes
-  * @param  transport_evt_handler_fp - event handler
-  * @retval None
- */
-void transport_init(void(*transport_evt_handler_fp)(uint8_t))
-{
-	stm_ret_t retval = STM_OK;
-
-	/* Check if supported board */
-	set_hardware_type();
-
-	/* register callback */
-	sdio_drv_evt_handler_fp = transport_evt_handler_fp;
-
-	retval = init_netdev();
-	if (retval) {
-		printf("netdev failed to init\n\r");
-		assert(retval==STM_OK);
-	}
-
-	transmit_mux = xSemaphoreCreateMutex();
-	assert(transmit_mux);
-
-	sdio_recv_SemHandle = xSemaphoreCreateBinary();
-	assert(sdio_recv_SemHandle);
-
-	/* Queue - tx */
-	to_slave_queue = xQueueCreate(TO_SLAVE_QUEUE_SIZE,
-			sizeof(interface_buffer_handle_t));
-	assert(to_slave_queue);
-
-	/* Queue - rx */
-	from_slave_queue = xQueueCreate(FROM_SLAVE_QUEUE_SIZE,
-			sizeof(interface_buffer_handle_t));
-	assert(from_slave_queue);
-
-	/* Task - sdio rx task */
-	osThreadDef(rx_thread, rx_task,
-			osPriorityAboveNormal, 0, RX_TASK_STACK_SIZE);
-	rx_task_id = osThreadCreate(osThread(rx_thread), NULL);
-	assert(rx_task_id);
-
-	/* Task - RX processing */
-	osThreadDef(process_rx_thread, process_rx_task,
-			osPriorityAboveNormal, 0, PROCESS_RX_TASK_STACK_SIZE);
-	process_rx_task_id = osThreadCreate(osThread(process_rx_thread), NULL);
-	assert(process_rx_task_id);
-
-	/* Task - sdio tx task */
-	osThreadDef(tx_thread, tx_task,
-			osPriorityAboveNormal, 0, TX_TASK_STACK_SIZE);
-	tx_task_id = osThreadCreate(osThread(tx_thread), NULL);
-	assert(tx_task_id);
-
-	/* IO initialization towards slave */
-	io_init_seq();
-
-}
-
-/**
- * @brief  Send to slave via sdio
- * @param  iface_type - type of interface
- *         iface_num - interface number
- *         wbuffer - tx buffer
- *         wlen - size of wbuffer
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t send_to_slave(uint8_t iface_type, uint8_t iface_num,
-		uint8_t * wbuffer, uint16_t wlen)
-{
-	interface_buffer_handle_t buf_handle = {0};
-
-	if (!wbuffer || !wlen || (wlen > MAX_PAYLOAD_SIZE)) {
-		printf("write fail: buff(%p) 0? OR (0<len(%u)<=max_poss_len(%u))?\n\r",
-				wbuffer, wlen, MAX_PAYLOAD_SIZE);
-		if (wbuffer) {
-			free(wbuffer);
-			wbuffer = NULL;
-		}
-		return STM_FAIL;
-	}
-
-	buf_handle.if_type = iface_type;
-	buf_handle.if_num = iface_num;
-	buf_handle.payload_len = wlen;
-	buf_handle.payload = wbuffer;
-	buf_handle.priv_buffer_handle = wbuffer;
-	buf_handle.free_buf_handle = free;
-
-	if (pdTRUE != xQueueSend(to_slave_queue, &buf_handle, portMAX_DELAY)) {
-		printf("Failed to send buffer to_slave_queue\n\r");
-		if (wbuffer) {
-			free(wbuffer);
-			wbuffer = NULL;
-		}
-		return STM_FAIL;
-	}
-
-	return STM_OK;
-}

+ 0 - 44
host/driver/transport/sdio/sdio_drv.h

@@ -1,44 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/** prevent recursive inclusion **/
-#ifndef __SDIO_DRV_H
-#define __SDIO_DRV_H
-
-/** Includes **/
-#include "common.h"
-
-/** Constants/Macros **/
-
-/** Exported Structures **/
-
-/** Exported variables **/
-
-/** Inline functions **/
-
-/** Exported Functions **/
-
-/**
- * Send to slave via sdio
- * @param  iface_type - type of interface
- *         iface_num - interface number
- *         wbuffer - tx buffer
- *         wlen - size of wbuffer
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t send_to_slave(uint8_t iface_type, uint8_t iface_num,
-		uint8_t * wbuffer, uint16_t wlen);
-
-#endif /* __SDIO_DRV_H */

+ 0 - 439
host/driver/transport/sdio/sdio_host.c

@@ -1,439 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/** Includes **/
-#include "sdio_reg.h"
-#include "sdio_api.h"
-#include "sdio_host.h"
-#include "sdio_ll.h"
-#include "FreeRTOS.h"
-#include "trace.h"
-
-/** Macros/Constants **/
-#define CHECK_SDIO_ERR(ErR) {\
-	if (ErR) { \
-		printf("%s: %u err %u\r\n",__func__,__LINE__,ErR); \
-		return ErR; \
-	} \
-}
-
-/** Global Variable **/
-/* Counter to hold the amount of buffers already sent to sdio slave */
-static uint32_t sdio_esp_tx_bytes = 0;
-
-/* Counter to hold the amount of bytes already received from sdio slave */
-static uint32_t sdio_esp_rx_bytes   = 0;
-
-/** Functions Declaration **/
-
-/** SDIO slave initialization  **/
-static stm_ret_t esp_slave_init_io(void);
-static uint32_t esp_sdio_host_get_buffer_size(void);
-static stm_ret_t esp_sdio_slave_get_rx_data_size(uint32_t* rx_size);
-
-/** Functions Defination **/
-
-/**
- * @brief  SDIO slave initialization
- * @param  None
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-static stm_ret_t esp_slave_init_io(void)
-{
-	uint8_t ioe = 0, ior = 0, ie = 0;
-	uint8_t bsl = 0, bsh = 0;
-	uint8_t func1_bsl = 0, func1_bsh = 0;
-	uint8_t func2_bsl = 0, func2_bsh = 0;
-
-	CHECK_SDIO_ERR(sdio_driver_read_byte(SDIO_FUNC_0, SD_IO_CCCR_FN_ENABLE, &ioe));
-#if DEBUG_TRANSPORT
-	//printf("%s %u IOE: 0x%02x\n\r", __func__, __LINE__,ioe);
-#endif
-
-	CHECK_SDIO_ERR(sdio_driver_read_byte(SDIO_FUNC_0, SD_IO_CCCR_FN_READY, &ior));
-#if DEBUG_TRANSPORT
-	//printf("%s %u IOR: 0x%02x\n\r", __func__, __LINE__, ior);
-#endif
-
-	// enable function 1
-	ioe = 6;
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, SD_IO_CCCR_FN_ENABLE, ioe, &ioe));
-#if DEBUG_TRANSPORT
-	//printf("%s %u IOE: 0x%02x\n\r", __func__,__LINE__,ioe);
-#endif
-
-	ior = 6;
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, SD_IO_CCCR_FN_READY, ioe, &ior));
-#if DEBUG_TRANSPORT
-//	printf("%s %u IOE: 0x%02x\n\r", __func__,__LINE__,ior);
-#endif
-
-	// get interrupt status
-	CHECK_SDIO_ERR(sdio_driver_read_byte(SDIO_FUNC_0, SD_IO_CCCR_INT_ENABLE, &ie));
-#if DEBUG_TRANSPORT
-//	printf("IE: 0x%02x\n\r", ie);
-#endif
-
-	// enable interrupts for function 1&2 and master enable
-	ie = 7;
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, SD_IO_CCCR_INT_ENABLE, ie, &ie));
-#if DEBUG_TRANSPORT
-//	printf("%s: %u IE: 0x%02x\n\r", __func__,__LINE__,ie);
-#endif
-
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, SD_IO_CCCR_BLKSIZEL, bsl, &bsl));
-#if DEBUG_TRANSPORT
-//	printf("%s:%u Function 0 BSL: 0x%02x\n\r", __func__,__LINE__,bsl);
-#endif
-
-	bsh = 2;
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, SD_IO_CCCR_BLKSIZEH, bsh, &bsh));
-#if DEBUG_TRANSPORT
-//	printf("%s %u Function 0 BSH: 0x%02x\n\r", __func__,__LINE__,bsh);
-#endif
-
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, 0x110, func1_bsl, &func1_bsl));
-#if DEBUG_TRANSPORT
-//	printf("%s %u Function 1 BSL: 0x%02x\n\r",  __func__,__LINE__,func1_bsl);
-#endif
-
-	func1_bsh = 2;         // Set block size 512 (0x200)
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, 0x111, func1_bsh, &func1_bsh));
-#if DEBUG_TRANSPORT
-//	printf("%s %u Function 1 BSH: 0x%02x\n\r", __func__,__LINE__, func1_bsh);
-#endif
-
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, 0x210, func2_bsl, &func2_bsl));
-#if DEBUG_TRANSPORT
-//	printf("%s %u Function 2 BSL: 0x%02x\n\r", __func__,__LINE__, func2_bsl);
-#endif
-
-	func2_bsh = 2;
-	CHECK_SDIO_ERR(sdio_driver_write_byte(SDIO_FUNC_0, 0x210, func2_bsh, &func2_bsh));
-#if DEBUG_TRANSPORT
-//	printf("%s %u Function 2 BSH: 0x%02x\n\r", __func__,__LINE__,func2_bsh);
-	printf("Slave Initialization completed\n\r");
-#endif
-	return STM_OK;
-}
-
-/**
- * @brief  host use this to initialize the slave as well as SDIO register
- * @param  None
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_init(void)
-{
-	CHECK_SDIO_ERR(sdio_driver_init());
-
-	CHECK_SDIO_ERR(esp_slave_init_io());
-
-	return STM_OK;
-}
-
-/** receive functions **/
-/**
- * @brief  HOST receive data
- * @param  rx_size - read data size
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-static stm_ret_t esp_sdio_slave_get_rx_data_size(uint32_t* rx_size)
-{
-	uint32_t len = 0, temp = 0;
-	stm_ret_t err = sdio_driver_read_bytes(SDIO_FUNC_1,
-			SDIO_REG(ESP_SLAVE_PACKET_LEN_REG), &len, 4, 0);
-	if (err) {
-		printf("Err while reading ESP_SLAVE_PACKET_LEN_REG\n\r");
-		return err;
-	}
-	len &= ESP_SLAVE_LEN_MASK;
-	if (len >= sdio_esp_rx_bytes) {
-		len = (len + ESP_RX_BYTE_MAX - sdio_esp_rx_bytes)%ESP_RX_BYTE_MAX;
-	} else {
-		temp = ESP_RX_BYTE_MAX - sdio_esp_rx_bytes;
-		len = temp + len;
-		if (len > MAX_SDIO_BUFFER_SIZE) {
-			printf("%s: Len from slave[%lu] exceeds max [%d]\n",
-					__func__, len, MAX_SDIO_BUFFER_SIZE);
-		}
-	}
-#if 0
-       /* length is expected to be in multiple of ESP_BLOCK_SIZE */
-       if(len&(ESP_BLOCK_SIZE-1))
-               return STM_FAIL;
-#endif
-
-	if (rx_size)
-		*rx_size = len;
-	return STM_OK;
-}
-
-/**
- * @brief  Get a packet from SDIO slave
- * @param  [out] out_data - Data output address
- *         size - The size of the output buffer,
- *                if the buffer is smaller than
- *                the size of data to receive from slave,
- *                the driver returns ESP_ERR_NOT_FINISHED
- *         [out] out_length - Output of length the data received from slave
- *         wait_ms - Time to wait before timeout, in ms
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_get_packet(void* out_data, size_t size,
-		size_t* out_length, uint32_t wait_ms)
-{
-	stm_ret_t err = STM_OK;
-	uint32_t len = 0, wait_time = 0, len_remain = 0;
-	uint8_t* start_ptr = NULL;
-	int len_to_send = 0, block_n = 0;
-
-	if (size <= 0) {
-		printf("Invalid size:%d\n\r", size);
-		return STM_FAIL_INVALID_ARG;
-	}
-
-	for (;;) {
-		err = esp_sdio_slave_get_rx_data_size(&len);
-
-		if (err == STM_OK && len > 0) {
-#if DEBUG_TRANSPORT
-		//	printf("Expected length to be read %lu\n\n",len);
-#endif
-			break;
-		}
-
-		/* If no error and no data, retry */
-		wait_time++;
-
-		if (wait_time >= wait_ms) {
-			return STM_FAIL_TIMEOUT;
-		}
-
-		hard_delay(1);
-	}
-
-	if (len > size) {
-		printf("Pkt size to be read[%lu] > max sdio size supported[%u]\n\r",len, size);
-		return STM_OK;
-	}
-
-	len_remain = len;
-	start_ptr = (uint8_t*)out_data;
-
-	do {
-		/* currently driver supports only block size of 512 */
-
-		block_n = len_remain / ESP_BLOCK_SIZE;
-
-		if (block_n != 0) {
-			len_to_send = ESP_BLOCK_SIZE;
-#if DEBUG_TRANSPORT
-		//	printf("block_n %u, len-to_send %lu\n\r",block_n,len_to_send);
-#endif
-
-			err = sdio_driver_read_blocks(SDIO_FUNC_1,
-					ESP_SLAVE_CMD53_END_ADDR - len_remain,
-					start_ptr, len_to_send, block_n);
-		} else {
-			len_to_send = len_remain;
-			/* though the driver supports to split packet of unaligned size into length
-			 * of 4x and 1~3, we still get aligned size of data to get higher
-			 * efficiency. The length is determined by the SDIO address, and the
-			 * remaining will be ignored by the slave hardware
-			 */
-			err = sdio_driver_read_bytes(SDIO_FUNC_1,
-					ESP_SLAVE_CMD53_END_ADDR - len_remain, start_ptr,
-					(len_to_send + 3) & (~3), block_n);
-		}
-
-		if (err) {
-#if DEBUG_TRANSPORT
-			printf("Err from read bytes %x\n\r",err);
-#endif
-			return err;
-		}
-
-		start_ptr += len_to_send;
-		len_remain -= len_to_send;
-	} while (len_remain != 0);
-
-	*out_length = len;
-	sdio_esp_rx_bytes += len;
-	if (sdio_esp_rx_bytes >= ESP_RX_BYTE_MAX) {
-		sdio_esp_rx_bytes -= ESP_RX_BYTE_MAX;
-	}
-
-	return STM_OK;
-}
-
-/**
- * @brief  Clear interrupt bits of SDIO slave
- * @param  intr_mask - Mask of interrupt bits to clear
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_clear_intr(uint32_t intr_mask)
-{
-	return sdio_driver_write_bytes(SDIO_FUNC_1,
-			SDIO_REG(ESP_SLAVE_INT_CLR_REG), (uint8_t*)&intr_mask, 4);
-}
-
-/**
- * @brief  Get interrupt bits of SDIO slave
- *
- * @param  intr_st - Output of the masked interrupt bits
- *                   set to NULL if only raw bits are read
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_get_intr(uint32_t* intr_st)
-{
-	stm_ret_t ret = STM_OK;
-
-	if (intr_st == NULL) {
-		return STM_FAIL_INVALID_ARG;
-	}
-
-	if (intr_st != NULL) {
-		ret = sdio_driver_read_bytes(SDIO_FUNC_1,
-				SDIO_REG(ESP_SLAVE_INT_ST_REG), (uint8_t*)intr_st, 4, 0);
-		if (ret) {
-			return ret;
-		}
-	}
-
-	return STM_OK;
-}
-
-/** send functions **/
-
-/**
- * @brief  Get available buffer to write to slave before transmit
- * @param  None
- * @retval
- *         Number of buffers available at slave
- */
-static uint32_t esp_sdio_host_get_buffer_size(void)
-{
-	stm_ret_t ret = STM_OK;
-	uint32_t len = 0;
-
-	ret = sdio_driver_read_bytes(SDIO_FUNC_1,
-			SDIO_REG(ESP_SLAVE_TOKEN_RDATA), &len, 4, 0);
-	if (ret) {
-		printf("Read length error, ret=%d\n\r", ret);
-		return 0;
-	}
-
-	len = (len >> ESP_SDIO_SEND_OFFSET) & ESP_TX_BUFFER_MASK;
-	len = (len + ESP_TX_BUFFER_MAX - sdio_esp_tx_bytes) % ESP_TX_BUFFER_MAX;
-#if DEBUG_TRANSPORT
-	/*printf("%s len %lu \n\r", __func__, len);*/
-#endif
-	return len;
-}
-
-/**
- * @brief  Send a interrupt signal to the SDIO slave
- * @param  intr_no - interrupt number, now only support 0
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_send_intr(uint8_t intr_no)
-{
-	uint32_t intr_mask = 0;
-	if (intr_no >= MAX_SDIO_SCRATCH_REG_SUPPORTED) {
-		printf(" Error interrupt number\n\r");
-		return STM_FAIL_INVALID_ARG;
-	}
-
-	intr_mask = 0x1 << (intr_no + ESP_SDIO_CONF_OFFSET);
-	return STM32WriteReg(SDIO_FUNC_1, SDIO_REG(ESP_SLAVE_SCRATCH_REG_7), intr_mask);
-}
-
-/**
- * @brief Send a packet to the SDIO slave
- * @param start - Start address of the packet to send
- *        length - Length of data to send, if the packet is over-size,
- *                 the it will be divided into blocks and hold into different
- *                 buffers automatically
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_send_packet(const void* start, uint32_t length)
-{
-	stm_ret_t err;
-	uint8_t* start_ptr = (uint8_t*)start;
-	uint32_t len_remain = length, num = 0, cnt = 300;
-//	printf("length received %d %lu \n\r", length, len_remain);
-
-	int buffer_used, block_n = 0,len_to_send = 0;
-
-	buffer_used = (length + ESP_BLOCK_SIZE - 1) / ESP_BLOCK_SIZE;
-
-#if 0
-	while (1) {
-		num = esp_sdio_host_get_buffer_size();
-#if DEBUG_TRANSPORT
-		//printf("Buffer size %lu can be send, input len: %u, len_remain: %lu\n\r", num, length, len_remain);
-#endif
-
-		if (num * ESP_BLOCK_SIZE < length) {
-			if (!--cnt) {
-				printf("buff not enough: curr[%lu], exp[%d]\n\r", num, buffer_used);
-				return STM_FAIL_TIMEOUT;
-			} else {
-				printf("buff not enough: curr[%lu], exp[%d], retry..\n\r", num, buffer_used);
-			}
-
-			hard_delay(1);
-		}  else {
-			break;
-		}
-	}
-
-#endif
-	do {
-		/* Though the driver supports to split packet of unaligned size into
-		 * length of 4x and 1~3, we still send aligned size of data to get
-		 * higher effeciency. The length is determined by the SDIO address, and
-		 * the remainning will be discard by the slave hardware
-		 */
-		block_n = len_remain / ESP_BLOCK_SIZE;
-
-		if (block_n) {
-			len_to_send = block_n * ESP_BLOCK_SIZE;
-			err = sdio_driver_write_blocks(SDIO_FUNC_1,
-					ESP_SLAVE_CMD53_END_ADDR - len_remain,
-					start_ptr, len_to_send);
-		} else {
-			len_to_send = len_remain;
-			err = sdio_driver_write_bytes(SDIO_FUNC_1,
-					ESP_SLAVE_CMD53_END_ADDR - len_remain,
-					start_ptr, (len_to_send + 3) & (~3));
-		}
-
-		if (err) {
-			return err;
-		}
-
-		start_ptr += len_to_send;
-		len_remain -= len_to_send;
-	} while (len_remain);
-
-	if (sdio_esp_tx_bytes >= ESP_TX_BUFFER_MAX) {
-		sdio_esp_tx_bytes -= ESP_TX_BUFFER_MAX;
-	}
-
-	sdio_esp_tx_bytes += buffer_used;
-	return STM_OK;
-}

+ 0 - 97
host/driver/transport/sdio/sdio_host.h

@@ -1,97 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2016-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/** prevent recursive inclusion **/
-#ifndef __SDIO_HOST_H
-#define __SDIO_HOST_H
-
-/** Includes **/
-
-/** constants/macros **/
-#define MAX_SDIO_SCRATCH_REG_SUPPORTED  8
-
-/** Exported Structures **/
-
-/** Exported variables **/
-
-/** Inline functions **/
-
-/** Exported Functions **/
-
-/**
- * Init SDIO host and slave
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_init(void);
-
-/**
- * Block until an SDIO interrupt is received
- *
- * Slave uses D1 line to signal interrupt condition to the host
- * This function can be used to wait for the interrupt
- *
- * @param  timeout - time to wait for the interrupt, in ms
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_wait_int(uint32_t timeout);
-
-/** Get interrupt bits of SDIO slave
- *
- * @param  intr_st - Output of the masked interrupt bits. set to NULL if only raw bits are read
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_get_intr(uint32_t *intr_st);
-
-/** Clear interrupt bits of SDIO slave. All the bits set in the mask will be cleared, while other bits will stay the same
- *
- * @param  intr_mask - Mask of interrupt bits to clear
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_clear_intr(uint32_t intr_mask);
-
-/** Get a packet from SDIO slave
- *
- * @param  [out] out_data - Data output address
- *         size - The size of the output buffer, if the buffer is smaller than
- *              the size of data to receive from slave, the driver returns ``ESP_ERR_NOT_FINISHED``
- *         [out] out_length - Output of length the data actually received from slave
- *         wait_ms - Time to wait before timeout, in ms
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_get_packet(void* out_data, size_t size, size_t *out_length, uint32_t wait_ms);
-
-/** Send a packet to the SDIO slave
- *
- * @param  start - Start address of the packet to send
- *         length - Length of data to send, if the packet is over-size,
- *              the it will be divided into blocks and hold into different buffers automatically
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_send_packet(const void* start, uint32_t length);
-
-/** Send a interrupt signal to the SDIO slave
- *
- * @param  intr_no - interrupt number, now only support 0
- *
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-stm_ret_t sdio_host_send_intr(uint8_t intr_no);
-
-#endif /* __SDIO_HOST_H */

+ 0 - 981
host/driver/transport/sdio/sdio_ll.c

@@ -1,981 +0,0 @@
-/**
-  ******************************************************************************
-  * File Name          : sdio_ll.c
-  * Description        : This file provides code for the configuration
-  *                      of the SDIO instances.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under Ultimate Liberty license
-  * SLA0044, the "License"; You may not use this file except in compliance with
-  * the License. You may obtain a copy of the License at:
-  *                             www.st.com/SLA0044
-  *
-  ******************************************************************************
-  */
-
-//TODO: DMA is not working yet
-#define WIFI_USEDMA                     (0)
-
-/** Includes **/
-#include "sdio_reg.h"
-#include "sdio_ll.h"
-#include "trace.h"
-#include "FreeRTOS.h"
-#include "semphr.h"
-#include "gpio.h"
-
-#if WIFI_USEDMA
-#include "stm32f4xx_ll_dma.h"
-#endif
-
-
-/** Constants/Macros **/
-#define SDMMC_R4_READYBIT               BIT(31)
-#define SDMMC_R4_ERRORBITS              ((uint32_t)0x7F000000U)
-#define SDMMC_R4_NOERROR                ((uint32_t)0x20000000U)
-#define SDMMC_R4_OCRBITS                ((uint32_t)0x00FFFFFFU)
-
-#define ESP_DATA_MIN_ADDRESS            (0x1e800)
-
-#define CMD52_WRITE                     BIT(31)
-#define CMD52_READAFTERWRITE            BIT(27)
-#define CMD53_WRITE                     BIT(31)
-#define CMD53_BLOCKMODE                 BIT(27)
-#define CMD53_INCREMENTING              BIT(26)
-#define CMD53_TIMEOUT                   (10000000)
-#define CCCR_BUS_WIDTH_4                (2<<0)
-
-#define SDIO_IO_RESET_FUNC              (6)
-#define SDIO_IO_RESET_VAL               (0x8)
-#define SDIO_CMD_SEND_RETRY             (3)
-
-#define SDIO_CLK_DIV			(238)
-
-/** Macros/Constants **/
-#define CHECK_SDIO_PRINT_ERR(ErR) {\
-	if (ErR) { \
-		printf("%s: %u err %lu\r\n",__func__,__LINE__,ErR); \
-	} \
-}
-
-/** Global Variables **/
-static SDIO_CmdInitTypeDef sdio_cmd = {0};
-static SemaphoreHandle_t semahandle = {0};
-static SD_HandleTypeDef hsd = {0};
-
-/** External variables **/
-extern SemaphoreHandle_t sdio_recv_SemHandle;
-
-
-/** function definition **/
-
-/** Local Functions **/
-
-/**
- * @brief Calculates clock divider to be used from expected clock
- * frequency and hardware reference frequency
- *
- * @param  freq - Input frequency for which divider to be calculated
- *         preal - [OUT] Frequency to be set after calculating divider
- * @retval Divider value
- */
-static uint8_t CalcClockDivider(uint32_t freq, uint32_t *preal)
-{
-	int divider;
-	uint32_t sdioclk;
-
-	sdioclk = HAL_RCC_GetPCLK2Freq();
-	if (freq == 0)
-		freq = 1;
-
-	divider = sdioclk / freq - 2;
-	if (sdioclk % freq != 0)
-		divider++;
-	if (divider < 0)
-		divider = 0;
-	else if (divider > 255)
-		divider = 255;
-
-	if (preal) {
-		*preal = sdioclk / (divider + 2);
-#if DEBUG_TRANSPORT
-		printf("sdioclk=%luHz\n\rreq_freq=%luHz\n\rout_freq=%luHz\n\rdiv=%d\n\r",
-				sdioclk, freq, *preal, divider);
-	} else {
-		printf("sdioclk=%luHz\n\rreq_freq=%luHz\n\rdiv=%d\n\r",
-				sdioclk, freq, divider);
-#endif
-	}
-	return divider & 0xff;
-}
-
-/**
- * @brief Send CMD52
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         data - data byte to be read/write
- *         flag - SDIO CMD52 flags
- * @retval None
- */
-static void SendCMD52(uint8_t func, uint32_t addr, uint8_t data, uint32_t flags)
-{
-	sdio_cmd.Argument = (func << 28) | (addr << 9) | data | flags;
-	sdio_cmd.CmdIndex = 52;
-	sdio_cmd.CPSM = SDIO_CPSM_ENABLE;
-	sdio_cmd.Response = SDIO_RESPONSE_SHORT;
-	sdio_cmd.WaitForInterrupt = SDIO_WAIT_NO;
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-}
-
-/**
- * @brief Send CMD53
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         count - [IN] number of bytes/blocks to be set to read/write
- *         flag - SDIO CMD53 flags
- * @retval None
- */
-static void SendCMD53(uint8_t func, uint32_t addr, uint16_t count, uint32_t flags)
-{
-	sdio_cmd.Argument = (func << 28) | (addr << 9) | (count & 0x1ff) | flags;
-	sdio_cmd.CmdIndex = 53;
-	sdio_cmd.CPSM = SDIO_CPSM_ENABLE;
-	sdio_cmd.Response = SDIO_RESPONSE_SHORT;
-	sdio_cmd.WaitForInterrupt = SDIO_WAIT_NO;
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-}
-
-/**
- * @brief Initialize GPSIO in SDIO AF
- *        Please check sdio_reg.h for pin definitions
- *
- * @param  None
- * @retval None
- */
-static void SdioGpioInit(void)
-{
-	GPIO_InitTypeDef GPIO_InitStruct = {0};
-
-	__HAL_RCC_SDIO_GPIO_ENABLE();
-
-	GPIO_InitStruct.Pin = USR_SDIO_D0_Pin_Pin | USR_SDIO_D1_Pin_Pin | \
-						  USR_SDIO_D2_Pin_Pin|USR_SDIO_D3_Pin_Pin;
-	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-	GPIO_InitStruct.Pull = GPIO_PULLUP;
-	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-	GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
-	HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
-	GPIO_InitStruct.Pin = USR_SDIO_CLK_Pin_Pin;
-	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-	GPIO_InitStruct.Pull = GPIO_NOPULL;
-	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-	GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
-	HAL_GPIO_Init(USR_SDIO_CLK_Pin_GPIO_Port, &GPIO_InitStruct);
-
-	GPIO_InitStruct.Pin = USR_SDIO_CMD_Pin_Pin;
-	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-	GPIO_InitStruct.Pull = GPIO_PULLUP;
-	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-	GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
-	HAL_GPIO_Init(USR_SDIO_CMD_Pin_GPIO_Port, &GPIO_InitStruct);
-}
-
-/**
- * @brief This function checks if data read/written is failed and for what cause
- *
- * @param  msg_title - function name, who is checking
- *         line - line number, who is checking
- * @retval 0 on success, number of err count otherwise
- */
-static int CheckError(const char *msg_title, uint32_t line)
-{
-	int err = 0;
-
-	if ((__SDIO_GET_FLAG(SDIO, SDIO_FLAG_CCRCFAIL) != RESET) &&
-			(sdio_cmd.CmdIndex != 5))
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_CCRCFAIL);
-		err++;
-		printf("%s:%lu CMD%lu CRC failed!\n\r", msg_title, line, sdio_cmd.CmdIndex);
-	}
-	if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_CTIMEOUT) != RESET)
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_CTIMEOUT);
-		err++;
-#if !DEBUG_TRANSPORT
-		if(sdio_cmd.CmdIndex != 5)
-#endif
-			printf("%s:%lu CMD%lu timeout!\n\r", msg_title, line, sdio_cmd.CmdIndex);
-	}
-	if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_DCRCFAIL) != RESET)
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_DCRCFAIL);
-		err++;
-		printf("%s:%lu data CRC failed!\n\r", msg_title, line);
-	}
-	if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_DTIMEOUT) != RESET)
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_DTIMEOUT);
-		err++;
-		printf("%s:%lu data timeout!\n\r", msg_title, line);
-	}
-#if defined(SDIO_STA_STBITERR)
-	if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_STBITERR) != RESET)
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_STBITERR);
-		err++;
-		printf("%s:%lu start bit error!\n\r", msg_title, line);
-	}
-#endif
-	if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_TXUNDERR) != RESET)
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_TXUNDERR);
-		err++;
-		printf("%s:%lu data underrun!\n\r", msg_title, line);
-	}
-	if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_RXOVERR) != RESET)
-	{
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_RXOVERR);
-		err++;
-		printf("%s:%lu data overrun!\n\r", msg_title, line);
-	}
-#if WIFI_USEDMA
-	if (LL_DMA_IsActiveFlag_TE4(DMA2))
-	{
-		LL_DMA_ClearFlag_TE4(DMA2);
-		err++;
-		printf("%s:%lu DMA transfer error!\n\r", msg_title, line);
-	}
-#endif
-	return err;
-}
-
-/**
- * @brief This function checks if response recieved
- * It retries till SDIO_CMD_SEND_RETRY times to send command for getting response
- *
- * @param  SDIOx - SDIO peripheral
- * @retval 0 on success
- */
-static int WaitForResponse(const char *msg_title, uint32_t line)
-{
-	uint8_t cmd_retry = 0;
-	int err = 0;
-	/* TODO: Give breathing space for command response
-	 * Although, this is trade-off for higher response time
-	 * Need to get proper fix for this
-	 * */
-	hard_delay(1);
-
-	do {
-		if (cmd_retry == SDIO_CMD_SEND_RETRY)
-			break;
-
-		if (cmd_retry != 0) {
-			/* re-send */
-			SDIO_SendCommand(SDIO, &sdio_cmd);
-		}
-		cmd_retry++;
-
-		/* Wait till command send completed */
-		while (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_CMDACT) != RESET);
-		err = CheckError(msg_title, line);
-
-		/* Check untill no response condition */
-	} while (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_CMDREND) == RESET);
-	__SDIO_CLEAR_FLAG(SDIO, SDIO_STATIC_CMD_FLAGS);
-
-	return err;
-}
-
-
-/**
- * @brief This function checks if command is sent successfully or not
- *
- * @param  SDIOx - SDIO peripheral
- * @retval 0 on success
- */
-static uint32_t SDMMC_GetCmdError(SDIO_TypeDef *SDIOx)
-{
-	/* 8 is the number of required instructions cycles for the below loop statement
-	 * The SDIO_CMDTIMEOUT is expressed in ms
-	 */
-	register uint32_t count = SDIO_CMDTIMEOUT * (SystemCoreClock / 8U /1000U);
-
-	do
-	{
-		if (count-- == 0U)
-		{
-			return SDMMC_ERROR_TIMEOUT;
-		}
-
-	}while(!__SDIO_GET_FLAG(SDIOx, SDIO_FLAG_CMDSENT));
-
-	/* Clear all the static flags */
-	__SDIO_CLEAR_FLAG(SDIOx, SDIO_STATIC_CMD_FLAGS);
-
-	return SDMMC_ERROR_NONE;
-}
-
-/**
- * @brief Low level function to init SDIO peripheral
- *
- * This function may need to be ported if the host/slave hardware is changed
- *
- * @param  sd_init - structure holds the SDIO parameters to initialize slave
- * @retval None
- */
-static void port_MX_SDIO_SD_Init(SD_InitTypeDef sd_init)
-{
-	hsd.Instance = SDIO;
-	hsd.Init.ClockEdge = sd_init.ClockEdge;
-	hsd.Init.ClockBypass = sd_init.ClockBypass;
-	hsd.Init.ClockPowerSave = sd_init.ClockPowerSave;
-	hsd.Init.BusWide = sd_init.BusWide;
-	hsd.Init.HardwareFlowControl = sd_init.HardwareFlowControl;
-	hsd.Init.ClockDiv = sd_init.ClockDiv;
-	HAL_SD_Init(&hsd);
-}
-
-/**
- * @brief Low level function to init SDIO peripheral
- *
- * This function may need to be ported if the host/slave hardware is changed
- *
- * @param  init_para - structure holds the SDIO parameters to initialize slave
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-static stm_ret_t SdioDriverInit(SD_InitTypeDef init_para)
-{
-	SD_InitTypeDef Init = {0};
-	uint16_t sdio_rca;
-	uint8_t bus_width;
-	__HAL_RCC_SDIO_CLK_ENABLE();
-#if WIFI_USEDMA
-	__HAL_RCC_DMA2_CLK_ENABLE();
-#endif
-
-	__SDIO_ENABLE_IT(SDIO, SDIO_IT_SDIOIT);
-
-	/* Default SDIO peripheral config for SD card initialization */
-	/* Keep clock lower (<400k) for initial command sequence */
-	Init.ClockDiv = SDIO_CLK_DIV;
-
-	Init.BusWide = init_para.BusWide;
-
-	/* Initialize SDIO peripheral interface with default config */
-	port_MX_SDIO_SD_Init(Init);
-
-	/* SDIO interrupt Init */
-	HAL_NVIC_SetPriority(SDIO_IRQn, 5, 0);
-	HAL_NVIC_EnableIRQ(SDIO_IRQn);
-
-	/* Enable SDIO */
-	__SDIO_OPERATION_ENABLE(SDIO);
-
-#if WIFI_USEDMA
-	/* Enable DMA */
-	__SDIO_DMA_ENABLE(SDIO);
-#endif
-
-	/** SDIO IO specific slave initialization command sequence **/
-
-	/* SDIO slave reset - I/O reset: CCCR I/O Abort register bit 3 */
-	SendCMD52(SDIO_FUNC_0, SDIO_IO_RESET_FUNC, SDIO_IO_RESET_VAL, CMD52_WRITE);
-
-	/* Command 0 - SD reset */
-	sdio_cmd.Argument         = 0U;
-	sdio_cmd.CmdIndex         = 0;
-	sdio_cmd.Response         = SDIO_RESPONSE_NO;
-	sdio_cmd.WaitForInterrupt = SDIO_WAIT_NO;
-	sdio_cmd.CPSM             = SDIO_CPSM_ENABLE;
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-	CHECK_SDIO_PRINT_ERR(SDMMC_GetCmdError(SDIO));
-
-	/* Command 5 - IO_SEND_OP_COND */
-	sdio_cmd.Argument = 0U;
-	sdio_cmd.CmdIndex = 5;
-	sdio_cmd.Response = SDIO_RESPONSE_SHORT;
-	sdio_cmd.WaitForInterrupt = SDIO_WAIT_NO;
-	sdio_cmd.CPSM = SDIO_CPSM_ENABLE;
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-	WaitForResponse(__FUNCTION__,__LINE__);
-	HAL_Delay(20);
-
-	/* Command 5 - Set VDD Voltage Window: 3.2~3.4V */
-//	sdio_cmd.Argument = 0x200000;
-	sdio_cmd.Argument = 0x00ff8000;
-
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-	WaitForResponse(__FUNCTION__,__LINE__);
-	SDIO_GetResponse(SDIO, SDIO_RESP1);
-
-	/* Command 3 - Get WiFi address (CMD3: SEND_RELATIVE_ADDR,
-	 * Ask the card to publish a new relative address (RCA)) */
-	sdio_cmd.Argument = 0;
-	sdio_cmd.CmdIndex = 3;
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-	WaitForResponse(__FUNCTION__,__LINE__);
-	sdio_rca = SDIO_GetResponse(SDIO, SDIO_RESP1) >> 16;
-#if DEBUG_TRANSPORT
-	printf("Relative Card Address: 0x%04x\n\r", sdio_rca);
-#endif
-
-	/* Command 7 - Select WiFi (SELECT/DESELECT_CARD) */
-	//sdio_cmd.Argument = sdio_rca << 16;	
-	sdio_cmd.Argument = 0x00010000;
-	sdio_cmd.CmdIndex = 7;
-	SDIO_SendCommand(SDIO, &sdio_cmd);
-	WaitForResponse(__FUNCTION__,__LINE__);
-#if DEBUG_TRANSPORT
-	printf("Card selected! RESP1_%08lx\n\r", SDIO_GetResponse(SDIO, SDIO_RESP1));
-#endif
-
-	/* Above sequence is needed while communicating to IO only device.
-	 * In case of failure/timeouts despite of maximum retry, IO would be unusable
-	 */
-
-	SDIO_Init(SDIO, init_para);
-
-	bus_width = STM32ReadReg(SDIO_FUNC_0, SD_IO_CCCR_BUS_WIDTH);
-
-	if(init_para.BusWide == SDIO_BUS_WIDE_4B){
-#if DEBUG_TRANSPORT
-		printf("Use 4bit bus width\n\r");
-#endif
-		bus_width |= CCCR_BUS_WIDTH_4;
-	}else if(init_para.BusWide == SDIO_BUS_WIDE_1B){
-#if DEBUG_TRANSPORT
-		printf("Use 1bit bus width\n\r");
-#endif
-		bus_width &= ~CCCR_BUS_WIDTH_4;
-	} else {
-		printf("Illegal bus width\n\r");
-		return STM_FAIL;
-	}
-	//STM32WriteReg(SDIO_FUNC_0, SD_IO_CCCR_BUS_WIDTH, bus_width);
-	STM32WriteReg(SDIO_FUNC_0, SD_IO_CCCR_BUS_WIDTH, 0x02);
-	STM32WriteReg(SDIO_FUNC_0, 0x02, 0x02);
-	STM32WriteReg(SDIO_FUNC_0, 0x10, 0x00);
-	STM32WriteReg(SDIO_FUNC_0, 0x11, 0x02);
-	STM32WriteReg(SDIO_FUNC_0, 0x110, 0x00);
-	STM32WriteReg(SDIO_FUNC_0, 0x111, 0x02);
-
-	return STM_OK;
-}
-
-/**
- * @brief Calculate block number for expected number of bytes
- *
- * @param  func - SDIO function
- *         psize - [IN] number of bytes
- *         write_flag - In case called from Write functions
- * @retval Number of blocks
- */
-static uint16_t GetBlockNum(uint8_t func, uint32_t *psize,
-		uint8_t write_flag, SDIO_DataInitTypeDef *sdio_data)
-
-{
-	uint16_t block_num = 0;
-	uint16_t blocksize = ESP_BLOCK_SIZE;
-
-	if(*psize == 4) {
-
-		sdio_data->DataBlockSize = SDIO_DATABLOCK_SIZE_4B;
-
-	} else if (*psize >= blocksize|| write_flag) {
-
-		sdio_data->DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
-
-		block_num = *psize / blocksize;
-		if (*psize % blocksize != 0)
-			block_num++;
-		*psize = block_num * blocksize;
-
-	} else {
-
-		sdio_data->DataBlockSize = SDIO_DATABLOCK_SIZE_1B;
-		*psize = (*psize + 3) & ~3;
-	}
-
-	return block_num;
-}
-
-/** Exported Function **/
-
-/**
- * @brief Intended Empty function
- *
- * This function will be automatically invoked by default
- * We want to delay the initialization and do it manually
- *
- * @param  None
- * @retval None
- */
-void MX_SDIO_SD_Init(void)
-{
-	/* This function is set blank intentionally.
-	 * IOC file import generates main.c, which invokes
-	 * this function automatically.
-	 * As ST driver does not correctly initialize I/O part,
-	 * Init sequence and SDIO initialization is done manually.
-	 * While porting to another hardware,
-	 * may want to remove this definition to avoid duplicate
-	 */
-}
-
-/**
- * @brief Write data of exp size with expected SDIO register address and SDIO function
- *
- * This function checks if slave has sufficient buffer to write the data
- * If yes, it further writes data to specified register.
- * Note : data greater than 4 bytes is expected to be aligned of ESP_BLOCK_SIZE
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         data - Buffer to written
- *         size - Buffer size in bytes
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-int STM32WriteData(uint8_t func, uint32_t addr, const void *data, uint32_t len)
-{
-	int i, err = 0;
-	uint32_t size = len;
-	uint16_t block_num = 0;
-	static SDIO_DataInitTypeDef sdio_data = {0};
-	uint32_t cmd53_flags = CMD53_WRITE;
-
-	/* Data timeout is kept sufficiently high
-	 * Depending upon use case, this could be optimized lower
-	 * */
-	sdio_data.DataTimeOut = SDMMC_DATATIMEOUT;
-
-#if WIFI_USEDMA
-	LL_DMA_InitTypeDef dma;
-#else
-	const uint32_t *p = data;
-#endif
-
-	if ((uintptr_t)data & 3)
-	{
-		printf("%s: data must be 4-byte aligned!\n\r", __FUNCTION__);
-		return STM_FAIL_ALIGNMENT;
-	}
-	if (size == 0)
-	{
-		printf("%s: size cannot be 0!\n\r", __FUNCTION__);
-		return STM_FAIL_INVALID_ARG;
-	}
-	xSemaphoreTake(semahandle, portMAX_DELAY);
-
-	block_num = GetBlockNum(func, &size, 1, &sdio_data);
-
-	cmd53_flags |= CMD53_INCREMENTING;
-
-#if WIFI_USEDMA
-	//SDIO->DCTRL = SDIO_DCTRL_SDIOEN | SDIO_DCTRL_DMAEN;
-	SDIO->DCTRL = SDIO_DCTRL_DMAEN;
-#else
-	//SDIO->DCTRL = SDIO_DCTRL_SDIOEN;
-	//SDIO->DCTRL = 0;
-#endif
-	do {
-		if (block_num)
-		{
-			sdio_data.TransferMode = SDIO_TRANSFER_MODE_BLOCK;
-			SendCMD53(func, addr, block_num, cmd53_flags | CMD53_BLOCKMODE);
-		}
-		else
-		{
-			sdio_data.TransferMode = SDIO_TRANSFER_MODE_STREAM;
-			SendCMD53(func, addr, size, cmd53_flags);
-		}
-	} while(WaitForResponse(__FUNCTION__,__LINE__));
-
-	/* TODO: This delay is needed so that reader task would
-	 * get breathing time for checking new packets
-	 * */
-	while((uint32_t)HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_8) == (uint32_t)RESET);
-#if DEBUG_TRANSPORT
-	//printf("CMD53 response\n\r");
-#endif
-
-#if WIFI_USEDMA
-
-	dma.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH;
-	dma.MemoryOrM2MDstAddress = (uint32_t)data;
-	dma.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD;
-	dma.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT;
-	dma.Mode = LL_DMA_MODE_NORMAL;
-	dma.NbData = size / 4;
-	dma.PeriphOrM2MSrcAddress = (uint32_t)&SDIO->FIFO;
-	dma.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD;
-	dma.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
-	dma.Priority = LL_DMA_PRIORITY_VERYHIGH;
-	LL_DMA_Init(DMA2, LL_DMA_CHANNEL_4, &dma);
-	LL_DMA_EnableChannel(DMA2, LL_DMA_CHANNEL_4);
-#endif
-
-	sdio_data.DataLength = size;
-	sdio_data.DPSM = SDIO_DPSM_ENABLE;
-	sdio_data.TransferDir = SDIO_TRANSFER_DIR_TO_CARD;
-	SDIO_ConfigData(SDIO, &sdio_data);
-
-
-#if !WIFI_USEDMA
-	while (size > 0)
-	{
-		while (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_TXFIFOF) != RESET);
-		size -= 4;
-		/* Write 4 bytes */
-		SDIO_WriteFIFO(SDIO, (uint32_t *)p);
-		p++;
-		/* Wait untill there is space in FIFO */
-		err += CheckError(__FUNCTION__,__LINE__);
-		if (err) {
-#if DEBUG_TRANSPORT
-			printf("err while writing FIFO\n\r");
-#endif
-			break;
-		}
-	}
-#endif
-
-	while (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_TXACT) != RESET);
-
-	i = 0;
-	while (1)
-	{
-		if ((__SDIO_GET_FLAG(SDIO, SDIO_FLAG_DATAEND)) ||
-		    (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_DBCKEND)))
-			break;
-
-		err += CheckError(__FUNCTION__,__LINE__);
-		if (err) {
-#if DEBUG_TRANSPORT
-			printf("err before completing DATA END\n\r");
-#endif
-			break;
-		}
-
-		i++;
-		if (i == CMD53_TIMEOUT)
-		{
-			printf("%s: timeout!\n\r", __FUNCTION__);
-			err++;
-			break;
-		}
-	}
-
-#if DEBUG_TRANSPORT
-	//printf("\n\rData:\n\r===> Data : %s\n\r",(char*)data);
-#endif
-
-	sdio_data.DPSM = SDIO_DPSM_DISABLE;
-	SDIO_ConfigData(SDIO, &sdio_data);
-#if WIFI_USEDMA
-	/* Clear DMA flag */
-	LL_DMA_ClearFlag_GI4(DMA2);
-	/* Close DMA */
-	LL_DMA_DisableChannel(DMA2, LL_DMA_CHANNEL_4);
-#endif
-	__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_DATAEND | SDIO_FLAG_DBCKEND);
-	//SDIO->DCTRL = SDIO_DCTRL_DTEN | SDIO_DCTRL_RWSTART |
-	//			  SDIO_DCTRL_SDIOEN | SDIO_DCTRL_DTDIR;
-
-	err += CheckError(__FUNCTION__,__LINE__);
-	xSemaphoreGive(semahandle);
-	if (err != 0) {
-#if DEBUG_TRANSPORT
-		printf("err while writing\n\r");
-#endif
-		return STM_FAIL;
-	}
-	return STM_OK;
-}
-
-/**
- * @brief Write byte value to expected SDIO register address and SDIO function
- *
- * This function triggers CMD52 to write byte to expected SDIO register
- * For multi-byte write, please refer STM32WriteData
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         value - Byte to be written
- * @retval SDIO R1 response
- */
-uint8_t STM32WriteReg(uint8_t func, uint32_t addr, uint8_t value)
-{
-	SendCMD52(func, addr, value, CMD52_WRITE | CMD52_READAFTERWRITE);
-	WaitForResponse(__FUNCTION__,__LINE__);
-	return SDIO_GetResponse(SDIO, SDIO_RESP1) & 0xff;
-}
-
-/**
- * @brief Read byte value with expected SDIO register address and SDIO function
- *
- * This function triggers CMD52 to read byte from expected SDIO register
- * For multi-byte read, please refer STM32ReadData
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- * @retval Byte read
- */
-uint8_t STM32ReadReg(uint8_t func, uint32_t addr)
-{
-	SendCMD52(func, addr, 0, 0);
-	WaitForResponse(__FUNCTION__,__LINE__);
-	return SDIO_GetResponse(SDIO, SDIO_RESP1) & 0xff;
-}
-
-/**
- * @brief Read data of specified size with expected SDIO register address and SDIO function
- *
- * This function should be called only after HOST_SLC0_RX_NEW_PACKET_INT_ST is set
- * by the slave on ESP_SLAVE_INT_ST_REG register.
- * This function checks how many bytes to be read first,
- * followed by read in ESP_BLOCK_SIZE steps
- * Note : Slave should take care if data greater than 4 bytes, it is expected to
- *        write in ESP_BLOCK_SIZE alignement
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         data - Buffer to store input data
- *         size - Num of bytes to read
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-int STM32ReadData(uint8_t func, uint32_t addr, void *data,
-		uint32_t size, uint8_t multi_blocks)
-{
-	int i, err = 0;
-	uint16_t block_num = 0;
-	static SDIO_DataInitTypeDef sdio_data = {0};
-	uint32_t cmd53_flags = 0;
-
-	/* Data timeout is kept sufficiently high
-	 * Depending upon use case, this could be optimized lower
-	 * */
-	sdio_data.DataTimeOut = SDMMC_DATATIMEOUT;
-
-#if WIFI_USEDMA
-	LL_DMA_InitTypeDef dma;
-#else
-	uint32_t *p = data;
-#endif
-
-	if ((uintptr_t)data & 3)
-	{
-		printf("%s: data must be 4-byte aligned!\n\r", __FUNCTION__);
-		return STM_FAIL_ALIGNMENT;
-	}
-	if (size == 0)
-	{
-		printf("%s: size cannot be 0!\n\r", __FUNCTION__);
-		return STM_FAIL_INVALID_ARG;
-	}
-
-	xSemaphoreTake(semahandle, portMAX_DELAY);
-
-	block_num = GetBlockNum(func, &size, 0, &sdio_data);
-#if DEBUG_TRANSPORT
-	if (size > 4) {
-	//	printf("size after getblocknum: %lu\n\r",size);
-	}
-#endif
-
-#if WIFI_USEDMA
-	//SDIO->DCTRL = SDIO_DCTRL_SDIOEN | SDIO_DCTRL_DMAEN;
-	SDIO->DCTRL = SDIO_DCTRL_DMAEN;
-	//__SDIO_DISABLE_IT(SDIO, SDIO_FLAG_SDIOIT);
-#else
-	//SDIO->DCTRL = 0;
-#endif
-
-#if WIFI_USEDMA
-	dma.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;
-	dma.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD;
-	dma.Mode = LL_DMA_MODE_NORMAL;
-	dma.NbData = size / 4;
-	dma.PeriphOrM2MSrcAddress = (uint32_t)&SDIO->FIFO;
-	dma.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD;
-	dma.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
-	dma.Priority = LL_DMA_PRIORITY_VERYHIGH;
-	dma.MemoryOrM2MDstAddress = (uint32_t)data;
-	dma.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT;
-
-	LL_DMA_Init(DMA2, LL_DMA_CHANNEL_4, &dma);
-	LL_DMA_EnableChannel(DMA2, LL_DMA_CHANNEL_4);
-#endif
-	cmd53_flags |= CMD53_INCREMENTING;
-
-	// May need in case of DMA?
-	if (block_num)
-	{
-		sdio_data.TransferMode = SDIO_TRANSFER_MODE_BLOCK;
-		SendCMD53(func, addr, block_num, cmd53_flags | CMD53_BLOCKMODE);
-	}
-	else
-	{
-		sdio_data.TransferMode = SDIO_TRANSFER_MODE_STREAM;
-		SendCMD53(func, addr, size, cmd53_flags);
-	}
-
-	sdio_data.DataLength = size;
-	sdio_data.DPSM = SDIO_DPSM_ENABLE;
-	sdio_data.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO;
-	SDIO_ConfigData(SDIO, &sdio_data);
-
-	{
-		volatile int delay = 50;
-		while(delay--);
-	}
-
-#if !WIFI_USEDMA
-	int timeout_not_reached = 1000000;
-	while (size > 0 && timeout_not_reached)
-	{
-		if (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_RXDAVL) != RESET)
-		{
-			size -= 4;
-			*p++ = SDIO_ReadFIFO(SDIO);
-
-		}
-		else
-		{
-
-			err += CheckError(__FUNCTION__,__LINE__);
-			if (err) {
-#if DEBUG_TRANSPORT
-				printf("Err while Reading from FIFO\n\r");
-#endif
-				break;
-			}
-		}
-		timeout_not_reached--;
-	}
-	if (!timeout_not_reached) {
-		printf("timed out while reading!!!\n\r");
-		/* try to rectify the situation */
-		sdio_data.DPSM = SDIO_DPSM_DISABLE;
-		SDIO_ConfigData(SDIO, &sdio_data);
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_CMDREND | \
-				SDIO_FLAG_DATAEND | SDIO_FLAG_DBCKEND);
-		__SDIO_CLEAR_FLAG(SDIO, SDIO_STATIC_CMD_FLAGS);
-		xSemaphoreGive(semahandle);
-		return STM_FAIL;
-	}
-#endif
-
-	i = 0;
-	while (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_CMDACT) != RESET ||
-	       __SDIO_GET_FLAG(SDIO, SDIO_FLAG_DATAEND) == RESET)
-	{
-		err += CheckError(__FUNCTION__,__LINE__);
-		if (err)
-			break;
-
-		i++;
-		if (i == CMD53_TIMEOUT)
-		{
-			printf("%s: timeout!\n\r", __FUNCTION__);
-			err++;
-			break;
-		}
-	}
-
-	{
-		volatile int delay = 50;
-		while(delay--);
-	}
-
-	/* Disable DPSM */
-	sdio_data.DPSM = SDIO_DPSM_DISABLE;
-	SDIO_ConfigData(SDIO, &sdio_data);
-
-#if WIFI_USEDMA
-	LL_DMA_ClearFlag_GI4(DMA2);
-	LL_DMA_DisableChannel(DMA2, LL_DMA_CHANNEL_4);
-#endif
-
-	__SDIO_CLEAR_FLAG(SDIO, SDIO_FLAG_CMDREND | \
-			SDIO_FLAG_DATAEND | SDIO_FLAG_DBCKEND);
-
-	//SDIO->DCTRL = SDIO_DCTRL_DTEN | SDIO_DCTRL_RWSTART |
-	//			  SDIO_DCTRL_SDIOEN | SDIO_DCTRL_DTDIR;
-
-	if(addr > ESP_DATA_MIN_ADDRESS) {
-		__SDIO_ENABLE_IT(SDIO, SDIO_FLAG_SDIOIT);
-	}
-
-	err += CheckError(__FUNCTION__,__LINE__);
-	xSemaphoreGive(semahandle);
-	if (err != 0)
-		return STM_FAIL;
-	return STM_OK;
-}
-
-/**
- * @brief Initialization for SDIO peripheral
- *
- * This function communicates with slave peripheral and initializes with
- * expected frequency and bus width
- *
- * @param  sdio_init - structure holds the SDIO parameters to initialize slave
- * @retval None
- */
-void STM32SdioInit(sdio_init_t sdio_init)
-{
-	uint32_t freq;
-	SD_InitTypeDef Init;
-	SdioGpioInit();
-	semahandle = xSemaphoreCreateMutex();
-	assert(semahandle);
-	Init.ClockEdge = SDIO_CLOCK_EDGE_FALLING;
-	Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
-	Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
-	if(sdio_init.width == WIDTH_4){
-		Init.BusWide = SDIO_BUS_WIDE_4B;
-	} else {
-		Init.BusWide = SDIO_BUS_WIDE_1B;
-	}
-	Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE;
-	Init.ClockDiv = CalcClockDivider(sdio_init.clock, &freq);
-
-	if (SdioDriverInit(Init))
-	{
-		printf("STM32 SDIO driver init error\n\r");
-		return;
-	}
-}
-
-/**
- * @brief  This function handles SDIO interrupt request
- * @param  hsd: Pointer to SD handle
- * @retval None
- */
-void SDIO_IRQHandler(void)
-{
-	uint32_t intrpt_raised = (__SDIO_GET_FLAG(SDIO, SDIO_FLAG_SDIOIT) != RESET);
-	BaseType_t xHigherPriorityTaskWoken;
-
-	if(intrpt_raised){
-
-		__HAL_SD_DISABLE_IT(&hsd, SDIO_IT_SDIOIT);
-		/* Unblock receive task, to check if interrupt is servable */
-		xSemaphoreGiveFromISR(sdio_recv_SemHandle,&xHigherPriorityTaskWoken);
-		if(xHigherPriorityTaskWoken) {
-			portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
-		}
-	}
-}
-
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 110
host/driver/transport/sdio/sdio_ll.h

@@ -1,110 +0,0 @@
-/**
-  ******************************************************************************
-  * File Name          : sdio_ll.h
-  * Description        : This file provides code for the configuration
-  *                      of the SDIO instances.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under Ultimate Liberty license
-  * SLA0044, the "License"; You may not use this file except in compliance with
-  * the License. You may obtain a copy of the License at:
-  *                             www.st.com/SLA0044
-  *
-  ******************************************************************************
-  */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __SDIO_LL_H
-#define __SDIO_LL_H
-
-/** Includes **/
-
-/** Constants/Macros **/
-typedef enum {
-	WIDTH_1,     // 1 Bit
-	WIDTH_4      // 4 Bit
-} sdio_width_t;
-
-/** Structures/Unions **/
-typedef struct {
-	sdio_width_t width;
-	uint32_t clock;
-}sdio_init_t;
-
-/** function declarations **/
-/**
- * @brief Initialization for SDIO peripheral
- *
- * This function communicates with slave peripheral and initializes with
- * expected frequency and bus width
- *
- * @param  sdio_init - structure holds the SDIO parameters to initialize slave
- * @retval None
- */
-void STM32SdioInit(sdio_init_t sdio_init);
-
-/**
- * @brief Read byte value with expected SDIO register address and SDIO function
- *
- * This function triggers CMD52 to read byte from expected SDIO register
- * For multi-byte read, please refer STM32ReadData
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- * @retval Byte read
- */
-uint8_t STM32ReadReg(uint8_t func, uint32_t addr);
-
-/**
- * @brief Write byte value to expected SDIO register address and SDIO function
- *
- * This function triggers CMD52 to write byte to expected SDIO register
- * For multi-byte write, please refer STM32WriteData
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         value - Byte to be written
- * @retval SDIO R1 response
- */
-uint8_t STM32WriteReg(uint8_t func, uint32_t addr, uint8_t value);
-
-/**
- * @brief Write data of exp size with expected SDIO register address and SDIO function
- *
- * This function checks if slave has sufficient buffer to write the data
- * If yes, it further writes data to specified register.
- * Note : data greater than 4 bytes is expected to be aligned of ESP_BLOCK_SIZE
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         data - Buffer to written
- *         size - Buffer size in bytes
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-int STM32WriteData(uint8_t func, uint32_t addr, const void *data, uint32_t size);
-
-/**
- * @brief Read data of specified size with expected SDIO register address and SDIO function
- *
- * This function should be called only after HOST_SLC0_RX_NEW_PACKET_INT_ST is set
- * by the slave on ESP_SLAVE_INT_ST_REG register.
- * This function checks how many bytes to be read first,
- * followed by read in ESP_BLOCK_SIZE steps
- * Note : Slave should take care if data greater than 4 bytes, it is expected to
- *        write in ESP_BLOCK_SIZE alignement
- *
- * @param  func - SDIO function
- *         addr - SDIO address
- *         data - Buffer to store input data
- *         size - Num of bytes to read
- * @retval STM_OK for success or failure from enum stm_ret_t
- */
-int STM32ReadData(uint8_t func, uint32_t addr, void *data, uint32_t size, uint8_t multi_blocks);
-
-#endif /*__SDIO_LL_H */
-
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 175
host/driver/transport/sdio/sdio_reg.h

@@ -1,175 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Espressif Systems Wireless LAN device driver
- *
- * Copyright (C) 2015-2021 Espressif Systems (Shanghai) PTE LTD
- *
- * This software file (the "File") is distributed by Espressif Systems (Shanghai)
- * PTE LTD under the terms of the GNU General Public License Version 2, June 1991
- * (the "License").  You may use, redistribute and/or modify this File in
- * accordance with the terms and conditions of the License, a copy of which
- * is available by writing to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
- * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
- * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
- * this warranty disclaimer.
- */
-
-#ifndef __SDIO_REG_H
-#define __SDIO_REG_H
-
-/** Includes **/
-#include "common.h"
-
-/** constants/macros **/
-#define SD_IO_CCCR_FN_ENABLE           0x02
-#define SD_IO_CCCR_FN_READY            0x03
-#define SD_IO_CCCR_INT_ENABLE          0x04
-#define SD_IO_CCCR_BUS_WIDTH           0x07
-
-#define CCCR_BUS_WIDTH_ECSI            (1<<5)
-
-#define SD_IO_CCCR_BLKSIZEL            0x10
-#define SD_IO_CCCR_BLKSIZEH            0x11
-
-/* Interrupt Status */
-#define ESP_SLAVE_BIT0_INT             BIT(0)
-#define ESP_SLAVE_BIT1_INT             BIT(1)
-#define ESP_SLAVE_BIT2_INT             BIT(2)
-#define ESP_SLAVE_BIT3_INT             BIT(3)
-#define ESP_SLAVE_BIT4_INT             BIT(4)
-#define ESP_SLAVE_BIT5_INT             BIT(5)
-#define ESP_SLAVE_BIT6_INT             BIT(6)
-#define ESP_SLAVE_BIT7_INT             BIT(7)
-#define ESP_SLAVE_RX_UNDERFLOW_INT     BIT(16)
-#define ESP_SLAVE_TX_OVERFLOW_INT      BIT(17)
-#define ESP_SLAVE_RX_NEW_PACKET_INT    BIT(23)
-
-
-#define ESP_SLAVE_CMD53_END_ADDR       0x1F800
-#define ESP_SLAVE_LEN_MASK             0xFFFFF
-#define ESP_BLOCK_SIZE                 512
-#define ESP_RX_BYTE_MAX                0x100000
-#define ESP_RX_BUFFER_SIZE             2048
-
-#define ESP_TX_BUFFER_MASK             0xFFF
-#define ESP_TX_BUFFER_MAX              0x1000
-#define ESP_MAX_BUF_CNT                10
-
-#define ESP_SLAVE_SLCHOST_BASE         0x3FF55000
-
-#define ESP_SLAVE_SCRATCH_REG_7        (ESP_SLAVE_SLCHOST_BASE + 0x8C)
-/* SLAVE registers */
-/* Interrupt Registers */
-#define ESP_SLAVE_INT_RAW_REG          (ESP_SLAVE_SLCHOST_BASE + 0x50)
-#define ESP_SLAVE_INT_ST_REG           (ESP_SLAVE_SLCHOST_BASE + 0x58)
-#define ESP_SLAVE_INT_CLR_REG          (ESP_SLAVE_SLCHOST_BASE + 0xD4)
-
-/* Data path registers*/
-#define ESP_SLAVE_PACKET_LEN_REG       (ESP_SLAVE_SLCHOST_BASE + 0x60)
-#define ESP_SLAVE_TOKEN_RDATA          (ESP_SLAVE_SLCHOST_BASE + 0x44)
-
-/* Scratch registers*/
-#define ESP_SLAVE_SCRATCH_REG_0        (ESP_SLAVE_SLCHOST_BASE + 0x6C)
-#define ESP_SLAVE_SCRATCH_REG_1        (ESP_SLAVE_SLCHOST_BASE + 0x70)
-#define ESP_SLAVE_SCRATCH_REG_2        (ESP_SLAVE_SLCHOST_BASE + 0x74)
-#define ESP_SLAVE_SCRATCH_REG_3        (ESP_SLAVE_SLCHOST_BASE + 0x78)
-#define ESP_SLAVE_SCRATCH_REG_4        (ESP_SLAVE_SLCHOST_BASE + 0x7C)
-#define ESP_SLAVE_SCRATCH_REG_6        (ESP_SLAVE_SLCHOST_BASE + 0x88)
-#define ESP_SLAVE_SCRATCH_REG_8        (ESP_SLAVE_SLCHOST_BASE + 0x9C)
-#define ESP_SLAVE_SCRATCH_REG_9        (ESP_SLAVE_SLCHOST_BASE + 0xA0)
-#define ESP_SLAVE_SCRATCH_REG_10       (ESP_SLAVE_SLCHOST_BASE + 0xA4)
-#define ESP_SLAVE_SCRATCH_REG_11       (ESP_SLAVE_SLCHOST_BASE + 0xA8)
-#define ESP_SLAVE_SCRATCH_REG_12       (ESP_SLAVE_SLCHOST_BASE + 0xAC)
-#define ESP_SLAVE_SCRATCH_REG_13       (ESP_SLAVE_SLCHOST_BASE + 0xB0)
-#define ESP_SLAVE_SCRATCH_REG_14       (ESP_SLAVE_SLCHOST_BASE + 0xB4)
-#define ESP_SLAVE_SCRATCH_REG_15       (ESP_SLAVE_SLCHOST_BASE + 0xB8)
-
-#define ESP_ADDRESS_MASK               (0x3FF)
-
-#define ESP_VENDOR_ID                  (0x6666)
-#define ESP_DEVICE_ID_1                (0x2222)
-#define ESP_DEVICE_ID_2                (0x3333)
-
-
-#define SDIO_REG(x)                    ((x)&ESP_ADDRESS_MASK)
-
-#define SDIO_FUNC_0                    (0)
-#define SDIO_FUNC_1                    (1)
-
-#define ESP_SDIO_CONF_OFFSET           (0)
-#define ESP_SDIO_SEND_OFFSET           (16)
-
-/* New slave packet incoming bit */
-#define HOST_SLC0_RX_NEW_PACKET_INT_ST (BIT(23))
-
-/* SDIO pin configuration */
-/* In case of different board than STM32 Nucleo-F412ZG,
- * User need to update pins as per hardware*/
-
-/* SDIO D0 - PC8 */
-#ifndef USR_SDIO_D0_Port
-#define USR_SDIO_D0_Port               GPIOC
-#endif
-#ifndef USR_SDIO_D0_Pin
-#define USR_SDIO_D0_Pin                GPIO_PIN_8
-#endif
-
-/* SDIO D1 - PC9 */
-#ifndef USR_SDIO_D1_Port
-#define USR_SDIO_D1_Port               GPIOC
-#endif
-#ifndef USR_SDIO_D1_Pin
-#define USR_SDIO_D1_Pin                GPIO_PIN_9
-#endif
-
-/* SDIO D2 - PC10 */
-#ifndef USR_SDIO_D2_Port
-#define USR_SDIO_D2_Port               GPIOC
-#endif
-#ifndef USR_SDIO_D2_Pin
-#define USR_SDIO_D2_Pin                GPIO_PIN_10
-#endif
-
-/* SDIO D3 - PC11 */
-#ifndef USR_SDIO_D3_Port
-#define USR_SDIO_D3_Port               GPIOC
-#endif
-#ifndef USR_SDIO_D3_Pin
-#define USR_SDIO_D3_Pin                GPIO_PIN_11
-#endif
-
-/* SDIO CLK - PC12 */
-#ifndef USR_SDIO_CLK_Port
-#define USR_SDIO_CLK_Port              GPIOC
-#endif
-#ifndef USR_SDIO_CLK_Pin
-#define USR_SDIO_CLK_Pin               GPIO_PIN_12
-#endif
-
-/* SDIO CMD - PD2 */
-#ifndef USR_SDIO_CMD_Port
-#define USR_SDIO_CMD_Port              GPIOD
-#endif
-#ifndef USR_SDIO_CMD_Pin
-#define USR_SDIO_CMD_Pin               GPIO_PIN_2
-#endif
-
-/* SDIO Reset slave - PG2 */
-#ifndef GPIO_RESET_GPIO_Port
-#define GPIO_RESET_GPIO_Port           GPIOG
-#endif
-#ifndef GPIO_RESET_Pin
-#define GPIO_RESET_Pin                 GPIO_PIN_2
-#endif
-
-#define __HAL_RCC_SDIO_GPIO_ENABLE()  \
-{                                     \
-	__HAL_RCC_GPIOC_CLK_ENABLE();     \
-	__HAL_RCC_GPIOD_CLK_ENABLE();     \
-}
-
-#endif /* __SDIO_REG_H */

+ 461 - 463
host/driver/transport/spi/spi_drv.c

@@ -28,7 +28,7 @@
 
 
 #define DBG_TAG           "esp.spi"
-#define DBG_LVL           DBG_INFO
+#define DBG_LVL           DBG_ERROR
 #include "rtdbg.h"
 
 
@@ -37,20 +37,19 @@
 
 static struct esp_private *esp_priv[MAX_NETWORK_INTERFACES];
 
-static struct netdev_ops esp_net_ops = {
-	.netdev_open = esp_netdev_open,
-	.netdev_close = esp_netdev_close,
-	.netdev_xmit = esp_netdev_xmit,
+static struct netdev_ops esp_net_ops =
+{
+    .netdev_open = esp_netdev_open,
+    .netdev_close = esp_netdev_close,
+    .netdev_xmit = esp_netdev_xmit,
 };
 
 /** Exported variables **/
 
-static struct rt_spi_device *spi_dev;
-static rt_sem_t osSemaphore;
-static rt_mutex_t mutex_spi_trans;
+static rt_sem_t trans_semaphore;
 
-static rt_thread_t process_rx_task_id = 0;
-static rt_thread_t transaction_task_id = 0;
+static rt_thread_t process_rx_thread_id = 0;
+static rt_thread_t transaction_thread_id = 0;
 
 /* Queue declaration */
 static rt_mq_t to_slave_queue = NULL;
@@ -61,9 +60,8 @@ static void (*spi_drv_evt_handler_fp) (uint8_t);
 
 /** function declaration **/
 /** Exported functions **/
-static stm_ret_t spi_transaction(uint8_t * txbuff);
-static void transaction_task(void *pvParameters);
-static void process_rx_task(void *pvParameters);
+static void transaction_thread(void *parameter);
+static void process_rx_thread(void *parameter);
 static uint8_t * get_tx_buffer(uint8_t *is_valid_tx_buf);
 static void deinit_netdev(void);
 
@@ -76,16 +74,17 @@ static void deinit_netdev(void);
   */
 static struct esp_private * get_priv(uint8_t if_type, uint8_t if_num)
 {
-	int i = 0;
+    int i = 0;
 
-	for (i = 0; i < MAX_NETWORK_INTERFACES; i++) {
-		if((esp_priv[i]) &&
-			(esp_priv[i]->if_type == if_type) &&
-			(esp_priv[i]->if_num == if_num))
-			return esp_priv[i];
-	}
+    for (i = 0; i < MAX_NETWORK_INTERFACES; i++)
+    {
+        if((esp_priv[i]) &&
+            (esp_priv[i]->if_type == if_type) &&
+            (esp_priv[i]->if_num == if_num))
+            return esp_priv[i];
+    }
 
-	return NULL;
+    return NULL;
 }
 
 /**
@@ -95,42 +94,43 @@ static struct esp_private * get_priv(uint8_t if_type, uint8_t if_num)
   */
 static int init_netdev(void)
 {
-	void *ndev = NULL;
-	int i = 0;
-	struct esp_private *priv = NULL;
-	char *if_name = STA_INTERFACE;
-	uint8_t if_type = ESP_STA_IF;
-
-	for (i = 0; i < MAX_NETWORK_INTERFACES; i++) {
-		/* Alloc and init netdev */
-		ndev = netdev_stub_alloc(sizeof(struct esp_private), if_name);
-		if (!ndev) {
-			deinit_netdev();
-			return STM_FAIL;
-		}
-
-		priv = (struct esp_private *) netdev_stub_get_priv(ndev);
-		if (!priv) {
-			deinit_netdev();
-			return STM_FAIL;
-		}
-
-		priv->netdev = ndev;
-		priv->if_type = if_type;
-		priv->if_num = 0;
-
-		if (netdev_stub_register(ndev, &esp_net_ops)) {
-			deinit_netdev();
-			return STM_FAIL;
-		}
-
-		if_name = SOFTAP_INTERFACE;
-		if_type = ESP_AP_IF;
-
-		esp_priv[i] = priv;
-	}
-
-	return STM_OK;
+    void *ndev = NULL;
+    int i = 0;
+    struct esp_private *priv = NULL;
+    char *if_name = STA_INTERFACE;
+    uint8_t if_type = ESP_STA_IF;
+
+    for (i = 0; i < MAX_NETWORK_INTERFACES; i++)
+    {
+        /* Alloc and init netdev */
+        ndev = netdev_stub_alloc(sizeof(struct esp_private), if_name);
+        if (!ndev) {
+            deinit_netdev();
+            return ESP_FAIL;
+        }
+
+        priv = (struct esp_private *) netdev_stub_get_priv(ndev);
+        if (!priv) {
+            deinit_netdev();
+            return ESP_FAIL;
+        }
+
+        priv->netdev = ndev;
+        priv->if_type = if_type;
+        priv->if_num = 0;
+
+        if (netdev_stub_register(ndev, &esp_net_ops)) {
+            deinit_netdev();
+            return ESP_FAIL;
+        }
+
+        if_name = SOFTAP_INTERFACE;
+        if_type = ESP_AP_IF;
+
+        esp_priv[i] = priv;
+    }
+
+    return ESP_OK;
 }
 
 /**
@@ -140,28 +140,30 @@ static int init_netdev(void)
   */
 static void deinit_netdev(void)
 {
-	for (int i = 0; i < MAX_NETWORK_INTERFACES; i++) {
-		if (esp_priv[i]) {
-			if (esp_priv[i]->netdev) {
-				netdev_stub_unregister(esp_priv[i]->netdev);
-				netdev_stub_free(esp_priv[i]->netdev);
-			}
-			esp_priv[i] = NULL;
-		}
-	}
+    for (int i = 0; i < MAX_NETWORK_INTERFACES; i++)
+    {
+        if (esp_priv[i]) {
+            if (esp_priv[i]->netdev) {
+                netdev_stub_unregister(esp_priv[i]->netdev);
+                netdev_stub_free(esp_priv[i]->netdev);
+            }
+            esp_priv[i] = NULL;
+        }
+    }
 }
 
 /**
-  * @brief EXTI line detection callback, used as SPI handshake GPIO
+  * @brief EXTI line detection callback, used as SPI handshake&data_ready GPIO
   * @param GPIO_Pin: Specifies the pins connected EXTI line
   * @retval None
   */
 static void gpio_interrupt(void *args)
 {
-	/* Post semaphore to notify SPI slave is ready for next transaction */
-	if (osSemaphore != NULL) {
-		rt_sem_release(osSemaphore);
-	}
+    /* Post semaphore to notify SPI slave is ready for next transaction */
+    if (trans_semaphore != NULL)
+    {
+        rt_sem_release(trans_semaphore);
+    }
 }
 
 /**
@@ -171,106 +173,61 @@ static void gpio_interrupt(void *args)
   */
 void transport_init(void(*transport_evt_handler_fp)(uint8_t))
 {
-	stm_ret_t retval = STM_OK;
-
-	/* register callback */
-	spi_drv_evt_handler_fp = transport_evt_handler_fp;
-
-	retval = (stm_ret_t)init_netdev();
-	if (retval) {
-		LOG_E("netdev failed to init");
-		assert(retval==STM_OK);
-	}
-
-	/* spi handshake semaphore */
-	osSemaphore = rt_sem_create("esp_hs", 0, RT_IPC_FLAG_PRIO);
-	assert(osSemaphore);
-
-	mutex_spi_trans = rt_mutex_create("esp_spi", RT_IPC_FLAG_PRIO);
-	assert(mutex_spi_trans);
-
-	/* Queue - tx */
-	to_slave_queue = rt_mq_create("esp_spi_tx", sizeof(interface_buffer_handle_t), ESP_HOSTED_SPI_QUEUE_SIZE, RT_IPC_FLAG_PRIO);
-	assert(to_slave_queue);
-
-	/* Queue - rx */
-	from_slave_queue = rt_mq_create("esp_spi_rx", sizeof(interface_buffer_handle_t), ESP_HOSTED_SPI_QUEUE_SIZE, RT_IPC_FLAG_PRIO);
-	assert(from_slave_queue);
-
-	/* Task - SPI transaction (full duplex) */
-	transaction_task_id = rt_thread_create("esp_spi_tx", transaction_task, NULL, ESP_HOSTED_SPI_THREAD_STACK_SIZE, ESP_HOSTED_SPI_THREAD_PRIORITY, 2);
-	assert(transaction_task_id);
-	rt_thread_startup(transaction_task_id);
-
-	/* Task - RX processing */
-	process_rx_task_id = rt_thread_create("esp_spi_rx", process_rx_task, NULL, ESP_HOSTED_SPI_THREAD_STACK_SIZE, ESP_HOSTED_SPI_THREAD_PRIORITY, 2);
-	assert(process_rx_task_id);
-	rt_thread_startup(process_rx_task_id);
-
-	/* Initializes the spi bus */
-	if ((spi_dev = (struct rt_spi_device *)rt_device_find(ESP_HOSTED_SPI_DEVICE_NAME)) != NULL)
-	{
-		/* Configure SPI bus */
-		struct rt_spi_configuration cfg;
+    /* register callback */
+    spi_drv_evt_handler_fp = transport_evt_handler_fp;
+
+    if (init_netdev())
+    {
+        LOG_E("netdev failed to init");
+        return ;
+    }
+
+    /* spi transter semaphore */
+    trans_semaphore = rt_sem_create("esp_trans", 0, RT_IPC_FLAG_PRIO);
+    assert(trans_semaphore);
+
+    /* Queue - tx */
+    to_slave_queue = rt_mq_create("esp_spi_tx", sizeof(interface_buffer_handle_t), ESP_HOSTED_SPI_QUEUE_SIZE, RT_IPC_FLAG_PRIO);
+    assert(to_slave_queue);
+
+    /* Queue - rx */
+    from_slave_queue = rt_mq_create("esp_spi_rx", sizeof(interface_buffer_handle_t), ESP_HOSTED_SPI_QUEUE_SIZE, RT_IPC_FLAG_PRIO);
+    assert(from_slave_queue);
+
+    /* Initializes the spi bus */
+    static struct rt_spi_device esp_spi_device;
+    if (rt_spi_bus_attach_device_cspin(&esp_spi_device, ESP_HOSTED_SPI_DEVICE_NAME, ESP_HOSTED_SPI_BUS_NAME, ESP_HOSTED_SPI_CS_PIN, NULL) == RT_EOK)
+    {
+        /* Configure SPI bus */
+        struct rt_spi_configuration cfg;
         cfg.data_width = 8;
         cfg.mode = RT_SPI_MODE_2 | RT_SPI_MSB;
         cfg.max_hz = ESP_HOSTED_SPI_MAX_HZ;
-        rt_spi_configure(spi_dev, &cfg);
-	}
-	else
-	{
-		LOG_E("No spi device (%s) is found. Please attach the spi bus!", ESP_HOSTED_SPI_DEVICE_NAME);
-		return ;
-	}
-
-	/* Initializes an external interrupt */
-	rt_pin_mode(ESP_HOSTED_HANDSHAKE_PIN, PIN_MODE_INPUT_PULLUP);
-	rt_pin_mode(ESP_HOSTED_DATA_READY_PIN, PIN_MODE_INPUT_PULLUP);
-	rt_pin_attach_irq(ESP_HOSTED_HANDSHAKE_PIN, PIN_IRQ_MODE_RISING, gpio_interrupt, NULL);
-	rt_pin_attach_irq(ESP_HOSTED_DATA_READY_PIN, PIN_IRQ_MODE_RISING, gpio_interrupt, NULL);
-	rt_pin_irq_enable(ESP_HOSTED_HANDSHAKE_PIN, RT_TRUE);
-	rt_pin_irq_enable(ESP_HOSTED_DATA_READY_PIN, RT_TRUE);
-}
-
-/**
-  * @brief  Schedule SPI transaction if -
-  *         a. valid TX buffer is ready at SPI host (STM)
-  *         b. valid TX buffer is ready at SPI peripheral (ESP)
-  *         c. Dummy transaction is expected from SPI peripheral (ESP)
-  * @param  argument: Not used
-  * @retval None
-  */
-static void check_and_execute_spi_transaction(void)
-{
-	uint8_t * txbuff = NULL;
-	uint8_t is_valid_tx_buf = 0;
-	rt_bool_t gpio_handshake = RT_FALSE;
-	rt_bool_t gpio_rx_data_ready = RT_FALSE;
-
-	rt_mutex_take(mutex_spi_trans, RT_WAITING_FOREVER);
-
-	/* handshake line SET -> slave ready for next transaction */
-	gpio_handshake = rt_pin_read(ESP_HOSTED_HANDSHAKE_PIN);
-
-	/* data ready line SET -> slave wants to send something */
-	gpio_rx_data_ready = rt_pin_read(ESP_HOSTED_DATA_READY_PIN);
-
-	if (gpio_handshake)
-	{
-		/* Get next tx buffer to be sent */
-		txbuff = get_tx_buffer(&is_valid_tx_buf);
-
-		if ( (gpio_rx_data_ready) || (is_valid_tx_buf) )
-		{
-			/* Execute transaction only if EITHER holds true-
-			 * a. A valid tx buffer to be transmitted towards slave
-			 * b. Slave wants to send something (Rx for host)
-			 */
-			spi_transaction(txbuff);
-		}
-	}
-
-	rt_mutex_release(mutex_spi_trans);
+        rt_spi_configure(&esp_spi_device, &cfg);
+    }
+    else
+    {
+        LOG_E("No spi device (%s) is found. Please attach the spi bus!", ESP_HOSTED_SPI_DEVICE_NAME);
+        return ;
+    }
+
+    /* Thread - SPI transaction (full duplex) */
+    transaction_thread_id = rt_thread_create("esp_spi_tx", transaction_thread, &esp_spi_device, ESP_HOSTED_SPI_THREAD_STACK_SIZE, ESP_HOSTED_SPI_THREAD_PRIORITY, 2);
+    assert(transaction_thread_id);
+    rt_thread_startup(transaction_thread_id);
+
+    /* Thread - RX processing */
+    process_rx_thread_id = rt_thread_create("esp_spi_rx", process_rx_thread, NULL, ESP_HOSTED_SPI_THREAD_STACK_SIZE, ESP_HOSTED_SPI_THREAD_PRIORITY, 2);
+    assert(process_rx_thread_id);
+    rt_thread_startup(process_rx_thread_id);
+
+    /* Initializes an external interrupt */
+    rt_pin_mode(ESP_HOSTED_HANDSHAKE_PIN, PIN_MODE_INPUT_PULLUP);
+    rt_pin_mode(ESP_HOSTED_DATA_READY_PIN, PIN_MODE_INPUT_PULLUP);
+    rt_pin_attach_irq(ESP_HOSTED_HANDSHAKE_PIN, PIN_IRQ_MODE_RISING, gpio_interrupt, NULL);
+    rt_pin_attach_irq(ESP_HOSTED_DATA_READY_PIN, PIN_IRQ_MODE_RISING, gpio_interrupt, NULL);
+    rt_pin_irq_enable(ESP_HOSTED_HANDSHAKE_PIN, RT_TRUE);
+    rt_pin_irq_enable(ESP_HOSTED_DATA_READY_PIN, RT_TRUE);
 }
 
 /**
@@ -281,283 +238,322 @@ static void check_and_execute_spi_transaction(void)
   *         wlen - size of wbuffer
   * @retval sendbuf - Tx buffer
   */
-stm_ret_t send_to_slave(uint8_t iface_type, uint8_t iface_num,
-		uint8_t * wbuffer, uint16_t wlen)
+esp_ret send_to_slave(uint8_t iface_type, uint8_t iface_num,
+        uint8_t * wbuffer, uint16_t wlen)
 {
-	interface_buffer_handle_t buf_handle = {0};
-
-	if (!wbuffer || !wlen || (wlen > MAX_PAYLOAD_SIZE)) {
-		LOG_E("write fail: buff(%p) 0? OR (0<len(%u)<=max_poss_len(%u))?",
-				wbuffer, wlen, MAX_PAYLOAD_SIZE);
-		if(wbuffer) {
-			free(wbuffer);
-			wbuffer = NULL;
-		}
-		return STM_FAIL;
-	}
-	memset(&buf_handle, 0, sizeof(buf_handle));
-
-	buf_handle.if_type = iface_type;
-	buf_handle.if_num = iface_num;
-	buf_handle.payload_len = wlen;
-	buf_handle.payload = wbuffer;
-	buf_handle.priv_buffer_handle = wbuffer;
-	buf_handle.free_buf_handle = free;
-
-	if (RT_EOK != rt_mq_send_wait(to_slave_queue, &buf_handle, sizeof(buf_handle), RT_WAITING_FOREVER)) {
-		LOG_E("Failed to send buffer to_slave_queue");
-		if(wbuffer) {
-			free(wbuffer);
-			wbuffer = NULL;
-		}
-		return STM_FAIL;
-	}
-
-	check_and_execute_spi_transaction();
-
-	return STM_OK;
+    interface_buffer_handle_t buf_handle = {0};
+
+    if (!wbuffer || !wlen || (wlen > MAX_PAYLOAD_SIZE))
+    {
+        LOG_E("write fail: buff(%p) 0? OR (0<len(%u)<=max_poss_len(%u))?",
+                wbuffer, wlen, MAX_PAYLOAD_SIZE);
+        if(wbuffer) {
+            free(wbuffer);
+            wbuffer = NULL;
+        }
+        return ESP_FAIL;
+    }
+    memset(&buf_handle, 0, sizeof(buf_handle));
+
+    buf_handle.if_type = iface_type;
+    buf_handle.if_num = iface_num;
+    buf_handle.payload_len = wlen;
+    buf_handle.payload = wbuffer;
+    buf_handle.priv_buffer_handle = wbuffer;
+    buf_handle.free_buf_handle = free;
+
+    if (RT_EOK != rt_mq_send_wait(to_slave_queue, &buf_handle, sizeof(buf_handle), RT_WAITING_FOREVER))
+    {
+        LOG_E("Failed to send tx buffer to the queue");
+        if(wbuffer) {
+            free(wbuffer);
+            wbuffer = NULL;
+        }
+        return ESP_FAIL;
+    }
+
+    rt_sem_release(trans_semaphore);
+
+    return ESP_OK;
 }
 
 /**
   * @brief  Full duplex transaction SPI transaction for ESP32S2 hardware
   * @param  txbuff: TX SPI buffer
-  * @retval STM_OK / STM_FAIL
+  * @retval ESP_OK / ESP_FAIL
   */
-static stm_ret_t spi_transaction(uint8_t * txbuff)
+static esp_ret spi_transaction(struct rt_spi_device *dev, uint8_t * txbuff)
 {
-	uint8_t *rxbuff = NULL;
-	interface_buffer_handle_t buf_handle = {0};
-	struct  esp_payload_header *payload_header;
-	uint16_t len, offset;
-	rt_size_t rx_length;
-	uint16_t rx_checksum = 0, checksum = 0;
-
-	/* Allocate rx buffer */
-	rxbuff = (uint8_t *)malloc(MAX_SPI_BUFFER_SIZE);
-	assert(rxbuff);
-	memset(rxbuff, 0, MAX_SPI_BUFFER_SIZE);
-
-	if(!txbuff) {
-		/* Even though, there is nothing to send,
-		 * valid reseted txbuff is needed for SPI driver
-		 */
-		txbuff = (uint8_t *)malloc(MAX_SPI_BUFFER_SIZE);
-		assert(txbuff);
-		memset(txbuff, 0, MAX_SPI_BUFFER_SIZE);
-	}
-
-	/* SPI transaction */
-	rx_length = rt_spi_transfer(spi_dev, txbuff, rxbuff, MAX_SPI_BUFFER_SIZE);
-
-	if (rx_length != 0)
-	{
-		/* Transaction successful */
-
-		/* create buffer rx handle, used for processing */
-		payload_header = (struct esp_payload_header *) rxbuff;
-
-		/* Fetch length and offset from payload header */
-		len = le16toh(payload_header->len);
-		offset = le16toh(payload_header->offset);
-
-		if ((!len) || (len > MAX_PAYLOAD_SIZE) || (offset != sizeof(struct esp_payload_header))) 
-		{
-			if (payload_header->if_num == 0xF && payload_header->if_type == ESP_MAX_IF)
-			{
-				/* dummy packet, ignore it */
-				LOG_D("Dummy packet received from slave");
-			}
-			else
-			{
-				LOG_W("Invalid packet received from slave, length: %d", rx_length);
-				LOG_HEX("rxbuff_head16", 16, rxbuff, min(rx_length, 32));
-				LOG_HEX("rxbuff_tail16", 16, rxbuff + (rx_length - min(rx_length, 32)), min(rx_length, 32));
-			}
-
-			/* Free up buffer, as one of following -
-				* 1. no payload to process
-				* 2. input packet size > driver capacity
-				* 3. payload header size mismatch,
-				* wrong header/bit packing?
-				* */
-			if (rxbuff) {
-				free(rxbuff);
-				rxbuff = NULL;
-			}
-
-			/* Give chance to other tasks */
-			rt_thread_yield();
-		}
-		else
-		{
-			rx_checksum = le16toh(payload_header->checksum);
-			payload_header->checksum = 0;
-
-			checksum = compute_checksum(rxbuff, len+offset);
-
-			if (checksum == rx_checksum) {
-				buf_handle.priv_buffer_handle = rxbuff;
-				buf_handle.free_buf_handle = free;
-				buf_handle.payload_len = len;
-				buf_handle.if_type     = payload_header->if_type;
-				buf_handle.if_num      = payload_header->if_num;
-				buf_handle.payload     = rxbuff + offset;
-				buf_handle.seq_num     = le16toh(payload_header->seq_num);
-				buf_handle.flag        = payload_header->flags;
-				LOG_D("if_type: %d, if_num: %d, len: %d, offset: %d, seq_num: %d, flags: 0x%x",
-						payload_header->if_type, payload_header->if_num, len, offset, le16toh(payload_header->seq_num), payload_header->flags);
-				LOG_HEX("payload", 16, buf_handle.payload, min(buf_handle.payload_len, 32));
-				if (RT_EOK != rt_mq_send_wait(from_slave_queue, &buf_handle, sizeof(interface_buffer_handle_t), 2000)) {
-					LOG_E("Failed to send buffer");
-					goto done;
-				}
-			} else {
-				LOG_E("Checksum mismatch, rx_checksum: 0x%04x, computed_checksum: 0x%04x", rx_checksum, checksum);
-				if (rxbuff) {
-					free(rxbuff);
-					rxbuff = NULL;
-				}
-			}
-		}
-
-		/* Free input TX buffer */
-		if (txbuff) {
-			free(txbuff);
-			txbuff = NULL;
-		}
-	}
-	else
-	{
-		goto done;
-	}
-
-	return STM_OK;
+    uint8_t *rxbuff = NULL;
+    interface_buffer_handle_t buf_handle = {0};
+    struct  esp_payload_header *payload_header;
+    uint16_t len, offset;
+    rt_size_t rx_length;
+    uint16_t rx_checksum = 0, checksum = 0;
+
+    /* Allocate rx buffer */
+    rxbuff = (uint8_t *)malloc(MAX_SPI_BUFFER_SIZE);
+    assert(rxbuff);
+    memset(rxbuff, 0, MAX_SPI_BUFFER_SIZE);
+
+    if(!txbuff)
+    {
+        /* Even though, there is nothing to send,
+         * valid reseted txbuff is needed for SPI driver
+         */
+        txbuff = (uint8_t *)malloc(MAX_SPI_BUFFER_SIZE);
+        assert(txbuff);
+        memset(txbuff, 0, MAX_SPI_BUFFER_SIZE);
+    }
+
+    /* SPI transaction */
+    rx_length = rt_spi_transfer(dev, txbuff, rxbuff, MAX_SPI_BUFFER_SIZE);
+
+    if (rx_length != 0)
+    {
+        /* Transaction successful */
+
+        /* create buffer rx handle, used for processing */
+        payload_header = (struct esp_payload_header *) rxbuff;
+
+        /* Fetch length and offset from payload header */
+        len = le16toh(payload_header->len);
+        offset = le16toh(payload_header->offset);
+
+        if ((!len) || (len > MAX_PAYLOAD_SIZE) || (offset != sizeof(struct esp_payload_header)))
+        {
+            if (payload_header->if_num == 0xF && payload_header->if_type == ESP_MAX_IF)
+            {
+                /* dummy packet, ignore it */
+                LOG_D("Dummy packet received from slave");
+            }
+            else
+            {
+                LOG_W("Invalid packet received from slave, length: %d", rx_length);
+                LOG_HEX("rxbuff_head16", 16, rxbuff, min(rx_length, 32));
+                LOG_HEX("rxbuff_tail16", 16, rxbuff + (rx_length - min(rx_length, 32)), min(rx_length, 32));
+            }
+
+            /* Free up buffer, as one of following -
+                * 1. no payload to process
+                * 2. input packet size > driver capacity
+                * 3. payload header size mismatch,
+                * wrong header/bit packing?
+                * */
+            if (rxbuff)
+            {
+                free(rxbuff);
+                rxbuff = NULL;
+            }
+        }
+        else
+        {
+            rx_checksum = le16toh(payload_header->checksum);
+            payload_header->checksum = 0;
+
+            checksum = compute_checksum(rxbuff, len+offset);
+
+            if (checksum == rx_checksum)
+            {
+                buf_handle.priv_buffer_handle = rxbuff;
+                buf_handle.free_buf_handle = free;
+                buf_handle.payload_len = len;
+                buf_handle.if_type     = payload_header->if_type;
+                buf_handle.if_num      = payload_header->if_num;
+                buf_handle.payload     = rxbuff + offset;
+                buf_handle.seq_num     = le16toh(payload_header->seq_num);
+                buf_handle.flag        = payload_header->flags;
+                LOG_D("if_type: %d, if_num: %d, len: %d, offset: %d, seq_num: %d, flags: 0x%x",
+                        payload_header->if_type, payload_header->if_num, len, offset, le16toh(payload_header->seq_num), payload_header->flags);
+                LOG_HEX("payload", 16, buf_handle.payload, min(buf_handle.payload_len, 32));
+                if (RT_EOK != rt_mq_send_wait(from_slave_queue, &buf_handle, sizeof(interface_buffer_handle_t), 2000))
+                {
+                    LOG_E("Failed to send rx buffer to the queue");
+                    goto done;
+                }
+            }
+            else
+            {
+                LOG_W("Checksum mismatch, rx_checksum: 0x%04x, computed_checksum: 0x%04x", rx_checksum, checksum);
+                if (rxbuff) {
+                    free(rxbuff);
+                    rxbuff = NULL;
+                }
+            }
+        }
+
+        /* Free input TX buffer */
+        if (txbuff)
+        {
+            free(txbuff);
+            txbuff = NULL;
+        }
+    }
+    else
+    {
+        goto done;
+    }
+
+    return ESP_OK;
 
 done:
-	/* error cases, abort */
-	if (txbuff) {
-		free(txbuff);
-		txbuff = NULL;
-	}
-
-	if (rxbuff) {
-		free(rxbuff);
-		rxbuff = NULL;
-	}
-	return STM_FAIL;
+    /* error cases, abort */
+    if (txbuff) {
+        free(txbuff);
+        txbuff = NULL;
+    }
+
+    if (rxbuff) {
+        free(rxbuff);
+        rxbuff = NULL;
+    }
+    return ESP_FAIL;
 }
 
 /**
-  * @brief  Task for SPI transaction
+  * @brief  Thread for SPI transaction
   * @param  argument: Not used
   * @retval None
   */
-static void transaction_task(void *pvParameters)
+static void transaction_thread(void *parameter)
 {
-	for (;;) {
-
-		if (osSemaphore != NULL) {
-			/* Wait till slave is ready for next transaction */
-			if (rt_sem_take(osSemaphore, RT_WAITING_FOREVER) == RT_EOK) {
-				check_and_execute_spi_transaction();
-			}
-		}
-	}
+    uint8_t * txbuff = NULL;
+    uint8_t is_valid_tx_buf;
+    rt_bool_t gpio_handshake;
+    rt_bool_t gpio_rx_data_ready;
+    struct rt_spi_device *spi_device = (struct rt_spi_device *)parameter;
+
+    while(1)
+    {
+        /* Wait till slave is ready for next transaction */
+        rt_sem_take(trans_semaphore, RT_WAITING_FOREVER);
+
+        /* handshake line SET -> slave ready for next transaction */
+        gpio_handshake = rt_pin_read(ESP_HOSTED_HANDSHAKE_PIN);
+
+        /* data ready line SET -> slave wants to send something */
+        gpio_rx_data_ready = rt_pin_read(ESP_HOSTED_DATA_READY_PIN);
+
+        if (gpio_handshake)
+        {
+            /* Get next tx buffer to be sent */
+            txbuff = get_tx_buffer(&is_valid_tx_buf);
+
+            if ( (gpio_rx_data_ready) || (is_valid_tx_buf) )
+            {
+                /* Execute transaction only if EITHER holds true-
+                * a. A valid tx buffer to be transmitted towards slave
+                * b. Slave wants to send something (Rx for host)
+                */
+                spi_transaction(spi_device, txbuff);
+            }
+        }
+    }
 }
 
 /**
-  * @brief  RX processing task
+  * @brief  RX processing thread
   * @param  argument: Not used
   * @retval None
   */
-static void process_rx_task(void *pvParameters)
+static void process_rx_thread(void *parameter)
 {
-	interface_buffer_handle_t buf_handle = {0};
-	uint8_t *payload = NULL;
-	struct pbuf *buffer = NULL;
-	struct esp_priv_event *event = NULL;
-	struct esp_private *priv = NULL;
-
-	LOG_D("Starting RX processing thread");
-
-	while (1) {
-
-		if (rt_mq_recv(from_slave_queue, &buf_handle, sizeof(interface_buffer_handle_t), RT_WAITING_FOREVER) != sizeof(interface_buffer_handle_t)) {
-			LOG_E("Failed to receive buffer");
-			continue;
-		}
-
-		/* point to payload */
-		payload = buf_handle.payload;
-
-		/* process received buffer for all possible interface types */
-		if (buf_handle.if_type == ESP_SERIAL_IF) {
-
-			/* serial interface path */
-			serial_rx_handler(&buf_handle);
-
-		} else if((buf_handle.if_type == ESP_STA_IF) ||
-				(buf_handle.if_type == ESP_AP_IF)) {
-			priv = get_priv(buf_handle.if_type, buf_handle.if_num);
-
-			if (priv) {
-				buffer = (struct pbuf *)malloc(sizeof(struct pbuf));
-				assert(buffer);
-
-				buffer->len = buf_handle.payload_len;
-				buffer->payload = malloc(buf_handle.payload_len);
-				assert(buffer->payload);
-
-				memcpy(buffer->payload, buf_handle.payload,
-						buf_handle.payload_len);
-
-				netdev_stub_rx(priv->netdev, buffer);
-			}
-
-		} else if (buf_handle.if_type == ESP_PRIV_IF) {
-			buffer = (struct pbuf *)malloc(sizeof(struct pbuf));
-			assert(buffer);
-
-			buffer->len = buf_handle.payload_len;
-			buffer->payload = malloc(buf_handle.payload_len);
-			assert(buffer->payload);
-
-			memcpy(buffer->payload, buf_handle.payload,
-					buf_handle.payload_len);
-
-			process_priv_communication(buffer);
-			/* priv transaction received */
-			LOG_D("Received INIT event");
-
-			event = (struct esp_priv_event *) (payload);
-			if (event->event_type == ESP_PRIV_EVENT_INIT) {
-				/* halt spi transactions for some time,
-				 * this is one time delay, to give breathing
-				 * time to slave before spi trans start */
-				// rt_thread_mdelay(100);
-				if (spi_drv_evt_handler_fp) {
-					spi_drv_evt_handler_fp(TRANSPORT_ACTIVE);
-				}
-			} else {
-				/* User can re-use this type of transaction */
-			}
-		} else if (buf_handle.if_type == ESP_TEST_IF) {
+    interface_buffer_handle_t buf_handle = {0};
+    uint8_t *payload = NULL;
+    struct pbuf *buffer = NULL;
+    struct esp_priv_event *event = NULL;
+    struct esp_private *priv = NULL;
+
+    LOG_D("Starting RX processing thread");
+
+    while (1)
+    {
+        if (rt_mq_recv(from_slave_queue, &buf_handle, sizeof(interface_buffer_handle_t), RT_WAITING_FOREVER) != sizeof(interface_buffer_handle_t))
+        {
+            LOG_E("Failed to receive rx buffer in the queue");
+            continue;
+        }
+
+        /* point to payload */
+        payload = buf_handle.payload;
+
+        /* process received buffer for all possible interface types */
+        if (buf_handle.if_type == ESP_SERIAL_IF)
+        {
+            /* serial interface path */
+            serial_rx_handler(&buf_handle);
+        }
+        else if ((buf_handle.if_type == ESP_STA_IF) || (buf_handle.if_type == ESP_AP_IF))
+        {
+            priv = get_priv(buf_handle.if_type, buf_handle.if_num);
+
+            if (priv)
+            {
+                buffer = (struct pbuf *)malloc(sizeof(struct pbuf));
+                assert(buffer);
+
+                buffer->len = buf_handle.payload_len;
+                buffer->payload = malloc(buf_handle.payload_len);
+                assert(buffer->payload);
+
+                memcpy(buffer->payload, buf_handle.payload,
+                        buf_handle.payload_len);
+
+                netdev_stub_rx(priv->netdev, buffer);
+            }
+        }
+        else if (buf_handle.if_type == ESP_PRIV_IF)
+        {
+            buffer = (struct pbuf *)malloc(sizeof(struct pbuf));
+            assert(buffer);
+
+            buffer->len = buf_handle.payload_len;
+            buffer->payload = malloc(buf_handle.payload_len);
+            assert(buffer->payload);
+
+            memcpy(buffer->payload, buf_handle.payload,
+                    buf_handle.payload_len);
+
+            process_priv_communication(buffer);
+            /* priv transaction received */
+            LOG_D("Received INIT event");
+
+            event = (struct esp_priv_event *) (payload);
+            if (event->event_type == ESP_PRIV_EVENT_INIT)
+            {
+                /* halt spi transactions for some time,
+                 * this is one time delay, to give breathing
+                 * time to slave before spi trans start */
+                // rt_thread_mdelay(100);
+                if (spi_drv_evt_handler_fp) {
+                    spi_drv_evt_handler_fp(TRANSPORT_ACTIVE);
+                }
+            }
+            else
+            {
+                /* User can re-use this type of transaction */
+            }
+        }
+        else if (buf_handle.if_type == ESP_TEST_IF)
+        {
 #if TEST_RAW_TP
-			update_test_raw_tp_rx_len(buf_handle.payload_len);
+            update_test_raw_tp_rx_len(buf_handle.payload_len);
 #endif
-		} else {
-			LOG_E("unknown type %d ", buf_handle.if_type);
-		}
-
-		/* Free buffer handle */
-		/* When buffer offloaded to other module, that module is
-		 * responsible for freeing buffer. In case not offloaded or
-		 * failed to offload, buffer should be freed here.
-		 */
-		if (buf_handle.free_buf_handle) {
-			buf_handle.free_buf_handle(buf_handle.priv_buffer_handle);
-		}
-	}
+        }
+        else
+        {
+            LOG_E("Received unknown interface type %d ", buf_handle.if_type);
+        }
+
+        /* Free buffer handle */
+        /* When buffer offloaded to other module, that module is
+         * responsible for freeing buffer. In case not offloaded or
+         * failed to offload, buffer should be freed here.
+         */
+        if (buf_handle.free_buf_handle) {
+            buf_handle.free_buf_handle(buf_handle.priv_buffer_handle);
+        }
+    }
 }
 
 
@@ -568,51 +564,53 @@ static void process_rx_task(void *pvParameters)
   */
 static uint8_t * get_tx_buffer(uint8_t *is_valid_tx_buf)
 {
-	struct  esp_payload_header *payload_header;
-	uint8_t *sendbuf = NULL;
-	uint8_t *payload = NULL;
-	uint16_t len = 0;
-	interface_buffer_handle_t buf_handle = {0};
-
-	*is_valid_tx_buf = 0;
-
-	/* Check if higher layers have anything to transmit, non blocking.
-	 * If nothing is expected to send, queue receive will fail.
-	 * In that case only payload header with zero payload
-	 * length would be transmitted.
-	 */
-	if (rt_mq_recv(to_slave_queue, &buf_handle, sizeof(buf_handle), 0) == sizeof(buf_handle)) {
-		len = buf_handle.payload_len;
-	}
-
-	if (len) {
-
-		sendbuf = (uint8_t *) malloc(MAX_SPI_BUFFER_SIZE);
-		if (!sendbuf) {
-			LOG_E("malloc failed");
-			goto done;
-		}
-
-		memset(sendbuf, 0, MAX_SPI_BUFFER_SIZE);
-
-		*is_valid_tx_buf = 1;
-
-		/* Form Tx header */
-		payload_header = (struct esp_payload_header *) sendbuf;
-		payload = sendbuf + sizeof(struct esp_payload_header);
-		payload_header->len     = htole16(len);
-		payload_header->offset  = htole16(sizeof(struct esp_payload_header));
-		payload_header->if_type = buf_handle.if_type;
-		payload_header->if_num  = buf_handle.if_num;
-		memcpy(payload, buf_handle.payload, min(len, MAX_PAYLOAD_SIZE));
-		payload_header->checksum = htole16(compute_checksum(sendbuf,
-				sizeof(struct esp_payload_header)+len));;
-	}
+    struct  esp_payload_header *payload_header;
+    uint8_t *sendbuf = NULL;
+    uint8_t *payload = NULL;
+    uint16_t len = 0;
+    interface_buffer_handle_t buf_handle = {0};
+
+    *is_valid_tx_buf = 0;
+
+    /* Check if higher layers have anything to transmit, non blocking.
+     * If nothing is expected to send, queue receive will fail.
+     * In that case only payload header with zero payload
+     * length would be transmitted.
+     */
+    if (rt_mq_recv(to_slave_queue, &buf_handle, sizeof(buf_handle), 0) == sizeof(buf_handle)) {
+        len = buf_handle.payload_len;
+    }
+
+    if (len)
+    {
+
+        sendbuf = (uint8_t *) malloc(MAX_SPI_BUFFER_SIZE);
+        if (!sendbuf)
+        {
+            LOG_E("malloc failed");
+            goto done;
+        }
+
+        memset(sendbuf, 0, MAX_SPI_BUFFER_SIZE);
+
+        *is_valid_tx_buf = 1;
+
+        /* Form Tx header */
+        payload_header = (struct esp_payload_header *) sendbuf;
+        payload = sendbuf + sizeof(struct esp_payload_header);
+        payload_header->len     = htole16(len);
+        payload_header->offset  = htole16(sizeof(struct esp_payload_header));
+        payload_header->if_type = buf_handle.if_type;
+        payload_header->if_num  = buf_handle.if_num;
+        memcpy(payload, buf_handle.payload, min(len, MAX_PAYLOAD_SIZE));
+        payload_header->checksum = htole16(compute_checksum(sendbuf,
+                sizeof(struct esp_payload_header)+len));;
+    }
 
 done:
-	/* free allocated buffer */
-	if (buf_handle.free_buf_handle)
-		buf_handle.free_buf_handle(buf_handle.priv_buffer_handle);
+    /* free allocated buffer */
+    if (buf_handle.free_buf_handle)
+        buf_handle.free_buf_handle(buf_handle.priv_buffer_handle);
 
-	return sendbuf;
+    return sendbuf;
 }

+ 138 - 139
host/driver/transport/transport_drv.c

@@ -29,7 +29,7 @@
  */
 int esp_netdev_open(netdev_handle_t netdev)
 {
-	return STM_OK;
+    return ESP_OK;
 }
 
 /**
@@ -39,7 +39,7 @@ int esp_netdev_open(netdev_handle_t netdev)
  */
 int esp_netdev_close(netdev_handle_t netdev)
 {
-	return STM_OK;
+    return ESP_OK;
 }
 
 
@@ -47,193 +47,192 @@ int esp_netdev_close(netdev_handle_t netdev)
  * @brief  transmit on virtual network device
  * @param  netdev - network device
  *         net_buf - buffer to transmit
- * @retval STM_OK for success or failure from enum stm_ret_t
+ * @retval ESP_OK for success or failure from enum esp_ret
  */
 int esp_netdev_xmit(netdev_handle_t netdev, struct pbuf *net_buf)
 {
-	struct esp_private *priv = NULL;
+    struct esp_private *priv = NULL;
 
-	if (!netdev || !net_buf)
-		return STM_FAIL;
-	priv = (struct esp_private *) netdev_stub_get_priv(netdev);
+    if (!netdev || !net_buf)
+        return ESP_FAIL;
+    priv = (struct esp_private *) netdev_stub_get_priv(netdev);
 
-	if (!priv)
-		return STM_FAIL;
+    if (!priv)
+        return ESP_FAIL;
 
-	if (send_to_slave(priv->if_type, priv->if_num, net_buf->payload, net_buf->len) != STM_OK)
-		return STM_FAIL;
+    if (send_to_slave(priv->if_type, priv->if_num, net_buf->payload, net_buf->len) != ESP_OK)
+        return ESP_FAIL;
 
-	free(net_buf);
+    free(net_buf);
 
-	return STM_OK;
+    return ESP_OK;
 }
 
 void process_capabilities(uint8_t cap)
 {
 #if DEBUG_TRANSPORT
-	LOG_D("capabilities: 0x%x",cap);
+    LOG_D("capabilities: 0x%x",cap);
 #else
-	/* warning suppress */
-	if(cap);
+    /* warning suppress */
+    if(cap);
 #endif
 }
 
 void process_priv_communication(struct pbuf *pbuf)
 {
-	struct esp_priv_event *header = NULL;
+    struct esp_priv_event *header = NULL;
 
-	uint8_t *payload = NULL;
-	uint16_t len = 0;
+    uint8_t *payload = NULL;
+    uint16_t len = 0;
 
-	if (!pbuf || !pbuf->payload)
-		return;
+    if (!pbuf || !pbuf->payload)
+        return;
 
-	header = (struct esp_priv_event *) pbuf->payload;
+    header = (struct esp_priv_event *) pbuf->payload;
 
-	payload = pbuf->payload;
-	len = pbuf->len;
+    payload = pbuf->payload;
+    len = pbuf->len;
 
-	if (header->event_type == ESP_PRIV_EVENT_INIT)
-	{
-		LOG_D("event packet type");
-		process_event(payload, len);
-	}
+    if (header->event_type == ESP_PRIV_EVENT_INIT)
+    {
+        LOG_D("event packet type");
+        process_event(payload, len);
+    }
 
-	hosted_free(pbuf);
+    hosted_free(pbuf);
 }
 
 static void print_capabilities(uint32_t cap)
 {
-	LOG_I("Features supported are:");
-	if (cap & (ESP_WLAN_SDIO_SUPPORT | ESP_WLAN_SPI_SUPPORT))
-		LOG_I("\t * WLAN");
-	if (cap & (ESP_BT_UART_SUPPORT | ESP_BT_SDIO_SUPPORT | ESP_BT_SPI_SUPPORT))
-	{
-		LOG_I("\t * BT/BLE");
-		if (cap & ESP_BT_UART_SUPPORT)
-			LOG_I("\t   - HCI over UART");
-		if (cap & ESP_BT_SDIO_SUPPORT)
-			LOG_I("\t   - HCI over SDIO");
-		if (cap & ESP_BT_SPI_SUPPORT)
-			LOG_I("\t   - HCI over SPI");
-		if ((cap & ESP_BLE_ONLY_SUPPORT) && (cap & ESP_BR_EDR_ONLY_SUPPORT))
-			LOG_I("\t   - BT/BLE dual mode");
-		else if (cap & ESP_BLE_ONLY_SUPPORT)
-			LOG_I("\t   - BLE only");
-		else if (cap & ESP_BR_EDR_ONLY_SUPPORT)
-			LOG_I("\t   - BR EDR only");
-	}
+    LOG_I("Features supported are:");
+    if (cap & (ESP_WLAN_SDIO_SUPPORT | ESP_WLAN_SPI_SUPPORT))
+        LOG_I("\t * WLAN");
+    if (cap & (ESP_BT_UART_SUPPORT | ESP_BT_SDIO_SUPPORT | ESP_BT_SPI_SUPPORT))
+    {
+        LOG_I("\t * BT/BLE");
+        if (cap & ESP_BT_UART_SUPPORT)
+            LOG_I("\t   - HCI over UART");
+        if (cap & ESP_BT_SDIO_SUPPORT)
+            LOG_I("\t   - HCI over SDIO");
+        if (cap & ESP_BT_SPI_SUPPORT)
+            LOG_I("\t   - HCI over SPI");
+        if ((cap & ESP_BLE_ONLY_SUPPORT) && (cap & ESP_BR_EDR_ONLY_SUPPORT))
+            LOG_I("\t   - BT/BLE dual mode");
+        else if (cap & ESP_BLE_ONLY_SUPPORT)
+            LOG_I("\t   - BLE only");
+        else if (cap & ESP_BR_EDR_ONLY_SUPPORT)
+            LOG_I("\t   - BR EDR only");
+    }
 }
 
 static void print_chip_type(char chip_type)
 {
-	if ((chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32) &&
-	    (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32S2) &&
-	    (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32C2) &&
-	    (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32C3) &&
-	    (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32C6) &&
-	    (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32S3)) 
-	{
-		LOG_E("ESP board type is not mentioned, ignoring [%d]", chip_type);
-		chip_type = ESP_PRIV_FIRMWARE_CHIP_UNRECOGNIZED;
-	}
-	else
-	{
-		LOG_I("Chip is: %s%s%s%s%s%s",
-				chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32 ? "ESP32" : "",
-				chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32S2 ? "ESP32s2" : "",
-				chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32C2 ? "ESP32c2" : "",
-				chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32C3 ? "ESP32c3" : "",
-				chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32C6 ? "ESP32c6" : "",
-				chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32S3 ? "ESP32s3" : "");
-	}
+    if ((chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32) &&
+        (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32S2) &&
+        (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32C2) &&
+        (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32C3) &&
+        (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32C6) &&
+        (chip_type != ESP_PRIV_FIRMWARE_CHIP_ESP32S3))
+    {
+        LOG_E("ESP board type is not mentioned, ignoring [%d]", chip_type);
+        chip_type = ESP_PRIV_FIRMWARE_CHIP_UNRECOGNIZED;
+    }
+    else
+    {
+        LOG_I("Chip is: %s%s%s%s%s%s",
+                chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32 ? "ESP32" : "",
+                chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32S2 ? "ESP32s2" : "",
+                chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32C2 ? "ESP32c2" : "",
+                chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32C3 ? "ESP32c3" : "",
+                chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32C6 ? "ESP32c6" : "",
+                chip_type == ESP_PRIV_FIRMWARE_CHIP_ESP32S3 ? "ESP32s3" : "");
+    }
 }
 
 void process_event(uint8_t *evt_buf, uint16_t len)
 {
-	struct esp_priv_event *event;
+    struct esp_priv_event *event;
 
-	if (!evt_buf || !len)
-		return;
+    if (!evt_buf || !len)
+        return;
 
-	event = (struct esp_priv_event *) evt_buf;
+    event = (struct esp_priv_event *) evt_buf;
 
-	if (event->event_type == ESP_PRIV_EVENT_INIT)
-	{
-		LOG_D("Received INIT event from ESP peripheral");
+    if (event->event_type == ESP_PRIV_EVENT_INIT)
+    {
+        LOG_D("Received INIT event from ESP peripheral");
 
-		print_hex_dump(event->event_data, event->event_len, "process event");
+        print_hex_dump(event->event_data, event->event_len, "process event");
 
-		if (process_init_event(event->event_data, event->event_len))
-		{
-			LOG_E("failed to init event");
-		}
-	}
-	else
-	{
-		LOG_W("Drop unknown event");
-	}
+        if (process_init_event(event->event_data, event->event_len))
+        {
+            LOG_E("failed to init event");
+        }
+    }
+    else
+    {
+        LOG_W("Drop unknown event");
+    }
 }
 
 static void adjust_spi_clock(uint8_t spi_clk_mhz)
 {
-	// if ((spi_clk_mhz) && (spi_clk_mhz != SPI_INITIAL_CLK_MHZ)) {
-	// 	printk(KERN_INFO "ESP Reconfigure SPI CLK to %u MHz\n",spi_clk_mhz);
-	// 	spi_context.spi_clk_mhz = spi_clk_mhz;
-	// 	spi_context.esp_spi_dev->max_speed_hz = spi_clk_mhz * NUMBER_1M;
-	// }
-#warning "adjust_spi_clock not implemented"
+    // if ((spi_clk_mhz) && (spi_clk_mhz != SPI_INITIAL_CLK_MHZ)) {
+    //  printk(KERN_INFO "ESP Reconfigure SPI CLK to %u MHz\n",spi_clk_mhz);
+    //  spi_context.spi_clk_mhz = spi_clk_mhz;
+    //  spi_context.esp_spi_dev->max_speed_hz = spi_clk_mhz * NUMBER_1M;
+    // }
 }
 
 int process_init_event(uint8_t *evt_buf, uint8_t len)
 {
-	uint8_t len_left = len, tag_len;
-	uint8_t *pos;
-
-	if (!evt_buf)
-		return STM_FAIL;
-
-	pos = evt_buf;
-	while (len_left)
-	{
-		tag_len = *(pos + 1);
-		LOG_D("EVENT: %d", *pos);
-		if (*pos == ESP_PRIV_CAPABILITY)
-		{
-			LOG_D("priv capabilty ");
-			process_capabilities(*(pos + 2));
-			print_capabilities(*(pos + 2));
-		}
-		else if (*pos == ESP_PRIV_SPI_CLK_MHZ)
-		{
-			LOG_D("adjust spi clock frequency to %u MHz", (*(pos + 2)));
-			adjust_spi_clock(*(pos + 2));
-		}
-		else if (*pos == ESP_PRIV_FIRMWARE_CHIP_ID)
-		{
-			print_chip_type(*(pos+2));
-		}
-		else if (*pos == ESP_PRIV_TEST_RAW_TP)
-		{
-			LOG_D("priv test raw tp");
+    uint8_t len_left = len, tag_len;
+    uint8_t *pos;
+
+    if (!evt_buf)
+        return ESP_FAIL;
+
+    pos = evt_buf;
+    while (len_left)
+    {
+        tag_len = *(pos + 1);
+        LOG_D("EVENT: %d", *pos);
+        if (*pos == ESP_PRIV_CAPABILITY)
+        {
+            LOG_D("priv capabilty ");
+            process_capabilities(*(pos + 2));
+            print_capabilities(*(pos + 2));
+        }
+        else if (*pos == ESP_PRIV_SPI_CLK_MHZ)
+        {
+            LOG_D("adjust spi clock frequency to %u MHz", (*(pos + 2)));
+            adjust_spi_clock(*(pos + 2));
+        }
+        else if (*pos == ESP_PRIV_FIRMWARE_CHIP_ID)
+        {
+            print_chip_type(*(pos+2));
+        }
+        else if (*pos == ESP_PRIV_TEST_RAW_TP)
+        {
+            LOG_D("priv test raw tp");
 #if TEST_RAW_TP
-			process_test_capabilities(*(pos + 2));
+            process_test_capabilities(*(pos + 2));
 #endif
-		}
-		else if (*pos == ESP_PRIV_FW_DATA)
-		{
-			struct fw_version *fw_ver = (struct fw_version *) (pos + 2);
-			LOG_D("ESP-Hosted Firmware version :: %s-%d.%d.%d.%d.%d",
-					fw_ver->project_name, fw_ver->major1, fw_ver->major2, fw_ver->minor,
-					fw_ver->revision_patch_1, fw_ver->revision_patch_2);
-		}
-		else
-		{
-			LOG_W("Unsupported tag in event: %d", *pos);
-		}
-		pos += (tag_len+2);
-		len_left -= (tag_len+2);
-	}
-
-	return STM_OK;
+        }
+        else if (*pos == ESP_PRIV_FW_DATA)
+        {
+            struct fw_version *fw_ver = (struct fw_version *) (pos + 2);
+            LOG_D("ESP-Hosted Firmware version :: %s-%d.%d.%d.%d.%d",
+                    fw_ver->project_name, fw_ver->major1, fw_ver->major2, fw_ver->minor,
+                    fw_ver->revision_patch_1, fw_ver->revision_patch_2);
+        }
+        else
+        {
+            LOG_W("Unsupported tag in event: %d", *pos);
+        }
+        pos += (tag_len+2);
+        len_left -= (tag_len+2);
+    }
+
+    return ESP_OK;
 }

+ 5 - 5
host/driver/transport/transport_drv.h

@@ -40,9 +40,9 @@ extern "C" {
 #define ESP_PRIV_FIRMWARE_CHIP_ESP32C6      (0xD)
 
 struct esp_private {
-	uint8_t     if_type;
-	uint8_t     if_num;
-	void        *netdev;
+    uint8_t     if_type;
+    uint8_t     if_num;
+    void        *netdev;
 };
 
 /* netdev APIs*/
@@ -58,8 +58,8 @@ void process_event(uint8_t *evt_buf, uint16_t len);
 void process_priv_communication(struct pbuf *pbuf);
 int process_init_event(uint8_t *evt_buf, uint8_t len);
 
-stm_ret_t send_to_slave(uint8_t iface_type, uint8_t iface_num,
-		uint8_t * wbuffer, uint16_t wlen);
+esp_ret send_to_slave(uint8_t iface_type, uint8_t iface_num,
+        uint8_t * wbuffer, uint16_t wlen);
 
 
 #ifdef __cplusplus

+ 2 - 2
host/port/include/platform_wrapper.h

@@ -165,7 +165,7 @@ int hosted_destroy_semaphore(void * semaphore_handle);
  *      NULL : on error
  */
 void *hosted_timer_start(int duration, int type,
-		void (*timeout_handler)(void const *), void *arg);
+        void (*timeout_handler)(void const *), void *arg);
 
 /* hosted_timer_stop is to stop timer
  * Input parameters
@@ -236,7 +236,7 @@ int serial_drv_write (struct serial_drv_handle_t* serial_drv_handle,
  */
 
 uint8_t * serial_drv_read(struct serial_drv_handle_t *serial_drv_handle,
-		uint32_t *out_nbyte);
+        uint32_t *out_nbyte);
 
 /*
  * serial_drv_close function closes driver interface.

+ 264 - 265
host/port/src/platform_wrapper.c

@@ -40,128 +40,127 @@ static serial_ll_handle_t * serial_ll_if_g;
 static void control_path_rx_indication(void);
 
 struct serial_drv_handle_t {
-	int handle; /* dummy variable */
+    int handle; /* dummy variable */
 };
 
 struct timer_handle_t {
-	rt_timer_t timer_id;
+    rt_timer_t timer_id;
 };
 
 int control_path_platform_init(void)
 {
-	/* control path semaphore */
-	readSemaphore = rt_sem_create("esp_rx", 0, RT_IPC_FLAG_PRIO);
-	assert(readSemaphore);
-
-	/* grab the semaphore, so that task will be mandated to wait on semaphore */
-	// if (rt_sem_take(readSemaphore , RT_WAITING_FOREVER) != RT_EOK) {
-	// 	LOG_E("could not obtain readSemaphore");
-	// 	return STM_FAIL;
-	// }
-#warning "control_path_platform_init"
-
-	serial_ll_if_g = serial_ll_init(control_path_rx_indication);
-	if (!serial_ll_if_g) {
-		LOG_E("Serial interface creation failed");
-		assert(serial_ll_if_g);
-		return STM_FAIL;
-	}
-	if (STM_OK != serial_ll_if_g->fops->open(serial_ll_if_g)) {
-		LOG_E("Serial interface open failed");
-		return STM_FAIL;
-	}
-	return STM_OK;
+    /* control path semaphore */
+    readSemaphore = rt_sem_create("esp_rx", 0, RT_IPC_FLAG_PRIO);
+    assert(readSemaphore);
+
+    /* grab the semaphore, so that task will be mandated to wait on semaphore */
+    // if (rt_sem_take(readSemaphore , RT_WAITING_FOREVER) != RT_EOK) {
+    //  LOG_E("could not obtain readSemaphore");
+    //  return ESP_FAIL;
+    // }
+
+    serial_ll_if_g = serial_ll_init(control_path_rx_indication);
+    if (!serial_ll_if_g) {
+        LOG_E("Serial interface creation failed");
+        assert(serial_ll_if_g);
+        return ESP_FAIL;
+    }
+    if (ESP_OK != serial_ll_if_g->fops->open(serial_ll_if_g)) {
+        LOG_E("Serial interface open failed");
+        return ESP_FAIL;
+    }
+    return ESP_OK;
 }
 
 int control_path_platform_deinit(void)
 {
-	if (STM_OK != serial_ll_if_g->fops->close(serial_ll_if_g)) {
-		LOG_E("Serial interface close failed");
-		return STM_FAIL;
-	}
-	return STM_OK;
+    if (ESP_OK != serial_ll_if_g->fops->close(serial_ll_if_g)) {
+        LOG_E("Serial interface close failed");
+        return ESP_FAIL;
+    }
+    return ESP_OK;
 }
 
 static void control_path_rx_indication(void)
 {
-	/* heads up to control path for read */
-	if(readSemaphore) {
-		rt_sem_release(readSemaphore);
-	}
+    /* heads up to control path for read */
+    if(readSemaphore) {
+        rt_sem_release(readSemaphore);
+    }
 }
 
 /* -------- Memory ---------- */
 void* hosted_malloc(size_t size)
 {
-	return rt_malloc(size);
+    return rt_malloc(size);
 }
 
 void* hosted_calloc(size_t blk_no, size_t size)
 {
-	return rt_calloc(blk_no, size);
+    return rt_calloc(blk_no, size);
 }
 
 void hosted_free(void* ptr)
 {
-	if(ptr) {
-		rt_free(ptr);
-		ptr=NULL;
-	}
+    if(ptr) {
+        rt_free(ptr);
+        ptr=NULL;
+    }
 }
 
 void *hosted_realloc(void *mem, size_t newsize)
 {
-	void *p = NULL;
-
-	if (newsize == 0) {
-		mem_free(mem);
-		return NULL;
-	}
-
-	p = hosted_malloc(newsize);
-	if (p) {
-		/* zero the memory */
-		if (mem != NULL) {
-			memcpy(p, mem, newsize);
-			mem_free(mem);
-		}
-	}
-	return p;
+    void *p = NULL;
+
+    if (newsize == 0) {
+        mem_free(mem);
+        return NULL;
+    }
+
+    p = hosted_malloc(newsize);
+    if (p) {
+        /* zero the memory */
+        if (mem != NULL) {
+            memcpy(p, mem, newsize);
+            mem_free(mem);
+        }
+    }
+    return p;
 }
 
 /* -------- Threads ---------- */
 void *hosted_thread_create(void (*start_routine)(void const *), void *arg)
 {
-	if (!start_routine) {
-		LOG_E("start_routine is mandatory for thread create");
-		return NULL;
-	}
+    if (!start_routine) {
+        LOG_E("start_routine is mandatory for thread create");
+        return NULL;
+    }
 
-	rt_thread_t thread = rt_thread_create("esp-hosted", (void(*)(void *))start_routine, arg, ESP_HOSTED_THREAD_STACK_SIZE, ESP_HOSTED_THREAD_PRIORITY, 10);
+    rt_thread_t thread = rt_thread_create("esp-hosted", (void(*)(void *))start_routine, arg, ESP_HOSTED_THREAD_STACK_SIZE, ESP_HOSTED_THREAD_PRIORITY, 10);
 
-	if (!thread) {
-		LOG_E("Failed to allocate thread handle");
-		return NULL;
-	}
+    if (!thread) {
+        LOG_E("Failed to allocate thread handle");
+        return NULL;
+    }
 
-	if (rt_thread_startup(thread) != RT_EOK) {
-		LOG_E("Failed to create ctrl path task");
-		rt_thread_delete(thread);
-		return NULL;
-	}
+    if (rt_thread_startup(thread) != RT_EOK) {
+        LOG_E("Failed to create ctrl path task");
+        rt_thread_delete(thread);
+        return NULL;
+    }
 
-	return thread;
+    return thread;
 }
 
 int hosted_thread_cancel(void *thread_handle)
 {
-	return rt_thread_suspend(thread_handle);
+    return rt_thread_suspend(thread_handle);
 }
 
 /* -------- Semaphores ---------- */
 void * hosted_create_semaphore(int init_value)
 {
-	return rt_sem_create("esp_ctrl", init_value, RT_IPC_FLAG_PRIO);
+    return rt_sem_create("esp_ctrl", init_value, RT_IPC_FLAG_PRIO);
 }
 
 unsigned int sleep(unsigned int seconds) {
@@ -176,197 +175,197 @@ unsigned int msleep(unsigned int mseconds) {
 
 int hosted_get_semaphore(void * semaphore_handle, int timeout)
 {
-	if (!semaphore_handle) {
-		LOG_E("Uninitialized semaphore");
-		return STM_FAIL;
-	}
-
-	if (timeout == HOSTED_SEM_NON_BLOCKING) {
-		/* non blocking */
-		return rt_sem_take(semaphore_handle, 0);
-	} else if (timeout == RT_WAITING_FOREVER) {
-		/* Blocking */
-		return rt_sem_take(semaphore_handle, RT_WAITING_FOREVER);
-	} else {
-		return rt_sem_take(semaphore_handle, rt_tick_from_millisecond(timeout * 1000));
-	}
+    if (!semaphore_handle) {
+        LOG_E("Uninitialized semaphore");
+        return ESP_FAIL;
+    }
+
+    if (timeout == HOSTED_SEM_NON_BLOCKING) {
+        /* non blocking */
+        return rt_sem_take(semaphore_handle, 0);
+    } else if (timeout == RT_WAITING_FOREVER) {
+        /* Blocking */
+        return rt_sem_take(semaphore_handle, RT_WAITING_FOREVER);
+    } else {
+        return rt_sem_take(semaphore_handle, rt_tick_from_millisecond(timeout * 1000));
+    }
 }
 
 int hosted_post_semaphore(void * semaphore_handle)
 {
-	if (!semaphore_handle) {
-		LOG_E("Uninitialized semaphore");
-		return STM_FAIL;
-	}
+    if (!semaphore_handle) {
+        LOG_E("Uninitialized semaphore");
+        return ESP_FAIL;
+    }
 
-	return rt_sem_release(semaphore_handle);
+    return rt_sem_release(semaphore_handle);
 }
 
 int hosted_destroy_semaphore(void * semaphore_handle)
 {
-	if (!semaphore_handle) {
-		LOG_E("Uninitialized semaphore");
-		return STM_FAIL;
-	}
-
-	if (rt_sem_delete(semaphore_handle) != RT_EOK)
-	{
-		LOG_E("Failed to destroy semaphore");
-		return STM_FAIL;
-	}
-
-	return STM_OK;
+    if (!semaphore_handle) {
+        LOG_E("Uninitialized semaphore");
+        return ESP_FAIL;
+    }
+
+    if (rt_sem_delete(semaphore_handle) != RT_EOK)
+    {
+        LOG_E("Failed to destroy semaphore");
+        return ESP_FAIL;
+    }
+
+    return ESP_OK;
 }
 /* -------- Timers  ---------- */
 int hosted_timer_stop(void *timer_handle)
 {
-	if (!timer_handle) {
-		LOG_E("Uninitialized timer handle");
-		return STM_FAIL;
-	}
-
-	if (rt_timer_stop(timer_handle) != RT_EOK)
-	{
-		LOG_E("Unable to stop timer");
-		return STM_FAIL;
-	}
-
-	if (rt_timer_delete(timer_handle) != RT_EOK)
-	{
-		LOG_E("Unable to delete timer");
-		return STM_FAIL;
-	}
-
-	return STM_OK;
+    if (!timer_handle) {
+        LOG_E("Uninitialized timer handle");
+        return ESP_FAIL;
+    }
+
+    if (rt_timer_stop(timer_handle) != RT_EOK)
+    {
+        LOG_E("Unable to stop timer");
+        return ESP_FAIL;
+    }
+
+    if (rt_timer_delete(timer_handle) != RT_EOK)
+    {
+        LOG_E("Unable to delete timer");
+        return ESP_FAIL;
+    }
+
+    return ESP_OK;
 }
 
 /* Sample timer_handler looks like this:
  *
  * void expired(union sigval timer_data){
  *     struct mystruct *a = timer_data.sival_ptr;
- * 	printf("Expired %u\n", a->mydata++);
+ *  printf("Expired %u\n", a->mydata++);
  * }
  **/
 
 void *hosted_timer_start(int duration, int type,
-		void (*timeout_handler)(void const *), void *arg)
+        void (*timeout_handler)(void const *), void *arg)
 {
-	rt_timer_t timer_handle = rt_timer_create("esp_ctrl", (void (*)(void *))timeout_handler, arg, 
-							rt_tick_from_millisecond(duration * 1000),
-							type);
-
-	if (timer_handle == NULL)
-	{
-		LOG_E("Failed to allocate timer handle");
-		return NULL;
-	}
-
-	if (rt_timer_start(timer_handle) != RT_EOK)
-	{
-		LOG_E("Failed to start timer, destroying timer");
-		rt_timer_delete(timer_handle);
-		return NULL;
-	}
-
-	return timer_handle;
+    rt_timer_t timer_handle = rt_timer_create("esp_ctrl", (void (*)(void *))timeout_handler, arg,
+                            rt_tick_from_millisecond(duration * 1000),
+                            type);
+
+    if (timer_handle == NULL)
+    {
+        LOG_E("Failed to allocate timer handle");
+        return NULL;
+    }
+
+    if (rt_timer_start(timer_handle) != RT_EOK)
+    {
+        LOG_E("Failed to start timer, destroying timer");
+        rt_timer_delete(timer_handle);
+        return NULL;
+    }
+
+    return timer_handle;
 }
 
 /* -------- Serial Drv ---------- */
 struct serial_drv_handle_t* serial_drv_open(const char *transport)
 {
-	static struct serial_drv_handle_t* serial_drv_handle = NULL;
-	
-	if (!transport) {
-		LOG_E("Invalid parameter in open ");
-		return NULL;
-	}
-
-	if (serial_drv_handle) {
-		LOG_D("return orig handle");
-		return serial_drv_handle;
-	}
-
-	serial_drv_handle = hosted_calloc(1,sizeof(struct serial_drv_handle_t));
-	if (!serial_drv_handle) {
-		LOG_E("Failed to allocate memory ");
-		return NULL;
-	}
-
-	return serial_drv_handle;
+    static struct serial_drv_handle_t* serial_drv_handle = NULL;
+
+    if (!transport) {
+        LOG_E("Invalid parameter in open ");
+        return NULL;
+    }
+
+    if (serial_drv_handle) {
+        LOG_D("return orig handle");
+        return serial_drv_handle;
+    }
+
+    serial_drv_handle = hosted_calloc(1,sizeof(struct serial_drv_handle_t));
+    if (!serial_drv_handle) {
+        LOG_E("Failed to allocate memory ");
+        return NULL;
+    }
+
+    return serial_drv_handle;
 }
 
 int serial_drv_write (struct serial_drv_handle_t* serial_drv_handle,
-	uint8_t* buf, int in_count, int* out_count)
+    uint8_t* buf, int in_count, int* out_count)
 {
-	int ret = 0;
-	if (!serial_drv_handle || !buf || !in_count || !out_count) {
-		LOG_E("Invalid parameters in write");
-		return STM_FAIL;
-	}
-
-	if( (!serial_ll_if_g) ||
-		(!serial_ll_if_g->fops) ||
-		(!serial_ll_if_g->fops->write)) {
-		LOG_E("serial interface not valid");
-		return STM_FAIL;
-	}
-
-	ret = serial_ll_if_g->fops->write(serial_ll_if_g, buf, in_count);
-	if (ret != STM_OK) {
-		*out_count = 0;
-		LOG_E("Failed to write data");
-		return STM_FAIL;
-	}
-
-	*out_count = in_count;
-	return STM_OK;
+    int ret = 0;
+    if (!serial_drv_handle || !buf || !in_count || !out_count) {
+        LOG_E("Invalid parameters in write");
+        return ESP_FAIL;
+    }
+
+    if( (!serial_ll_if_g) ||
+        (!serial_ll_if_g->fops) ||
+        (!serial_ll_if_g->fops->write)) {
+        LOG_E("serial interface not valid");
+        return ESP_FAIL;
+    }
+
+    ret = serial_ll_if_g->fops->write(serial_ll_if_g, buf, in_count);
+    if (ret != ESP_OK) {
+        *out_count = 0;
+        LOG_E("Failed to write data");
+        return ESP_FAIL;
+    }
+
+    *out_count = in_count;
+    return ESP_OK;
 }
 
 
 uint8_t * serial_drv_read(struct serial_drv_handle_t *serial_drv_handle,
-		uint32_t *out_nbyte)
+        uint32_t *out_nbyte)
 {
-	uint16_t init_read_len = 0;
-	uint16_t rx_buf_len = 0;
-	uint8_t* read_buf = NULL;
-	int ret = 0;
-	/* Any of `CTRL_EP_NAME_EVENT` and `CTRL_EP_NAME_RESP` could be used,
-	 * as both have same strlen in adapter.h */
-	const char* ep_name = CTRL_EP_NAME_RESP;
-	uint8_t *buf = NULL;
-	uint32_t buf_len = 0;
-
-
-	if (!serial_drv_handle || !out_nbyte) {
-		LOG_E("Invalid parameters in read");
-		return NULL;
-	}
-
-	*out_nbyte = 0;
-
-	if(!readSemaphore) {
-		LOG_E("Semaphore not initialized");
-		return NULL;
-	}
-	if (rt_sem_take(readSemaphore, HOSTED_SEM_BLOCKING) != RT_EOK) {
-		LOG_E("Failed to read data ");
-		return NULL;
-	}
-
-	if( (!serial_ll_if_g) ||
-		(!serial_ll_if_g->fops) ||
-		(!serial_ll_if_g->fops->read)) {
-		LOG_E("serial interface refusing to read");
-		return NULL;
-	}
-
-	/* Get buffer from serial interface */
-	read_buf = serial_ll_if_g->fops->read(serial_ll_if_g, &rx_buf_len);
-	if ((!read_buf) || (!rx_buf_len)) {
-		LOG_E("serial read failed");
-		return NULL;
-	}
-	print_hex_dump(read_buf, rx_buf_len, "Serial read data");
+    uint16_t init_read_len = 0;
+    uint16_t rx_buf_len = 0;
+    uint8_t* read_buf = NULL;
+    int ret = 0;
+    /* Any of `CTRL_EP_NAME_EVENT` and `CTRL_EP_NAME_RESP` could be used,
+     * as both have same strlen in adapter.h */
+    const char* ep_name = CTRL_EP_NAME_RESP;
+    uint8_t *buf = NULL;
+    uint32_t buf_len = 0;
+
+
+    if (!serial_drv_handle || !out_nbyte) {
+        LOG_E("Invalid parameters in read");
+        return NULL;
+    }
+
+    *out_nbyte = 0;
+
+    if(!readSemaphore) {
+        LOG_E("Semaphore not initialized");
+        return NULL;
+    }
+    if (rt_sem_take(readSemaphore, HOSTED_SEM_BLOCKING) != RT_EOK) {
+        LOG_E("Failed to read data ");
+        return NULL;
+    }
+
+    if( (!serial_ll_if_g) ||
+        (!serial_ll_if_g->fops) ||
+        (!serial_ll_if_g->fops->read)) {
+        LOG_E("serial interface refusing to read");
+        return NULL;
+    }
+
+    /* Get buffer from serial interface */
+    read_buf = serial_ll_if_g->fops->read(serial_ll_if_g, &rx_buf_len);
+    if ((!read_buf) || (!rx_buf_len)) {
+        LOG_E("serial read failed");
+        return NULL;
+    }
+    print_hex_dump(read_buf, rx_buf_len, "Serial read data");
 
 /*
  * Read Operation happens in two steps because total read length is unknown
@@ -388,62 +387,62 @@ uint8_t * serial_drv_read(struct serial_drv_handle_t *serial_drv_handle,
  *  int_read_len = 1 + 2 + Endpoint length + 1 + 2
  */
 
-	init_read_len = SIZE_OF_TYPE + SIZE_OF_LENGTH + strlen(ep_name) +
-		SIZE_OF_TYPE + SIZE_OF_LENGTH;
+    init_read_len = SIZE_OF_TYPE + SIZE_OF_LENGTH + strlen(ep_name) +
+        SIZE_OF_TYPE + SIZE_OF_LENGTH;
 
-	if(rx_buf_len < init_read_len) {
-		mem_free(read_buf);
-		LOG_E("Incomplete serial buff, return");
-		return NULL;
-	}
+    if(rx_buf_len < init_read_len) {
+        mem_free(read_buf);
+        LOG_E("Incomplete serial buff, return");
+        return NULL;
+    }
 
-	HOSTED_CALLOC(buf,init_read_len);
+    HOSTED_CALLOC(buf,init_read_len);
 
-	memcpy(buf, read_buf, init_read_len);
+    memcpy(buf, read_buf, init_read_len);
 
-	/* parse_tlv function returns variable payload length
-	 * of received data in buf_len
-	 **/
-	ret = parse_tlv(buf, &buf_len);
-	if (ret || !buf_len) {
-		mem_free(buf);
-		LOG_E("Failed to parse RX data ");
-		goto free_bufs;
-	}
+    /* parse_tlv function returns variable payload length
+     * of received data in buf_len
+     **/
+    ret = parse_tlv(buf, &buf_len);
+    if (ret || !buf_len) {
+        mem_free(buf);
+        LOG_E("Failed to parse RX data ");
+        goto free_bufs;
+    }
 
-	if (rx_buf_len < (init_read_len + buf_len)) {
-		LOG_E("Buf read on serial iface is smaller than expected len");
-		mem_free(buf);
-		goto free_bufs;
-	}
+    if (rx_buf_len < (init_read_len + buf_len)) {
+        LOG_E("Buf read on serial iface is smaller than expected len");
+        mem_free(buf);
+        goto free_bufs;
+    }
 
-	mem_free(buf);
+    mem_free(buf);
 /*
  * (2) Read variable length of RX data:
  */
-	HOSTED_CALLOC(buf,buf_len);
+    HOSTED_CALLOC(buf,buf_len);
 
-	memcpy((buf), read_buf+init_read_len, buf_len);
+    memcpy((buf), read_buf+init_read_len, buf_len);
 
-	mem_free(read_buf);
+    mem_free(read_buf);
 
-	*out_nbyte = buf_len;
-	return buf;
+    *out_nbyte = buf_len;
+    return buf;
 
 free_bufs:
-	mem_free(read_buf);
-	mem_free(buf);
-	return NULL;
+    mem_free(read_buf);
+    mem_free(buf);
+    return NULL;
 }
 
 int serial_drv_close(struct serial_drv_handle_t** serial_drv_handle)
 {
-	if (!serial_drv_handle || !(*serial_drv_handle)) {
-		LOG_E("Invalid parameter in close");
-		if (serial_drv_handle)
-			mem_free(serial_drv_handle);
-		return STM_FAIL;
-	}
-	mem_free(*serial_drv_handle);
-	return STM_OK;
+    if (!serial_drv_handle || !(*serial_drv_handle)) {
+        LOG_E("Invalid parameter in close");
+        if (serial_drv_handle)
+            mem_free(serial_drv_handle);
+        return ESP_FAIL;
+    }
+    mem_free(*serial_drv_handle);
+    return ESP_OK;
 }

+ 124 - 124
host/virtual_serial_if/src/serial_if.c

@@ -44,119 +44,119 @@ struct serial_drv_handle_t* serial_handle = NULL;
 
 uint16_t compose_tlv(uint8_t* buf, uint8_t* data, uint16_t data_length)
 {
-	char* ep_name = CTRL_EP_NAME_RESP;
-	uint16_t ep_length = strlen(ep_name);
-	uint16_t count = 0;
-	buf[count] = PROTO_PSER_TLV_T_EPNAME;
-	count++;
-	buf[count] = (ep_length & 0xFF);
-	count++;
-	buf[count] = ((ep_length >> 8) & 0xFF);
-	count++;
-	strncpy((char *)&buf[count], ep_name, ep_length);
-	count = count + ep_length;
-	buf[count]= PROTO_PSER_TLV_T_DATA;
-	count++;
-	buf[count] = (data_length & 0xFF);
-	count++;
-	buf[count] = ((data_length >> 8) & 0xFF);
-	count++;
-	memcpy(&buf[count], data, data_length);
-	count = count + data_length;
-	return count;
+    char* ep_name = CTRL_EP_NAME_RESP;
+    uint16_t ep_length = strlen(ep_name);
+    uint16_t count = 0;
+    buf[count] = PROTO_PSER_TLV_T_EPNAME;
+    count++;
+    buf[count] = (ep_length & 0xFF);
+    count++;
+    buf[count] = ((ep_length >> 8) & 0xFF);
+    count++;
+    strncpy((char *)&buf[count], ep_name, ep_length);
+    count = count + ep_length;
+    buf[count]= PROTO_PSER_TLV_T_DATA;
+    count++;
+    buf[count] = (data_length & 0xFF);
+    count++;
+    buf[count] = ((data_length >> 8) & 0xFF);
+    count++;
+    memcpy(&buf[count], data, data_length);
+    count = count + data_length;
+    return count;
 }
 
 uint8_t parse_tlv(uint8_t* data, uint32_t* pro_len)
 {
-	char* ep_name = CTRL_EP_NAME_RESP;
-	char* ep_name2 = CTRL_EP_NAME_EVENT;
-	uint64_t len = 0;
-	uint16_t val_len = 0;
-	if (data[len] == PROTO_PSER_TLV_T_EPNAME) {
-		len++;
-		val_len = data[len];
-		len++;
-		val_len = (data[len] << 8) + val_len;
-		len++;
-		/* Both CTRL_EP_NAME_RESP and CTRL_EP_NAME_EVENT
-		 * are expected to have exactly same length
-		 **/
-		if (val_len == strlen(ep_name)) {
-			if ((strncmp((char* )&data[len],ep_name,strlen(ep_name)) == 0) ||
-			    (strncmp((char* )&data[len],ep_name2,strlen(ep_name2)) == 0)) {
-				len = len + strlen(ep_name);
-				if (data[len] == PROTO_PSER_TLV_T_DATA) {
-					len++;
-					val_len = data[len];
-					len++;
-					val_len = (data[len] << 8) + val_len;
-					len++;
-					*pro_len = val_len;
-					return SUCCESS;
-				} else {
-					command_log("Data Type not matched, exp %d, recvd %d\n",
-							PROTO_PSER_TLV_T_DATA, data[len]);
-				}
-			} else {
-				command_log("Endpoint Name not matched, exp [%s] or [%s], recvd [%s]\n",
-						ep_name, ep_name2, (char* )&data[len]);
-			}
-		} else {
-			command_log("Endpoint length not matched, exp [For %s, %lu OR For %s, %lu], recvd %d\n",
-					ep_name, (long unsigned int)(strlen(ep_name)),
-					ep_name2, (long unsigned int)(strlen(ep_name2)), val_len);
-		}
-	} else {
-		command_log("Endpoint type not matched, exp %d, recvd %d\n",
-				PROTO_PSER_TLV_T_EPNAME, data[len]);
-	}
-	
-	return (uint8_t)FAILURE;
+    char* ep_name = CTRL_EP_NAME_RESP;
+    char* ep_name2 = CTRL_EP_NAME_EVENT;
+    uint64_t len = 0;
+    uint16_t val_len = 0;
+    if (data[len] == PROTO_PSER_TLV_T_EPNAME) {
+        len++;
+        val_len = data[len];
+        len++;
+        val_len = (data[len] << 8) + val_len;
+        len++;
+        /* Both CTRL_EP_NAME_RESP and CTRL_EP_NAME_EVENT
+         * are expected to have exactly same length
+         **/
+        if (val_len == strlen(ep_name)) {
+            if ((strncmp((char* )&data[len],ep_name,strlen(ep_name)) == 0) ||
+                (strncmp((char* )&data[len],ep_name2,strlen(ep_name2)) == 0)) {
+                len = len + strlen(ep_name);
+                if (data[len] == PROTO_PSER_TLV_T_DATA) {
+                    len++;
+                    val_len = data[len];
+                    len++;
+                    val_len = (data[len] << 8) + val_len;
+                    len++;
+                    *pro_len = val_len;
+                    return SUCCESS;
+                } else {
+                    command_log("Data Type not matched, exp %d, recvd %d\n",
+                            PROTO_PSER_TLV_T_DATA, data[len]);
+                }
+            } else {
+                command_log("Endpoint Name not matched, exp [%s] or [%s], recvd [%s]\n",
+                        ep_name, ep_name2, (char* )&data[len]);
+            }
+        } else {
+            command_log("Endpoint length not matched, exp [For %s, %lu OR For %s, %lu], recvd %d\n",
+                    ep_name, (long unsigned int)(strlen(ep_name)),
+                    ep_name2, (long unsigned int)(strlen(ep_name2)), val_len);
+        }
+    } else {
+        command_log("Endpoint type not matched, exp %d, recvd %d\n",
+                PROTO_PSER_TLV_T_EPNAME, data[len]);
+    }
+
+    return (uint8_t)FAILURE;
 }
 
 int transport_pserial_close(void)
 {
-	int ret = serial_drv_close(&serial_handle);
-	if (ret) {
-		command_log("Failed to close driver interface\n");
-		return FAILURE;
-	}
-	serial_handle = NULL;
-	return ret;
+    int ret = serial_drv_close(&serial_handle);
+    if (ret) {
+        command_log("Failed to close driver interface\n");
+        return FAILURE;
+    }
+    serial_handle = NULL;
+    return ret;
 }
 
 int transport_pserial_open(void)
 {
-	int ret = SUCCESS;
-	const char* transport = SERIAL_IF_FILE;
-
-	if (serial_handle) {
-		printf("Already opened returned\n");
-		return ret;
-	}
-
-	serial_handle = serial_drv_open(transport);
-	if (!serial_handle) {
-		printf("serial interface open failed, Is the driver loaded?\n");
-		return FAILURE;
-	}
-
-	ret = control_path_platform_init();
-	if (ret != SUCCESS) {
-		printf("Platform init failed\n");
-		transport_pserial_close();
-	}
-
-	return ret;
+    int ret = SUCCESS;
+    const char* transport = SERIAL_IF_FILE;
+
+    if (serial_handle) {
+        printf("Already opened returned\n");
+        return ret;
+    }
+
+    serial_handle = serial_drv_open(transport);
+    if (!serial_handle) {
+        printf("serial interface open failed, Is the driver loaded?\n");
+        return FAILURE;
+    }
+
+    ret = control_path_platform_init();
+    if (ret != SUCCESS) {
+        printf("Platform init failed\n");
+        transport_pserial_close();
+    }
+
+    return ret;
 }
 
 
 int transport_pserial_send(uint8_t* data, uint16_t data_length)
 {
-	char* ep_name = CTRL_EP_NAME_RESP;
-	int count = 0, ret = 0;
-	uint16_t buf_len = 0;
-	uint8_t *write_buf = NULL;
+    char* ep_name = CTRL_EP_NAME_RESP;
+    int count = 0, ret = 0;
+    uint16_t buf_len = 0;
+    uint8_t *write_buf = NULL;
 
 /*
  * TLV (Type - Length - Value) structure is as follows:
@@ -169,38 +169,38 @@ int transport_pserial_send(uint8_t* data, uint16_t data_length)
  *       1        |        2        | Endpoint length |     1     |      2      | Data length |
  * --------------------------------------------------------------------------------------------
  */
-	buf_len = SIZE_OF_TYPE + SIZE_OF_LENGTH + strlen(ep_name) +
-		SIZE_OF_TYPE + SIZE_OF_LENGTH + data_length;
-
-	HOSTED_CALLOC(write_buf,buf_len);
-
-	if (!serial_handle) {
-		command_log("Serial connection closed?\n");
-		goto free_bufs;
-	}
-
-	count = compose_tlv(write_buf, data, data_length);
-	if (!count) {
-		command_log("Failed to compose TX data\n");
-		goto free_bufs;
-	}
-
-	ret = serial_drv_write(serial_handle, write_buf, count, &count);
-	if (ret != SUCCESS) {
-		command_log("Failed to write TX data\n");
-		goto free_bufs;
-	}
-	return SUCCESS;
+    buf_len = SIZE_OF_TYPE + SIZE_OF_LENGTH + strlen(ep_name) +
+        SIZE_OF_TYPE + SIZE_OF_LENGTH + data_length;
+
+    HOSTED_CALLOC(write_buf,buf_len);
+
+    if (!serial_handle) {
+        command_log("Serial connection closed?\n");
+        goto free_bufs;
+    }
+
+    count = compose_tlv(write_buf, data, data_length);
+    if (!count) {
+        command_log("Failed to compose TX data\n");
+        goto free_bufs;
+    }
+
+    ret = serial_drv_write(serial_handle, write_buf, count, &count);
+    if (ret != SUCCESS) {
+        command_log("Failed to write TX data\n");
+        goto free_bufs;
+    }
+    return SUCCESS;
 free_bufs:
-	if (write_buf) {
-		mem_free(write_buf);
-	}
+    if (write_buf) {
+        mem_free(write_buf);
+    }
 
-	return FAILURE;
+    return FAILURE;
 }
 
 uint8_t * transport_pserial_read(uint32_t *out_nbyte)
 {
-	/* Two step parsing TLV is moved in serial_drv_read */
-	return serial_drv_read(serial_handle, out_nbyte);
+    /* Two step parsing TLV is moved in serial_drv_read */
+    return serial_drv_read(serial_handle, out_nbyte);
 }

+ 0 - 57
sample/esp-hosted_port.c

@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2006-2024, Evlers Developers
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date         Author      Notes
- * 2024-01-11   Evlers      first implementation
- */
-
-#include <rtthread.h>
-
-#if defined(RT_USING_ESP_HOSTED) && defined(ESP_HOSTED_USING_SAMPLE)
-#include <rtdevice.h>
-#include <drv_spi.h>
-#include <board.h>
-
-
-extern int rt_hw_esp_wlan_init (void);
-
-static void esp_hosted_init (void *parameter)
-{
-    /* reset esp32 chip */
-    rt_pin_mode(ESP_HOSTED_RESET_PIN, PIN_MODE_OUTPUT);
-    rt_pin_write(ESP_HOSTED_RESET_PIN, PIN_LOW);
-    rt_thread_mdelay(50);
-    rt_pin_write(ESP_HOSTED_RESET_PIN, PIN_HIGH);
-    
-    /* stop spi transactions short time to avoid slave sync issues */
-	rt_thread_mdelay(50);
-
-    /* attach spi device */
-    rt_hw_spi_device_attach(ESP_HOSTED_SPI_BUS_NAME, ESP_HOSTED_SPI_DEVICE_NAME, ESP_HOSTED_SPI_CS_PIN);
-
-    /* Initialize the esp-hosted */
-    rt_hw_esp_wlan_init();
-}
-
-int esp_spi_device_init (void)
-{
-#ifdef ESP_HOSTED_THREAD_INIT
-    /* Use thread initialization */
-    rt_thread_t init_thread = rt_thread_create("esp_init", esp_hosted_init, NULL, 
-                                                ESP_HOSTED_INIT_THREAD_STACK_SIZE, ESP_HOSTED_INIT_THREAD_PRIORITY, 20);
-    RT_ASSERT(init_thread != NULL);
-    rt_thread_startup(init_thread);
-#else
-    /* Thread initialization is not used */
-    esp_hosted_init(NULL);
-#endif
-
-    return RT_EOK;
-}
-INIT_APP_EXPORT(esp_spi_device_init);
-
-
-#endif /* defined(RT_USING_ESP_HOSTED) && defined(ESP_HOSTED_USING_SAMPLE) */

+ 436 - 407
wlan/esp_wlan.c

@@ -1,12 +1,11 @@
 /*
- * Copyright (c) 2006-2023, Evlers Developers
+ * Copyright (c) 2006-2024 Evlers Developers
  *
  * SPDX-License-Identifier: Apache-2.0
  *
  * Change Logs:
  * Date         Author      Notes
  * 2024-01-04   Evlers      first implementation
- * 2024-01-11	Evlers		removed the hardware initialization code
  */
 
 #include <stdint.h>
@@ -25,14 +24,14 @@
 
 struct event_callback_table
 {
-	int event;
-	ctrl_resp_cb_t fun;
+    int event;
+    ctrl_resp_cb_t fun;
 };
 
 struct drv_wifi
 {
     struct rt_wlan_device *wlan;
-	struct network_handle *net;
+    struct network_handle *net;
 };
 
 static rt_sem_t sem_esp_init;
@@ -43,137 +42,137 @@ static struct drv_wifi wifi_sta, wifi_ap;
 
 static void ctrl_cmd_default_req (ctrl_cmd_t *req)
 {
-	memset(req, 0, sizeof(ctrl_cmd_t));
-	req->msg_type = CTRL_REQ;
-	req->ctrl_resp_cb = NULL;
-	req->cmd_timeout_sec = DEFAULT_CTRL_RESP_TIMEOUT;
+    memset(req, 0, sizeof(ctrl_cmd_t));
+    req->msg_type = CTRL_REQ;
+    req->ctrl_resp_cb = NULL;
+    req->cmd_timeout_sec = DEFAULT_CTRL_RESP_TIMEOUT;
 }
 
 static void free_ctrl_resp_msg (ctrl_cmd_t *resp)
 {
-	if (resp == NULL) return ;
+    if (resp == NULL) return ;
 
-	if (resp->free_buffer_handle != NULL && resp->free_buffer_func != NULL)
-	{
-		resp->free_buffer_func(resp->free_buffer_handle);
-		resp->free_buffer_handle = NULL;
+    if (resp->free_buffer_handle != NULL && resp->free_buffer_func != NULL)
+    {
+        resp->free_buffer_func(resp->free_buffer_handle);
+        resp->free_buffer_handle = NULL;
     }
 
-	free(resp);
+    free(resp);
 }
 
 static int get_response_result(ctrl_cmd_t * resp)
 {
-	int ret = SUCCESS;
-
-	if (!resp || (resp->msg_type != CTRL_RESP))
-	{
-		if (resp)
-		{
-			LOG_E("Msg type is not response[%u]", resp->msg_type);
-		}
-		ret = FAILURE;
-		goto __exit;
-	}
-
-	if ((resp->msg_id <= CTRL_RESP_BASE) || (resp->msg_id >= CTRL_RESP_MAX))
-	{
-		LOG_E("Response Msg ID[%u] is not correct",resp->msg_id);
-		ret = FAILURE;
-		goto __exit;
-	}
-
-	if (resp->resp_event_status != SUCCESS) {
-		LOG_E("Error reported: %08X", resp->resp_event_status);
-		ret = FAILURE;
-		goto __exit;
-	}
-
-	__exit:
-	return ret;
+    int ret = SUCCESS;
+
+    if (!resp || (resp->msg_type != CTRL_RESP))
+    {
+        if (resp)
+        {
+            LOG_E("Msg type is not response[%u]", resp->msg_type);
+        }
+        ret = FAILURE;
+        goto __exit;
+    }
+
+    if ((resp->msg_id <= CTRL_RESP_BASE) || (resp->msg_id >= CTRL_RESP_MAX))
+    {
+        LOG_E("Response Msg ID[%u] is not correct",resp->msg_id);
+        ret = FAILURE;
+        goto __exit;
+    }
+
+    if (resp->resp_event_status != SUCCESS) {
+        LOG_E("Error reported: %08X", resp->resp_event_status);
+        ret = FAILURE;
+        goto __exit;
+    }
+
+    __exit:
+    return ret;
 }
 
 static int sync_response_result(ctrl_cmd_t *resp)
 {
-	int ret = get_response_result(resp);
-	free_ctrl_resp_msg(resp);
-	return ret;
+    int ret = get_response_result(resp);
+    free_ctrl_resp_msg(resp);
+    return ret;
 }
 
 static int esp_ctrl_event_callback (ctrl_cmd_t * event)
 {
-	if (!event || (event->msg_type != CTRL_EVENT))
-	{
-		if (event)
-			LOG_E("Msg type is not event[%u]",event->msg_type);
-		goto fail_parsing;
-	}
-
-	if ((event->msg_id <= CTRL_EVENT_BASE) || (event->msg_id >= CTRL_EVENT_MAX))
-	{
-		LOG_E("Event Msg ID[%u] is not correct",event->msg_id);
-		goto fail_parsing;
-	}
-
-	switch(event->msg_id)
-	{
-		case CTRL_EVENT_ESP_INIT:
-			LOG_D("App EVENT: ESP INIT");
-			rt_sem_release(sem_esp_init);
-			break;
-
-		case CTRL_EVENT_HEARTBEAT:
-			LOG_D("App EVENT: Heartbeat event [%lu]", event->u.e_heartbeat.hb_num);
-			break;
-
-		case CTRL_EVENT_STATION_DISCONNECT_FROM_AP:
-			LOG_D("App EVENT: Station mode: Disconnect Reason[%u]", event->resp_event_status);
-			rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_DISCONNECT, RT_NULL);
-			break;
-
-		case CTRL_EVENT_STATION_DISCONNECT_FROM_ESP_SOFTAP:
-		{
-			char *p = event->u.e_sta_disconn.bssid;
-			if (p && strlen(p)) {
-				LOG_D("App EVENT: SoftAP mode: Disconnect MAC[%s]", p);
-			}
-		}
-			break;
-
-		default:
-			LOG_D("Invalid event[%u] to parse", event->msg_id);
-			break;
-	}
-	free_ctrl_resp_msg(event);
-	return SUCCESS;
+    if (!event || (event->msg_type != CTRL_EVENT))
+    {
+        if (event)
+            LOG_E("Msg type is not event[%u]",event->msg_type);
+        goto fail_parsing;
+    }
+
+    if ((event->msg_id <= CTRL_EVENT_BASE) || (event->msg_id >= CTRL_EVENT_MAX))
+    {
+        LOG_E("Event Msg ID[%u] is not correct",event->msg_id);
+        goto fail_parsing;
+    }
+
+    switch(event->msg_id)
+    {
+        case CTRL_EVENT_ESP_INIT:
+            LOG_D("App EVENT: ESP INIT");
+            rt_sem_release(sem_esp_init);
+            break;
+
+        case CTRL_EVENT_HEARTBEAT:
+            LOG_D("App EVENT: Heartbeat event [%lu]", event->u.e_heartbeat.hb_num);
+            break;
+
+        case CTRL_EVENT_STATION_DISCONNECT_FROM_AP:
+            LOG_D("App EVENT: Station mode: Disconnect Reason[%u]", event->resp_event_status);
+            rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_DISCONNECT, RT_NULL);
+            break;
+
+        case CTRL_EVENT_STATION_DISCONNECT_FROM_ESP_SOFTAP:
+        {
+            char *p = event->u.e_sta_disconn.bssid;
+            if (p && strlen(p)) {
+                LOG_D("App EVENT: SoftAP mode: Disconnect MAC[%s]", p);
+            }
+        }
+            break;
+
+        default:
+            LOG_D("Invalid event[%u] to parse", event->msg_id);
+            break;
+    }
+    free_ctrl_resp_msg(event);
+    return SUCCESS;
 
 fail_parsing:
-	free_ctrl_resp_msg(event);
-	return FAILURE;
+    free_ctrl_resp_msg(event);
+    return FAILURE;
 }
 
 static int register_esp_event_callbacks(void)
 {
-	int ret = SUCCESS;
-
-	struct event_callback_table events[] =
-	{
-		{ CTRL_EVENT_ESP_INIT,                           esp_ctrl_event_callback },
-		{ CTRL_EVENT_HEARTBEAT,                          esp_ctrl_event_callback },
-		{ CTRL_EVENT_STATION_DISCONNECT_FROM_AP,         esp_ctrl_event_callback },
-		{ CTRL_EVENT_STATION_DISCONNECT_FROM_ESP_SOFTAP, esp_ctrl_event_callback },
-	};
-
-	for (uint8_t i = 0; i < sizeof(events) / sizeof(struct event_callback_table); i ++)
-	{
-		if (CALLBACK_SET_SUCCESS != set_event_callback(events[i].event, events[i].fun) )
-		{
-			LOG_E("event callback register failed for event[%u]", events[i].event);
-			ret = FAILURE;
-			break;
-		}
-	}
-	return ret;
+    int ret = SUCCESS;
+
+    struct event_callback_table events[] =
+    {
+        { CTRL_EVENT_ESP_INIT,                           esp_ctrl_event_callback },
+        { CTRL_EVENT_HEARTBEAT,                          esp_ctrl_event_callback },
+        { CTRL_EVENT_STATION_DISCONNECT_FROM_AP,         esp_ctrl_event_callback },
+        { CTRL_EVENT_STATION_DISCONNECT_FROM_ESP_SOFTAP, esp_ctrl_event_callback },
+    };
+
+    for (uint8_t i = 0; i < sizeof(events) / sizeof(struct event_callback_table); i ++)
+    {
+        if (CALLBACK_SET_SUCCESS != set_event_callback(events[i].event, events[i].fun) )
+        {
+            LOG_E("event callback register failed for event[%u]", events[i].event);
+            ret = FAILURE;
+            break;
+        }
+    }
+    return ret;
 }
 
 /**
@@ -183,25 +182,25 @@ static int register_esp_event_callbacks(void)
   */
 static void transport_driver_event_handler(uint8_t event)
 {
-	switch (event)
-	{
-		case TRANSPORT_ACTIVE:
-			/* Initiate control path now */
+    switch (event)
+    {
+        case TRANSPORT_ACTIVE:
+            /* Initiate control path now */
             if (init_hosted_control_lib())
             {
                 LOG_E("Init hosted control lib failed");
                 return;
             }
 
-			LOG_D("Base transport is set-up");
+            LOG_D("Base transport is set-up");
 
             register_esp_event_callbacks();
 
-			break;
-		
-		default:
-			break;
-	}
+            break;
+
+        default:
+            break;
+    }
 }
 
 
@@ -213,7 +212,7 @@ rt_inline struct drv_wifi *get_drv_wifi(struct rt_wlan_device *wlan)
     {
         return &wifi_sta;
     }
-    
+
     if (wlan == wifi_ap.wlan)
     {
         return &wifi_ap;
@@ -224,28 +223,28 @@ rt_inline struct drv_wifi *get_drv_wifi(struct rt_wlan_device *wlan)
 
 static rt_wlan_security_t security_esp_to_wlan (int encryption_mode)
 {
-	switch (encryption_mode)
-	{
-		case WIFI_AUTH_OPEN: 			return SECURITY_OPEN;
-		case WIFI_AUTH_WEP:				return SECURITY_WEP_PSK;
-		case WIFI_AUTH_WPA_PSK:			return SECURITY_WPA_AES_PSK;
-		case WIFI_AUTH_WPA2_PSK:		return SECURITY_WPA2_AES_PSK;
-		case WIFI_AUTH_WPA_WPA2_PSK:	return SECURITY_WPA2_AES_PSK;
-		case WIFI_AUTH_WPA2_WPA3_PSK:	return SECURITY_WPA2_AES_PSK;
-		default: 						return SECURITY_UNKNOWN;
-	}
+    switch (encryption_mode)
+    {
+        case WIFI_AUTH_OPEN:            return SECURITY_OPEN;
+        case WIFI_AUTH_WEP:             return SECURITY_WEP_PSK;
+        case WIFI_AUTH_WPA_PSK:         return SECURITY_WPA_AES_PSK;
+        case WIFI_AUTH_WPA2_PSK:        return SECURITY_WPA2_AES_PSK;
+        case WIFI_AUTH_WPA_WPA2_PSK:    return SECURITY_WPA2_AES_PSK;
+        case WIFI_AUTH_WPA2_WPA3_PSK:   return SECURITY_WPA2_AES_PSK;
+        default:                        return SECURITY_UNKNOWN;
+    }
 }
 
 static int security_wlan_to_esp (rt_wlan_security_t security)
 {
-	switch (security)
-	{
-		case SECURITY_OPEN:			return WIFI_AUTH_OPEN;
-		case SECURITY_WEP_PSK:		return WIFI_AUTH_WEP;
-		case SECURITY_WPA_AES_PSK:	return WIFI_AUTH_WPA_PSK;
-		case SECURITY_WPA2_AES_PSK:	return WIFI_AUTH_WPA2_PSK;
-		default:					return WIFI_AUTH_WPA2_PSK;
-	}
+    switch (security)
+    {
+        case SECURITY_OPEN:         return WIFI_AUTH_OPEN;
+        case SECURITY_WEP_PSK:      return WIFI_AUTH_WEP;
+        case SECURITY_WPA_AES_PSK:  return WIFI_AUTH_WPA_PSK;
+        case SECURITY_WPA2_AES_PSK: return WIFI_AUTH_WPA2_PSK;
+        default:                    return WIFI_AUTH_WPA2_PSK;
+    }
 }
 
 static rt_err_t drv_wlan_init(struct rt_wlan_device *wlan)
@@ -255,269 +254,269 @@ static rt_err_t drv_wlan_init(struct rt_wlan_device *wlan)
 
 static rt_err_t drv_wlan_mode(struct rt_wlan_device *wlan, rt_wlan_mode_t mode)
 {
-	return RT_EOK;
+    return RT_EOK;
 }
 
 static int esp_scan_callback(ctrl_cmd_t * resp)
 {
-	if (get_response_result(resp) != RT_EOK)
-	{
-		LOG_E("wifi scan failed!");
-		goto __finish_resp;
-	}
-
-	if (resp->msg_id == CTRL_RESP_GET_AP_SCAN_LIST)
-	{
-		wifi_ap_scan_list_t * w_scan_p = &resp->u.wifi_ap_scan;
-		wifi_scanlist_t *list = w_scan_p->out_list;
-
-		if (!w_scan_p->count)
-		{
-			LOG_D("No AP found");
-			goto __finish_resp;
-		}
-
-		if (!list)
-		{
-			LOG_E("Failed to get scanned AP list");
-			goto __fail_resp;
-		}
-		else
-		{
-			LOG_D("Number of available APs is %d", w_scan_p->count);
-
-			for (uint16_t i = 0; i < w_scan_p->count; i ++)
-			{
-				struct rt_wlan_info wlan_info;
-    			struct rt_wlan_buff buff;
-
-				rt_memset(&wlan_info, 0, sizeof(wlan_info));
-
-				convert_mac_to_bytes(wlan_info.bssid, (const char *)list[i].bssid);
-				wlan_info.ssid.len = min(strlen((const char *)list[i].ssid), sizeof(wlan_info.ssid.val));
-				rt_memcpy(wlan_info.ssid.val, list[i].ssid, wlan_info.ssid.len);
-
-				if (wlan_info.ssid.len)
-					wlan_info.hidden = 0;
-				else
-					wlan_info.hidden = 1;
-
-				wlan_info.channel = (rt_int16_t)list[i].channel;
-				wlan_info.rssi = list[i].rssi;
-
-				wlan_info.datarate = 0;
-				wlan_info.band = RT_802_11_BAND_2_4GHZ;
-
-				wlan_info.security = security_esp_to_wlan(list[i].encryption_mode);
-
-				buff.data = &wlan_info;
-				buff.len = sizeof(wlan_info);
-
-				rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_REPORT, &buff);
-
-				LOG_D("%d) ssid \"%s\" bssid \"%s\" rssi \"%d\" channel \"%d\" auth mode \"%d\" ",\
-						i, list[i].ssid, list[i].bssid, list[i].rssi,
-						list[i].channel, list[i].encryption_mode);
-			}
-
-			rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL);
-		}
-	}
-	else
-	{
-		goto __fail_resp;
-	}
-
-	__finish_resp:
-	rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL);
-	free_ctrl_resp_msg(resp);
-	return SUCCESS;
-
-	__fail_resp:
-	rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL);
-	free_ctrl_resp_msg(resp);
-	return FAILURE;
+    if (get_response_result(resp) != RT_EOK)
+    {
+        LOG_E("wifi scan failed!");
+        goto __finish_resp;
+    }
+
+    if (resp->msg_id == CTRL_RESP_GET_AP_SCAN_LIST)
+    {
+        wifi_ap_scan_list_t * w_scan_p = &resp->u.wifi_ap_scan;
+        wifi_scanlist_t *list = w_scan_p->out_list;
+
+        if (!w_scan_p->count)
+        {
+            LOG_D("No AP found");
+            goto __finish_resp;
+        }
+
+        if (!list)
+        {
+            LOG_E("Failed to get scanned AP list");
+            goto __fail_resp;
+        }
+        else
+        {
+            LOG_D("Number of available APs is %d", w_scan_p->count);
+
+            for (uint16_t i = 0; i < w_scan_p->count; i ++)
+            {
+                struct rt_wlan_info wlan_info;
+                struct rt_wlan_buff buff;
+
+                rt_memset(&wlan_info, 0, sizeof(wlan_info));
+
+                convert_mac_to_bytes(wlan_info.bssid, (const char *)list[i].bssid);
+                wlan_info.ssid.len = min(strlen((const char *)list[i].ssid), sizeof(wlan_info.ssid.val));
+                rt_memcpy(wlan_info.ssid.val, list[i].ssid, wlan_info.ssid.len);
+
+                if (wlan_info.ssid.len)
+                    wlan_info.hidden = 0;
+                else
+                    wlan_info.hidden = 1;
+
+                wlan_info.channel = (rt_int16_t)list[i].channel;
+                wlan_info.rssi = list[i].rssi;
+
+                wlan_info.datarate = 0;
+                wlan_info.band = RT_802_11_BAND_2_4GHZ;
+
+                wlan_info.security = security_esp_to_wlan(list[i].encryption_mode);
+
+                buff.data = &wlan_info;
+                buff.len = sizeof(wlan_info);
+
+                rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_REPORT, &buff);
+
+                LOG_D("%d) ssid \"%s\" bssid \"%s\" rssi \"%d\" channel \"%d\" auth mode \"%d\" ",\
+                        i, list[i].ssid, list[i].bssid, list[i].rssi,
+                        list[i].channel, list[i].encryption_mode);
+            }
+
+            rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL);
+        }
+    }
+    else
+    {
+        goto __fail_resp;
+    }
+
+    __finish_resp:
+    rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL);
+    free_ctrl_resp_msg(resp);
+    return SUCCESS;
+
+    __fail_resp:
+    rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL);
+    free_ctrl_resp_msg(resp);
+    return FAILURE;
 }
 
 static rt_err_t drv_wlan_scan(struct rt_wlan_device *wlan, struct rt_scan_info *scan_info)
 {
-	ctrl_cmd_t req;
+    ctrl_cmd_t req;
 
-	ctrl_cmd_default_req(&req);
-	req.cmd_timeout_sec = 300;
-	req.ctrl_resp_cb = esp_scan_callback;
+    ctrl_cmd_default_req(&req);
+    req.cmd_timeout_sec = 300;
+    req.ctrl_resp_cb = esp_scan_callback;
 
-	wifi_ap_scan_list(req);
+    wifi_ap_scan_list(req);
 
-	return RT_EOK;
+    return RT_EOK;
 }
 
 static int esp_join_callback(ctrl_cmd_t * resp)
 {
-	rt_err_t ret;
-
-	if ((ret = get_response_result(resp)) != SUCCESS)
-	{
-		LOG_E("wifi scan failed!");
-		goto __exit;
-	}
-
-	if (resp->msg_id == CTRL_RESP_CONNECT_AP)
-	{
-		LOG_D("Connected");
-		rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_CONNECT, RT_NULL);
-	}
-
-	__exit:
-	if (ret != SUCCESS)
-	{
-		rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_CONNECT_FAIL, RT_NULL);
-	}
-	free_ctrl_resp_msg(resp);
-	return ret;
+    rt_err_t ret;
+
+    if ((ret = get_response_result(resp)) != SUCCESS)
+    {
+        LOG_E("wifi scan failed!");
+        goto __exit;
+    }
+
+    if (resp->msg_id == CTRL_RESP_CONNECT_AP)
+    {
+        LOG_D("Connected");
+        rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_CONNECT, RT_NULL);
+    }
+
+    __exit:
+    if (ret != SUCCESS)
+    {
+        rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_CONNECT_FAIL, RT_NULL);
+    }
+    free_ctrl_resp_msg(resp);
+    return ret;
 }
 
 static rt_err_t drv_wlan_join(struct rt_wlan_device *wlan, struct rt_sta_info *sta_info)
 {
-	ctrl_cmd_t req;
+    ctrl_cmd_t req;
 
-	ctrl_cmd_default_req(&req);
-	memcpy(req.u.wifi_ap_config.ssid, sta_info->ssid.val, min(sta_info->ssid.len, sizeof(req.u.wifi_ap_config.ssid)));
-	memcpy(req.u.wifi_ap_config.pwd, sta_info->key.val, min(sta_info->key.len, sizeof(req.u.wifi_ap_config.pwd)));
-	req.u.wifi_ap_config.is_wpa3_supported = false;
-	req.u.wifi_ap_config.listen_interval = 3; // default
+    ctrl_cmd_default_req(&req);
+    memcpy(req.u.wifi_ap_config.ssid, sta_info->ssid.val, min(sta_info->ssid.len, sizeof(req.u.wifi_ap_config.ssid)));
+    memcpy(req.u.wifi_ap_config.pwd, sta_info->key.val, min(sta_info->key.len, sizeof(req.u.wifi_ap_config.pwd)));
+    req.u.wifi_ap_config.is_wpa3_supported = false;
+    req.u.wifi_ap_config.listen_interval = 3; // default
 
-	/* register callback for handling reply asynch-ly */
-	req.ctrl_resp_cb = esp_join_callback;
+    /* register callback for handling reply asynch-ly */
+    req.ctrl_resp_cb = esp_join_callback;
 
-	wifi_connect_ap(req);
+    wifi_connect_ap(req);
 
-	return RT_EOK;
+    return RT_EOK;
 }
 
 static rt_err_t drv_wlan_softap(struct rt_wlan_device *wlan, struct rt_ap_info *ap_info)
 {
-	ctrl_cmd_t req;
-	ctrl_cmd_t *resp = NULL;
-
-	ctrl_cmd_default_req(&req);
-	strncpy((char *)req.u.wifi_softap_config.ssid, (char *)ap_info->ssid.val, min(ap_info->ssid.len, SSID_LENGTH-1));
-	strncpy((char *)req.u.wifi_softap_config.pwd, (char *)ap_info->key.val, min(ap_info->key.len, PASSWORD_LENGTH-1));
-	req.u.wifi_softap_config.channel = ap_info->channel;
-	req.u.wifi_softap_config.encryption_mode = security_wlan_to_esp(ap_info->security);
-	req.u.wifi_softap_config.max_connections = 2;
-	req.u.wifi_softap_config.ssid_hidden = ap_info->hidden;
-	req.u.wifi_softap_config.bandwidth = WIFI_BW_HT40;
-
-	resp = wifi_start_softap(req);
-
-	if (sync_response_result(resp) == SUCCESS)
-	{
-		rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_START, 0);
-	}
-	else
-	{
-		rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_STOP, 0);
-	}
-
-	return RT_EOK;
+    ctrl_cmd_t req;
+    ctrl_cmd_t *resp = NULL;
+
+    ctrl_cmd_default_req(&req);
+    strncpy((char *)req.u.wifi_softap_config.ssid, (char *)ap_info->ssid.val, min(ap_info->ssid.len, SSID_LENGTH-1));
+    strncpy((char *)req.u.wifi_softap_config.pwd, (char *)ap_info->key.val, min(ap_info->key.len, PASSWORD_LENGTH-1));
+    req.u.wifi_softap_config.channel = ap_info->channel;
+    req.u.wifi_softap_config.encryption_mode = security_wlan_to_esp(ap_info->security);
+    req.u.wifi_softap_config.max_connections = 2;
+    req.u.wifi_softap_config.ssid_hidden = ap_info->hidden;
+    req.u.wifi_softap_config.bandwidth = WIFI_BW_HT40;
+
+    resp = wifi_start_softap(req);
+
+    if (sync_response_result(resp) == SUCCESS)
+    {
+        rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_START, 0);
+    }
+    else
+    {
+        rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_STOP, 0);
+    }
+
+    return RT_EOK;
 }
 
 static rt_err_t drv_wlan_disconnect(struct rt_wlan_device *wlan)
 {
-	ctrl_cmd_t req;
-	ctrl_cmd_t *resp = NULL;
+    ctrl_cmd_t req;
+    ctrl_cmd_t *resp = NULL;
 
-	ctrl_cmd_default_req(&req);
-	resp = wifi_disconnect_ap(req);
+    ctrl_cmd_default_req(&req);
+    resp = wifi_disconnect_ap(req);
 
-	if (sync_response_result(resp) == SUCCESS)
-	{
-		rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_DISCONNECT, RT_NULL);
-	}
-	return RT_EOK;
+    if (sync_response_result(resp) == SUCCESS)
+    {
+        rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_DISCONNECT, RT_NULL);
+    }
+    return RT_EOK;
 }
 
 static rt_err_t drv_wlan_ap_stop(struct rt_wlan_device *wlan)
 {
     ctrl_cmd_t req;
-	ctrl_cmd_t *resp = NULL;
+    ctrl_cmd_t *resp = NULL;
 
-	ctrl_cmd_default_req(&req);
-	resp = wifi_stop_softap(req);
+    ctrl_cmd_default_req(&req);
+    resp = wifi_stop_softap(req);
 
-	if (sync_response_result(resp) == SUCCESS)
-	{
-		rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_STOP, 0);
-	}
+    if (sync_response_result(resp) == SUCCESS)
+    {
+        rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_STOP, 0);
+    }
 
-	return RT_EOK;
+    return RT_EOK;
 }
 
 static rt_err_t drv_wlan_set_mac(struct rt_wlan_device *wlan, rt_uint8_t mac[])
 {
     ctrl_cmd_t req;
-	ctrl_cmd_t *resp = NULL;
+    ctrl_cmd_t *resp = NULL;
 
-	ctrl_cmd_default_req(&req);
-	req.u.wifi_mac.mode = (wlan == wifi_sta.wlan) ? WIFI_MODE_STA : WIFI_MODE_AP;
-	snprintf(req.u.wifi_mac.mac, sizeof(req.u.wifi_mac.mac), "%02x:%02x:%02x:%02x:%02x:%02x", 
-				mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-	resp = wifi_set_mac(req);
+    ctrl_cmd_default_req(&req);
+    req.u.wifi_mac.mode = (wlan == wifi_sta.wlan) ? WIFI_MODE_STA : WIFI_MODE_AP;
+    snprintf(req.u.wifi_mac.mac, sizeof(req.u.wifi_mac.mac), "%02x:%02x:%02x:%02x:%02x:%02x",
+                mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+    resp = wifi_set_mac(req);
 
-	return sync_response_result(resp);
+    return sync_response_result(resp);
 }
 
 static rt_err_t drv_wlan_get_mac(struct rt_wlan_device *wlan, rt_uint8_t mac[])
 {
-	ctrl_cmd_t req;
-	ctrl_cmd_t *resp = NULL;
-
-	ctrl_cmd_default_req(&req);
-	req.u.wifi_mac.mode = (wlan == wifi_sta.wlan) ? WIFI_MODE_STA : WIFI_MODE_AP;
-	resp = wifi_get_mac(req);
-
-	if (resp && SUCCESS == resp->resp_event_status)
-	{
-		if(!strlen(resp->u.wifi_mac.mac))
-		{
-			LOG_W("NULL MAC returned");
-		}
-
-		if (convert_mac_to_bytes(mac, resp->u.wifi_mac.mac) != SUCCESS)
-		{
-			LOG_W("convert mac to bytes failed");
-		}
-	}
-
-	return sync_response_result(resp);
+    ctrl_cmd_t req;
+    ctrl_cmd_t *resp = NULL;
+
+    ctrl_cmd_default_req(&req);
+    req.u.wifi_mac.mode = (wlan == wifi_sta.wlan) ? WIFI_MODE_STA : WIFI_MODE_AP;
+    resp = wifi_get_mac(req);
+
+    if (resp && SUCCESS == resp->resp_event_status)
+    {
+        if(!strlen(resp->u.wifi_mac.mac))
+        {
+            LOG_W("NULL MAC returned");
+        }
+
+        if (convert_mac_to_bytes(mac, resp->u.wifi_mac.mac) != SUCCESS)
+        {
+            LOG_W("convert mac to bytes failed");
+        }
+    }
+
+    return sync_response_result(resp);
 }
 
 static int drv_wlan_send(struct rt_wlan_device *wlan, void *buff, int len)
 {
-	struct pbuf *tx_buffer = NULL;
+    struct pbuf *tx_buffer = NULL;
 
-	if (get_drv_wifi(wlan)->net == NULL)
-	{
-		return -RT_ERROR;
-	}
+    if (get_drv_wifi(wlan)->net == NULL)
+    {
+        return -RT_ERROR;
+    }
 
-	tx_buffer = malloc(sizeof(struct pbuf));
-	RT_ASSERT(tx_buffer);
+    tx_buffer = malloc(sizeof(struct pbuf));
+    RT_ASSERT(tx_buffer);
 
-	tx_buffer->payload = malloc(len);
-	RT_ASSERT(tx_buffer->payload);
+    tx_buffer->payload = malloc(len);
+    RT_ASSERT(tx_buffer->payload);
 
-	memcpy(tx_buffer->payload, buff, len);
-	tx_buffer->len = len;
+    memcpy(tx_buffer->payload, buff, len);
+    tx_buffer->len = len;
 
-	if (network_write(get_drv_wifi(wlan)->net, tx_buffer) != SUCCESS)
-	{
-		LOG_E("Failed to send network data");
-		free(tx_buffer);
-	}
+    if (network_write(get_drv_wifi(wlan)->net, tx_buffer) != SUCCESS)
+    {
+        LOG_E("Failed to send network data");
+        free(tx_buffer);
+    }
 
-	return RT_EOK;
+    return RT_EOK;
 }
 
 static const struct rt_wlan_dev_ops ops =
@@ -554,79 +553,109 @@ static const struct rt_wlan_dev_ops ops =
   */
 static void network_data_rx_callback(struct network_handle *net_handle)
 {
-	struct pbuf *rx_buffer = NULL;
-	struct rt_wlan_device *wlan = wifi_ap.net == net_handle ? wifi_ap.wlan : wifi_sta.wlan;
+    struct pbuf *rx_buffer = NULL;
+    struct rt_wlan_device *wlan = wifi_ap.net == net_handle ? wifi_ap.wlan : wifi_sta.wlan;
 
-	rx_buffer = network_read(net_handle, 0);
+    rx_buffer = network_read(net_handle, 0);
 
-	if (rx_buffer)
-	{
-		rt_wlan_dev_report_data(wlan, rx_buffer->payload, rx_buffer->len);
+    if (rx_buffer)
+    {
+        rt_wlan_dev_report_data(wlan, rx_buffer->payload, rx_buffer->len);
 
-		free(rx_buffer->payload);
-		rx_buffer->payload = NULL;
-		free(rx_buffer);
-		rx_buffer = NULL;
-	}
+        free(rx_buffer->payload);
+        rx_buffer->payload = NULL;
+        free(rx_buffer);
+        rx_buffer = NULL;
+    }
 }
 
 int rt_hw_esp_wlan_init (void)
 {
-	static struct rt_wlan_device wlan_ap, wlan_sta;
-
-	sem_esp_init = rt_sem_create("esp_init", 0, RT_IPC_FLAG_PRIO);
-	RT_ASSERT(sem_esp_init != NULL);
-
-    /* Init network interface */
-	network_init();
-
-	/* init spi driver */
-	transport_init(transport_driver_event_handler);
-
-	/* Wait for WiFi initialization */
-	if (rt_sem_take(sem_esp_init, rt_tick_from_millisecond(10 * 1000)))
-	{
-		LOG_E("Wait for WiFi initialization timeout!");
-		return -RT_ERROR;
-	}
-
-	/* Register the network interface callback */
-	wifi_ap.net = network_open(SOFTAP_INTERFACE, network_data_rx_callback);
-	wifi_sta.net = network_open(STA_INTERFACE, network_data_rx_callback);
-
-	/* Register the wlan device and set its working mode */
-	wifi_ap.wlan = &wlan_ap;
-	wifi_sta.wlan = &wlan_sta;
-
-	LOG_I("Register the wlan device.");
-
-	/* register wlan device for ap */
-	if (rt_wlan_dev_register(&wlan_ap, RT_WLAN_DEVICE_AP_NAME, &ops, 0, &wifi_ap) != RT_EOK)
-	{
-		LOG_E("Failed to register a wlan_ap device!");
-		return -RT_ERROR;
-	}
-
-	/* register wlan device for sta */
-	if (rt_wlan_dev_register(&wlan_sta, RT_WLAN_DEVICE_STA_NAME, &ops, 0, &wifi_sta) != RT_EOK)
-	{
-		LOG_E("Failed to register a wlan_sta device!");
-		return -RT_ERROR;
-	}
-
-	/* Set wlan_sta to STATION mode */
-	if (rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION) != RT_EOK)
-	{
-		LOG_E("Failed to set %s to station mode!", RT_WLAN_DEVICE_STA_NAME);
-		return -RT_ERROR;
-	}
-
-	/* Set wlan_ap to AP mode */
-	if (rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP) != RT_EOK)
-	{
-		LOG_E("Failed to set %s to ap mode!", RT_WLAN_DEVICE_AP_NAME);
-		return -RT_ERROR;
-	}
+    static struct rt_wlan_device wlan_ap, wlan_sta;
+
+    sem_esp_init = rt_sem_create("esp_init", 0, RT_IPC_FLAG_PRIO);
+    RT_ASSERT(sem_esp_init != NULL);
+
+    /* init network interface */
+    network_init();
+
+    /* init spi driver */
+    transport_init(transport_driver_event_handler);
+
+    /* wait for WiFi initialization */
+    if (rt_sem_take(sem_esp_init, rt_tick_from_millisecond(10 * 1000)))
+    {
+        LOG_E("Wait for WiFi initialization timeout!");
+        return -RT_ERROR;
+    }
+
+    /* register the network interface callback */
+    wifi_ap.net = network_open(SOFTAP_INTERFACE, network_data_rx_callback);
+    wifi_sta.net = network_open(STA_INTERFACE, network_data_rx_callback);
+
+    /* register the wlan device and set its working mode */
+    wifi_ap.wlan = &wlan_ap;
+    wifi_sta.wlan = &wlan_sta;
+
+    /* register wlan device for ap */
+    if (rt_wlan_dev_register(&wlan_ap, RT_WLAN_DEVICE_AP_NAME, &ops, 0, &wifi_ap) != RT_EOK)
+    {
+        LOG_E("Failed to register a wlan_ap device!");
+        return -RT_ERROR;
+    }
+
+    /* register wlan device for sta */
+    if (rt_wlan_dev_register(&wlan_sta, RT_WLAN_DEVICE_STA_NAME, &ops, 0, &wifi_sta) != RT_EOK)
+    {
+        LOG_E("Failed to register a wlan_sta device!");
+        return -RT_ERROR;
+    }
+
+    /* set wlan_sta to STATION mode */
+    if (rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION) != RT_EOK)
+    {
+        LOG_E("Failed to set %s to station mode!", RT_WLAN_DEVICE_STA_NAME);
+        return -RT_ERROR;
+    }
+
+    /* set wlan_ap to AP mode */
+    if (rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP) != RT_EOK)
+    {
+        LOG_E("Failed to set %s to ap mode!", RT_WLAN_DEVICE_AP_NAME);
+        return -RT_ERROR;
+    }
+
+    return RT_EOK;
+}
+
+static void esp_hosted_init (void *parameter)
+{
+    /* reset esp32 chip */
+    rt_pin_mode(ESP_HOSTED_RESET_PIN, PIN_MODE_OUTPUT);
+    rt_pin_write(ESP_HOSTED_RESET_PIN, PIN_LOW);
+    rt_thread_mdelay(50);
+    rt_pin_write(ESP_HOSTED_RESET_PIN, PIN_HIGH);
+
+    /* stop spi transactions short time to avoid slave sync issues */
+    rt_thread_mdelay(50);
+
+    /* initialize the esp-hosted */
+    rt_hw_esp_wlan_init();
+}
+
+static int esp_device_init (void)
+{
+#ifdef ESP_HOSTED_THREAD_INIT
+    /* use thread initialization */
+    rt_thread_t init_thread = rt_thread_create("esp_init", esp_hosted_init, NULL,
+                                                ESP_HOSTED_INIT_THREAD_STACK_SIZE, ESP_HOSTED_INIT_THREAD_PRIORITY, 20);
+    RT_ASSERT(init_thread != NULL);
+    rt_thread_startup(init_thread);
+#else
+    /* thread initialization is not used */
+    esp_hosted_init(NULL);
+#endif
 
     return RT_EOK;
 }
+INIT_ENV_EXPORT(esp_device_init);

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно