Git Product home page Git Product logo

sniffle's Introduction

Sniffle

Sniffle is a sniffer for Bluetooth 5 and 4.x (LE) using TI CC1352/CC26x2 hardware.

Sniffle has a number of useful features, including:

  • Support for BT5/4.2 extended length advertisement and data packets
  • Support for BT5 Channel Selection Algorithms #1 and #2
  • Support for all BT5 PHY modes (regular 1M, 2M, and coded modes)
  • Support for sniffing only advertisements and ignoring connections
  • Support for channel map, connection parameter, and PHY change operations
  • Support for advertisement filtering by MAC address and RSSI
  • Support for BT5 extended advertising (non-periodic)
  • Support for capturing advertisements from a target MAC on all three primary advertising channels using a single sniffer. This makes connection detection nearly 3x more reliable than most other sniffers that only sniff one advertising channel.
  • Easy to extend host-side software written in Python
  • PCAP export compatible with the Ubertooth
  • Wireshark compatible plugin

Prerequisites

If you don't want to go through the effort of setting up a build environment for the firmware, you can just flash prebuilt firmware binaries using UniFlash/DSLite. Prebuilt firmware binaries are attached to releases on the GitHub releases tab of this project. When using prebuilt firmware, be sure to use the Python code corresponding to the release tag rather than master to avoid compatibility issues with firmware that is behind the master branch.

Installing GCC

The arm-none-eabi-gcc provided through various Linux distributions' package manager often lacks some header files or requires some changes to linker configuration. For minimal hassle, I suggest using the ARM GCC linked above. You can just download and extract the prebuilt executables.

Installing the TI SDK

The TI SDK is provided as an executable binary that extracts a bunch of source code once you accept the license agreement. On Linux and Mac, the default installation directory is inside~/ti/. This works fine and my makefiles expect this path, so I suggest just going with the default here. The same applies for the TI SysConfig tool.

Once the SDK has been extracted, you will need to edit one makefile to match your build environment. Within ~/ti/simplelink_cc13xx_cc26xx_sdk_7_40_00_77 (or wherever the SDK was installed) there is a makefile named imports.mak. The only paths that need to be set here to build Sniffle are for GCC, XDC, and SysConfig. We don't need the CCS compiler. See the diff below as an example, and adapt for wherever you installed things.

diff --git a/imports.mak b/imports.mak
index d3900b5b6..d5f765b92 100644
--- a/imports.mak
+++ b/imports.mak
@@ -18,14 +18,14 @@
 # will build using each non-empty *_ARMCOMPILER cgtool.
 #
 
-XDC_INSTALL_DIR        ?= /home/username/ti/xdctools_3_62_01_15_core
-SYSCONFIG_TOOL         ?= /home/username/ti/ccs1230/ccs/utils/sysconfig_1.18.1/sysconfig_cli.sh
+XDC_INSTALL_DIR        ?= $(HOME)/ti/xdctools_3_62_01_15_core
+SYSCONFIG_TOOL         ?= $(HOME)/ti/sysconfig_1.18.1/sysconfig_cli.sh
 
-CMAKE                  ?= /home/username/cmake-3.21.3/bin/cmake
+CMAKE                  ?= cmake
 PYTHON                 ?= python3
 
 TICLANG_ARMCOMPILER    ?= /home/username/ti/ccs1230/ccs/tools/compiler/ti-cgt-armllvm_3.2.0.LTS-0
-GCC_ARMCOMPILER        ?= /home/username/arm-none-eabi-gcc/9.2019.q4.major-0
+GCC_ARMCOMPILER        ?= $(HOME)/arm_tools/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi
 IAR_ARMCOMPILER        ?= /home/username/iar9.40.2
 
 # Uncomment this to enable the TFM build

Obtaining DSLite

DSLite is TI's command line programming and debug server tool for XDS110 debuggers. The CC26xx and CC13xx Launchpad boards both include XDS110 debuggers. Unfortunately, TI does not provide a standalone command line DSLite download. The easiest way to obtain DSLite is to install UniFlash from TI. It's available for Linux, Mac, and Windows. The DSLite executable will be located at deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite relative to the UniFlash installation directory. On Linux, the default UniFlash installation directory is inside ~/ti/.

You should place the DSLite executable directory within your $PATH.

Firmware Building

Once the GCC, DSLite, and the SDK is installed and operational, building Sniffle should be straight forward. Just navigate to the fw directory and run make. If you didn't install the SDK to the default directory, you may need to edit SIMPLELINK_SDK_INSTALL_DIR in the makefile.

If building for or installing on a some variant of Launchpad other than CC26x2R, you must specify PLATFORM=xxx, either as an argument to make, or by defining it as an environment variable prior to invoking make. Supported values for PLATFORM can be found in the firmware makefile. Be sure to perform a make clean before building for a different platform.

Firmware Installation (TI Launchpad Board)

To install Sniffle on a (plugged in) CC26x2R Launchpad using DSLite, run make load within the fw directory. For any other Launchpad models, you must specify the PLATFORM argument to make as descirbed above. You can also flash the compiled sniffle.hex binary using the UniFlash GUI.

Firmware Installation (SONOFF USB Dongle)

To install Sniffle on a SONOFF CC2652P dongle (equipped with a CP2102 USB/UART bridge), you need to use a special firmware build that uses a 921600 baud rate (labelled 1M) instead of the default 2 megabit baud rate. You can use JelmerT/cc2538-bsl to flash the firmware using the built-in ROM bootloader with the following command:

python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv sniffle_cc1352p1_cc2652p1_1M.hex

As of April 23, 2024, there are a couple bugs in cc2538-bsl for which pull requests 168 and 173 need to be merged to fix. In the interim, while waiting for those pull requests to be merged, you can use my fork at https://github.com/sultanqasim/cc2538-bsl.

WARNING: Do not flash the wrong build variant using the bootloader, or you risk bricking the device and locking yourself out of the bootloader. For Sonoff CC2652P devices, use the sniffle_cc1352p1_cc2652p1_1M.hex file (CC2652P1F_1M build variant). If you flash the wrong variant and lock yourself out of the bootloader, it may be possible to recover the device using JTAG/SWD.

