xref: /btstack/src/l2cap.h (revision 1e6aba4769cc9f1f9e6a695a7254eb66be5d4943)
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"
14*1e6aba47Smatthias.ringwald #include "socket_connection.h"
15da269baaSmatthias.ringwald 
16da269baaSmatthias.ringwald #define L2CAP_SIG_ID_INVALID 0
17da269baaSmatthias.ringwald 
18da269baaSmatthias.ringwald typedef enum {
19da269baaSmatthias.ringwald     L2CAP_STATE_CLOSED,           // no baseband
2087ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONNECT,     // from application
2187ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONNECT_RSP, // from peer
2287ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONFIG_REQ_RSP,
2387ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_CONFIG_REQ,
24da269baaSmatthias.ringwald     L2CAP_STATE_OPEN,
2587ea0ea4Smatthias.ringwald     L2CAP_STATE_WAIT_DISCONNECT,  // from application
26da269baaSmatthias.ringwald } L2CAP_STATE;
2743625864Smatthias.ringwald 
2816833f0aSmatthias.ringwald typedef struct {
2987ea0ea4Smatthias.ringwald     // linked list - assert: first field
3087ea0ea4Smatthias.ringwald     linked_item_t    item;
3187ea0ea4Smatthias.ringwald 
32da269baaSmatthias.ringwald     L2CAP_STATE state;
33da269baaSmatthias.ringwald     uint8_t   sig_id;
34bb53b291Smatthias.ringwald     uint16_t  source_cid;
3587ea0ea4Smatthias.ringwald     uint16_t  dest_cid;
36da269baaSmatthias.ringwald     bd_addr_t address;
37da269baaSmatthias.ringwald     uint16_t  psm;
38da269baaSmatthias.ringwald     hci_con_handle_t handle;
39*1e6aba47Smatthias.ringwald     connection_t *connection;
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();
51*1e6aba47Smatthias.ringwald void l2cap_create_channel_internal(connection_t * connection, bd_addr_t address, uint16_t psm);
52*1e6aba47Smatthias.ringwald void l2cap_disconnect_internal(uint16_t source_cid, uint8_t reason);
53*1e6aba47Smatthias.ringwald void l2cap_send_internal(uint16_t source_cid, uint8_t *data, uint16_t len);
54*1e6aba47Smatthias.ringwald void l2cap_acl_handler( uint8_t *packet, uint16_t size );
55*1e6aba47Smatthias.ringwald void l2cap_event_handler( uint8_t *packet, uint16_t size );
56*1e6aba47Smatthias.ringwald 
57*1e6aba47Smatthias.ringwald 
58