From: Lars Poeschel <[email protected]>

The Quectel EC21 modem does not understand the AT+CPSB command, so
aquire the current packet switched bearer from CGREG URC.
---
 drivers/atmodem/gprs.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/drivers/atmodem/gprs.c b/drivers/atmodem/gprs.c
index b637f733..5583d6fa 100644
--- a/drivers/atmodem/gprs.c
+++ b/drivers/atmodem/gprs.c
@@ -40,6 +40,7 @@
 #include "gatresult.h"
 
 #include "atmodem.h"
+#include "common.h"
 #include "vendor.h"
 
 #define MAX_CONTEXTS 255
@@ -98,6 +99,29 @@ static void list_contexts_data_unref(gpointer user_data)
        g_free(ld);
 }
 
+static int act_to_bearer(int act)
+{
+       switch (act) {
+               case 0:
+               case 1:
+                       return PACKET_BEARER_GPRS;
+               case 2:
+                       return PACKET_BEARER_UMTS;
+               case 3:
+                       return PACKET_BEARER_EGPRS;
+               case 4:
+                       return PACKET_BEARER_HSDPA;
+               case 5:
+                       return PACKET_BEARER_HSUPA;
+               case 6:
+                       return PACKET_BEARER_HSUPA_HSDPA;
+               case 7:
+                       return PACKET_BEARER_EPS;
+               default:
+                       return PACKET_BEARER_NONE;
+       }
+};
+
 static void at_cgatt_cb(gboolean ok, GAtResult *result, gpointer user_data)
 {
        struct cb_data *cbd = user_data;
@@ -342,11 +366,11 @@ static void at_gprs_list_active_contexts(struct 
ofono_gprs *gprs,
 static void cgreg_notify(GAtResult *result, gpointer user_data)
 {
        struct ofono_gprs *gprs = user_data;
-       int status;
+       int status, tech;
        struct gprs_data *gd = ofono_gprs_get_data(gprs);
 
        if (at_util_parse_reg_unsolicited(result, "+CGREG:", &status,
-                               NULL, NULL, NULL, gd->vendor) == FALSE)
+                               NULL, NULL, &tech, gd->vendor) == FALSE)
                return;
 
        /*
@@ -372,6 +396,8 @@ static void cgreg_notify(GAtResult *result, gpointer 
user_data)
        }
 
        ofono_gprs_status_notify(gprs, status);
+       if (gd->vendor == OFONO_VENDOR_QUECTEL_EC2X)
+               ofono_gprs_bearer_notify(gprs, act_to_bearer(tech));
 }
 
 static void cgev_notify(GAtResult *result, gpointer user_data)
@@ -624,6 +650,8 @@ static void gprs_initialized(gboolean ok, GAtResult 
*result, gpointer user_data)
                g_at_chat_send(gd->chat, "AT#PSNT=1", none_prefix,
                                                NULL, NULL, NULL);
                break;
+       case OFONO_VENDOR_QUECTEL_EC2X:
+               break;
        default:
                g_at_chat_register(gd->chat, "+CPSB:", cpsb_notify,
                                                FALSE, gprs, NULL);
-- 
2.27.0
_______________________________________________
ofono mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to