static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMWimaxNsp *nsp = NM_WIMAX_NSP (object); _nm_object_ensure_inited (NM_OBJECT (object)); switch (prop_id) { case PROP_NAME: g_value_set_string (value, nm_wimax_nsp_get_name (nsp)); break; case PROP_SIGNAL_QUALITY: g_value_set_uint (value, nm_wimax_nsp_get_signal_quality (nsp)); break; case PROP_NETWORK_TYPE: g_value_set_uint (value, nm_wimax_nsp_get_network_type (nsp)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static GtkWidget * new_nsp_menu_item (NMDeviceWimax *device, NMConnection *connection, gboolean active, NMWimaxNsp *nsp, NMApplet *applet) { GtkWidget *item; WimaxMenuItemInfo *info; g_return_val_if_fail (nsp != NULL, NULL); item = nm_mb_menu_item_new (nm_wimax_nsp_get_name (nsp), nm_wimax_nsp_get_signal_quality (nsp), NULL, active, MB_TECH_WIMAX, nsp_type_to_mb_state (nm_wimax_nsp_get_network_type (nsp)), TRUE, applet); gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE); info = g_slice_new0 (WimaxMenuItemInfo); info->applet = applet; info->device = g_object_ref (G_OBJECT (device)); info->connection = connection ? g_object_ref (connection) : NULL; info->nsp = g_object_ref (nsp); g_signal_connect_data (item, "activate", G_CALLBACK (wimax_menu_item_activate), info, (GClosureNotify) wimax_menu_item_info_destroy, 0); return item; }
static GtkWidget * new_nsp_menu_item (NMDeviceWimax *device, NMConnection *connection, gboolean active, NMWimaxNsp *nsp, NMApplet *applet) { GtkWidget *item; WimaxMenuItemInfo *info; #ifdef ENABLE_INDICATOR char *text = NULL; GtkWidget *signal_icon = NULL; #endif g_return_val_if_fail (nsp != NULL, NULL); #ifndef ENABLE_INDICATOR item = nm_mb_menu_item_new (nm_wimax_nsp_get_name (nsp), nm_wimax_nsp_get_signal_quality (nsp), NULL, active, MB_TECH_WIMAX, nsp_type_to_mb_state (nm_wimax_nsp_get_network_type (nsp)), TRUE, applet); #else text = g_strdup (nm_wimax_nsp_get_name (nsp)); item = gtk_image_menu_item_new_with_label (text); g_free (text); text = mobile_helper_get_quality_icon (nm_wimax_nsp_get_signal_quality (nsp), applet); signal_icon = gtk_image_new_from_icon_name (text, GTK_ICON_SIZE_LARGE_TOOLBAR); g_free (text); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), signal_icon); gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE); #endif /* ENABLE_INDICATOR */ gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE); info = g_slice_new0 (WimaxMenuItemInfo); info->applet = applet; info->device = g_object_ref (G_OBJECT (device)); info->connection = connection ? g_object_ref (connection) : NULL; info->nsp = g_object_ref (nsp); g_signal_connect_data (item, "activate", G_CALLBACK (wimax_menu_item_activate), info, (GClosureNotify) wimax_menu_item_info_destroy, 0); return item; }
static void wmx_scan_result_cb (struct wmxsdk *wmxsdk, WIMAX_API_NSP_INFO_EX *nsps, guint num_nsps, void *user_data) { NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); const char *iface = nm_device_get_iface (NM_DEVICE (self)); int i; remove_outdated_nsps (self, nsps, num_nsps); /* Add new NSPs and update existing ones */ for (i = 0; i < num_nsps; i++) { WIMAX_API_NSP_INFO_EX *sdk_nsp = &nsps[i]; const char *nsp_name = (const char *) sdk_nsp->NSPName; NMWimaxNspNetworkType net_type; guint signalq; NMWimaxNsp *nsp; gboolean new_nsp; nsp = get_nsp_by_name (self, nsp_name); new_nsp = (nsp == NULL); if (new_nsp) { nsp = nm_wimax_nsp_new (nsp_name); nm_log_dbg (LOGD_WIMAX, "(%s): new WiMAX NSP '%s'", iface, nsp_name); } net_type = nm_wimax_util_convert_network_type (sdk_nsp->networkType); if (net_type != nm_wimax_nsp_get_network_type (nsp)) g_object_set (nsp, NM_WIMAX_NSP_NETWORK_TYPE, net_type, NULL); signalq = CLAMP (sdk_nsp->linkQuality, 0, 100); if (signalq != nm_wimax_nsp_get_signal_quality (nsp)) g_object_set (nsp, NM_WIMAX_NSP_SIGNAL_QUALITY, signalq, NULL); nm_log_dbg (LOGD_WIMAX, "(%s): WiMAX NSP '%s' quality %d%% type %d", iface, nsp_name, sdk_nsp->linkQuality, net_type); if (new_nsp) { priv->nsp_list = g_slist_append (priv->nsp_list, nsp); nm_wimax_nsp_export_to_dbus (nsp); emit_nsp_added_removed (self, NSP_ADDED, nsp, TRUE); } } }
static gboolean connected_poll_cb (gpointer user_data) { NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); WIMAX_API_CONNECTED_NSP_INFO_EX *sdk_nsp; WIMAX_API_LINK_STATUS_INFO_EX *link_status; g_return_val_if_fail (priv->sdk != NULL, FALSE); /* Get details of the connected NSP */ sdk_nsp = iwmx_sdk_get_connected_network (priv->sdk); if (sdk_nsp) { const char *nsp_name = (const char *) sdk_nsp->NSPName; NMWimaxNsp *nsp; nsp = get_nsp_by_name (self, nsp_name); if (nsp) { NMWimaxNspNetworkType net_type; guint signalq; net_type = nm_wimax_util_convert_network_type (sdk_nsp->networkType); if (net_type != nm_wimax_nsp_get_network_type (nsp)) g_object_set (nsp, NM_WIMAX_NSP_NETWORK_TYPE, net_type, NULL); signalq = sdk_nsp->linkQuality; if (signalq != nm_wimax_nsp_get_signal_quality (nsp)) g_object_set (nsp, NM_WIMAX_NSP_SIGNAL_QUALITY, signalq, NULL); nm_log_dbg (LOGD_WIMAX, "(%s): WiMAX NSP '%s' quality %d%% type %d", nm_device_get_iface (NM_DEVICE (self)), nsp_name, sdk_nsp->linkQuality, net_type); } free (sdk_nsp); } /* Get details of the current radio link */ link_status = iwmx_sdk_get_link_status_info (priv->sdk); if (link_status) { set_link_status (self, link_status); free (link_status); } return TRUE; /* reschedule */ }
static void detail_nsp (gpointer data, gpointer user_data) { NMWimaxNsp *nsp = NM_WIMAX_NSP (data); const char *active_name = (const char *) user_data; const char *name; char *label; char *data_str; gboolean active = FALSE; name = nm_wimax_nsp_get_name (nsp); if (active_name) active = g_strcmp0 (active_name, name) == 0; label = g_strdup_printf (" %s%s", active ? "*" : "", name); data_str = g_strdup_printf ("%d%% (%s)", nm_wimax_nsp_get_signal_quality (nsp), wimax_network_type_to_str (nm_wimax_nsp_get_network_type (nsp))); print_string (label, data_str); g_free (label); g_free (data_str); }