set RPN Data defaults on channel init, set parameter mask for RPN request (CMD without RPN Data)

This commit is contained in:
matthias.ringwald@gmail.com 2014-01-12 09:57:25 +00:00
parent 8a33c09219
commit 9af7a4ebd4
2 changed files with 8 additions and 3 deletions

View File

@ -360,6 +360,9 @@ static void rfcomm_channel_initialize(rfcomm_channel_t *channel, rfcomm_multiple
channel->credits_outgoing = 0; channel->credits_outgoing = 0;
channel->packets_granted = 0; channel->packets_granted = 0;
// set defaults for port configuration (even for services)
rfcomm_rpn_data_set_defaults(&channel->rpn_data);
// incoming flow control not active // incoming flow control not active
channel->new_credits_incoming = 0x30; channel->new_credits_incoming = 0x30;
channel->incoming_flow_control = 0; channel->incoming_flow_control = 0;
@ -379,6 +382,7 @@ static void rfcomm_channel_initialize(rfcomm_channel_t *channel, rfcomm_multiple
// outgoing connection // outgoing connection
channel->outgoing = 1; channel->outgoing = 1;
channel->dlci = (server_channel << 1) | (multiplexer->outgoing ^ 1); channel->dlci = (server_channel << 1) | (multiplexer->outgoing ^ 1);
} }
} }
@ -1564,8 +1568,9 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann
// TODO: integrate in common switch // TODO: integrate in common switch
if (event->type == CH_EVT_RCVD_RPN_REQ){ if (event->type == CH_EVT_RCVD_RPN_REQ){
// default rpn rsp // all values are valid
rfcomm_rpn_data_set_defaults(&channel->rpn_data); channel->rpn_data->parameter_mask_0 = 0x7f;
channel->rpn_data->parameter_mask_1 = 0x3f;
rfcomm_channel_state_add(channel, RFCOMM_CHANNEL_STATE_VAR_SEND_RPN_RSP); rfcomm_channel_state_add(channel, RFCOMM_CHANNEL_STATE_VAR_SEND_RPN_RSP);
return; return;
} }

View File

@ -320,7 +320,7 @@ typedef struct {
// negotiated frame size // negotiated frame size
uint16_t max_frame_size; uint16_t max_frame_size;
// rpn data // local rpn data
rfcomm_rpn_data_t rpn_data; rfcomm_rpn_data_t rpn_data;
// rls line status. RFCOMM_RLS_STATUS_INVALID if not set // rls line status. RFCOMM_RLS_STATUS_INVALID if not set