mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-25 16:43:28 +00:00
Replaced HCI_PACKET_BUFFER_SIZE with HCI_INCOMING_PACKET_BUFFER_SIZE and HCI_OUTGOING_PACKET_BUFFER_SIZE
This commit is contained in:
parent
84dcd8f6cb
commit
fc6cde64da
@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
||||
- SM: Generate new EC Public Keypair after each pairing
|
||||
- btstack.h: only include classic headers if ENABLE_CLASSIC is defined
|
||||
- windows: ignore virtual Bluetooth adapter provided by VMware
|
||||
- Replaced HCI_PACKET_BUFFER_SIZE with HCI_INCOMING_PACKET_BUFFER_SIZE and HCI_OUTGOING_PACKET_BUFFER_SIZE
|
||||
|
||||
## Changes June 2018
|
||||
|
||||
|
@ -86,7 +86,7 @@ static uint8_t hci_ringbuffer_storage[HCI_HOST_ACL_PACKET_NUM * (2 + 1 + HCI_A
|
||||
MAX_NR_HOST_EVENT_PACKETS * (2 + 1 + HCI_EVENT_BUFFER_SIZE)];
|
||||
|
||||
static btstack_ring_buffer_t hci_ringbuffer;
|
||||
static uint8_t hci_receive_buffer[1 + HCI_PACKET_BUFFER_SIZE];
|
||||
static uint8_t hci_receive_buffer[1 + HCI_INCOMING_PACKET_BUFFER_SIZE];
|
||||
static SemaphoreHandle_t ring_buffer_mutex;
|
||||
|
||||
// data source for integration with BTstack Runloop
|
||||
|
@ -131,7 +131,7 @@ static H4_STATE h4_state;
|
||||
static int bytes_to_read;
|
||||
static int read_pos;
|
||||
|
||||
static uint8_t hci_packet[1+HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t hci_packet[1+HCI_INCOMING_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
|
||||
static void h4_init(const void * transport_config){
|
||||
// check for hci_transport_config_uart_t
|
||||
|
@ -70,8 +70,8 @@ static hci_transport_h4_t * hci_transport_h4 = NULL;
|
||||
static void (*packet_handler)(uint8_t packet_type, uint8_t *packet, uint16_t size) = dummy_handler;
|
||||
|
||||
// packet bufffers
|
||||
static uint8_t hci_packet_out[1+HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t hci_packet_in[1+HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t hci_packet_out[1+HCI_OUTGOING_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, cmd header + cmd data)
|
||||
static uint8_t hci_packet_in[ 1+HCI_INCOMING_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
|
||||
static int h4_open(void){
|
||||
int fd = mtk_bt_enable();
|
||||
|
@ -95,7 +95,7 @@ static uint16_t tx_worker_data_size;
|
||||
static wiced_worker_thread_t rx_worker_thread;
|
||||
static int rx_worker_read_pos;
|
||||
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + 1 + HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + HCI_INCOMING_PACKET_BUFFER_SIZE + 1]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t * hci_packet = &hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE];
|
||||
|
||||
#ifdef WICED_BT_UART_MANUAL_CTS_RTS
|
||||
|
35
src/hci.h
35
src/hci.h
@ -91,20 +91,35 @@ extern "C" {
|
||||
|
||||
#define HCI_ACL_BUFFER_SIZE (HCI_ACL_HEADER_SIZE + HCI_ACL_PAYLOAD_SIZE)
|
||||
|
||||
// size of hci buffers, big enough for command, event, or acl packet without H4 packet type
|
||||
// @note cmd buffer is bigger than event buffer
|
||||
#ifdef HCI_PACKET_BUFFER_SIZE
|
||||
#if HCI_PACKET_BUFFER_SIZE < HCI_ACL_BUFFER_SIZE
|
||||
#error HCI_PACKET_BUFFER_SIZE must be equal or larger than HCI_ACL_BUFFER_SIZE
|
||||
// size of hci incoming buffer, big enough for event or acl packet without H4 packet type
|
||||
#ifdef HCI_INCOMING_PACKET_BUFFER_SIZE
|
||||
#if HCI_INCOMING_PACKET_BUFFER_SIZE < HCI_ACL_BUFFER_SIZE
|
||||
#error HCI_INCOMING_PACKET_BUFFER_SIZE must be equal or larger than HCI_ACL_BUFFER_SIZE
|
||||
#endif
|
||||
#if HCI_PACKET_BUFFER_SIZE < HCI_CMD_BUFFER_SIZE
|
||||
#error HCI_PACKET_BUFFER_SIZE must be equal or larger than HCI_CMD_BUFFER_SIZE
|
||||
#if HCI_INCOMING_PACKET_BUFFER_SIZE < HCI_EVENT_BUFFER_SIZE
|
||||
#error HCI_INCOMING_PACKET_BUFFER_SIZE must be equal or larger than HCI_EVENT_BUFFER_SIZE
|
||||
#endif
|
||||
#else
|
||||
#if HCI_ACL_BUFFER_SIZE > HCI_EVENT_BUFFER_SIZE
|
||||
#define HCI_INCOMING_PACKET_BUFFER_SIZE HCI_ACL_BUFFER_SIZE
|
||||
#else
|
||||
#define HCI_INCOMING_PACKET_BUFFER_SIZE HCI_EVENT_BUFFER_SIZE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// size of hci outgoing buffer, big enough for command or acl packet without H4 packet type
|
||||
#ifdef HCI_OUTGOING_PACKET_BUFFER_SIZE
|
||||
#if HCI_OUTGOING_PACKET_BUFFER_SIZE < HCI_ACL_BUFFER_SIZE
|
||||
#error HCI_OUTGOING_PACKET_BUFFER_SIZE must be equal or larger than HCI_ACL_BUFFER_SIZE
|
||||
#endif
|
||||
#if HCI_OUTGOING_PACKET_BUFFER_SIZE < HCI_CMD_BUFFER_SIZE
|
||||
#error HCI_OUTGOING_PACKET_BUFFER_SIZE must be equal or larger than HCI_CMD_BUFFER_SIZE
|
||||
#endif
|
||||
#else
|
||||
#if HCI_ACL_BUFFER_SIZE > HCI_CMD_BUFFER_SIZE
|
||||
#define HCI_PACKET_BUFFER_SIZE HCI_ACL_BUFFER_SIZE
|
||||
#define HCI_OUTGOING_PACKET_BUFFER_SIZE HCI_ACL_BUFFER_SIZE
|
||||
#else
|
||||
#define HCI_PACKET_BUFFER_SIZE HCI_CMD_BUFFER_SIZE
|
||||
#define HCI_OUTGOING_PACKET_BUFFER_SIZE HCI_CMD_BUFFER_SIZE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -688,7 +703,7 @@ typedef struct {
|
||||
|
||||
// single buffer for HCI packet assembly + additional prebuffer for H4 drivers
|
||||
uint8_t * hci_packet_buffer;
|
||||
uint8_t hci_packet_buffer_data[HCI_OUTGOING_PRE_BUFFER_SIZE + HCI_PACKET_BUFFER_SIZE];
|
||||
uint8_t hci_packet_buffer_data[HCI_OUTGOING_PRE_BUFFER_SIZE + HCI_OUTGOING_PACKET_BUFFER_SIZE];
|
||||
uint8_t hci_packet_buffer_reserved;
|
||||
uint16_t acl_fragmentation_pos;
|
||||
uint16_t acl_fragmentation_total_size;
|
||||
|
@ -384,7 +384,7 @@ static uint16_t hci_transport_em9304_spi_bytes_to_read;
|
||||
static uint16_t hci_transport_em9304_spi_read_pos;
|
||||
|
||||
// incoming packet buffer
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + 1 + HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + HCI_INCOMING_PACKET_BUFFER_SIZE + 1]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t * hci_packet = &hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE];
|
||||
|
||||
static void hci_transport_em9304_spi_block_read(void);
|
||||
@ -443,8 +443,8 @@ static void hci_transport_em9304_spi_block_read(void){
|
||||
case H4_W4_ACL_HEADER:
|
||||
hci_transport_em9304_spi_bytes_to_read = little_endian_read_16( hci_packet, 3);
|
||||
// check ACL length
|
||||
if (HCI_ACL_HEADER_SIZE + hci_transport_em9304_spi_bytes_to_read > HCI_PACKET_BUFFER_SIZE){
|
||||
log_error("invalid ACL payload len %d - only space for %u", hci_transport_em9304_spi_bytes_to_read, HCI_PACKET_BUFFER_SIZE - HCI_ACL_HEADER_SIZE);
|
||||
if (HCI_ACL_HEADER_SIZE + hci_transport_em9304_spi_bytes_to_read > HCI_INCOMING_PACKET_BUFFER_SIZE){
|
||||
log_error("invalid ACL payload len %d - only space for %u", hci_transport_em9304_spi_bytes_to_read, HCI_INCOMING_PACKET_BUFFER_SIZE - HCI_ACL_HEADER_SIZE);
|
||||
hci_transport_em9304_spi_reset_statemachine();
|
||||
break;
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ static int bytes_to_read;
|
||||
static int read_pos;
|
||||
|
||||
// incoming packet buffer
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + 1 + HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + HCI_INCOMING_PACKET_BUFFER_SIZE + 1]; // packet type + max(acl header + acl payload, event header + event data)
|
||||
static uint8_t * hci_packet = &hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE];
|
||||
|
||||
#ifdef ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND
|
||||
@ -217,8 +217,8 @@ static void hci_transport_h4_block_read(void){
|
||||
case H4_W4_ACL_HEADER:
|
||||
bytes_to_read = little_endian_read_16( hci_packet, 3);
|
||||
// check ACL length
|
||||
if (HCI_ACL_HEADER_SIZE + bytes_to_read > HCI_PACKET_BUFFER_SIZE){
|
||||
log_error("hci_transport_h4: invalid ACL payload len %d - only space for %u", bytes_to_read, HCI_PACKET_BUFFER_SIZE - HCI_ACL_HEADER_SIZE);
|
||||
if (HCI_ACL_HEADER_SIZE + bytes_to_read > HCI_INCOMING_PACKET_BUFFER_SIZE){
|
||||
log_error("hci_transport_h4: invalid ACL payload len %d - only space for %u", bytes_to_read, HCI_INCOMING_PACKET_BUFFER_SIZE - HCI_ACL_HEADER_SIZE);
|
||||
hci_transport_h4_reset_statemachine();
|
||||
break;
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ static const uint8_t link_control_sleep[] = { 0x07, 0x78};
|
||||
#define LINK_CONTROL_MAX_LEN 3
|
||||
|
||||
// incoming pre-bufffer + 4 bytes H5 header + max(acl header + acl payload, event header + event data) + 2 bytes opt CRC
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + 6 + HCI_PACKET_BUFFER_SIZE];
|
||||
static uint8_t hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE + 6 + HCI_INCOMING_PACKET_BUFFER_SIZE];
|
||||
|
||||
// outgoing slip encoded buffer. +4 to assert that DIC fits in buffer. +1 to assert that last SOF fits in buffer.
|
||||
static uint8_t slip_outgoing_buffer[LINK_SLIP_TX_CHUNK_LEN+4+1];
|
||||
@ -276,7 +276,7 @@ static void hci_transport_slip_send_frame(const uint8_t * header, const uint8_t
|
||||
// SLIP Incoming
|
||||
|
||||
static void hci_transport_slip_init(void){
|
||||
btstack_slip_decoder_init(&hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE], 6 + HCI_PACKET_BUFFER_SIZE);
|
||||
btstack_slip_decoder_init(&hci_packet_with_pre_buffer[HCI_INCOMING_PRE_BUFFER_SIZE], 6 + HCI_INCOMING_PACKET_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
// H5 Three-Wire Implementation
|
||||
@ -711,7 +711,7 @@ static void hci_transport_h5_process_frame(uint16_t frame_size){
|
||||
|
||||
// recommendet time until resend: 3 * time of largest packet
|
||||
static uint16_t hci_transport_link_calc_resend_timeout(uint32_t baudrate){
|
||||
uint32_t max_packet_size_in_bit = (HCI_PACKET_BUFFER_SIZE + 6) << 3;
|
||||
uint32_t max_packet_size_in_bit = (HCI_INCOMING_PACKET_BUFFER_SIZE + 6) << 3;
|
||||
uint32_t t_max_x3_ms = max_packet_size_in_bit * 3000 / baudrate;
|
||||
|
||||
// allow for BTstack logging and other delays
|
||||
|
Loading…
x
Reference in New Issue
Block a user