From: Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com>
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: "linux-bluetooth@vger.kernel.org" <linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH 2/3] android/avrcp: Add control handlers to avrcp-lib
Date: Wed, 26 Feb 2014 09:56:45 +0200 [thread overview]
Message-ID: <20140226075632.GA29630@aemeltch-MOBL1> (raw)
In-Reply-To: <CABBYNZJGQJ9e7+0M_-kQGn=G3648ZRNuwULg+rKQ+tZXEehDkA@mail.gmail.com>
Hi Luiz,
On Tue, Feb 25, 2014 at 04:19:53PM +0200, Luiz Augusto von Dentz wrote:
> Hi Andrei,
>
> On Tue, Feb 25, 2014 at 3:56 PM, Andrei Emeltchenko
> <Andrei.Emeltchenko.news@gmail.com> wrote:
> > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> >
> > ---
> > android/avrcp-lib.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> > android/avrcp-lib.h | 12 +++++++++++
> > 2 files changed, 72 insertions(+)
> >
> > diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c
> > index 136801e..95e10f2 100644
> > --- a/android/avrcp-lib.c
> > +++ b/android/avrcp-lib.c
> > @@ -56,6 +56,15 @@
> > #define AVRCP_PACKET_TYPE_CONTINUING 0x02
> > #define AVRCP_PACKET_TYPE_END 0x03
> >
> > +/* Capabilities for AVRCP_GET_CAPABILITIES pdu */
> > +#define CAP_COMPANY_ID 0x02
> > +#define CAP_EVENTS_SUPPORTED 0x03
> > +
> > +/* Company IDs supported by this device */
> > +static uint32_t company_ids[] = {
> > + IEEEID_BTSIG,
> > +};
> > +
> > #if __BYTE_ORDER == __LITTLE_ENDIAN
> >
> > struct avrcp_header {
> > @@ -108,6 +117,8 @@ struct avrcp {
> > const struct avrcp_passthrough_handler *passthrough_handlers;
> > void *passthrough_data;
> > unsigned int passthrough_id;
> > +
> > + uint16_t supported_events;
> > };
> >
> > void avrcp_shutdown(struct avrcp *session)
> > @@ -220,6 +231,53 @@ static void set_company_id(uint8_t cid[3], const uint32_t cid_in)
> > cid[2] = cid_in;
> > }
> >
> > +static uint8_t avrcp_handle_get_capabilities(struct avrcp *session,
> > + uint8_t transaction, uint16_t *params_len,
> > + uint8_t *params, void *user_data)
> > +{
> > + unsigned int i;
> > +
> > + DBG("id %d params_len %d", params[0], *params_len);
> > +
> > + if (*params_len != 1)
> > + goto fail;
> > +
> > + switch (params[0]) {
> > + case CAP_COMPANY_ID:
> > + for (i = 0; i < G_N_ELEMENTS(company_ids); i++)
> > + set_company_id(¶ms[2 + i * 3], company_ids[i]);
> > +
> > + *params_len = 2 + (3 * G_N_ELEMENTS(company_ids));
> > + params[1] = G_N_ELEMENTS(company_ids);
> > +
> > + return AVC_CTYPE_STABLE;
> > + case CAP_EVENTS_SUPPORTED:
> > + params[1] = 0;
> > + for (i = 1; i <= AVRCP_EVENT_LAST; i++) {
> > + if (session->supported_events & (1 << i)) {
> > + params[1]++;
> > + params[params[1] + 1] = i;
> > + }
> > + }
> > +
> > + *params_len = 2 + params[1];
> > +
> > + return AVC_CTYPE_STABLE;
> > + }
> > +
> > +fail:
> > + *params_len = htons(1);
> > + params[0] = AVRCP_STATUS_INVALID_PARAM;
> > +
> > + return AVC_CTYPE_REJECTED;
> > +}
> > +
> > +static const struct avrcp_control_handler control_handlers[] = {
> > + { AVRCP_GET_CAPABILITIES, AVC_CTYPE_STATUS,
> > + avrcp_handle_get_capabilities },
> > + { },
> > +};
> > +
> > struct avrcp *avrcp_new(int fd, size_t imtu, size_t omtu, uint16_t version)
> > {
> > struct avrcp *session;
> > @@ -241,6 +299,8 @@ struct avrcp *avrcp_new(int fd, size_t imtu, size_t omtu, uint16_t version)
> > handle_vendordep_pdu,
> > session);
> >
> > + avrcp_set_control_handlers(session, control_handlers, NULL);
> > +
> > return session;
> > }
> >
> > diff --git a/android/avrcp-lib.h b/android/avrcp-lib.h
> > index 4f3a632..0821287 100644
> > --- a/android/avrcp-lib.h
> > +++ b/android/avrcp-lib.h
> > @@ -46,6 +46,18 @@
> > #define AVRCP_ADD_TO_NOW_PLAYING 0x90
> > #define AVRCP_GENERAL_REJECT 0xA0
> >
> > +/* Notification events */
> > +#define AVRCP_EVENT_STATUS_CHANGED 0x01
> > +#define AVRCP_EVENT_TRACK_CHANGED 0x02
> > +#define AVRCP_EVENT_TRACK_REACHED_END 0x03
> > +#define AVRCP_EVENT_TRACK_REACHED_START 0x04
> > +#define AVRCP_EVENT_SETTINGS_CHANGED 0x08
> > +#define AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED 0x0a
> > +#define AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED 0x0b
> > +#define AVRCP_EVENT_UIDS_CHANGED 0x0c
> > +#define AVRCP_EVENT_VOLUME_CHANGED 0x0d
> > +#define AVRCP_EVENT_LAST AVRCP_EVENT_VOLUME_CHANGED
> > +
> > struct avrcp;
> >
> > struct avrcp_control_handler {
> > --
> > 1.8.3.2
>
> That is the actual AVRCP implementation not the library, the library
> only offer means to handle the commands but don't parse it there since
> we can't do anything with it. For unit tests you can implement dummy
> handlers as we did for passthrough.
I can implement dummy handlers but this would mean that we are testing
that dummy handlers. Is the idea to test actual production code?
Best regards
Andrei Emeltchenko
next prev parent reply other threads:[~2014-02-26 7:56 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-25 13:56 [PATCH 1/3] unit/avrcp: Add /TP/CFG/BV-01-C test Andrei Emeltchenko
2014-02-25 13:56 ` [PATCH 2/3] android/avrcp: Add control handlers to avrcp-lib Andrei Emeltchenko
2014-02-25 14:19 ` Luiz Augusto von Dentz
2014-02-26 7:56 ` Andrei Emeltchenko [this message]
2014-02-26 8:16 ` Luiz Augusto von Dentz
2014-02-26 10:28 ` Andrei Emeltchenko
2014-02-25 13:56 ` [PATCH 3/3] unit/avrcp: Add /TP/CFG/BV-02-C test Andrei Emeltchenko
2014-02-26 11:59 ` [PATCH 1/3] unit/avrcp: Add /TP/CFG/BV-01-C test Luiz Augusto von Dentz
2014-02-26 12:22 ` Andrei Emeltchenko
-- strict thread matches above, loose matches on Subject: below --
2014-02-26 15:14 Andrei Emeltchenko
2014-02-26 15:14 ` [PATCH 2/3] android/avrcp: Add control handlers to avrcp-lib Andrei Emeltchenko
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=20140226075632.GA29630@aemeltch-MOBL1 \
--to=andrei.emeltchenko.news@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox