l2cap.c (f32b992e39a13d8c9dd57e49b105856b617efe25) | l2cap.c (38e5900edab6d6f4185c46c15f3c021bfbd9781c) |
---|---|
1/* 2 * l2cap.c 3 * 4 * Logical Link Control and Adaption Protocl (L2CAP) 5 * 6 * Created by Matthias Ringwald on 5/16/09. 7 */ 8 --- 157 unchanged lines hidden (view full) --- 166 167 (*event_packet_handler)(packet, size); 168} 169 170void l2cap_signaling_handler(l2cap_channel_t *channel, uint8_t *packet, uint16_t size){ 171 172 static uint8_t config_options[] = { 1, 2, 150, 0}; // mtu = 48 173 | 1/* 2 * l2cap.c 3 * 4 * Logical Link Control and Adaption Protocl (L2CAP) 5 * 6 * Created by Matthias Ringwald on 5/16/09. 7 */ 8 --- 157 unchanged lines hidden (view full) --- 166 167 (*event_packet_handler)(packet, size); 168} 169 170void l2cap_signaling_handler(l2cap_channel_t *channel, uint8_t *packet, uint16_t size){ 171 172 static uint8_t config_options[] = { 1, 2, 150, 0}; // mtu = 48 173 |
174 uint8_t code = READ_L2CAP_SIGNALING_CODE( packet ); 175 uint8_t identifier = READ_L2CAP_SIGNALING_IDENTIFIER( packet ); | 174 uint8_t code = READ_L2CAP_SIGNALING_CODE( packet ); 175 uint8_t identifier = READ_L2CAP_SIGNALING_IDENTIFIER( packet ); 176 uint16_t result = 0; |
176 177 switch (channel->state) { 178 179 case L2CAP_STATE_WAIT_CONNECT_RSP: 180 switch (code){ 181 case CONNECTION_RESPONSE: | 177 178 switch (channel->state) { 179 180 case L2CAP_STATE_WAIT_CONNECT_RSP: 181 switch (code){ 182 case CONNECTION_RESPONSE: |
182 if ( READ_BT_16 (packet, L2CAP_SIGNALING_DATA_OFFSET+3) == 0){ 183 // successfull connection 184 channel->dest_cid = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET + 0); 185 channel->sig_id = l2cap_next_sig_id(); 186 l2cap_send_signaling_packet(channel->handle, CONFIGURE_REQUEST, channel->sig_id, channel->dest_cid, 0, 4, &config_options); 187 channel->state = L2CAP_STATE_WAIT_CONFIG_REQ_RSP; 188 } else { 189 // map l2cap connection response result to BTstack status enumeration 190 l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL 191 + READ_BT_16 (packet, L2CAP_SIGNALING_DATA_OFFSET+3)); | 183 result = READ_BT_16 (packet, L2CAP_SIGNALING_DATA_OFFSET+3); 184 switch (result) { 185 case 0: 186 // successfull connection 187 channel->dest_cid = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET + 0); 188 channel->sig_id = l2cap_next_sig_id(); 189 l2cap_send_signaling_packet(channel->handle, CONFIGURE_REQUEST, channel->sig_id, channel->dest_cid, 0, 4, &config_options); 190 channel->state = L2CAP_STATE_WAIT_CONFIG_REQ_RSP; 191 break; 192 case 1: 193 // connection pending. get some coffee 194 break; 195 default: 196 // map l2cap connection response result to BTstack status enumeration 197 l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result); 198 break; |
192 } 193 break; | 199 } 200 break; |
201 202 default: |
|
194 //@TODO: implement other signaling packets | 203 //@TODO: implement other signaling packets |
204 break; |
|
195 } 196 break; 197 198 case L2CAP_STATE_WAIT_CONFIG_REQ_RSP: 199 switch (code) { 200 case CONFIGURE_RESPONSE: 201 channel->state = L2CAP_STATE_WAIT_CONFIG_REQ; 202 break; --- 154 unchanged lines hidden --- | 205 } 206 break; 207 208 case L2CAP_STATE_WAIT_CONFIG_REQ_RSP: 209 switch (code) { 210 case CONFIGURE_RESPONSE: 211 channel->state = L2CAP_STATE_WAIT_CONFIG_REQ; 212 break; --- 154 unchanged lines hidden --- |