static void get_iccid_cb(struct qmi_result *result, void *user_data) { struct cb_data *cbd = user_data; ofono_sim_read_cb_t cb = cbd->cb; unsigned char iccid[10]; int iccid_len, len; char *str; DBG(""); if (qmi_result_set_error(result, NULL)) { CALLBACK_WITH_FAILURE(cb, NULL, 0, cbd->data); return; } str = qmi_result_get_string(result, QMI_DMS_RESULT_ICCID); if (!str) { CALLBACK_WITH_FAILURE(cb, NULL, 0, cbd->data); return; } len = strlen(str); if (len > 20) { CALLBACK_WITH_FAILURE(cb, NULL, 0, cbd->data); return; } sim_encode_bcd_number(str, iccid); iccid_len = len / 2; qmi_free(str); CALLBACK_WITH_SUCCESS(cb, iccid, iccid_len, cbd->data); }
static void sim_set_cf_indicator(struct ofono_call_forwarding *cf) { gboolean cfu_voice; struct ofono_call_forwarding_condition *uninitialized_var(cond); cfu_voice = is_cfu_enabled(cf, &cond); if (cf->cfis_record_id) { unsigned char data[16]; int number_len; memset(data, 0xff, sizeof(data)); /* Profile Identifier */ data[0] = 0x01; if (cfu_voice) { number_len = strlen(cond->phone_number.number); /* CFU indicator Status - Voice */ data[1] = 0x01; number_len = (number_len + 1) / 2; data[2] = number_len + 1; data[3] = cond->phone_number.type; sim_encode_bcd_number(cond->phone_number.number, data + 4); } else { data[1] = 0x00; data[2] = 1; data[3] = 128; } ofono_sim_write(cf->sim_context, SIM_EFCFIS_FILEID, sim_cfis_update_cb, OFONO_SIM_FILE_STRUCTURE_FIXED, cf->cfis_record_id, data, sizeof(data), cf); return; } if (cf->flags & CALL_FORWARDING_FLAG_CPHS_CFF) { unsigned char cff_voice = cfu_voice ? 0x0A : 0x05; ofono_sim_write(cf->sim_context, SIM_EF_CPHS_CFF_FILEID, sim_cphs_cff_update_cb, OFONO_SIM_FILE_STRUCTURE_TRANSPARENT, 0, &cff_voice, sizeof(cff_voice), cf); } }