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;
}
Example #2
0
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 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 */
}
Example #6
0
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);
}