Re: [PATCH] ublox:netmon: support +UCGED and get EARFCN, EBAND and CQI

2017-01-16 Thread Djalal Harouni
Hi Denis, list,

Sorry for my late response, was traveling. I'll address all the
comments and fix the delayed register this week. Thanks again.

On 19 December 2016 at 17:59, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
> On 12/16/2016 04:05 AM, Djalal Harouni wrote:
>>
>> This adds support for +UCGED mode 2 and for now we collect only
>> EARFCN, EBAND and CQI. Later we will follow up with +UCGED mode 3.
>>
>> Some ublox modems supports +UCGED mode 2 and others only +UCGED mode 3
>> depending on the firmware.
>> ---
>>  drivers/ubloxmodem/netmon.c | 210
>> +++-
>>  1 file changed, 206 insertions(+), 4 deletions(-)
>>
>
> This looks good.  Just a couple of small nitpicks:
>
>> diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
>> index 0749078..6fc3bad 100644
>> --- a/drivers/ubloxmodem/netmon.c
>> +++ b/drivers/ubloxmodem/netmon.c
>> @@ -46,6 +46,20 @@
>>
>>  static const char *cops_prefix[] = { "+COPS:", NULL };
>>  static const char *cesq_prefix[] = { "+CESQ:", NULL };
>> +static const char *ucged_prefix[] = { "+UCGED:", NULL };
>> +
>> +/*
>> + * Generic function that should point to number or hexstring result
>> + * parsers. Result should be returned as an int.
>> + */
>> +typedef gboolean (*ucged_g_at_result_iter_next)(GAtResultIter *iter,
>> +   int *result);
>> +
>
>
> Maybe ucged_parse_field_t?  However, I'm not sure about the function
> signature here.  g_at_result_iter_next_hexstring returns a guint8 * and
> gsize value.
>
>> +/* Field from +UCGED response */
>> +typedef struct ublox_ucged_value {
>> +   int offset; /* Offset at response */
>> +   ucged_g_at_result_iter_next ucged_g_at_result_iter_next_field;
>
>
> The name is unnecessarily long.  Maybe parse_field?
>
>
>> +} ublox_ucged_value;
>>
>>  struct netmon_driver_data {
>> GAtChat *chat;
>> @@ -67,6 +81,10 @@ struct req_cb_data {
>> int rsrp;   /* CESQ: Reference Signal Received Power */
>> int ecn0;   /* CESQ: Received Energy Ratio */
>> int rsrq;   /* CESQ: Reference Signal Received Quality */
>> +
>> +   int earfcn; /* UCGED: E-UTRA ARFCN */
>> +   int eband;  /* UCGED: E-UTRA Band */
>> +   int cqi;/* UCGED: Channel Quality Indicator */
>>  };
>>
>>  /*
>> @@ -102,6 +120,7 @@ static inline struct req_cb_data
>> *req_cb_data_new0(void *cb, void *data,
>> ret->cb = cb;
>> ret->data = data;
>> ret->netmon = user;
>> +
>> ret->rxlev = -1;
>> ret->ber = -1;
>> ret->rscp = -1;
>> @@ -109,6 +128,10 @@ static inline struct req_cb_data
>> *req_cb_data_new0(void *cb, void *data,
>> ret->ecn0 = -1;
>> ret->rsrq = -1;
>>
>> +   ret->earfcn = -1;
>> +   ret->eband = -1;
>> +   ret->cqi = -1;
>> +
>> return ret;
>>  }
>>
>> @@ -157,11 +180,165 @@ static void ublox_netmon_finish_success(struct
>> req_cb_data *cbd)
>> OFONO_NETMON_INFO_ECN0, cbd->ecn0,
>> OFONO_NETMON_INFO_RSRQ, cbd->rsrq,
>> OFONO_NETMON_INFO_RSRP, cbd->rsrp,
>> +   OFONO_NETMON_INFO_EARFCN,
>> cbd->earfcn,
>> +   OFONO_NETMON_INFO_EBAND,
>> cbd->eband,
>> +   OFONO_NETMON_INFO_CQI, cbd->cqi,
>> OFONO_NETMON_INFO_INVALID);
>>
>> CALLBACK_WITH_SUCCESS(cbd->cb, cbd->data);
>>  }
>>
>> +static void ucged_parse_4g(struct req_cb_data *cbd, GAtResultIter *iter)
>> +{
>> +   /* Offset of values in returned response */
>> +   enum ucged_mode2_rat4_offsets {
>> +   UCGED_EARFCN= 0,
>> +   UCGED_EBAND = 1,
>> +   UCGED_CQI   = 15,
>> +   };
>> +
>> +   ublox_ucged_value ucged_values[] = {
>> +   { UCGED_EARFCN, g_at_result_iter_next_number },
>> +   { UCGED_EBAND,  g_at_result_iter_next_number },
>> +   { UCGED_CQI,g_at_result_iter_next_number },
>> +   { -1,   NULL }, 

Re: [PATCH 5/5] ublox:netmon: support +UCGED and get EARFCN, EBAND and CQI

2016-12-16 Thread Djalal Harouni
HI Denis,

On 13 December 2016 at 18:38, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
>
> On 12/13/2016 05:05 AM, Djalal Harouni wrote:
>>
>> This adds support for +UCGED mode 2 and for now we collect only
>> EARFCN, EBAND and CQI. Later we will follow up with +UCGED mode 3.
>>
>> Some ublox modems supports +UCGED mode 2 and others only +UCGED mode 3
>> depending on the firmware.
>> ---
>>  drivers/ubloxmodem/netmon.c | 195
>> +++-
>>  1 file changed, 191 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
>> index 0749078..9d414a8 100644
>> --- a/drivers/ubloxmodem/netmon.c
>> +++ b/drivers/ubloxmodem/netmon.c
>> @@ -46,6 +46,13 @@
>>
>>  static const char *cops_prefix[] = { "+COPS:", NULL };
>>  static const char *cesq_prefix[] = { "+CESQ:", NULL };
>> +static const char *ucged_prefix[] = { "+UCGED:", NULL };
>> +
>> +/* Field from +UCGED response */
>> +typedef struct ublox_ucged_value {
>> +   int offset; /* Offset at response */
>> +   uint8_t base;   /* Base format how to parse */
>> +} ublox_ucged_value;
>>
>>  struct netmon_driver_data {
>> GAtChat *chat;
>> @@ -67,6 +74,10 @@ struct req_cb_data {
>> int rsrp;   /* CESQ: Reference Signal Received Power */
>> int ecn0;   /* CESQ: Received Energy Ratio */
>> int rsrq;   /* CESQ: Reference Signal Received Quality */
>> +
>> +   int earfcn; /* UCGED: E-UTRA ARFCN */
>> +   int eband;  /* UCGED: E-UTRA Band */
>> +   int cqi;/* UCGED: Channel Quality Indicator */
>>  };
>>
>>  /*
>> @@ -102,6 +113,7 @@ static inline struct req_cb_data
>> *req_cb_data_new0(void *cb, void *data,
>> ret->cb = cb;
>> ret->data = data;
>> ret->netmon = user;
>> +
>> ret->rxlev = -1;
>> ret->ber = -1;
>> ret->rscp = -1;
>> @@ -109,6 +121,10 @@ static inline struct req_cb_data
>> *req_cb_data_new0(void *cb, void *data,
>> ret->ecn0 = -1;
>> ret->rsrq = -1;
>>
>> +   ret->earfcn = -1;
>> +   ret->eband = -1;
>> +   ret->cqi = -1;
>> +
>> return ret;
>>  }
>>
>> @@ -157,11 +173,158 @@ static void ublox_netmon_finish_success(struct
>> req_cb_data *cbd)
>> OFONO_NETMON_INFO_ECN0, cbd->ecn0,
>> OFONO_NETMON_INFO_RSRQ, cbd->rsrq,
>> OFONO_NETMON_INFO_RSRP, cbd->rsrp,
>> +   OFONO_NETMON_INFO_EARFCN,
>> cbd->earfcn,
>> +   OFONO_NETMON_INFO_EBAND,
>> cbd->eband,
>> +   OFONO_NETMON_INFO_CQI, cbd->cqi,
>> OFONO_NETMON_INFO_INVALID);
>>
>> CALLBACK_WITH_SUCCESS(cbd->cb, cbd->data);
>>  }
>>
>> +static void ucged_parse_4g(struct req_cb_data *cbd, GAtResultIter *iter)
>> +{
>> +   /* Offset of values in returned response */
>> +   enum ucged_mode2_rat4_offsets {
>> +   UCGED_EARFCN= 0,
>> +   UCGED_EBAND = 1,
>> +   UCGED_CQI   = 15,
>> +   UCGED_VOLTE_MODE= 21,
>> +   _MAX/* End */
>> +   };
>> +
>> +   ublox_ucged_value ucged_values[] = {
>> +   { UCGED_EARFCN, 10 },
>> +   { UCGED_EBAND,  10 },
>> +   { UCGED_CQI,10 },
>> +   { -1,   0  }, /* End of Array */
>> +   };
>> +
>> +   gboolean ok;
>> +   unsigned i;
>> +   ublox_ucged_value *ptr;
>> +
>> +   /* Skip first fields */
>> +   g_at_result_iter_next(iter, NULL);
>> +
>> +   for (i = 0, ptr = _values[0]; i < _MAX; i++) {
>> +   const char *str = NULL;
>> +   int number;
>> +
>> +   /* First read the data */
>> +   ok = g_at_result_iter_next_unquoted_string(iter, );
>> +   if (!ok) {
>> +   DBG(" UCGED: error parsing at idx: %d ", i);
>> +   return;
>> +   }
>> +
>> +   

[PATCH] ublox:netmon: support +UCGED and get EARFCN, EBAND and CQI

2016-12-16 Thread Djalal Harouni
This adds support for +UCGED mode 2 and for now we collect only
EARFCN, EBAND and CQI. Later we will follow up with +UCGED mode 3.

Some ublox modems supports +UCGED mode 2 and others only +UCGED mode 3
depending on the firmware.
---
 drivers/ubloxmodem/netmon.c | 210 +++-
 1 file changed, 206 insertions(+), 4 deletions(-)

diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
index 0749078..6fc3bad 100644
--- a/drivers/ubloxmodem/netmon.c
+++ b/drivers/ubloxmodem/netmon.c
@@ -46,6 +46,20 @@
 
 static const char *cops_prefix[] = { "+COPS:", NULL };
 static const char *cesq_prefix[] = { "+CESQ:", NULL };
+static const char *ucged_prefix[] = { "+UCGED:", NULL };
+
+/*
+ * Generic function that should point to number or hexstring result
+ * parsers. Result should be returned as an int.
+ */
+typedef gboolean (*ucged_g_at_result_iter_next)(GAtResultIter *iter,
+   int *result);
+
+/* Field from +UCGED response */
+typedef struct ublox_ucged_value {
+   int offset; /* Offset at response */
+   ucged_g_at_result_iter_next ucged_g_at_result_iter_next_field;
+} ublox_ucged_value;
 
 struct netmon_driver_data {
GAtChat *chat;
@@ -67,6 +81,10 @@ struct req_cb_data {
int rsrp;   /* CESQ: Reference Signal Received Power */
int ecn0;   /* CESQ: Received Energy Ratio */
int rsrq;   /* CESQ: Reference Signal Received Quality */
+
+   int earfcn; /* UCGED: E-UTRA ARFCN */
+   int eband;  /* UCGED: E-UTRA Band */
+   int cqi;/* UCGED: Channel Quality Indicator */
 };
 
 /*
@@ -102,6 +120,7 @@ static inline struct req_cb_data *req_cb_data_new0(void 
*cb, void *data,
ret->cb = cb;
ret->data = data;
ret->netmon = user;
+
ret->rxlev = -1;
ret->ber = -1;
ret->rscp = -1;
@@ -109,6 +128,10 @@ static inline struct req_cb_data *req_cb_data_new0(void 
*cb, void *data,
ret->ecn0 = -1;
ret->rsrq = -1;
 
+   ret->earfcn = -1;
+   ret->eband = -1;
+   ret->cqi = -1;
+
return ret;
 }
 
@@ -157,11 +180,165 @@ static void ublox_netmon_finish_success(struct 
req_cb_data *cbd)
OFONO_NETMON_INFO_ECN0, cbd->ecn0,
OFONO_NETMON_INFO_RSRQ, cbd->rsrq,
OFONO_NETMON_INFO_RSRP, cbd->rsrp,
+   OFONO_NETMON_INFO_EARFCN, cbd->earfcn,
+   OFONO_NETMON_INFO_EBAND, cbd->eband,
+   OFONO_NETMON_INFO_CQI, cbd->cqi,
OFONO_NETMON_INFO_INVALID);
 
CALLBACK_WITH_SUCCESS(cbd->cb, cbd->data);
 }
 
+static void ucged_parse_4g(struct req_cb_data *cbd, GAtResultIter *iter)
+{
+   /* Offset of values in returned response */
+   enum ucged_mode2_rat4_offsets {
+   UCGED_EARFCN= 0,
+   UCGED_EBAND = 1,
+   UCGED_CQI   = 15,
+   };
+
+   ublox_ucged_value ucged_values[] = {
+   { UCGED_EARFCN, g_at_result_iter_next_number },
+   { UCGED_EBAND,  g_at_result_iter_next_number },
+   { UCGED_CQI,g_at_result_iter_next_number },
+   { -1,   NULL }, /* End of Array */
+   };
+
+   gboolean ok;
+   unsigned i;
+   ublox_ucged_value *cur;
+
+   /* Skip to next */
+   ok = g_at_result_iter_next(iter, NULL);
+   if (!ok) {
+   DBG(" UCGED:response: failed to go to next line ");
+   return;
+   }
+
+   i = 0;
+   cur = _values[0];
+   while (cur->offset >= 0) {
+   int number;
+
+   /* Skip values that we do not want */
+   while (i != (unsigned) cur->offset) {
+   ok = g_at_result_iter_skip_next(iter);
+   if (!ok) {
+   DBG(" UCGED: error skip idx: %d ", i);
+   return;
+   }
+   i++;
+   }
+
+   ok = cur->ucged_g_at_result_iter_next_field(iter, );
+   if (!ok) {
+   DBG(" UCGED: error parsing at idx: %d ", i);
+   return;
+   }
+
+   switch (i) {
+   case UCGED_EARFCN:
+   cbd->earfcn = number != 65535 ? number : cbd->earfcn;
+   break;
+   case UCGED_EBAND:
+   cbd->eband = number != 255 ? number : cbd->eband;
+   break;
+   case UCGED_CQI:
+   cbd->cqi = number != 255 ? number : cbd->cqi;
+   break;
+   }
+
+   i++;
+   cur++;
+   }
+
+   /*
+* Sample output 

Re: [PATCH 0/5] ubloxmodem support +UCGED mode 2

2016-12-14 Thread Djalal Harouni
Hi Denis,

On 13 December 2016 at 18:39, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
>> Djalal Harouni (5):
>>   netmon: add NETMON_INFO_{EARFCN|EBAND|CQI}
>>   doc: document netmon EARFCN, EBand and CQI properties
>>   netmon: handle OFONO_NETMON_INFO_{EARFCN|EBAND|CQI}
>>   test:netmon: support EARFCN, Eband and CQI in testing
>
>
> Patches 1-4 applied, thanks.
Ok, will update the last patch asap, and many thanks for applying these.


> Regards,
> -Denis
>
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 5/5] ublox:netmon: support +UCGED and get EARFCN, EBAND and CQI

2016-12-13 Thread Djalal Harouni
This adds support for +UCGED mode 2 and for now we collect only
EARFCN, EBAND and CQI. Later we will follow up with +UCGED mode 3.

Some ublox modems supports +UCGED mode 2 and others only +UCGED mode 3
depending on the firmware.
---
 drivers/ubloxmodem/netmon.c | 195 +++-
 1 file changed, 191 insertions(+), 4 deletions(-)

diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
index 0749078..9d414a8 100644
--- a/drivers/ubloxmodem/netmon.c
+++ b/drivers/ubloxmodem/netmon.c
@@ -46,6 +46,13 @@
 
 static const char *cops_prefix[] = { "+COPS:", NULL };
 static const char *cesq_prefix[] = { "+CESQ:", NULL };
+static const char *ucged_prefix[] = { "+UCGED:", NULL };
+
+/* Field from +UCGED response */
+typedef struct ublox_ucged_value {
+   int offset; /* Offset at response */
+   uint8_t base;   /* Base format how to parse */
+} ublox_ucged_value;
 
 struct netmon_driver_data {
GAtChat *chat;
@@ -67,6 +74,10 @@ struct req_cb_data {
int rsrp;   /* CESQ: Reference Signal Received Power */
int ecn0;   /* CESQ: Received Energy Ratio */
int rsrq;   /* CESQ: Reference Signal Received Quality */
+
+   int earfcn; /* UCGED: E-UTRA ARFCN */
+   int eband;  /* UCGED: E-UTRA Band */
+   int cqi;/* UCGED: Channel Quality Indicator */
 };
 
 /*
@@ -102,6 +113,7 @@ static inline struct req_cb_data *req_cb_data_new0(void 
*cb, void *data,
ret->cb = cb;
ret->data = data;
ret->netmon = user;
+
ret->rxlev = -1;
ret->ber = -1;
ret->rscp = -1;
@@ -109,6 +121,10 @@ static inline struct req_cb_data *req_cb_data_new0(void 
*cb, void *data,
ret->ecn0 = -1;
ret->rsrq = -1;
 
+   ret->earfcn = -1;
+   ret->eband = -1;
+   ret->cqi = -1;
+
return ret;
 }
 
@@ -157,11 +173,158 @@ static void ublox_netmon_finish_success(struct 
req_cb_data *cbd)
OFONO_NETMON_INFO_ECN0, cbd->ecn0,
OFONO_NETMON_INFO_RSRQ, cbd->rsrq,
OFONO_NETMON_INFO_RSRP, cbd->rsrp,
+   OFONO_NETMON_INFO_EARFCN, cbd->earfcn,
+   OFONO_NETMON_INFO_EBAND, cbd->eband,
+   OFONO_NETMON_INFO_CQI, cbd->cqi,
OFONO_NETMON_INFO_INVALID);
 
CALLBACK_WITH_SUCCESS(cbd->cb, cbd->data);
 }
 
+static void ucged_parse_4g(struct req_cb_data *cbd, GAtResultIter *iter)
+{
+   /* Offset of values in returned response */
+   enum ucged_mode2_rat4_offsets {
+   UCGED_EARFCN= 0,
+   UCGED_EBAND = 1,
+   UCGED_CQI   = 15,
+   UCGED_VOLTE_MODE= 21,
+   _MAX/* End */
+   };
+
+   ublox_ucged_value ucged_values[] = {
+   { UCGED_EARFCN, 10 },
+   { UCGED_EBAND,  10 },
+   { UCGED_CQI,10 },
+   { -1,   0  }, /* End of Array */
+   };
+
+   gboolean ok;
+   unsigned i;
+   ublox_ucged_value *ptr;
+
+   /* Skip first fields */
+   g_at_result_iter_next(iter, NULL);
+
+   for (i = 0, ptr = _values[0]; i < _MAX; i++) {
+   const char *str = NULL;
+   int number;
+
+   /* First read the data */
+   ok = g_at_result_iter_next_unquoted_string(iter, );
+   if (!ok) {
+   DBG(" UCGED: error parsing at idx: %d ", i);
+   return;
+   }
+
+   DBG(" UCGED: RAT = 4G idx: %d  -  reading field: %s ", i, str);
+
+   /* End, nothing to do we got all our values */
+   if (ptr->offset < 0)
+   break;
+
+   /* Skip to next if we are not interested in this value */
+   if (i != (unsigned) ptr->offset)
+   continue;
+
+   errno = 0;
+   number = strtol(str, NULL, ptr->base);
+   if (errno != 0 && number == 0) {
+   DBG(" UCGED: RAT = 4G  idx: %u  failed parsing '%s' ",
+   i, str);
+   continue;
+   }
+
+   switch (i) {
+   case UCGED_EARFCN:
+   cbd->earfcn = number != 65535 ? number : cbd->earfcn;
+   break;
+   case UCGED_EBAND:
+   cbd->eband = number != 255 ? number : cbd->eband;
+   break;
+   case UCGED_CQI:
+   cbd->cqi = number != 255 ? number : cbd->cqi;
+   break;
+   }
+
+   ptr++;
+   }
+
+   DBG(" UCGED: MODE 2 RAT = 4GEARFCN = %d ", cbd->earfcn);
+   DBG(" UCGED: MODE 2 RAT = 

[PATCH 3/5] netmon: handle OFONO_NETMON_INFO_{EARFCN|EBAND|CQI}

2016-12-13 Thread Djalal Harouni
---
 src/netmon.c | 21 +
 1 file changed, 21 insertions(+)

diff --git a/src/netmon.c b/src/netmon.c
index bb39586..6476783 100644
--- a/src/netmon.c
+++ b/src/netmon.c
@@ -211,6 +211,27 @@ void ofono_netmon_serving_cell_notify(struct ofono_netmon 
*netmon,
intval, uint8_t, DBUS_TYPE_BYTE);
break;
 
+   case OFONO_NETMON_INFO_EARFCN:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "EARFCN",
+   intval, uint16_t, DBUS_TYPE_UINT16);
+   break;
+
+   case OFONO_NETMON_INFO_EBAND:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "EBand",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_CQI:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "ChannelQualityIndicator",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
case OFONO_NETMON_INFO_INVALID:
break;
}
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 4/5] test:netmon: support EARFCN, Eband and CQI in testing scripts

2016-12-13 Thread Djalal Harouni
---
 test/get-serving-cell-info | 12 
 1 file changed, 12 insertions(+)

diff --git a/test/get-serving-cell-info b/test/get-serving-cell-info
index 94e1c54..7a5d898 100755
--- a/test/get-serving-cell-info
+++ b/test/get-serving-cell-info
@@ -31,6 +31,9 @@ rscp = 'ReceivedSignalCodePower'
 ecn0 = 'ReceivedEnergyRatio'
 rsrq = 'ReferenceSignalReceivedQuality'
 rsrp = 'ReferenceSignalReceivedPower'
+earfcn = 'EARFCN'
+eband = 'EBand'
+cqi = 'ChannelQualityIndicator'
 
 print("Current serving cell information:")
 
@@ -73,4 +76,13 @@ if rsrq in servingcell:
 if rsrp in servingcell:
print("[ Reference Signal Received Power = %d]" % 
(servingcell[rsrp]))
 
+if earfcn in servingcell:
+   print("[ E-UTRA Absolue Radio Frequency Channel = %d ]" % 
(servingcell[earfcn]))
+
+if eband in servingcell:
+   print("[ E-UTRA operating Band = %d ]" % (servingcell[eband]))
+
+if cqi in servingcell:
+   print("[ Channel Quality Indicator = %d ]" % (servingcell[cqi]))
+
 print('')
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 1/5] netmon: add NETMON_INFO_{EARFCN|EBAND|CQI}

2016-12-13 Thread Djalal Harouni
Add the following types to use with ublox modems +UCGED command.

EARFCN: E-UTRA Absolute Radio Frequency Channel Number.
EBand: E-UTRA operating Band.
CQI: Channel Quality Indicator.
---
 include/netmon.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/netmon.h b/include/netmon.h
index 47d7a9c..72090c3 100644
--- a/include/netmon.h
+++ b/include/netmon.h
@@ -63,6 +63,9 @@ enum ofono_netmon_info {
OFONO_NETMON_INFO_ECN0, /* int */
OFONO_NETMON_INFO_RSRQ, /* int */
OFONO_NETMON_INFO_RSRP, /* int */
+   OFONO_NETMON_INFO_EARFCN, /* int */
+   OFONO_NETMON_INFO_EBAND, /* int */
+   OFONO_NETMON_INFO_CQI, /* int */
OFONO_NETMON_INFO_INVALID,
 };
 
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 2/5] doc: document netmon EARFCN, EBand and CQI properties

2016-12-13 Thread Djalal Harouni
Documentation for:
EARFCN: E-UTRA Absolute Radio Frequency Channel Number.
EBand: E-UTRA operating Band.
CQI: Channel Quality Indicator.
---
 doc/networkmonitor-api.txt | 17 +
 1 file changed, 17 insertions(+)

diff --git a/doc/networkmonitor-api.txt b/doc/networkmonitor-api.txt
index 0d2fe3f..ddace7e 100644
--- a/doc/networkmonitor-api.txt
+++ b/doc/networkmonitor-api.txt
@@ -103,3 +103,20 @@ byte ReferenceSignalReceivedPower [optional, lte]
 
 Contains the Reference Signal Received Power.  Valid range of values
 is 0-97. Refer to  in 27.007, Section 8.69 for more details.
+
+uint16 EARFCN [optional, lte]
+
+   Contains E-UTRA Absolute Radio Frequency Channel Number.  Valid
+   range of values is 0-65535. Refer to Carrier frequency and
+   EARFCN in 36.101, Section 5.7.3 for more details.
+
+byte EBand [optional, lte]
+
+   Contains E-UTRA operating Band.  Valid range of values is 1-43.
+   Refer to Operating bands in 36.101, Section 5.5 for more
+   details.
+
+byte ChannelQualityIndicator [optional, lte]
+
+   Contains Channel Quality Indicator.  Refer to Channel Quality
+   Indicator definition in 36.213, Section 7.2.3 for more details.
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


Re: [PATCH v3 4/7] ubloxmodem: add the netmon driver

2016-12-05 Thread Djalal Harouni
Hi Denis,

On 1 December 2016 at 18:18, Denis Kenzior  wrote:
> Hi Djalal,
>
>>
>>
>> OK thank you for the explanation. I did go with ref counting since
>> they are easy to use and I will follow up later with +UCGED which has
>> different behaviour depending on firmware version...
>
>
> Sounds good.
[...]
>> Hmm so now maybe the leak may happen in this small window between:
>> cbd = req_cb_data_ref(cbd);
>> and
>> g_at_chat_send() and before registering the GDestroyNotify
>> parameter... in case hardware removal happens or anything... I'm not
>> sure and I also don't know how to fix it.
>
>
> This is not possible.  The hardware removal notification still comes over a
> socket, so regular event loop rules apply.  The function invocation won't be
> interrupted mid-stream.
I see, thanks for the explanation.

> What we're worried about is us allocating memory, queuing the command into
> GAtChat, but at some point later, the GAtChat object is destroyed before the
> command callback was executed.
Ok will follow same rules for next patches.


> Regards,
> -Denis
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


Re: [PATCH v3 7/7] test: support OFONO_NETMON_INFO_{RXLEV|RSCP|ECN0|RSRQ|RSRP}

2016-12-01 Thread Djalal Harouni
Hi Denis,


On 30 November 2016 at 16:56, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
> On 11/30/2016 06:31 AM, Djalal Harouni wrote:
>>
>> Display the following fields if they are returned.
>>
>> RXLEV:  Received Signal Strength
>> RSCP:   Received Signal Code Power
>> ECN0:   Received Energy Ratio
>> RSRQ:   Reference Signal Received Quality
>> RSRP:   Reference Signal Received Power
>> ---
>>   test/get-serving-cell-info | 20 
>>   1 file changed, 20 insertions(+)
>>
>
> Applied, thanks.

Thank you!

> Regards,
> -Denis
>
>
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


Re: [PATCH v3 4/7] ubloxmodem: add the netmon driver

2016-12-01 Thread Djalal Harouni
Hi Denis,

On 30 November 2016 at 16:55, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
>
> On 11/30/2016 06:31 AM, Djalal Harouni wrote:
>>
>> This adds a netmon driver for ublox. The driver support both +COPS and
>> +CESQ commands to return the previously added ofono netmon types:
>>
>> RSCP: Received Signal Code Power
>> ECN0: Received Energy Ratio
>> RSRQ: Reference Signal Received Quality
>> RSRP: Reference Signal Received Power
>> ---
>>   drivers/ubloxmodem/netmon.c | 336
>> 
>>   drivers/ubloxmodem/ubloxmodem.c |   2 +
>>   drivers/ubloxmodem/ubloxmodem.h |   3 +
>>   3 files changed, 341 insertions(+)
>>   create mode 100644 drivers/ubloxmodem/netmon.c
>>
>> diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
>> new file mode 100644
>> index 000..e5adf59
>> --- /dev/null
>> +++ b/drivers/ubloxmodem/netmon.c
>> @@ -0,0 +1,336 @@
>> +/*
>> + *
>> + *  oFono - Open Source Telephony
>> + *
>> + *  Copyright (C) 2016  EndoCode AG. All rights reserved.
>> + *
>> + *  This program is free software; you can redistribute it and/or modify
>> + *  it under the terms of the GNU General Public License version 2 as
>> + *  published by the Free Software Foundation.
>> + *
>> + *  This program is distributed in the hope that it will be useful,
>> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + *  GNU General Public License for more details.
>> + *
>> + *  You should have received a copy of the GNU General Public License
>> + *  along with this program; if not, write to the Free Software
>> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
>> USA
>> + *
>> + */
>> +
>> +#ifdef HAVE_CONFIG_H
>> +#include 
>> +#endif
>> +
>> +#define _GNU_SOURCE
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include 
>> +
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include "gatchat.h"
>> +#include "gatresult.h"
>> +
>> +#include "common.h"
>> +#include "netreg.h"
>
>
> This should probably be  and moved up above.
>

Fixed.

>> +#include "ubloxmodem.h"
[...]

> This if can in theory be removed, see my comments in req_cb_data_new0.
>
>> +
>> +   if (g_at_chat_send(nmd->chat, "AT+COPS?", cops_prefix,
>> +  cops_cb, cbd, NULL) == 0) {
>
>
> So this is still not right with the missing GDestroyNotify parameter.
> GAtChat is pretty flexible & neat, so it makes things like this easy to
> solve.  Here are a couple of ways you can handle this:
>
> 1. Send all commands right away.  Provide cbd as userdata for all of them,
> and provide GDestroyNotify callback (e.g. g_free) only to the last command
> sent. GAtChat will queue them up internally, and if this atom gets destroyed
> prematurely (e.g. due to sim removal conditions, hardware removal, etc) the
> GDestroyNotify callback will be called in all cases.
>
> So roughly:
> g_at_chat_send(..., "AT+COPS?", ..., cbd, NULL);
> g_at_chat_send(..., "AT+CESQ?", ..., cbd, g_free);
>
> 2. Use reference counting on the cbd object.  req_cb_data_new0 would
> initialize reference count to 1.  req_cb_data_ref / unref would increase /
> decrease it.  req_cb_data_unref would use g_free if reference count reaches
> 0.
>
> This way you can do something like:
>
> g_at_chat_send(..., "AT+COPS?", ..., cbd, req_cb_data_unref);
>
> Then inside the cops callback, if the command succeeds and you want to
> proceed with CESQ, you'd invoke req_cb_data_ref(), otherwise simply callback
> with failure & return.  In both cases req_cb_data_unref will be called after
> the cops callback is executed.
>

OK thank you for the explanation. I did go with ref counting since
they are easy to use and I will follow up later with +UCGED which has
different behaviour depending on firmware version...

I take a ref just before doing the g_at_chat_send() , however I call
unref in case g_at_chat_send() returns 0 and fails since in that case
the GDestroyNotify is still not registered and the command was not
queued...

Hmm so now maybe the leak may happen in this small window between:
cbd = req_cb_data_ref(cbd);
and
g_at_chat_send() and before registering the GDestroyNotify
parameter... in case hardware removal happens or anything... I'm

[PATCH v4 4/7] ubloxmodem: add the netmon driver

2016-12-01 Thread Djalal Harouni
This adds a netmon driver for ublox. The driver support both +COPS and
+CESQ commands to return the previously added ofono netmon types:

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power

Current revision makes the driver use ref countig when chaining multiple
AT commands.
---
 drivers/ubloxmodem/netmon.c | 352 
 drivers/ubloxmodem/ubloxmodem.c |   2 +
 drivers/ubloxmodem/ubloxmodem.h |   3 +
 3 files changed, 357 insertions(+)
 create mode 100644 drivers/ubloxmodem/netmon.c

diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
new file mode 100644
index 000..c4c4fcd
--- /dev/null
+++ b/drivers/ubloxmodem/netmon.c
@@ -0,0 +1,352 @@
+/*
+ *
+ *  oFono - Open Source Telephony
+ *
+ *  Copyright (C) 2016  EndoCode AG. All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#define _GNU_SOURCE
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#include "gatchat.h"
+#include "gatresult.h"
+
+#include "common.h"
+#include "ubloxmodem.h"
+#include "drivers/atmodem/vendor.h"
+
+static const char *cops_prefix[] = { "+COPS:", NULL };
+static const char *cesq_prefix[] = { "+CESQ:", NULL };
+
+struct netmon_driver_data {
+   GAtChat *chat;
+};
+
+struct req_cb_data {
+   gint ref_count; /* Ref count */
+
+   struct ofono_netmon *netmon;
+
+   ofono_netmon_cb_t cb;
+   void *data;
+
+   struct ofono_network_operator op;
+
+   int rxlev;  /* CESQ: Received Signal Strength Indication */
+   int ber;/* CESQ: Bit Error Rate */
+   int rscp;   /* CESQ: Received Signal Code Powe */
+   int rsrp;   /* CESQ: Reference Signal Received Power */
+   int ecn0;   /* CESQ: Received Energy Ratio */
+   int rsrq;   /* CESQ: Reference Signal Received Quality */
+};
+
+/*
+ * Returns the appropriate radio access technology.
+ *
+ * If we can not resolve to a specific radio access technolgy
+ * we return OFONO_NETMON_CELL_TYPE_GSM by default.
+ */
+static int ublox_map_radio_access_technology(int tech)
+{
+   switch (tech) {
+   case ACCESS_TECHNOLOGY_GSM:
+   case ACCESS_TECHNOLOGY_GSM_COMPACT:
+   return OFONO_NETMON_CELL_TYPE_GSM;
+   case ACCESS_TECHNOLOGY_UTRAN:
+   case ACCESS_TECHNOLOGY_UTRAN_HSDPA:
+   case ACCESS_TECHNOLOGY_UTRAN_HSUPA:
+   case ACCESS_TECHNOLOGY_UTRAN_HSDPA_HSUPA:
+   return OFONO_NETMON_CELL_TYPE_UMTS;
+   case ACCESS_TECHNOLOGY_EUTRAN:
+   return OFONO_NETMON_CELL_TYPE_LTE;
+   }
+
+   return OFONO_NETMON_CELL_TYPE_GSM;
+}
+
+static inline struct req_cb_data *req_cb_data_new0(void *cb, void *data,
+   void *user)
+{
+   struct req_cb_data *ret = g_new0(struct req_cb_data, 1);
+
+   ret->ref_count = 1;
+   ret->cb = cb;
+   ret->data = data;
+   ret->netmon = user;
+   ret->rxlev = -1;
+   ret->ber = -1;
+   ret->rscp = -1;
+   ret->rsrp = -1;
+   ret->ecn0 = -1;
+   ret->rsrq = -1;
+
+   return ret;
+}
+
+static inline struct req_cb_data *req_cb_data_ref(struct req_cb_data *cbd)
+{
+   if (cbd == NULL)
+   return NULL;
+
+   g_atomic_int_inc(>ref_count);
+
+   return cbd;
+}
+
+static void req_cb_data_unref(gpointer user_data)
+{
+   gboolean is_zero;
+   struct req_cb_data *cbd = user_data;
+
+   if (cbd == NULL)
+   return NULL;
+
+   is_zero = g_atomic_int_dec_and_test(>ref_count);
+
+   if (is_zero == TRUE)
+   g_free(cbd);
+}
+
+static gboolean ublox_delayed_register(gpointer user_data)
+{
+   struct ofono_netmon *netmon = user_data;
+
+   ofono_netmon_register(netmon);
+
+   return FALSE;
+}
+
+static void ublox_netmon_finish_success(struct req_cb_data *cbd)
+{
+   struct ofono_netmon *nm = cbd->netmon;
+
+   ofono_netmon_serving_cell_notify(nm,
+   cbd->op.tech,
+   OFONO_NETMON_INFO_RXLEV, cbd->rxlev,
+   OFONO_NETMON_INFO_BER, cbd->ber,
+

[PATCH v3 4/7] ubloxmodem: add the netmon driver

2016-11-30 Thread Djalal Harouni
This adds a netmon driver for ublox. The driver support both +COPS and
+CESQ commands to return the previously added ofono netmon types:

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power
---
 drivers/ubloxmodem/netmon.c | 336 
 drivers/ubloxmodem/ubloxmodem.c |   2 +
 drivers/ubloxmodem/ubloxmodem.h |   3 +
 3 files changed, 341 insertions(+)
 create mode 100644 drivers/ubloxmodem/netmon.c

diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
new file mode 100644
index 000..e5adf59
--- /dev/null
+++ b/drivers/ubloxmodem/netmon.c
@@ -0,0 +1,336 @@
+/*
+ *
+ *  oFono - Open Source Telephony
+ *
+ *  Copyright (C) 2016  EndoCode AG. All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#define _GNU_SOURCE
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+#include 
+
+#include "gatchat.h"
+#include "gatresult.h"
+
+#include "common.h"
+#include "netreg.h"
+#include "ubloxmodem.h"
+#include "drivers/atmodem/vendor.h"
+
+static const char *cops_prefix[] = { "+COPS:", NULL };
+static const char *cesq_prefix[] = { "+CESQ:", NULL };
+
+struct netmon_driver_data {
+   GAtChat *chat;
+};
+
+struct req_cb_data {
+   struct ofono_netmon *netmon;
+
+   ofono_netmon_cb_t cb;
+   void *data;
+
+   struct ofono_network_operator op;
+
+   int rxlev;  /* CESQ: Received Signal Strength Indication */
+   int ber;/* CESQ: Bit Error Rate */
+   int rscp;   /* CESQ: Received Signal Code Powe */
+   int rsrp;   /* CESQ: Reference Signal Received Power */
+   int ecn0;   /* CESQ: Received Energy Ratio */
+   int rsrq;   /* CESQ: Reference Signal Received Quality */
+};
+
+/*
+ * Returns the appropriate radio access technology.
+ *
+ * If we can not resolve to a specific radio access technolgy
+ * we return OFONO_NETMON_CELL_TYPE_GSM by default.
+ */
+static int ublox_map_radio_access_technology(int tech)
+{
+   switch (tech) {
+   case ACCESS_TECHNOLOGY_GSM:
+   case ACCESS_TECHNOLOGY_GSM_COMPACT:
+   return OFONO_NETMON_CELL_TYPE_GSM;
+   case ACCESS_TECHNOLOGY_UTRAN:
+   case ACCESS_TECHNOLOGY_UTRAN_HSDPA:
+   case ACCESS_TECHNOLOGY_UTRAN_HSUPA:
+   case ACCESS_TECHNOLOGY_UTRAN_HSDPA_HSUPA:
+   return OFONO_NETMON_CELL_TYPE_UMTS;
+   case ACCESS_TECHNOLOGY_EUTRAN:
+   return OFONO_NETMON_CELL_TYPE_LTE;
+   }
+
+   return OFONO_NETMON_CELL_TYPE_GSM;
+}
+
+static inline struct req_cb_data *req_cb_data_new0(void *cb, void *data, void 
*user)
+{
+   struct req_cb_data *ret = g_new0(struct req_cb_data, 1);
+   if (ret == NULL)
+   return NULL;
+
+   ret->cb = cb;
+   ret->data = data;
+   ret->netmon = user;
+   ret->rxlev = -1;
+   ret->ber = -1;
+   ret->rscp = -1;
+   ret->rsrp = -1;
+   ret->ecn0 = -1;
+   ret->rsrq = -1;
+
+   return ret;
+}
+
+static gboolean ublox_delayed_register(gpointer user_data)
+{
+   struct ofono_netmon *netmon = user_data;
+
+   ofono_netmon_register(netmon);
+
+   return FALSE;
+}
+
+static void ublox_netmon_finish_success(struct req_cb_data *cbd)
+{
+   struct ofono_netmon *nm = cbd->netmon;
+
+   ofono_netmon_serving_cell_notify(nm,
+cbd->op.tech,
+OFONO_NETMON_INFO_RXLEV, cbd->rxlev,
+OFONO_NETMON_INFO_BER, cbd->ber,
+OFONO_NETMON_INFO_RSCP, cbd->rscp,
+OFONO_NETMON_INFO_ECN0, cbd->ecn0,
+OFONO_NETMON_INFO_RSRQ, cbd->rsrq,
+OFONO_NETMON_INFO_RSRP, cbd->rsrp,
+OFONO_NETMON_INFO_INVALID);
+
+   CALLBACK_WITH_SUCCESS(cbd->cb, cbd->data);
+   g_free(cbd);
+}
+
+static void cesq_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+   enum cesq_ofono_netmon_info {
+   CESQ_RXLEV,
+   CESQ_BER,
+   CESQ_RSCP,
+   CESQ_ECN0,

[PATCH v3 2/7] netmon: handle OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP} in D-Bus

2016-11-30 Thread Djalal Harouni
Handle the previously added types in D-Bus.

Documentation for these values is in next patch.
---
 src/netmon.c | 28 
 1 file changed, 28 insertions(+)

diff --git a/src/netmon.c b/src/netmon.c
index eb18b9c..2a8c524 100644
--- a/src/netmon.c
+++ b/src/netmon.c
@@ -180,6 +180,34 @@ void ofono_netmon_serving_cell_notify(struct ofono_netmon 
*netmon,
intval, uint8_t, DBUS_TYPE_BYTE);
break;
 
+   case OFONO_NETMON_INFO_RSCP:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "ReceivedSignalCodePower",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_ECN0:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "ReceivedEnergyRatio",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_RSRQ:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, 
"ReferenceSignalReceivedQuality",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_RSRP:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, 
"ReferenceSignalReceivedPower",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
case OFONO_NETMON_INFO_INVALID:
break;
}
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH v3 6/7] build: build the ublox netmon driver

2016-11-30 Thread Djalal Harouni
---
 Makefile.am | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Makefile.am b/Makefile.am
index 3d7774b..07adeab 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -383,6 +383,7 @@ builtin_sources += drivers/atmodem/atutil.h \
drivers/ubloxmodem/ubloxmodem.h \
drivers/ubloxmodem/ubloxmodem.c \
drivers/ubloxmodem/gprs-context.c \
+   drivers/ubloxmodem/netmon.c \
drivers/ubloxmodem/lte.c
 
 
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH v3 3/7] doc: documentation for OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}

