static void cnti_query_tech_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct tech_query *tq = user_data; struct netreg_data *nd = ofono_netreg_get_data(tq->netreg); ofono_netreg_status_notify(tq->netreg, tq->status, tq->lac, tq->ci, nd->tech); }
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 ril_creg_notify(struct ofono_error *error, int status, int lac, int ci, int tech, gpointer user_data) { struct ofono_netreg *netreg = user_data; if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { DBG("Error during status notification"); return; } ofono_netreg_status_notify(netreg, status, lac, ci, tech); }
static void ss_info_notify(struct qmi_result *result, void *user_data) { struct ofono_netreg *netreg = user_data; struct netreg_data *data = ofono_netreg_get_data(netreg); int status, lac, cellid, tech; DBG(""); if (!extract_ss_info(result, &status, &lac, &cellid, &tech, &data->operator)) return; ofono_netreg_status_notify(netreg, status, lac, cellid, tech); }
static void creg_notify(GAtResult *result, gpointer user_data) { struct ofono_netreg *netreg = user_data; int status, lac, ci, tech; struct netreg_data *nd = ofono_netreg_get_data(netreg); struct tech_query *tq; if (at_util_parse_reg_unsolicited(result, "+CREG:", &status, &lac, &ci, &tech, nd->vendor) == FALSE) return; if (status != 1 && status != 5) goto notify; tq = g_try_new0(struct tech_query, 1); if (tq == NULL) goto notify; tq->status = status; tq->lac = lac; tq->ci = ci; tq->netreg = netreg; switch (nd->vendor) { case OFONO_VENDOR_GOBI: if (g_at_chat_send(nd->chat, "AT*CNTI=0", none_prefix, cnti_query_tech_cb, tq, g_free) > 0) return; break; case OFONO_VENDOR_NOVATEL: if (g_at_chat_send(nd->chat, "AT$CNTI=0", none_prefix, cnti_query_tech_cb, tq, g_free) > 0) return; break; case OFONO_VENDOR_OPTION_HSO: if (g_at_chat_send(nd->chat, "AT_OCTI?;_OUWCTI?", option_tech_prefix, option_query_tech_cb, tq, g_free) > 0) return; break; } g_free(tq); if ((status == 1 || status == 5) && tech == -1) tech = nd->tech; notify: ofono_netreg_status_notify(netreg, status, lac, ci, tech); }
static void option_query_tech_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct tech_query *tq = user_data; int tech; if (ok) tech = option_parse_tech(result); else tech = -1; ofono_netreg_status_notify(tq->netreg, tq->status, tq->lac, tq->ci, tech); }