xref: /btstack/src/l2cap.h (revision 87ea0ea477aa22c68db5bbdd668821868988e164)
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"
13da269baaSmatthias.ringwald #include "utils.h"
14da269baaSmatthias.ringwald 
15da269baaSmatthias.ringwald #define L2CAP_SIG_ID_INVALID 0
16da269baaSmatthias.ringwald 
17da269baaSmatthias.ringwald typedef enum {
18da269baaSmatthias.ringwald     L2CAP_STATE_CLOSED,           // no baseband
19*87ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONNECT,     // from application
20*87ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONNECT_RSP, // from peer
21*87ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONFIG_REQ_RSP,
22*87ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONFIG_REQ,
23da269baaSmatthias.ringwald     L2CAP_STATE_OPEN,
24*87ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_DISCONNECT,  // from application
25da269baaSmatthias.ringwald } L2CAP_STATE;
2643625864Smatthias.ringwald 
2716833f0aSmatthias.ringwald typedef struct {
28*87ea0ea4Smatthias.ringwald     // linked list - assert: first field
29*87ea0ea4Smatthias.ringwald     linked_item_t    item;
30*87ea0ea4Smatthias.ringwald 
31da269baaSmatthias.ringwald     L2CAP_STATE state;
32da269baaSmatthias.ringwald     uint8_t   sig_id;
33da269baaSmatthias.ringwald     uint16_t  local_cid;
34*87ea0ea4Smatthias.ringwald     uint16_t  dest_cid;
35da269baaSmatthias.ringwald     bd_addr_t address;
36da269baaSmatthias.ringwald     uint16_t  psm;
37da269baaSmatthias.ringwald     hci_con_handle_t handle;
38da269baaSmatthias.ringwald     void (*event_callback)(uint8_t *packet, uint16_t size);
39da269baaSmatthias.ringwald     void (*data_callback)(uint8_t *packet, uint16_t size);
40da269baaSmatthias.ringwald     // uint16_t mtu_incoming;
41da269baaSmatthias.ringwald     // uint16_t mtu_outgoing;
42da269baaSmatthias.ringwald     // uint16_t flush_timeout_incoming;
43da269baaSmatthias.ringwald     // uint16_t flush_timeout_outgoing;
4416833f0aSmatthias.ringwald } l2cap_channel_t;
4516833f0aSmatthias.ringwald 
4616833f0aSmatthias.ringwald typedef struct {
4716833f0aSmatthias.ringwald 
4816833f0aSmatthias.ringwald } l2cap_service_t;
4916833f0aSmatthias.ringwald 
5043625864Smatthias.ringwald void l2cap_init();
5143625864Smatthias.ringwald int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, ...);
52