---
drivers/cdmamodem/connman.c | 45 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/drivers/cdmamodem/connman.c b/drivers/cdmamodem/connman.c
index ec17e96..b5f3d29 100644
--- a/drivers/cdmamodem/connman.c
+++ b/drivers/cdmamodem/connman.c
@@ -41,6 +41,7 @@
#include "gatppp.h"
#include "cdmamodem.h"
+#include "drivers/atmodem/vendor.h"
#define TUN_SYSFS_DIR "/sys/devices/virtual/misc/tun"
@@ -66,6 +67,7 @@ struct connman_data {
ofono_cdma_connman_up_cb_t up_cb; /* Up callback */
};
void *cb_data; /* Callback data */
+ unsigned int vendor;
};
static void ppp_debug(const char *str, void *data)
@@ -220,9 +222,42 @@ static void cdma_connman_deactivate(struct
ofono_cdma_connman *cm,
g_at_ppp_shutdown(cd->ppp);
}
+static void huawei_mode_notify(GAtResult *result, gpointer user_data)
+{
+ struct ofono_cdma_connman *cm = user_data;
+ GAtResultIter iter;
+ int mode;
+ gint bearer;
+
+ g_at_result_iter_init(&iter, result);
+
+ if (!g_at_result_iter_next(&iter, "^MODE:"))
+ return;
+
+ if (!g_at_result_iter_next_number(&iter, &mode))
+ return;
+
+ switch (mode) {
+ case 2:
+ bearer = 1; /* CDMA 1x mode */
+ break;
+ case 4:
+ bearer = 2; /* CDMA EV-DO */
+ break;
+ case 8:
+ bearer = 3; /* CDMA SVDO */
+ default:
+ bearer = 0;
+ break;
+ }
+
+ ofono_cdma_connman_bearer_notify(cm, bearer);
+}
+
static void at_c0_cb(gboolean ok, GAtResult *result, gpointer user_data)
{
struct ofono_cdma_connman *cm = user_data;
+ struct connman_data *cd = ofono_cdma_connman_get_data(cm);
DBG("ok %d", ok);
@@ -232,6 +267,15 @@ static void at_c0_cb(gboolean ok, GAtResult *result,
gpointer user_data)
return;
}
+ switch (cd->vendor) {
+ case OFONO_VENDOR_HUAWEI:
+ g_at_chat_register(cd->chat, "^MODE:", huawei_mode_notify,
+ FALSE, cm, NULL);
+ break;
+ default:
+ break;
+ }
+
ofono_cdma_connman_register(cm);
}
@@ -254,6 +298,7 @@ static int cdma_connman_probe(struct ofono_cdma_connman *cm,
return -ENOMEM;
cd->chat = g_at_chat_clone(chat);
+ cd->vendor = vendor;
ofono_cdma_connman_set_data(cm, cd);
--
1.7.1
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono