1138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*
2138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
3138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  BlueZ - Bluetooth protocol stack for Linux
4138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
5138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  Copyright (C) 2000-2005  CSR Ltd.
6138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
7138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
8138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  Permission is hereby granted, free of charge, to any person obtaining
9138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  a copy of this software and associated documentation files (the
10138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  "Software"), to deal in the Software without restriction, including
11138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  without limitation the rights to use, copy, modify, merge, publish,
12138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  distribute, sublicense, and/or sell copies of the Software, and to
13138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  permit persons to whom the Software is furnished to do so, subject to
14138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  the following conditions:
15138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
16138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  The above copyright notice and this permission notice shall be included
17138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  in all copies or substantial portions of the Software.
18138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
19138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
23138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann *
27138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann */
28138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
29138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#ifndef UBCSP_INCLUDE_H
30138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_INCLUDE_H
31138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
32138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
33138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
34138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
35138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
36138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** ubcsp.h                                                                 **/
37138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
38138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** MicroBCSP - a very low cost implementation of the BCSP protocol         **/
39138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
40138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
41138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
42138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/* If we wish to use CRC's, then change 0 to 1 in the next line */
43138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_CRC 1
44138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
45138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/* Define some basic types - change these for your architecture */
46138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmanntypedef unsigned char uint8;
47138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmanntypedef unsigned short uint16;
48138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmanntypedef unsigned int uint32;
49138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmanntypedef signed char int8;
50138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmanntypedef signed short int16;
51138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmanntypedef signed int int32;
52138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
53138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/* The defines below require a printf function to be available */
54138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
55138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/* Do we want to show packet errors in debug output */
56138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define SHOW_PACKET_ERRORS	0
57138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
58138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/* Do we want to show Link Establishment State transitions in debug output */
59138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define SHOW_LE_STATES		0
60138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
61138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
62138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
63138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** ubcsp_packet                                                            **/
64138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
65138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** This is description of a bcsp packet for the upper layer                **/
66138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
67138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
68138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
69138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannstruct ubcsp_packet
70138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann{
71138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 channel;		/* Which Channel this packet is to/from */
72138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 reliable;		/* Is this packet reliable */
73138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 use_crc;		/* Does this packet use CRC data protection */
74138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint16 length;		/* What is the length of the payload data */
75138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 *payload;		/* The payload data itself - size of length */
76138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann};
77138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
78138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
79138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
80138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** ubcsp_configuration                                                     **/
81138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
82138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** This is the main configuration of the ubcsp engine                      **/
83138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** All state variables are stored in this structure                        **/
84138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
85138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
86138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
87138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannenum ubcsp_link_establishment_state
88138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann{
89138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_uninitialized,
90138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_initialized,
91138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_active
92138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann};
93138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
94138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannenum ubcsp_link_establishment_packet
95138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann{
96138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_sync,
97138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_sync_resp,
98138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_conf,
99138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_conf_resp,
100138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	ubcsp_le_none
101138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann};
102138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
103138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannstruct ubcsp_configuration
104138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann{
105138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 link_establishment_state;
106138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 link_establishment_resp;
107138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 link_establishment_packet;
108138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
109138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 sequence_number:3;
110138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 ack_number:3;
111138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 send_ack;
112138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	struct ubcsp_packet *send_packet;
113138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	struct ubcsp_packet *receive_packet;
114138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
115138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 receive_header_checksum;
116138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 receive_slip_escape;
117138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	int32 receive_index;
118138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
119138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 send_header_checksum;
120138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#ifdef UBCSP_CRC
121138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 need_send_crc;
122138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint16 send_crc;
123138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#endif
124138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 send_slip_escape;
125138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
126138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 *send_ptr;
127138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	int32 send_size;
128138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	uint8 *next_send_ptr;
129138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	int32 next_send_size;
130138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
131138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann	int8 delay;
132138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann};
133138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
134138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
135138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
136138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** ubcsp_poll sets activity from an OR of these flags                      **/
137138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
138138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
139138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
140138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_PACKET_SENT 0x01
141138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_PACKET_RECEIVED 0x02
142138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_PEER_RESET 0x04
143138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_PACKET_ACK 0x08
144138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
145138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
146138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
147138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** This is the functional interface for ucbsp                              **/
148138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
149138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
150138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
151138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannvoid ubcsp_initialize (void);
152138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannvoid ubcsp_send_packet (struct ubcsp_packet *send_packet);
153138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannvoid ubcsp_receive_packet (struct ubcsp_packet *receive_packet);
154138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannuint8 ubcsp_poll (uint8 *activity);
155138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
156138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
157138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
158138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** Slip Escape Values                                                      **/
159138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
160138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
161138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
162138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define SLIP_FRAME 0xC0
163138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define SLIP_ESCAPE 0xDB
164138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define SLIP_ESCAPE_FRAME 0xDC
165138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define SLIP_ESCAPE_ESCAPE 0xDD
166138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
167138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
168138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
169138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
170138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
171138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
172138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
173138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** These functions need to be linked into your system                      **/
174138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
175138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
176138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
177138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
178138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
179138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** put_uart outputs a single octet over the UART Tx line                   **/
180138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
181138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
182138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
183138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannextern void put_uart (uint8);
184138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
185138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
186138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
187138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** get_uart receives a single octet over the UART Rx line                  **/
188138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** if no octet is available, then this returns 0                           **/
189138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** if an octet was read, then this is returned in the argument and         **/
190138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**   the function returns 1                                                **/
191138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
192138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
193138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
194138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmannextern uint8 get_uart (uint8 *);
195138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
196138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
197138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
198138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/** These defines should be changed to your systems concept of 100ms        **/
199138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/**                                                                         **/
200138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
201138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
202138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_POLL_TIME_IMMEDIATE   0
203138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#define UBCSP_POLL_TIME_DELAY       25
204138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann
205138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
206138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
207138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann/*****************************************************************************/
208138621bf2dbcfa89e85a35010a406d447365cf7eMarcel Holtmann#endif
209