mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-12-26 12:23:40 +08:00
209 lines
9.0 KiB
C
209 lines
9.0 KiB
C
/*
|
|
*
|
|
* 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
|