From: Milind Murhekar Date: Thu, 14 Dec 2017 06:59:50 +0000 (+0530) Subject: Merged Hotel TV SoftAP Support X-Git-Tag: submit/tizen_4.0/20171214.075100^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=96c3b08dca715bce22b40b7b95d10a020680f52a;p=platform%2Fcore%2Fapi%2Ftethering.git Merged Hotel TV SoftAP Support Description: This patch modifies the changes for Tizen 4.0 Hotel TV support Change-Id: Icb36b82fdb356013609915a0add3338150635a97 Signed-off-by: Milind Murhekar --- diff --git a/include/tethering_private.h b/include/tethering_private.h index 7576e43..0ec874e 100644 --- a/include/tethering_private.h +++ b/include/tethering_private.h @@ -40,6 +40,7 @@ extern "C" { #define DBG(fmt, args...) LOGD(fmt, ##args) #define WARN(fmt, args...) LOGW(fmt, ##args) #define ERR(fmt, args...) LOGE(fmt, ##args) +#define SINFO(fmt, args...) SECURE_LOGI(fmt, ##args) #define SDBG(fmt, args...) SECURE_LOGD(fmt, ##args) #define SERR(fmt, args...) SECURE_LOGE(fmt, ##args) @@ -234,6 +235,13 @@ typedef enum { #define TETHERING_WIFI_KEY_MAX_LEN 64 /**< Maximum length of wifi key */ #define TETHERING_WIFI_HASH_KEY_MAX_LEN 64 #define TETHERING_WIFI_MAX_STA 10 /**< Maximum Wi-Fi tethering station */ +#ifdef TIZEN_TV_EXT +#define VCONFKEY_WIFI_TXPOWER "db/dnet/txpower" /**< VCONFKEY for TX Power */ +#define VCONFKEY_WIFI_CHANNEL "db/dnet/channel" /**< VCONFKEY for Channel */ +#define VCONFKEY_WIFI_SSID "db/dnet/ssid" /**< VCONFKEY for ssid */ +#define TETHERING_WIFI_MAX_TXPOWER 100 /**< Default max TX POWER */ +#define TETHERING_WIFI_DEFAULT_CHANNEL 6 /**< Default channel */ +#endif/*TIZEN_TV_EXT*/ #define TETHERING_WIFI_MODE_MAX_LEN 10 /**< Maximum length of mode */ @@ -296,6 +304,9 @@ typedef struct { bool dhcp_enabled; int channel; int wifi_max_connected; +#ifdef TIZEN_TV_EXT + unsigned int txpower; +#endif/*TIZEN_TV_EXT*/ } __tethering_h; typedef struct { diff --git a/packaging/capi-network-tethering.spec b/packaging/capi-network-tethering.spec index e20b6b3..e1e095e 100644 --- a/packaging/capi-network-tethering.spec +++ b/packaging/capi-network-tethering.spec @@ -1,6 +1,6 @@ Name: capi-network-tethering Summary: Tethering Framework -Version: 1.0.54 +Version: 1.0.55 Release: 1 Group: System/Network License: Apache-2.0 @@ -34,9 +34,16 @@ Development package for Tethering framework library %build +%if (("%{_vd_cfg_product_type}" == "HTV")) +export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE -DTIZEN_TV_EXT" +export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE -DTIZEN_TV_EXT" +export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE -DTIZEN_TV_EXT" +%else export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE" export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE" export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE" +%endif + %cmake . diff --git a/src/tethering.c b/src/tethering.c index a991af3..3ffff26 100755 --- a/src/tethering.c +++ b/src/tethering.c @@ -37,6 +37,7 @@ #define TEMP_LIST tzplatform_mkpath(TZ_SYS_VAR, "/lib/hostapd/.hostapd_tmp") #define MAC_ADDR_LEN 18 #define MAX_BUF_SIZE 80 +#define DBUS_DEFAULT_REPLY_TIMEOUT 15000 #define IPTABLES "/usr/sbin/iptables" #define TABLE_NAT "nat" @@ -125,7 +126,8 @@ static __tethering_sig_t sigs[] = { {0, SIGNAL_NAME_SECURITY_TYPE_CHANGED, __handle_security_type_changed}, {0, SIGNAL_NAME_SSID_VISIBILITY_CHANGED, __handle_ssid_visibility_changed}, {0, SIGNAL_NAME_PASSPHRASE_CHANGED, __handle_passphrase_changed}, - {0, SIGNAL_NAME_DHCP_STATUS, __handle_dhcp} }; + {0, SIGNAL_NAME_DHCP_STATUS, __handle_dhcp}, + {0, "", NULL} }; static int retry = 0; @@ -205,6 +207,9 @@ static bool __get_ssid_from_vconf(const char *path, char *ssid, unsigned int siz if (ptr == NULL) return false; + if (!g_strcmp0(ptr, "")) + return false; + if (!g_utf8_validate(ptr, -1, (const char **)&ptr_tmp)) *ptr_tmp = '\0'; @@ -375,6 +380,9 @@ static void __handle_dhcp(GDBusConnection *connection, const gchar *sender_name, goto DONE; } + SINFO("[%s] type %d, ip %s, mac %s, name %s, timestamp %d", + buf, ap_type, ip, mac, name, timestamp); + ccb = th->changed_cb[type]; if (ccb == NULL) goto DONE; @@ -411,6 +419,8 @@ static void __handle_net_closed(GDBusConnection *connection, const gchar *sender void *data = NULL; tethering_disabled_cause_e code = TETHERING_DISABLED_BY_NETWORK_CLOSE; + SINFO("Wi-Fi Tethering Disabled by network close !"); + for (type = TETHERING_TYPE_USB; type <= TETHERING_TYPE_BT; type++) { dcb = th->disabled_cb[type]; if (dcb == NULL) @@ -797,6 +807,8 @@ static void __wifi_enabled_cfm_cb(GObject *source_object, GAsyncResult *res, TETHERING_SERVICE_OBJECT_PATH, NULL, G_DBUS_SIGNAL_FLAGS_NONE, sigs[E_SIGNAL_WIFI_TETHER_ON].cb, (gpointer)th, NULL); + SINFO("Wi-Fi Tethering enabled event ! error(%d)", error); + if (!ecb) { INFO("-\n"); //LCOV_EXCL_LINE return; @@ -999,6 +1011,8 @@ static void __disabled_cfm_cb(GObject *source_object, GAsyncResult *res, INFO("cfm event : %d info : %d\n", event_type, error); switch (event_type) { case MOBILE_AP_DISABLE_WIFI_TETHERING_CFM: + + SINFO("Wi-Fi Tethering disbaled event !"); sigs[E_SIGNAL_WIFI_TETHER_OFF].sig_id = g_dbus_connection_signal_subscribe(th->client_bus, NULL, TETHERING_SERVICE_INTERFACE, sigs[E_SIGNAL_WIFI_TETHER_OFF].name, TETHERING_SERVICE_OBJECT_PATH, NULL, G_DBUS_SIGNAL_FLAGS_NONE, @@ -1146,13 +1160,15 @@ static void __settings_reloaded_cb(GObject *source_object, GAsyncResult *res, g_error_free(g_error); } if (th->settings_reloaded_cb == NULL) { - DBG("There is no settings_reloaded_cb\n-\n"); + ERR("There is no settings_reloaded_cb\n-\n"); return; } g_variant_get(g_var, "(u)", &info); tethering_error = __get_error(info); g_variant_unref(g_var); + INFO("Wi-Fi Tethering settings reloaded event !"); + th->settings_reloaded_cb(tethering_error, th->settings_reloaded_user_data); @@ -1260,14 +1276,32 @@ static int __get_common_ssid(char *ssid, unsigned int size) char *ptr = NULL; char *ptr_tmp = NULL; +#ifdef TIZEN_TV_EXT + char ap_ssid[TETHERING_WIFI_SSID_MAX_LEN + 1] = {0, }; + if (__get_ssid_from_vconf(VCONFKEY_WIFI_SSID, + ap_ssid, sizeof(ap_ssid)) == false) { + ERR("vconf key get failed for ssid or invalid ssid is found"); + ptr = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR); + if (ptr == NULL) { + ERR("vconf_get_str is failed and set default ssid"); + g_strlcpy(ssid, TETHERING_DEFAULT_SSID, size); + } else { + g_strlcpy(ssid, ptr, size); + free(ptr); + } + } else { + g_strlcpy(ssid, ap_ssid, size); + } +#else ptr = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR); if (ptr == NULL) { ERR("vconf_get_str is failed and set default ssid"); g_strlcpy(ssid, TETHERING_DEFAULT_SSID, size); - } else + } else { g_strlcpy(ssid, ptr, size); - - free(ptr); + free(ptr); + } +#endif//TIZEN_TV_EXT if (!g_utf8_validate(ssid, -1, (const char **)&ptr_tmp)) *ptr_tmp = '\0'; @@ -1435,9 +1469,24 @@ API int tethering_create(tethering_h *tethering) th->sec_type = TETHERING_WIFI_SECURITY_TYPE_WPA2_PSK; th->visibility = true; th->mac_filter = false; +#ifdef TIZEN_TV_EXT + int channel = TETHERING_WIFI_DEFAULT_CHANNEL; + if (vconf_get_int(VCONFKEY_WIFI_CHANNEL, &channel) < 0) + ERR("vconf key get failed for channel !!"); + + th->channel = channel; +#else th->channel = 6; +#endif//TIZEN_TV_EXT th->mode_type = TETHERING_WIFI_MODE_TYPE_G; th->wifi_max_connected = TETHERING_WIFI_MAX_STA; +#ifdef TIZEN_TV_EXT + int txpower = TETHERING_WIFI_MAX_TXPOWER; + if (vconf_get_int(VCONFKEY_WIFI_TXPOWER, &txpower) < 0) + ERR("vconf key get failed for txpower !!"); + + th->txpower = txpower; +#endif//TIZEN_TV_EXT if (__generate_initial_passphrase(th->passphrase, sizeof(th->passphrase)) == 0) { @@ -1456,6 +1505,12 @@ API int tethering_create(tethering_h *tethering) //LCOV_EXCL_STOP } +#ifdef TIZEN_TV_EXT + SINFO("ssid: %s, key: %s, channel: %d, mode: %d, txpower: %d, security: %d max_device: %d\n", + ssid, th->passphrase, th->channel, th->mode_type, th->txpower, th->sec_type, + th->wifi_max_connected); +#endif//TIZEN_TV_EXT + #if !GLIB_CHECK_VERSION(2, 36, 0) g_type_init(); #endif @@ -1568,11 +1623,11 @@ API int tethering_enable(tethering_h tethering, tethering_type_e type) GDBusProxy *proxy = th->client_bus_proxy; GDBusConnection *connection = th->client_bus; - g_dbus_proxy_set_default_timeout(proxy, DBUS_TIMEOUT_INFINITE); + g_dbus_proxy_set_default_timeout(proxy, DBUS_DEFAULT_REPLY_TIMEOUT); if (__check_precondition(type) == FALSE) { //LCOV_EXCL_START - INFO("-\n"); + ERR("Wi-Fi Tethering cannot be enabled !\n"); return TETHERING_ERROR_OPERATION_FAILED; //LCOV_EXCL_STOP } @@ -1591,7 +1646,9 @@ API int tethering_enable(tethering_h tethering, tethering_type_e type) case TETHERING_TYPE_WIFI: { _softap_settings_t set = {"", "", "", 0, false}; - +#ifdef TIZEN_TV_EXT + unsigned int txpower; +#endif// TIZEN_TV_EXT ret = __prepare_wifi_settings(tethering, &set); if (ret != TETHERING_ERROR_NONE) { //LCOV_EXCL_START @@ -1602,11 +1659,21 @@ API int tethering_enable(tethering_h tethering, tethering_type_e type) } g_dbus_connection_signal_unsubscribe(connection, sigs[E_SIGNAL_WIFI_TETHER_ON].sig_id); - +#ifdef TIZEN_TV_EXT + txpower = th->txpower; + SINFO("ssid %s, key %s, channel %d, mode %s, txpower %d, security %d max_device %d\n", + set.ssid, set.key, set.channel, set.mode, txpower, set.sec_type, + set.max_connected); + g_dbus_proxy_call(proxy, "enable_wifi_tethering", + g_variant_new("(sssiiiiiii)", set.ssid, set.key, set.mode, set.channel, set.visibility, set.mac_filter, set.max_connected, set.sec_type, txpower, TETHERING_ADDRESS_FAMILY_IPV4), + G_DBUS_CALL_FLAGS_NONE, -1, th->cancellable, + (GAsyncReadyCallback) __wifi_enabled_cfm_cb, (gpointer)tethering); +#else g_dbus_proxy_call(proxy, "enable_wifi_tethering", g_variant_new("(sssiiiiii)", set.ssid, set.key, set.mode, set.channel, set.visibility, set.mac_filter, set.max_connected, set.sec_type, TETHERING_ADDRESS_FAMILY_IPV4), G_DBUS_CALL_FLAGS_NONE, -1, th->cancellable, (GAsyncReadyCallback) __wifi_enabled_cfm_cb, (gpointer)tethering); +#endif//TIZEN_TV_EXT break; } @@ -1853,6 +1920,8 @@ API int tethering_disable(tethering_h tethering, tethering_type_e type) g_dbus_connection_signal_unsubscribe(connection, sigs[E_SIGNAL_WIFI_TETHER_OFF].sig_id); + SINFO("Disable Wi-Fi Tethering !"); + g_dbus_proxy_call(proxy, "disable_wifi_tethering", g_variant_new("(i)", TETHERING_ADDRESS_FAMILY_IPV4), G_DBUS_CALL_FLAGS_NONE, -1, th->cancellable, @@ -2024,6 +2093,7 @@ API int tethering_get_mac_address(tethering_h tethering, tethering_type_e type, (unsigned char)ifr.ifr_hwaddr.sa_data[4], (unsigned char)ifr.ifr_hwaddr.sa_data[5]); + INFO("mac [%s] intf [%s]", macbuf, ifr.ifr_name); *mac_address = macbuf; return TETHERING_ERROR_NONE; @@ -2069,6 +2139,9 @@ API int tethering_get_network_interface_name(tethering_h tethering, tethering_ty _retvm_if(!__get_intf_name(type, intf, sizeof(intf)), TETHERING_ERROR_OPERATION_FAILED, "getting interface name is failed\n"); + + INFO("interface %s", intf); + *interface_name = strdup(intf); _retvm_if(*interface_name == NULL, TETHERING_ERROR_OUT_OF_MEMORY, "Not enough memory\n"); @@ -2135,6 +2208,7 @@ API int tethering_get_ip_address(tethering_h tethering, tethering_type_e type, t _retvm_if(*ip_address == NULL, TETHERING_ERROR_OUT_OF_MEMORY, "Not enough memory\n"); + INFO("local ip %s", ipbuf); return TETHERING_ERROR_NONE; } @@ -2344,7 +2418,7 @@ API int tethering_foreach_connected_clients(tethering_h tethering, tethering_typ g_variant_unref(value); break; } - DBG("interface is %d\n", client.interface); + INFO("interface is %d\n", client.interface); if (client.interface != type && (TETHERING_TYPE_ALL != type)) { g_free(key); g_variant_unref(value); @@ -2352,20 +2426,20 @@ API int tethering_foreach_connected_clients(tethering_h tethering, tethering_typ } } else if (g_strcmp0(key, "IP") == 0) { g_variant_get(value, "s", &ip); - SDBG("ip is %s\n", ip); + SINFO("ip is %s\n", ip); g_strlcpy(client.ip, ip, sizeof(client.ip)); } else if (g_strcmp0(key, "MAC") == 0) { g_variant_get(value, "s", &mac); - SDBG("mac is %s\n", mac); + SINFO("mac is %s\n", mac); g_strlcpy(client.mac, mac, sizeof(client.mac)); } else if (g_strcmp0(key, "Name") == 0) { g_variant_get(value, "s", &hostname); - SDBG("hsotname is %s\n", hostname); + SINFO("hsotname is %s\n", hostname); if (hostname) client.hostname = g_strdup(hostname); } else if (g_strcmp0(key, "Time") == 0) { timestamp = g_variant_get_int32(value); - DBG("timestamp is %d\n", timestamp); + INFO("timestamp is %d\n", timestamp); client.tm = (time_t)timestamp; } else { ERR("Key %s not required\n", key); @@ -2944,6 +3018,37 @@ API int tethering_wifi_set_ssid(tethering_h tethering, const char *ssid) _retvm_if(p_ssid == NULL, TETHERING_ERROR_OUT_OF_MEMORY, "strdup is failed\n"); +#ifdef TIZEN_TV_EXT + GDBusProxy *proxy = th->client_bus_proxy; + GVariant *parameters; + GError *error = NULL; + tethering_error_e ret = TETHERING_ERROR_NONE; + + parameters = g_dbus_proxy_call_sync(proxy, "set_wifi_tethering_ssid", + g_variant_new("(s)", ssid), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + + if (error) { + //LCOV_EXCL_START + ERR("g_dbus_proxy_call_sync failed because %s\n", error->message); + + if (error->code == G_DBUS_ERROR_ACCESS_DENIED) + ret = TETHERING_ERROR_PERMISSION_DENIED; + else + ret = TETHERING_ERROR_OPERATION_FAILED; + + g_error_free(error); + return ret; + //LCOV_EXCL_STOP + } + + if (parameters != NULL) { + g_variant_get(parameters, "(u)", &ret); + g_variant_unref(parameters); + } + + SINFO("set tethering ssid : %s", ssid); +#endif//TIZEN_TV_EXT + if (th->ssid) free(th->ssid); th->ssid = p_ssid; @@ -2980,6 +3085,15 @@ API int tethering_wifi_get_ssid(tethering_h tethering, char **ssid) __tethering_h *th = (__tethering_h *)tethering; char val[TETHERING_WIFI_SSID_MAX_LEN + 1] = {0, }; +#ifdef TIZEN_TV_EXT + if (__get_ssid_from_vconf(VCONFKEY_WIFI_SSID, + val, sizeof(val)) == true) { + *ssid = strdup(val); + SINFO("get tethering ssid : %s", *ssid); + return TETHERING_ERROR_NONE; + } +#endif//TIZEN_TV_EXT + if (!tethering_is_enabled(NULL, TETHERING_TYPE_WIFI)) { if (th->ssid != NULL) { DBG("Private SSID is set\n"); @@ -3206,6 +3320,38 @@ API int tethering_wifi_set_channel(tethering_h tethering, int channel) "parameter(tethering) is NULL\n"); __tethering_h *th = (__tethering_h *)tethering; + +#ifdef TIZEN_TV_EXT + GDBusProxy *proxy = th->client_bus_proxy; + GVariant *parameters; + GError *error = NULL; + tethering_error_e ret = TETHERING_ERROR_NONE; + + parameters = g_dbus_proxy_call_sync(proxy, "set_wifi_tethering_channel", + g_variant_new("(i)", channel), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + + if (error) { + //LCOV_EXCL_START + ERR("g_dbus_proxy_call_sync failed because %s\n", error->message); + + if (error->code == G_DBUS_ERROR_ACCESS_DENIED) + ret = TETHERING_ERROR_PERMISSION_DENIED; + else + ret = TETHERING_ERROR_OPERATION_FAILED; + + g_error_free(error); + return ret; + //LCOV_EXCL_STOP + } + + if (parameters != NULL) { + g_variant_get(parameters, "(u)", &ret); + g_variant_unref(parameters); + } + + SINFO("set channel : %d", channel); +#endif//TIZEN_TV_EXT + th->channel = channel; return TETHERING_ERROR_NONE; @@ -3223,8 +3369,50 @@ API int tethering_wifi_get_channel(tethering_h tethering, int *channel) "parameter(channel) is NULL\n"); __tethering_h *th = (__tethering_h *)tethering; - *channel = th->channel; +#ifdef TIZEN_TV_EXT + GDBusProxy *proxy = th->client_bus_proxy; + GVariant *parameters; + GError *error = NULL; + int ch, vconf_channel; + tethering_error_e ret = TETHERING_ERROR_NONE; + parameters = g_dbus_proxy_call_sync(proxy, "get_wifi_tethering_channel", + NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + + if (error) { + //LCOV_EXCL_START + ERR("g_dbus_proxy_call_sync failed because %s\n", error->message); + + if (error->code == G_DBUS_ERROR_ACCESS_DENIED) + ret = TETHERING_ERROR_PERMISSION_DENIED; + else + ret = TETHERING_ERROR_OPERATION_FAILED; + + g_error_free(error); + return ret; + //LCOV_EXCL_STOP + } + + if (parameters != NULL) { + g_variant_get(parameters, "(iu)", &ch, &ret); + g_variant_unref(parameters); + } + + if (ch < 0) { + ERR("failed to get Hostapd channel, set th->channel"); + *channel = th->channel; + } else + *channel = ch; + + if (vconf_get_int(VCONFKEY_WIFI_CHANNEL, &vconf_channel) < 0) + ERR("Failed to get vconf key for channel"); + else + *channel = vconf_channel; + + SINFO("get tethering channel : %d", *channel); +#else + *channel = th->channel; +#endif//TIZEN_TV_EXT return TETHERING_ERROR_NONE; } @@ -3238,6 +3426,7 @@ API int tethering_wifi_set_mode(tethering_h tethering, tethering_wifi_mode_type_ __tethering_h *th = (__tethering_h *)tethering; + SINFO("set tethering mode_type : %d", type); th->mode_type = type; return TETHERING_ERROR_NONE; @@ -3256,6 +3445,7 @@ API int tethering_wifi_get_mode(tethering_h tethering, tethering_wifi_mode_type_ __tethering_h *th = (__tethering_h *)tethering; *type = th->mode_type; + SINFO("get tethering mode_type : %d", *type); return TETHERING_ERROR_NONE; } @@ -3307,6 +3497,12 @@ API int tethering_wifi_reload_settings(tethering_h tethering, tethering_wifi_set th->settings_reloaded_cb = callback; th->settings_reloaded_user_data = user_data; +#ifdef TIZEN_TV_EXT + SINFO("ssid %s, key %s, channel %d, mode %s, txpower %d, security %d max_device %d\n", + set.ssid, set.key, set.channel, set.mode, th->txpower, set.sec_type, + set.max_connected); +#endif//TIZEN_TV_EXT + g_dbus_proxy_call(proxy, "reload_wifi_settings", g_variant_new("(sssiiiii)", set.ssid, set.key, set.mode, set.channel, set.visibility, set.mac_filter, set.max_connected, set.sec_type), G_DBUS_CALL_FLAGS_NONE, -1, th->cancellable, @@ -3643,6 +3839,10 @@ API int tethering_wifi_set_txpower(tethering_h tethering, unsigned int txpower) "tethering type[%d] is not enabled\n", TETHERING_TYPE_WIFI); __tethering_h *th = (__tethering_h *)tethering; +#ifdef TIZEN_TV_EXT + th->txpower = txpower; +#endif//TIZEN_TV_EXT + g_dbus_proxy_call_sync(th->client_bus_proxy, "hostapd_set_txpower", g_variant_new("(u)", txpower), G_DBUS_CALL_FLAGS_NONE, @@ -3654,6 +3854,8 @@ API int tethering_wifi_set_txpower(tethering_h tethering, unsigned int txpower) return TETHERING_ERROR_OPERATION_FAILED; //LCOV_EXCL_STOP } + + SINFO("set txpower = %d", txpower); return TETHERING_ERROR_NONE; } @@ -3690,6 +3892,8 @@ API int tethering_wifi_get_txpower(tethering_h tethering, unsigned int *txpower) //LCOV_EXCL_STOP } g_clear_error(&error); + + SINFO("get tethering txpower : %d", *txpower); return TETHERING_ERROR_NONE; } @@ -3789,6 +3993,7 @@ API int tethering_wifi_set_max_connected_device(tethering_h tethering, int max_d th->wifi_max_connected = max_device; + SINFO("set max client device = %d", th->wifi_max_connected); return TETHERING_ERROR_NONE; } @@ -3805,6 +4010,8 @@ API int tethering_wifi_get_max_connected_device(tethering_h tethering, int *max_ __tethering_h *th = (__tethering_h *)tethering; *max_device = th->wifi_max_connected; + + SINFO("get max client device = %d", th->wifi_max_connected); return TETHERING_ERROR_NONE; }