From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis <frederic.danis@linux.intel.com>
To: ofono@ofono.org
Subject: [PATCH 1/4] emulator: add network info support for HFP
Date: Fri, 18 Feb 2011 17:34:05 +0100 [thread overview]
Message-ID: <1298046848-24622-2-git-send-email-frederic.danis@linux.intel.com> (raw)
In-Reply-To: <1298046848-24622-1-git-send-email-frederic.danis@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 5105 bytes --]
Add CIND and CIEV support related to network info
---
src/emulator.c | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 129 insertions(+), 0 deletions(-)
diff --git a/src/emulator.c b/src/emulator.c
index 101b33d..d8cd32f 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -28,12 +28,18 @@
#include <glib.h>
#include "ofono.h"
+#include "common.h"
#include "gatserver.h"
struct ofono_emulator {
struct ofono_atom *atom;
enum ofono_emulator_type type;
GAtServer *server;
+ struct ofono_netreg *netreg;
+ unsigned int netreg_watch;
+ unsigned int status_watch;
+ gboolean net_registered;
+ gboolean roaming;
};
static void emulator_debug(const char *str, void *data)
@@ -41,6 +47,99 @@ static void emulator_debug(const char *str, void *data)
ofono_info("%s: %s\n", (char *)data, str);
}
+static void net_status_changed(int status, int lac, int ci, int tech,
+ const char *mcc, const char *mnc,
+ void *data)
+{
+ struct ofono_emulator *em = data;
+ gboolean old_registered = em->net_registered;
+ gboolean old_roaming = em->roaming;
+ char buf[20];
+
+ DBG("%d", status);
+
+ switch (status) {
+ case NETWORK_REGISTRATION_STATUS_REGISTERED:
+ em->net_registered = 1;
+ em->roaming = 0;
+ break;
+ case NETWORK_REGISTRATION_STATUS_ROAMING:
+ em->net_registered = 1;
+ em->roaming = 1;
+ break;
+ default:
+ em->net_registered = 0;
+ em->roaming = 0;
+ break;
+ }
+
+ if (em->net_registered != old_registered) {
+ sprintf(buf, "+CIEV: 1,%d", em->net_registered);
+ g_at_server_send_info(em->server, buf, TRUE);
+ }
+
+ if (em->roaming != old_roaming) {
+ sprintf(buf, "+CIEV: 6,%d", em->roaming);
+ g_at_server_send_info(em->server, buf, TRUE);
+ }
+}
+
+static void netreg_watch(struct ofono_atom *atom,
+ enum ofono_atom_watch_condition cond,
+ void *data)
+{
+ struct ofono_emulator *em = data;
+ int status;
+
+ DBG("%p %sregistered", atom, cond ? "un" : "");
+
+ if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) {
+ em->status_watch = 0;
+ net_status_changed(NETWORK_REGISTRATION_STATUS_NOT_REGISTERED,
+ 0, 0, 0, NULL, NULL, em);
+
+ em->netreg = NULL;
+
+ return;
+ }
+
+ em->netreg = __ofono_atom_get_data(atom);
+
+ status = ofono_netreg_get_status(em->netreg);
+ net_status_changed(status, 0, 0, 0, NULL, NULL, em);
+
+ em->status_watch = __ofono_netreg_add_status_watch(em->netreg,
+ net_status_changed, em, NULL);
+}
+
+static void cind_cb(GAtServer *server, GAtServerRequestType type,
+ GAtResult *result, gpointer user_data)
+{
+ struct ofono_emulator *em = user_data;
+ char buf[30];
+
+ switch (type) {
+ case G_AT_SERVER_REQUEST_TYPE_QUERY:
+ sprintf(buf, "+CIND: %d,0,0,0,0,%d,0", em->net_registered,
+ em->roaming);
+ g_at_server_send_info(em->server, buf, FALSE);
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
+ break;
+
+ case G_AT_SERVER_REQUEST_TYPE_SUPPORT:
+ g_at_server_send_info(server, "+CIND: (\"service\",(0,1)),"
+ "(\"call\",(0,1)),(\"callsetup\",(0-3)),"
+ "(\"callheld\",(0-2)),(\"signal\",(0-5)),"
+ "(\"roam\",(0,1)),(\"battchg\",(0-5))", FALSE);
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
+ break;
+
+ default:
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
+ break;
+ }
+}
+
static void emulator_disconnect(gpointer user_data)
{
struct ofono_emulator *em = user_data;
@@ -53,9 +152,19 @@ static void emulator_disconnect(gpointer user_data)
static void emulator_unregister(struct ofono_atom *atom)
{
struct ofono_emulator *em = __ofono_atom_get_data(atom);
+ struct ofono_modem *modem;
DBG("%p", em);
+ if (em->netreg) {
+ if (em->status_watch)
+ __ofono_netreg_remove_status_watch(em->netreg,
+ em->status_watch);
+
+ modem = __ofono_atom_get_modem(em->atom);
+ __ofono_modem_remove_atom_watch(modem, em->netreg_watch);
+ }
+
g_at_server_unref(em->server);
em->server = NULL;
}
@@ -63,6 +172,8 @@ static void emulator_unregister(struct ofono_atom *atom)
void ofono_emulator_register(struct ofono_emulator *em, int fd)
{
GIOChannel *io;
+ struct ofono_modem *modem;
+ struct ofono_atom *netreg_atom;
DBG("%p, %d", em, fd);
@@ -81,6 +192,24 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd)
g_at_server_set_disconnect_function(em->server,
emulator_disconnect, em);
+ if (em->type == OFONO_EMULATOR_TYPE_HFP) {
+ g_at_server_register(em->server, "+CIND", cind_cb, em, NULL);
+
+ modem = __ofono_atom_get_modem(em->atom);
+
+ em->netreg_watch = __ofono_modem_add_atom_watch(modem,
+ OFONO_ATOM_TYPE_NETREG,
+ netreg_watch, em, NULL);
+
+ netreg_atom = __ofono_modem_find_atom(modem,
+ OFONO_ATOM_TYPE_NETREG);
+
+ if (netreg_atom && __ofono_atom_get_registered(netreg_atom))
+ netreg_watch(netreg_atom,
+ OFONO_ATOM_WATCH_CONDITION_REGISTERED,
+ em);
+ }
+
__ofono_atom_register(em->atom, emulator_unregister);
}
--
1.7.1
next prev parent reply other threads:[~2011-02-18 16:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-18 16:34 [PATCH 0/4] bluetooth: add CIND and CIEV support for HFP AG =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-02-18 16:34 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis [this message]
2011-02-18 16:34 ` [PATCH 2/4] netreg: add get signal strength API =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-02-18 16:34 ` [PATCH 3/4] netreg: add support for signal strength get and watch APIs =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-02-18 16:34 ` [PATCH 4/4] emulator: add network signal support for HFP =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1298046848-24622-2-git-send-email-frederic.danis@linux.intel.com \
--to=frederic.danis@linux.intel.com \
--cc=ofono@ofono.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.