Add to get wifi/dn battery data 64/231764/2 accepted/tizen/unified/20200428.130009 submit/tizen/20200427.232234 submit/tizen/20200427.232322 submit/tizen/20200528.013502
authorhyunuk.tak <hyunuk.tak@samsung.com>
Fri, 24 Apr 2020 05:56:46 +0000 (14:56 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Mon, 27 Apr 2020 10:34:27 +0000 (19:34 +0900)
Change-Id: I224d7a69a64ca99e77159804b21c04abfcc2a3fd
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
test/battery.c
test/battery.h
test/stc_test.c

index 1ef838f3c1d7b85deecd2ed8e568f8b2795f5baf..3b0ece8ffdb6628088716dea051e1d2373cdd19a 100755 (executable)
@@ -36,6 +36,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <gio/gio.h>
 
 #include <stc.h>
 #include <stc_internal.h>
 #include "stc_test.h"
 #include "stc_menu.h"
 
+#define NETCONFIG_SERVICE            "net.netconfig"
+#define NETCONFIG_NETWORK_PATH       "/net/netconfig/network"
+#define NETCONFIG_BATTERY_INTERFACE  NETCONFIG_SERVICE ".battery"
+#define NETCONFIG_BATTERY_GET_DN     "GetBatteryDnList"
+#define NETCONFIG_BATTERY_GET_WIFI   "GetBatteryWifiList"
+
+#define BATTERY_DBUS_REPLY_TIMEOUT        (15 * 1000)
+
+#define BATTERY_ATM_LIST            "atm_list"
+#define BATTERY_ATM_APP_ID          "atm_app_id"
+#define BATTERY_ATM_RX              "atm_rx"
+#define BATTERY_ATM_TX              "atm_tx"
+
+#define BATTERY_DN_TIME_LEVEL_0     "time_level_0"
+#define BATTERY_DN_TIME_LEVEL_1     "time_level_1"
+#define BATTERY_DN_TIME_LEVEL_2     "time_level_2"
+#define BATTERY_DN_TIME_LEVEL_3     "time_level_3"
+#define BATTERY_DN_TIME_LEVEL_4     "time_level_4"
+#define BATTERY_DN_TIME_LEVEL_5     "time_level_5"
+#define BATTERY_DN_TIME_LEVEL_6     "time_level_6"
+
+#define BATTERY_WIFI_TIME_LEVEL_0   "time_level_0"
+#define BATTERY_WIFI_TIME_LEVEL_1   "time_level_1"
+#define BATTERY_WIFI_TIME_LEVEL_2   "time_level_2"
+#define BATTERY_WIFI_TIME_LEVEL_3   "time_level_3"
+#define BATTERY_WIFI_TIME_LEVEL_4   "time_level_4"
+#define BATTERY_WIFI_START_TIME     "start_time"
+#define BATTERY_WIFI_END_TIME       "end_time"
+#define BATTERY_WIFI_SCAN_TIME      "scan_time"
+
 typedef struct {
        char *app_id;
        uint time;
@@ -73,67 +104,274 @@ typedef struct {
        uint scan_time;
        GSList *atm_list;
        GSList *data_list;
-\r} battery_wifi_data_s;
-
-typedef void *bm_data_h;
-typedef enum {
-       BM_DATA_TYPE_BLE,
-       BM_DATA_TYPE_WIFI,
-       BM_DATA_TYPE_CPU,
-       BM_DATA_TYPE_DISPLAY,
-       BM_DATA_TYPE_DEVICE_NETWORK,
-       BM_DATA_TYPE_GPS_SENSOR,
-       BM_DATA_TYPE_HRM_SENSOR,
-       BM_DATA_TYPE_BATTERY,
-       BM_DATA_TYPE_MAX,
-} bm_plugin_data_type_e;
+} battery_wifi_data_s;
 
-typedef struct {
-       int (*init) (void);
-       int (*deinit) (void);
-       int (*get_feature_data) (bm_data_h *, bm_plugin_data_type_e);
-} netconfig_bm_plugin_s;
+typedef void (*dbus_dict_cb) (const char *key, GVariant *value, void *user_data);
+
+static void __dbus_dictionary_foreach(GVariantIter *iter,
+               dbus_dict_cb cb, void *user_data)
+{
+       char *key = NULL;
+       GVariant *value = NULL;
+
+       if (!cb)
+               return;
 
-#define NETCONFIG_PLUGIN_DN_FILEPATH     "/usr/lib/net-config-plugin-bm-dn.so"
-#define NETCONFIG_PLUGIN_WIFI_FILEPATH   "/usr/lib/net-config-plugin-bm-wifi.so"
+       while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+               if (key)
+                       cb(key, value, user_data);
+       }
+}
 
-static void *handle_plugin_dn;
-static void *handle_plugin_wifi;
+static GVariant *__dbus_invoke_method(const char *dest, const char *path,
+               const char *interface_name, const char *method, GVariant *params)
+{
 
-static netconfig_bm_plugin_s *netconfig_plugin_dn;
-static netconfig_bm_plugin_s *netconfig_plugin_wifi;
+       GError *error = NULL;
+       GVariant *reply = NULL;
+       GDBusConnection *connection;
 
-static gboolean netconfig_plugin_dn_enabled = FALSE;
-static gboolean netconfig_plugin_wifi_enabled = FALSE;
+       connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+       if (connection == NULL) {
+               msg("failed to get dbus connection");
+               return reply;
+       }
 
-static int __test_stc_battery_dn_get_data(MManager *mm, struct menu_data *menu)
+       reply = g_dbus_connection_call_sync(
+                       connection,
+                       dest,
+                       path,
+                       interface_name,
+                       method,
+                       params,
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE,
+                       BATTERY_DBUS_REPLY_TIMEOUT,
+                       NULL,
+                       &error);
+
+       g_object_unref(connection);
+
+       if (reply == NULL) {
+               if (error != NULL) {
+                       msg("failed to call dbus method, error [%d: %s]", error->code, error->message);
+                       g_error_free(error);
+               } else {
+                       msg("failed to call dbus method");
+               }
+
+               return NULL;
+       }
+
+       return reply;
+}
+
+static void __extract_app_data(const char *key, GVariant *value, void *user_data)
 {
-       bm_data_h data;
+       battery_app_data_s *app_data = (battery_app_data_s *)user_data;
+
+       if (app_data == NULL)
+               return;
+
+       if (!g_strcmp0(key, BATTERY_ATM_APP_ID)) {
+               const char *app_id = g_variant_get_string(value, NULL);
+               app_data->app_id = g_strdup(app_id);
+       } else if (!g_strcmp0(key, BATTERY_ATM_RX)) {
+               app_data->rx = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_ATM_TX)) {
+               app_data->tx = g_variant_get_uint32(value);
+       }
+}
 
-       if (!netconfig_plugin_dn_enabled)
-               return STC_ERROR_NOT_INITIALIZED;
+static void __extract_dn_data(const char *key, GVariant *value, void *user_data)
+{
+       battery_dn_data_s *dn_data = (battery_dn_data_s *)user_data;
+
+       if (dn_data == NULL)
+               return;
+
+       if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_0)) {
+               dn_data->time_level_0 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_1)) {
+               dn_data->time_level_1 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_2)) {
+               dn_data->time_level_2 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_3)) {
+               dn_data->time_level_3 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_4)) {
+               dn_data->time_level_4 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_5)) {
+               dn_data->time_level_5 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_DN_TIME_LEVEL_6)) {
+               dn_data->time_level_6 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_ATM_LIST)) {
+               GVariant *list_value = NULL;
+               GVariantIter *iter = NULL;
+               GVariantIter *iter_row = NULL;
+
+               g_variant_get(value, "v", &list_value);
+               g_variant_get(list_value, "aa{sv}", &iter);
+
+               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+                       battery_app_data_s *app_data = g_try_malloc0(sizeof(battery_app_data_s));
+                       if (app_data != NULL) {
+                               __dbus_dictionary_foreach(iter_row, __extract_app_data, app_data);
+                               dn_data->atm_list = g_slist_append(dn_data->atm_list, app_data);
+                       }
+
+                       g_variant_iter_free(iter_row);
+               }
 
