gboolean has_wpa;
gboolean has_rsn;
gboolean has_wps;
+ dbus_int32_t frequency;
dbus_int32_t quality;
dbus_int32_t noise;
dbus_int32_t level;
result->has_wep = TRUE;
}
+static unsigned char calculate_strength(struct supplicant_result *result)
+{
+ if (result->quality < 0)
+ return 0;
+
+ return result->quality;
+}
+
+static unsigned short calculate_channel(struct supplicant_result *result)
+{
+ return 0;
+}
+
static void get_properties(struct supplicant_task *task);
static void properties_reply(DBusPendingCall *call, void *user_data)
DBusMessage *reply;
DBusMessageIter array, dict;
unsigned char strength;
+ unsigned short channel, frequency;
const char *mode, *security;
char *group;
}
memset(&result, 0, sizeof(result));
+ result.frequency = -1;
+ result.quality = -1;
+ result.level = -1;
+ result.noise = -1;
dbus_message_iter_init(reply, &array);
extract_wpsie(&value, &result);
else if (g_str_equal(key, "capabilities") == TRUE)
extract_capabilites(&value, &result);
+ else if (g_str_equal(key, "frequency") == TRUE)
+ dbus_message_iter_get_basic(&value, &result.frequency);
else if (g_str_equal(key, "quality") == TRUE)
dbus_message_iter_get_basic(&value, &result.quality);
else if (g_str_equal(key, "noise") == TRUE)
if (result.path[0] == '\0')
goto done;
- strength = result.quality;
+ if (result.frequency > 0 && result.frequency < 14)
+ result.frequency = 2407 + (5 * result.frequency);
+ else if (result.frequency == 14)
+ result.frequency = 2484;
+
+ strength = calculate_strength(&result);
+ channel = calculate_channel(&result);
+
+ frequency = (result.frequency < 0) ? 0 : result.frequency;
if (result.has_rsn == TRUE)
security = "rsn";
connman_network_set_string(network, "Address", result.addr);
- connman_network_set_group(network, group);
-
- if (result.name != NULL && result.name[0] != '\0')
- connman_network_set_string(network, "Name", result.name);
-
- connman_network_set_uint8(network, "Strength", strength);
-
- connman_network_set_string(network, "WiFi.Mode", mode);
- connman_network_set_string(network, "WiFi.Security", security);
-
if (connman_device_add_network(task->device, network) < 0) {
connman_network_unref(network);
goto done;
}
}
- connman_network_set_group(network, group);
-
- g_free(group);
-
if (result.name != NULL && result.name[0] != '\0')
connman_network_set_string(network, "Name", result.name);
connman_network_set_available(network, TRUE);
connman_network_set_uint8(network, "Strength", strength);
+ connman_network_set_uint16(network, "Frequency", frequency);
+ connman_network_set_uint16(network, "WiFi.Channel", channel);
connman_network_set_string(network, "WiFi.Security", security);
+ connman_network_set_group(network, group);
+
+ g_free(group);
+
done:
g_free(result.path);
g_free(result.addr);