Newer Sonoff dongles contain a CP2102N instead of the old CP2102. The CP2102N supports higher baud rates, including 2M and 3M baud. However, there is no easy and cross-platform way to distinguish between the CP2102 and CP2102N in software. Thus, the Sniffle host software expects the 1M (921600 baud) firmware on all devices with a CP2102/CP2102N USB/UART bridge. This slower baud rate should be fine for nearly all use cases, though in theory it may be possible to saturate the UART interface with the 2M PHY. If you really want to use the full 2M baud rate on your newer CP2102N equipped Sonoff (or other brand) dongle, you can flash the full baud rate firmware and modify sniffle_hw.py to not lower the baud rate for CP2102 devices.

Sniffer Usage

[skhan@serpent python_cli]$ ./sniff_receiver.py --help
usage: sniff_receiver.py [-h] [-s SERPORT] [-c {37,38,39}] [-p] [-r RSSI] [-m MAC] [-i IRK]
                         [-S STRING] [-a] [-e] [-H] [-l] [-q] [-Q PRELOAD] [-n] [-o OUTPUT]

Host-side receiver for Sniffle BLE5 sniffer

options:
  -h, --help            show this help message and exit
  -s SERPORT, --serport SERPORT
                        Sniffer serial port name
  -c {37,38,39}, --advchan {37,38,39}
                        Advertising channel to listen on
  -p, --pause           Pause sniffer after disconnect
  -r RSSI, --rssi RSSI  Filter packets by minimum RSSI
  -m MAC, --mac MAC     Filter packets by advertiser MAC
  -i IRK, --irk IRK     Filter packets by advertiser IRK
  -S STRING, --string STRING
                        Filter for advertisements containing the specified string
  -a, --advonly         Sniff only advertisements, don't follow connections
  -e, --extadv          Capture BT5 extended (auxiliary) advertising
  -H, --hop             Hop primary advertising channels in extended mode
  -l, --longrange       Use long range (coded) PHY for primary advertising
  -q, --quiet           Don't display empty packets
  -Q PRELOAD, --preload PRELOAD
                        Preload expected encrypted connection parameter changes
  -n, --nophychange     Ignore encrypted PHY mode changes
  -o OUTPUT, --output OUTPUT
                        PCAP output file name

The XDS110 debugger on the Launchpad boards creates two serial ports. On Linux, they are typically named ttyACM0 and ttyACM1. The first of the two created serial ports is used to communicate with Sniffle. By default, the Python CLI communicates using the first CDC-ACM device it sees matching the TI XDS110 USB VID:PID combo. You may need to override this with the -s command line option if you are using a different USB serial adapter or have additional USB CDC-ACM devices connected.

For the -r (RSSI filter) option, a value of -40 tends to work well if the sniffer is very close to or nearly touching the transmitting device. The RSSI filter is very useful for ignoring irrelevant advertisements in a busy RF environment. The RSSI filter is only active when capturing advertisements, as you always want to capture data channel traffic for a connection being followed. You probably don't want to use an RSSI filter when MAC filtering is active, as you may lose advertisements from the MAC address of interest when the RSSI is too low.

To hop along with advertisements and have reliable connection sniffing, you need to set up a MAC filter with the -m option. You should specify the MAC address of the peripheral device, not the central device. To figure out which MAC address to sniff, you can run the sniffer with RSSI filtering while placing the sniffer near the target. This will show you advertisements from the target device including its MAC address. It should be noted that many BLE devices advertise with a randomized MAC address rather than their "real" fixed MAC written on a label.

For convenience, there is a special mode for the MAC filter by invoking the script with -m top instead of -m with a MAC address. In this mode, the sniffer will lock onto the first advertiser MAC address it sees that passes the RSSI filter. The -m top mode should thus always be used with an RSSI filter to avoid locking onto a spurious MAC address. Once the sniffer locks onto a MAC address, the RSSI filter will be disabled automatically by the sniff receiver script (except when the -e option is used).

Most new BLE devices use Resolvable Private Addresses (RPAs) rather than fixed static or public addresses. While you can set up a MAC filter to a particular RPA, devices periodically change their RPA. RPAs can can be resolved (associated with a particular device) if the Identity Resolving Key (IRK) is known. Sniffle supports automated RPA resolution when the IRK is provided. This avoids the need to keep updating the MAC filter whenever the RPA changes. You can specify an IRK for Sniffle with the -i option; the IRK should be provided in hexadecimal format, with the most significant byte (MSB) first. Specifying an IRK allows Sniffle to channel hop with an advertiser the same way it does with a MAC filter. The IRK based MAC filtering feature (-i) is mutually exclusive with the static MAC filtering feature (-m).

There is also a convenience feature to automatically identify the MAC address of the advertiser whose advertisement or scan response contains a specified string (series of bytes). This is useful for devices with RPAs where the IRK is unknown, but the advertisement contains a sufficiently unique static string suitable for identification. This feature uses the -S option, with the string specified using standard escape sequences. For example, to look for an advertiser whose advertisement contains the hex byte sequence DE AD BE EF, specify -S "\xDE\xAD\xBE\xEF". To look for an advertiser with the string "hello", simply specify -S "hello". When the string search feature is used, initially all MAC addresses will be accepted till an advertisement containing the search string is found. After that, a MAC filter will be set up with the corresponding advertiser's MAC address, and any RSSI filter would be automatically disabled.

To enable following auxiliary pointers in Bluetooth 5 extended advertising, enable the -e option. To improve performance and reliability in extended advertising capture, this option disables hopping on the primary advertising channels, even when a MAC filter is set up. If you are unsure whether a connection will be established via legacy or extended advertising, you can enable the -H flag in conjunction with -e to perform primary channel hopping with legacy advertisements, and scheduled listening to extended advertisement auxiliary packets. When combining -e and -H, the reliability of connection detection may be reduced compared to hopping on primary (legacy) or secondary (extended) advertising channels alone.

To sniff the long range PHY on primary advertising channels, specify the -l option. Note that no hopping between primary advertising channels is supported in long range mode, since all long range advertising uses the BT5 extended mechanism. Under the extended mechanism, auxiliary pointers on all three primary channels point to the same auxiliary packet, so hopping between primary channels is unnecessary.

