mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-24 15:02:43 +00:00
avdtp: fix reconfigure and transfer control
This commit is contained in:
parent
af45e36ab8
commit
2bb3471f99
@ -327,6 +327,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
|||||||
cid = avdtp_subevent_signaling_accept_get_avdtp_cid(packet);
|
cid = avdtp_subevent_signaling_accept_get_avdtp_cid(packet);
|
||||||
loc_seid = avdtp_subevent_signaling_accept_get_local_seid(packet);
|
loc_seid = avdtp_subevent_signaling_accept_get_local_seid(packet);
|
||||||
a2dp_emit_cmd_rejected(a2dp_sink_context.a2dp_callback, packet, size);
|
a2dp_emit_cmd_rejected(a2dp_sink_context.a2dp_callback, packet, size);
|
||||||
|
app_state = A2DP_IDLE;
|
||||||
break;
|
break;
|
||||||
case AVDTP_SUBEVENT_STREAMING_CONNECTION_RELEASED:
|
case AVDTP_SUBEVENT_STREAMING_CONNECTION_RELEASED:
|
||||||
cid = avdtp_subevent_streaming_connection_released_get_avdtp_cid(packet);
|
cid = avdtp_subevent_streaming_connection_released_get_avdtp_cid(packet);
|
||||||
|
@ -307,7 +307,7 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t
|
|||||||
break;
|
break;
|
||||||
case AVDTP_SI_START:
|
case AVDTP_SI_START:
|
||||||
if (stream_endpoint->state != AVDTP_STREAM_ENDPOINT_OPENED){
|
if (stream_endpoint->state != AVDTP_STREAM_ENDPOINT_OPENED){
|
||||||
log_info("ACP: REJECT AVDTP_SI_START, BAD_STATE");
|
log_info("ACP: REJECT AVDTP_SI_START, BAD_STATE, state %d", stream_endpoint->state);
|
||||||
stream_endpoint->acceptor_config_state = AVDTP_ACCEPTOR_W2_REJECT_CATEGORY_WITH_ERROR_CODE;
|
stream_endpoint->acceptor_config_state = AVDTP_ACCEPTOR_W2_REJECT_CATEGORY_WITH_ERROR_CODE;
|
||||||
connection->error_code = BAD_STATE;
|
connection->error_code = BAD_STATE;
|
||||||
connection->reject_signal_identifier = connection->signaling_packet.signal_identifier;
|
connection->reject_signal_identifier = connection->signaling_packet.signal_identifier;
|
||||||
|
@ -155,9 +155,9 @@ void avdtp_initiator_stream_config_subsm(avdtp_connection_t * connection, uint8_
|
|||||||
|
|
||||||
if (!is_avdtp_remote_seid_registered(stream_endpoint)){
|
if (!is_avdtp_remote_seid_registered(stream_endpoint)){
|
||||||
stream_endpoint->remote_sep = sep;
|
stream_endpoint->remote_sep = sep;
|
||||||
stream_endpoint->state = AVDTP_STREAM_ENDPOINT_CONFIGURED;
|
|
||||||
log_info("INT: update seid %d, to %p", stream_endpoint->remote_sep.seid, stream_endpoint);
|
log_info("INT: update seid %d, to %p", stream_endpoint->remote_sep.seid, stream_endpoint);
|
||||||
}
|
}
|
||||||
|
stream_endpoint->state = AVDTP_STREAM_ENDPOINT_OPENED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AVDTP_SI_SET_CONFIGURATION:{
|
case AVDTP_SI_SET_CONFIGURATION:{
|
||||||
|
@ -490,7 +490,7 @@ void avdtp_prepare_capabilities(avdtp_signaling_packet_t * signaling_packet, uin
|
|||||||
|
|
||||||
for (i = 1; i < 9; i++){
|
for (i = 1; i < 9; i++){
|
||||||
int registered_category = get_bit16(registered_service_categories, i);
|
int registered_category = get_bit16(registered_service_categories, i);
|
||||||
if (!registered_category && (identifier == AVDTP_SI_SET_CONFIGURATION || identifier == AVDTP_SI_RECONFIGURE)){
|
if (!registered_category && (identifier == AVDTP_SI_SET_CONFIGURATION)){
|
||||||
// TODO: introduce bitmap of mandatory categories
|
// TODO: introduce bitmap of mandatory categories
|
||||||
if (i == 1){
|
if (i == 1){
|
||||||
registered_category = 1;
|
registered_category = 1;
|
||||||
@ -502,7 +502,6 @@ void avdtp_prepare_capabilities(avdtp_signaling_packet_t * signaling_packet, uin
|
|||||||
signaling_packet->size += avdtp_pack_service_capabilities(signaling_packet->command+signaling_packet->size, sizeof(signaling_packet->command)-signaling_packet->size, capabilities, (avdtp_service_category_t)i, pack_all_capabilities);
|
signaling_packet->size += avdtp_pack_service_capabilities(signaling_packet->command+signaling_packet->size, sizeof(signaling_packet->command)-signaling_packet->size, capabilities, (avdtp_service_category_t)i, pack_all_capabilities);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
signaling_packet->signal_identifier = (avdtp_signal_identifier_t)identifier;
|
signaling_packet->signal_identifier = (avdtp_signal_identifier_t)identifier;
|
||||||
signaling_packet->transaction_label = transaction_label;
|
signaling_packet->transaction_label = transaction_label;
|
||||||
}
|
}
|
||||||
|
@ -609,6 +609,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
|||||||
break;
|
break;
|
||||||
case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CAPABILITY:
|
case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CAPABILITY:
|
||||||
printf("Received SBC codec capabilities\n");
|
printf("Received SBC codec capabilities\n");
|
||||||
|
|
||||||
sbc_capability.sampling_frequency_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_sampling_frequency_bitmap(packet);
|
sbc_capability.sampling_frequency_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_sampling_frequency_bitmap(packet);
|
||||||
sbc_capability.channel_mode_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_channel_mode_bitmap(packet);
|
sbc_capability.channel_mode_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_channel_mode_bitmap(packet);
|
||||||
sbc_capability.block_length_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_block_length_bitmap(packet);
|
sbc_capability.block_length_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_block_length_bitmap(packet);
|
||||||
@ -705,9 +706,12 @@ static uint8_t media_sbc_codec_configuration[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t media_sbc_codec_reconfiguration[] = {
|
static uint8_t media_sbc_codec_reconfiguration[] = {
|
||||||
(AVDTP_SBC_44100 << 4) | AVDTP_SBC_STEREO,
|
// (AVDTP_SBC_44100 << 4) | AVDTP_SBC_STEREO,
|
||||||
(AVDTP_SBC_BLOCK_LENGTH_16 << 4) | (AVDTP_SBC_SUBBANDS_8 << 2) | AVDTP_SBC_ALLOCATION_METHOD_SNR,
|
// (AVDTP_SBC_BLOCK_LENGTH_16 << 4) | (AVDTP_SBC_SUBBANDS_8 << 2) | AVDTP_SBC_ALLOCATION_METHOD_SNR,
|
||||||
2, 53
|
// 32, 32
|
||||||
|
(AVDTP_SBC_44100 << 4) | AVDTP_SBC_MONO,
|
||||||
|
(AVDTP_SBC_BLOCK_LENGTH_8 << 4) | (AVDTP_SBC_SUBBANDS_8 << 2) | AVDTP_SBC_ALLOCATION_METHOD_LOUDNESS,
|
||||||
|
32, 32
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_BTSTACK_STDIN
|
#ifdef HAVE_BTSTACK_STDIN
|
||||||
@ -773,6 +777,7 @@ static void stdin_process(char cmd){
|
|||||||
break;
|
break;
|
||||||
case 'R':
|
case 'R':
|
||||||
printf("Reconfigure stream endpoint with seid %d\n", remote_seid);
|
printf("Reconfigure stream endpoint with seid %d\n", remote_seid);
|
||||||
|
remote_configuration_bitmap = 0;
|
||||||
remote_configuration_bitmap = store_bit16(remote_configuration_bitmap, AVDTP_MEDIA_CODEC, 1);
|
remote_configuration_bitmap = store_bit16(remote_configuration_bitmap, AVDTP_MEDIA_CODEC, 1);
|
||||||
remote_configuration.media_codec.media_type = AVDTP_AUDIO;
|
remote_configuration.media_codec.media_type = AVDTP_AUDIO;
|
||||||
remote_configuration.media_codec.media_codec_type = AVDTP_CODEC_SBC;
|
remote_configuration.media_codec.media_codec_type = AVDTP_CODEC_SBC;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user