2016-11-30 Thread Djalal Harouni
This adds documentation for the following fields in
networkmonitor-api.txt

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power
---
 doc/networkmonitor-api.txt | 22 ++
 1 file changed, 22 insertions(+)

diff --git a/doc/networkmonitor-api.txt b/doc/networkmonitor-api.txt
index 703f19b..0d2fe3f 100644
--- a/doc/networkmonitor-api.txt
+++ b/doc/networkmonitor-api.txt
@@ -81,3 +81,25 @@ byte Strength [optional, gsm, umts]
 
Contains the signal strength.  Valid values are 0-31.  Refer to 
in 27.007, Section 8.5.
+
+byte ReceivedSignalCodePower [optional, umts]
+
+Contains the Received Signal Code Power.  Valid range of values
+is 0-96. Refer to  in 27.007, Section 8.69 for more details.
+
+byte ReceivedEnergyRatio [optional, umts]
+
+Contains the Ratio of received energy per PN chip to the total
+received power spectral density.  Valid range of values is 0-49.
+Refer to  in 27.007, Section 8.69 for more details.
+
+byte ReferenceSignalReceivedQuality [optional, lte]
+
+Contains the Reference Signal Received Quality.  Valid range of
+values is 0-34. Refer to  in 27.007, Section 8.69 for more
+details.
+
+byte ReferenceSignalReceivedPower [optional, lte]
+
+Contains the Reference Signal Received Power.  Valid range of values
+is 0-97. Refer to  in 27.007, Section 8.69 for more details.
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH v3 7/7] test: support OFONO_NETMON_INFO_{RXLEV|RSCP|ECN0|RSRQ|RSRP}

