diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-wifi/liblynq-qser-wifi.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-wifi/liblynq-qser-wifi.bb
index 82f7925..abda323 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-wifi/liblynq-qser-wifi.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-wifi/liblynq-qser-wifi.bb
@@ -5,7 +5,7 @@
 #LICENSE = "Mobiletek""
 LICENSE = "CLOSED"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=4f60c98fa94e02f659ef5939f67fa8ae"
-DEPENDS += "bootchart libupi-ab openssl libsctel"
+DEPENDS += "bootchart liblynq-log libupi-ab openssl libsctel"
 
 #inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-qser-wifi/"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-wifi-demo/files/lynq-wifi-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-wifi-demo/files/lynq-wifi-demo.cpp
index b26121e..3e3e049 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-wifi-demo/files/lynq-wifi-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-wifi-demo/files/lynq-wifi-demo.cpp
@@ -19,21 +19,44 @@
 {
 	if (argc == 2 )
     {
-        if(strcmp(argv[1], "1") == 0){
+        if(strcmp(argv[1], "0") == 0){
+            qser_wifi_enable(); //enable wifi
+            qser_wifi_ap_stop(LYNQ_WIFI_AP_INDEX_AP0); //Disable ap mode for wlan0
+            qser_wifi_disable(); //Turn off WiFi
+        }
+        else if(strcmp(argv[1], "1") == 0){
             char pw[65] = {0};
             sprintf(pw, "lynq123456");
             qser_wifi_enable(); //enable wifi
-            qser_wifi_ap_ssid_set(0,"hello"); //Set the ssid of wlan0 to hello
-            qser_wifi_ap_max_sta_set(0,22); //Example Set the maximum number of connections to 22
-            qser_wifi_ap_channel_set(0,"CN",13); //Set the country code to CN and channel to 13
-            qser_wifi_ap_mode_set(0,LYNQ_WIFI_MODE_80211BGN); //Set the working protocol mode of wlan0 to 80211BGN
-            qser_wifi_ap_auth_set(0,LYNQ_WIFI_AUTH_WPA2_PSK,pw); //Set the authentication of wlan0 to wpa2 and the password to lynq123456
-            qser_wifi_ap_start(0); //Set the ap mode of wlan0
+            qser_wifi_ap_ssid_set(LYNQ_WIFI_AP_INDEX_AP0,"hello"); //Set the ssid of wlan0 to hello
+            qser_wifi_ap_max_sta_set(LYNQ_WIFI_AP_INDEX_AP0,22); //Example Set the maximum number of connections to 22
+            qser_wifi_ap_channel_set(LYNQ_WIFI_AP_INDEX_AP0,"CN",13); //Set the country code to CN and channel to 13
+            qser_wifi_ap_mode_set(LYNQ_WIFI_AP_INDEX_AP0,LYNQ_WIFI_MODE_80211BGN); //Set the working protocol mode of wlan0 to 80211BGN
+            qser_wifi_ap_auth_set(LYNQ_WIFI_AP_INDEX_AP0,LYNQ_WIFI_AUTH_WPA2_PSK,pw); //Set the authentication of wlan0 to wpa2 and the password to lynq123456
+            qser_wifi_ap_start(LYNQ_WIFI_AP_INDEX_AP0); //Set the ap mode of wlan0
         }
-        else if(strcmp(argv[1], "0") == 0){
+        else if(strcmp(argv[1], "2") == 0){
+            char pw[65] = {0};
+            char ssid[33] = {0};
+            char country_code[12] = {0};
+            int channel, max_sta_num;
+            lynq_wifi_mode_type_e mode;
+            lynq_wifi_auth_e auth_mode;
+            lynq_wifi_bandwidth_type_e bandwidth;
+            int ret = -1;
             qser_wifi_enable(); //enable wifi
-            qser_wifi_ap_stop(0); //Disable ap mode for wlan0
-            qser_wifi_disable(); //Turn off WiFi
+            ret = qser_wifi_ap_ssid_get(LYNQ_WIFI_AP_INDEX_AP0,ssid); //Gets the ssid of wlan0
+            printf("[lynq-wifi-demo]  ssid=%s ret = %d\n",ssid, ret);
+            ret = qser_wifi_ap_max_sta_get(LYNQ_WIFI_AP_INDEX_AP0,&max_sta_num); //Gets the maximum sta number for wlan0
+            printf("[lynq-wifi-demo]  max_sta_num = %d ret = %d\n",max_sta_num, ret);
+            ret = qser_wifi_ap_mode_get(LYNQ_WIFI_AP_INDEX_AP0,&mode); //Gets the working protocol mode for wlan0
+            printf("[lynq-wifi-demo]  mode = %d ret = %d\n",mode, ret);
+            ret = qser_wifi_ap_auth_get(LYNQ_WIFI_AP_INDEX_AP0,&auth_mode,pw); //Get wlan0's password security authentication and password
+            printf("[lynq-wifi-demo]  pw = %s auth_mode = %d ret = %d\n",pw, auth_mode, ret);
+            ret = qser_wifi_ap_channel_get(LYNQ_WIFI_AP_INDEX_AP0,country_code,&channel); //Get the country code and channel of wlan0
+            printf("[lynq-wifi-demo]  country_code = %s channel = %d ret = %d\n",country_code, channel, ret);
+            ret = qser_wifi_ap_bandwidth_get(LYNQ_WIFI_AP_INDEX_AP0,&bandwidth); //Gets the bandwidth of wlan0
+            printf("[lynq-wifi-demo]  bandwidth = %d ret = %d\n",bandwidth, ret);
         }
         else{
             printf("  [lynq-wifi-demo]Parameter error, please re-enter\n");
@@ -41,7 +64,8 @@
     }
     else
     {
-        printf("[lynq-wifi-demo]Please enter parameter 0 or 1\n");
+        printf("[lynq-wifi-demo]Please enter one of the parameters 0,1,2\n");
+        printf("  [lynq-wifi-demo]2: View information such as ssid, password, and channel in ap mode\n");
         printf("  [lynq-wifi-demo]1: initializes wifi and enables and sets ap mode\n");
         printf("  [lynq-wifi-demo]0: indicates off.\n");
         return 0;
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/include/lynq-qser-wifi.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/include/lynq-qser-wifi.h
index 734d1b4..fa021c0 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/include/lynq-qser-wifi.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/include/lynq-qser-wifi.h
@@ -15,6 +15,11 @@
 extern "C" {
 #endif
 
+typedef enum {
+	LYNQ_WIFI_AP_INDEX_AP0 = 0,       /* Index 0 of AP/AP-STA/AP-AP Mode */
+	LYNQ_WIFI_AP_INDEX_AP1            /* Index 1 of AP/AP-STA/AP-AP Mode */
+} lynq_wifi_ap_index_e;
+
 typedef enum
 {
 	LYNQ_WIFI_MODE_MIN = -1,
@@ -51,15 +56,21 @@
 
 int  qser_wifi_enable(void);
 int  qser_wifi_disable(void);
-int  qser_wifi_ap_ssid_set(int idx, const char *ssid);
-int  qser_wifi_ap_mode_set(int idx, lynq_wifi_mode_type_e mode);
-int  qser_wifi_ap_bandwidth_set(int idx, lynq_wifi_bandwidth_type_e bandwidth);
-int  qser_wifi_ap_channel_set(int idx, const char *country_code, int channel);
-int  qser_wifi_ap_auth_set(int idx, lynq_wifi_auth_e auth_mode, const char * auth_passwd);
-int  qser_wifi_ap_max_sta_set(int idx, int max_sta_num);
-int  qser_wifi_ap_start(int idx);
-int  qser_wifi_ap_stop(int idx);
-int  qser_wifi_ap_restart(int idx);
+int  qser_wifi_ap_ssid_set(lynq_wifi_ap_index_e idx, const char *ssid);
+int  qser_wifi_ap_ssid_get(lynq_wifi_ap_index_e idx, char *ssid);
+int  qser_wifi_ap_mode_set(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e mode);
+int  qser_wifi_ap_mode_get(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e *mode);
+int  qser_wifi_ap_bandwidth_set(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e bandwidth);
+int  qser_wifi_ap_bandwidth_get(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e *bandwidth);
+int  qser_wifi_ap_channel_set(lynq_wifi_ap_index_e idx, const char *country_code, int channel);
+int  qser_wifi_ap_channel_get(lynq_wifi_ap_index_e idx, char *country_code, int *channel);
+int  qser_wifi_ap_auth_set(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e auth_mode, const char * auth_passwd);
+int  qser_wifi_ap_auth_get(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e *auth_mode, char * auth_passwd);
+int  qser_wifi_ap_max_sta_set(lynq_wifi_ap_index_e idx, int max_sta_num);
+int  qser_wifi_ap_max_sta_get(lynq_wifi_ap_index_e idx, int *max_sta_num);
+int  qser_wifi_ap_start(lynq_wifi_ap_index_e idx);
+int  qser_wifi_ap_stop(lynq_wifi_ap_index_e idx);
+int  qser_wifi_ap_restart(lynq_wifi_ap_index_e idx);
 
 
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/lynq-qser-wifi.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/lynq-qser-wifi.cpp
index c14ce3a..91f1112 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/lynq-qser-wifi.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/lynq-qser-wifi.cpp
@@ -1,7 +1,7 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <string.h>
-
+#include "liblog/lynq_deflog.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -20,12 +20,22 @@
 *********************************************************************/
 int qser_wifi_enable(void)
 {
-    int ret = sc_wifi_init();
+    int ret = -1;
+    ret = sc_wifi_init();
     if (0 != ret)
     {
-        return -1;
+        LYERRLOG("[%s ] init : %d ret = %d\n", __func__,ret);
+        return ret;
     }
-    return sc_wifi_enable();
+
+    ret = sc_wifi_enable();
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] enable : %d ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ]\n", __func__);
+    return 0;
 }
 
 /********************************************************************
@@ -37,12 +47,22 @@
 *********************************************************************/
 int qser_wifi_disable(void)
 {
-    int ret = sc_wifi_disable();
+    int ret = -1;
+    ret = sc_wifi_disable();
     if (0 != ret)
     {
-        return -1;
+        LYERRLOG("[%s ] disable : %d ret = %d\n", __func__,ret);
+        return ret;
     }
-    return sc_wifi_uninit();
+
+    ret = sc_wifi_uninit();
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] uninit: %d ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ]\n", __func__);
+    return 0;
 }
 
 /********************************************************************
@@ -54,9 +74,46 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_ssid_set(int idx, const char *ssid)
+int  qser_wifi_ap_ssid_set(lynq_wifi_ap_index_e idx, const char *ssid)
 {
-    return sc_wifi_ap_ssid_set((sc_wifi_ap_index_e)idx, ssid);
+    int ret = -1;
+    if (ssid == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer ssid = 0x%p \n", __func__, ssid);
+        return ret;
+    }
+    ret = sc_wifi_ap_ssid_set((sc_wifi_ap_index_e)idx, ssid);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d ssid = %s \n", __func__, idx, ssid);
+    return 0;
+}
+
+/********************************************************************
+* @brief: qser_wifi_ap_ssid_get, Get the name of the ssid of wlan0 or wlan1
+* @param idx [IN]: int, Set wlan0 or wlan1
+* @param ssid [OUT]: char *, Get the ssid name
+* @return : int, If equal to 0 succeeds, others fail
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int  qser_wifi_ap_ssid_get(lynq_wifi_ap_index_e idx, char *ssid)
+{
+    int ret = -1;
+    sc_wifi_ap_param_t param = {0};
+    ret = sc_wifi_ap_param_get((sc_wifi_ap_index_e)idx, &param);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d ssid = %s \n", __func__, idx, param.ssid);
+    strncpy(ssid, param.ssid, sizeof(param.ssid) - 1);
+    return 0;
 }
 
 /********************************************************************
@@ -68,8 +125,9 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_mode_set(int idx, lynq_wifi_mode_type_e mode)
+int  qser_wifi_ap_mode_set(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e mode)
 {
+    int ret = -1;
     sc_wifi_ap_mode_type_e type;
     switch(mode)
     {
@@ -83,7 +141,56 @@
             type = SC_WIFI_AP_MODE_MIN;
             break;
     }
-    return sc_wifi_ap_mode_set((sc_wifi_ap_index_e)idx, type);
+    ret = sc_wifi_ap_mode_set((sc_wifi_ap_index_e)idx, type);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d mode = %d \n", __func__, idx, mode);
+    return 0;
+}
+
+/********************************************************************
+* @brief: qser_wifi_ap_mode_get, Get the working protocol mode of wlan0 or wlan1
+* @param idx [IN]: int, Set wlan0 or wlan1
+* @param mode [OUT]: lynq_wifi_mode_type_e *, Get the working protocol mode
+* @return : int, If equal to 0 succeeds, others fail
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int  qser_wifi_ap_mode_get(lynq_wifi_ap_index_e idx, lynq_wifi_mode_type_e *mode)
+{
+    int ret = -1;
+    sc_wifi_ap_param_t param = {0};
+    if (mode == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer mode = 0x%p \n", __func__, mode);
+        return ret;
+    }
+    ret = sc_wifi_ap_param_get((sc_wifi_ap_index_e)idx, &param);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d mode = %d \n", __func__, idx, param.mode);
+    lynq_wifi_mode_type_e type;
+    switch(param.mode)
+    {
+        case SC_WIFI_AP_MODE_80211BGN:
+            type = LYNQ_WIFI_MODE_80211BGN;
+            break;
+        case SC_WIFI_AP_MODE_80211BGNAX_2G:
+            type = LYNQ_WIFI_MODE_80211BGNAX_2G;
+            break;
+        default:
+            type = LYNQ_WIFI_MODE_MIN;
+            break;
+    }
+    *mode = type;
+    return 0;
 }
 
 /********************************************************************
@@ -95,9 +202,46 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_bandwidth_set(int idx, lynq_wifi_bandwidth_type_e bandwidth)
+int  qser_wifi_ap_bandwidth_set(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e bandwidth)
 {
-    return sc_wifi_ap_bandwidth_set((sc_wifi_ap_index_e)idx, (sc_wifi_bandwidth_e)bandwidth);
+    int ret = -1;
+    ret = sc_wifi_ap_bandwidth_set((sc_wifi_ap_index_e)idx, (sc_wifi_bandwidth_e)bandwidth);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d bandwidth = %d \n", __func__, idx, bandwidth);
+    return 0;
+}
+
+/********************************************************************
+* @brief: qser_wifi_ap_bandwidth_get, Get the bandwidth of wlan0 or wlan1
+* @param idx [IN]: int, Set wlan0 or wlan1
+* @param bandwidth [OUT]: lynq_wifi_bandwidth_type_e *, Get the bandwidth
+* @return : int, If equal to 0 succeeds, others fail
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int  qser_wifi_ap_bandwidth_get(lynq_wifi_ap_index_e idx, lynq_wifi_bandwidth_type_e *bandwidth)
+{
+    int ret = -1;
+    sc_wifi_ap_param_t param = {0};
+    if (bandwidth == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer bandwidth = 0x%p \n", __func__, bandwidth);
+        return ret;
+    }
+    ret = sc_wifi_ap_param_get((sc_wifi_ap_index_e)idx, &param);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d bandwidth = %d \n", __func__, idx, param.bandwidth);
+    *bandwidth = (lynq_wifi_bandwidth_type_e)param.bandwidth;
+    return 0;
 }
 
 /********************************************************************
@@ -110,9 +254,53 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_channel_set(int idx, const char *country_code, int channel)
+int  qser_wifi_ap_channel_set(lynq_wifi_ap_index_e idx, const char *country_code, int channel)
 {
-    return sc_wifi_ap_cc_ch_set((sc_wifi_ap_index_e)idx, country_code, channel);
+    int ret = -1;
+    if (country_code == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer country_code = 0x%p \n", __func__, country_code);
+        return ret;
+    }
+    ret = sc_wifi_ap_cc_ch_set((sc_wifi_ap_index_e)idx, country_code, channel);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d country_code = %s channel = %d\n", __func__, idx, country_code, channel);
+    return 0;
+}
+
+/********************************************************************
+* @brief: qser_wifi_ap_channel_get, Get the channel for wlan0 or wlan1
+* @param idx [IN]: int, Set wlan0 or wlan1
+* @param country_code [OUT]: char *, Get country code
+* @param channel [OUT]: int *, Get the channel
+* @return : int, If equal to 0 succeeds, others fail
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int  qser_wifi_ap_channel_get(lynq_wifi_ap_index_e idx, char *country_code, int *channel)
+{
+    int ret = -1;
+    sc_wifi_ap_param_t param = {0};
+    if (country_code == NULL || channel == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer country_code = 0x%p channel = 0x%p\n", __func__, country_code, channel);
+        return ret;
+    }
+    ret = sc_wifi_ap_param_get((sc_wifi_ap_index_e)idx, &param);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d country_code = %s channel = %d\n", __func__, idx, param.countrycode, param.channel);
+    strncpy(country_code, param.countrycode, sizeof(param.countrycode) - 1);
+    *channel = param.channel;
+    return 0;
 }
 
 /********************************************************************
@@ -125,9 +313,15 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int qser_wifi_ap_auth_set(int idx, lynq_wifi_auth_e auth_mode, const char *auth_passwd)
+int qser_wifi_ap_auth_set(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e auth_mode, const char *auth_passwd)
 {
+    int ret = -1;
     sc_wifi_auth_e type;
+    if (auth_passwd == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer auth_passwd = 0x%p\n", __func__, auth_passwd);
+        return ret;
+    }
     switch (auth_mode)
     {
         case LYNQ_WIFI_AUTH_OPEN:
@@ -152,7 +346,67 @@
     sc_wifi_ap_auth_t auth;
     auth.auth = (sc_wifi_auth_e)type;
     strncpy(auth.passwd, auth_passwd, sizeof(auth.passwd) - 1);
-    return sc_wifi_ap_auth_set((sc_wifi_ap_index_e)idx, &auth);
+    ret = sc_wifi_ap_auth_set((sc_wifi_ap_index_e)idx, &auth);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d auth_mode = %d auth_passwd = %s\n", __func__, idx, auth_mode, auth_passwd);
+    return 0;
+}
+
+/********************************************************************
+* @brief: qser_wifi_ap_auth_get, Get the security authentication mode and password of wlan0 or wlan1
+* @param idx [IN]: int, Set wlan0 or wlan1
+* @param auth_mode [OUT]: lynq_wifi_auth_e *, Get the security authentication mode
+* @param auth_passwd [OUT]: char *, Get password
+* @return : int, If equal to 0 succeeds, others fail
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int qser_wifi_ap_auth_get(lynq_wifi_ap_index_e idx, lynq_wifi_auth_e *auth_mode, char *auth_passwd)
+{
+    int ret = -1;
+    sc_wifi_ap_param_t param = {0};
+    if (auth_mode == NULL || auth_passwd == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer auth_mode = 0x%p auth_passwd = 0x%p\n", __func__, auth_mode, auth_passwd);
+        return ret;
+    }
+    ret = sc_wifi_ap_param_get((sc_wifi_ap_index_e)idx, &param);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d auth_mode = %d auth_passwd = %s \n", __func__, idx, param.auth.auth, param.auth.passwd);
+    strncpy(auth_passwd, param.auth.passwd, sizeof(param.auth.passwd) - 1);
+    lynq_wifi_auth_e type;
+    switch (param.auth.auth)
+    {
+        case SC_WIFI_AUTH_OPEN:
+            type = LYNQ_WIFI_AUTH_OPEN;
+            break;
+        case SC_WIFI_AUTH_WPA2_PSK:
+            type = LYNQ_WIFI_AUTH_WPA2_PSK;
+            break;
+        case SC_WIFI_AUTH_WPA_WPA2_PSK_BOTH:
+            type = LYNQ_WIFI_AUTH_WPA_WPA2_PSK_BOTH;
+            break;
+        case SC_WIFI_AUTH_WPA3_PSK:
+            type = LYNQ_WIFI_AUTH_WPA3_PSK;
+            break;
+        case SC_WIFI_AUTH_WPA2_WPA3_PSK_BOTH:
+            type = LYNQ_WIFI_AUTH_WPA2_WPA3_PSK_BOTH;
+            break;
+        default:
+            type = LYNQ_WIFI_AUTH_MIN;
+            break;
+    }
+    *auth_mode = type;
+    return 0;
 }
 
 /********************************************************************
@@ -164,9 +418,46 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_max_sta_set(int idx, int max_sta_num)
+int  qser_wifi_ap_max_sta_set(lynq_wifi_ap_index_e idx, int max_sta_num)
 {
-    return sc_wifi_ap_max_sta_num_set((sc_wifi_ap_index_e)idx, max_sta_num);
+    int ret = -1;
+    ret = sc_wifi_ap_max_sta_num_set((sc_wifi_ap_index_e)idx, max_sta_num);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d max_sta_num = %d \n", __func__, idx, max_sta_num);
+    return 0;
+}
+
+/********************************************************************
+* @brief: qser_wifi_ap_max_sta_get, Get the maximum number of STAs for wlan0 or wlan1
+* @param idx [IN]: int, Set wlan0 or wlan1
+* @param max_sta_num [OUT]: int *, Get the maximum number
+* @return : int, If equal to 0 succeeds, others fail
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int  qser_wifi_ap_max_sta_get(lynq_wifi_ap_index_e idx, int *max_sta_num)
+{
+    int ret = -1;
+    sc_wifi_ap_param_t param = {0};
+    if (max_sta_num == NULL)
+    {
+        LYERRLOG("[%s ] Null pointer max_sta_num = 0x%p\n", __func__,max_sta_num);
+        return ret;
+    }
+    ret = sc_wifi_ap_param_get((sc_wifi_ap_index_e)idx, &param);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d max_sta_num = %d \n", __func__, idx, param.max_sta_num);
+    *max_sta_num = param.max_sta_num;
+    return 0;
 }
 
 /********************************************************************
@@ -177,9 +468,17 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_start(int idx)
+int  qser_wifi_ap_start(lynq_wifi_ap_index_e idx)
 {
-    return sc_wifi_ap_start((sc_wifi_ap_index_e)idx);
+    int ret = -1;
+    ret = sc_wifi_ap_start((sc_wifi_ap_index_e)idx);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d \n", __func__, idx);
+    return 0;
 }
 
 /********************************************************************
@@ -190,9 +489,17 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_stop(int idx)
+int  qser_wifi_ap_stop(lynq_wifi_ap_index_e idx)
 {
-    return sc_wifi_ap_stop((sc_wifi_ap_index_e)idx);
+    int ret = -1;
+    ret = sc_wifi_ap_stop((sc_wifi_ap_index_e)idx);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d \n", __func__, idx);
+    return 0;
 }
 
 /********************************************************************
@@ -203,17 +510,26 @@
 * @see: NA
 * @warning: NA
 *********************************************************************/
-int  qser_wifi_ap_restart(int idx)
+int  qser_wifi_ap_restart(lynq_wifi_ap_index_e idx)
 {
-    int ret = sc_wifi_ap_stop((sc_wifi_ap_index_e)idx);
+    int ret = -1;
+    ret = sc_wifi_ap_stop((sc_wifi_ap_index_e)idx);
     if (0 != ret)
     {
-        return -1;
+        LYERRLOG("[%s ] stop: %d ret = %d\n", __func__,ret);
+        return ret;
     }
-    return sc_wifi_ap_start((sc_wifi_ap_index_e)idx);
+    ret = sc_wifi_ap_start((sc_wifi_ap_index_e)idx);
+    if (0 != ret)
+    {
+        LYERRLOG("[%s ] start: %d ret = %d\n", __func__,ret);
+        return ret;
+    }
+    LYINFLOG("[%s ] idx = %d \n", __func__, idx);
+    return 0;
 }
 
-//DEFINE_LYNQ_LIB_LOG(LYNQ_WIFI)
+DEFINE_LYNQ_LIB_LOG(LYNQ_WIFI)
 
 #ifdef __cplusplus
 }
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/makefile
index 5d2fc23..6707cdd 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-wifi/makefile
@@ -13,11 +13,14 @@
   -I. \
   -I$(LOCAL_PATH)/include \
   -I$(LOCAL_PATH)/ \
+  -I$(ROOT)$(includedir)/logger \
+  -I$(ROOT)$(includedir)/liblog \
 
 LOCAL_LIBS := \
     -L. \
     -ldl \
     -lstdc++ \
+    -llynq-log \
     -lsctel \
 
 SOURCES = lynq-qser-wifi.cpp
