48#define LOG_MODULE "RADIO"
49#define LOG_LEVEL LOG_LEVEL_MAIN
51static uint16_t adv_interval;
52static ble_adv_type_t adv_type;
53static ble_addr_type_t adv_own_addr_type;
54static uint8_t adv_channel_map;
55static uint16_t buffer_size = 0;
57static uint16_t scan_interval;
58static uint16_t scan_window;
59static ble_scan_type_t scan_type;
60static ble_addr_type_t scan_own_addr_type;
62static ble_addr_type_t initiator_peer_addr_type;
63static uint8_t initiator_peer_addr[BLE_ADDR_SIZE];
65static uint16_t connection_interval;
66static uint16_t connection_latency;
67static uint16_t connection_timeout;
72 int result = ble_hal.reset();
73 return result == BLE_RESULT_OK;
77send(
const void *payload,
unsigned short payload_len)
80 res = ble_hal.send((
void *)payload, payload_len);
81 LOG_DBG(
"ble-mode send() %d bytes\n", payload_len);
82 if(res == BLE_RESULT_OK) {
85 LOG_ERR(
"ble-mode send() error: %d\n", res);
99 ble_hal.disconnect(0, 0);
114 *
value = BLE_DATA_CHANNEL_MIN;
117 *
value = BLE_DATA_CHANNEL_MAX;
119 case RADIO_CONST_BLE_BUFFER_SIZE:
120 if(buffer_size == 0) {
121 ble_hal.read_buffer_size((
unsigned int *)&buffer_size, &temp);
123 memcpy(
value, &buffer_size, 2);
125 case RADIO_CONST_BLE_BUFFER_AMOUNT:
126 ble_hal.read_buffer_size(&temp, (
unsigned int *)
value);
128 case RADIO_PARAM_BLE_CONN_INTERVAL:
129 ble_hal.read_connection_interval(0, (
unsigned int *)
value);
140 case RADIO_PARAM_BLE_ADV_INTERVAL:
141 if((
value > BLE_ADV_INTERVAL_MAX) || (
value < BLE_ADV_INTERVAL_MIN)) {
144 adv_interval = (uint16_t)
value;
146 case RADIO_PARAM_BLE_ADV_TYPE:
149 case RADIO_PARAM_BLE_ADV_OWN_ADDR_TYPE:
150 adv_own_addr_type =
value;
152 case RADIO_PARAM_BLE_ADV_CHANNEL_MAP:
153 adv_channel_map =
value;
155 case RADIO_PARAM_BLE_ADV_ENABLE:
158 ble_hal.set_adv_param(adv_interval, adv_type,
159 adv_own_addr_type, adv_channel_map);
161 ble_hal.set_adv_enable(
value);
163 case RADIO_PARAM_BLE_SCAN_INTERVAL:
164 if((
value > BLE_SCAN_INTERVAL_MAX) || (
value < BLE_SCAN_INTERVAL_MIN)) {
167 scan_interval = (uint16_t)
value;
169 case RADIO_PARAM_BLE_SCAN_WINDOW:
170 if((
value > BLE_SCAN_INTERVAL_MAX) || (
value < BLE_SCAN_INTERVAL_MIN)) {
173 scan_window = (uint16_t)
value;
175 case RADIO_PARAM_BLE_SCAN_TYPE:
178 case RADIO_PARAM_BLE_SCAN_OWN_ADDR_TYPE:
179 scan_own_addr_type =
value;
181 case RADIO_PARAM_BLE_SCAN_ENABLE:
183 ble_hal.set_scan_param(scan_type, scan_interval,
184 scan_window, scan_own_addr_type);
186 ble_hal.set_scan_enable(
value, 0);
188 case RADIO_PARAM_BLE_PEER_ADDR_TYPE:
189 initiator_peer_addr_type =
value;
191 case RADIO_PARAM_BLE_CONN_INTERVAL:
192 connection_interval =
value;
194 case RADIO_PARAM_BLE_CONN_LATENCY:
195 connection_latency =
value;
197 case RADIO_PARAM_BLE_CONN_SUPERVISION_TIMEOUT:
198 connection_timeout =
value;
200 case RADIO_PARAM_BLE_INITIATOR_ENABLE:
202 ble_hal.create_connection(scan_interval, scan_window,
203 initiator_peer_addr_type,
210 ble_hal.create_connection_cancel();
213 case RADIO_PARAM_BLE_CONN_UPDATE:
217 switch(ble_hal.connection_update(0, connection_interval, connection_latency, connection_timeout)) {
220 case BLE_RESULT_NOT_SUPPORTED:
222 case BLE_RESULT_INVALID_PARAM:
224 case BLE_RESULT_ERROR:
233get_object(radio_param_t param,
void *dest,
size_t size)
236 case RADIO_CONST_BLE_BD_ADDR:
237 if(size != BLE_ADDR_SIZE || !dest) {
240 ble_hal.read_bd_addr(dest);
247set_object(radio_param_t param,
const void *src,
size_t size)
250 case RADIO_PARAM_BLE_ADV_PAYLOAD:
251 if(size <= 0 || size >= BLE_ADV_DATA_LEN || !src) {
254 ble_hal.set_adv_data((
unsigned short)size, (
char *)src);
256 case RADIO_PARAM_BLE_ADV_SCAN_RESPONSE:
257 if(size <= 0 || size >= BLE_SCAN_RESP_DATA_LEN || !src) {
260 ble_hal.set_scan_resp_data((
unsigned short)size, (
char *)src);
262 case RADIO_PARAM_BLE_PEER_ADDR:
263 if(size <= 0 || size > BLE_ADDR_SIZE || !src) {
266 memcpy(initiator_peer_addr, src, size);
BLE radio hardware abstraction for the TI CC26XX controller.
hardware abstraction for a BLE controller
static radio_result_t get_object(radio_param_t param, void *dest, size_t size)
static radio_result_t set_object(radio_param_t param, const void *src, size_t size)
static int value(int type)
enum radio_result_e radio_result_t
Radio return values when setting or getting radio parameters.
int radio_value_t
Each radio has a set of parameters that designate the current configuration and state of the radio.
@ RADIO_RESULT_ERROR
An error occurred when getting/setting the parameter, but the arguments were otherwise correct.
@ RADIO_RESULT_NOT_SUPPORTED
The parameter is not supported.
@ RADIO_RESULT_INVALID_VALUE
The value argument was incorrect.
@ RADIO_RESULT_OK
The parameter was set/read successfully.
@ RADIO_CONST_CHANNEL_MAX
The highest radio channel number.
@ RADIO_CONST_CHANNEL_MIN
The lowest radio channel number.
@ RADIO_TX_ERR
An error occurred during transmission.
@ RADIO_TX_OK
TX was successful and where an ACK was requested one was received.
Header file for the logging system.
Header file for the radio API.
The structure of a Contiki-NG radio device driver.