* [PATCH_v2 0/6] CDMA Network registration
@ 2011-11-02 10:37 Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 1/6] dbus: Add new D-Bus error message NotRegistered Guillaume Zajac
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:37 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 950 bytes --]
Hi all,
Change log from v1:
- create new D-Bus message error whenever modem is not registered to
the network
- manage roaming case.
- notify cdma-connman atom when data connection is lost.
- remove cdma-netreg status watches.
Kind regards,
Guillaume
Guillaume Zajac (6):
dbus: Add new D-Bus error message NotRegistered
doc: Add RoamingAllowed property
cdma-connman: Rely on roaming and cdma-netreg status to enable data
call
cdma-connman: Add public api to notify connection is lost
cdma-connman: Add public api definition
cdmamodem: Notify when connection is lost
doc/cdma-connman-api.txt | 8 ++++
drivers/cdmamodem/connman.c | 2 +-
include/cdma-connman.h | 2 +
src/cdma-connman.c | 83 +++++++++++++++++++++++++++++++++++++++++--
src/dbus.c | 7 ++++
src/ofono.h | 1 +
6 files changed, 99 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH_v2 1/6] dbus: Add new D-Bus error message NotRegistered
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
@ 2011-11-02 10:37 ` Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 2/6] doc: Add RoamingAllowed property Guillaume Zajac
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:37 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1315 bytes --]
---
src/dbus.c | 7 +++++++
src/ofono.h | 1 +
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/src/dbus.c b/src/dbus.c
index a96b595..be2833d 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -349,6 +349,13 @@ DBusMessage *__ofono_error_attach_in_progress(DBusMessage *msg)
"GPRS Attach is in progress");
}
+DBusMessage *__ofono_error_not_registered(DBusMessage *msg)
+{
+ return g_dbus_create_error(msg,
+ OFONO_ERROR_INTERFACE ".NotRegistered",
+ "CDMA modem is not registered to the network");
+}
+
DBusMessage *__ofono_error_canceled(DBusMessage *msg)
{
return g_dbus_create_error(msg, OFONO_ERROR_INTERFACE ".Canceled",
diff --git a/src/ofono.h b/src/ofono.h
index bd45560..bfb534d 100644
--- a/src/ofono.h
+++ b/src/ofono.h
@@ -59,6 +59,7 @@ DBusMessage *__ofono_error_sim_not_ready(DBusMessage *msg);
DBusMessage *__ofono_error_in_use(DBusMessage *msg);
DBusMessage *__ofono_error_not_attached(DBusMessage *msg);
DBusMessage *__ofono_error_attach_in_progress(DBusMessage *msg);
+DBusMessage *__ofono_error_not_registered(DBusMessage *msg);
DBusMessage *__ofono_error_canceled(DBusMessage *msg);
DBusMessage *__ofono_error_access_denied(DBusMessage *msg);
DBusMessage *__ofono_error_emergency_active(DBusMessage *msg);
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH_v2 2/6] doc: Add RoamingAllowed property
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 1/6] dbus: Add new D-Bus error message NotRegistered Guillaume Zajac
@ 2011-11-02 10:37 ` Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call Guillaume Zajac
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:37 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 848 bytes --]
---
doc/cdma-connman-api.txt | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/doc/cdma-connman-api.txt b/doc/cdma-connman-api.txt
index 48699a3..e4d3d2f 100644
--- a/doc/cdma-connman-api.txt
+++ b/doc/cdma-connman-api.txt
@@ -35,6 +35,14 @@ Properties boolean Powered [readwrite]
Contains whether the connection is dormant. Will
always be false if the connection is not powered.
+ boolean RoamingAllowed [readwrite]
+
+ Contains whether data roaming is allowed. In the off
+ setting, if the packet radio registration state
+ indicates that the modem is roaming, oFono will
+ automatically disable connection and no further
+ connection establishment will be possible.
+
string Username [readwrite]
Holds the username to be used for authentication
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 1/6] dbus: Add new D-Bus error message NotRegistered Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 2/6] doc: Add RoamingAllowed property Guillaume Zajac
@ 2011-11-02 10:37 ` Guillaume Zajac
2011-11-02 15:27 ` Denis Kenzior
2011-11-02 10:37 ` [PATCH_v2 4/6] cdma-connman: Add public api to notify connection is lost Guillaume Zajac
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:37 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 4693 bytes --]
---
src/cdma-connman.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 62 insertions(+), 3 deletions(-)
diff --git a/src/cdma-connman.c b/src/cdma-connman.c
index db8f6c5..42dcca2 100644
--- a/src/cdma-connman.c
+++ b/src/cdma-connman.c
@@ -52,8 +52,11 @@ struct cdma_connman_settings {
struct ofono_cdma_connman {
ofono_bool_t powered;
ofono_bool_t dormant;
+ ofono_bool_t roaming_allowed;
struct cdma_connman_settings *settings;
DBusMessage *pending;
+ struct ofono_cdma_netreg *cdma_netreg;
+ unsigned int cdma_netreg_watch;
const struct ofono_cdma_connman_driver *driver;
void *driver_data;
struct ofono_atom *atom;
@@ -338,6 +341,17 @@ static void cdma_connman_settings_append_properties(
dbus_message_iter_close_container(dict, &entry);
}
+ofono_bool_t cdma_connman_netreg_update(struct ofono_cdma_connman *cm)
+{
+ ofono_bool_t registered;
+ int status = ofono_cdma_netreg_get_status(cm->cdma_netreg);
+
+ registered = status == NETWORK_REGISTRATION_STATUS_REGISTERED;
+
+ return registered || (cm->roaming_allowed &&
+ status == NETWORK_REGISTRATION_STATUS_ROAMING);
+}
+
static DBusMessage *cdma_connman_get_properties(DBusConnection *conn,
DBusMessage *msg, void *data)
{
@@ -365,6 +379,10 @@ static DBusMessage *cdma_connman_get_properties(DBusConnection *conn,
value = cm->dormant;
ofono_dbus_dict_append(&dict, "Dormant", DBUS_TYPE_BOOLEAN, &value);
+ value = cm->roaming_allowed;
+ ofono_dbus_dict_append(&dict, "RoamingAllowed",
+ DBUS_TYPE_BOOLEAN, &value);
+
if (cm->settings)
cdma_connman_settings_append_properties(cm, &dict);
@@ -450,7 +468,23 @@ static DBusMessage *cdma_connman_set_property(DBusConnection *conn,
dbus_message_iter_recurse(&iter, &var);
- if (!strcmp(property, "Powered")) {
+ if (!strcmp(property, "RoamingAllowed")) {
+ if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
+ return __ofono_error_invalid_args(msg);
+
+ dbus_message_iter_get_basic(&var, &value);
+
+ if (cm->roaming_allowed == (ofono_bool_t) value)
+ return dbus_message_new_method_return(msg);
+
+ cm->roaming_allowed = value;
+
+ if (cdma_connman_netreg_update(cm) == FALSE &&
+ cm->powered == TRUE)
+ cm->driver->deactivate(cm, deactivate_callback, cm);
+
+ return NULL;
+ } if (!strcmp(property, "Powered")) {
if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
return __ofono_error_invalid_args(msg);
@@ -463,9 +497,11 @@ static DBusMessage *cdma_connman_set_property(DBusConnection *conn,
cm->driver->deactivate == NULL)
return __ofono_error_not_implemented(msg);
+ if (cdma_connman_netreg_update(cm) == FALSE)
+ return __ofono_error_not_registered(msg);
+
cm->pending = dbus_message_ref(msg);
- /* TODO: add logic to support CDMA Network Registration */
if (value)
cm->driver->activate(cm, cm->username, cm->password,
activate_callback, cm);
@@ -529,11 +565,18 @@ void ofono_cdma_connman_driver_unregister(
static void cdma_connman_unregister(struct ofono_atom *atom)
{
DBusConnection *conn = ofono_dbus_get_connection();
+ struct ofono_cdma_connman *cm = __ofono_atom_get_data(atom);
struct ofono_modem *modem = __ofono_atom_get_modem(atom);
const char *path = __ofono_atom_get_path(atom);
DBG("");
+ if (cm->cdma_netreg_watch) {
+ __ofono_modem_remove_atom_watch(modem, cm->cdma_netreg_watch);
+ cm->cdma_netreg_watch = 0;
+ cm->cdma_netreg = NULL;
+ }
+
g_dbus_unregister_interface(conn, path,
OFONO_CDMA_CONNECTION_MANAGER_INTERFACE);
ofono_modem_remove_interface(modem,
@@ -593,6 +636,20 @@ struct ofono_cdma_connman *ofono_cdma_connman_create(
return cm;
}
+static void cdma_netreg_watch(struct ofono_atom *atom,
+ enum ofono_atom_watch_condition cond,
+ void *data)
+{
+ struct ofono_cdma_connman *cm = data;
+
+ if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) {
+ cm->cdma_netreg = NULL;
+ return;
+ }
+
+ cm->cdma_netreg = __ofono_atom_get_data(atom);
+}
+
void ofono_cdma_connman_register(struct ofono_cdma_connman *cm)
{
DBusConnection *conn = ofono_dbus_get_connection();
@@ -613,7 +670,9 @@ void ofono_cdma_connman_register(struct ofono_cdma_connman *cm)
ofono_modem_add_interface(modem,
OFONO_CDMA_CONNECTION_MANAGER_INTERFACE);
- /* TODO: add watch to support CDMA Network Registration atom */
+ cm->cdma_netreg_watch = __ofono_modem_add_atom_watch(modem,
+ OFONO_ATOM_TYPE_CDMA_NETREG,
+ cdma_netreg_watch, cm, NULL);
__ofono_atom_register(cm->atom, cdma_connman_unregister);
}
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH_v2 4/6] cdma-connman: Add public api to notify connection is lost
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
` (2 preceding siblings ...)
2011-11-02 10:37 ` [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call Guillaume Zajac
@ 2011-11-02 10:37 ` Guillaume Zajac
2011-11-02 15:33 ` Denis Kenzior
2011-11-02 10:38 ` [PATCH_v2 5/6] cdma-connman: Add public api definition Guillaume Zajac
2011-11-02 10:38 ` [PATCH_v2 6/6] cdmamodem: Notify when connection is lost Guillaume Zajac
5 siblings, 1 reply; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:37 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 610 bytes --]
---
include/cdma-connman.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/include/cdma-connman.h b/include/cdma-connman.h
index b8efe0b..7a115bf 100644
--- a/include/cdma-connman.h
+++ b/include/cdma-connman.h
@@ -64,6 +64,8 @@ int ofono_cdma_connman_driver_register(
void ofono_cdma_connman_driver_unregister(
const struct ofono_cdma_connman_driver *d);
+void ofono_cdma_connman_deactivated(struct ofono_cdma_connman *cm);
+
struct ofono_cdma_connman *ofono_cdma_connman_create(
struct ofono_modem *modem,
unsigned int vendor,
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH_v2 5/6] cdma-connman: Add public api definition
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
` (3 preceding siblings ...)
2011-11-02 10:37 ` [PATCH_v2 4/6] cdma-connman: Add public api to notify connection is lost Guillaume Zajac
@ 2011-11-02 10:38 ` Guillaume Zajac
2011-11-02 15:32 ` Denis Kenzior
2011-11-02 10:38 ` [PATCH_v2 6/6] cdmamodem: Notify when connection is lost Guillaume Zajac
5 siblings, 1 reply; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:38 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 962 bytes --]
---
src/cdma-connman.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/src/cdma-connman.c b/src/cdma-connman.c
index 42dcca2..f88353a 100644
--- a/src/cdma-connman.c
+++ b/src/cdma-connman.c
@@ -562,6 +562,24 @@ void ofono_cdma_connman_driver_unregister(
g_drivers = g_slist_remove(g_drivers, (void *) d);
}
+void ofono_cdma_connman_deactivated(struct ofono_cdma_connman *cm)
+{
+ DBusConnection *conn = ofono_dbus_get_connection();
+ const char *path;
+ dbus_bool_t value;
+
+ if (cm == NULL)
+ return;
+
+ cdma_connman_settings_reset(cm);
+ value = FALSE;
+ path = __ofono_atom_get_path(cm->atom);
+
+ ofono_dbus_signal_property_changed(conn, path,
+ OFONO_CDMA_CONNECTION_MANAGER_INTERFACE,
+ "Powered", DBUS_TYPE_BOOLEAN, &value);
+}
+
static void cdma_connman_unregister(struct ofono_atom *atom)
{
DBusConnection *conn = ofono_dbus_get_connection();
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH_v2 6/6] cdmamodem: Notify when connection is lost
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
` (4 preceding siblings ...)
2011-11-02 10:38 ` [PATCH_v2 5/6] cdma-connman: Add public api definition Guillaume Zajac
@ 2011-11-02 10:38 ` Guillaume Zajac
5 siblings, 0 replies; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-02 10:38 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 574 bytes --]
---
drivers/cdmamodem/connman.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/cdmamodem/connman.c b/drivers/cdmamodem/connman.c
index 49f60ac..ec17e96 100644
--- a/drivers/cdmamodem/connman.c
+++ b/drivers/cdmamodem/connman.c
@@ -116,7 +116,7 @@ static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data)
CALLBACK_WITH_SUCCESS(cd->down_cb, cd->cb_data);
break;
default:
- /* TODO: Handle network initiated disconnection */
+ ofono_cdma_connman_deactivated(cm);
break;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call
2011-11-02 10:37 ` [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call Guillaume Zajac
@ 2011-11-02 15:27 ` Denis Kenzior
2011-11-04 14:42 ` Guillaume Zajac
0 siblings, 1 reply; 12+ messages in thread
From: Denis Kenzior @ 2011-11-02 15:27 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 5493 bytes --]
Hi Guillaume,
On 11/02/2011 05:37 AM, Guillaume Zajac wrote:
> ---
> src/cdma-connman.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 62 insertions(+), 3 deletions(-)
>
> diff --git a/src/cdma-connman.c b/src/cdma-connman.c
> index db8f6c5..42dcca2 100644
> --- a/src/cdma-connman.c
> +++ b/src/cdma-connman.c
> @@ -52,8 +52,11 @@ struct cdma_connman_settings {
> struct ofono_cdma_connman {
> ofono_bool_t powered;
> ofono_bool_t dormant;
> + ofono_bool_t roaming_allowed;
> struct cdma_connman_settings *settings;
> DBusMessage *pending;
> + struct ofono_cdma_netreg *cdma_netreg;
> + unsigned int cdma_netreg_watch;
> const struct ofono_cdma_connman_driver *driver;
> void *driver_data;
> struct ofono_atom *atom;
> @@ -338,6 +341,17 @@ static void cdma_connman_settings_append_properties(
> dbus_message_iter_close_container(dict, &entry);
> }
>
> +ofono_bool_t cdma_connman_netreg_update(struct ofono_cdma_connman *cm)
> +{
I think this function should be named a bit better. Wouldn't
is_registered be clearer?
> + ofono_bool_t registered;
> + int status = ofono_cdma_netreg_get_status(cm->cdma_netreg);
> +
> + registered = status == NETWORK_REGISTRATION_STATUS_REGISTERED;
> +
> + return registered || (cm->roaming_allowed &&
> + status == NETWORK_REGISTRATION_STATUS_ROAMING);
You seem to be doing quite a bit of work to accomplish your goal. If
you use __ofono_modem_find_atom then you can drop all the atom watch
bits and make this implementation way easier.
> +}
> +
> static DBusMessage *cdma_connman_get_properties(DBusConnection *conn,
> DBusMessage *msg, void *data)
> {
> @@ -365,6 +379,10 @@ static DBusMessage *cdma_connman_get_properties(DBusConnection *conn,
> value = cm->dormant;
> ofono_dbus_dict_append(&dict, "Dormant", DBUS_TYPE_BOOLEAN, &value);
>
> + value = cm->roaming_allowed;
> + ofono_dbus_dict_append(&dict, "RoamingAllowed",
> + DBUS_TYPE_BOOLEAN, &value);
> +
> if (cm->settings)
> cdma_connman_settings_append_properties(cm, &dict);
>
> @@ -450,7 +468,23 @@ static DBusMessage *cdma_connman_set_property(DBusConnection *conn,
>
> dbus_message_iter_recurse(&iter, &var);
>
> - if (!strcmp(property, "Powered")) {
> + if (!strcmp(property, "RoamingAllowed")) {
> + if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
> + return __ofono_error_invalid_args(msg);
> +
> + dbus_message_iter_get_basic(&var, &value);
> +
> + if (cm->roaming_allowed == (ofono_bool_t) value)
> + return dbus_message_new_method_return(msg);
> +
> + cm->roaming_allowed = value;
> +
> + if (cdma_connman_netreg_update(cm) == FALSE &&
> + cm->powered == TRUE)
> + cm->driver->deactivate(cm, deactivate_callback, cm);
> +
Can you please put the RoamingAllowed details in a separate patch
(preferably among the last in the series), this one might need to be
thought about some more.
> + return NULL;
> + } if (!strcmp(property, "Powered")) {
> if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
> return __ofono_error_invalid_args(msg);
>
> @@ -463,9 +497,11 @@ static DBusMessage *cdma_connman_set_property(DBusConnection *conn,
> cm->driver->deactivate == NULL)
> return __ofono_error_not_implemented(msg);
>
> + if (cdma_connman_netreg_update(cm) == FALSE)
> + return __ofono_error_not_registered(msg);
> +
> cm->pending = dbus_message_ref(msg);
>
> - /* TODO: add logic to support CDMA Network Registration */
> if (value)
> cm->driver->activate(cm, cm->username, cm->password,
> activate_callback, cm);
> @@ -529,11 +565,18 @@ void ofono_cdma_connman_driver_unregister(
> static void cdma_connman_unregister(struct ofono_atom *atom)
> {
> DBusConnection *conn = ofono_dbus_get_connection();
> + struct ofono_cdma_connman *cm = __ofono_atom_get_data(atom);
> struct ofono_modem *modem = __ofono_atom_get_modem(atom);
> const char *path = __ofono_atom_get_path(atom);
>
> DBG("");
>
> + if (cm->cdma_netreg_watch) {
> + __ofono_modem_remove_atom_watch(modem, cm->cdma_netreg_watch);
> + cm->cdma_netreg_watch = 0;
> + cm->cdma_netreg = NULL;
> + }
> +
> g_dbus_unregister_interface(conn, path,
> OFONO_CDMA_CONNECTION_MANAGER_INTERFACE);
> ofono_modem_remove_interface(modem,
> @@ -593,6 +636,20 @@ struct ofono_cdma_connman *ofono_cdma_connman_create(
> return cm;
> }
>
> +static void cdma_netreg_watch(struct ofono_atom *atom,
> + enum ofono_atom_watch_condition cond,
> + void *data)
> +{
> + struct ofono_cdma_connman *cm = data;
> +
> + if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) {
> + cm->cdma_netreg = NULL;
> + return;
> + }
> +
> + cm->cdma_netreg = __ofono_atom_get_data(atom);
> +}
> +
> void ofono_cdma_connman_register(struct ofono_cdma_connman *cm)
> {
> DBusConnection *conn = ofono_dbus_get_connection();
> @@ -613,7 +670,9 @@ void ofono_cdma_connman_register(struct ofono_cdma_connman *cm)
> ofono_modem_add_interface(modem,
> OFONO_CDMA_CONNECTION_MANAGER_INTERFACE);
>
> - /* TODO: add watch to support CDMA Network Registration atom */
> + cm->cdma_netreg_watch = __ofono_modem_add_atom_watch(modem,
> + OFONO_ATOM_TYPE_CDMA_NETREG,
> + cdma_netreg_watch, cm, NULL);
>
> __ofono_atom_register(cm->atom, cdma_connman_unregister);
> }
Regards,
-Denis
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH_v2 5/6] cdma-connman: Add public api definition
2011-11-02 10:38 ` [PATCH_v2 5/6] cdma-connman: Add public api definition Guillaume Zajac
@ 2011-11-02 15:32 ` Denis Kenzior
2011-11-04 14:57 ` Guillaume Zajac
0 siblings, 1 reply; 12+ messages in thread
From: Denis Kenzior @ 2011-11-02 15:32 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1158 bytes --]
Hi Guillaume,
On 11/02/2011 05:38 AM, Guillaume Zajac wrote:
> ---
> src/cdma-connman.c | 18 ++++++++++++++++++
> 1 files changed, 18 insertions(+), 0 deletions(-)
>
> diff --git a/src/cdma-connman.c b/src/cdma-connman.c
> index 42dcca2..f88353a 100644
> --- a/src/cdma-connman.c
> +++ b/src/cdma-connman.c
> @@ -562,6 +562,24 @@ void ofono_cdma_connman_driver_unregister(
> g_drivers = g_slist_remove(g_drivers, (void *) d);
> }
>
> +void ofono_cdma_connman_deactivated(struct ofono_cdma_connman *cm)
> +{
> + DBusConnection *conn = ofono_dbus_get_connection();
> + const char *path;
> + dbus_bool_t value;
> +
> + if (cm == NULL)
> + return;
> +
> + cdma_connman_settings_reset(cm);
> + value = FALSE;
> + path = __ofono_atom_get_path(cm->atom);
Don't you also want to reset cm->powered accordingly?
> +
> + ofono_dbus_signal_property_changed(conn, path,
> + OFONO_CDMA_CONNECTION_MANAGER_INTERFACE,
> + "Powered", DBUS_TYPE_BOOLEAN, &value);
> +}
> +
> static void cdma_connman_unregister(struct ofono_atom *atom)
> {
> DBusConnection *conn = ofono_dbus_get_connection();
Regards,
-Denis
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH_v2 4/6] cdma-connman: Add public api to notify connection is lost
2011-11-02 10:37 ` [PATCH_v2 4/6] cdma-connman: Add public api to notify connection is lost Guillaume Zajac
@ 2011-11-02 15:33 ` Denis Kenzior
0 siblings, 0 replies; 12+ messages in thread
From: Denis Kenzior @ 2011-11-02 15:33 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 750 bytes --]
Hi Guillaume,
On 11/02/2011 05:37 AM, Guillaume Zajac wrote:
> ---
> include/cdma-connman.h | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/include/cdma-connman.h b/include/cdma-connman.h
> index b8efe0b..7a115bf 100644
> --- a/include/cdma-connman.h
> +++ b/include/cdma-connman.h
> @@ -64,6 +64,8 @@ int ofono_cdma_connman_driver_register(
> void ofono_cdma_connman_driver_unregister(
> const struct ofono_cdma_connman_driver *d);
>
> +void ofono_cdma_connman_deactivated(struct ofono_cdma_connman *cm);
> +
> struct ofono_cdma_connman *ofono_cdma_connman_create(
> struct ofono_modem *modem,
> unsigned int vendor,
Patch has been applied, thanks.
Regards,
-Denis
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call
2011-11-02 15:27 ` Denis Kenzior
@ 2011-11-04 14:42 ` Guillaume Zajac
0 siblings, 0 replies; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-04 14:42 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 5867 bytes --]
Hi Denis,
On 02/11/2011 16:27, Denis Kenzior wrote:
> Hi Guillaume,
>
> On 11/02/2011 05:37 AM, Guillaume Zajac wrote:
>> ---
>> src/cdma-connman.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++--
>> 1 files changed, 62 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/cdma-connman.c b/src/cdma-connman.c
>> index db8f6c5..42dcca2 100644
>> --- a/src/cdma-connman.c
>> +++ b/src/cdma-connman.c
>> @@ -52,8 +52,11 @@ struct cdma_connman_settings {
>> struct ofono_cdma_connman {
>> ofono_bool_t powered;
>> ofono_bool_t dormant;
>> + ofono_bool_t roaming_allowed;
>> struct cdma_connman_settings *settings;
>> DBusMessage *pending;
>> + struct ofono_cdma_netreg *cdma_netreg;
>> + unsigned int cdma_netreg_watch;
>> const struct ofono_cdma_connman_driver *driver;
>> void *driver_data;
>> struct ofono_atom *atom;
>> @@ -338,6 +341,17 @@ static void cdma_connman_settings_append_properties(
>> dbus_message_iter_close_container(dict,&entry);
>> }
>>
>> +ofono_bool_t cdma_connman_netreg_update(struct ofono_cdma_connman *cm)
>> +{
> I think this function should be named a bit better. Wouldn't
> is_registered be clearer?
Yes.
>> + ofono_bool_t registered;
>> + int status = ofono_cdma_netreg_get_status(cm->cdma_netreg);
>> +
>> + registered = status == NETWORK_REGISTRATION_STATUS_REGISTERED;
>> +
>> + return registered || (cm->roaming_allowed&&
>> + status == NETWORK_REGISTRATION_STATUS_ROAMING);
> You seem to be doing quite a bit of work to accomplish your goal. If
> you use __ofono_modem_find_atom then you can drop all the atom watch
> bits and make this implementation way easier.
I will remove the atom watch and try to find it, if it fails I will
return FALSE.
>> +}
>> +
>> static DBusMessage *cdma_connman_get_properties(DBusConnection *conn,
>> DBusMessage *msg, void *data)
>> {
>> @@ -365,6 +379,10 @@ static DBusMessage *cdma_connman_get_properties(DBusConnection *conn,
>> value = cm->dormant;
>> ofono_dbus_dict_append(&dict, "Dormant", DBUS_TYPE_BOOLEAN,&value);
>>
>> + value = cm->roaming_allowed;
>> + ofono_dbus_dict_append(&dict, "RoamingAllowed",
>> + DBUS_TYPE_BOOLEAN,&value);
>> +
>> if (cm->settings)
>> cdma_connman_settings_append_properties(cm,&dict);
>>
>> @@ -450,7 +468,23 @@ static DBusMessage *cdma_connman_set_property(DBusConnection *conn,
>>
>> dbus_message_iter_recurse(&iter,&var);
>>
>> - if (!strcmp(property, "Powered")) {
>> + if (!strcmp(property, "RoamingAllowed")) {
>> + if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
>> + return __ofono_error_invalid_args(msg);
>> +
>> + dbus_message_iter_get_basic(&var,&value);
>> +
>> + if (cm->roaming_allowed == (ofono_bool_t) value)
>> + return dbus_message_new_method_return(msg);
>> +
>> + cm->roaming_allowed = value;
>> +
>> + if (cdma_connman_netreg_update(cm) == FALSE&&
>> + cm->powered == TRUE)
>> + cm->driver->deactivate(cm, deactivate_callback, cm);
>> +
> Can you please put the RoamingAllowed details in a separate patch
> (preferably among the last in the series), this one might need to be
> thought about some more.
Ok I will separate it.
>> + return NULL;
>> + } if (!strcmp(property, "Powered")) {
>> if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
>> return __ofono_error_invalid_args(msg);
>>
>> @@ -463,9 +497,11 @@ static DBusMessage *cdma_connman_set_property(DBusConnection *conn,
>> cm->driver->deactivate == NULL)
>> return __ofono_error_not_implemented(msg);
>>
>> + if (cdma_connman_netreg_update(cm) == FALSE)
>> + return __ofono_error_not_registered(msg);
>> +
>> cm->pending = dbus_message_ref(msg);
>>
>> - /* TODO: add logic to support CDMA Network Registration */
>> if (value)
>> cm->driver->activate(cm, cm->username, cm->password,
>> activate_callback, cm);
>> @@ -529,11 +565,18 @@ void ofono_cdma_connman_driver_unregister(
>> static void cdma_connman_unregister(struct ofono_atom *atom)
>> {
>> DBusConnection *conn = ofono_dbus_get_connection();
>> + struct ofono_cdma_connman *cm = __ofono_atom_get_data(atom);
>> struct ofono_modem *modem = __ofono_atom_get_modem(atom);
>> const char *path = __ofono_atom_get_path(atom);
>>
>> DBG("");
>>
>> + if (cm->cdma_netreg_watch) {
>> + __ofono_modem_remove_atom_watch(modem, cm->cdma_netreg_watch);
>> + cm->cdma_netreg_watch = 0;
>> + cm->cdma_netreg = NULL;
>> + }
>> +
>> g_dbus_unregister_interface(conn, path,
>> OFONO_CDMA_CONNECTION_MANAGER_INTERFACE);
>> ofono_modem_remove_interface(modem,
>> @@ -593,6 +636,20 @@ struct ofono_cdma_connman *ofono_cdma_connman_create(
>> return cm;
>> }
>>
>> +static void cdma_netreg_watch(struct ofono_atom *atom,
>> + enum ofono_atom_watch_condition cond,
>> + void *data)
>> +{
>> + struct ofono_cdma_connman *cm = data;
>> +
>> + if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) {
>> + cm->cdma_netreg = NULL;
>> + return;
>> + }
>> +
>> + cm->cdma_netreg = __ofono_atom_get_data(atom);
>> +}
>> +
>> void ofono_cdma_connman_register(struct ofono_cdma_connman *cm)
>> {
>> DBusConnection *conn = ofono_dbus_get_connection();
>> @@ -613,7 +670,9 @@ void ofono_cdma_connman_register(struct ofono_cdma_connman *cm)
>> ofono_modem_add_interface(modem,
>> OFONO_CDMA_CONNECTION_MANAGER_INTERFACE);
>>
>> - /* TODO: add watch to support CDMA Network Registration atom */
>> + cm->cdma_netreg_watch = __ofono_modem_add_atom_watch(modem,
>> + OFONO_ATOM_TYPE_CDMA_NETREG,
>> + cdma_netreg_watch, cm, NULL);
>>
>> __ofono_atom_register(cm->atom, cdma_connman_unregister);
>> }
> Regards,
> -Denis
>
Kind regards,
Guillaume
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH_v2 5/6] cdma-connman: Add public api definition
2011-11-02 15:32 ` Denis Kenzior
@ 2011-11-04 14:57 ` Guillaume Zajac
0 siblings, 0 replies; 12+ messages in thread
From: Guillaume Zajac @ 2011-11-04 14:57 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1309 bytes --]
Hi Denis,
On 02/11/2011 16:32, Denis Kenzior wrote:
> Hi Guillaume,
>
> On 11/02/2011 05:38 AM, Guillaume Zajac wrote:
>> ---
>> src/cdma-connman.c | 18 ++++++++++++++++++
>> 1 files changed, 18 insertions(+), 0 deletions(-)
>>
>> diff --git a/src/cdma-connman.c b/src/cdma-connman.c
>> index 42dcca2..f88353a 100644
>> --- a/src/cdma-connman.c
>> +++ b/src/cdma-connman.c
>> @@ -562,6 +562,24 @@ void ofono_cdma_connman_driver_unregister(
>> g_drivers = g_slist_remove(g_drivers, (void *) d);
>> }
>>
>> +void ofono_cdma_connman_deactivated(struct ofono_cdma_connman *cm)
>> +{
>> + DBusConnection *conn = ofono_dbus_get_connection();
>> + const char *path;
>> + dbus_bool_t value;
>> +
>> + if (cm == NULL)
>> + return;
>> +
>> + cdma_connman_settings_reset(cm);
>> + value = FALSE;
>> + path = __ofono_atom_get_path(cm->atom);
> Don't you also want to reset cm->powered accordingly?
Yes, I forgot it.
>> +
>> + ofono_dbus_signal_property_changed(conn, path,
>> + OFONO_CDMA_CONNECTION_MANAGER_INTERFACE,
>> + "Powered", DBUS_TYPE_BOOLEAN,&value);
>> +}
>> +
>> static void cdma_connman_unregister(struct ofono_atom *atom)
>> {
>> DBusConnection *conn = ofono_dbus_get_connection();
> Regards,
> -Denis
>
Kind regards,
Guillaume
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-11-04 14:57 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-02 10:37 [PATCH_v2 0/6] CDMA Network registration Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 1/6] dbus: Add new D-Bus error message NotRegistered Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 2/6] doc: Add RoamingAllowed property Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 3/6] cdma-connman: Rely on roaming and cdma-netreg status to enable data call Guillaume Zajac
2011-11-02 15:27 ` Denis Kenzior
2011-11-04 14:42 ` Guillaume Zajac
2011-11-02 10:37 ` [PATCH_v2 4/6] cdma-connman: Add public api to notify connection is lost Guillaume Zajac
2011-11-02 15:33 ` Denis Kenzior
2011-11-02 10:38 ` [PATCH_v2 5/6] cdma-connman: Add public api definition Guillaume Zajac
2011-11-02 15:32 ` Denis Kenzior
2011-11-04 14:57 ` Guillaume Zajac
2011-11-02 10:38 ` [PATCH_v2 6/6] cdmamodem: Notify when connection is lost Guillaume Zajac
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox