1*e25b118aSDominic Spill /* -*- c -*- */ 2*e25b118aSDominic Spill /* 3*e25b118aSDominic Spill * Copyright 2007 - 2012 Mike Ryan, Dominic Spill, Michael Ossmann 4*e25b118aSDominic Spill * Copyright 2005, 2006 Free Software Foundation, Inc. 5*e25b118aSDominic Spill * 6*e25b118aSDominic Spill * This file is part of libbtbb 7*e25b118aSDominic Spill * 8*e25b118aSDominic Spill * This program is free software; you can redistribute it and/or modify 9*e25b118aSDominic Spill * it under the terms of the GNU General Public License as published by 10*e25b118aSDominic Spill * the Free Software Foundation; either version 2, or (at your option) 11*e25b118aSDominic Spill * any later version. 12*e25b118aSDominic Spill * 13*e25b118aSDominic Spill * This program is distributed in the hope that it will be useful, 14*e25b118aSDominic Spill * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*e25b118aSDominic Spill * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*e25b118aSDominic Spill * GNU General Public License for more details. 17*e25b118aSDominic Spill * 18*e25b118aSDominic Spill * You should have received a copy of the GNU General Public License 19*e25b118aSDominic Spill * along with libbtbb; see the file COPYING. If not, write to 20*e25b118aSDominic Spill * the Free Software Foundation, Inc., 51 Franklin Street, 21*e25b118aSDominic Spill * Boston, MA 02110-1301, USA. 22*e25b118aSDominic Spill */ 23*e25b118aSDominic Spill #ifndef INCLUDED_BLUETOOTH_LE_PACKET_H 24*e25b118aSDominic Spill #define INCLUDED_BLUETOOTH_LE_PACKET_H 25*e25b118aSDominic Spill 26*e25b118aSDominic Spill #include <stdint.h> 27*e25b118aSDominic Spill #include <stdio.h> 28*e25b118aSDominic Spill #include <stdlib.h> 29*e25b118aSDominic Spill 30*e25b118aSDominic Spill #define MAX_LE_SYMBOLS 64 31*e25b118aSDominic Spill 32*e25b118aSDominic Spill #define ADV_IND 0 33*e25b118aSDominic Spill #define ADV_DIRECT_IND 1 34*e25b118aSDominic Spill #define ADV_NONCONN_IND 2 35*e25b118aSDominic Spill #define SCAN_REQ 3 36*e25b118aSDominic Spill #define SCAN_RSP 4 37*e25b118aSDominic Spill #define CONNECT_REQ 5 38*e25b118aSDominic Spill #define ADV_SCAN_IND 6 39*e25b118aSDominic Spill 40*e25b118aSDominic Spill typedef struct _le_packet_t { 41*e25b118aSDominic Spill // raw unwhitened bytes of packet, including access address 42*e25b118aSDominic Spill uint8_t symbols[MAX_LE_SYMBOLS]; 43*e25b118aSDominic Spill 44*e25b118aSDominic Spill uint32_t access_address; 45*e25b118aSDominic Spill 46*e25b118aSDominic Spill // channel index 47*e25b118aSDominic Spill uint8_t channel_idx; 48*e25b118aSDominic Spill 49*e25b118aSDominic Spill // number of symbols 50*e25b118aSDominic Spill int length; 51*e25b118aSDominic Spill 52*e25b118aSDominic Spill uint32_t clk100ns; 53*e25b118aSDominic Spill 54*e25b118aSDominic Spill // advertising packet header info 55*e25b118aSDominic Spill uint8_t adv_type; 56*e25b118aSDominic Spill int adv_tx_add; 57*e25b118aSDominic Spill int adv_rx_add; 58*e25b118aSDominic Spill } le_packet_t; 59*e25b118aSDominic Spill 60*e25b118aSDominic Spill /* decode payload */ 61*e25b118aSDominic Spill void decode_le(uint8_t *stream, uint16_t phys_channel, uint32_t clk100ns, le_packet_t *p); 62*e25b118aSDominic Spill 63*e25b118aSDominic Spill /* returns true if this is a data packet, false if advertising */ 64*e25b118aSDominic Spill int le_packet_is_data(le_packet_t *p); 65*e25b118aSDominic Spill 66*e25b118aSDominic Spill /* returns the channel index of a physical channel */ 67*e25b118aSDominic Spill uint8_t le_channel_index(uint16_t phys_channel); 68*e25b118aSDominic Spill 69*e25b118aSDominic Spill /* returns a string representing advertising packet type */ 70*e25b118aSDominic Spill const char *le_adv_type(le_packet_t *p); 71*e25b118aSDominic Spill 72*e25b118aSDominic Spill /* print LE packet information */ 73*e25b118aSDominic Spill void le_print(le_packet_t *p); 74*e25b118aSDominic Spill 75*e25b118aSDominic Spill #endif /* INCLUDED_BLUETOOTH_LE_PACKET_H */ 76