2016-11-30 Thread Djalal Harouni
Display the following fields if they are returned.

RXLEV:  Received Signal Strength
RSCP:   Received Signal Code Power
ECN0:   Received Energy Ratio
RSRQ:   Reference Signal Received Quality
RSRP:   Reference Signal Received Power
---
 test/get-serving-cell-info | 20 
 1 file changed, 20 insertions(+)

diff --git a/test/get-serving-cell-info b/test/get-serving-cell-info
index 05dc9fe..94e1c54 100755
--- a/test/get-serving-cell-info
+++ b/test/get-serving-cell-info
@@ -26,6 +26,11 @@ cid = 'CellId'
 psc = 'PrimaryScramblingCode'
 rssi = 'Strength'
 ber = 'BitErrorRate'
+rxlev = 'ReceivedSignalStrength'
+rscp = 'ReceivedSignalCodePower'
+ecn0 = 'ReceivedEnergyRatio'
+rsrq = 'ReferenceSignalReceivedQuality'
+rsrp = 'ReferenceSignalReceivedPower'
 
 print("Current serving cell information:")
 
@@ -50,7 +55,22 @@ if psc in servingcell:
 if rssi in servingcell:
print("[ Signal Strength = %d]" % (servingcell[rssi]))
 
+if rxlev in servingcell:
+   print("[ Received Signal Strength = %d]" % (servingcell[rxlev]))
+
 if ber in servingcell:
