Example #1
0
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;
}
Example #3
0
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);
}
Example #4
0
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);
}
Example #5
0
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);
}
Example #6
0
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);
}