To not print empty data packets on screen while following a connection, use the -q flag. This makes it easier to observe meaningful communications in real time, but may obscure when connection following is flaky or lost.

For encrypted connections, Sniffle supports detecting connection parameter updates even when the encryption key is unknown, and it attempts to measure the new parameters. However, if you know the new connection interval and Instant delta to expect in encrypted connection parameter updates, you can specify them with the --preload/-Q option to improve performance/reliability. The expected Interval:DeltaInstant pair should be provided as colon separated integers. Interval is an integer representing multiples of 1.25 ms (as defined in LL_CONNECTION_UPDATE_IND). DeltaInstant is the number of connection events between when the connection update packet is transmitted and when the new parameters are applied. DeltaInstant must be greater than or equal to 6, as per the Bluetooth specification's requirements for master devices. If multiple encrypted parameter updates are expected, you can provide multiple parameter pairs, separated by commas (eg. 6:7,39:8). If you have a device that issues encrypted PHY update PDUs that don't change the PHY, or puts out encrypted LE power control PDUs without any PHY changes, you can use the --nophychange/-n option.

If for some reason the sniffer firmware locks up and refuses to capture any traffic even with filters disabled, you should reset the sniffer MCU. On Launchpad boards, the reset button is located beside the micro USB port.

Scanner Usage

usage: scanner.py [-h] [-s SERPORT] [-c {37,38,39}] [-r RSSI] [-l]

Scanner utility for Sniffle BLE5 sniffer

optional arguments:
  -h, --help            show this help message and exit
  -s SERPORT, --serport SERPORT
                        Sniffer serial port name
  -c {37,38,39}, --advchan {37,38,39}
                        Advertising channel to listen on
  -r RSSI, --rssi RSSI  Filter packets by minimum RSSI
  -l, --longrange       Use long range (coded) PHY for primary advertising
  -o OUTPUT, --output OUTPUT
                        PCAP output file name

The scanner command line arguments work the same as the sniffer. The purpose of the scanner utility is to gather a list of nearby devices advertising, and actively issue scan requests for observed devices, without having the deluge of fast scrolling data you get with the sniffer utility. The hardware/firmware will enter an active scanning mode where it will report received advertisements, issue scan requests for scannable ones, and report received scan responses. The scanner utility will record and report observed MAC addresses only once without spamming the display. Once you're done capturing advertisements, press Ctrl-C to stop scanning and report the results. The scanner will show the last advertisement and scan response from each target. Scan results will be sorted by RSSI in descending order.

Usage Examples

Sniff all advertisements on channel 38, ignore RSSI < -50, stay on advertising channel even when CONNECT_REQs are seen.

./sniff_receiver.py -c 38 -r -50 -a

Sniff advertisements from MAC 12:34:56:78:9A:BC, stay on advertising channel even when CONNECT_REQs are seen, save advertisements to data1.pcap.

./sniff_receiver.py -m 12:34:56:78:9A:BC -a -o data1.pcap

Sniff advertisements and connections for the first MAC address seen with RSSI >= -40. The RSSI filter will be disabled automatically once a MAC address has been locked onto. Save captured data to data2.pcap.

./sniff_receiver.py -m top -r -40 -o data2.pcap

Sniff advertisements and connections from the peripheral with big endian IRK 4E0BEA5355866BE38EF0AC2E3F0EBC22. Preload two expected encrypted connection parameter updates; the first with an Interval of 6, occuring at an instant 6 connection events after an encrypted LL_CONNECTION_UPDATE_IND is observed by the sniffer. The second expected encrypted connection update has an Interval of 39, and DeltaInstant of 6 too.

./sniff_receiver.py -i 4E0BEA5355866BE38EF0AC2E3F0EBC22 -Q 6:6,39:6

Sniff BT5 extended advertisements and connections from nearby (RSSI >= -55) devices.

./sniff_receiver.py -r -55 -e

Sniff legacy and extended advertisements and connections from the device with the specified MAC address. Save captured data to data3.pcap.

./sniff_receiver.py -eH -m 12:34:56:78:9A:BC -o data3.pcap

Sniff extended advertisements and connections using the long range primary PHY on channel 38.

./sniff_receiver.py -le -c 38

Actively scan on channel 39 for advertisements with RSSI greater than -50.

./scanner.py -c 39 -r -50

Obtaining the IRK

If you have a rooted Android phone, you can find IRKs (and LTKs) in the Bluedroid configuration file. On Android 8.1, this is located at /data/misc/bluedroid/bt_config.conf. The LE_LOCAL_KEY_IRK specifies the Android device's own IRK, and the first 16 bytes of LE_KEY_PID for every bonded device in the file indicate the bonded device's IRK. Be aware that keys stored in this file are little endian, so the byte order of keys in this file will need to be reversed. For example, the little endian IRK 22BC0E3F2EACF08EE36B865553EA0B4E needs to be changed to 4E0BEA5355866BE38EF0AC2E3F0EBC22 (big endian) when being passed to Sniffle with the -i option.

You can also find the IRK and LTK through HCI Snoop logs captured on Android or iOS without rooting the device:

Wireshark Plugin

Sniffle includes a Wireshark plugin that makes it possible to launch Sniffle automatically from the Wireshark GUI by selecting the 'Sniffle' capture interface.

To install the Sniffle plugin, first find the location of your Personal Extcap folder in the 'About Wireshark' dialog (Help > About Wireshark > Folders > Personal Extcap path). On Linux and Mac OS systems running recent versions of Wireshark (4.2.0+), this folder is located at ~/.local/lib/wireshark/extcap. Under Windows, it can be found at %USERPROFILE%\AppData\Roaming\Wireshark\extcap.

Copy the following files from the python_cli directory into your Personal Extcap folder:

python_cli/pcap.py
python_cli/packet_decoder.py
python_cli/sniffle_hw.py
python_cli/sniffle_extcap.py
python_cli/sniffle_extcap.bat (Windows only)

On Unix systems, ensure that the main plugin script is marked executable:

chmod +x ~/.local/lib/wireshark/extcap/sniffle_extcap.py

