coreboot-libre-fam15h-rdimm/3rdparty/chromeec/chip/nrf51/bluetooth_le.h

71 lines
2.0 KiB
C

/* 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 BLE_ACCESS_ADDRESS_BYTES 4
#define EXTRA_RECEIVE_BYTES 0
#define BLE_ADV_WHITEN 1
#define RADIO_SETUP_TIMEOUT 1000
/* Data and Advertisements have the same PCNF values */
#define NRF51_RADIO_PCNF0_ADV_DATA \
NRF51_RADIO_PCNF0_VAL(NRF51_BLE_LENGTH_BITS, \
NRF51_BLE_S0_BYTES, \
NRF51_BLE_S1_BITS)
#define NRF51_RADIO_PCNF1_ADV_DATA \
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(uint32_t access_address, uint32_t crc_init_val);
/* 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 */