print("[ Bit Error Rate = %d]" % (servingcell[ber]))
 
+if rscp in servingcell:
+   print("[ Received Signal Code Power = %d]" % (servingcell[rscp]))
+
+if ecn0 in servingcell:
+   print("[ Received Energy Ratio = %d]" % (servingcell[ecn0]))
+
+if rsrq in servingcell:
+   print("[ Reference Signal Received Quality = %d]" % 
(servingcell[rsrq]))
+
+if rsrp in servingcell:
+   print("[ Reference Signal Received Power = %d]" % 
(servingcell[rsrp]))
+
 print('')
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH v3 1/7] netmon: add OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}

2016-11-30 Thread Djalal Harouni
Add more ofono netmon info types that will be served through the netmon
interface. The main user of this now will be the ublox modem.

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power

Patches using these types to follow.
---
 include/netmon.h | 4 
 1 file changed, 4 insertions(+)

diff --git a/include/netmon.h b/include/netmon.h
index ec8a2e1..47d7a9c 100644
--- a/include/netmon.h
+++ b/include/netmon.h
@@ -59,6 +59,10 @@ enum ofono_netmon_info {
OFONO_NETMON_INFO_RSSI, /* int */
OFONO_NETMON_INFO_TIMING_ADVANCE, /* int */
OFONO_NETMON_INFO_PSC, /* int */
+   OFONO_NETMON_INFO_RSCP, /* int */
+   OFONO_NETMON_INFO_ECN0, /* int */
+   OFONO_NETMON_INFO_RSRQ, /* int */
+   OFONO_NETMON_INFO_RSRP, /* int */
OFONO_NETMON_INFO_INVALID,
 };
 
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH v3 0/7] ubloxmodem add netmon interface