On Windows, it may be necessary to edit sniffle_extcap.bat to specify the location of the python interpreter if the installation directory is not included in the PATH, e.g.:

@echo off
C:\my_python_install\python.exe "%~dp0sniffle_extcap.py" %*

On Mac OS, Wireshark may try to use the Xcode Python rather than the Python in your PATH specified by your shell profile. Thus, the Sniffle plugin may fail to show up in extcap interfaces if PySerial is not installed for the Xcode Python. To fix this, you can edit the shebang line of sniffle_extcap.py to directly point to the Python with PySerial installed, for example the Homebrew Python at /opt/homebrew/bin/python3, rather than /usr/bin/env python3.

Once the plugin has been installed, restart Wireshark or choose Capture > Refresh Interfaces to enable the Sniffle interface.

As an alternative to copying files into the extcap folder, on Unix systems you can place a single symbolic link in the extcap folder pointing to a copy of the plugin script stored elsewhere:

mkdir -p ~/.local/lib/wireshark/extcap
ln -s ~/sniffle/python_cli/sniffle_extcap.py ~/.local/lib/wireshark/extcap

Transmit Functionality

While the original 2019 Sniffle firmware was purely a passive listener, later firmware versions added various features to actively transmit packets in various ways. Current Sniffle firmware supports acting as both a GAP central and peripheral device, including active scanning, legacy and extended advertising, initiating connections, and being connected in a master (central) or slave (peripheral) role. The scanner.py script performs active scanning. The initiator.py script initiates a connection to a peripheral and then acts as a connected master. The advertiser.py script performs legacy advertising and accepts connection requests from other devices, transitioning to a connected slave role.

The transmit functionality of Sniffle is a little different from a traditional HCI-based Bluetooth controller, because it gives you very low level control of the exact PDUs being sent at the link layer. This low-level control allows the host-side code to implement additional functionality, such as link layer fuzz testing or link layer relay attacks.

I have not yet taken the time to formally document the Sniffle firmware's API, though it is fairly self-explanatory when looking at its host-side implementation in sniffle_hw.py. Active scanning (that transmits scan requests) is activated by cmd_scan. Connection initiation is triggered by cmd_connect, though it's easiest to use the initiate_conn wrapper. Advertising (optionally connectable) is activated by cmd_advertise for legacy advertising, or cmd_advertise_ext for extended advertising.

XDS110 UART Latency

At least at the time of writing, the TI XDS110 debugger included in Launchpad boards has some undesirable behaviour in its USB to UART bridge, where at high baud rates, there can be severe latency, especially with frequent small writes as done by the Sniffle firmware. This issue has been present for years, and is still present as of April 2024 with the XDS110 firmware 3.0.0.28 bundled with UniFlash 8.6.0. The root cause is that in DMA based operation, the XDS110 firmware accumulates UART data in a buffer whose size is proportional to baud rate, and waits for this buffer to fill before transferring the data. There is logic to flush this buffer if no new data has arrived over the last 15 milliseconds, but this flushing logic is never triggered when Sniffle is frequently adding small packets from connection events every few milliseconds. As a result of this suboptimal behaviour, sniffed data can appear in delayed bursts on the host.

The XDS110 firmware also has an alternate mode for UART operation, where every UART receive triggers an interrupt that results in data immediately being passed to the host. This interrupt-based mode of operation has much lower latency. However, the firmware only uses it for baud rates below 230400. As a workaround to the high latency of DMA mode operation with frequent small data chunks, you can modify the firmware to use interrupt-based USB-UART bridging even at high baud rates (like 2M baud as used by Sniffle). In firmware 3.0.0.28 (included with Uniflash 8.6.0), you can hex edit the bytes at offset 0x0A14 from 61 3F to 00 1F. This will change the baud rate for switching to DMA-based UART operation from 230400 to 0x200000 (2097152).

Be aware that the offsets and byte modifications described above are only for firmware 3.0.0.28, and will be different for different firmware versions. Flashing invalid firmware onto your debugger may damage it, and we assume no responsibility for any damage that may occur.

The following commands can be used on Linux to modify the XDS110 firmware for low latency UART at high baud rates:

cd ~/ti/uniflash_8.6.0/deskdb/content/TICloudAgent/linux/ccs_base/common/uscif/xds110/
cp firmware_3.0.0.28.bin firmware_3.0.0.28_fastuart.bin
printf '\x00\x1f' | dd of=firmware_3.0.0.28_fastuart.bin bs=1 seek=$((0x0A14)) conv=notrunc
sha256sum firmware_3.0.0.28_fastuart.bin

Before flashing, verify that the SHA256 sum of the modified firmware is c226f2e9cb2b9f0bc111ca11f2903d58d4065293468623428c0e8eeb22086dcf. After verifying this, run the following commands to flash the modified XDS110 debugger firmware:

./xdsdfu -m
./xdsdfu -f firmware_3.0.0.28_fastuart.bin -r

sniffle's People

Contributors

froloffw7 avatar jaylogue avatar mdxs avatar stevewillson avatar sultanqasim 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

sniffle's Issues

Feature request: integragtion with Wireshark

I have seen that the sniffer can write pcaps and they work in wireshark. Would it be possible to have a module in wireshark that speaks with the sniffle firmware directly so we can directly sniff in wireshark?

Forcing a repairing of bluetooth devices

Can this or any other software you know of send a LMP message that it lost the pairing secret to force a repairing to other bluetooth devices you are trying to sniff?

update to use UART2 drivers

SimpleLink™ cc13xx_cc26xx SDK 6.20.00.29 removes support for UART in favor of the UART2 driver.

https://software-dl.ti.com/simplelink/esd/simplelink_cc13xx_cc26xx_sdk/6.20.00.29/exports/release_notes_simplelink_cc13xx_cc26xx_sdk_6_20_00_29.html

Sniffle appears to use UART in messenger.c/h files and also the sniffle.syscfg file.

UART is removed from the SimpleLink SDK in 6.20.00.29. Sniffle will not build when using SimpleLInk SDK 6.20.00.29 or newer SDK 6.20.00.29 contains both the UART and UART2 drivers.

Add option to report packets with CRC error

