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