You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ma...@apache.org on 2022/08/02 06:13:05 UTC

[incubator-nuttx] 01/02: drivers/wireless/gs2200m: Notify disssociation event

This is an automated email from the ASF dual-hosted git repository.

masayuki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 883c6fc2ef45f24f0d53e399c07e0e8ab52b8593
Author: Takayoshi Koizumi <ta...@gmail.com>
AuthorDate: Sun Jul 31 20:58:47 2022 +0000

    drivers/wireless/gs2200m: Notify disssociation event
    
    After recover disassociation, usrsock daemon must destroy all sockets.
    Add notification to prompt the daemon to do so.
---
 drivers/wireless/gs2200m.c       | 31 ++++++++++++++++++++++++-------
 include/nuttx/wireless/gs2200m.h |  2 ++
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/drivers/wireless/gs2200m.c b/drivers/wireless/gs2200m.c
index ccfcf2a596..20276fcb21 100644
--- a/drivers/wireless/gs2200m.c
+++ b/drivers/wireless/gs2200m.c
@@ -76,7 +76,7 @@
 
 #define MAX_PKT_LEN  1500
 #define MAX_PAYLOAD  (MAX_PKT_LEN - BULK_CMD_HDR_SIZE_WITH_GUARD)
-#define MAX_NOTIF_Q  16
+#define MAX_NOTIF_Q  18 /* for 16 sockets and disasso event + dummy */
 
 #define WR_REQ       0x01
 #define RD_REQ       0x02
@@ -169,7 +169,7 @@ struct notif_q_s
   uint8_t  rpos;
   uint8_t  wpos;
   uint8_t  count;
-  uint16_t inuse;
+  uint32_t inuse;
   char     cids[MAX_NOTIF_Q];
 };
 
@@ -184,8 +184,8 @@ struct gs2200m_dev_s
   bool                 int_enabled;
   dq_queue_t           pkt_q[16];
   uint16_t             pkt_q_cnt[16];
-  uint16_t             valid_cid_bits;
-  uint16_t             aip_cid_bits;
+  uint32_t             valid_cid_bits;
+  uint32_t             aip_cid_bits;
   uint32_t             total_bulk;
   uint8_t              tx_buff[MAX_PKT_LEN];
   struct net_driver_s  net_dev;
@@ -297,6 +297,10 @@ static uint8_t _cid_to_uint8(char c)
     {
       ret = (c - 'a') + 10;
     }
+  else if (c == DISASSOCIATION_CID)
+    {
+      ret = 16;
+    }
   else
     {
       ret = 0xff;
@@ -334,9 +338,9 @@ static uint16_t _to_uint16(char *str)
  * Name: _enable_cid
  ****************************************************************************/
 
-static bool _enable_cid(uint16_t *cid_bits, char cid, bool on)
+static bool _enable_cid(uint32_t *cid_bits, char cid, bool on)
 {
-  uint16_t mask = 1 << _cid_to_uint8(cid);
+  uint32_t mask = 1 << _cid_to_uint8(cid);
   bool     ret  = true;
 
   if (on)
@@ -369,7 +373,7 @@ static bool _enable_cid(uint16_t *cid_bits, char cid, bool on)
  * Name: _cid_is_set
  ****************************************************************************/
 
-static bool _cid_is_set(uint16_t *cid_bits, char cid)
+static bool _cid_is_set(uint32_t *cid_bits, char cid)
 {
   uint16_t mask = 1 << _cid_to_uint8(cid);
 
@@ -2140,6 +2144,16 @@ static enum pkt_type_e gs2200m_set_loglevel(FAR struct gs2200m_dev_s *dev,
 }
 #endif
 
+/****************************************************************************
+ * Name: gs2200m_closeallsock
+ * NOTE: See 7.1.5 Closing All Connections
+ ****************************************************************************/
+
+static void gs2200m_closeallsock(FAR struct gs2200m_dev_s *dev)
+{
+  gs2200m_send_cmd2(dev, "AT+NCLOSEALL\r\n");
+}
+
 /****************************************************************************
  * Name: gs2200m_get_version
  ****************************************************************************/
@@ -3213,6 +3227,9 @@ repeat:
       wlwarn("=== recover DISASSOCIATE\n");
       dev->disassociate_flag = false;
 
+      gs2200m_closeallsock(dev);
+      _notif_q_push(dev, DISASSOCIATION_CID);
+
       goto errout;
     }
 
diff --git a/include/nuttx/wireless/gs2200m.h b/include/nuttx/wireless/gs2200m.h
index 256bd4e6b5..ffdc64ede5 100644
--- a/include/nuttx/wireless/gs2200m.h
+++ b/include/nuttx/wireless/gs2200m.h
@@ -58,6 +58,8 @@ extern "C"
 #define GS2200M_IOC_IFREQ    _WLCIOC(GS2200M_FIRST + 7)
 #define GS2200M_IOC_NAME     _WLCIOC(GS2200M_FIRST + 8)
 
+#define DISASSOCIATION_CID  ('x')
+
 /* NOTE: do not forget to update include/nuttx/wireless/ioctl.h */
 
 struct gs2200m_connect_msg