* [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready'
@ 2011-07-19 16:49 =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
2011-07-19 16:49 ` [PATCH 2/3] hfp_ag: start server on sim 'ready' state =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 16:49 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 505 bytes --]
---
src/voicecall.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/src/voicecall.c b/src/voicecall.c
index ce975d3..8815d9e 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -2683,6 +2683,9 @@ static void sim_state_watch(enum ofono_sim_state new_state, void *user)
free_sim_ecc_numbers(vc, FALSE);
set_new_ecc(vc);
+
+ voicecall_close_settings(vc);
+ break;
case OFONO_SIM_STATE_READY:
voicecall_load_settings(vc);
break;
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 2/3] hfp_ag: start server on sim 'ready' state 2011-07-19 16:49 [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 16:49 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 17:41 ` Denis Kenzior 2011-07-19 16:49 ` [PATCH 3/3] voicecall: remove usage of em_atd_number =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 17:56 ` [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' Denis Kenzior 2 siblings, 1 reply; 5+ messages in thread From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 16:49 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 3505 bytes --] update HFP AG server to start only when a modem has its SIM atom in 'ready' state and has voice call capability --- plugins/hfp_ag.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 44 insertions(+), 8 deletions(-) diff --git a/plugins/hfp_ag.c b/plugins/hfp_ag.c index 191708b..70f0944 100644 --- a/plugins/hfp_ag.c +++ b/plugins/hfp_ag.c @@ -40,6 +40,7 @@ static struct server *server; static guint modemwatch_id; static GList *modems; +static GHashTable *sim_hash = NULL; static const gchar *hfp_ag_record = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" @@ -115,13 +116,16 @@ static void hfp_ag_connect_cb(GIOChannel *io, GError *err, gpointer user_data) ofono_emulator_register(em, fd); } -static void voicecall_watch(struct ofono_atom *atom, - enum ofono_atom_watch_condition cond, - void *data) +static void sim_state_watch(enum ofono_sim_state new_state, void *user) { - struct ofono_modem *modem = data; + struct ofono_modem *modem = user; + + switch (new_state) { + case OFONO_SIM_STATE_READY: + if (__ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_VOICECALL) + == NULL) + break; - if (cond == OFONO_ATOM_WATCH_CONDITION_REGISTERED) { modems = g_list_append(modems, modem); if (modems->next == NULL) @@ -129,15 +133,44 @@ static void voicecall_watch(struct ofono_atom *atom, hfp_ag_record, hfp_ag_connect_cb, NULL); - } else { + break; + + default: modems = g_list_remove(modems, modem); if (modems == NULL && server != NULL) { bluetooth_unregister_server(server); server = NULL; } + break; } } +static void sim_watch(struct ofono_atom *atom, + enum ofono_atom_watch_condition cond, + void *data) +{ + struct ofono_sim *sim = __ofono_atom_get_data(atom); + struct ofono_modem *modem = data; + int watch; + + if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) { + sim_state_watch(OFONO_SIM_STATE_NOT_PRESENT, modem); + + watch = GPOINTER_TO_UINT(g_hash_table_lookup(sim_hash, sim)); + if (watch == 0) + return; + + ofono_sim_remove_state_watch(sim, watch); + g_hash_table_remove(sim_hash, sim); + + return; + } + + watch = ofono_sim_add_state_watch(sim, sim_state_watch, modem, NULL); + g_hash_table_insert(sim_hash, sim, GUINT_TO_POINTER(watch)); + sim_state_watch(ofono_sim_get_state(sim), modem); +} + static void modem_watch(struct ofono_modem *modem, gboolean added, void *user) { DBG("modem: %p, added: %d", modem, added); @@ -145,8 +178,8 @@ static void modem_watch(struct ofono_modem *modem, gboolean added, void *user) if (added == FALSE) return; - __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_VOICECALL, - voicecall_watch, modem, NULL); + __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_SIM, + sim_watch, modem, NULL); } static void call_modemwatch(struct ofono_modem *modem, void *user) @@ -156,6 +189,8 @@ static void call_modemwatch(struct ofono_modem *modem, void *user) static int hfp_ag_init() { + sim_hash = g_hash_table_new(g_direct_hash, g_direct_equal); + modemwatch_id = __ofono_modemwatch_add(modem_watch, NULL, NULL); __ofono_modem_foreach(call_modemwatch, NULL); @@ -166,6 +201,7 @@ static void hfp_ag_exit() { __ofono_modemwatch_remove(modemwatch_id); g_list_free(modems); + g_hash_table_destroy(sim_hash); if (server) { bluetooth_unregister_server(server); -- 1.7.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] hfp_ag: start server on sim 'ready' state 2011-07-19 16:49 ` [PATCH 2/3] hfp_ag: start server on sim 'ready' state =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 17:41 ` Denis Kenzior 0 siblings, 0 replies; 5+ messages in thread From: Denis Kenzior @ 2011-07-19 17:41 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 4176 bytes --] Hi Frédéric, On 07/19/2011 11:49 AM, Frédéric Danis wrote: > update HFP AG server to start only when a modem has its SIM atom > in 'ready' state and has voice call capability > --- > plugins/hfp_ag.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- > 1 files changed, 44 insertions(+), 8 deletions(-) > > diff --git a/plugins/hfp_ag.c b/plugins/hfp_ag.c > index 191708b..70f0944 100644 > --- a/plugins/hfp_ag.c > +++ b/plugins/hfp_ag.c > @@ -40,6 +40,7 @@ > static struct server *server; > static guint modemwatch_id; > static GList *modems; > +static GHashTable *sim_hash = NULL; > > static const gchar *hfp_ag_record = > "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" > @@ -115,13 +116,16 @@ static void hfp_ag_connect_cb(GIOChannel *io, GError *err, gpointer user_data) > ofono_emulator_register(em, fd); > } > > -static void voicecall_watch(struct ofono_atom *atom, > - enum ofono_atom_watch_condition cond, > - void *data) > +static void sim_state_watch(enum ofono_sim_state new_state, void *user) > { > - struct ofono_modem *modem = data; > + struct ofono_modem *modem = user; > + > + switch (new_state) { > + case OFONO_SIM_STATE_READY: > + if (__ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_VOICECALL) > + == NULL) > + break; > > - if (cond == OFONO_ATOM_WATCH_CONDITION_REGISTERED) { > modems = g_list_append(modems, modem); > > if (modems->next == NULL) > @@ -129,15 +133,44 @@ static void voicecall_watch(struct ofono_atom *atom, > hfp_ag_record, > hfp_ag_connect_cb, > NULL); > - } else { > + break; > + > + default: > modems = g_list_remove(modems, modem); > if (modems == NULL && server != NULL) { > bluetooth_unregister_server(server); > server = NULL; > } > + break; I'd rather we use an if block and return early instead of using a switch case. e.g. if (cond != OFONO_SIM_STATE_READY) { ... return; } if (__ofono_modem_find_atom(...)) return; > } > } > > +static void sim_watch(struct ofono_atom *atom, > + enum ofono_atom_watch_condition cond, > + void *data) > +{ > + struct ofono_sim *sim = __ofono_atom_get_data(atom); > + struct ofono_modem *modem = data; > + int watch; > + > + if (cond == OFONO_ATOM_WATCH_CONDITION_UNREGISTERED) { > + sim_state_watch(OFONO_SIM_STATE_NOT_PRESENT, modem); > + > + watch = GPOINTER_TO_UINT(g_hash_table_lookup(sim_hash, sim)); > + if (watch == 0) > + return; Can this ever actually return 0? > + > + ofono_sim_remove_state_watch(sim, watch); > + g_hash_table_remove(sim_hash, sim); > + > + return; > + } > + > + watch = ofono_sim_add_state_watch(sim, sim_state_watch, modem, NULL); > + g_hash_table_insert(sim_hash, sim, GUINT_TO_POINTER(watch)); > + sim_state_watch(ofono_sim_get_state(sim), modem); > +} > + > static void modem_watch(struct ofono_modem *modem, gboolean added, void *user) > { > DBG("modem: %p, added: %d", modem, added); > @@ -145,8 +178,8 @@ static void modem_watch(struct ofono_modem *modem, gboolean added, void *user) > if (added == FALSE) > return; > > - __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_VOICECALL, > - voicecall_watch, modem, NULL); > + __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_SIM, > + sim_watch, modem, NULL); > } > > static void call_modemwatch(struct ofono_modem *modem, void *user) > @@ -156,6 +189,8 @@ static void call_modemwatch(struct ofono_modem *modem, void *user) > > static int hfp_ag_init() > { > + sim_hash = g_hash_table_new(g_direct_hash, g_direct_equal); > + > modemwatch_id = __ofono_modemwatch_add(modem_watch, NULL, NULL); > __ofono_modem_foreach(call_modemwatch, NULL); > > @@ -166,6 +201,7 @@ static void hfp_ag_exit() > { > __ofono_modemwatch_remove(modemwatch_id); > g_list_free(modems); > + g_hash_table_destroy(sim_hash); Since you went to the trouble of maintaining the sim_hash, you should g_hash_table_foreach here to remove the sim_state_watches. > > if (server) { > bluetooth_unregister_server(server); Regards, -Denis ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] voicecall: remove usage of em_atd_number 2011-07-19 16:49 [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 16:49 ` [PATCH 2/3] hfp_ag: start server on sim 'ready' state =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 16:49 ` =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 17:56 ` [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' Denis Kenzior 2 siblings, 0 replies; 5+ messages in thread From: =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 16:49 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2508 bytes --] as emulator atom can only run with a 'ready' SIM, use saved number instead of em_atd_number --- src/voicecall.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/voicecall.c b/src/voicecall.c index 8815d9e..3e9b5e5 100644 --- a/src/voicecall.c +++ b/src/voicecall.c @@ -74,7 +74,6 @@ struct ofono_voicecall { ofono_voicecall_cb_t release_queue_done_cb; struct ofono_emulator *pending_em; unsigned int pending_id; - char *em_atd_number; }; struct voicecall { @@ -1506,14 +1505,14 @@ static int voicecall_dial(struct ofono_voicecall *vc, const char *number, string_to_phone_number(number, &ph); - vc->driver->dial(vc, &ph, clir, cb, vc); - if (vc->settings) { g_key_file_set_string(vc->settings, SETTINGS_GROUP, "Number", number); storage_sync(vc->imsi, SETTINGS_STORE, vc->settings); } + vc->driver->dial(vc, &ph, clir, cb, vc); + return 0; } @@ -3153,13 +3152,18 @@ static void emulator_dial_callback(const struct ofono_error *error, void *data) struct ofono_voicecall *vc = data; gboolean need_to_emit; struct voicecall *v; + const char *number; + GError *err = NULL; + + number = g_key_file_get_string(vc->settings, SETTINGS_GROUP, + "Number", &err); - v = dial_handle_result(vc, error, vc->em_atd_number, &need_to_emit); + v = dial_handle_result(vc, error, number, &need_to_emit); if (v == NULL) { struct ofono_modem *modem = __ofono_atom_get_modem(vc->atom); - if (is_emergency_number(vc, vc->em_atd_number) == TRUE) + if (is_emergency_number(vc, number) == TRUE) __ofono_modem_dec_emergency_mode(modem); } @@ -3167,8 +3171,6 @@ static void emulator_dial_callback(const struct ofono_error *error, void *data) ofono_emulator_send_final(vc->pending_em, error); vc->pending_em = NULL; - g_free(vc->em_atd_number); - vc->em_atd_number = NULL; notify_emulator_call_status(vc); @@ -3190,7 +3192,6 @@ static void emulator_dial(struct ofono_emulator *em, struct ofono_voicecall *vc, } vc->pending_em = em; - vc->em_atd_number = g_strdup(number); err = voicecall_dial(vc, number, OFONO_CLIR_OPTION_DEFAULT, emulator_dial_callback, vc); @@ -3199,8 +3200,6 @@ static void emulator_dial(struct ofono_emulator *em, struct ofono_voicecall *vc, return; vc->pending_em = NULL; - g_free(vc->em_atd_number); - vc->em_atd_number = NULL; switch (err) { case -ENETDOWN: -- 1.7.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' 2011-07-19 16:49 [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 16:49 ` [PATCH 2/3] hfp_ag: start server on sim 'ready' state =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 16:49 ` [PATCH 3/3] voicecall: remove usage of em_atd_number =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis @ 2011-07-19 17:56 ` Denis Kenzior 2 siblings, 0 replies; 5+ messages in thread From: Denis Kenzior @ 2011-07-19 17:56 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 217 bytes --] Hi Frédéric, On 07/19/2011 11:49 AM, Frédéric Danis wrote: > --- > src/voicecall.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > Patch has been applied, thanks. Regards, -Denis ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-07-19 17:56 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-07-19 16:49 [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 16:49 ` [PATCH 2/3] hfp_ag: start server on sim 'ready' state =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 17:41 ` Denis Kenzior 2011-07-19 16:49 ` [PATCH 3/3] voicecall: remove usage of em_atd_number =?unknown-8bit?q?Fr=C3=A9d=C3=A9ric?= Danis 2011-07-19 17:56 ` [PATCH 1/3] voicecall: fix +BLDN in case of SIM not 'ready' Denis Kenzior
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox