Ejemplo n.º 1
0
static void ril_call_settings_cw_set(struct ofono_call_settings *cs, int mode,
			int cls, ofono_call_settings_set_cb_t cb, void *data)
{
	struct ril_call_settings *sd = ril_call_settings_get_data(cs);
	GRilIoRequest *req = grilio_request_sized_new(12);

	grilio_request_append_int32(req, 2);    /* Number of params */
	grilio_request_append_int32(req, mode); /* on/off */

	/* Modem seems to respond with error to all queries
	 * or settings made with bearer class
	 * BEARER_CLASS_DEFAULT. Design decision: If given
	 * class is BEARER_CLASS_DEFAULT let's map it to
	 * SERVICE_CLASS_VOICE effectively making it the
	 * default bearer. This in line with API which is
	 * contains only voice anyways.
	 */
	if (cls == BEARER_CLASS_DEFAULT) {
		cls = BEARER_CLASS_VOICE;
	}

	grilio_request_append_int32(req, cls);  /* Service class */

	ril_call_settings_submit_req(sd, req, RIL_REQUEST_SET_CALL_WAITING,
					ril_call_settings_set_cb, cb, data);
	grilio_request_unref(req);
}
Ejemplo n.º 2
0
static void ril_radio_settings_set_rat_mode(struct ofono_radio_settings *rs,
		enum ofono_radio_access_mode mode,
		ofono_radio_settings_rat_mode_set_cb_t cb, void *data)
{
	struct ril_radio_settings *rsd = ril_radio_settings_get_data(rs);
	GRilIoRequest *req = grilio_request_sized_new(8);
	int pref = rsd->ratmode;

	ofono_info("rat mode set %d", mode);
	switch (mode) {
	case OFONO_RADIO_ACCESS_MODE_GSM:
		pref = PREF_NET_TYPE_GSM_ONLY;
		break;
	case OFONO_RADIO_ACCESS_MODE_UMTS:
		pref = PREF_NET_TYPE_GSM_WCDMA_AUTO;    /* per UI design */
		break;
	case OFONO_RADIO_ACCESS_MODE_LTE:
		pref = PREF_NET_TYPE_LTE_ONLY;
	default:
		break;
	}

	grilio_request_append_int32(req, 1);            /* Number of params */
	grilio_request_append_int32(req, pref);
	ril_radio_settings_submit_request(rsd, req,
			RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE,
			ril_radio_settings_set_rat_mode_cb, cb, data);
	grilio_request_unref(req);
}
Ejemplo n.º 3
0
static void ril_request_delete_sms_om_sim(struct ril_sms *sd, int record)
{
	GRilIoRequest *req = grilio_request_sized_new(8);

	DBG("Deleting record: %d", record);

	grilio_request_append_int32(req, 1);        /* Array length */
	grilio_request_append_int32(req, record);
	grilio_queue_send_request_full(sd->q, req,
			RIL_REQUEST_DELETE_SMS_ON_SIM,
			ril_new_sms_on_sim_cb, NULL, NULL);
	grilio_request_unref(req);
}
Ejemplo n.º 4
0
static void ril_radio_settings_force_rat(struct ril_radio_settings *rsd,
								int pref)
{
	if (pref != rsd->ratmode) {
		GRilIoRequest *req = grilio_request_sized_new(8);
		DBG("pref ril rat mode %d, ril current %d", pref, rsd->ratmode);

		grilio_request_append_int32(req, 1);
		grilio_request_append_int32(req, rsd->ratmode);
		grilio_queue_send_request(rsd->q, req,
				RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE);
		grilio_request_unref(req);
	}
}
Ejemplo n.º 5
0
static void ril_ack_delivery(struct ril_sms *sd, gboolean error)
{
	GRilIoRequest *req = grilio_request_sized_new(12);
	const int code = (error ? 0 : 0xff);

	DBG("(%d,%d)", error, code);
	grilio_request_append_int32(req, 2);     /* Array size*/
	grilio_request_append_int32(req, error); /* Success (1)/Failure (0) */
	grilio_request_append_int32(req, code);  /* error code */

	/* ACK the incoming NEW_SMS */
	grilio_queue_send_request_full(sd->q, req,
		RIL_REQUEST_SMS_ACKNOWLEDGE, ril_ack_delivery_cb, NULL, NULL);
	grilio_request_unref(req);
}
Ejemplo n.º 6
0
static void ril_call_settings_cw_query(struct ofono_call_settings *cs, int cls,
				ofono_call_settings_status_cb_t cb, void *data)
{
	struct ril_call_settings *sd = ril_call_settings_get_data(cs);
	GRilIoRequest *req = grilio_request_sized_new(8);

	grilio_request_append_int32(req, 1);		/* Number of params */

	/*
	 * RILD expects service class to be 0 as certain carriers can reject
	 * the query with specific service class
	 */
	grilio_request_append_int32(req, 0);

	ril_call_settings_submit_req(sd, req, RIL_REQUEST_QUERY_CALL_WAITING,
				ril_call_settings_cw_query_cb, cb, data);
	grilio_request_unref(req);
}
Ejemplo n.º 7
0
static void ril_sms_submit(struct ofono_sms *sms, const unsigned char *pdu,
			int pdu_len, int tpdu_len, int mms,
			ofono_sms_submit_cb_t cb, void *data)
{
	struct ril_sms *sd = ril_sms_get_data(sms);
	GRilIoRequest *req = grilio_request_new();
	int smsc_len;
	char *tpdu;

	DBG("pdu_len: %d, tpdu_len: %d mms: %d", pdu_len, tpdu_len, mms);

	grilio_request_append_int32(req, 2);     /* Number of strings */

	/* SMSC address:
	 *
	 * smsc_len == 1, then zero-length SMSC was spec'd
	 * RILD expects a NULL string in this case instead
	 * of a zero-length string.
	 */
	smsc_len = pdu_len - tpdu_len;
	if (smsc_len > 1) {
		/* TODO: encode SMSC & write to parcel */
		DBG("SMSC address specified (smsc_len %d); NOT-IMPLEMENTED",
								smsc_len);
	}

	grilio_request_append_utf8(req, NULL); /* default SMSC address */

	/* TPDU:
	 *
	 * 'pdu' is a raw hexadecimal string
	 *  encode_hex() turns it into an ASCII/hex UTF8 buffer
	 *  grilio_request_append_utf8() encodes utf8 -> utf16
	 */
	tpdu = encode_hex(pdu + smsc_len, tpdu_len, 0);
	grilio_request_append_utf8(req, tpdu);

	DBG("%s", tpdu);
	grilio_queue_send_request_full(sd->q, req,
			RIL_REQUEST_SEND_SMS, ril_sms_submit_cb,
			ril_sms_cbd_free, ril_sms_cbd_new(sd, cb, data));
	grilio_request_unref(req);
	g_free(tpdu);
}