[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;