Giter VIP home page Giter VIP logo

jiaoxianjun / btle Goto Github PK

View Code? Open in Web Editor NEW
708.0 57.0 130.0 13.15 MB

Bluetooth Low Energy (BLE) packet sniffer and transmitter for both standard and non standard (raw bit) based on Software Defined Radio (SDR).

Home Page: http://sdr-x.github.io/

License: Apache License 2.0

C 0.72% CMake 0.06% MATLAB 0.11% Forth 0.04% Python 0.21% Verilog 0.64% Tcl 0.28% Jupyter Notebook 97.94%
ble hackrf bladerf sdr dsp sniffer security bluetooth-low-energy software-defined-radio baseband

btle's People

Contributors

alick avatar jiaoxianjun avatar jocover avatar john-leitch avatar mike01 avatar muellermartin avatar sdr-x avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

btle's Issues

How can I generate the CRC table?

Hi Dr. Jiao:
We are learning the BLE PHY layer, and BTLE helps us a lot!
However, we have some trouble to derive the CRC table, it seems that the calculation of the CRC remainder is different from the traditional method because of the bit ordering. So, can you show us how to generate the CRC table or open source the code to generate this table? Thank you very much!
Best regards
Yeming Li

build fails on MAC

To avoid build failure on MAC computer, you should remove those "inline" key words of function.

BladeRF x40 TX

Hi - I am using the btle_tx function with the BladeRF x40. There are no errors, however my packet sniffing tools do not see any packets, nor does my iBeacon scanner. Is there any configuration I am missing or is it because of an API change?

How to save the sampling data?

I want to save the analog sampling into a txt file,so I add some codes at demod_byte part,but after I do this the data will be damaged and I do not know why,any help will be helpful,thank you very much

btle_rx not working with HackRF

Hi,

I've been trying to sniff the advertisement packets for a BLE Beacon as well as a BLE tracker using btle_rx. However I'm unable to capture any data even when specifying the exact channel of advertisement. However, these advertisement packets are being picked up by ubertooth-btle. I have tried changing the gain values and even specifying the frequency instead of the channel with no results. The RX LED of HackRF is lit up while running btle_rx.

Similarly for btle_tx, I've tried to transmitting the samples mentioned in the documentation. I'm unable to get the transmitted packets in ubertooth-btle. In case of iBeacon sample, my phone is unable to see it as well. The TX LED of HackRF is lit when running btle_tx.

Thanks!

Scramble table

Hi I was wondering what the use is for the sample table. It seems needed but I'm unsure how that got calculated.

Print absolute raw bits 1,0s no parsing

  1. Who are you?
    Application Engineer
  2. What is your own modification (if any)?
    None
  3. Environments: OS type/version, BTLE repo branch and commit revision
    Ubuntu Latest. BTLE main branch
  4. Board/hardware type
    HACKRF
  5. Detailed commands/steps to reproduce the issue, and the related error message, screenshot, etc
    NONE
  6. Your debug efforts and results (if any)
    NA
  7. Any other thing we need to know for helping you better?
    NA

This is not an issues, but you do not have discussions enabled, so I will ask my question here.
Question 1.
How would I modify your code in order to be able to print a bit stream of BLE traffic , absolute zero parsing ?. Or for more general purpose, how can I print the bits of what ever rf signal hackrf is giving me. ? Essentialy I am trying to demodulate a signal very similar to BLE and I need to see the raw data to make sure we are transmitting properly. Your work here seems like it can do the job I am just unsure how to do so.
Question 2.
I noticed the -r flag for btle_rx but is that really absolute raw? or are you parsing header and aa because is see it displayed there.?

hop stoped at its second step

I'm working on BTLE with bladeRF xA9 on Ubuntu 22.04, using newest BTLE, libbladeRF and .rbf file, and met a problem on hopping.
Firstly, sorry for my poor English.
The problem is, when I use btle_rx with -o, seeing "track start" in terminal when bladeRF catches AUX_CONNECT_REQ, it could catch some packeges on one channel, but when it says next state 2, it stops working while not exiting. I tried at least five times with the same problem.

