• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  *  BlueZ - Bluetooth protocol stack for Linux
4  *
5  *  Copyright (C) 2000-2005  CSR Ltd.
6  *
7  *
8  *  Permission is hereby granted, free of charge, to any person obtaining
9  *  a copy of this software and associated documentation files (the
10  *  "Software"), to deal in the Software without restriction, including
11  *  without limitation the rights to use, copy, modify, merge, publish,
12  *  distribute, sublicense, and/or sell copies of the Software, and to
13  *  permit persons to whom the Software is furnished to do so, subject to
14  *  the following conditions:
15  *
16  *  The above copyright notice and this permission notice shall be included
17  *  in all copies or substantial portions of the Software.
18  *
19  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22  *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
23  *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24  *  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25  *  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26  *
27  */
28 
29 #ifndef UBCSP_INCLUDE_H
30 #define UBCSP_INCLUDE_H
31 
32 /*****************************************************************************/
33 /*****************************************************************************/
34 /*****************************************************************************/
35 /**                                                                         **/
36 /** ubcsp.h                                                                 **/
37 /**                                                                         **/
38 /** MicroBCSP - a very low cost implementation of the BCSP protocol         **/
39 /**                                                                         **/
40 /*****************************************************************************/
41 
42 /* If we wish to use CRC's, then change 0 to 1 in the next line */
43 #define UBCSP_CRC 1
44 
45 /* Define some basic types - change these for your architecture */
46 typedef unsigned char uint8;
47 typedef unsigned short uint16;
48 typedef unsigned int uint32;
49 typedef signed char int8;
50 typedef signed short int16;
51 typedef signed int int32;
52 
53 /* The defines below require a printf function to be available */
54 
55 /* Do we want to show packet errors in debug output */
56 #define SHOW_PACKET_ERRORS	0
57 
58 /* Do we want to show Link Establishment State transitions in debug output */
59 #define SHOW_LE_STATES		0
60 
61 /*****************************************************************************/
62 /**                                                                         **/
63 /** ubcsp_packet                                                            **/
64 /**                                                                         **/
65 /** This is description of a bcsp packet for the upper layer                **/
66 /**                                                                         **/
67 /*****************************************************************************/
68 
69 struct ubcsp_packet
70 {
71 	uint8 channel;		/* Which Channel this packet is to/from */
72 	uint8 reliable;		/* Is this packet reliable */
73 	uint8 use_crc;		/* Does this packet use CRC data protection */
74 	uint16 length;		/* What is the length of the payload data */
75 	uint8 *payload;		/* The payload data itself - size of length */
76 };
77 
78 /*****************************************************************************/
79 /**                                                                         **/
80 /** ubcsp_configuration                                                     **/
81 /**                                                                         **/
82 /** This is the main configuration of the ubcsp engine                      **/
83 /** All state variables are stored in this structure                        **/
84 /**                                                                         **/
85 /*****************************************************************************/
86 
87 enum ubcsp_link_establishment_state
88 {
89 	ubcsp_le_uninitialized,
90 	ubcsp_le_initialized,
91 	ubcsp_le_active
92 };
93 
94 enum ubcsp_link_establishment_packet
95 {
96 	ubcsp_le_sync,
97 	ubcsp_le_sync_resp,
98 	ubcsp_le_conf,
99 	ubcsp_le_conf_resp,
100 	ubcsp_le_none
101 };
102 
103 struct ubcsp_configuration
104 {
105 	uint8 link_establishment_state;
106 	uint8 link_establishment_resp;
107 	uint8 link_establishment_packet;
108 
109 	uint8 sequence_number:3;
110 	uint8 ack_number:3;
111 	uint8 send_ack;
112 	struct ubcsp_packet *send_packet;
113 	struct ubcsp_packet *receive_packet;
114 
115 	uint8 receive_header_checksum;
116 	uint8 receive_slip_escape;
117 	int32 receive_index;
118 
119 	uint8 send_header_checksum;
120 #ifdef UBCSP_CRC
121 	uint8 need_send_crc;
122 	uint16 send_crc;
123 #endif
124 	uint8 send_slip_escape;
125 
126 	uint8 *send_ptr;
127 	int32 send_size;
128 	uint8 *next_send_ptr;
129 	int32 next_send_size;
130 
131 	int8 delay;
132 };
133 
134 /*****************************************************************************/
135 /**                                                                         **/
136 /** ubcsp_poll sets activity from an OR of these flags                      **/
137 /**                                                                         **/
138 /*****************************************************************************/
139 
140 #define UBCSP_PACKET_SENT 0x01
141 #define UBCSP_PACKET_RECEIVED 0x02
142 #define UBCSP_PEER_RESET 0x04
143 #define UBCSP_PACKET_ACK 0x08
144 
145 /*****************************************************************************/
146 /**                                                                         **/
147 /** This is the functional interface for ucbsp                              **/
148 /**                                                                         **/
149 /*****************************************************************************/
150 
151 void ubcsp_initialize (void);
152 void ubcsp_send_packet (struct ubcsp_packet *send_packet);
153 void ubcsp_receive_packet (struct ubcsp_packet *receive_packet);
154 uint8 ubcsp_poll (uint8 *activity);
155 
156 /*****************************************************************************/
157 /**                                                                         **/
158 /** Slip Escape Values                                                      **/
159 /**                                                                         **/
160 /*****************************************************************************/
161 
162 #define SLIP_FRAME 0xC0
163 #define SLIP_ESCAPE 0xDB
164 #define SLIP_ESCAPE_FRAME 0xDC
165 #define SLIP_ESCAPE_ESCAPE 0xDD
166 
167 /*****************************************************************************/
168 /*****************************************************************************/
169 /*****************************************************************************/
170 
171 /*****************************************************************************/
172 /**                                                                         **/
173 /** These functions need to be linked into your system                      **/
174 /**                                                                         **/
175 /*****************************************************************************/
176 
177 /*****************************************************************************/
178 /**                                                                         **/
179 /** put_uart outputs a single octet over the UART Tx line                   **/
180 /**                                                                         **/
181 /*****************************************************************************/
182 
183 extern void put_uart (uint8);
184 
185 /*****************************************************************************/
186 /**                                                                         **/
187 /** get_uart receives a single octet over the UART Rx line                  **/
188 /** if no octet is available, then this returns 0                           **/
189 /** if an octet was read, then this is returned in the argument and         **/
190 /**   the function returns 1                                                **/
191 /**                                                                         **/
192 /*****************************************************************************/
193 
194 extern uint8 get_uart (uint8 *);
195 
196 /*****************************************************************************/
197 /**                                                                         **/
198 /** These defines should be changed to your systems concept of 100ms        **/
199 /**                                                                         **/
200 /*****************************************************************************/
201 
202 #define UBCSP_POLL_TIME_IMMEDIATE   0
203 #define UBCSP_POLL_TIME_DELAY       25
204 
205 /*****************************************************************************/
206 /*****************************************************************************/
207 /*****************************************************************************/
208 #endif
209