Packets with CRC errors give information about timings when they were transmitted. The CRC ok vs CRC not ok give information about utilization of the channel. Number of CRC errors may also give information on bad design of the transmitter (assuming sniffer is running on dev board from the chip manufacturer - these designs usually are very well designed in terms of antenna and low internal interferences).

I am trying to find out why the sniffer is able to follow the connection only in 44% cases (out of 25 tests). It seems that CONNECT_IND is seen on channels 0 and 39. No CONNECT_IND on channel 12. Maybe there are packets on channel 12 with CRC error ?
Please look at the file attached.
(btle.advertising_header.pdu_type == 0x0) && (btle_rf.channel == 0) gives 600 packets, while for 12 and 39 number of ADV_IND are 527 and 550 respectively. Not sure why, but having an option to see packets with CRC error may solve this mystery. Maybe there is another explanation ?

As of CONNECT_IND, use this filter to check that only channels 0 and 39 are present in the file.
btle.advertising_header.pdu_type == 0x5

Same for SCAN_REQ - no SCAN_REQ packets on channel 12 reported.

sniffer-ti-iphone-to-telink.zip

The scan file was created using Wireshark, with non empty "MAC address" option field. The board was CC1352R1.

The connection sniffing work 100% for NRF52840 board that has 493 us between end of ADV_IND and beginning of another ADV_IND. The Telink TLSR8250 has 880 us. Here are the timings done using a commercial sniffer with precise time measurements.

image
image

Is the CC2650STK supported?

I have a CC2650STK lying around. BLE 5.1 in stead of BLE 5.2 (as for the 2652), and only 20KB of RAM.

Is it worth trying to get Sniffle running on this board, or is that a non-starter?

Successful build of Sniffle for CC2651P3?

The LP-CC2651P3 is listed as a supported hardware platform for Sniffle. I attempt to build Sniffle by following the instructions on the README.md file. But after flashing the built firmware to the LP-CC2651P3 board, I am not able to observe any output when running scanner.py or sniff_receiver.py

Build procedure:

  1. Modify makefile, remove the dependency on syscfg
    BEFORE: %.obj: %.c $(CONFIGPKG)/compiler.opt syscfg
    AFTER: %.obj: %.c $(CONFIGPKG)/compiler.opt
  2. Run make syscfg, specify PLATFORM = CC2651P31
  3. Open the file ti_radio_config.c and comment out the line:
    .extFilterConfig.bAcceptSyncInfo = 0x0 according to: https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1090449/cc2651p3-sysconfig-including-bacceptsyncinfo-parameter-for-cmd_ble5_scanner
  4. Run make sniffle.out to build the sniffle.out firmware binary.
  5. Flash the file sniffle.out to the LP-CC2651P3 using make load

I receive a "Success" message after running make load

I run some of the python_cli tools scanner.py or sniff_receiver.py but they do not output any information.

I have multiple BLE devices near the LP-CC2651P3 board so I believe that I should see some output when the above tools are run.

Version Information:

DSLite version 12.0.0.2728
ARM GCC Toolchain: gcc version 11.2.1 20220111 (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14))
SimpleLink SDK: simplelink_cc13xx_cc26xx_sdk_6_10_00_29
Hardware: LP-CC2651P3

Information about the sniffle.out file:

$ sha1sum sniffle.out
ffb94008161f67ab48b89829d16e4da806111760 sniffle.out
$ file sniffle.out
sniffle.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped

$ ls -la sniffle.out
File size: 1579852 bytes

Any help in debugging this issue is greatly appreciated.

Periodic advertising support?

Hello! I like your solution very much and I think it is great!
I have a small question about your project plans.
Are there any plans to implement periodic advertising sniffing in the project?
Thank you

Cannot read property 'DS' of undefined error

When I tried to flash Release 1.4 sniffle_cc1352r.out onto TI CC1352R1 LaunchPad using TI UniFlash, I was getting the above error. Can you please advise if I am missing something?
Capture

How to build the firmware for CC1352P1 Launchpad?

Hi,
the readme mentions that it should be possible to build the firmware for CC1352P, however, some modifications are required. Can you detail those modifications since I have a CC1352P1 Launchpad that I want to use.

Thank you!
Stefan

Finding advertiser addresses by searching advertisement data for strings

Nice feature suggestion from Diana for when we don't know the IRK but have devices with a recognizable advertisement body or scan response body:

Implement scanner flags to specify hex strings to search for in advertisement and scan response data.

These would be extra host side filters. Only advertisers that meet the advertisement data and/or scan response search criteria would be printed out.

availability on pypi

it would be great to add sniffle to pypi to ease installation process and increase visibility of this awesome sniffer

Decryption Support

While it’s possible to decrypt after capture with crackle, this has limitations. Connection parameter changes occurring over an encrypted link can’t be handled by the firmware since they’re also encrypted. This can be solved by implementing decryption within the firmware (when LTK is known). The firmware should also report back a flag with every packet indicating whether or not it was decrypted before being sent to the host, and the host can note this in the PCAP (the format supports this).

Planned for version 1.3

MacsO Catalina "arm-none-eabi-gcc" cannot be opened because the developer cannot be verified

Hi, tried this on my Mac and it failed - here is the screen dump of the attempt to make.