2016-11-30 Thread Djalal Harouni
Hi,

These patches add netmon interface to ubloxmodem. This allows to query
and get data returned by +CESQ command through D-Bus.

The following types will be exposed as Network Monitor Property Types.
RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power


Thank you!

Changes since v2
  * Fixed subject of header message: we have 0/7 patches and not 0/5
  * Tag all subject of patches with v3, easy to read.
  * Fixed a bug we have to return when finishing please see:
https://lists.ofono.org/pipermail/ofono/2016-November/016693.html


Changes since v1:
  * Re-worked patches to follow 'Submitting patches' section.
Each top-level directory change should be in a separate patch
  * Removed OFONO_NETMON_INFO_OPERATOR
  * Documented all added fields in networkmonitor-api.txt
  * We only use one channel for communication, dropped the other one.
  * Fixed a cbd memory leak, now we try to be conservative and always
report what we have collected so far. We only fail hard in case
+COPS failed or sending +CESQ failed. Otherwise we report the result
and make sure to free cbd.
  * Various fixes to follow the coding style.


v2 is here:
https://lists.ofono.org/pipermail/ofono/2016-November/016685.html

V1 is here:
https://lists.ofono.org/pipermail/ofono/2016-November/016671.html


Djalal Harouni (7):
  netmon: add OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}
  netmon: handle OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP} in D-Bus
  doc: documentation for OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}
  ubloxmodem: add the netmon driver
  ubloxmodem: register and initialize the netmon driver
  build: build the ublox netmon driver
  test: support OFONO_NETMON_INFO_{RXLEV|RSCP|ECN0|RSRQ|RSRP}

 Makefile.am |   1 +
 doc/networkmonitor-api.txt  |  22 +++
 drivers/ubloxmodem/netmon.c | 335 
 drivers/ubloxmodem/ubloxmodem.c |   2 +
 drivers/ubloxmodem/ubloxmodem.h |   3 +
 include/netmon.h|   4 +
 plugins/ublox.c |   3 +
 src/netmon.c|  28 
 test/get-serving-cell-info  |  20 +++
 9 files changed, 418 insertions(+)
 create mode 100644 drivers/ubloxmodem/netmon.c
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


