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