* [RFC] android/client: Add AVRCP register_notification_rsp support
@ 2014-03-19 12:50 Ravi kumar Veeramally
2014-03-21 11:31 ` Ravi kumar Veeramally
0 siblings, 1 reply; 3+ messages in thread
From: Ravi kumar Veeramally @ 2014-03-19 12:50 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Ravi kumar Veeramally
Input for this call doesn't require all parameters of structure
to be filled at the same time. Input data depepnds on event_id
and type. Implemented this api support based on
android/hal_avrcp.c:register_notification_rsp.
---
android/client/if-rc.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 91 insertions(+)
diff --git a/android/client/if-rc.c b/android/client/if-rc.c
index 31efc29..89f63dc 100644
--- a/android/client/if-rc.c
+++ b/android/client/if-rc.c
@@ -54,6 +54,20 @@ SINTMAP(btrc_status_t, -1, "(unknown)")
DELEMENT(BTRC_STS_NO_ERROR),
ENDMAP
+SINTMAP(btrc_event_id_t, -1, "(unknown)")
+ DELEMENT(BTRC_EVT_PLAY_STATUS_CHANGED),
+ DELEMENT(BTRC_EVT_TRACK_CHANGE),
+ DELEMENT(BTRC_EVT_TRACK_REACHED_END),
+ DELEMENT(BTRC_EVT_TRACK_REACHED_START),
+ DELEMENT(BTRC_EVT_PLAY_POS_CHANGED),
+ DELEMENT(BTRC_EVT_APP_SETTINGS_CHANGED),
+ENDMAP
+
+SINTMAP(btrc_notification_type_t, -1, "(unknown)")
+ DELEMENT(BTRC_NOTIFICATION_TYPE_INTERIM),
+ DELEMENT(BTRC_NOTIFICATION_TYPE_CHANGED),
+ENDMAP
+
static char last_addr[MAX_ADDR_STR_LEN];
static void remote_features_cb(bt_bdaddr_t *bd_addr,
@@ -294,6 +308,74 @@ static void set_player_app_value_rsp_p(int argc, const char **argv)
EXEC(if_rc->set_player_app_value_rsp, rsp_status);
}
+/* register_notification_rsp */
+
+static void register_notification_rsp_c(int argc, const char **argv,
+ enum_func *enum_func, void **user)
+{
+ if (argc == 3) {
+ *user = TYPE_ENUM(btrc_event_id_t);
+ *enum_func = enum_defines;
+ }
+
+ if (argc == 4) {
+ *user = TYPE_ENUM(btrc_notification_type_t);
+ *enum_func = enum_defines;
+ }
+}
+
+static void register_notification_rsp_p(int argc, const char **argv)
+{
+ btrc_event_id_t event_id;
+ btrc_notification_type_t type;
+ btrc_register_notification_t reg;
+ uint8_t len, i;
+
+ RETURN_IF_NULL(if_rc);
+
+ memset(®, 0, sizeof(reg));
+ event_id = str2btrc_event_id_t(argv[2]);
+ type = str2btrc_notification_type_t(argv[3]);
+
+ switch (event_id) {
+ case BTRC_EVT_PLAY_STATUS_CHANGED:
+ reg.play_status = str2btrc_play_status_t(argv[4]);
+ break;
+
+ case BTRC_EVT_TRACK_CHANGE:
+ len = strlen(argv[4]) / 2;
+ for (i = 0; i < len; i++)
+ sscanf((char *) &(argv[5])[i * 2], "%hhx",
+ &(reg.track + 1)[i]);
+ break;
+
+ case BTRC_EVT_TRACK_REACHED_END:
+ case BTRC_EVT_TRACK_REACHED_START:
+ break;
+
+ case BTRC_EVT_PLAY_POS_CHANGED:
+ reg.song_pos = (uint8_t) atoi(argv[4]);
+ break;
+
+ case BTRC_EVT_APP_SETTINGS_CHANGED:
+ reg.player_setting.num_attr = (uint8_t) atoi(argv[4]);
+
+ len = strlen(argv[5]) / 2;
+ for (i = 0; i < len; i++)
+ sscanf((char *) &(argv[5])[i * 2], "%hhx",
+ &(reg.player_setting.attr_ids + 1)[i]);
+
+ len = strlen(argv[9]) / 2;
+ for (i = 0; i < len; i++)
+ sscanf((char *) &(argv[6])[i * 2], "%hhx",
+ &(reg.player_setting.attr_values + 1)[i]);
+
+ break;
+ }
+
+ EXEC(if_rc->register_notification_rsp, event_id, type, ®);
+}
+
/* cleanup */
static void cleanup_p(int argc, const char **argv)
@@ -311,6 +393,15 @@ static struct method methods[] = {
STD_METHODCH(get_element_attr_rsp, "<num_attr> <attrs_id> <value>"),
STD_METHODCH(set_player_app_value_rsp, "<rsp_status>"),
STD_METHODCH(set_volume, "<volume>"),
+ STD_METHODCH(register_notification_rsp,
+ "<event_id> <type> <respective_data...>\n"
+ "BTRC_EVT_PLAY_STATUS_CHANGED <type> <play_status>\n"
+ "BTRC_EVT_TRACK_CHANGE <type> <track>\n"
+ "BTRC_EVT_TRACK_REACHED_END <type>\n"
+ "BTRC_EVT_TRACK_REACHED_START <type>\n"
+ "BTRC_EVT_PLAY_POS_CHANGED <type> <song_pos>\n"
+ "BTRC_EVT_APP_SETTINGS_CHANGED <type> "
+ "<num_attr> <attr_ids> <attr_values>\n"),
STD_METHOD(cleanup),
END_METHOD
};
--
1.8.3.2
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [RFC] android/client: Add AVRCP register_notification_rsp support
2014-03-19 12:50 [RFC] android/client: Add AVRCP register_notification_rsp support Ravi kumar Veeramally
@ 2014-03-21 11:31 ` Ravi kumar Veeramally
2014-03-24 11:41 ` Luiz Augusto von Dentz
0 siblings, 1 reply; 3+ messages in thread
From: Ravi kumar Veeramally @ 2014-03-21 11:31 UTC (permalink / raw)
To: linux-bluetooth@vger.kernel.org
ping.
On 03/19/2014 02:50 PM, Ravi kumar Veeramally wrote:
> Input for this call doesn't require all parameters of structure
> to be filled at the same time. Input data depepnds on event_id
> and type. Implemented this api support based on
> android/hal_avrcp.c:register_notification_rsp.
> ---
> android/client/if-rc.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 91 insertions(+)
>
> diff --git a/android/client/if-rc.c b/android/client/if-rc.c
> index 31efc29..89f63dc 100644
> --- a/android/client/if-rc.c
> +++ b/android/client/if-rc.c
> @@ -54,6 +54,20 @@ SINTMAP(btrc_status_t, -1, "(unknown)")
> DELEMENT(BTRC_STS_NO_ERROR),
> ENDMAP
>
> +SINTMAP(btrc_event_id_t, -1, "(unknown)")
> + DELEMENT(BTRC_EVT_PLAY_STATUS_CHANGED),
> + DELEMENT(BTRC_EVT_TRACK_CHANGE),
> + DELEMENT(BTRC_EVT_TRACK_REACHED_END),
> + DELEMENT(BTRC_EVT_TRACK_REACHED_START),
> + DELEMENT(BTRC_EVT_PLAY_POS_CHANGED),
> + DELEMENT(BTRC_EVT_APP_SETTINGS_CHANGED),
> +ENDMAP
> +
> +SINTMAP(btrc_notification_type_t, -1, "(unknown)")
> + DELEMENT(BTRC_NOTIFICATION_TYPE_INTERIM),
> + DELEMENT(BTRC_NOTIFICATION_TYPE_CHANGED),
> +ENDMAP
> +
> static char last_addr[MAX_ADDR_STR_LEN];
>
> static void remote_features_cb(bt_bdaddr_t *bd_addr,
> @@ -294,6 +308,74 @@ static void set_player_app_value_rsp_p(int argc, const char **argv)
> EXEC(if_rc->set_player_app_value_rsp, rsp_status);
> }
>
> +/* register_notification_rsp */
> +
> +static void register_notification_rsp_c(int argc, const char **argv,
> + enum_func *enum_func, void **user)
> +{
> + if (argc == 3) {
> + *user = TYPE_ENUM(btrc_event_id_t);
> + *enum_func = enum_defines;
> + }
> +
> + if (argc == 4) {
> + *user = TYPE_ENUM(btrc_notification_type_t);
> + *enum_func = enum_defines;
> + }
> +}
> +
> +static void register_notification_rsp_p(int argc, const char **argv)
> +{
> + btrc_event_id_t event_id;
> + btrc_notification_type_t type;
> + btrc_register_notification_t reg;
> + uint8_t len, i;
> +
> + RETURN_IF_NULL(if_rc);
> +
> + memset(®, 0, sizeof(reg));
> + event_id = str2btrc_event_id_t(argv[2]);
> + type = str2btrc_notification_type_t(argv[3]);
> +
> + switch (event_id) {
> + case BTRC_EVT_PLAY_STATUS_CHANGED:
> + reg.play_status = str2btrc_play_status_t(argv[4]);
> + break;
> +
> + case BTRC_EVT_TRACK_CHANGE:
> + len = strlen(argv[4]) / 2;
> + for (i = 0; i < len; i++)
> + sscanf((char *) &(argv[5])[i * 2], "%hhx",
> + &(reg.track + 1)[i]);
> + break;
> +
> + case BTRC_EVT_TRACK_REACHED_END:
> + case BTRC_EVT_TRACK_REACHED_START:
> + break;
> +
> + case BTRC_EVT_PLAY_POS_CHANGED:
> + reg.song_pos = (uint8_t) atoi(argv[4]);
> + break;
> +
> + case BTRC_EVT_APP_SETTINGS_CHANGED:
> + reg.player_setting.num_attr = (uint8_t) atoi(argv[4]);
> +
> + len = strlen(argv[5]) / 2;
> + for (i = 0; i < len; i++)
> + sscanf((char *) &(argv[5])[i * 2], "%hhx",
> + &(reg.player_setting.attr_ids + 1)[i]);
> +
> + len = strlen(argv[9]) / 2;
> + for (i = 0; i < len; i++)
> + sscanf((char *) &(argv[6])[i * 2], "%hhx",
> + &(reg.player_setting.attr_values + 1)[i]);
> +
> + break;
> + }
> +
> + EXEC(if_rc->register_notification_rsp, event_id, type, ®);
> +}
> +
> /* cleanup */
>
> static void cleanup_p(int argc, const char **argv)
> @@ -311,6 +393,15 @@ static struct method methods[] = {
> STD_METHODCH(get_element_attr_rsp, "<num_attr> <attrs_id> <value>"),
> STD_METHODCH(set_player_app_value_rsp, "<rsp_status>"),
> STD_METHODCH(set_volume, "<volume>"),
> + STD_METHODCH(register_notification_rsp,
> + "<event_id> <type> <respective_data...>\n"
> + "BTRC_EVT_PLAY_STATUS_CHANGED <type> <play_status>\n"
> + "BTRC_EVT_TRACK_CHANGE <type> <track>\n"
> + "BTRC_EVT_TRACK_REACHED_END <type>\n"
> + "BTRC_EVT_TRACK_REACHED_START <type>\n"
> + "BTRC_EVT_PLAY_POS_CHANGED <type> <song_pos>\n"
> + "BTRC_EVT_APP_SETTINGS_CHANGED <type> "
> + "<num_attr> <attr_ids> <attr_values>\n"),
> STD_METHOD(cleanup),
> END_METHOD
> };
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [RFC] android/client: Add AVRCP register_notification_rsp support
2014-03-21 11:31 ` Ravi kumar Veeramally
@ 2014-03-24 11:41 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 3+ messages in thread
From: Luiz Augusto von Dentz @ 2014-03-24 11:41 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth@vger.kernel.org
Hi Ravi,
On Fri, Mar 21, 2014 at 1:31 PM, Ravi kumar Veeramally
<ravikumar.veeramally@linux.intel.com> wrote:
>
> ping.
>
>
> On 03/19/2014 02:50 PM, Ravi kumar Veeramally wrote:
>>
>> Input for this call doesn't require all parameters of structure
>> to be filled at the same time. Input data depepnds on event_id
>> and type. Implemented this api support based on
>> android/hal_avrcp.c:register_notification_rsp.
>> ---
>> android/client/if-rc.c | 91
>> ++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 91 insertions(+)
>>
>> diff --git a/android/client/if-rc.c b/android/client/if-rc.c
>> index 31efc29..89f63dc 100644
>> --- a/android/client/if-rc.c
>> +++ b/android/client/if-rc.c
>> @@ -54,6 +54,20 @@ SINTMAP(btrc_status_t, -1, "(unknown)")
>> DELEMENT(BTRC_STS_NO_ERROR),
>> ENDMAP
>> +SINTMAP(btrc_event_id_t, -1, "(unknown)")
>> + DELEMENT(BTRC_EVT_PLAY_STATUS_CHANGED),
>> + DELEMENT(BTRC_EVT_TRACK_CHANGE),
>> + DELEMENT(BTRC_EVT_TRACK_REACHED_END),
>> + DELEMENT(BTRC_EVT_TRACK_REACHED_START),
>> + DELEMENT(BTRC_EVT_PLAY_POS_CHANGED),
>> + DELEMENT(BTRC_EVT_APP_SETTINGS_CHANGED),
>> +ENDMAP
>> +
>> +SINTMAP(btrc_notification_type_t, -1, "(unknown)")
>> + DELEMENT(BTRC_NOTIFICATION_TYPE_INTERIM),
>> + DELEMENT(BTRC_NOTIFICATION_TYPE_CHANGED),
>> +ENDMAP
>> +
>> static char last_addr[MAX_ADDR_STR_LEN];
>> static void remote_features_cb(bt_bdaddr_t *bd_addr,
>> @@ -294,6 +308,74 @@ static void set_player_app_value_rsp_p(int argc,
>> const char **argv)
>> EXEC(if_rc->set_player_app_value_rsp, rsp_status);
>> }
>> +/* register_notification_rsp */
>> +
>> +static void register_notification_rsp_c(int argc, const char **argv,
>> + enum_func *enum_func, void **user)
>> +{
>> + if (argc == 3) {
>> + *user = TYPE_ENUM(btrc_event_id_t);
>> + *enum_func = enum_defines;
>> + }
>> +
>> + if (argc == 4) {
>> + *user = TYPE_ENUM(btrc_notification_type_t);
>> + *enum_func = enum_defines;
>> + }
>> +}
>> +
>> +static void register_notification_rsp_p(int argc, const char **argv)
>> +{
>> + btrc_event_id_t event_id;
>> + btrc_notification_type_t type;
>> + btrc_register_notification_t reg;
>> + uint8_t len, i;
>> +
>> + RETURN_IF_NULL(if_rc);
>> +
>> + memset(®, 0, sizeof(reg));
>> + event_id = str2btrc_event_id_t(argv[2]);
>> + type = str2btrc_notification_type_t(argv[3]);
>> +
>> + switch (event_id) {
>> + case BTRC_EVT_PLAY_STATUS_CHANGED:
>> + reg.play_status = str2btrc_play_status_t(argv[4]);
>> + break;
>> +
>> + case BTRC_EVT_TRACK_CHANGE:
>> + len = strlen(argv[4]) / 2;
>> + for (i = 0; i < len; i++)
>> + sscanf((char *) &(argv[5])[i * 2], "%hhx",
>> + &(reg.track + 1)[i]);
Im scratching my head here thinking why do we need to do strlen +
sscanf? Perhaps we should be using strtoull?
>> + break;
>> +
>> + case BTRC_EVT_TRACK_REACHED_END:
>> + case BTRC_EVT_TRACK_REACHED_START:
>> + break;
>> +
>> + case BTRC_EVT_PLAY_POS_CHANGED:
>> + reg.song_pos = (uint8_t) atoi(argv[4]);
Perhaps strtoul to be able to catch errors.
>> + break;
>> +
>> + case BTRC_EVT_APP_SETTINGS_CHANGED:
>> + reg.player_setting.num_attr = (uint8_t) atoi(argv[4]);
>> +
>> + len = strlen(argv[5]) / 2;
>> + for (i = 0; i < len; i++)
>> + sscanf((char *) &(argv[5])[i * 2], "%hhx",
>> + &(reg.player_setting.attr_ids + 1)[i]);
>> +
>> + len = strlen(argv[9]) / 2;
>> + for (i = 0; i < len; i++)
>> + sscanf((char *) &(argv[6])[i * 2], "%hhx",
>> + &(reg.player_setting.attr_values + 1)[i]);
BTRC_EVT_APP_SETTINGS_CHANGED is not really supported so perhaps we
can skip it for now.
>> + break;
>> + }
>> +
>> + EXEC(if_rc->register_notification_rsp, event_id, type, ®);
>> +}
>> +
>> /* cleanup */
>> static void cleanup_p(int argc, const char **argv)
>> @@ -311,6 +393,15 @@ static struct method methods[] = {
>> STD_METHODCH(get_element_attr_rsp, "<num_attr> <attrs_id>
>> <value>"),
>> STD_METHODCH(set_player_app_value_rsp, "<rsp_status>"),
>> STD_METHODCH(set_volume, "<volume>"),
>> + STD_METHODCH(register_notification_rsp,
>> + "<event_id> <type> <respective_data...>\n"
>> + "BTRC_EVT_PLAY_STATUS_CHANGED <type>
>> <play_status>\n"
>> + "BTRC_EVT_TRACK_CHANGE <type> <track>\n"
>> + "BTRC_EVT_TRACK_REACHED_END <type>\n"
>> + "BTRC_EVT_TRACK_REACHED_START <type>\n"
>> + "BTRC_EVT_PLAY_POS_CHANGED <type> <song_pos>\n"
>> + "BTRC_EVT_APP_SETTINGS_CHANGED <type> "
>> + "<num_attr> <attr_ids> <attr_values>\n"),
>> STD_METHOD(cleanup),
>> END_METHOD
>> };
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-03-24 11:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-19 12:50 [RFC] android/client: Add AVRCP register_notification_rsp support Ravi kumar Veeramally
2014-03-21 11:31 ` Ravi kumar Veeramally
2014-03-24 11:41 ` Luiz Augusto von Dentz
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.