~ubuntu-branches/ubuntu/wily/bluez/wily

« back to all changes in this revision

Viewing changes to tools/ubcsp.h

  • Committer: Bazaar Package Importer
  • Author(s): Mario Limonciello
  • Date: 2008-10-07 12:10:29 UTC
  • Revision ID: james.westby@ubuntu.com-20081007121029-4gup4fmmh2vfo5nh
Tags: upstream-4.12
ImportĀ upstreamĀ versionĀ 4.12

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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