That's my input:
./btle_rx -c 37 -s test -o

That's what I get before it stop (hide some data because I don't know if it is needed):
0028557us Pkt080 Ch37 AA:hide ADV_PDU_t0:ADV_IND T1 R0 PloadL24 AdvA:hide Data:hide CRC0
0000032us Pkt081 Ch37 AA:hide ADV_PDU_t5:CONNECT_REQ T1 R1 PloadL34 InitA:hide AdvA:hide AA:hide CRCInit:hide WSize:02 WOffset:0011 Itrvl:0018 Ltncy:0000 Timot:01f4 ChM:1fffffffff Hop:10 SCA:5 CRC0
Hop: track start ...
Hop: next ch 10 freq 2424MHz access hide crcInit hide
Hop: next state 1
0266259us Pkt082 Ch10 AA:hide LL_PDU_t1:LL_DATA1 NESN1 SN1 MD0 PloadL0 CRC0
0000036us Pkt083 Ch10 AA:hide LL_PDU_t3:LL_CTRL NESN0 SN1 MD1 PloadL24 Op10(LL_RESERVED) Byte:hide CRC0
0000014us Pkt084 Ch10 AA:hide LL_PDU_t1:LL_DATA1 NESN0 SN0 MD0 PloadL0 CRC0
0000011us Pkt085 Ch10 AA:hide LL_PDU_t2:LL_DATA2 NESN1 SN0 MD0 PloadL9 LL_Data:hide CRC0
Hop: 1st data pdu
Hop: next state 2
0941868us Pkt086 Ch34 AA:hide LL_PDU_t1:LL_DATA1 NESN1 SN1 MD0 PloadL0 CRC1
^CCaught signal 2 (here I use ctrl+C after waiting for 1 or 2 minutes)
Exit main loop ...
bladerf_deinit_stream.
enable module false: Success
bladerf_close.
bladeRF rx thread quit.

I'd like to know why this happenes and how can I fix it. Thanks for any suggestion.

To explain function demod_bits()

Hi Xianjun,
Function demod_bits(a, num_bits, sample_per_symbol) implements the way how ADC samples is converted to bits.

1: Could you explain why the following code is able to determine the bit is 0 or 1:

if (I0*Q1 - I1*Q0) > 0
        bits(k) = 1; 

2: If sample_per_symbol is 4, just the first two samples are used to determine the bit value of the symbol as showed in function demo_bits(). What's the purpose of the other two samples? Will they be just discarded?

Feature request

Any chance you could add support to bluetooth classic? I would love to be able to capturing pairing information without having to spend $20k on hardware.

Or do you know any other projects that can?

segmentation fault

i get a segmentation fault when trying to execute btle_rx