bobtaylor@Bobs-MacBook-Pro Sniffle-master % cd fw
bobtaylor@Bobs-MacBook-Pro fw % make
Running Configuro...
Unable to find any JVMs matching version "1.7".
making package.mak (because of package.bld) ...
gnu.targets.arm.M4F: warning: failed to parse '-dumpversion' output (= ''); check compiler options
gnu.targets.arm.M4F: warning: can't determine gcc version;
Check if /Users/bobtaylor/ti/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gcc can run on
MacOS.
Also, try explicitly setting the GCCVERS configuration parameter.
gnu.targets.arm.M4F: warning: failed to parse '-v' output (= ''); check compiler options
gnu.targets.arm.M4F: warning: can't determine binutils version;
Check if /Users/bobtaylor/ti/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-ld can run on
MacOS.
Also, try explicitly setting the BINVERS configuration parameter.
generating interfaces for package rtos_build (because package/package.xdc.inc is older than package.xdc) ...
configuring sniffle.xm4fg from package/cfg/sniffle_pm4fg.cfg ...
generating custom ROM library makefile ...
Starting build of library sources ...
making /Users/bobtaylor/ti/Sniffle-master/fw/rtos_build/package/cfg/sniffle_pm4fg.src/sysbios/rom_sysbios.am4fg ...
asmm4fg /Users/bobtaylor/ti/simplelink_cc13x2_26x2_sdk_3_40_00_02/kernel/tirtos/packages/ti/sysbios/family/arm/m3/Hwi_asm_gnu.sv7M ...
gmake[1]: *** [makefile:49: m3_Hwi_asm_gnu.o] Killed: 9
gmake: *** [/Users/bobtaylor/ti/Sniffle-master/fw/rtos_build/package/cfg/sniffle_pm4fg.src/makefile.libs:57: /Users/bobtaylor/ti/Sniffle-master/fw/rtos_build/package/cfg/sniffle_pm4fg.src/sysbios/rom_sysbios.am4fg] Error 2
Build of libraries failed.
error: xdc.cfg.SourceDir: "/Users/bobtaylor/ti/xdctools_3_60_02_34_core/packages/xdc/cfg/SourceDir.xs", line 209: xdc.cfg.SourceDir : Build of generated source libraries failed: exit status = 2:

js: "/Users/bobtaylor/ti/xdctools_3_60_02_34_core/packages/xdc/cfg/Main.xs", line 160: Error: Configuration failed!
gmake: *** [package.mak:218: package/cfg/sniffle_pm4fg.xdl] Error 1
gmake: *** Deleting file 'package/cfg/sniffle_pm4fg.xdl'
gmake: *** [package/cfg/sniffle_pm4fg.xdl] Deleting file 'package/cfg/sniffle_pm4fg.h'
gmake: *** [package/cfg/sniffle_pm4fg.xdl] Deleting file 'package/cfg/sniffle_pm4fg.c'
js: "/Users/bobtaylor/ti/xdctools_3_60_02_34_core/packages/xdc/tools/Cmdr.xs", line 52: Error: xdc.tools.configuro: configuration failed due to earlier errors (status = 2); 'linker.cmd' deleted.
make: *** [rtos_build/linker.cmd] Error 1
bobtaylor@Bobs-MacBook-Pro fw %

Minimum RSSI Value

Hi there!

I am using the sniffer to compare the BLE 5.0 Longrange mode and the BLE 5.0 Legacy mode.
The device I am using is a LAUNCHXL-CC26X2R1.

I couldn't receive any messages under a RSSI value of approximately -90dBm.
According to texas Instruments it should be possible to receive signals at -103dBm with the Longrange mode.
Source: https://e2e.ti.com/blogs_/b/process/archive/2017/01/30/how-does-bluetooth-5-increase-the-achievable-range-of-a-bluetooth-low-energy-connection

Does anybody know whether this is possible?
I was only able to find settings, that filter signals greater than a certain RSSI value.
Is there a setting where i can specify that i only want to reveice signals smaller than -90dBm or signals down to -103dBm?

Anyway, thanks for the great piece of software. It worked perfectly otherwise.

Connection clock drift compensation not working correctly

I found that Sniffle version 1.3 cannot detect packets some time after the connection event. I thought that this was due to the fact that I may have incorrectly assembled the firmware for CC1352P1 and, therefore, I downloaded the ready-made firmware sniffle_cc1352.out for the original TI LAUNCHXL-CC1352R1, which I used for subsequent tests.
The results are the same.
Then I launched two versions of the Sniffle at the same time. Sniffle version 1.1 (CC1352P1) successfully tracked all the packets, Sniffle version 1.3 (LAUNCHXL-CC1352R1) stopped tracking packets some time after the connection.
An archive with pcap files and console output is attached.
sniffle.zip

No output from Sniffer

I just setup the project as described on a CC26X2R1 by following the instructions but I'm not able to get any output from the board. I tried both, Win10 and Ubuntu and building & flashing seem to work.
Any suggestion, what could went wrong here?

Thanks!

is the slaesh cc2652RB stick supported?

As the Electrolama ZZH Stick is out of stock the CC2652RB stick by slaesh is the better alternative:
https://slae.sh/projects/cc2652/.

I guess it is basically the same as the ZZH but I don't know for sure.
It would be great if both, the slaesh stick and the zzh stick work, as they have a much better format than the development boards.

Bluetooth classic or LE?

Thanks very much for sharing this nice library.

I tried to sniff the below command, and it did not find anything:

# l2ping BTMAC

