mirror of git://git.sysmocom.de/ofono
gemalto: netmon measurements scaling
Gemalto modem reports raw measurements in dBm. Reported values may include negative numbers. Meanwhile oFono follows ETSI TS 27.007, so negative numbers do not really exist at the API level. Modify gemalto netmon driver to report measurements according to 27.007. For this purpose re-scale from what Gemalto firmware reports into something that 27.007 recommends.
This commit is contained in:
parent
8492b722eb
commit
7b3840c5ce
|
@ -128,6 +128,50 @@ static gboolean gemalto_delayed_register(gpointer user_data)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int gemalto_ecno_scale(int value)
|
||||||
|
{
|
||||||
|
if (value < -24)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (value > 0)
|
||||||
|
return 49;
|
||||||
|
|
||||||
|
return 49 * (value + 24) / 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int gemalto_rscp_scale(int value)
|
||||||
|
{
|
||||||
|
if (value < -120)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (value > -24)
|
||||||
|
return 96;
|
||||||
|
|
||||||
|
return value + 120;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int gemalto_rsrp_scale(int value)
|
||||||
|
{
|
||||||
|
if (value < -140)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (value > -43)
|
||||||
|
return 97;
|
||||||
|
|
||||||
|
return value + 140;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int gemalto_rsrq_scale(int value)
|
||||||
|
{
|
||||||
|
if (2 * value < -39)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (2 * value > -5)
|
||||||
|
return 34;
|
||||||
|
|
||||||
|
return 2 * value + 39;
|
||||||
|
}
|
||||||
|
|
||||||
static int gemalto_parse_smoni_gsm(GAtResultIter *iter,
|
static int gemalto_parse_smoni_gsm(GAtResultIter *iter,
|
||||||
struct req_cb_data *cbd)
|
struct req_cb_data *cbd)
|
||||||
{
|
{
|
||||||
|
@ -273,13 +317,15 @@ static int gemalto_parse_smoni_umts(GAtResultIter *iter,
|
||||||
case SMONI_UMTS_ECN0:
|
case SMONI_UMTS_ECN0:
|
||||||
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
||||||
if (sscanf(str, "%f", &fnumber) == 1)
|
if (sscanf(str, "%f", &fnumber) == 1)
|
||||||
cbd->t.umts.ecno = (int)fnumber;
|
cbd->t.umts.ecno =
|
||||||
|
gemalto_ecno_scale((int)fnumber);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SMONI_UMTS_RSCP:
|
case SMONI_UMTS_RSCP:
|
||||||
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
||||||
if (sscanf(str, "%d", &number) == 1)
|
if (sscanf(str, "%d", &number) == 1)
|
||||||
cbd->t.umts.rscp = number;
|
cbd->t.umts.rscp =
|
||||||
|
gemalto_rscp_scale(number);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SMONI_UMTS_MCC:
|
case SMONI_UMTS_MCC:
|
||||||
|
@ -368,12 +414,12 @@ static int gemalto_parse_smoni_lte(GAtResultIter *iter,
|
||||||
|
|
||||||
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
||||||
if (sscanf(str, "%d", &number) == 1)
|
if (sscanf(str, "%d", &number) == 1)
|
||||||
cbd->t.lte.rsrp = number;
|
cbd->t.lte.rsrp = gemalto_rsrp_scale(number);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
if (g_at_result_iter_next_unquoted_string(iter, &str)) {
|
||||||
if (sscanf(str, "%d", &number) == 1)
|
if (sscanf(str, "%d", &number) == 1)
|
||||||
cbd->t.lte.rsrq = number;
|
cbd->t.lte.rsrq = gemalto_rsrq_scale(number);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG(" %-15s %s", "LTE.MCC", cbd->op.mcc);
|
DBG(" %-15s %s", "LTE.MCC", cbd->op.mcc);
|
||||||
|
|
Loading…
Reference in New Issue