mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 04:20:20 +00:00
avrcp: use PANEL as default unit + subunit info
This commit is contained in:
parent
fda344fc0d
commit
f0af2234e6
@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||||||
- HFP: event HFP_SUBEVENT_VOICE_RECOGNITION_STATUS emitted on (enhanced) voice recognition status change. Field "activated" replaced with "state". Added additional "status" field that indicates if the command was successful.
|
- HFP: event HFP_SUBEVENT_VOICE_RECOGNITION_STATUS emitted on (enhanced) voice recognition status change. Field "activated" replaced with "state". Added additional "status" field that indicates if the command was successful.
|
||||||
- HFP: streamlined enhanced voice recognition function names
|
- HFP: streamlined enhanced voice recognition function names
|
||||||
- AVDTP: media config validator is called with preview of media codec configuration event and configured separately for sink/source
|
- AVDTP: media config validator is called with preview of media codec configuration event and configured separately for sink/source
|
||||||
|
- AVRCP: use PANEL as default unit + subunit info
|
||||||
- Run Loop: new functionality for HCI transport drivers and inter-process communication
|
- Run Loop: new functionality for HCI transport drivers and inter-process communication
|
||||||
- *btstack_run_loop_poll_data_sources_from_irq*: used to transfer control from IRQ handler to main thread/run loop
|
- *btstack_run_loop_poll_data_sources_from_irq*: used to transfer control from IRQ handler to main thread/run loop
|
||||||
- *btstack_run_loop_execute_on_main_thread*: schedule code execution on main thread from other thread
|
- *btstack_run_loop_execute_on_main_thread*: schedule code execution on main thread from other thread
|
||||||
|
@ -200,18 +200,6 @@ static modcontext mod_context;
|
|||||||
static tracker_buffer_state trkbuf;
|
static tracker_buffer_state trkbuf;
|
||||||
|
|
||||||
/* AVRCP Target context START */
|
/* AVRCP Target context START */
|
||||||
static const uint8_t subunit_info[] = {
|
|
||||||
0,0,0,0,
|
|
||||||
1,1,1,1,
|
|
||||||
2,2,2,2,
|
|
||||||
3,3,3,3,
|
|
||||||
4,4,4,4,
|
|
||||||
5,5,5,5,
|
|
||||||
6,6,6,6,
|
|
||||||
7,7,7,7
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint32_t company_id = 0x112233;
|
|
||||||
static uint8_t companies_num = 1;
|
static uint8_t companies_num = 1;
|
||||||
static uint8_t companies[] = {
|
static uint8_t companies[] = {
|
||||||
0x00, 0x19, 0x58 //BT SIG registered CompanyID
|
0x00, 0x19, 0x58 //BT SIG registered CompanyID
|
||||||
@ -765,8 +753,6 @@ static void avrcp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t
|
|||||||
avrcp_subevent_connection_established_get_bd_addr(packet, event_addr);
|
avrcp_subevent_connection_established_get_bd_addr(packet, event_addr);
|
||||||
|
|
||||||
avrcp_target_set_now_playing_info(media_tracker.avrcp_cid, NULL, sizeof(tracks)/sizeof(avrcp_track_t));
|
avrcp_target_set_now_playing_info(media_tracker.avrcp_cid, NULL, sizeof(tracks)/sizeof(avrcp_track_t));
|
||||||
avrcp_target_set_unit_info(media_tracker.avrcp_cid, AVRCP_SUBUNIT_TYPE_AUDIO, company_id);
|
|
||||||
avrcp_target_set_subunit_info(media_tracker.avrcp_cid, AVRCP_SUBUNIT_TYPE_AUDIO, (uint8_t *)subunit_info, sizeof(subunit_info));
|
|
||||||
|
|
||||||
avrcp_controller_get_supported_events(media_tracker.avrcp_cid);
|
avrcp_controller_get_supported_events(media_tracker.avrcp_cid);
|
||||||
|
|
||||||
|
@ -71,6 +71,9 @@ static const char * default_avrcp_controller_service_provider_name = "BTstack AV
|
|||||||
static const char * default_avrcp_target_service_name = "BTstack AVRCP Target Service";
|
static const char * default_avrcp_target_service_name = "BTstack AVRCP Target Service";
|
||||||
static const char * default_avrcp_target_service_provider_name = "BTstack AVRCP Target Service Provider";
|
static const char * default_avrcp_target_service_provider_name = "BTstack AVRCP Target Service Provider";
|
||||||
|
|
||||||
|
// default subunit info: single PANEL subunit
|
||||||
|
static const uint8_t avrcp_default_subunit_info[] = { AVRCP_SUBUNIT_TYPE_PANEL << 3};
|
||||||
|
|
||||||
static uint16_t avrcp_cid_counter;
|
static uint16_t avrcp_cid_counter;
|
||||||
|
|
||||||
static btstack_context_callback_registration_t avrcp_handle_sdp_client_query_request;
|
static btstack_context_callback_registration_t avrcp_handle_sdp_client_query_request;
|
||||||
@ -415,7 +418,6 @@ uint16_t avrcp_get_next_cid(avrcp_role_t role){
|
|||||||
return avrcp_cid_counter;
|
return avrcp_cid_counter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static avrcp_connection_t * avrcp_create_connection(avrcp_role_t role, bd_addr_t remote_addr){
|
static avrcp_connection_t * avrcp_create_connection(avrcp_role_t role, bd_addr_t remote_addr){
|
||||||
avrcp_connection_t * connection = btstack_memory_avrcp_connection_get();
|
avrcp_connection_t * connection = btstack_memory_avrcp_connection_get();
|
||||||
if (!connection){
|
if (!connection){
|
||||||
@ -430,6 +432,13 @@ static avrcp_connection_t * avrcp_create_connection(avrcp_role_t role, bd_addr_t
|
|||||||
connection->transaction_id_counter = 0;
|
connection->transaction_id_counter = 0;
|
||||||
|
|
||||||
connection->max_num_fragments = 0xFF;
|
connection->max_num_fragments = 0xFF;
|
||||||
|
|
||||||
|
// setup default unit / subunit info
|
||||||
|
connection->company_id = 0xffffff;
|
||||||
|
connection->unit_type = AVRCP_SUBUNIT_TYPE_PANEL;
|
||||||
|
connection->subunit_info_data_size = sizeof(avrcp_default_subunit_info);
|
||||||
|
connection->subunit_info_data = avrcp_default_subunit_info;
|
||||||
|
|
||||||
log_info("avrcp_create_connection, role %d", role);
|
log_info("avrcp_create_connection, role %d", role);
|
||||||
(void)memcpy(connection->remote_addr, remote_addr, 6);
|
(void)memcpy(connection->remote_addr, remote_addr, 6);
|
||||||
btstack_linked_list_add(&connections, (btstack_linked_item_t *) connection);
|
btstack_linked_list_add(&connections, (btstack_linked_item_t *) connection);
|
||||||
|
@ -528,7 +528,7 @@ static uint8_t avrcp_target_subunit_info(avrcp_connection_t * connection, uint8_
|
|||||||
connection->cmd_operands_length = 5;
|
connection->cmd_operands_length = 5;
|
||||||
connection->cmd_operands[0] = (page << 4) | extension_code;
|
connection->cmd_operands[0] = (page << 4) | extension_code;
|
||||||
|
|
||||||
// mark non-existant entry with 0xff
|
// mark non-existent entries with 0xff
|
||||||
memset(&connection->cmd_operands[1], 0xff, 4);
|
memset(&connection->cmd_operands[1], 0xff, 4);
|
||||||
if ((connection->subunit_info_data != NULL) && (offset < connection->subunit_info_data_size)){
|
if ((connection->subunit_info_data != NULL) && (offset < connection->subunit_info_data_size)){
|
||||||
uint8_t bytes_to_copy = btstack_min(connection->subunit_info_data_size - offset, 4);
|
uint8_t bytes_to_copy = btstack_min(connection->subunit_info_data_size - offset, 4);
|
||||||
|
@ -234,18 +234,6 @@ typedef struct {
|
|||||||
|
|
||||||
static uint8_t ertm_buffer[10000];
|
static uint8_t ertm_buffer[10000];
|
||||||
|
|
||||||
static const uint8_t subunit_info[] = {
|
|
||||||
0,0,0,0,
|
|
||||||
1,1,1,1,
|
|
||||||
2,2,2,2,
|
|
||||||
3,3,3,3,
|
|
||||||
4,4,4,4,
|
|
||||||
5,5,5,5,
|
|
||||||
6,6,6,6,
|
|
||||||
7,7,7,7
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static uint8_t media_player_list[] = {
|
static uint8_t media_player_list[] = {
|
||||||
// num players (2B)
|
// num players (2B)
|
||||||
0x00, 0x02,
|
0x00, 0x02,
|
||||||
@ -317,7 +305,6 @@ static uint8_t virtual_filesystem_list[] ={ 0x00, 0x07, 0x02, 0x00, 0x14, 0x00,
|
|||||||
static uint8_t search_list[] = {};
|
static uint8_t search_list[] = {};
|
||||||
static uint8_t now_playing_list[] = {};
|
static uint8_t now_playing_list[] = {};
|
||||||
|
|
||||||
static uint32_t company_id = 0x112233;
|
|
||||||
static uint8_t companies_num = 1;
|
static uint8_t companies_num = 1;
|
||||||
static uint8_t companies[] = {
|
static uint8_t companies[] = {
|
||||||
0x00, 0x19, 0x58 //BT SIG registered CompanyID
|
0x00, 0x19, 0x58 //BT SIG registered CompanyID
|
||||||
@ -625,8 +612,6 @@ static void avrcp_connection_establishment_packet_handler(uint8_t packet_type, u
|
|||||||
printf("AVRCP connection established: avrcp_cid 0x%02x.\n", avrcp_cid);
|
printf("AVRCP connection established: avrcp_cid 0x%02x.\n", avrcp_cid);
|
||||||
|
|
||||||
avrcp_target_set_now_playing_info(avrcp_cid, NULL, sizeof(tracks)/sizeof(avrcp_track_t));
|
avrcp_target_set_now_playing_info(avrcp_cid, NULL, sizeof(tracks)/sizeof(avrcp_track_t));
|
||||||
avrcp_target_set_unit_info(avrcp_cid, AVRCP_SUBUNIT_TYPE_AUDIO, company_id);
|
|
||||||
avrcp_target_set_subunit_info(avrcp_cid, AVRCP_SUBUNIT_TYPE_AUDIO, (uint8_t *)subunit_info, sizeof(subunit_info));
|
|
||||||
|
|
||||||
// Set PTS default TSPX_max_avc_fragments = 10
|
// Set PTS default TSPX_max_avc_fragments = 10
|
||||||
avrcp_controller_set_max_num_fragments(avrcp_cid, 10);
|
avrcp_controller_set_max_num_fragments(avrcp_cid, 10);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user