static void event_notify(struct qmi_result *result, void *user_data) { struct ofono_netreg *netreg = user_data; struct netreg_data *data = ofono_netreg_get_data(netreg); const struct qmi_nas_signal_strength *ss; const struct qmi_nas_rf_info *rf; uint16_t len; DBG(""); ss = qmi_result_get(result, QMI_NAS_NOTIFY_SIGNAL_STRENGTH, &len); if (ss) { int strength; DBG("signal with %d dBm on %d", ss->dbm, ss->rat); strength = dbm_to_strength(ss->dbm); ofono_netreg_strength_notify(netreg, strength); } rf = qmi_result_get(result, QMI_NAS_NOTIFY_RF_INFO, &len); if (rf) { uint8_t i; for (i = 0; i < rf->count; i++) { DBG("rat %d band %d channel %d", rf->info[i].rat, rf->info[i].band, rf->info[i].channel); } data->current_rat = rf->info[i].rat; } }
static void ciev_notify(GAtResult *result, gpointer user_data) { struct ofono_netreg *netreg = user_data; struct netreg_data *nd = ofono_netreg_get_data(netreg); int strength, ind; GAtResultIter iter; g_at_result_iter_init(&iter, result); if (!g_at_result_iter_next(&iter, "+CIEV:")) return; if (!g_at_result_iter_next_number(&iter, &ind)) return; if (ind != nd->signal_index) return; if (!g_at_result_iter_next_number(&iter, &strength)) return; if (strength == nd->signal_invalid) strength = -1; else strength = (strength * 100) / (nd->signal_max - nd->signal_min); ofono_netreg_strength_notify(netreg, strength); }
static void ril_strength_notify(struct ril_msg *message, gpointer user_data) { struct ofono_netreg *netreg = user_data; struct netreg_data *nd = ofono_netreg_get_data(netreg); int strength = g_ril_unsol_parse_signal_strength(nd->ril, message, nd->tech); ofono_netreg_strength_notify(netreg, strength); }
static void ril_strength_notify(struct ril_msg *message, gpointer user_data) { struct ofono_netreg *netreg = user_data; struct netreg_data *nd = ofono_netreg_get_data(netreg); int strength; g_assert(message->req == RIL_UNSOL_SIGNAL_STRENGTH); strength = ril_util_get_signal(nd->ril, message); ofono_netreg_strength_notify(netreg, strength); return; }
static void huawei_rssi_notify(GAtResult *result, gpointer user_data) { struct ofono_netreg *netreg = user_data; GAtResultIter iter; int strength; g_at_result_iter_init(&iter, result); if (!g_at_result_iter_next(&iter, "^RSSI:")) return; if (!g_at_result_iter_next_number(&iter, &strength)) return; ofono_netreg_strength_notify(netreg, at_util_convert_signal_strength(strength)); }
static void option_osigq_notify(GAtResult *result, gpointer user_data) { struct ofono_netreg *netreg = user_data; int strength; GAtResultIter iter; g_at_result_iter_init(&iter, result); if (!g_at_result_iter_next(&iter, "_OSIGQ:")) return; if (!g_at_result_iter_next_number(&iter, &strength)) return; ofono_netreg_strength_notify(netreg, at_util_convert_signal_strength(strength)); }
static void ciev_notify(GAtResult *result, gpointer user_data) { struct ofono_netreg *netreg = user_data; struct netreg_data *nd = ofono_netreg_get_data(netreg); GAtResultIter iter; int index, value, status; g_at_result_iter_init(&iter, result); if (!g_at_result_iter_next(&iter, "+CIEV:")) return; if (!g_at_result_iter_next_number(&iter, &index)) return; if (!g_at_result_iter_next_number(&iter, &value)) return; if (index == nd->cind_pos[HFP_INDICATOR_SERVICE]) { nd->cind_val[HFP_INDICATOR_SERVICE] = value; if (value) status = NETWORK_REGISTRATION_STATUS_REGISTERED; else status = NETWORK_REGISTRATION_STATUS_NOT_REGISTERED; ofono_netreg_status_notify(netreg, status, -1, -1, -1); } else if (index == nd->cind_pos[HFP_INDICATOR_ROAM]) { nd->cind_val[HFP_INDICATOR_ROAM] = value; if (value) status = NETWORK_REGISTRATION_STATUS_ROAMING; else if (nd->cind_val[HFP_INDICATOR_SERVICE]) status = NETWORK_REGISTRATION_STATUS_REGISTERED; else status = NETWORK_REGISTRATION_STATUS_NOT_REGISTERED; ofono_netreg_status_notify(netreg, status, -1, -1, -1); } else if (index == nd->cind_pos[HFP_INDICATOR_SIGNAL]) { nd->cind_val[HFP_INDICATOR_SIGNAL] = value; ofono_netreg_strength_notify(netreg, value * 20); } return; }
static void ifx_xciev_notify(GAtResult *result, gpointer user_data) { struct ofono_netreg *netreg = user_data; int strength, ind; GAtResultIter iter; g_at_result_iter_init(&iter, result); if (!g_at_result_iter_next(&iter, "+XCIEV:")) return; if (!g_at_result_iter_next_number(&iter, &ind)) return; if (ind == 0) strength = -1; else if (ind == 7) strength = 100; else strength = (ind * 15); ofono_netreg_strength_notify(netreg, strength); }