diff --git a/os/board/bk7239n/src/bsp_adapter/src/net/bk_wifi_csi_adapter.c b/os/board/bk7239n/src/bsp_adapter/src/net/bk_wifi_csi_adapter.c index 1721cebae9..757d0a7a8b 100644 --- a/os/board/bk7239n/src/bsp_adapter/src/net/bk_wifi_csi_adapter.c +++ b/os/board/bk7239n/src/bsp_adapter/src/net/bk_wifi_csi_adapter.c @@ -41,6 +41,7 @@ struct bk_csi_dev_s { struct wifi_csi_lowerhalf_s dev; beken_semaphore_t devsem; wifi_csi_receive_mode_config_t config_param; + wifi_csi_active_mode_config_t active_mode_config_param; unsigned int interval_ms; unsigned int accuracy; int csi_data_reported_idx; @@ -366,7 +367,8 @@ static int bk_wifi_csi_set_config(unsigned long arg) } /* 1. memset config zero */ memset(&g_bk_drv->config_param, 0, sizeof(wifi_csi_receive_mode_config_t)); - + memset(&g_bk_drv->active_mode_config_param, 0, sizeof(wifi_csi_active_mode_config_t)); + /* 2. assign configs */ g_bk_drv->interval_ms = config_args->interval; @@ -386,12 +388,14 @@ static int bk_wifi_csi_set_config(unsigned long arg) case NON_HT_CSI_DATA: g_bk_drv->config_param.filter_config.proto_type_bmp = 0x1; g_bk_drv->config_param.filter_config.cbw_bmp = 0x1; + g_bk_drv->active_mode_config_param.interval = config_args->interval; g_bk_drv->accuracy = 0; break; case NON_HT_CSI_DATA_ACC1: g_bk_drv->config_param.filter_config.proto_type_bmp = 0x1; g_bk_drv->config_param.filter_config.cbw_bmp = 0x1; + g_bk_drv->active_mode_config_param.interval = config_args->interval; g_bk_drv->accuracy = 1; break; @@ -400,8 +404,7 @@ static int bk_wifi_csi_set_config(unsigned long arg) return -EINVAL; } - if(config_action == CSI_CONFIG_ENABLE) - { + if((config_type == HT_CSI_DATA || config_type == HT_CSI_DATA_ACC1) && config_action == CSI_CONFIG_ENABLE) { g_bk_drv->config_param.filter_config.filter_mac_addr_type = 1;// src && dst g_bk_drv->config_param.filter_config.filter_src_mac_num = 1; os_memcpy(g_bk_drv->config_param.filter_config.filter_src_mac, link_status.bssid, BK_MAC_ADDR_LEN); @@ -411,8 +414,7 @@ static int bk_wifi_csi_set_config(unsigned long arg) os_memcpy(g_bk_drv->config_param.filter_config.filter_dst_mac, sta_mac, BK_MAC_ADDR_LEN); } - if(g_bk_drv->config_param.enable == 1) - { + if((config_type == HT_CSI_DATA || config_type == HT_CSI_DATA_ACC1) && g_bk_drv->config_param.enable == 1) { g_bk_drv->config_param.enable = 0; ret = bk_wifi_csi_receive_mode_req(&g_bk_drv->config_param); if (ret != OK) @@ -420,6 +422,14 @@ static int bk_wifi_csi_set_config(unsigned long arg) csidbg("ERROR: wifi csi set config(enable) failed, ret: %d\n", ret); return ret; } + } else if((config_type == NON_HT_CSI_DATA || config_type == NON_HT_CSI_DATA_ACC1) && g_bk_drv->active_mode_config_param.enable == 1) { + g_bk_drv->active_mode_config_param.enable = 0; + ret = bk_wifi_csi_active_mode_req(&g_bk_drv->active_mode_config_param); + if (ret != OK) + { + csidbg("ERROR: wifi csi set config(enable) failed, ret: %d\n", ret); + return ret; + } } /* 3. call set config for enable/disable */ @@ -440,13 +450,24 @@ static int bk_wifi_csi_set_config(unsigned long arg) return -EINVAL; } /* changes for enable */ - g_bk_drv->config_param.enable = 1; - ret = bk_wifi_csi_receive_mode_req(&g_bk_drv->config_param); - if (ret != OK) - { - bk_wifi_csi_data_buffer_free(); - csidbg("ERROR: wifi csi set config(enable) failed, ret: %d\n", ret); - return ret; + if(config_type == HT_CSI_DATA || config_type == HT_CSI_DATA_ACC1) { + g_bk_drv->config_param.enable = 1; + ret = bk_wifi_csi_receive_mode_req(&g_bk_drv->config_param); + if (ret != OK) + { + bk_wifi_csi_data_buffer_free(); + csidbg("ERROR: wifi csi set config(enable) failed, ret: %d\n", ret); + return ret; + } + } else if(config_type == NON_HT_CSI_DATA || config_type == NON_HT_CSI_DATA_ACC1) { + g_bk_drv->active_mode_config_param.enable = 1; + ret = bk_wifi_csi_active_mode_req(&g_bk_drv->active_mode_config_param); + if (ret != OK) + { + bk_wifi_csi_data_buffer_free(); + csidbg("ERROR: wifi csi set config(enable) failed, ret: %d\n", ret); + return ret; + } } } else if (config_action == CSI_CONFIG_DISABLE) @@ -455,11 +476,20 @@ static int bk_wifi_csi_set_config(unsigned long arg) /* changes for disable*/ csivdbg("wifi csi disable config requested\n"); bk_wifi_csi_report_timer_set(false); - g_bk_drv->config_param.enable = 0; - ret = bk_wifi_csi_receive_mode_req(&g_bk_drv->config_param); - if (ret != OK) { - csidbg("ERROR: wifi csi set config(disable) failed, ret: %d\n", ret); - return ret; + if(config_type == HT_CSI_DATA || config_type == HT_CSI_DATA_ACC1) { + g_bk_drv->config_param.enable = 0; + ret = bk_wifi_csi_receive_mode_req(&g_bk_drv->config_param); + if (ret != OK) { + csidbg("ERROR: wifi csi set config(disable) failed, ret: %d\n", ret); + return ret; + } + } else if(config_type == NON_HT_CSI_DATA || config_type == NON_HT_CSI_DATA_ACC1) { + g_bk_drv->active_mode_config_param.enable = 0; + ret = bk_wifi_csi_active_mode_req(&g_bk_drv->active_mode_config_param); + if (ret != OK) { + csidbg("ERROR: wifi csi set config(disable) failed, ret: %d\n", ret); + return ret; + } } } @@ -677,6 +707,12 @@ static int bk_wifi_csi_getcsidata(unsigned char *buffer, size_t buflen) { return len; } +void bk_wifi_csi_disable_HE_and_VHT(void) +{ + bk_wifi_capa_config(WIFI_CAPA_ID_VHT_EN, 0); + bk_wifi_capa_config(WIFI_CAPA_ID_HE_EN, 0); +} + FAR struct wifi_csi_lowerhalf_s *bk_wifi_csi_initialize(void) { int err = 0; @@ -697,6 +733,7 @@ FAR struct wifi_csi_lowerhalf_s *bk_wifi_csi_initialize(void) return NULL; } bk_wifi_csi_givesem(); + bk_wifi_csi_disable_HE_and_VHT(); return &g_bk_drv->dev; }