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); }
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); }
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); }
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); } }
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); }
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); }
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); }
static void ril_sms_sca_set(struct ofono_sms *sms, const struct ofono_phone_number *sca, ofono_sms_sca_set_cb_t cb, void *data) { struct ril_sms *sd = ril_sms_get_data(sms); GRilIoRequest *req = grilio_request_new(); char number[OFONO_MAX_PHONE_NUMBER_LENGTH + 4]; if (sca->type == TYPE_LOCAL) { snprintf(number, sizeof(number), "\"%s\"", sca->number); } else { snprintf(number, sizeof(number), "\"+%s\"", sca->number); } DBG("Setting sca: %s", number); grilio_request_append_utf8(req, number); grilio_queue_send_request_full(sd->q, req, RIL_REQUEST_SET_SMSC_ADDRESS, ril_sms_sca_set_cb, ril_sms_cbd_free, ril_sms_cbd_new(sd, cb, data)); grilio_request_unref(req); }