-       netconfig_plugin_dn->get_feature_data(&data, 0);
+               g_variant_iter_free(iter);
+       }
+}
+
+static void __extract_wifi_data(const char *key, GVariant *value, void *user_data)
+{
+       battery_wifi_data_s *wifi_data = (battery_wifi_data_s *)user_data;
+
+       if (wifi_data == NULL)
+               return;
+
+       if (!g_strcmp0(key, BATTERY_WIFI_TIME_LEVEL_0)) {
+               wifi_data->time_level_0 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_TIME_LEVEL_1)) {
+               wifi_data->time_level_1 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_TIME_LEVEL_2)) {
+               wifi_data->time_level_2 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_TIME_LEVEL_3)) {
+               wifi_data->time_level_3 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_TIME_LEVEL_4)) {
+               wifi_data->time_level_4 = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_START_TIME)) {
+               wifi_data->start_time = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_END_TIME)) {
+               wifi_data->end_time = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_WIFI_SCAN_TIME)) {
+               wifi_data->scan_time = g_variant_get_uint32(value);
+       } else if (!g_strcmp0(key, BATTERY_ATM_LIST)) {
+               GVariant *list_value = NULL;
+               GVariantIter *iter = NULL;
+               GVariantIter *iter_row = NULL;
+
+               g_variant_get(value, "v", &list_value);
+               g_variant_get(list_value, "aa{sv}", &iter);
+
+               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+                       battery_app_data_s *app_data = g_try_malloc0(sizeof(battery_app_data_s));
+                       if (app_data != NULL) {
+                               __dbus_dictionary_foreach(iter_row, __extract_app_data, app_data);
+                               wifi_data->atm_list = g_slist_append(wifi_data->atm_list, app_data);
+                       }
+
+                       g_variant_iter_free(iter_row);
+               }
+
+               g_variant_iter_free(iter);
+       }
+}
+
+stc_error_e __battery_get_dn_data(battery_dn_data_s **handle)
+{
+       GVariant *message = NULL;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       battery_dn_data_s *dn_list = NULL;
+       battery_dn_data_s *curr_dn_data = NULL;
+
+       message = __dbus_invoke_method(NETCONFIG_SERVICE,
+               NETCONFIG_NETWORK_PATH, NETCONFIG_BATTERY_INTERFACE,
+               NETCONFIG_BATTERY_GET_DN, NULL);
+
+       if (message == NULL)
+               return STC_ERROR_OPERATION_FAILED;
+
+       g_variant_get(message, "(aa{sv})", &iter);
+
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               battery_dn_data_s *dn_data = g_try_malloc0(sizeof(battery_dn_data_s));
+               if (dn_data != NULL) {
+                       __dbus_dictionary_foreach(iter_row, __extract_dn_data, dn_data);
+
+                       if (dn_list == NULL) {
+                               dn_list = dn_data;
+                               curr_dn_data = dn_data;
+                       } else {
+                               curr_dn_data->data_list = g_slist_append(curr_dn_data->data_list, dn_data);
+                               curr_dn_data = dn_data;
+                       }
+               }
+               g_variant_iter_free(iter_row);
+       }
 
-       battery_dn_data_s *dn_data = (battery_dn_data_s *)data;
+       g_variant_iter_free(iter);
+       g_variant_unref(message);
 
-       msg(HR_SINGLE);
+       *handle = dn_list;
+
+       return STC_ERROR_NONE;
+}
+
+stc_error_e __battery_get_wifi_data(battery_wifi_data_s **handle)
+{
+       GVariant *message = NULL;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       battery_wifi_data_s *wifi_list = NULL;
+       battery_wifi_data_s *curr_wifi_data = NULL;
+
+       message = __dbus_invoke_method(NETCONFIG_SERVICE,
+               NETCONFIG_NETWORK_PATH, NETCONFIG_BATTERY_INTERFACE,
+               NETCONFIG_BATTERY_GET_WIFI, NULL);
+
+       if (message == NULL)
+               return STC_ERROR_OPERATION_FAILED;
+
+       g_variant_get(message, "(aa{sv})", &iter);
+
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               battery_wifi_data_s *wifi_data = g_try_malloc0(sizeof(battery_wifi_data_s));
+               if (wifi_data != NULL) {
+                       __dbus_dictionary_foreach(iter_row, __extract_wifi_data, wifi_data);
+
+                       if (wifi_list == NULL) {
+                               wifi_list = wifi_data;
+                               curr_wifi_data = wifi_data;
+                       } else {
+                               curr_wifi_data->data_list = g_slist_append(curr_wifi_data->data_list, wifi_data);
+                               curr_wifi_data = wifi_data;
+                       }
+               }
+               g_variant_iter_free(iter_row);
+       }
+
+       g_variant_iter_free(iter);
+       g_variant_unref(message);
+
+       *handle = wifi_list;
+
+       return STC_ERROR_NONE;
+}
+
+static void __battery_print_dn_data(battery_dn_data_s *dn_data)
+{
+       msg("===============================================================");
 
        while (dn_data != NULL) {
                GSList *atm_list = NULL;
                GSList *data_list = NULL;
 
-               msg("[DN] rssi[%d/%d/%d/%d/%d/%d/%d]",
+               msg("device network rssi[%d/%d/%d/%d/%d/%d/%d]",
                        dn_data->time_level_0, dn_data->time_level_1, dn_data->time_level_2,
                        dn_data->time_level_3, dn_data->time_level_4, dn_data->time_level_5,
                        dn_data->time_level_6);
 
                for (atm_list = dn_data->atm_list; atm_list != NULL; atm_list = atm_list->next) {
                        battery_app_data_s *app_data = (battery_app_data_s *)atm_list->data;
-                       msg("[DN] app_id[%s] rx[%d] tx[%d]", app_data->app_id, app_data->rx, app_data->tx);
+                       msg("app_id[%s] rx[%d] tx[%d]", app_data->app_id, app_data->rx, app_data->tx);
                }
 
-               msg(HR_SINGLE);
+               msg("===============================================================");
 
                if (dn_data->data_list == NULL)
                        break;
@@ -141,38 +379,27 @@ static int __test_stc_battery_dn_get_data(MManager *mm, struct menu_data *menu)
                data_list = dn_data->data_list;
                dn_data = (battery_dn_data_s *)data_list->data;
        }
-
-       return STC_ERROR_NONE;
 }
 
-static int __test_stc_battery_wifi_get_data(MManager *mm, struct menu_data *menu)
+static void __battery_print_wifi_data(battery_wifi_data_s *wifi_data)
 {
-       bm_data_h data;
-
-       if (!netconfig_plugin_wifi_enabled)
-               return STC_ERROR_NOT_INITIALIZED;
-
-       netconfig_plugin_wifi->get_feature_data(&data, 0);
-
-       battery_wifi_data_s *wifi_data = (battery_wifi_data_s *)data;
-
-       msg(HR_SINGLE);
+       msg("===============================================================");
 
        while (wifi_data != NULL) {
                GSList *atm_list = NULL;
                GSList *data_list = NULL;
 
-               msg("[Wi-Fi] start[%ld] end[%ld] scan[%d] rssi[%d/%d/%d/%d/%d]",
+               msg("wifi start[%ld] end[%ld] scan[%d] rssi[%d/%d/%d/%d/%d]",
                        wifi_data->start_time, wifi_data->end_time, wifi_data->scan_time,
                        wifi_data->time_level_0, wifi_data->time_level_1, wifi_data->time_level_2,
                        wifi_data->time_level_3, wifi_data->time_level_4);
 
                for (atm_list = wifi_data->atm_list; atm_list != NULL; atm_list = atm_list->next) {
                        battery_app_data_s *app_data = (battery_app_data_s *)atm_list->data;
-                       msg("[Wi-Fi] app_id[%s] rx[%d] tx[%d]", app_data->app_id, app_data->rx, app_data->tx);
+                       msg("app_id[%s] rx[%d] tx[%d]", app_data->app_id, app_data->rx, app_data->tx);
                }
 
-               msg(HR_SINGLE);
+               msg("===============================================================");
 
                if (wifi_data->data_list == NULL)
                        break;
@@ -180,78 +407,34 @@ static int __test_stc_battery_wifi_get_data(MManager *mm, struct menu_data *menu
                data_list = wifi_data->data_list;
                wifi_data = (battery_wifi_data_s *)data_list->data;
        }
-
-       return STC_ERROR_NONE;
-}
-
-int test_stc_battery_dn_init(void)
-{
-       handle_plugin_dn = dlopen(NETCONFIG_PLUGIN_DN_FILEPATH, RTLD_NOW);
-       if (!handle_plugin_dn) {
-               msg("Can't load %s: %s", NETCONFIG_PLUGIN_DN_FILEPATH, dlerror());
-               return STC_ERROR_NOT_INITIALIZED;
-       }
-
-       netconfig_plugin_dn = dlsym(handle_plugin_dn, "netconfig_bm_dn_plugin");
-       if (!netconfig_plugin_dn) {
-               msg("Can't load symbol: %s", dlerror());
-               dlclose(handle_plugin_dn);
-               return STC_ERROR_NOT_INITIALIZED;
-       }
-
-       netconfig_plugin_dn->init();
-       netconfig_plugin_dn_enabled = TRUE;
-
-       return STC_ERROR_NONE;
-}
-
-int test_stc_battery_dn_deinit(void)
-{
-       if (!netconfig_plugin_dn_enabled)
-               return STC_ERROR_NOT_INITIALIZED;
-
-       netconfig_plugin_dn->deinit();
-       netconfig_plugin_dn_enabled = FALSE;
-       dlclose(netconfig_plugin_dn);
-
-       return STC_ERROR_NONE;
 }
 
-int test_stc_battery_wifi_init(void)
+static int __test_battery_get_dn(MManager *mm, struct menu_data *menu)
 {
-       handle_plugin_wifi = dlopen(NETCONFIG_PLUGIN_WIFI_FILEPATH, RTLD_NOW);
-       if (!handle_plugin_wifi) {
-               msg("Can't load %s: %s", NETCONFIG_PLUGIN_WIFI_FILEPATH, dlerror());
-               return STC_ERROR_NOT_INITIALIZED;
-       }
+       int ret;
+       battery_dn_data_s *dn_data;
 
-       netconfig_plugin_wifi = dlsym(handle_plugin_wifi, "netconfig_bm_wifi_plugin");
-       if (!netconfig_plugin_wifi) {
-               msg("Can't load symbol: %s", dlerror());
-               dlclose(handle_plugin_wifi);
-               return STC_ERROR_NOT_INITIALIZED;
-       }
-
-       netconfig_plugin_wifi->init();
-       netconfig_plugin_wifi_enabled = TRUE;
+       ret = __battery_get_dn_data(&dn_data);
+       if (ret == STC_ERROR_NONE)
+               __battery_print_dn_data(dn_data);
 
-       return STC_ERROR_NONE;
+       return ret;
 }
 
-int test_stc_battery_wifi_deinit(void)
+static int __test_battery_get_wifi(MManager *mm, struct menu_data *menu)
 {
-       if (!netconfig_plugin_wifi_enabled)
-               return STC_ERROR_NOT_INITIALIZED;
+       int ret;
+       battery_wifi_data_s *wifi_data;
 
-       netconfig_plugin_wifi->deinit();
-       netconfig_plugin_wifi_enabled = FALSE;
-       dlclose(netconfig_plugin_wifi);
+       ret = __battery_get_wifi_data(&wifi_data);
+       if (ret == STC_ERROR_NONE)
+               __battery_print_wifi_data(wifi_data);
 
-       return STC_ERROR_NONE;
+       return ret;
 }
 
 struct menu_data menu_battery[] = {
-       { "1", LOG_LIGHTBLUE "[Get]" LOG_END " DN", NULL, __test_stc_battery_dn_get_data, NULL},
-       { "2", LOG_LIGHTBLUE "[Get]" LOG_END " Wi-Fi", NULL, __test_stc_battery_wifi_get_data, NULL},
+       { "1", LOG_LIGHTBLUE "[Get]" LOG_END " Device network", NULL, __test_battery_get_dn, NULL},
+       { "2", LOG_LIGHTBLUE "[Get]" LOG_END " Wi-Fi", NULL, __test_battery_get_wifi, NULL},
        { NULL, NULL, },
 };
index 1d8c71797be9160c0d6126d38aded7b3b667bea3..e06159d16cca874bb9c35b3210311503be52b329 100755 (executable)
  *  Local Functions Definition
  *****************************************************************************/
 
-int test_stc_battery_dn_init(void);
-int test_stc_battery_dn_deinit(void);
-
-int test_stc_battery_wifi_init(void);
-int test_stc_battery_wifi_deinit(void);
-
 #endif /** __TEST_STC_BATTERY_H__ */
index 3ecdeb2b6a4f9afc7a7c9fd1fb3cd737dd4b40f1..6c5804ac275a63a832e0b10609a27b00ba0cbfe5 100755 (executable)
@@ -434,8 +434,6 @@ static int __test_stc_initialize(MManager *mm, struct menu_data *menu)
        test_stc_restriction_list_create();
        test_stc_restriction_register_cb();
        test_stc_pcap_create();
-       test_stc_battery_dn_init();
-       test_stc_battery_wifi_init();
 
        menu_manager_set_user_data(mm, g_stc);
 
@@ -452,8 +450,6 @@ static int __test_stc_deinitialize(void)
        test_stc_restriction_list_destroy();
        test_stc_restriction_unregister_cb();
        test_stc_pcap_destroy();
-       test_stc_battery_dn_deinit();
-       test_stc_battery_wifi_deinit();
 
        if (g_stc) {
                ret = stc_deinitialize(g_stc);