diff options
Diffstat (limited to 'common/bluetooth_le.c')
-rw-r--r-- | common/bluetooth_le.c | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/common/bluetooth_le.c b/common/bluetooth_le.c deleted file mode 100644 index 2e68893223..0000000000 --- a/common/bluetooth_le.c +++ /dev/null @@ -1,198 +0,0 @@ -/* 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. - */ - -#include "bluetooth_le.h" -#include "util.h" -#include "console.h" - -#define CPRINTF(format, args...) cprintf(CC_BLUETOOTH_LE, format, ## args) - -/* - * Convert from BLE Channel to frequency - * - * Bluetooth 4.1 Vol 6 pg 36 4.1 Table 1.1 - */ - -#define CHAN_0_MHZ 2404 -#define CHAN_11_MHZ 2428 -#define CHAN_37_MHZ 2402 -#define CHAN_38_MHZ 2426 -#define CHAN_39_MHZ 2480 - -int chan2freq(int channel) -{ - int freq; - - ASSERT(channel < 40 && channel >= 0); - - switch (channel) { - case 37: /* Advertising */ - freq = CHAN_37_MHZ; - break; - case 38: /* Advertising */ - freq = CHAN_38_MHZ; - break; - case 39: /* Advertising */ - freq = CHAN_39_MHZ; - break; - default: - /* Data Channels */ - if (channel < 11) - freq = channel * 2 + CHAN_0_MHZ; - else - freq = (channel - 11) * 2 + CHAN_11_MHZ; - } - return freq; -} - -/* BLE 4.1 Vol 6 2.3.3.1 */ - -void fill_remapping_table(struct remapping_table *rt, uint8_t map[5], - int hop_increment) -{ - int i; - - rt->num_used_channels = 0; - rt->last_unmapped_channel = 0; - rt->hop_increment = hop_increment; - - for (i = 0; i < 37; i++) - if (map[i / 8] & (1 << (i % 8))) - rt->remapping_index[rt->num_used_channels++] = i; - memcpy(rt->map, map, sizeof(rt->map)); -} - -/* BLE 4.1 Vol 6 4.5.8 */ -uint8_t get_next_data_channel(struct remapping_table *rt) -{ - rt->last_unmapped_channel = - (rt->last_unmapped_channel + rt->hop_increment) % 37; - - /* Check if the channel is mapped */ - if (rt->map[rt->last_unmapped_channel / 8] & - (1 << (rt->last_unmapped_channel % 8))) - return rt->last_unmapped_channel; - else - return rt->remapping_index - [rt->last_unmapped_channel % rt->num_used_channels]; -} - -/* BLE 4.1 Vol 3 Part C 11 */ - -/* Pack advertising structures for sending */ -uint8_t *pack_adv(uint8_t *dest, int length, int type, const uint8_t *data) -{ - /* Add the structure length */ - dest[0] = (uint8_t)length+1; - /* Add the structure type */ - dest[1] = (uint8_t)type; - /* Add the data */ - memcpy(&dest[2], data, length); - - /* Return a pointer to the next structure */ - return &dest[2+length]; -} - -uint8_t *pack_adv_int(uint8_t *dest, int length, int type, int data) -{ - /* Add the structure length */ - dest[0] = (uint8_t)length+1; - /* Add the structure type */ - dest[1] = (uint8_t)type; - /* Add the data */ - memcpy(&dest[2], &data, length); - - /* Return a pointer to the next structure */ - return &dest[2+length]; -} - -uint8_t *pack_adv_addr(uint8_t *dest, uint64_t addr) -{ - memcpy(&dest[0], &addr, BLUETOOTH_ADDR_OCTETS); - - /* Return a pointer to the next structure */ - return &dest[BLUETOOTH_ADDR_OCTETS]; -} - -/* Parse advertising structures that have been received */ -const uint8_t *unpack_adv(const uint8_t *src, int *length, int *type, - const uint8_t **data) -{ - /* Get the structure length */ - *length = *(src++); - /* Get the structure type */ - *type = *(src++); - /* Get the data */ - *data = src; - - /* Return a pointer to the next structure */ - return src + *length; -} - -static void mem_dump(uint8_t *mem, int len) -{ - int i; - uint8_t value; - - for (i = 0; i < len; i++) { - value = mem[i]; - if (i % 8 == 0) - CPRINTF("\n%pP: %02x", &mem[i], value); - else - CPRINTF(" %02x", value); - } - CPRINTF("\n"); -} - -void dump_ble_addr(uint8_t *mem, char *name) -{ - int i; - - for (i = 5; i > 0; i--) - CPRINTF("%02x.", mem[i]); - CPRINTF("%02x %s\n", mem[0], name); -} - -void dump_ble_packet(struct ble_pdu *ble_p) -{ - int curr_offs; - - if (ble_p->header_type_adv) { - CPRINTF("BLE packet @ %pP: type %d, len %d, %s %s\n", - ble_p, ble_p->header.adv.type, ble_p->header.adv.length, - (ble_p->header.adv.txaddr ? " TXADDR" : ""), - (ble_p->header.adv.rxaddr ? " RXADDR" : "")); - - curr_offs = 0; - - if (ble_p->header.adv.type == - BLE_ADV_HEADER_PDU_TYPE_SCAN_REQ) { - dump_ble_addr(ble_p->payload, "ScanA"); - curr_offs += BLUETOOTH_ADDR_OCTETS; - } else if (ble_p->header.adv.type == - BLE_ADV_HEADER_PDU_TYPE_CONNECT_REQ) { - dump_ble_addr(ble_p->payload, "InitA"); - curr_offs += BLUETOOTH_ADDR_OCTETS; - } - /* All packets have AdvA */ - dump_ble_addr(ble_p->payload + curr_offs, "AdvA"); - curr_offs += BLUETOOTH_ADDR_OCTETS; - - if (ble_p->header.adv.type == - BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND) - dump_ble_addr(ble_p->payload + curr_offs, "InitA"); - else - mem_dump(ble_p->payload + curr_offs, - ble_p->header.adv.length - curr_offs); - } else { /* Data PDUs */ - CPRINTF("BLE data packet @%pP: LLID %d," - " nesn %d, sn %d, md %d, length %d\n", - ble_p, ble_p->header.data.llid, ble_p->header.data.nesn, - ble_p->header.data.sn, ble_p->header.data.md, - ble_p->header.data.length); - mem_dump(ble_p->payload, ble_p->header.data.length); - } -} - |