queue RLS RSP instead of sending right away

This commit is contained in:
matthias.ringwald@gmail.com 2014-01-30 16:56:56 +00:00
parent e6606e1fc1
commit 677957dd8b

View File

@ -1638,16 +1638,10 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann
if (event->type == 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
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);
rfcomm_send_uih_rls_rsp(multiplexer, channel->dlci, event_rls->line_status);
return;
return;
}
// 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
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
@ -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);
break;
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) {
uint8_t new_credits = channel->new_credits_incoming;
channel->new_credits_incoming = 0;
rfcomm_channel_send_credits(channel, new_credits);
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;
case CH_EVT_RCVD_CREDITS: {
// 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));
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:
break;
}