Exemple #1
0
static DBusMessage *set_property_active(struct dundee_device *device,
                                        DBusMessage *msg,
                                        DBusMessageIter *var)
{
    ofono_bool_t active;

    DBG("%p path %s", device, device->path);

    if (dbus_message_iter_get_arg_type(var) != DBUS_TYPE_BOOLEAN)
        return __dundee_error_invalid_args(msg);

    if (device->pending)
        return __dundee_error_in_progress(msg);

    dbus_message_iter_get_basic(var, &active);

    device->pending = dbus_message_ref(msg);

    if (active)
        device->driver->connect(device, connect_callback, device);
    else if (device->ppp)
        g_at_ppp_shutdown(device->ppp);

    return NULL;
}
Exemple #2
0
static void cgev_notify(GAtResult *result, gpointer user_data)
{
	struct ofono_gprs_context *gc = user_data;
	struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
	const char *event;
	int cid;
	GAtResultIter iter;

	g_at_result_iter_init(&iter, result);

	if (!g_at_result_iter_next(&iter, "+CGEV:"))
		return;

	if (!g_at_result_iter_next_unquoted_string(&iter, &event))
		return;

	if (g_str_has_prefix(event, "NW DEACT") == FALSE)
		return;

	if (!g_at_result_iter_skip_next(&iter))
		return;

	if (!g_at_result_iter_next_number(&iter, &cid))
		return;

	DBG("cid %d", cid);

	if ((unsigned int) cid != gcd->active_context)
		return;

	if (gcd->state != STATE_IDLE && gcd->ppp)
		g_at_ppp_shutdown(gcd->ppp);
}
Exemple #3
0
static void at_gprs_detach_shutdown(struct ofono_gprs_context *gc,
					unsigned int cid)
{
	struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);

	DBG("cid %u", cid);

	g_at_ppp_shutdown(gcd->ppp);
}
Exemple #4
0
static gboolean signal_cb(GIOChannel *channel, GIOCondition cond, gpointer data)
{
	static int terminated = 0;
	int signal_fd = GPOINTER_TO_INT(data);
	struct signalfd_siginfo si;
	ssize_t res;

	if (cond & (G_IO_NVAL | G_IO_ERR))
		return FALSE;

	res = read(signal_fd, &si, sizeof(si));
	if (res != sizeof(si))
		return FALSE;

	switch (si.ssi_signo) {
	case SIGINT:
	case SIGTERM:
		if (terminated == 0) {
			g_timeout_add_seconds(10, quit_eventloop, NULL);

			if (ppp == NULL) {
				char buf[64];
				sprintf(buf, "AT+CFUN=%u", option_offmode);
				g_at_chat_send(control, buf, none_prefix,
						power_down, NULL, NULL);
			} else
				g_at_ppp_shutdown(ppp);
		}

		terminated++;
		break;
	case SIGUSR1:
		if (ppp == NULL)
			break;

		g_at_ppp_set_suspend_function(ppp, ppp_suspend_ato0, NULL);
		g_at_ppp_suspend(ppp);
		break;
	case SIGUSR2:
		if (ppp == NULL)
			break;

		g_at_ppp_set_suspend_function(ppp, ppp_suspend_ath0, NULL);
		g_at_ppp_suspend(ppp);
		break;
	default:
		break;
	}

	return TRUE;
}
Exemple #5
0
static void at_gprs_deactivate_primary(struct ofono_gprs_context *gc,
					unsigned int id,
					ofono_gprs_context_cb_t cb, void *data)
{
	struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);

	DBG("");

	gcd->state = STATE_DISABLING;
	gcd->down_cb = cb;
	gcd->cb_data = data;

	g_at_ppp_shutdown(gcd->ppp);
}
Exemple #6
0
static void cdma_connman_deactivate(struct ofono_cdma_connman *cm,
					ofono_cdma_connman_cb_t cb,
					void *data)
{
	struct connman_data *cd = ofono_cdma_connman_get_data(cm);

	DBG("");

	cd->state = STATE_DISABLING;
	cd->down_cb = cb;
	cd->cb_data = data;

	g_at_ppp_shutdown(cd->ppp);
}