Re: [PATCH 4/7] ubloxmodem: add the netmon driver

2016-11-30 Thread Djalal Harouni
On 30 November 2016 at 13:13, Djalal Harouni <dja...@endocode.com> wrote:
> This adds a netmon driver for ublox. The driver support both +COPS and
> +CESQ commands to return the previously added ofono netmon types:
>
> RSCP: Received Signal Code Power
> ECN0: Received Energy Ratio
> RSRQ: Reference Signal Received Quality
> RSRP: Reference Signal Received Power
> ---
>  drivers/ubloxmodem/netmon.c | 335 
> 
>  drivers/ubloxmodem/ubloxmodem.c |   2 +
>  drivers/ubloxmodem/ubloxmodem.h |   3 +
>  3 files changed, 340 insertions(+)
>  create mode 100644 drivers/ubloxmodem/netmon.c
>
> diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
> new file mode 100644
> index 000..3cc31a0
> --- /dev/null
> +++ b/drivers/ubloxmodem/netmon.c
> @@ -0,0 +1,335 @@
> +/*
> + *
> + *  oFono - Open Source Telephony
> + *
> + *  Copyright (C) 2016  EndoCode AG. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  
> USA
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include 
> +#endif
> +
> +#define _GNU_SOURCE
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +
> +#include "gatchat.h"
> +#include "gatresult.h"
> +
> +#include "common.h"
> +#include "netreg.h"
> +#include "ubloxmodem.h"
> +#include "drivers/atmodem/vendor.h"
> +
> +static const char *cops_prefix[] = { "+COPS:", NULL };
> +static const char *cesq_prefix[] = { "+CESQ:", NULL };
> +
> +struct netmon_driver_data {
> +   GAtChat *chat;
> +};
> +
> +struct req_cb_data {
> +   struct ofono_netmon *netmon;
> +
> +   ofono_netmon_cb_t cb;
> +   void *data;
> +
> +   struct ofono_network_operator op;
> +
> +   int rxlev;  /* CESQ: Received Signal Strength Indication */
> +   int ber;/* CESQ: Bit Error Rate */
> +   int rscp;   /* CESQ: Received Signal Code Powe */
> +   int rsrp;   /* CESQ: Reference Signal Received Power */
> +   int ecn0;   /* CESQ: Received Energy Ratio */
> +   int rsrq;   /* CESQ: Reference Signal Received Quality */
> +};
> +
> +/*
> + * Returns the appropriate radio access technology.
> + *
> + * If we can not resolve to a specific radio access technolgy
> + * we return OFONO_NETMON_CELL_TYPE_GSM by default.
> + */
> +static int ublox_map_radio_access_technology(int tech)
> +{
> +   switch (tech) {
> +   case ACCESS_TECHNOLOGY_GSM:
> +   case ACCESS_TECHNOLOGY_GSM_COMPACT:
> +   return OFONO_NETMON_CELL_TYPE_GSM;
> +   case ACCESS_TECHNOLOGY_UTRAN:
> +   case ACCESS_TECHNOLOGY_UTRAN_HSDPA:
> +   case ACCESS_TECHNOLOGY_UTRAN_HSUPA:
> +   case ACCESS_TECHNOLOGY_UTRAN_HSDPA_HSUPA:
> +   return OFONO_NETMON_CELL_TYPE_UMTS;
> +   case ACCESS_TECHNOLOGY_EUTRAN:
> +   return OFONO_NETMON_CELL_TYPE_LTE;
> +   }
> +
> +   return OFONO_NETMON_CELL_TYPE_GSM;
> +}
> +
> +static inline struct req_cb_data *req_cb_data_new0(void *cb, void *data, 
> void *user)
> +{
> +   struct req_cb_data *ret = g_new0(struct req_cb_data, 1);
> +   if (ret == NULL)
> +   return NULL;
> +
> +   ret->cb = cb;
> +   ret->data = data;
> +   ret->netmon = user;
> +   ret->rxlev = -1;
> +   ret->ber = -1;
> +   ret->rscp = -1;
> +   ret->rsrp = -1;
> +   ret->ecn0 = -1;
> +   ret->rsrq = -1;
> +
> +   return ret;
> +}
> +
> +static gboolean ublox_delayed_register(gpointer user_data)
> +{
> +   struct ofono_netmon *netmon = user_data;
> +
> +   ofono_netmon_register(netmon);
> +
> +   return FALSE;
> +}
> +
> +static void ublox_netmon_finish_success(struct req_cb_data *cbd)
&g

[PATCH 3/7] doc: documentation for OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}

2016-11-30 Thread Djalal Harouni
This adds documentation for the following fields in
networkmonitor-api.txt

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power
---
 doc/networkmonitor-api.txt | 22 ++
 1 file changed, 22 insertions(+)

diff --git a/doc/networkmonitor-api.txt b/doc/networkmonitor-api.txt
index 703f19b..0d2fe3f 100644
--- a/doc/networkmonitor-api.txt
+++ b/doc/networkmonitor-api.txt
@@ -81,3 +81,25 @@ byte Strength [optional, gsm, umts]
 
Contains the signal strength.  Valid values are 0-31.  Refer to 
in 27.007, Section 8.5.
+
+byte ReceivedSignalCodePower [optional, umts]
+
+Contains the Received Signal Code Power.  Valid range of values
+is 0-96. Refer to  in 27.007, Section 8.69 for more details.
+
+byte ReceivedEnergyRatio [optional, umts]
+
+Contains the Ratio of received energy per PN chip to the total
+received power spectral density.  Valid range of values is 0-49.
+Refer to  in 27.007, Section 8.69 for more details.
+
+byte ReferenceSignalReceivedQuality [optional, lte]
+
+Contains the Reference Signal Received Quality.  Valid range of
+values is 0-34. Refer to  in 27.007, Section 8.69 for more
+details.
+
+byte ReferenceSignalReceivedPower [optional, lte]
+
+Contains the Reference Signal Received Power.  Valid range of values
+is 0-97. Refer to  in 27.007, Section 8.69 for more details.
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 1/7] netmon: add OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}

2016-11-30 Thread Djalal Harouni
Add more ofono netmon info types that will be served through the netmon
interface. The main user of this now will be the ublox modem.

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power

Patches using these types to follow.
---
 include/netmon.h | 4 
 1 file changed, 4 insertions(+)

diff --git a/include/netmon.h b/include/netmon.h
index ec8a2e1..47d7a9c 100644
--- a/include/netmon.h
+++ b/include/netmon.h
@@ -59,6 +59,10 @@ enum ofono_netmon_info {
OFONO_NETMON_INFO_RSSI, /* int */
OFONO_NETMON_INFO_TIMING_ADVANCE, /* int */
OFONO_NETMON_INFO_PSC, /* int */
+   OFONO_NETMON_INFO_RSCP, /* int */
+   OFONO_NETMON_INFO_ECN0, /* int */
+   OFONO_NETMON_INFO_RSRQ, /* int */
+   OFONO_NETMON_INFO_RSRP, /* int */
OFONO_NETMON_INFO_INVALID,
 };
 
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 7/7] test: support OFONO_NETMON_INFO_{RXLEV|RSCP|ECN0|RSRQ|RSRP}

2016-11-30 Thread Djalal Harouni
Display the following fields if they are returned.

RXLEV:  Received Signal Strength
RSCP:   Received Signal Code Power
ECN0:   Received Energy Ratio
RSRQ:   Reference Signal Received Quality
RSRP:   Reference Signal Received Power
---
 test/get-serving-cell-info | 20 
 1 file changed, 20 insertions(+)

diff --git a/test/get-serving-cell-info b/test/get-serving-cell-info
index 05dc9fe..94e1c54 100755
--- a/test/get-serving-cell-info
+++ b/test/get-serving-cell-info
@@ -26,6 +26,11 @@ cid = 'CellId'
 psc = 'PrimaryScramblingCode'
 rssi = 'Strength'
 ber = 'BitErrorRate'
+rxlev = 'ReceivedSignalStrength'
+rscp = 'ReceivedSignalCodePower'
+ecn0 = 'ReceivedEnergyRatio'
+rsrq = 'ReferenceSignalReceivedQuality'
+rsrp = 'ReferenceSignalReceivedPower'
 
 print("Current serving cell information:")
 
@@ -50,7 +55,22 @@ if psc in servingcell:
 if rssi in servingcell:
print("[ Signal Strength = %d]" % (servingcell[rssi]))
 
+if rxlev in servingcell:
+   print("[ Received Signal Strength = %d]" % (servingcell[rxlev]))
+
 if ber in servingcell:
print("[ Bit Error Rate = %d]" % (servingcell[ber]))
 
+if rscp in servingcell:
+   print("[ Received Signal Code Power = %d]" % (servingcell[rscp]))
+
+if ecn0 in servingcell:
+   print("[ Received Energy Ratio = %d]" % (servingcell[ecn0]))
+
+if rsrq in servingcell:
+   print("[ Reference Signal Received Quality = %d]" % 
(servingcell[rsrq]))
+
+if rsrp in servingcell:
+   print("[ Reference Signal Received Power = %d]" % 
(servingcell[rsrp]))
+
 print('')
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH v2 0/5] ubloxmodem add netmon interface

2016-11-30 Thread Djalal Harouni
Hi,

These patches add netmon interface to ubloxmodem. This allows to query
and get data returned by +CESQ command through D-Bus.

The following types will be exposed as Network Monitor Property Types.
RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power


V1 is here:
https://lists.ofono.org/pipermail/ofono/2016-November/016671.html

Thank you!

Changes since v1:
  * Re-worked patches to follow 'Submitting patches' section.
Each top-level directory change should be in a separate patch
  * Removed OFONO_NETMON_INFO_OPERATOR
  * Documented all added fields in networkmonitor-api.txt
  * We only use one channel for communication, dropped the other one.
  * Fixed a cbd memory leak, now we try to be conservative and always
