summaryrefslogtreecommitdiff
path: root/chip/nrf51/bluetooth_le.h
diff options
context:
space:
mode:
Diffstat (limited to 'chip/nrf51/bluetooth_le.h')
-rw-r--r--chip/nrf51/bluetooth_le.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/chip/nrf51/bluetooth_le.h b/chip/nrf51/bluetooth_le.h
new file mode 100644
index 0000000000..8a746f39d7
--- /dev/null
+++ b/chip/nrf51/bluetooth_le.h
@@ -0,0 +1,67 @@
+/* Copyright 2016 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __NRF51_BLUETOOTH_LE_H
+#define __NRF51_BLUETOOTH_LE_H
+
+#include "common.h"
+#include "include/bluetooth_le.h"
+
+#define NRF51_BLE_LENGTH_BITS 8
+#define NRF51_BLE_S0_BYTES 1
+#define NRF51_BLE_S1_BITS 0 /* no s1 field */
+
+#define NRF51_RADIO_PCNF0_ADV NRF51_RADIO_PCNF0_VAL(NRF51_BLE_LENGTH_BITS, \
+ NRF51_BLE_S0_BYTES, \
+ NRF51_BLE_S1_BITS)
+
+#define BLE_ACCESS_ADDRESS_BYTES 4
+#define EXTRA_RECEIVE_BYTES 0
+#define BLE_ADV_WHITEN 1
+
+#define NRF51_RADIO_PCNF1_ADV \
+ NRF51_RADIO_PCNF1_VAL(BLE_MAX_ADV_PAYLOAD_OCTETS, \
+ EXTRA_RECEIVE_BYTES, \
+ BLE_ACCESS_ADDRESS_BYTES - 1, \
+ BLE_ADV_WHITEN)
+
+
+struct nrf51_ble_packet_t {
+ uint8_t s0; /* First byte */
+ uint8_t length; /* Length field */
+ uint8_t payload[BLE_MAX_DATA_PAYLOAD_OCTETS];
+} __packed;
+
+struct nrf51_ble_config_t {
+ uint8_t channel;
+ uint8_t address;
+ uint32_t crc_init;
+};
+
+/* Initialize the nRF51 radio for BLE */
+int ble_radio_init(void);
+
+/* Transmit pdu on the radio */
+void ble_tx(struct ble_pdu *pdu);
+
+/* Receive a packet into pdu if one comes before the timeout */
+int ble_rx(struct ble_pdu *pdu, int timeout, int adv);
+
+/* White list handling */
+
+/* Clear the white list */
+int ble_radio_clear_white_list(void);
+
+/* Read the size of the white list and assign it to ret_size */
+int ble_radio_read_white_list_size(uint8_t *ret_size);
+
+/* Add the device with the address specified by addr_ptr and type */
+int ble_radio_add_device_to_white_list(const uint8_t *addr_ptr, uint8_t type);
+
+/* Remove the device with the address specified by addr_ptr and type */
+int ble_radio_remove_device_from_white_list(const uint8_t *addr_ptr,
+ uint8_t type);
+
+#endif /* __NRF51_BLUETOOTH_LE_H */