| /* | |
| * | |
| * BlueZ - Bluetooth protocol stack for Linux | |
| * | |
| * Copyright (C) 2000-2005 CSR Ltd. | |
| * | |
| * | |
| * Permission is hereby granted, free of charge, to any person obtaining | |
| * a copy of this software and associated documentation files (the | |
| * "Software"), to deal in the Software without restriction, including | |
| * without limitation the rights to use, copy, modify, merge, publish, | |
| * distribute, sublicense, and/or sell copies of the Software, and to | |
| * permit persons to whom the Software is furnished to do so, subject to | |
| * the following conditions: | |
| * | |
| * The above copyright notice and this permission notice shall be included | |
| * in all copies or substantial portions of the Software. | |
| * | |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
| * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
| * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| * | |
| */ | |
| #ifndef UBCSP_INCLUDE_H | |
| #define UBCSP_INCLUDE_H | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** ubcsp.h **/ | |
| /** **/ | |
| /** MicroBCSP - a very low cost implementation of the BCSP protocol **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| /* If we wish to use CRC's, then change 0 to 1 in the next line */ | |
| #define UBCSP_CRC 1 | |
| /* Define some basic types - change these for your architecture */ | |
| typedef unsigned char uint8; | |
| typedef unsigned short uint16; | |
| typedef unsigned int uint32; | |
| typedef signed char int8; | |
| typedef signed short int16; | |
| typedef signed int int32; | |
| /* The defines below require a printf function to be available */ | |
| /* Do we want to show packet errors in debug output */ | |
| #define SHOW_PACKET_ERRORS 0 | |
| /* Do we want to show Link Establishment State transitions in debug output */ | |
| #define SHOW_LE_STATES 0 | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** ubcsp_packet **/ | |
| /** **/ | |
| /** This is description of a bcsp packet for the upper layer **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| struct ubcsp_packet | |
| { | |
| uint8 channel; /* Which Channel this packet is to/from */ | |
| uint8 reliable; /* Is this packet reliable */ | |
| uint8 use_crc; /* Does this packet use CRC data protection */ | |
| uint16 length; /* What is the length of the payload data */ | |
| uint8 *payload; /* The payload data itself - size of length */ | |
| }; | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** ubcsp_configuration **/ | |
| /** **/ | |
| /** This is the main configuration of the ubcsp engine **/ | |
| /** All state variables are stored in this structure **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| enum ubcsp_link_establishment_state | |
| { | |
| ubcsp_le_uninitialized, | |
| ubcsp_le_initialized, | |
| ubcsp_le_active | |
| }; | |
| enum ubcsp_link_establishment_packet | |
| { | |
| ubcsp_le_sync, | |
| ubcsp_le_sync_resp, | |
| ubcsp_le_conf, | |
| ubcsp_le_conf_resp, | |
| ubcsp_le_none | |
| }; | |
| struct ubcsp_configuration | |
| { | |
| uint8 link_establishment_state; | |
| uint8 link_establishment_resp; | |
| uint8 link_establishment_packet; | |
| uint8 sequence_number:3; | |
| uint8 ack_number:3; | |
| uint8 send_ack; | |
| struct ubcsp_packet *send_packet; | |
| struct ubcsp_packet *receive_packet; | |
| uint8 receive_header_checksum; | |
| uint8 receive_slip_escape; | |
| int32 receive_index; | |
| uint8 send_header_checksum; | |
| #ifdef UBCSP_CRC | |
| uint8 need_send_crc; | |
| uint16 send_crc; | |
| #endif | |
| uint8 send_slip_escape; | |
| uint8 *send_ptr; | |
| int32 send_size; | |
| uint8 *next_send_ptr; | |
| int32 next_send_size; | |
| int8 delay; | |
| }; | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** ubcsp_poll sets activity from an OR of these flags **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| #define UBCSP_PACKET_SENT 0x01 | |
| #define UBCSP_PACKET_RECEIVED 0x02 | |
| #define UBCSP_PEER_RESET 0x04 | |
| #define UBCSP_PACKET_ACK 0x08 | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** This is the functional interface for ucbsp **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| void ubcsp_initialize (void); | |
| void ubcsp_send_packet (struct ubcsp_packet *send_packet); | |
| void ubcsp_receive_packet (struct ubcsp_packet *receive_packet); | |
| uint8 ubcsp_poll (uint8 *activity); | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** Slip Escape Values **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| #define SLIP_FRAME 0xC0 | |
| #define SLIP_ESCAPE 0xDB | |
| #define SLIP_ESCAPE_FRAME 0xDC | |
| #define SLIP_ESCAPE_ESCAPE 0xDD | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** These functions need to be linked into your system **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** put_uart outputs a single octet over the UART Tx line **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| extern void put_uart (uint8); | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** get_uart receives a single octet over the UART Rx line **/ | |
| /** if no octet is available, then this returns 0 **/ | |
| /** if an octet was read, then this is returned in the argument and **/ | |
| /** the function returns 1 **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| extern uint8 get_uart (uint8 *); | |
| /*****************************************************************************/ | |
| /** **/ | |
| /** These defines should be changed to your systems concept of 100ms **/ | |
| /** **/ | |
| /*****************************************************************************/ | |
| #define UBCSP_POLL_TIME_IMMEDIATE 0 | |
| #define UBCSP_POLL_TIME_DELAY 25 | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| /*****************************************************************************/ | |
| #endif |