Can you confirm that l2ping is classic or LE? (I believe it's classic as Sniffle did not catch any packets during the ping).

Installation Process

Is there a video that I can refer to for the Installation and Configure Sniffle ?
ps:Apart from the steps written in the readme file.

is CC2652P supported?

Hello, i have cc2652p board. Is it supported? What i need to change to build for this?

Capture with Wireshark using Sniffle plugin freezes on Linux

When I try to capture with Wireshark using the Sniffle 1.7 plugin, it freezes on my Linux setup.

When I use the command-line tools, I can capture into a PCAP that I can load into Wireshark just fine.

Perhaps this is specific to my environment, using:

  • Xubuntu 22.04.1 LTS (as a VMware 16.2.4 Guest inside a Windows 11 host)
  • Wireshark 3.6.2 (Git v3.6.2 packaged as 3.6.2-2)
  • Sniffle 1.7 expanded from .zip (from the release Version 1.7)
  • LAUNCHXL-CC26X2R1 with sniffle_cc2652r1.out (from the release Version 1.7)
  • Using the instructions from the README.md (tried both the files copied and the symlink approach)

Strange is also that (after first use after install) using the "Sniffle BLE sniffer: sniffle" interface, I recall Wireshark showing a dialog to configure the Sniffle settings. However it doesn't seem to allow me to get into those settings again (though I did see them reflected in ~/.config/wireshark/preferences (for example to select the serial port to be used).

Preliminary questions before commitment of Sniffle

Currently we are after decent audio bluetooth pairs of devices on a consumer level. Such pairs are mainly in-ears and mobiles with android/ios. On our way about the how and why of such pairs we were pretty disenchanted, missing a lot of reasonable information from the vendors.
Without diving too deep into the Bluetooth workings or crafting software ourselves, we would like to learn more with the help of your package plus a CC1352R1 TI board, within the above described context.
Would appreciate if you advise us if answers to the following questions are possible regarding usage of Sniffle. Also, for additional workflow hints regarding tools before and thereafter along the questions, we thank you in advance.

Regarding connection details finding out

  • Which BT protocol and version are negotiated between devices
  • Which BT Profiles are negotiated between devices
  • Which protocol is negotiated between devices
  • Which codecs are used, especially any along the following: sbc, mpeg3, ldac, aptx(hd, ll, ad), lhdc in mono, stereo, dual, joint stereo.
  • Which bitrate(kbps) are used between devices
  • Which samplerate(kHz) are used between devices
  • Possibility to trace any manual changes on either side of the devices

Regarding transmission details finding out

  • What happens on loss of connection
  • What happens on dropouts of transmission(on the audio stream, packet loss)
  • Possibility to analyze jitter regarding latency or rate error

Unable to build working firmware

Hi,
First of all thanks a lot for publishing this excellent work!

I can successfully flash release v1.6 (sniffle_cc2652rb.out) to my LP-CC2652RB. The red LED blinks, and the python cli tools work as intended.

But when I try to build this binary myself, it doesn't work.
I do make clean and make platform=CC2652RB1F load, and the process generates a sniffle.out file, but when I flash that, the red LED stays off and there's no serial output from the board.
I tried this on macOS and Ubuntu, using the exact versions of the ARM compiler and the TI SDK that you mentioned, but both sniffle.out files don't work. I also checked out the v1.6 tag in git, to use the same version that you released, but to no avail.

Is there something special you do additionally, in order to create sniffle_cc2652rb.out?
Or any idea on how to debug this?

Thanks
Michael

Missing Mac Address in Connection

I traced the advertisements of a specific device by using the MAC address filter:

./sniff_receiver.py -s /dev/cu.usbmodemL1100GTV1 -m d9:76:fd:15:1a:e3 -o 1249_double.pcap

Viewing the pcap file in Wireshark results in having the PDU source and destination being filled with Unknown_0x50655bda, for both, master and slave, while the adverting data and the connection request where filled with the with correct packet source and destination.

Few questions before purchasing the hardware

First of all, thank you @sultanqasim for this amazing project, I've seen your Youtube presentation and was very impressed with Sniffle.
I have a few questions:

  1. Which one of the three TI Boards works more reliably with Sniffle? I'm leaning towards the TI CC1352R.
  2. Would it make sense to get 3 sniffers to guarantee absolute BLE Coverage?
  3. If the 2) is yes, how hard would it be to modify the python code for this purpose? Do you mean to support such an application in the future, or accept contributions?

Thanks again for this amazing project!

Is ADV_EXT_IND with an additional AUX_CHAIN_IND supported ?

Hi

I am seeing this:
Timestamp: 2.140122 Length: 15 RSSI: -64 Channel: 37 PHY: 1M
Ad Type: ADV_EXT_IND
ChSel: 0 TxAdd: 1 RxAdd: 0 Ad Length: 13
AuxPtr Chan: 5 PHY: 2M Delay: 191250 us
AdvMode: Non-connectable, non-scannable
AdvA: 4A:C9:C9:2E:B2:B0 (RPA) AdvDataInfo: F2 0D
47 0D 0C 19 B0 B2 2E C9 C9 4A F2 0D 05 E7 38
G . J 8

Timestamp: 2.331504 Length: 257 RSSI: -66 Channel: 5 PHY: 2M
Ad Type: ADV_EXT_IND
ChSel: 0 TxAdd: 1 RxAdd: 0 Ad Length: 255
AuxPtr Chan: 6 PHY: 2M Delay: 2490 us
AdvMode: Non-connectable, non-scannable
AdvDataInfo: F2 0D
47 FF 06 18 F2 0D 06 53 20 5D 16 45 23 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 5D 16 56 34 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 5D 16 34 12 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66

But I am still expecting one AUX_CHAIN_IND packet after ADV_EXT_IND.
I use cc1352r1 as sniffer and S10e mobile phone as advertiser with nRF Connect app.

Issue after updating to latest version

Hi,

after flashing the latest version (1.3) on the CC26X2R1 the only output I get is:

WARNING: invalid message during flush, ignoring...
Ignoring message: Invalid base64-encoded string: number of data characters (37) cannot be 1 more than a multiple of 4
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
WARNING: invalid message during flush, ignoring...
Ignoring message: Incorrect padding
....

LED looks normal and active.
If I get back to the V1.2, it's working as usual...

Thanks,
Manuel

Errors with 1.5 on CC1352-P2

I use uniflash to load the 1.5 release file sniffle_cc1352p1.out onto a CC1352-P2 Launchpad. Before that I completely erased the flash using uniflash. After loading the file I verified it successfully.

I see both serial devices as both tty and cu under macOS. The red LED is flashing. The green LED is on.

However, running the python scripts using the first serial gives errors:

-always in the beginning, once: Ignoring message: Incorrect padding
-many of these: Ignoring message due to missing CRLF
-some of these: sniffle_hw.py", line 221, in recv_and_decode; raise SniffleHWPacketError("Unknown message type 0x%02X!" % mtype); sniffle_hw.SniffleHWPacketError: Unknown message type 0x<various>!

No devices are found by scanner.py or sniff_receiver.py
I also tried reset.py and before running scanner or sniff receiver, but it did not solve the problem.

I would love to test your sniffle tool, but it does not seem to work on CC1352-P2

How to use standalone SysConfig to generate files?

Standalone desktop variant of TI SysConfig (1.4.0+1234) tool for Windows doesn't generate source files from the sniffle.syscfg file. I get an error message:

An attempt to set this to the invalid value cmdBle5GenericRx,cmdBle5Master,cmdBle5RadioSetup,cmdBle5Slave,cmdBleAdv,cmdBle5Initiator,cmdBle5Scanner,cmdFs was blocked. This is most likely due to a backwards compatiblity discrepancy. You can dismiss this error by either accepting the current value, or changing it to another one.

If I accept the current value files are generated but RF_cmdBle5Master etc. are undefined.
The screenshot is attached below:
sysconfig

