36#ifndef _NETGRAPH_BTSOCKET_RFCOMM_H_
37#define _NETGRAPH_BTSOCKET_RFCOMM_H_
47#define RFCOMM_DEFAULT_MTU 667
48#define RFCOMM_MAX_MTU 1024
50#define RFCOMM_DEFAULT_CREDITS 7
51#define RFCOMM_MAX_CREDITS 40
54#define RFCOMM_FRAME_SABM 0x2f
55#define RFCOMM_FRAME_DISC 0x43
56#define RFCOMM_FRAME_UA 0x63
57#define RFCOMM_FRAME_DM 0x0f
58#define RFCOMM_FRAME_UIH 0xef
61#define RFCOMM_MCC_TEST 0x08
62#define RFCOMM_MCC_FCON 0x28
63#define RFCOMM_MCC_FCOFF 0x18
64#define RFCOMM_MCC_MSC 0x38
65#define RFCOMM_MCC_RPN 0x24
66#define RFCOMM_MCC_RLS 0x14
67#define RFCOMM_MCC_PN 0x20
68#define RFCOMM_MCC_NSC 0x04
71#define RFCOMM_MODEM_FC 0x02
72#define RFCOMM_MODEM_RTC 0x04
73#define RFCOMM_MODEM_RTR 0x08
74#define RFCOMM_MODEM_IC 0x40
75#define RFCOMM_MODEM_DV 0x80
78#define RFCOMM_RPN_BR_2400 0x0
79#define RFCOMM_RPN_BR_4800 0x1
80#define RFCOMM_RPN_BR_7200 0x2
81#define RFCOMM_RPN_BR_9600 0x3
82#define RFCOMM_RPN_BR_19200 0x4
83#define RFCOMM_RPN_BR_38400 0x5
84#define RFCOMM_RPN_BR_57600 0x6
85#define RFCOMM_RPN_BR_115200 0x7
86#define RFCOMM_RPN_BR_230400 0x8
89#define RFCOMM_RPN_DATA_5 0x0
90#define RFCOMM_RPN_DATA_6 0x2
91#define RFCOMM_RPN_DATA_7 0x1
92#define RFCOMM_RPN_DATA_8 0x3
95#define RFCOMM_RPN_STOP_1 0
96#define RFCOMM_RPN_STOP_15 1
99#define RFCOMM_RPN_PARITY_NONE 0x0
100#define RFCOMM_RPN_PARITY_ODD 0x4
101#define RFCOMM_RPN_PARITY_EVEN 0x5
102#define RFCOMM_RPN_PARITY_MARK 0x6
103#define RFCOMM_RPN_PARITY_SPACE 0x7
106#define RFCOMM_RPN_FLOW_NONE 0x00
107#define RFCOMM_RPN_XON_CHAR 0x11
108#define RFCOMM_RPN_XOFF_CHAR 0x13
111#define RFCOMM_RPN_PM_BITRATE 0x0001
112#define RFCOMM_RPN_PM_DATA 0x0002
113#define RFCOMM_RPN_PM_STOP 0x0004
114#define RFCOMM_RPN_PM_PARITY 0x0008
115#define RFCOMM_RPN_PM_PARITY_TYPE 0x0010
116#define RFCOMM_RPN_PM_XON 0x0020
117#define RFCOMM_RPN_PM_XOFF 0x0040
118#define RFCOMM_RPN_PM_FLOW 0x3F00
119#define RFCOMM_RPN_PM_ALL 0x3F7F
184#define RFCOMM_DLCI(b) (((b) & 0xfc) >> 2)
185#define RFCOMM_CHANNEL(b) (((b) & 0xf8) >> 3)
186#define RFCOMM_DIRECTION(b) (((b) & 0x04) >> 2)
187#define RFCOMM_TYPE(b) (((b) & 0xef))
189#define RFCOMM_EA(b) (((b) & 0x01))
190#define RFCOMM_CR(b) (((b) & 0x02) >> 1)
191#define RFCOMM_PF(b) (((b) & 0x10) >> 4)
193#define RFCOMM_SRVCHANNEL(dlci) ((dlci) >> 1)
195#define RFCOMM_MKADDRESS(cr, dlci) \
196 ((((dlci) & 0x3f) << 2) | ((cr) << 1) | 0x01)
198#define RFCOMM_MKCONTROL(type, pf) ((((type) & 0xef) | ((pf) << 4)))
199#define RFCOMM_MKDLCI(dir, channel) ((((channel) & 0x1f) << 1) | (dir))
201#define RFCOMM_MKLEN8(len) (((len) << 1) | 1)
202#define RFCOMM_MKLEN16(len) ((len) << 1)
205#define RFCOMM_MCC_TYPE(b) (((b) & 0xfc) >> 2)
206#define RFCOMM_MCC_LENGTH(b) (((b) & 0xfe) >> 1)
207#define RFCOMM_MKMCC_TYPE(cr, type) ((((type) << 2) | ((cr) << 1) | 0x01))
210#define RFCOMM_RPN_DATA_BITS(line) ((line) & 0x3)
211#define RFCOMM_RPN_STOP_BITS(line) (((line) >> 2) & 0x1)
212#define RFCOMM_RPN_PARITY(line) (((line) >> 3) & 0x3)
213#define RFCOMM_MKRPN_LINE_SETTINGS(data, stop, parity) \
214 (((data) & 0x3) | (((stop) & 0x1) << 2) | (((parity) & 0x3) << 3))
222#define NG_BTSOCKET_RFCOMM_SENDSPACE \
223 (RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 2)
224#define NG_BTSOCKET_RFCOMM_RECVSPACE \
225 (RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 2)
238#define NG_BTSOCKET_RFCOMM_SESSION_CLOSED 0
239#define NG_BTSOCKET_RFCOMM_SESSION_LISTENING 1
240#define NG_BTSOCKET_RFCOMM_SESSION_CONNECTING 2
241#define NG_BTSOCKET_RFCOMM_SESSION_CONNECTED 3
242#define NG_BTSOCKET_RFCOMM_SESSION_OPEN 4
243#define NG_BTSOCKET_RFCOMM_SESSION_DISCONNECTING 5
246#define NG_BTSOCKET_RFCOMM_SESSION_INITIATOR (1 << 0)
247#define NG_BTSOCKET_RFCOMM_SESSION_LFC (1 << 1)
248#define NG_BTSOCKET_RFCOMM_SESSION_RFC (1 << 2)
250#define INITIATOR(s) \
251 (((s)->flags & NG_BTSOCKET_RFCOMM_SESSION_INITIATOR)? 1 : 0)
273#define NG_BTSOCKET_RFCOMM_DLC_TIMO (1 << 0)
274#define NG_BTSOCKET_RFCOMM_DLC_CFC (1 << 1)
275#define NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT (1 << 2)
276#define NG_BTSOCKET_RFCOMM_DLC_DETACHED (1 << 3)
277#define NG_BTSOCKET_RFCOMM_DLC_SENDING (1 << 4)
280#define NG_BTSOCKET_RFCOMM_DLC_CLOSED 0
281#define NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT 1
282#define NG_BTSOCKET_RFCOMM_DLC_CONFIGURING 2
283#define NG_BTSOCKET_RFCOMM_DLC_CONNECTING 3
284#define NG_BTSOCKET_RFCOMM_DLC_CONNECTED 4
285#define NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING 5
309#define so2rfcomm_pcb(so) \
310 ((struct ng_btsocket_rfcomm_pcb *)((so)->so_pcb))
327 struct ifnet *,
struct thread *);
334 struct sockaddr *,
struct mbuf *,
int ng_btsocket_rfcomm_ctloutput(struct socket *, struct sockopt *)
int ng_btsocket_rfcomm_send(struct socket *, int, struct mbuf *, struct sockaddr *, struct mbuf *, struct thread *)
int ng_btsocket_rfcomm_bind(struct socket *, struct sockaddr *, struct thread *)
int ng_btsocket_rfcomm_disconnect(struct socket *)
int ng_btsocket_rfcomm_listen(struct socket *, int, struct thread *)
int ng_btsocket_rfcomm_connect(struct socket *, struct sockaddr *, struct thread *)
void ng_btsocket_rfcomm_close(struct socket *)
struct ng_btsocket_rfcomm_pcb * ng_btsocket_rfcomm_pcb_p
void ng_btsocket_rfcomm_detach(struct socket *)
int ng_btsocket_rfcomm_peeraddr(struct socket *, struct sockaddr **)
int ng_btsocket_rfcomm_attach(struct socket *, int, struct thread *)
int ng_btsocket_rfcomm_sockaddr(struct socket *, struct sockaddr **)
void ng_btsocket_rfcomm_abort(struct socket *)
int ng_btsocket_rfcomm_control(struct socket *, u_long, caddr_t, struct ifnet *, struct thread *)
struct ng_btsocket_rfcomm_session __attribute__
int ng_btsocket_rfcomm_accept(struct socket *, struct sockaddr **)
struct ng_btsocket_rfcomm_session * ng_btsocket_rfcomm_session_p
LIST_ENTRY(ng_btsocket_rfcomm_pcb) next
struct ng_btsocket_rfcomm_session * session
LIST_ENTRY(ng_btsocket_rfcomm_pcb) session_next
LIST_ENTRY(ng_btsocket_rfcomm_session) next
LIST_HEAD(, ng_btsocket_rfcomm_pcb) dlcs