[rdk-b][mt7986][wifi-hal][Refactor get possible channel]
[Description]
Refactor get possible channel.
1. Use iw instead of iwlist
2. Add a check of dfs enable. If dfs is disable, the function should ignore dfs channels.
[Release-log]
N/A
Change-Id: I769f09e2ec6855a1f31505c8077aaef31b9b2315
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch b/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch
index cdd9880..7ffc662 100644
--- a/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch
+++ b/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch
@@ -1,17 +1,17 @@
-From 312aae9b294a5cb7448887db34654383839a32da Mon Sep 17 00:00:00 2001
+From 404109f913afc751127ccba752b7dbba98e5ba8b Mon Sep 17 00:00:00 2001
From: "Allen.Ye" <allen.ye@mediatek.com>
-Date: Tue, 24 May 2022 13:53:35 +0800
-Subject: [PATCH] HAL: refactor wifi_getRadioPossibleChannels
+Date: Tue, 30 Aug 2022 18:34:17 +0800
+Subject: [PATCH 1/2] HAL: refactor wifi_getRadioPossibleChannels
---
- source/wifi/wifi_hal.c | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
+ source/wifi/wifi_hal.c | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
-index f15d2c9..a451b30 100644
+index d2f0c3b..d44eab0 100644
--- a/source/wifi/wifi_hal.c
+++ b/source/wifi/wifi_hal.c
-@@ -1571,10 +1571,20 @@ INT wifi_setRadioChannelMode(INT radioIndex, CHAR *channelMode, BOOL gOnlyFlag,
+@@ -1925,10 +1925,24 @@ INT wifi_setRadioMode(INT radioIndex, CHAR *channelMode, UINT pureMode)
//The output_string is a max length 64 octet string that is allocated by the RDKB code. Implementations must ensure that strings are not longer than this.
INT wifi_getRadioPossibleChannels(INT radioIndex, CHAR *output_string) //RDKB
{
@@ -20,14 +20,18 @@
return RETURN_ERR;
- //TODO:read this from iw phy phyX info |grep MHz
- snprintf(output_string, 64, (radioIndex == 0)?"1,2,3,4,5,6,7,8,9,10,11":"36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140");
-+
-+ char cmd[MAX_CMD_SIZE] = {0};
-+ char buf[MAX_BUF_SIZE] = {0};
-+
++ char cmd[256] = {0};
++ char buf[128] = {0};
++ BOOL dfs_enable = false;
+ // Parse possible channel number and separate them with commas.
-+ snprintf(cmd, sizeof(cmd), "iwlist %s%d channel | grep GHz | tr -s ' ' | cut -d ' ' -f3 | tr '\n' ',' | sed 's/.$//'", AP_PREFIX, radioIndex);
++ wifi_getRadioDfsEnable(radioIndex, &dfs_enable);
++ if (dfs_enable)
++ snprintf(cmd, sizeof(cmd), "iw phy phy%d info | grep -e '\\*.*MHz .*dBm' | cut -d '[' -f2 | cut -d ']' -f1 | tr '\\n' ',' | sed 's/.$//'", radioIndex);
++ else
++ snprintf(cmd, sizeof(cmd), "iw phy phy%d info | grep -e '\\*.*MHz .*dBm' | grep -v 'radar' | cut -d '[' -f2 | cut -d ']' -f1 | tr '\\n' ',' | sed 's/.$//'", radioIndex);
++
+ _syscmd(cmd,buf,sizeof(buf));
-+ snprintf(output_string, 128, "%s", buf);
++ strncpy(output_string, buf, sizeof(buf));
+
+ WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+ return RETURN_OK;