How did you manage to get SysConfig to generate files? Maybe versions for Windows and for Linux are different?
Could you please shared your SysConfig generated files?

hex-file

Hi,
is there a prebuild hex file to simply flash the eval boards?

best regards,
Torsten

pcap file timestamp are skipping ahead

I was trying to snif some packets between a custom device and a phone but the timestamp seems to skip ahead not sure why...
I attached the pcap. First jump at (12893) 33.86s and then multiple other times.
I see the same time jumps in the output.

I also get the errors below:

C:\Users\S\Sniffle-master\python_cli>python sniff_receiver.py -eH -m 48:55:5c:00:02:16 -s COM10 -o datamotoz2.pcap > datamotoz2.txt
Ignoring message: Incorrect length field!
Traceback (most recent call last):
File "C:\Users\S\Sniffle-master\python_cli\sniffle_hw.py", line 141, in recv_and_decode
return PacketMessage(mbody, self.decoder_state)
File "C:\Users\S\Sniffle-master\python_cli\sniffle_hw.py", line 244, in init
raise SniffleHWPacketError("Incorrect length field!")
sniffle_hw.SniffleHWPacketError: Incorrect length field!
Ignoring message: Incorrect padding
Ignoring message: Incorrect padding
Ignoring message: Incorrect padding
Ignoring message: Invalid base64-encoded string: number of data characters (17) cannot be 1 more than a multiple of 4
Traceback (most recent call last):
File "sniff_receiver.py", line 176, in
main()
File "sniff_receiver.py", line 125, in main
msg = hw.recv_and_decode()
File "C:\Users\S\Sniffle-master\python_cli\sniffle_hw.py", line 138, in recv_and_decode
mtype, mbody, pkt = self.recv_msg()
File "C:\Users\S\Sniffle-master\python_cli\sniffle_hw.py", line 121, in recv_msg
pkt = self.ser.readline()
File "C:\Users\S\AppData\Local\Programs\Python\Python38-32\lib\site-packages\serial\serialwin32.py", line 286, in read
result_ok = win32.GetOverlappedResult(
KeyboardInterrupt

datamotoz2.zip

Any help would be appreciated.

Thank you

Flashing Release using UniFlash 6.1.0 Debian and Win10

When I verify Release 1.4 (both sniffle_cc26x2r.out and
sniffle_cc2652rb.out) before flashing to my Launchpad CC2652R1F (as auto-detected by UniFlash) I get the following errors, first a red pop-up window stating:

Error! File: C:/Users/acer/Downloads/sniffle_cc26x2r.out: a data verification error occurred, file load failed.

And in the UniFlash Console:
[1/8/2021, 11:17:26 PM] [INFO] Cortex_M3_0: GEL Output: Memory Map Initialization Complete.
[1/8/2021, 11:17:30 PM] [INFO] Cortex_M4_0: GEL Output: Memory Map Initialization Complete.
[1/8/2021, 11:17:32 PM] [ERROR] Cortex_M4_0: File Loader: Verification failed: Values at address 0x00000000 do not match Please verify target memory and memory map.

I only installed UniFlash, no sdk or anything and I think I am using the correct firmware (both sniffle_cc26x2r.out and sniffle_cc2652rb.out) I think. Happens both on latest Debian and Windows. Any tips on how to go further? Maybe taking some of the jumpers of the Launchpad could help, or should I just upload and don't care about verifying?

Thank you!

Build Error -- rfc_ble5ScannerPar_t has no member named 'auxChRes'

Hi,

unfortunately, I cannot build the firmware. I am getting the following errors:

`stefan@t460s:~/Programs/sources/Sniffle/fw$ make

Generating configuration files...
Running script...
Validating...
Generating Code...
'/ti/drivers/RF' -> '/ti/devices/driverlib'
'/ti/drivers/RF' -> '/ti/drivers'
'/ti/drivers' -> '/ti/devices/driverlib'
Unchanged /home/stefan/Programs/sources/Sniffle/fw/ti_devices_config.c...
Writing /home/stefan/Programs/sources/Sniffle/fw/ti_radio_config.c...
Unchanged /home/stefan/Programs/sources/Sniffle/fw/ti_radio_config.h...
Unchanged /home/stefan/Programs/sources/Sniffle/fw/ti_drivers_config.c...
Unchanged /home/stefan/Programs/sources/Sniffle/fw/ti_drivers_config.h...
Unchanged /home/stefan/Programs/sources/Sniffle/fw/ti_utils_build_linker.cmd.exp...
Unchanged /home/stefan/Programs/sources/Sniffle/fw/syscfg_c.rov.xs...
Building ti_radio_config.obj
ti_radio_config.c:484:6: error: 'rfc_ble5ScannerPar_t' {aka 'struct rfc_ble5ScannerPar_s'} has no member named 'auxChRes'
484 | .auxChRes = 0x00
| ^~~~~~~~
ti_radio_config.c:484:17: warning: excess elements in struct initializer
484 | .auxChRes = 0x00
| ^~~~
ti_radio_config.c:484:17: note: (near initialization for 'ble5ScannerPar')
ti_radio_config.c:556:6: error: 'rfc_ble5InitiatorPar_t' {aka 'struct rfc_ble5InitiatorPar_s'} has no member named 'auxChRes'
556 | .auxChRes = 0x00
| ^~~~~~~~
ti_radio_config.c:556:17: warning: excess elements in struct initializer
556 | .auxChRes = 0x00
| ^~~~
ti_radio_config.c:556:17: note: (near initialization for 'ble5InitiatorPar')
make: *** [makefile:142: ti_radio_config.obj] Error 1
`

Any ideas?

I can't get it to install as it currently is defined.

When I try to build it complains that I do not have jdk7 installed, and I can't get a copy with a rational license for my mac. Can someone suggest what I need to update to make it work with a current version of openjdk?

Firmware freezing issue

I am using a LAUNCHXL-CC26X2R1 with a CC2652R1, I cannot get the firmware to stay stable for any filtering. The board freezes if I use any filter. If I reset the board it will capture packets but does not apear to reflect the filters, All I can see are advertisements.

Is there anything I can do to make it more stable?

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.