summaryrefslogtreecommitdiff
path: root/common/btle_ll.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/btle_ll.c')
-rw-r--r--common/btle_ll.c153
1 files changed, 76 insertions, 77 deletions
diff --git a/common/btle_ll.c b/common/btle_ll.c
index d57eb3bfd3..71ca108565 100644
--- a/common/btle_ll.c
+++ b/common/btle_ll.c
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
+/* Copyright 2016 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -16,8 +16,8 @@
#ifdef CONFIG_BLUETOOTH_LL_DEBUG
#define CPUTS(outstr) cputs(CC_BLUETOOTH_LL, outstr)
-#define CPRINTS(format, args...) cprints(CC_BLUETOOTH_LL, format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_BLUETOOTH_LL, format, ## args)
+#define CPRINTS(format, args...) cprints(CC_BLUETOOTH_LL, format, ##args)
+#define CPRINTF(format, args...) cprintf(CC_BLUETOOTH_LL, format, ##args)
#else /* CONFIG_BLUETOOTH_LL_DEBUG */
@@ -57,7 +57,7 @@ uint8_t is_first_data_packet;
static uint64_t ll_random_address = 0xC5BADBADBAD1; /* Uninitialized */
static uint64_t ll_public_address = 0xC5BADBADBADF; /* Uninitialized */
-static uint8_t ll_channel_map[5] = {0xff, 0xff, 0xff, 0xff, 0x1f};
+static uint8_t ll_channel_map[5] = { 0xff, 0xff, 0xff, 0xff, 0x1f };
static uint8_t ll_filter_duplicates;
@@ -161,8 +161,8 @@ static uint8_t ll_state_change_request(enum ll_state_t next_state)
{
/* Initialize the radio if it hasn't been initialized */
if (ll_state == UNINITIALIZED) {
- if (ble_radio_init(BLE_ADV_ACCESS_ADDRESS, BLE_ADV_CRCINIT)
- != EC_SUCCESS)
+ if (ble_radio_init(BLE_ADV_ACCESS_ADDRESS, BLE_ADV_CRCINIT) !=
+ EC_SUCCESS)
return HCI_ERR_Hardware_Failure;
ll_state = STANDBY;
}
@@ -236,50 +236,50 @@ uint8_t initialize_connection(void)
num_consecutive_failures = 0;
/* Copy data into the appropriate portions of memory */
- memcpy((uint8_t *)&(conn_params.init_a),
- payload_start, CONNECT_REQ_INITA_LEN);
+ memcpy((uint8_t *)&(conn_params.init_a), payload_start,
+ CONNECT_REQ_INITA_LEN);
cur_offset += CONNECT_REQ_INITA_LEN;
- memcpy((uint8_t *)&(conn_params.adv_a),
- payload_start+cur_offset, CONNECT_REQ_ADVA_LEN);
+ memcpy((uint8_t *)&(conn_params.adv_a), payload_start + cur_offset,
+ CONNECT_REQ_ADVA_LEN);
cur_offset += CONNECT_REQ_ADVA_LEN;
- memcpy(&(conn_params.access_addr),
- payload_start+cur_offset, CONNECT_REQ_ACCESS_ADDR_LEN);
+ memcpy(&(conn_params.access_addr), payload_start + cur_offset,
+ CONNECT_REQ_ACCESS_ADDR_LEN);
cur_offset += CONNECT_REQ_ACCESS_ADDR_LEN;
conn_params.crc_init_val = 0;
- memcpy(&(conn_params.crc_init_val),
- payload_start+cur_offset, CONNECT_REQ_CRC_INIT_VAL_LEN);
+ memcpy(&(conn_params.crc_init_val), payload_start + cur_offset,
+ CONNECT_REQ_CRC_INIT_VAL_LEN);
cur_offset += CONNECT_REQ_CRC_INIT_VAL_LEN;
- memcpy(&(conn_params.win_size),
- payload_start+cur_offset, CONNECT_REQ_WIN_SIZE_LEN);
+ memcpy(&(conn_params.win_size), payload_start + cur_offset,
+ CONNECT_REQ_WIN_SIZE_LEN);
cur_offset += CONNECT_REQ_WIN_SIZE_LEN;
- memcpy(&(conn_params.win_offset),
- payload_start+cur_offset, CONNECT_REQ_WIN_OFFSET_LEN);
+ memcpy(&(conn_params.win_offset), payload_start + cur_offset,
+ CONNECT_REQ_WIN_OFFSET_LEN);
cur_offset += CONNECT_REQ_WIN_OFFSET_LEN;
- memcpy(&(conn_params.interval),
- payload_start+cur_offset, CONNECT_REQ_INTERVAL_LEN);
+ memcpy(&(conn_params.interval), payload_start + cur_offset,
+ CONNECT_REQ_INTERVAL_LEN);
cur_offset += CONNECT_REQ_INTERVAL_LEN;
- memcpy(&(conn_params.latency),
- payload_start+cur_offset, CONNECT_REQ_LATENCY_LEN);
+ memcpy(&(conn_params.latency), payload_start + cur_offset,
+ CONNECT_REQ_LATENCY_LEN);
cur_offset += CONNECT_REQ_LATENCY_LEN;
- memcpy(&(conn_params.timeout),
- payload_start+cur_offset, CONNECT_REQ_TIMEOUT_LEN);
+ memcpy(&(conn_params.timeout), payload_start + cur_offset,
+ CONNECT_REQ_TIMEOUT_LEN);
cur_offset += CONNECT_REQ_TIMEOUT_LEN;
conn_params.channel_map = 0;
- memcpy(&(conn_params.channel_map),
- payload_start+cur_offset, CONNECT_REQ_CHANNEL_MAP_LEN);
+ memcpy(&(conn_params.channel_map), payload_start + cur_offset,
+ CONNECT_REQ_CHANNEL_MAP_LEN);
cur_offset += CONNECT_REQ_CHANNEL_MAP_LEN;
- memcpy(&final_octet, payload_start+cur_offset,
- CONNECT_REQ_HOP_INCREMENT_AND_SCA_LEN);
+ memcpy(&final_octet, payload_start + cur_offset,
+ CONNECT_REQ_HOP_INCREMENT_AND_SCA_LEN);
/* last 5 bits of final_octet: */
conn_params.hop_increment = final_octet & 0x1f;
@@ -288,9 +288,9 @@ uint8_t initialize_connection(void)
/* Set up channel mapping table */
for (i = 0; i < 5; ++i)
- remap_arr[i] = *(((uint8_t *)&(conn_params.channel_map))+i);
+ remap_arr[i] = *(((uint8_t *)&(conn_params.channel_map)) + i);
fill_remapping_table(&remap_table, remap_arr,
- conn_params.hop_increment);
+ conn_params.hop_increment);
/* Calculate transmission window parameters */
conn_params.transmitWindowSize = conn_params.win_size * 1250;
@@ -332,7 +332,7 @@ uint8_t ll_read_allow_list_size(uint8_t *return_params)
uint8_t ll_add_device_to_allow_list(uint8_t *params)
{
if (ble_radio_add_device_to_allow_list(&params[1], params[0]) ==
- EC_SUCCESS)
+ EC_SUCCESS)
return HCI_SUCCESS;
else
return HCI_ERR_Host_Rejected_Due_To_Limited_Resources;
@@ -341,7 +341,7 @@ uint8_t ll_add_device_to_allow_list(uint8_t *params)
uint8_t ll_remove_device_from_allow_list(uint8_t *params)
{
if (ble_radio_remove_device_from_allow_list(&params[1], params[0]) ==
- EC_SUCCESS)
+ EC_SUCCESS)
return HCI_SUCCESS;
else
return HCI_ERR_Hardware_Failure;
@@ -449,27 +449,28 @@ uint8_t ll_set_advertising_params(uint8_t *params)
case BLE_ADV_HEADER_PDU_TYPE_ADV_NONCONN_IND:
case BLE_ADV_HEADER_PDU_TYPE_ADV_SCAN_IND:
if (ll_adv_params.advIntervalMin <
- (100000 / LL_ADV_INTERVAL_UNIT_US)) /* 100ms */
+ (100000 / LL_ADV_INTERVAL_UNIT_US)) /* 100ms */
return HCI_ERR_Invalid_HCI_Command_Parameters;
/* Fall through */
case BLE_ADV_HEADER_PDU_TYPE_ADV_IND:
if (ll_adv_params.advIntervalMin > ll_adv_params.advIntervalMax)
return HCI_ERR_Invalid_HCI_Command_Parameters;
if (ll_adv_params.advIntervalMin <
- (20000 / LL_ADV_INTERVAL_UNIT_US) || /* 20ms */
+ (20000 / LL_ADV_INTERVAL_UNIT_US) || /* 20ms */
ll_adv_params.advIntervalMax >
- (10240000 / LL_ADV_INTERVAL_UNIT_US)) /* 10.24s */
+ (10240000 / LL_ADV_INTERVAL_UNIT_US)) /* 10.24s */
return HCI_ERR_Invalid_HCI_Command_Parameters;
ll_adv_interval_us = (((ll_adv_params.advIntervalMin +
- ll_adv_params.advIntervalMax) / 2) *
- LL_ADV_INTERVAL_UNIT_US);
+ ll_adv_params.advIntervalMax) /
+ 2) *
+ LL_ADV_INTERVAL_UNIT_US);
/* Don't time out */
ll_adv_timeout_us = -1;
- break;
+ break;
case BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND:
ll_adv_interval_us = LL_ADV_DIRECT_INTERVAL_US;
ll_adv_timeout_us = LL_ADV_DIRECT_TIMEOUT_US;
- break;
+ break;
default:
return HCI_ERR_Invalid_HCI_Command_Parameters;
}
@@ -563,25 +564,25 @@ int ble_ll_adv(int chan)
case BLE_ADV_HEADER_PDU_TYPE_SCAN_REQ:
/* Scan requests are only allowed for ADV_IND and SCAN_IND */
if ((ll_adv_pdu.header.adv.type !=
- BLE_ADV_HEADER_PDU_TYPE_ADV_IND &&
+ BLE_ADV_HEADER_PDU_TYPE_ADV_IND &&
ll_adv_pdu.header.adv.type !=
- BLE_ADV_HEADER_PDU_TYPE_ADV_SCAN_IND) ||
- /* The advertising address needs to match */
+ BLE_ADV_HEADER_PDU_TYPE_ADV_SCAN_IND) ||
+ /* The advertising address needs to match */
(memcmp(&ll_rcv_packet.payload[BLUETOOTH_ADDR_OCTETS],
&ll_adv_pdu.payload[0], BLUETOOTH_ADDR_OCTETS))) {
/* Don't send the scan response */
radio_disable();
return rv;
}
- break;
+ break;
case BLE_ADV_HEADER_PDU_TYPE_CONNECT_REQ:
/* Don't send a scan response */
radio_disable();
/* Connecting is only allowed for ADV_IND and ADV_DIRECT_IND */
if (ll_adv_pdu.header.adv.type !=
- BLE_ADV_HEADER_PDU_TYPE_ADV_IND &&
+ BLE_ADV_HEADER_PDU_TYPE_ADV_IND &&
ll_adv_pdu.header.adv.type !=
- BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND)
+ BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND)
return rv;
/* The advertising address needs to match */
if (memcmp(&ll_rcv_packet.payload[BLUETOOTH_ADDR_OCTETS],
@@ -589,9 +590,9 @@ int ble_ll_adv(int chan)
return rv;
/* The InitAddr address needs to match for ADV_DIRECT_IND */
if (ll_adv_pdu.header.adv.type ==
- BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND &&
- memcmp(&ll_adv_pdu.payload[BLUETOOTH_ADDR_OCTETS],
- &ll_rcv_packet.payload[0], BLUETOOTH_ADDR_OCTETS))
+ BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND &&
+ memcmp(&ll_adv_pdu.payload[BLUETOOTH_ADDR_OCTETS],
+ &ll_rcv_packet.payload[0], BLUETOOTH_ADDR_OCTETS))
return rv;
/* Mark time that connect was received */
@@ -604,11 +605,11 @@ int ble_ll_adv(int chan)
ll_state = CONNECTION;
return rv;
- break;
+ break;
default: /* Unhandled response packet */
radio_disable();
return rv;
- break;
+ break;
}
CPRINTF("ADV %u Response %u %u\n", tx_end, rsp_end, tx_rsp_end);
@@ -632,7 +633,6 @@ int ble_ll_adv_event(void)
return rv;
}
-
void print_connection_state(void)
{
CPRINTF("vvvvvvvvvvvvvvvvvvvCONNECTION STATEvvvvvvvvvvvvvvvvvvv\n");
@@ -663,12 +663,12 @@ int connected_communicate(void)
if (num_consecutive_failures > 0) {
ble_radio_init(conn_params.access_addr,
- conn_params.crc_init_val);
+ conn_params.crc_init_val);
NRF51_RADIO_FREQUENCY =
NRF51_RADIO_FREQUENCY_VAL(chan2freq(comm_channel));
NRF51_RADIO_DATAWHITEIV = comm_channel;
- listen_time = last_receive_time + conn_params.connInterval
- - get_time().val + conn_params.transmitWindowSize;
+ listen_time = last_receive_time + conn_params.connInterval -
+ get_time().val + conn_params.transmitWindowSize;
/*
* This listens for 1.25 times the expected amount
@@ -680,12 +680,12 @@ int connected_communicate(void)
* slightly longer than expected in the case that
* there was a timing disagreement.
*/
- rv = ble_rx(&ll_rcv_packet,
- listen_time + (listen_time >> 2), 0);
+ rv = ble_rx(&ll_rcv_packet, listen_time + (listen_time >> 2),
+ 0);
} else {
if (!is_first_data_packet) {
- sleep_time = receive_time +
- conn_params.connInterval - get_time().val;
+ sleep_time = receive_time + conn_params.connInterval -
+ get_time().val;
/*
* The time slept is 31/32 (96.875%) of the calculated
* required sleep time because the code to receive
@@ -695,8 +695,8 @@ int connected_communicate(void)
} else {
last_receive_time = time_of_connect_req;
sleep_time = TRANSMIT_WINDOW_OFFSET_CONSTANT +
- conn_params.transmitWindowOffset +
- time_of_connect_req - get_time().val;
+ conn_params.transmitWindowOffset +
+ time_of_connect_req - get_time().val;
if (sleep_time >= 0) {
/*
* Radio is on for longer than needed for first
@@ -709,7 +709,7 @@ int connected_communicate(void)
}
ble_radio_init(conn_params.access_addr,
- conn_params.crc_init_val);
+ conn_params.crc_init_val);
NRF51_RADIO_FREQUENCY =
NRF51_RADIO_FREQUENCY_VAL(chan2freq(comm_channel));
NRF51_RADIO_DATAWHITEIV = comm_channel;
@@ -722,14 +722,13 @@ int connected_communicate(void)
* how early the window opens in microseconds.
*/
if (!is_first_data_packet)
- offset = last_receive_time + conn_params.connInterval
- - get_time().val;
+ offset = last_receive_time + conn_params.connInterval -
+ get_time().val;
else
offset = 0;
rv = ble_rx(&ll_rcv_packet,
- offset + conn_params.transmitWindowSize,
- 0);
+ offset + conn_params.transmitWindowSize, 0);
}
/*
@@ -766,9 +765,9 @@ void bluetooth_ll_task(void)
case ADVERTISING:
if (deadline.val == 0) {
- CPRINTS("ADV @%pP", &ll_adv_pdu);
+ CPRINTS("ADV @%p", &ll_adv_pdu);
deadline.val = get_time().val +
- (uint32_t)ll_adv_timeout_us;
+ (uint32_t)ll_adv_timeout_us;
ll_adv_events = 0;
}
@@ -786,7 +785,7 @@ void bluetooth_ll_task(void)
ll_state = STANDBY;
break;
}
- break;
+ break;
case STANDBY:
deadline.val = 0;
CPRINTS("Standby %d events", ll_adv_events);
@@ -795,20 +794,20 @@ void bluetooth_ll_task(void)
task_wait_event(-1);
connection_initialized = 0;
errors_recovered = 0;
- break;
+ break;
case TEST_RX:
if (ble_test_rx() == HCI_SUCCESS)
ll_test_packets++;
/* Packets come every 625us, sleep to save power */
usleep(300);
- break;
+ break;
case TEST_TX:
start = get_time().le.lo;
ble_test_tx();
ll_test_packets++;
end = get_time().le.lo;
- usleep(625 - 82 - (end-start)); /* 625us */
- break;
+ usleep(625 - 82 - (end - start)); /* 625us */
+ break;
case UNINITIALIZED:
ble_radio_init(BLE_ADV_ACCESS_ADDRESS, BLE_ADV_CRCINIT);
ll_adv_events = 0;
@@ -816,7 +815,7 @@ void bluetooth_ll_task(void)
connection_initialized = 0;
packet_tb_sent = &tx_packet_1;
set_empty_data_packet(&tx_packet_1);
- break;
+ break;
case CONNECTION:
if (!connection_initialized) {
if (initialize_connection() != HCI_SUCCESS) {
@@ -835,8 +834,7 @@ void bluetooth_ll_task(void)
} else {
num_consecutive_failures++;
if ((get_time().val - last_rx_time) >
- conn_params.connSupervisionTimeout) {
-
+ conn_params.connSupervisionTimeout) {
ll_state = STANDBY;
CPRINTF("EXITING CONNECTION STATE "
"DUE TO TIMEOUT.\n");
@@ -847,10 +845,11 @@ void bluetooth_ll_task(void)
if (ll_state == STANDBY) {
CPRINTF("Exiting connection state/Entering "
"Standby state after %d connections "
- "events\n", ll_conn_events);
+ "events\n",
+ ll_conn_events);
print_connection_state();
}
- break;
+ break;
default:
CPRINTS("Unhandled State ll_state = %d", ll_state);
ll_state = UNINITIALIZED;