xref: /btstack/src/l2cap.h (revision da269baadbd14fc9cd936407c8db18bb4970027c)
143625864Smatthias.ringwald /*
243625864Smatthias.ringwald  *  l2cap.h
343625864Smatthias.ringwald  *
443625864Smatthias.ringwald  *  Logical Link Control and Adaption Protocl (L2CAP)
543625864Smatthias.ringwald  *
643625864Smatthias.ringwald  *  Created by Matthias Ringwald on 5/16/09.
743625864Smatthias.ringwald  */
843625864Smatthias.ringwald 
9fd7ed8d4Smatthias.ringwald #pragma once
10fd7ed8d4Smatthias.ringwald 
1143625864Smatthias.ringwald #include "hci.h"
1295cbd947Smatthias.ringwald #include "l2cap_signaling.h"
13*da269baaSmatthias.ringwald #include "utils.h"
14*da269baaSmatthias.ringwald 
15*da269baaSmatthias.ringwald #define L2CAP_SIG_ID_INVALID 0
16*da269baaSmatthias.ringwald 
17*da269baaSmatthias.ringwald typedef enum {
18*da269baaSmatthias.ringwald     L2CAP_STATE_CLOSED,             // no baseband
19*da269baaSmatthias.ringwald     L2CAP_STATE_CONNECTED,          // baseband connection
20*da269baaSmatthias.ringwald     L2CAP_STATE_W4_L2CA_CONNECTION_RSP,  // from application
21*da269baaSmatthias.ringwald     L2CAP_STATE_W4_L2CAP_CONNECTION_RSP, // from peer
22*da269baaSmatthias.ringwald     L2CAP_STATE_CONFIG,
23*da269baaSmatthias.ringwald     L2CAP_STATE_OPEN,
24*da269baaSmatthias.ringwald     L2CAP_STATE_W4_L2CA_DISCON_RSP,  // from application
25*da269baaSmatthias.ringwald     L2CAP_STATE_W4_L2CAP_DISCON_RSP, // from peer
26*da269baaSmatthias.ringwald } L2CAP_STATE;
2743625864Smatthias.ringwald 
2816833f0aSmatthias.ringwald typedef struct {
29*da269baaSmatthias.ringwald     L2CAP_STATE state;
30*da269baaSmatthias.ringwald     uint8_t   sig_id;
31*da269baaSmatthias.ringwald     uint16_t  local_cid;
32*da269baaSmatthias.ringwald     bd_addr_t address;
33*da269baaSmatthias.ringwald     uint16_t  psm;
34*da269baaSmatthias.ringwald     hci_con_handle_t handle;
35*da269baaSmatthias.ringwald     void (*event_callback)(uint8_t *packet, uint16_t size);
36*da269baaSmatthias.ringwald     void (*data_callback)(uint8_t *packet, uint16_t size);
37*da269baaSmatthias.ringwald     // uint16_t mtu_incoming;
38*da269baaSmatthias.ringwald     // uint16_t mtu_outgoing;
39*da269baaSmatthias.ringwald     // uint16_t flush_timeout_incoming;
40*da269baaSmatthias.ringwald     // uint16_t flush_timeout_outgoing;
4116833f0aSmatthias.ringwald } l2cap_channel_t;
4216833f0aSmatthias.ringwald 
4316833f0aSmatthias.ringwald typedef struct {
4416833f0aSmatthias.ringwald 
4516833f0aSmatthias.ringwald } l2cap_service_t;
4616833f0aSmatthias.ringwald 
4743625864Smatthias.ringwald void l2cap_init();
4843625864Smatthias.ringwald int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, ...);
49