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