Hi Denis, On Fri, Apr 26, 2013 at 9:39 AM, Denis Kenzior <[email protected]> wrote:
> Hi Paulo, > > > On 04/26/2013 12:53 PM, Paulo Borges wrote: > >> Hi Denis, >> >> On Thu, Apr 25, 2013 at 2:58 PM, Denis Kenzior <[email protected] >> <mailto:[email protected]>> wrote: >> >> Hi Paulo, >> >> >> On 04/25/2013 02:09 PM, Paulo Borges wrote: >> >> --- >> src/emulator.c | 31 ++++++++++++++++++++++++++++++**__- >> >> 1 file changed, 30 insertions(+), 1 deletion(-) >> >> diff --git a/src/emulator.c b/src/emulator.c >> index 8ac79d5..5027b02 100644 >> --- a/src/emulator.c >> +++ b/src/emulator.c >> @@ -45,6 +45,8 @@ >> >> #define RING_TIMEOUT 3 >> >> +#define HFP_16_AG_DRIVER "hfp16-ag-driver" >> + >> struct ofono_emulator { >> struct ofono_atom *atom; >> enum ofono_emulator_type type; >> @@ -1007,6 +1009,32 @@ struct ofono_emulator >> *ofono_emulator_create(struct ofono_modem *modem, >> return em; >> } >> >> +static int hfp16_card_probe(struct ofono_handsfree_card *card, >> + unsigned int vendor, >> void *data) >> +{ >> + DBG("HFP 1.6 AG card driver probe"); >> + >> + return 0; >> +} >> + >> +static void hfp16_card_remove(struct ofono_handsfree_card *card) >> +{ >> + DBG("HFP 1.6 AG card driver remove"); >> +} >> + >> +static void hfp16_card_connect(struct ofono_handsfree_card *card, >> + ofono_handsfree_card_connect__**_cb_t cb, >> >> void *data) >> +{ >> + DBG("HFP 1.6 AG card driver connect"); >> +} >> + >> +static struct ofono_handsfree_card_driver hfp16_ag_driver = { >> + .name = HFP_16_AG_DRIVER, >> + .probe = hfp16_card_probe, >> + .remove = hfp16_card_remove, >> + .connect = hfp16_card_connect, >> +}; >> + >> >> >> So why do we need this exactly? There is already a default >> implementation inside handsfree_audio_card if the driver is NULL. >> How is this going to be different from the default implementation? >> >> >> static int card_set_local_remote(struct ofono_handsfree_card >> *card, int fd) >> { >> struct sockaddr_rc saddr; >> @@ -1338,9 +1366,10 @@ void >> __ofono_emulator_set___**indicator_forced(struct ofono_emulator >> *em, >> >> >> int __ofono_emulator_init(void) >> { >> - return 0; >> + return >> ofono_handsfree_card_driver___**register(&hfp16_ag_driver); >> } >> >> void __ofono_emulator_cleanup(void) >> { >> + ofono_handsfree_card_driver___** >> unregister(&hfp16_ag_driver); >> >> } >> >> >> Regards, >> -Denis >> >> >> When both roles support codec negotiation feature AG must first send an >> unsolicited +BCS and only call the default implementation after HF >> respond with AT+BCS [1]. >> >> [1] HFP 1.6 spec page 31: 4.11.3 "Codec Connection Setup". >> >> > This is where the spec is a bit fuzzy. There is some room for > interpretation on the timing of the codec negotiation exchange. > > Can we do the codec negotiation before hand, not as part of the .connect > implementation? e.g. can we negotiate the codec right after SLC > establishment and from then on simply establish the SCO link, or must we > always perform codec negotiation right before the SCO link establishment? > > Regards, > -Denis > Yes, we can negotiate the codec after an incoming AT+BAC command from HF. This way, we can ensure that the chosen codec is valid and we don't need to use a card driver. I'll change this and send a new version. -- Cheers, Paulo.
_______________________________________________ ofono mailing list [email protected] https://lists.ofono.org/mailman/listinfo/ofono
