/* * * 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