execve("/usr/local/bin/btle_rx", ["btle_rx"], [/* 45 vars */]) = 0
brk(0)                                  = 0x9d16000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7748000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=167542, ...}) = 0
mmap2(NULL, 167542, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb771f000
close(3)                                = 0
open("/usr/lib/libhackrf.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\26\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=21916, ...}) = 0
mmap2(NULL, 24780, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7718000
mmap2(0xb771d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0xb771d000
close(3)                                = 0
open("/lib/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300E\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=275868, ...}) = 0
mmap2(NULL, 278688, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb76d3000
mmap2(0xb7716000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x42000) = 0xb7716000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0r\207\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1665088, ...}) = 0
mmap2(NULL, 1674924, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb753a000
mmap2(0xb76cc000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x191000) = 0xb76cc000
mmap2(0xb76d1000, 7852, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb76d1000
close(3)                                = 0
open("/lib/libusb-1.0.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0/\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=83728, ...}) = 0
mmap2(NULL, 86684, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7524000
mmap2(0xb7538000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13000) = 0xb7538000
close(3)                                = 0
open("/lib/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\237N\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=96676, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7523000
mmap2(NULL, 107212, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7508000
mprotect(0xb751e000, 4096, PROT_NONE)   = 0
mmap2(0xb751f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0xb751f000
mmap2(0xb7521000, 4812, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7521000
close(3)                                = 0
open("/lib/libudev.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\0\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=75168, ...}) = 0
mmap2(NULL, 79924, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb74f4000
mmap2(0xb7506000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11000) = 0xb7506000
close(3)                                = 0
open("/lib/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\30\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=26456, ...}) = 0
mmap2(NULL, 29240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb74ec000
mmap2(0xb74f2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5000) = 0xb74f2000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb74eb000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb74ea000
set_thread_area({entry_number:-1, base_addr:0xb74ea700, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 (entry_number:6)
mprotect(0xb76cc000, 12288, PROT_READ)  = 0
mprotect(0xb751f000, 4096, PROT_READ)   = 0
mprotect(0xb74f2000, 4096, PROT_READ)   = 0
mprotect(0xb7506000, 4096, PROT_READ)   = 0
mprotect(0xb7538000, 4096, PROT_READ)   = 0
mprotect(0xb7716000, 4096, PROT_READ)   = 0
mprotect(0xb771d000, 4096, PROT_READ)   = 0
mprotect(0x8050000, 4096, PROT_READ)    = 0
mprotect(0xb776d000, 4096, PROT_READ)   = 0
munmap(0xb771f000, 167542)              = 0
set_tid_address(0xb74ea768)             = 7789
set_robust_list(0xb74ea770, 12)         = 0
rt_sigaction(SIGRTMIN, {0xb750c960, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb750c9d8, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
uname({sys="Linux", node="pentoo", ...}) = 0
fstat64(1, {st_mode=S_IFREG|0644, st_size=5257, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7747000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x6} ---
+++ killed by SIGSEGV +++

my system is Linux pentoo 4.0.8-pentoo #1 SMP Sat Nov 28 18:30:44 UTC 2015 i686 Intel(R) Atom(TM) CPU Z550 @ 2.00GHz GenuineIntel GNU/Linux

Building for bladerf

Hi I have bladeRF not hackRF. When I follow the instructions to build your code, I get the cmake error:

Could NOT find LIBHACKRF (missing: LIBHACKRF_LIBRARIES LIBHACKRF_INCLUDE_DIR)
Call Stack
/usr/share/cmake-3.0/Modules/FinePacakageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/FindLIBHACKRF.cmake:52 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
btle-tools/CMakeLists.txt:49 (find_pakage)

Could you advise me how to build this for bladeRF instead of hackRF?

Thanks

why I can not achieve the hopping?

I run the program first:
btle_rx -c chan -g gain -a access_addr -k crc_init -o
I can see the adv data,then I connect my phone with bluetooth modules,but I can not see the hopping data,any help will be appreciated.

Segmentation fault

Just a guy with a hackrf

No modification done

Environments: OS Raspbian/Buster 10 32bit, BTLE repo Master Branch.

  1. Raspberry pi4 B 8gb

When doing just the command i get this:
./btle_rx
BLE sniffer. Xianjun Jiao. [email protected]

Segmentation fault

However "./btle_rx -h" shows the help just fine

Im not good with C so not much has been done i do remember using this on a pi4 years ago but not exactly sure how i got the BTLE_RX to work

I wanted to use BTLE_RX to see if the -r flag for raw data is the same raw data that is used for other applications like nRF connect for the android. But found this out that it is not.

cannot run the source code with gdb in Eclipse

I tried to import the project as a makefile project in eclipse. I am trying to use gdb to know the details of BLE scanner.

16:14:16 **** Incremental Build of configuration Release for project ble ****
make all
Building file: ../src/btle_rx.c
Invoking: GCC C Compiler
gcc -I/usr/local/src/hackrf/host/libhackrf/src -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/btle_rx.d" -MT"src/btle_rx.o" -o "src/btle_rx.o" "../src/btle_rx.c"
../src/btle_rx.c: In function ‘parse_ll_pdu_payload_byte’:
../src/btle_rx.c:1411:7: warning: ‘ctrl_pdu_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]
int ctrl_pdu_type;
^
../src/btle_rx.c: In function ‘receiver’:
../src/btle_rx.c:1982:27: warning: ‘ll_pdu_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]
print_ll_pdu_payload((void *)(&ll_data_pdu_payload), ll_pdu_type, ll_ctrl_pdu_type, payload_len, crc_flag);
^
../src/btle_rx.c:1975:28: warning: ‘adv_pdu_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]
print_adv_pdu_payload((void *)(&adv_pdu_payload), adv_pdu_type, payload_len, crc_flag);
^
Finished building: ../src/btle_rx.c

Building file: ../src/btle_tx.c
Invoking: GCC C Compiler
gcc -I/usr/local/src/hackrf/host/libhackrf/src -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/btle_tx.d" -MT"src/btle_tx.o" -o "src/btle_tx.o" "../src/btle_tx.c"
../src/btle_tx.c: In function ‘main’:
../src/btle_tx.c:4266:5: warning: ‘num_packet’ may be used uninitialized in this function [-Wmaybe-uninitialized]
for (i=0; i<num_packet; i++) {
^
Finished building: ../src/btle_tx.c

Building target: ble
Invoking: GCC C Linker
gcc -L/usr/local/include/libhackrf/ -o "ble" ./src/btle_rx.o ./src/btle_tx.o
./src/btle_tx.o: In function sigint_callback_handler': btle_tx.c:(.text+0x160): multiple definition of sigint_callback_handler'
./src/btle_rx.o:btle_rx.c:(.text+0x50): first defined here
./src/btle_tx.o:(.bss+0xf04): multiple definition of do_exit' ./src/btle_rx.o:(.bss+0x0): first defined here ./src/btle_tx.o: In function init_board':
btle_tx.c:(.text+0x2c0): multiple definition of init_board' ./src/btle_rx.o:btle_rx.c:(.text+0x190): first defined here ./src/btle_tx.o: In function open_board':
btle_tx.c:(.text+0x360): multiple definition of open_board' ./src/btle_rx.o:btle_rx.c:(.text+0x270): first defined here ./src/btle_tx.o: In function exit_board':
btle_tx.c:(.text+0x460): multiple definition of exit_board' ./src/btle_rx.o:btle_rx.c:(.text+0x3b0): first defined here ./src/btle_tx.o: In function close_board':
btle_tx.c:(.text+0x490): multiple definition of close_board' ./src/btle_rx.o:btle_rx.c:(.text+0x3e0): first defined here ./src/btle_tx.o: In function toupper_str':
btle_tx.c:(.text+0xa40): multiple definition of toupper_str' ./src/btle_rx.o:btle_rx.c:(.text+0x840): first defined here ./src/btle_tx.o: In function octet_hex_to_bit':
btle_tx.c:(.text+0xa90): multiple definition of octet_hex_to_bit' ./src/btle_rx.o:btle_rx.c:(.text+0x890): first defined here ./src/btle_tx.o: In function int_to_bit':
btle_tx.c:(.text+0xb60): multiple definition of int_to_bit' ./src/btle_rx.o:btle_rx.c:(.text+0x920): first defined here ./src/btle_tx.o: In function convert_hex_to_bit':
btle_tx.c:(.text+0xbc0): multiple definition of convert_hex_to_bit' ./src/btle_rx.o:btle_rx.c:(.text+0x1070): first defined here ./src/btle_tx.o: In function crc_update':
btle_tx.c:(.text+0x3600): multiple definition of crc_update' ./src/btle_rx.o:btle_rx.c:(.text+0x16a0): first defined here ./src/btle_tx.o: In function crc24_byte':
btle_tx.c:(.text+0x3640): multiple definition of crc24_byte' ./src/btle_rx.o:btle_rx.c:(.text+0x16e0): first defined here ./src/btle_tx.o: In function scramble_byte':
btle_tx.c:(.text+0x3820): multiple definition of scramble_byte' ./src/btle_rx.o:btle_rx.c:(.text+0x1720): first defined here ./src/btle_tx.o: In function disp_bit':
btle_tx.c:(.text+0x4a10): multiple definition of disp_bit' ./src/btle_rx.o:btle_rx.c:(.text+0x1190): first defined here ./src/btle_tx.o: In function disp_bit_in_hex':
btle_tx.c:(.text+0x4ab0): multiple definition of disp_bit_in_hex' ./src/btle_rx.o:btle_rx.c:(.text+0x1230): first defined here ./src/btle_tx.o: In function disp_hex':
btle_tx.c:(.text+0x4b40): multiple definition of disp_hex' ./src/btle_rx.o:btle_rx.c:(.text+0x12c0): first defined here ./src/btle_tx.o: In function disp_hex_in_bit':
btle_tx.c:(.text+0x4b90): multiple definition of disp_hex_in_bit' ./src/btle_rx.o:btle_rx.c:(.text+0x1310): first defined here ./src/btle_tx.o: In function save_phy_sample':
btle_tx.c:(.text+0xd070): multiple definition of save_phy_sample' ./src/btle_rx.o:btle_rx.c:(.text+0x13d0): first defined here ./src/btle_tx.o: In function save_phy_sample_for_matlab':
btle_tx.c:(.text+0xd130): multiple definition of save_phy_sample_for_matlab' ./src/btle_rx.o:btle_rx.c:(.text+0x1570): first defined here ./src/btle_tx.o: In function main':
btle_tx.c:(.text.startup+0x0): multiple definition of main' ./src/btle_rx.o:btle_rx.c:(.text.startup+0x0): first defined here ./src/btle_rx.o: In function init_board':
btle_rx.c:(.text+0x194): undefined reference to hackrf_init' btle_rx.c:(.text+0x203): undefined reference to hackrf_error_name'
./src/btle_rx.o: In function board_set_freq': btle_rx.c:(.text+0x232): undefined reference to hackrf_set_freq'
btle_rx.c:(.text+0x243): undefined reference to hackrf_error_name' ./src/btle_rx.o: In function open_board':
btle_rx.c:(.text+0x287): undefined reference to hackrf_open' btle_rx.c:(.text+0x298): undefined reference to hackrf_set_freq'
btle_rx.c:(.text+0x2b2): undefined reference to hackrf_set_sample_rate' btle_rx.c:(.text+0x2c9): undefined reference to hackrf_set_baseband_filter_bandwidth'
btle_rx.c:(.text+0x2de): undefined reference to hackrf_set_vga_gain' btle_rx.c:(.text+0x2ed): undefined reference to hackrf_set_lna_gain'
btle_rx.c:(.text+0x313): undefined reference to hackrf_error_name' btle_rx.c:(.text+0x34b): undefined reference to hackrf_error_name'
btle_rx.c:(.text+0x363): undefined reference to hackrf_error_name' btle_rx.c:(.text+0x37b): undefined reference to hackrf_error_name'
btle_rx.c:(.text+0x393): undefined reference to hackrf_error_name' ./src/btle_rx.o: In function exit_board':
btle_rx.c:(.text+0x3bc): undefined reference to hackrf_exit' ./src/btle_rx.o: In function close_board':
btle_rx.c:(.text+0x3ef): undefined reference to hackrf_stop_rx' btle_rx.c:(.text+0x3fd): undefined reference to hackrf_close'
btle_rx.c:(.text+0x413): undefined reference to hackrf_error_name' btle_rx.c:(.text+0x443): undefined reference to hackrf_error_name'
./src/btle_rx.o: In function run_board': btle_rx.c:(.text+0x47a): undefined reference to hackrf_stop_rx'
btle_rx.c:(.text+0x48f): undefined reference to hackrf_start_rx' btle_rx.c:(.text+0x4ab): undefined reference to hackrf_error_name'
btle_rx.c:(.text+0x4d3): undefined reference to hackrf_error_name' ./src/btle_rx.o: In function config_run_board':
btle_rx.c:(.text+0x525): undefined reference to hackrf_init' btle_rx.c:(.text+0x591): undefined reference to hackrf_open'
btle_rx.c:(.text+0x5a7): undefined reference to hackrf_set_freq' btle_rx.c:(.text+0x5c2): undefined reference to hackrf_set_sample_rate'
btle_rx.c:(.text+0x5da): undefined reference to hackrf_set_baseband_filter_bandwidth' btle_rx.c:(.text+0x5f0): undefined reference to hackrf_set_vga_gain'
btle_rx.c:(.text+0x600): undefined reference to hackrf_set_lna_gain' btle_rx.c:(.text+0x618): undefined reference to hackrf_stop_rx'
btle_rx.c:(.text+0x631): undefined reference to hackrf_start_rx' btle_rx.c:(.text+0x653): undefined reference to hackrf_error_name'
btle_rx.c:(.text+0x683): undefined reference to hackrf_error_name' btle_rx.c:(.text+0x6c3): undefined reference to hackrf_error_name'
btle_rx.c:(.text+0x6eb): undefined reference to hackrf_error_name' btle_rx.c:(.text+0x713): undefined reference to hackrf_error_name'
./src/btle_rx.o:btle_rx.c:(.text+0x743): more undefined references to hackrf_error_name' follow ./src/btle_rx.o: In function stop_close_board':
btle_rx.c:(.text+0x7bf): undefined reference to hackrf_stop_rx' btle_rx.c:(.text+0x7cd): undefined reference to hackrf_close'
btle_rx.c:(.text+0x7da): undefined reference to hackrf_exit' btle_rx.c:(.text+0x803): undefined reference to hackrf_error_name'
btle_rx.c:(.text+0x82b): undefined reference to hackrf_error_name' ./src/btle_rx.o: In function receiver_controller':
btle_rx.c:(.text+0x3ebd): undefined reference to hackrf_set_freq' btle_rx.c:(.text+0x3fcb): undefined reference to hackrf_set_freq'
btle_rx.c:(.text+0x42a6): undefined reference to hackrf_error_name' btle_rx.c:(.text+0x4379): undefined reference to hackrf_set_freq'
btle_rx.c:(.text+0x4472): undefined reference to hackrf_error_name' ./src/btle_tx.o: In function init_board':
btle_tx.c:(.text+0x2c4): undefined reference to hackrf_init' btle_tx.c:(.text+0x333): undefined reference to hackrf_error_name'
./src/btle_tx.o: In function open_board': btle_tx.c:(.text+0x367): undefined reference to hackrf_open'
btle_tx.c:(.text+0x380): undefined reference to hackrf_set_freq' btle_tx.c:(.text+0x39a): undefined reference to hackrf_set_sample_rate'
btle_tx.c:(.text+0x3b1): undefined reference to hackrf_set_txvga_gain' btle_tx.c:(.text+0x3c3): undefined reference to hackrf_error_name'
btle_tx.c:(.text+0x3eb): undefined reference to hackrf_error_name' btle_tx.c:(.text+0x413): undefined reference to hackrf_error_name'
btle_tx.c:(.text+0x43b): undefined reference to hackrf_error_name' ./src/btle_tx.o: In function exit_board':
btle_tx.c:(.text+0x471): undefined reference to hackrf_exit' ./src/btle_tx.o: In function close_board':
btle_tx.c:(.text+0x49e): undefined reference to hackrf_stop_tx' btle_tx.c:(.text+0x4b0): undefined reference to hackrf_close'
btle_tx.c:(.text+0x4c3): undefined reference to hackrf_error_name' btle_tx.c:(.text+0x4f3): undefined reference to hackrf_error_name'
./src/btle_tx.o: In function tx_one_buf': btle_tx.c:(.text+0x594): undefined reference to hackrf_open'
btle_tx.c:(.text+0x5b1): undefined reference to hackrf_set_freq' btle_tx.c:(.text+0x5cf): undefined reference to hackrf_set_sample_rate'
btle_tx.c:(.text+0x5ea): undefined reference to hackrf_set_txvga_gain' btle_tx.c:(.text+0x611): undefined reference to hackrf_start_tx'
btle_tx.c:(.text+0x63d): undefined reference to hackrf_is_streaming' btle_tx.c:(.text+0x65c): undefined reference to hackrf_stop_tx'
btle_tx.c:(.text+0x67b): undefined reference to hackrf_stop_tx' btle_tx.c:(.text+0x68d): undefined reference to hackrf_close'
btle_tx.c:(.text+0x6f4): undefined reference to hackrf_error_name' btle_tx.c:(.text+0x722): undefined reference to hackrf_error_name'
btle_tx.c:(.text+0x761): undefined reference to hackrf_error_name' btle_tx.c:(.text+0x780): undefined reference to hackrf_error_name'
btle_tx.c:(.text+0x7a4): undefined reference to hackrf_error_name' ./src/btle_tx.o:btle_tx.c:(.text+0x7c6): more undefined references to hackrf_error_name' follow
./src/btle_tx.o: In function main': btle_tx.c:(.text.startup+0x123): undefined reference to hackrf_open'
btle_tx.c:(.text.startup+0x13e): undefined reference to hackrf_set_freq' btle_tx.c:(.text.startup+0x15a): undefined reference to hackrf_set_sample_rate'
btle_tx.c:(.text.startup+0x173): undefined reference to hackrf_set_txvga_gain' btle_tx.c:(.text.startup+0x198): undefined reference to hackrf_start_tx'
btle_tx.c:(.text.startup+0x1cd): undefined reference to hackrf_is_streaming' btle_tx.c:(.text.startup+0x1ec): undefined reference to hackrf_stop_tx'
btle_tx.c:(.text.startup+0x209): undefined reference to hackrf_stop_tx' btle_tx.c:(.text.startup+0x21d): undefined reference to hackrf_close'
btle_tx.c:(.text.startup+0x408): undefined reference to hackrf_error_name' btle_tx.c:(.text.startup+0x45e): undefined reference to hackrf_error_name'
btle_tx.c:(.text.startup+0x499): undefined reference to hackrf_error_name' btle_tx.c:(.text.startup+0x4be): undefined reference to hackrf_error_name'
btle_tx.c:(.text.startup+0x4e6): undefined reference to hackrf_error_name' ./src/btle_tx.o:btle_tx.c:(.text.startup+0x50e): more undefined references to hackrf_error_name' follow
collect2: error: ld returned 1 exit status
make: *** [ble] Error 1

16:14:19 Build Finished (took 3s.29ms)

Is it possible to transmit ble packets faster?

  1. Who are you?
    Graduate student
  2. What is your own modification (if any)?
    None
  3. Environments: OS type/version, BTLE repo branch and commit revision
    Ubuntu Latest. BTLE main branch
  4. Board/hardware type
    HackRF
  5. Detailed commands/steps to reproduce the issue, and the related error message, screenshot, etc
    btle_tx
  6. Your debug efforts and results (if any)
    NA
  7. Any other thing we need to know for helping you better?
    NA

I found the Space paras to control the time interval between packets. However, there exists a lower bound of around 295ms, leading to a minimum delay of about 0.3s. Assigning spacing of larger than this will work but a smaller space seems useless. I'm asking whether it would be possible to have lower limits and transmit the next packet even faster? How to possibly achieve that?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.