mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-25 16:43:28 +00:00
respond to L2CAP ECHO_REQUEST and INFORMATION_REQUEST
This commit is contained in:
parent
ddce1d8d00
commit
4da22db5dc
45
src/l2cap.c
45
src/l2cap.c
@ -583,20 +583,49 @@ void l2cap_acl_handler( uint8_t *packet, uint16_t size ){
|
|||||||
// Signaling Packet?
|
// Signaling Packet?
|
||||||
if (channel_id == 1) {
|
if (channel_id == 1) {
|
||||||
|
|
||||||
if (code < 1 || code >= 8){
|
if (code < 1 || code == ECHO_RESPONSE || code > INFORMATION_REQUEST){
|
||||||
// not for a particular channel, and not CONNECTION_REQUEST
|
// not for a particular channel, and not CONNECTION_REQUEST, ECHO_[REQUEST|RESPONSE], INFORMATION_REQUEST
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Signaling Identifier
|
// Get Signaling Identifier
|
||||||
uint8_t sig_id = READ_L2CAP_SIGNALING_IDENTIFIER(packet);
|
uint8_t sig_id = READ_L2CAP_SIGNALING_IDENTIFIER(packet);
|
||||||
|
|
||||||
// CONNECTION_REQUEST
|
// handle general requests
|
||||||
if (code == CONNECTION_REQUEST){
|
switch(code) {
|
||||||
uint16_t psm = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET);
|
|
||||||
uint16_t source_cid = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET+2);
|
case CONNECTION_REQUEST: {
|
||||||
l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
|
uint16_t psm = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET);
|
||||||
return;
|
uint16_t source_cid = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET+2);
|
||||||
|
l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
case ECHO_REQUEST: {
|
||||||
|
// send back packet
|
||||||
|
uint16_t len = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET);
|
||||||
|
l2cap_send_signaling_packet(handle, ECHO_RESPONSE, sig_id,
|
||||||
|
size - L2CAP_SIGNALING_DATA_OFFSET,
|
||||||
|
&packet[L2CAP_SIGNALING_DATA_OFFSET]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
case INFORMATION_REQUEST: {
|
||||||
|
// we neither support connectionless L2CAP data nor support any flow control modes yet
|
||||||
|
uint16_t infoType = READ_BT_16(packet, L2CAP_SIGNALING_DATA_OFFSET);
|
||||||
|
if (infoType == 2) {
|
||||||
|
uint32_t features = 0;
|
||||||
|
// extended features request supported, however no features present
|
||||||
|
l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, infoType, 0, 4, &features);
|
||||||
|
} else {
|
||||||
|
// all other types are not supported
|
||||||
|
l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, infoType, 1, 0, NULL);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get potential destination CID
|
// Get potential destination CID
|
||||||
|
Loading…
x
Reference in New Issue
Block a user