--- /dev/null
+#ifndef _BT_L2CAP_H
+#define _BT_L2CAP_H
+
+
+#define L2CAP_CID_SIGNALING 0x0001
+#define L2CAP_CID_CONNECTIONLESS_CHANNEL 0x0002
+#define L2CAP_CID_ATTRIBUTE_PROTOCOL 0x0004
+#define L2CAP_CID_SIGNALING_LE 0x0005
+#define L2CAP_CID_SECURITY_MANAGER_PROTOCOL 0x0006
+
+typedef enum {
+ COMMAND_REJECT = 1,
+ CONNECTION_REQUEST,
+ CONNECTION_RESPONSE,
+ CONFIGURE_REQUEST,
+ CONFIGURE_RESPONSE,
+ DISCONNECTION_REQUEST,
+ DISCONNECTION_RESPONSE,
+ ECHO_REQUEST,
+ ECHO_RESPONSE,
+ INFORMATION_REQUEST,
+ INFORMATION_RESPONSE
+} L2CAP_SIGNALING_COMMANDS;
+
+typedef enum {
+ PB_FIRST_NON_FLUSH = 0,
+ PB_CONTINUE_FRAGMENT,
+ PB_FIRST_FLUSHABLE,
+ PB_COMPLETE_PDU
+} L2CAP_PB_FLAG;
+
+typedef enum {
+ BC_NO_BROADCAST = 0,
+ BC_ACTIVE_SLAVE,
+ BC_PARKED_SLAVE,
+ BC_RESERVED
+} L2CAP_BC_FLAG;
+
+// Connection result values
+#define BT_L2CAP_CON_RES_SUCCESS 0x0000
+#define BT_L2CAP_CON_RES_PENDING 0x0001
+#define BT_L2CAP_CON_RES_REFUSED_PSM 0x0002
+#define BT_L2CAP_CON_RES_REFUSED_SECURITY 0x0003
+#define BT_L2CAP_CON_RES_REFUSED_RSRC 0x0004
+
+#define BT_L2CAP_CON_STAT_NOINFO 0x0000
+#define BT_L2CAP_CON_STAT_AUTHEN_PENDING 0x0001
+#define BT_L2CAP_CON_STAT_AUTHOR_PENDING 0x0002
+
+typedef enum {
+ BT_L2CAP_CON_IDLE = 0,
+ BT_L2CAP_CON_CONNECTED
+} bt_l2cap_con_state_t;
+
+// describes the L2CAP connection
+typedef struct {
+ bt_l2cap_con_state_t cstate;
+
+ uint16_t hci_handle;
+ uint16_t PSM; // PSM of this connection
+
+ uint16_t locCID; // our local CID
+ uint16_t remCID; // remote host CID
+
+ uint16_t locMTU;
+ uint16_t remMTU;
+} bt_l2cap_con_t;
+
+void init_l2cap(void);
+void bt_l2cap_proc_dyn_channel(const uint16_t channel, const uint16_t handle, const void *mdat, uint16_t mlen);
+uint8_t bt_l2cap_get_connected(const uint16_t channel);
+void bt_l2cap_send_channel(const uint16_t channel, const void *mdat, uint16_t mlen);
+void bt_l2cap_proc_signalling(const uint16_t handle, unsigned char *mdat, uint16_t mlen);
+void bt_l2cap_handle_connection_request(const uint16_t handle, const uint8_t ident, const uint16_t PSM, const uint16_t src_CID);
+
+#endif
+