report what we have collected so far. We only fail hard in case
+COPS failed or sending +CESQ failed. Otherwise we report the result
and make sure to free cbd.
  * Various fixes to follow the coding style.


Djalal Harouni (7):
  netmon: add OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}
  netmon: handle OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP} in D-Bus
  doc: documentation for OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP}
  ubloxmodem: add the netmon driver
  ubloxmodem: register and initialize the netmon driver
  build: build the ublox netmon driver
  test: support OFONO_NETMON_INFO_{RXLEV|RSCP|ECN0|RSRQ|RSRP}

 Makefile.am |   1 +
 doc/networkmonitor-api.txt  |  22 +++
 drivers/ubloxmodem/netmon.c | 335 
 drivers/ubloxmodem/ubloxmodem.c |   2 +
 drivers/ubloxmodem/ubloxmodem.h |   3 +
 include/netmon.h|   4 +
 plugins/ublox.c |   3 +
 src/netmon.c|  28 
 test/get-serving-cell-info  |  20 +++
 9 files changed, 418 insertions(+)
 create mode 100644 drivers/ubloxmodem/netmon.c
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 6/7] build: build the ublox netmon driver

2016-11-30 Thread Djalal Harouni
---
 Makefile.am | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Makefile.am b/Makefile.am
index 3d7774b..07adeab 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -383,6 +383,7 @@ builtin_sources += drivers/atmodem/atutil.h \
drivers/ubloxmodem/ubloxmodem.h \
drivers/ubloxmodem/ubloxmodem.c \
drivers/ubloxmodem/gprs-context.c \
+   drivers/ubloxmodem/netmon.c \
drivers/ubloxmodem/lte.c
 
 
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 2/7] netmon: handle OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP} in D-Bus

2016-11-30 Thread Djalal Harouni
Handle the previously added types in D-Bus.

Documentation for these values is in next patch.
---
 src/netmon.c | 28 
 1 file changed, 28 insertions(+)

diff --git a/src/netmon.c b/src/netmon.c
index eb18b9c..2a8c524 100644
--- a/src/netmon.c
+++ b/src/netmon.c
@@ -180,6 +180,34 @@ void ofono_netmon_serving_cell_notify(struct ofono_netmon 
*netmon,
intval, uint8_t, DBUS_TYPE_BYTE);
break;
 
+   case OFONO_NETMON_INFO_RSCP:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "ReceivedSignalCodePower",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_ECN0:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, "ReceivedEnergyRatio",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_RSRQ:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, 
"ReferenceSignalReceivedQuality",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
+   case OFONO_NETMON_INFO_RSRP:
+   intval = va_arg(arglist, int);
+
+   CELL_INFO_DICT_APPEND(, 
"ReferenceSignalReceivedPower",
+   intval, uint8_t, DBUS_TYPE_BYTE);
+   break;
+
case OFONO_NETMON_INFO_INVALID:
break;
}
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 5/7] ubloxmodem: register and initialize the netmon driver

2016-11-30 Thread Djalal Harouni
---
 plugins/ublox.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/plugins/ublox.c b/plugins/ublox.c
index 6d77df8..2ced577 100644
--- a/plugins/ublox.c
+++ b/plugins/ublox.c
@@ -38,6 +38,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -323,6 +324,8 @@ static void ublox_post_online(struct ofono_modem *modem)
struct ublox_data *data = ofono_modem_get_data(modem);
 
