bbf: Fix Device.WiFi.NeighboringWiFiDiagnostic

This commit is contained in:
yyashvardhan 2019-11-05 17:42:32 +05:30
parent a33b47b9c3
commit 7df5f00548

View file

@ -37,6 +37,8 @@
#define GLOB_EXPR "[=><]+" #define GLOB_EXPR "[=><]+"
static uint8_t wifi_neighbor_count = 0;
bool match(const char *string, const char *pattern) bool match(const char *string, const char *pattern)
{ {
regex_t re; regex_t re;
@ -318,10 +320,12 @@ static opr_ret_t vendor_conf_restore(struct dmctx *dmctx, char *path, char *inpu
static void fill_wireless_scan_results(struct dmctx *dmctx, char *radio) static void fill_wireless_scan_results(struct dmctx *dmctx, char *radio)
{ {
json_object *res, *obj; json_object *scan, *res, *obj;
struct neighboring_wiFi_diagnostic neighboring = {0}; struct neighboring_wiFi_diagnostic neighboring = {0};
char *ssid, *bssid, *channel, *frequency, *signal_stregth, *noise; char *ssid, *bssid, *channel, *frequency, *signal_stregth, *noise;
dmubus_call(ROUTER_WIRELESS_UBUS_PATH, "scan", UBUS_ARGS{{"radio", radio, String}}, 1, &scan);
sleep(2); // Wait for results to get populated in scanresults
dmubus_call(ROUTER_WIRELESS_UBUS_PATH, "scanresults", UBUS_ARGS{{"radio", radio, String}}, 1, &res); dmubus_call(ROUTER_WIRELESS_UBUS_PATH, "scanresults", UBUS_ARGS{{"radio", radio, String}}, 1, &res);
if(!json_object_object_get_ex(res,"access_points", &obj)) { if(!json_object_object_get_ex(res,"access_points", &obj)) {
@ -330,6 +334,7 @@ static void fill_wireless_scan_results(struct dmctx *dmctx, char *radio)
uint8_t len = json_object_array_length(obj); uint8_t len = json_object_array_length(obj);
for (uint8_t j = 0; j < len; j++ ) { for (uint8_t j = 0; j < len; j++ ) {
wifi_neighbor_count++;
json_object *array_obj = json_object_array_get_idx(obj, j); json_object *array_obj = json_object_array_get_idx(obj, j);
neighboring.ssid = dmjson_get_value(array_obj, 1, "ssid"); neighboring.ssid = dmjson_get_value(array_obj, 1, "ssid");
neighboring.bssid = dmjson_get_value(array_obj, 1, "bssid"); neighboring.bssid = dmjson_get_value(array_obj, 1, "bssid");
@ -338,19 +343,20 @@ static void fill_wireless_scan_results(struct dmctx *dmctx, char *radio)
neighboring.signal_strength = dmjson_get_value(array_obj, 1, "rssi"); neighboring.signal_strength = dmjson_get_value(array_obj, 1, "rssi");
neighboring.noise = dmjson_get_value(array_obj, 1, "snr"); neighboring.noise = dmjson_get_value(array_obj, 1, "snr");
dmasprintf(&ssid, "Result.%d.SSID", j+1);
dmasprintf(&bssid, "Result.%d.BSSID", j+1);
dmasprintf(&channel, "Result.%d.Channel", j+1);
dmasprintf(&frequency, "Result.%d.OperatingFrequencyBand", j+1);
dmasprintf(&signal_stregth, "Result.%d.SignalStrength", j+1);
dmasprintf(&noise, "Result.%d.Noise", j+1);
add_list_paramameter(dmctx, ssid, neighboring.ssid, "string­", NULL, 0); dmasprintf(&ssid, "Result.%d.SSID", wifi_neighbor_count);
add_list_paramameter(dmctx, bssid, neighboring.bssid, "string­", NULL, 0); dmasprintf(&bssid, "Result.%d.BSSID", wifi_neighbor_count);
add_list_paramameter(dmctx, channel, neighboring.channel, "unsignedInt­", NULL, 0); dmasprintf(&channel, "Result.%d.Channel", wifi_neighbor_count);
add_list_paramameter(dmctx, frequency, neighboring.frequency, "string­", NULL, 0); dmasprintf(&frequency, "Result.%d.OperatingFrequencyBand", wifi_neighbor_count);
add_list_paramameter(dmctx, signal_stregth, neighboring.signal_strength, "int­", NULL, 0); dmasprintf(&signal_stregth, "Result.%d.SignalStrength", wifi_neighbor_count);
add_list_paramameter(dmctx, noise, neighboring.noise, "int­", NULL, 0); dmasprintf(&noise, "Result.%d.Noise", wifi_neighbor_count);
add_list_paramameter(dmctx, ssid, neighboring.ssid, "string", NULL, 0);
add_list_paramameter(dmctx, bssid, neighboring.bssid, "string", NULL, 0);
add_list_paramameter(dmctx, channel, neighboring.channel, "unsignedInt", NULL, 0);
add_list_paramameter(dmctx, frequency, neighboring.frequency, "string", NULL, 0);
add_list_paramameter(dmctx, signal_stregth, neighboring.signal_strength, "int", NULL, 0);
add_list_paramameter(dmctx, noise, neighboring.noise, "int", NULL, 0);
} }
} }
@ -362,7 +368,7 @@ static opr_ret_t fetch_neighboring_wifi_diagnostic(struct dmctx *dmctx, char *pa
json_object_object_foreach(res, key, val) { json_object_object_foreach(res, key, val) {
fill_wireless_scan_results(dmctx, key); fill_wireless_scan_results(dmctx, key);
} }
wifi_neighbor_count = 0;
return SUCCESS; return SUCCESS;
} }