linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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(&reg, 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, &reg);
+}
+
 /* 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(&reg, 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, &reg);
> +}
> +
>   /* 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(&reg, 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, &reg);
>> +}
>> +
>>   /* 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).