Home | History | Annotate | Download | only in tools
      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