avrcp: introduce enum for suported features

This commit is contained in:
Milanka Ringwald 2019-02-18 11:28:12 +01:00
parent 7f3f442d49
commit 1101489150
10 changed files with 79 additions and 11 deletions

View File

@ -235,7 +235,12 @@ static int a2dp_and_avrcp_setup(void){
// setup AVRCP
memset(sdp_avrcp_controller_service_buffer, 0, sizeof(sdp_avrcp_controller_service_buffer));
avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, 1, NULL, NULL);
uint16_t supported_features = (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
supported_features |= (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, supported_features, NULL, NULL);
sdp_register_service(sdp_avrcp_controller_service_buffer);
gap_set_local_name("A2DP Sink Demo 00:00:00:00:00:00");

View File

@ -166,7 +166,7 @@ static void avrcp_browsing_controller_packet_handler(uint8_t packet_type, uint16
static void stdin_process(char cmd);
#endif
#define BROWSING_ENABLED 1
#define AVRCP_BROWSING_ENABLED 1
int btstack_main(int argc, const char * argv[]);
int btstack_main(int argc, const char * argv[]){
@ -189,7 +189,12 @@ int btstack_main(int argc, const char * argv[]){
// Create AVRCP service record and register it with SDP.
memset(sdp_avrcp_browsing_controller_service_buffer, 0, sizeof(sdp_avrcp_browsing_controller_service_buffer));
avrcp_controller_create_sdp_record(sdp_avrcp_browsing_controller_service_buffer, 0x10001, BROWSING_ENABLED, 1, NULL, NULL);
uint16_t supported_features = (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
supported_features |= (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
avrcp_controller_create_sdp_record(sdp_avrcp_browsing_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, supported_features, NULL, NULL);
sdp_register_service(sdp_avrcp_browsing_controller_service_buffer);
// Set local name with a template Bluetooth address, that will be automatically

View File

@ -50,8 +50,15 @@
// made public in avrcp_controller.h
avrcp_context_t avrcp_controller_context;
static int avrcp_controller_supports_browsing(uint16_t controller_supported_features){
return controller_supported_features & (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
void avrcp_controller_create_sdp_record(uint8_t * service, uint32_t service_record_handle, uint8_t browsing, uint16_t supported_features, const char * service_name, const char * service_provider_name){
avrcp_create_sdp_record(1, service, service_record_handle, browsing, supported_features, service_name, service_provider_name);
if (browsing){
supported_features |= (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
avrcp_create_sdp_record(1, service, service_record_handle, avrcp_controller_supports_browsing(supported_features), supported_features, service_name, service_provider_name);
}
static void avrcp_emit_repeat_and_shuffle_mode(btstack_packet_handler_t callback, uint16_t avrcp_cid, uint8_t ctype, avrcp_repeat_mode_t repeat_mode, avrcp_shuffle_mode_t shuffle_mode){

View File

@ -55,6 +55,17 @@ extern "C" {
#endif
/* API_START */
typedef enum {
AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER = 0,
AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_MONITOR_OR_AMPLIFIER,
AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_TUNER,
AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_MENU,
AVRCP_CONTROLLER_SUPPORTED_FEATURE_RESERVED_4,
AVRCP_CONTROLLER_SUPPORTED_FEATURE_RESERVED_5,
AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING
} avrcp_controller_supported_feature_t;
/**
* @brief AVRCP Controller service record.
* @param service

View File

@ -53,8 +53,15 @@ static const uint8_t AVRCP_NOTIFICATION_TRACK_NOT_SELECTED[] = {0xFF,0xFF,0xFF,0
avrcp_context_t avrcp_target_context;
static int avrcp_target_supports_browsing(uint16_t target_supported_features){
return target_supported_features & (1 << AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING);
}
void avrcp_target_create_sdp_record(uint8_t * service, uint32_t service_record_handle, uint8_t browsing, uint16_t supported_features, const char * service_name, const char * service_provider_name){
avrcp_create_sdp_record(0, service, service_record_handle, browsing, supported_features, service_name, service_provider_name);
if (browsing){
supported_features |= (1 << AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING);
}
avrcp_create_sdp_record(0, service, service_record_handle, avrcp_target_supports_browsing(supported_features), supported_features, service_name, service_provider_name);
}
static void avrcp_target_emit_operation(btstack_packet_handler_t callback, uint16_t avrcp_cid, avrcp_operation_id_t operation_id, uint8_t operands_length, uint8_t operand){

View File

@ -54,6 +54,16 @@ extern "C" {
/* API_START */
typedef enum {
AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER = 0,
AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_MONITOR_OR_AMPLIFIER,
AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_TUNER,
AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_MENU,
AVRCP_TARGET_SUPPORTED_FEATURE_PLAYER_APPLICATION_SETTINGS, // AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER must be 1 for this feature to be set
AVRCP_TARGET_SUPPORTED_FEATURE_RESERVED_GROUP_NAVIGATION, // AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER must be 1 for this feature to be set
AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING,
AVRCP_TARGET_SUPPORTED_FEATURE_MULTIPLE_MEDIA_PLAYE_APPLICATIONS
} avrcp_target_supported_feature_t;
/**
* @brief AVRCP Target service record.

View File

@ -352,7 +352,12 @@ int btstack_main(int argc, const char * argv[]){
// Initialize SDP
sdp_init();
memset(sdp_avrcp_controller_service_buffer, 0, sizeof(sdp_avrcp_controller_service_buffer));
avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, 1, NULL, NULL);
uint16_t supported_features = (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
supported_features |= (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, supported_features, NULL, NULL);
sdp_register_service(sdp_avrcp_controller_service_buffer);
gap_set_local_name("BTstack AVRCP Test");

View File

@ -1148,7 +1148,12 @@ int btstack_main(int argc, const char * argv[]){
// setup AVRCP
memset(sdp_avrcp_controller_service_buffer, 0, sizeof(sdp_avrcp_controller_service_buffer));
avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, 1, NULL, NULL);
uint16_t supported_features = (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
supported_features |= (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, supported_features, NULL, NULL);
sdp_register_service(sdp_avrcp_controller_service_buffer);
gap_set_local_name("BTstack AVRCP Controller PTS 00:00:00:00:00:00");

View File

@ -859,7 +859,12 @@ int btstack_main(int argc, const char * argv[]){
// Create AVRCP target service record and register it with SDP.
memset(sdp_avrcp_target_service_buffer, 0, sizeof(sdp_avrcp_target_service_buffer));
avrcp_target_create_sdp_record(sdp_avrcp_target_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, 1, NULL, NULL);
uint16_t supported_features = (1 << AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
supported_features |= (1 << AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING);
}
avrcp_target_create_sdp_record(sdp_avrcp_target_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, supported_features, NULL, NULL);
sdp_register_service(sdp_avrcp_target_service_buffer);
// Set local name with a template Bluetooth address, that will be automatically

View File

@ -130,13 +130,21 @@ int btstack_main(int argc, const char * argv[]){
a2dp_sink_create_sdp_record(a2dp_sink_service_buffer, 0x10007, 1, NULL, NULL);
sdp_register_service(a2dp_sink_service_buffer);
avrcp_controller_create_sdp_record(avrcp_controller_service_buffer, 0x10008, AVRCP_BROWSING_ENABLED, 1, NULL, NULL);
uint16_t controller_supported_features = (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
controller_supported_features |= (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
}
avrcp_controller_create_sdp_record(avrcp_controller_service_buffer, 0x10008, AVRCP_BROWSING_ENABLED, controller_supported_features, NULL, NULL);
sdp_register_service(avrcp_controller_service_buffer);
a2dp_source_create_sdp_record(a2dp_source_service_buffer, 0x10009, 1, NULL, NULL);
sdp_register_service(a2dp_source_service_buffer);
avrcp_target_create_sdp_record(avrcp_target_service_buffer, 0x1000a, AVRCP_BROWSING_ENABLED, 1, NULL, NULL);
uint16_t target_supported_features = (1 << AVRCP_TARGET_SUPPORTED_FEATURE_CATEGORY_PLAYER_OR_RECORDER);
if (AVRCP_BROWSING_ENABLED) {
target_supported_features |= (1 << AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING);
}
avrcp_target_create_sdp_record(avrcp_target_service_buffer, 0x1000a, AVRCP_BROWSING_ENABLED, target_supported_features, NULL, NULL);
sdp_register_service(avrcp_target_service_buffer);
// set CoD for all this