mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-09 21:40:23 +00:00
queue RLS RSP instead of sending right away
This commit is contained in:
parent
e6606e1fc1
commit
677957dd8b
39
src/rfcomm.c
39
src/rfcomm.c
@ -1638,16 +1638,10 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann
|
|||||||
|
|
||||||
if (event->type == CH_EVT_RCVD_RLS_CMD){
|
if (event->type == CH_EVT_RCVD_RLS_CMD){
|
||||||
rfcomm_channel_event_rls_t * event_rls = (rfcomm_channel_event_rls_t*) event;
|
rfcomm_channel_event_rls_t * event_rls = (rfcomm_channel_event_rls_t*) event;
|
||||||
// orig
|
channel->rls_line_status = event_rls->line_status & 0x0f;
|
||||||
// channel->rls_line_status = event_rls->line_status & 0x0f;
|
|
||||||
// log_info("CH_EVT_RCVD_RLS_CMD setting line status to 0x%0x", channel->rls_line_status);
|
|
||||||
// rfcomm_emit_remote_line_status(channel, event_rls->line_status);
|
|
||||||
|
|
||||||
// direct response
|
|
||||||
log_info("CH_EVT_RCVD_RLS_CMD setting line status to 0x%0x", channel->rls_line_status);
|
log_info("CH_EVT_RCVD_RLS_CMD setting line status to 0x%0x", channel->rls_line_status);
|
||||||
rfcomm_emit_remote_line_status(channel, event_rls->line_status);
|
rfcomm_emit_remote_line_status(channel, event_rls->line_status);
|
||||||
rfcomm_send_uih_rls_rsp(multiplexer, channel->dlci, event_rls->line_status);
|
return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: integrate in common swich
|
// TODO: integrate in common swich
|
||||||
@ -1665,6 +1659,13 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann
|
|||||||
rfcomm_send_uih_msc_rsp(multiplexer, channel->dlci, 0x8d); // ea=1,fc=0,rtc=1,rtr=1,ic=0,dv=1
|
rfcomm_send_uih_msc_rsp(multiplexer, channel->dlci, 0x8d); // ea=1,fc=0,rtc=1,rtr=1,ic=0,dv=1
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (channel->rls_line_status != RFCOMM_RLS_STATUS_INVALID){
|
||||||
|
log_info("Sending RLS RSP 0x%0x", channel->rls_line_status);
|
||||||
|
uint8_t line_status = channel->rls_line_status;
|
||||||
|
channel->rls_line_status = RFCOMM_RLS_STATUS_INVALID;
|
||||||
|
rfcomm_send_uih_rls_rsp(multiplexer, channel->dlci, line_status);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// emit MSC status to app
|
// emit MSC status to app
|
||||||
@ -1852,21 +1853,12 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann
|
|||||||
rfcomm_channel_state_add(channel, RFCOMM_CHANNEL_STATE_VAR_SEND_MSC_RSP);
|
rfcomm_channel_state_add(channel, RFCOMM_CHANNEL_STATE_VAR_SEND_MSC_RSP);
|
||||||
break;
|
break;
|
||||||
case CH_EVT_READY_TO_SEND:
|
case CH_EVT_READY_TO_SEND:
|
||||||
log_info("CH_EVT_READY_TO_SEND line status to 0x%0x", channel->rls_line_status);
|
|
||||||
|
|
||||||
if (channel->new_credits_incoming) {
|
if (channel->new_credits_incoming) {
|
||||||
uint8_t new_credits = channel->new_credits_incoming;
|
uint8_t new_credits = channel->new_credits_incoming;
|
||||||
channel->new_credits_incoming = 0;
|
channel->new_credits_incoming = 0;
|
||||||
rfcomm_channel_send_credits(channel, new_credits);
|
rfcomm_channel_send_credits(channel, new_credits);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (channel->rls_line_status != RFCOMM_RLS_STATUS_INVALID){
|
|
||||||
log_info("Should send line status to 0x%0x", channel->rls_line_status);
|
|
||||||
uint8_t line_status = channel->rls_line_status;
|
|
||||||
channel->rls_line_status = RFCOMM_RLS_STATUS_INVALID;
|
|
||||||
rfcomm_send_uih_rls_rsp(multiplexer, channel->dlci, line_status);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CH_EVT_RCVD_CREDITS: {
|
case CH_EVT_RCVD_CREDITS: {
|
||||||
// notify daemon -> might trigger re-try of parked connections
|
// notify daemon -> might trigger re-try of parked connections
|
||||||
@ -1874,19 +1866,6 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann
|
|||||||
(*app_packet_handler)(channel->connection, DAEMON_EVENT_PACKET, channel->rfcomm_cid, event, sizeof(event));
|
(*app_packet_handler)(channel->connection, DAEMON_EVENT_PACKET, channel->rfcomm_cid, event, sizeof(event));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CH_EVT_RCVD_RLS_CMD: {
|
|
||||||
rfcomm_channel_event_rls_t * event_rls = (rfcomm_channel_event_rls_t*) event;
|
|
||||||
// orig
|
|
||||||
// channel->rls_line_status = event_rls->line_status & 0x0f;
|
|
||||||
// log_info("CH_EVT_RCVD_RLS_CMD setting line status to 0x%0x", channel->rls_line_status);
|
|
||||||
// rfcomm_emit_remote_line_status(channel, event_rls->line_status);
|
|
||||||
|
|
||||||
// direct response
|
|
||||||
log_info("CH_EVT_RCVD_RLS_CMD setting line status to 0x%0x", channel->rls_line_status);
|
|
||||||
rfcomm_emit_remote_line_status(channel, event_rls->line_status);
|
|
||||||
rfcomm_send_uih_rls_rsp(multiplexer, channel->dlci, event_rls->line_status);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user