Exemplo n.º 1
0
static void ril_call_settings_cw_query_cb(GRilIoChannel *io, int status,
				const void *data, guint len, void *user_data)
{
	struct ofono_error error;
	struct ril_call_settings_cbd *cbd = user_data;
	ofono_call_settings_status_cb_t cb = cbd->cb.status;

	if (status == RIL_E_SUCCESS) {
		GRilIoParser rilp;
		int res = 0;
		int sv = 0;

		grilio_parser_init(&rilp, data, len);

		/* first value in int[] is len so let's skip that */
		grilio_parser_get_int32(&rilp, NULL);

		/* status of call waiting service, disabled is returned only if
		 * service is not active for any service class */
		grilio_parser_get_int32(&rilp, &res);
		DBG("CW enabled/disabled: %d", res);

		if (res > 0) {
			/* services for which call waiting is enabled,
			   27.007 7.12 */
			grilio_parser_get_int32(&rilp, &sv);
			DBG("CW enabled for: %d", sv);
		}

		cb(ril_error_ok(&error), sv, cbd->data);
	} else {
		cb(ril_error_failure(&error), -1, cbd->data);
	}
}
Exemplo n.º 2
0
static void ril_radio_settings_query_rat_mode_cb(GRilIoChannel *io, int status,
				const void *data, guint len, void *user_data)
{
	struct ofono_error error;
	struct ril_radio_settings_cbd *cbd = user_data;
	ofono_radio_settings_rat_mode_query_cb_t cb = cbd->cb.rat_mode_query;

	DBG("");
	if (status == RIL_E_SUCCESS) {
		GRilIoParser rilp;
		int mode = OFONO_RADIO_ACCESS_MODE_ANY;
		int pref = -1;

		grilio_parser_init(&rilp, data, len);
		grilio_parser_get_int32(&rilp, NULL);
		grilio_parser_get_int32(&rilp, &pref);

		switch (pref) {
		case PREF_NET_TYPE_LTE_ONLY:
			mode = OFONO_RADIO_ACCESS_MODE_LTE;
		case PREF_NET_TYPE_GSM_ONLY:
			mode = OFONO_RADIO_ACCESS_MODE_GSM;
			break;
		case PREF_NET_TYPE_GSM_WCDMA_AUTO:/* according to UI design */
			if (!cb) {
				ril_radio_settings_force_rat(cbd->rsd, pref);
			}
		case PREF_NET_TYPE_WCDMA:
		case PREF_NET_TYPE_GSM_WCDMA: /* according to UI design */
			mode = OFONO_RADIO_ACCESS_MODE_UMTS;
			break;
		case PREF_NET_TYPE_LTE_CDMA_EVDO:
		case PREF_NET_TYPE_LTE_GSM_WCDMA:
		case PREF_NET_TYPE_LTE_CMDA_EVDO_GSM_WCDMA:
			if (!cb) {
				ril_radio_settings_force_rat(cbd->rsd, pref);
			}
			break;
		case PREF_NET_TYPE_CDMA_EVDO_AUTO:
		case PREF_NET_TYPE_CDMA_ONLY:
		case PREF_NET_TYPE_EVDO_ONLY:
		case PREF_NET_TYPE_GSM_WCDMA_CDMA_EVDO_AUTO:
		default:
			break;
		}

		ofono_info("rat mode %d (ril %d)", mode, pref);
		if (cb) {
			cb(ril_error_ok(&error), mode, cbd->data);
		}
	} else {
		ofono_error("rat mode query failed");
		if (cb) {
			cb(ril_error_failure(&error), -1, cbd->data);
		}
	}
}
Exemplo n.º 3
0
static void ril_sms_sca_query_cb(GRilIoChannel *io, int status,
				const void *data, guint len, void *user_data)
{
	struct ril_sms_cbd *cbd = user_data;
	ofono_sms_sca_query_cb_t cb = cbd->cb.sca_query;
	struct ofono_error error;
	GRilIoParser rilp;
	gchar *temp_buf;

	if (status != RIL_E_SUCCESS) {
		ofono_error("csca query failed");
		cb(ril_error_failure(&error), NULL, cbd->data);
		return;
	}

	grilio_parser_init(&rilp, data, len);
	temp_buf = grilio_parser_get_utf8(&rilp);

	if (temp_buf) {
		/* RIL gives address in quotes */
		gchar *number = strtok(temp_buf, "\"");
		struct ofono_phone_number sca;

		strncpy(sca.number, number, OFONO_MAX_PHONE_NUMBER_LENGTH);
		sca.number[OFONO_MAX_PHONE_NUMBER_LENGTH] = '\0';
		if (sca.number[0] == '+') {
			number = number + 1;
			sca.type = TYPE_INTERNATIONAL;
		} else {
			sca.type = TYPE_LOCAL;
		}

		DBG("csca_query_cb: %s, %d", sca.number, sca.type);
		cb(ril_error_ok(&error), &sca, cbd->data);
		g_free(temp_buf);
	} else {
		ofono_error("return value invalid");
		cb(ril_error_failure(&error), NULL, cbd->data);
	}
}
Exemplo n.º 4
0
static void ril_call_settings_set_cb(GRilIoChannel *io, int status,
				const void *data, guint len, void *user_data)
{
	struct ofono_error error;
	struct ril_call_settings_cbd *cbd = user_data;
	ofono_call_settings_set_cb_t cb = cbd->cb.set;

	if (status == RIL_E_SUCCESS) {
		cb(ril_error_ok(&error), cbd->data);
	} else {
		cb(ril_error_failure(&error), cbd->data);
	}
}
Exemplo n.º 5
0
static void ril_radio_settings_set_rat_mode_cb(GRilIoChannel *io, int status,
				const void *data, guint len, void *user_data)
{
	struct ofono_error error;
	struct ril_radio_settings_cbd *cbd = user_data;
	ofono_radio_settings_rat_mode_set_cb_t cb = cbd->cb.rat_mode_set;

	if (status == RIL_E_SUCCESS) {
		cb(ril_error_ok(&error), cbd->data);
	} else {
		ofono_error("rat mode setting failed");
		cb(ril_error_failure(&error), cbd->data);
	}
}
Exemplo n.º 6
0
static void ril_devinfo_query(struct ofono_devinfo *info, guint cmd,
				ofono_devinfo_query_cb_t cb, void *data)
{
	struct ril_devinfo *di = ril_devinfo_get_data(info);

	/* See comment in ril_devinfo_remove */
	if (di->q) {
		grilio_queue_send_request_full(di->q, NULL, cmd,
				ril_devinfo_query_cb, ril_devinfo_req_free,
					ril_devinfo_req_new(cb, data));
	} else {
		struct ofono_error error;
		cb(ril_error_failure(&error), NULL, data);
	}
}
Exemplo n.º 7
0
static void ril_devinfo_query_cb(GRilIoChannel *io, int status,
			const void *data, guint len, void *user_data)
{
	struct ofono_error error;
	struct ril_devinfo_req *cbd = user_data;

	if (status == RIL_E_SUCCESS) {
		gchar *res;
		GRilIoParser rilp;
		grilio_parser_init(&rilp, data, len);
		res = grilio_parser_get_utf8(&rilp);
		DBG("%s", res);
		cbd->cb(ril_error_ok(&error), res ? res : "", cbd->data);
		g_free(res);
	} else {
		cbd->cb(ril_error_failure(&error), NULL, cbd->data);
	}
}
Exemplo n.º 8
0
static void ril_call_settings_clip_query_cb(GRilIoChannel *io, int status,
				const void *data, guint len, void *user_data)
{
	struct ofono_error error;
	struct ril_call_settings_cbd *cbd = user_data;
	ofono_call_settings_status_cb_t cb = cbd->cb.status;

	if (status == RIL_E_SUCCESS) {
		GRilIoParser rilp;
		int res = 0;

		/* data length of the response */
		grilio_parser_init(&rilp, data, len);
		if (grilio_parser_get_int32(&rilp, &res) && res > 0) {
			grilio_parser_get_int32(&rilp, &res);
		}

		cb(ril_error_ok(&error), res, cbd->data);
	} else {
		cb(ril_error_failure(&error), -1, cbd->data);
	}
}
Exemplo n.º 9
0
static void ril_devinfo_query_unsupported(struct ofono_devinfo *info,
			ofono_devinfo_query_cb_t cb, void *data)
{
	struct ofono_error error;
	cb(ril_error_failure(&error), "", data);
}