ofono_netreg_create(modem, data->vendor_family, "atmodem", data->aux);
+
+   ofono_netmon_create(modem, data->vendor_family, "ubloxmodem", 
data->aux);
 }
 
 static struct ofono_modem_driver ublox_driver = {
-- 
2.5.5

___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


[PATCH 4/7] ubloxmodem: add the netmon driver

2016-11-30 Thread Djalal Harouni
This adds a netmon driver for ublox. The driver support both +COPS and
+CESQ commands to return the previously added ofono netmon types:

RSCP: Received Signal Code Power
ECN0: Received Energy Ratio
RSRQ: Reference Signal Received Quality
RSRP: Reference Signal Received Power
---
 drivers/ubloxmodem/netmon.c | 335 
 drivers/ubloxmodem/ubloxmodem.c |   2 +
 drivers/ubloxmodem/ubloxmodem.h |   3 +
 3 files changed, 340 insertions(+)
 create mode 100644 drivers/ubloxmodem/netmon.c

diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
new file mode 100644
index 000..3cc31a0
--- /dev/null
+++ b/drivers/ubloxmodem/netmon.c
@@ -0,0 +1,335 @@
+/*
+ *
+ *  oFono - Open Source Telephony
+ *
+ *  Copyright (C) 2016  EndoCode AG. All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#define _GNU_SOURCE
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+#include 
+
+#include "gatchat.h"
+#include "gatresult.h"
+
+#include "common.h"
+#include "netreg.h"
+#include "ubloxmodem.h"
+#include "drivers/atmodem/vendor.h"
+
+static const char *cops_prefix[] = { "+COPS:", NULL };
+static const char *cesq_prefix[] = { "+CESQ:", NULL };
+
+struct netmon_driver_data {
+   GAtChat *chat;
+};
+
+struct req_cb_data {
+   struct ofono_netmon *netmon;
+
+   ofono_netmon_cb_t cb;
+   void *data;
+
+   struct ofono_network_operator op;
+
+   int rxlev;  /* CESQ: Received Signal Strength Indication */
+   int ber;/* CESQ: Bit Error Rate */
+   int rscp;   /* CESQ: Received Signal Code Powe */
+   int rsrp;   /* CESQ: Reference Signal Received Power */
+   int ecn0;   /* CESQ: Received Energy Ratio */
+   int rsrq;   /* CESQ: Reference Signal Received Quality */
+};
+
+/*
+ * Returns the appropriate radio access technology.
+ *
+ * If we can not resolve to a specific radio access technolgy
+ * we return OFONO_NETMON_CELL_TYPE_GSM by default.
+ */
+static int ublox_map_radio_access_technology(int tech)
+{
+   switch (tech) {
+   case ACCESS_TECHNOLOGY_GSM:
+   case ACCESS_TECHNOLOGY_GSM_COMPACT:
+   return OFONO_NETMON_CELL_TYPE_GSM;
+   case ACCESS_TECHNOLOGY_UTRAN:
+   case ACCESS_TECHNOLOGY_UTRAN_HSDPA:
+   case ACCESS_TECHNOLOGY_UTRAN_HSUPA:
+   case ACCESS_TECHNOLOGY_UTRAN_HSDPA_HSUPA:
+   return OFONO_NETMON_CELL_TYPE_UMTS;
+   case ACCESS_TECHNOLOGY_EUTRAN:
+   return OFONO_NETMON_CELL_TYPE_LTE;
+   }
+
+   return OFONO_NETMON_CELL_TYPE_GSM;
+}
+
+static inline struct req_cb_data *req_cb_data_new0(void *cb, void *data, void 
*user)
+{
+   struct req_cb_data *ret = g_new0(struct req_cb_data, 1);
+   if (ret == NULL)
+   return NULL;
+
+   ret->cb = cb;
+   ret->data = data;
+   ret->netmon = user;
+   ret->rxlev = -1;
+   ret->ber = -1;
+   ret->rscp = -1;
+   ret->rsrp = -1;
+   ret->ecn0 = -1;
+   ret->rsrq = -1;
+
+   return ret;
+}
+
+static gboolean ublox_delayed_register(gpointer user_data)
+{
+   struct ofono_netmon *netmon = user_data;
+
+   ofono_netmon_register(netmon);
+
+   return FALSE;
+}
+
+static void ublox_netmon_finish_success(struct req_cb_data *cbd)
+{
+   struct ofono_netmon *nm = cbd->netmon;
+
+   ofono_netmon_serving_cell_notify(nm,
+cbd->op.tech,
+OFONO_NETMON_INFO_RXLEV, cbd->rxlev,
+OFONO_NETMON_INFO_BER, cbd->ber,
+OFONO_NETMON_INFO_RSCP, cbd->rscp,
+OFONO_NETMON_INFO_ECN0, cbd->ecn0,
+OFONO_NETMON_INFO_RSRQ, cbd->rsrq,
+OFONO_NETMON_INFO_RSRP, cbd->rsrp,
+OFONO_NETMON_INFO_INVALID);
+
+   CALLBACK_WITH_SUCCESS(cbd->cb, cbd->data);
+   g_free(cbd);
+}
+
+static void cesq_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+   enum cesq_ofono_netmon_info {
+   CESQ_RXLEV,
+   CESQ_BER,
+   CESQ_RSCP,
+   CESQ_ECN0,

Re: [PATCH 3/5] ubloxmodem: add the netmon driver

2016-11-30 Thread Djalal Harouni
Hi Denis,

On 29 November 2016 at 18:32, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
>
> On 11/25/2016 08:00 AM, dja...@endocode.com wrote:
>>
>> From: Djalal Harouni <dja...@endocode.com>
>>
>> This adds a netmon driver for ublox. The driver support both +COPS and
>> +CESQ commands to return the previously added ofono netmon types:
>>
>> RSCP: Received Signal Code Power
>> ECN0: Received Energy Ratio
>> RSRQ: Reference Signal Received Quality
>> RSRP: Reference Signal Received Power
>> OPERATOR: the operator
>> ---
>>   Makefile.am |   1 +
>>   drivers/ubloxmodem/netmon.c | 339
>> 
>>   2 files changed, 340 insertions(+)
>>   create mode 100644 drivers/ubloxmodem/netmon.c
>>
>> diff --git a/Makefile.am b/Makefile.am
>> index 3d7774b..07adeab 100644
>> --- a/Makefile.am
>> +++ b/Makefile.am
>> @@ -383,6 +383,7 @@ builtin_sources += drivers/atmodem/atutil.h \
>> drivers/ubloxmodem/ubloxmodem.h \
>> drivers/ubloxmodem/ubloxmodem.c \
>> drivers/ubloxmodem/gprs-context.c \
>> +   drivers/ubloxmodem/netmon.c \
>> drivers/ubloxmodem/lte.c
>>
>>
>> diff --git a/drivers/ubloxmodem/netmon.c b/drivers/ubloxmodem/netmon.c
>> new file mode 100644
>> index 000..6b9d74f
>> --- /dev/null
>> +++ b/drivers/ubloxmodem/netmon.c
>> @@ -0,0 +1,339 @@
>> +/*
>> + *
>> + *  oFono - Open Source Telephony
>> + *
>> + *  Copyright (C) 2016  EndoCode AG. All rights reserved.
>> + *
>> + *  This program is free software; you can redistribute it and/or modify
>> + *  it under the terms of the GNU General Public License version 2 as
>> + *  published by the Free Software Foundation.
>> + *
>> + *  This program is distributed in the hope that it will be useful,
>> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + *  GNU General Public License for more details.
>> + *
>> + *  You should have received a copy of the GNU General Public License
>> + *  along with this program; if not, write to the Free Software
>> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
>> USA
>> + *
>> + */
>> +
>> +#ifdef HAVE_CONFIG_H
>> +#include 
>> +#endif
>> +
>> +#define _GNU_SOURCE
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include 
>> +
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include "gatchat.h"
>> +#include "gatresult.h"
>> +
>> +#include "common.h"
>> +#include "netreg.h"
>> +#include "ubloxmodem.h"
>> +#include "drivers/atmodem/vendor.h"
>> +
>> +static const char *cops_prefix[] = { "+COPS:", NULL };
>> +static const char *cesq_prefix[] = { "+CESQ:", NULL };
>> +
>> +struct netmon_driver_data {
>> +   GAtChat *modem;
>> +   GAtChat *aux;
>> +};
>
>
> Why do you need both the modem and the aux port?  I only see you using the
> aux port.

Ok fixed in v2. we need only one channel.

>> +
>> +struct req_cb_data {
>> +   struct ofono_netmon *netmon;
>> +
>> +   ofono_netmon_cb_t cb;
>> +   void *data;
>> +
>> +   struct ofono_network_operator op;
>> +
>> +   int rxlev;  /* CESQ: Received Signal Strength Indication */
>> +   int ber;/* CESQ: Bit Error Rate */
>> +   int rscp;   /* CESQ: Received Signal Code Powe */
>> +   int rsrp;   /* CESQ: Reference Signal Received Power */
>> +   double ecn0;/* CESQ: Received Energy Ratio */
>> +   double rsrq;/* CESQ: Reference Signal Received Quality */
>
>
> Why are these doubles?

Fixed.


>
>> +};
>> +
>> +/*
>> + * Returns the appropriate radio access technology.
>> + *
>> + * If we can not resolve to a specific radio access technolgy
>> + * we return OFONO_NETMON_CELL_TYPE_GSM by default.
>> + */
>> +static int ublox_map_radio_access_technology(int tech)
>> +{
>> +   switch (tech) {
>> +   case ACCESS_TECHNOLOGY_GSM:
>> +   case ACCESS_TECHNOLOGY_GSM_COMPACT:
>> +   return OFONO_NETMON_CELL_TYPE_GSM;
>> +   case ACCE

Re: [PATCH 4/5] ubloxmodem: intialize and register the netmon driver

2016-11-30 Thread Djalal Harouni
On 29 November 2016 at 17:53, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
> On 11/25/2016 08:00 AM, dja...@endocode.com wrote:
>>
>> From: Djalal Harouni <dja...@endocode.com>
>>
>> This patch allows to intialize and register the ublox netmon driver.
>> ---
>>   drivers/ubloxmodem/ubloxmodem.c | 2 ++
>>   drivers/ubloxmodem/ubloxmodem.h | 3 +++
>>   plugins/ublox.c | 3 +++
>>   3 files changed, 8 insertions(+)
>>
>
> This patch isn't broken down properly.  See HACKING, 'Submitting patches'
> section.  Each top-level directory change should be in a separate patch.
> E.g. one patch for drivers/* and one patch for plugins/*.
>
> It might be easier to simply squash drivers/ubloxmodem/ubloxmodem.[ch]
> changes into patch 3.

Oups sorry about that. Hopefully fixed in v2.

> Regards,
> -Denis
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


Re: [PATCH 2/5] netmon: handle OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP|OPERATOR} in D-Bus

2016-11-30 Thread Djalal Harouni
Hi Denis,

On 29 November 2016 at 17:49, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
> On 11/25/2016 08:00 AM, dja...@endocode.com wrote:
>>
>> From: Djalal Harouni <dja...@endocode.com>
>>
>> Handle the previously added types in D-Bus.
>> ---
>>   src/netmon.c | 40 +++-
>>   1 file changed, 39 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/netmon.c b/src/netmon.c
>> index eb18b9c..c87980a 100644
>> --- a/src/netmon.c
>> +++ b/src/netmon.c
>> @@ -78,7 +78,8 @@ void ofono_netmon_serving_cell_notify(struct
>> ofono_netmon *netmon,
>> const char *technology = cell_type_to_tech_name(type);
>> char *mcc = NULL;
>> char *mnc = NULL;
>> -   int intval;
>> +   char *op = NULL;
>> +   int intval = -1;
>
>
> Why the initializer?  Our rule of thumb is not to initialize in order to let
> the compiler (hopefully) or valgrind catch instances of uninitialized
> variable use (e.g. bugs).

Ok dropped that one too, but in this case it does not matter, va_arg()
is undefined any way...

>
>> netmon->reply = dbus_message_new_method_return(netmon->pending);
>>
>> if (netmon->reply == NULL)
>> @@ -180,6 +181,43 @@ void ofono_netmon_serving_cell_notify(struct
>> ofono_netmon *netmon,
>> intval, uint8_t, DBUS_TYPE_BYTE);
>> break;
>>
>> +   case OFONO_NETMON_INFO_RSCP:
>> +   intval = va_arg(arglist, int);
>> +
>> +   CELL_INFO_DICT_APPEND(,
>> "ReceivedSignalCodePower",
>> +   intval, uint8_t, DBUS_TYPE_BYTE);
>> +   break;
>> +
>> +   case OFONO_NETMON_INFO_ECN0:
>> +   intval = va_arg(arglist, int);
>> +
>> +   CELL_INFO_DICT_APPEND(,
>> "ReceivedEnergyRatio",
>> +   intval, uint8_t, DBUS_TYPE_BYTE);
>> +   break;
>> +
>> +   case OFONO_NETMON_INFO_RSRQ:
>> +   intval = va_arg(arglist, int);
>> +
>> +   CELL_INFO_DICT_APPEND(,
>> "ReferenceSignalReceivedQuality",
>> +   intval, uint8_t, DBUS_TYPE_BYTE);
>> +   break;
>> +
>> +   case OFONO_NETMON_INFO_RSRP:
>> +   intval = va_arg(arglist, int);
>> +
>> +   CELL_INFO_DICT_APPEND(,
>> "ReferenceSignalReceivedPower",
>> +   intval, uint8_t, DBUS_TYPE_BYTE);
>> +   break;
>> +
>
>
> This looks fine, however there should be a patch documenting these and their
> respective value ranges inside doc/netmon-api.txt.

OK documented in netmonmonitor-api.txt of v2 of the patches. Thank you!

>> +   case OFONO_NETMON_INFO_OPERATOR:
>> +   op = va_arg(arglist, char *);
>> +
>> +   if (op && strlen(op))
>> +   ofono_dbus_dict_append(, "Operator",
>> +   DBUS_TYPE_STRING, );
>> +
>> +   break;
>> +
>> case OFONO_NETMON_INFO_INVALID:
>> break;
>> }
>>
>
> Regards,
> -Denis
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono


Re: [PATCH 1/5] netmon: add OFONO_NETMON_INFO_{RSCP|ECN0|RSRQ|RSRP|OPERATOR}

2016-11-30 Thread Djalal Harouni
Hi Denis,

On 29 November 2016 at 17:43, Denis Kenzior <denk...@gmail.com> wrote:
> Hi Djalal,
>
>
> On 11/25/2016 08:00 AM, dja...@endocode.com wrote:
>>
>> From: Djalal Harouni <dja...@endocode.com>
>>
>> Add more ofono netmon info types that will be served through the netmon
>> interface. The main user of this now will be the ublox modem.
>>
>> RSCP: Received Signal Code Power
>> ECN0: Received Energy Ratio
>> RSRQ: Reference Signal Received Quality
>> RSRP: Reference Signal Received Power
>> OPERATOR: the operator
>>
>> Patches using these types to follow.
>> ---
>>   include/netmon.h | 5 +
>>   1 file changed, 5 insertions(+)
>>
>> diff --git a/include/netmon.h b/include/netmon.h
>> index ec8a2e1..abde225 100644
>> --- a/include/netmon.h
>> +++ b/include/netmon.h
>> @@ -59,6 +59,11 @@ enum ofono_netmon_info {
>> OFONO_NETMON_INFO_RSSI, /* int */
>> OFONO_NETMON_INFO_TIMING_ADVANCE, /* int */
>> OFONO_NETMON_INFO_PSC, /* int */
>> +   OFONO_NETMON_INFO_RSCP, /* int */
>> +   OFONO_NETMON_INFO_ECN0, /* int */
>> +   OFONO_NETMON_INFO_RSRQ, /* int */
>> +   OFONO_NETMON_INFO_RSRP, /* int */
>> +   OFONO_NETMON_INFO_OPERATOR, /* char *, up to 24 digits */
>
>
> MCC & MNC are not enough?  This API is intended for various location
> services which hardly care about the text representation of the operator.
> They'd rather know the lac & ci, and possibly the mcc & mnc.
>
> I'm not sure if its worth including this as it is likely just coming from an
> MCCMNC database in the modem and this info is available via
> NetworkRegistration anyway.

Ok I dropped that one and will try to see how we can fix this at our end.

>> OFONO_NETMON_INFO_INVALID,
>>   };
>>
>>
>
> Regards,
> -Denis
___
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono