Skip to content

# Latest

## Features since 26.01.26:

## Bugfixes

# 26.01.26

## Features since 25.12.02:

- Define blueSPY to be a supported application in MacOS to open .pcapng files.
- Add decryption of EKS traffic on GFSK and HDT ACL, on HDT CIS, and decryption of HDT BIS. Handle HDT Test packets correctly.
- Add option in Save Advanced to save either the original OTA data, or the decrypted data.
- Add option to create an auto-segmenting capture, creating new capture files at fixed time intervals. The earlier context (connection starts, etc) to understand the data in the timerange is included in the capture segment files.
- Update to current draft of the Core 6.3 specification.
- Add support for decoding restricted versions of AAC, aptX, and LDAC streams via plugins out of the box, and the ability to add custom audio codec plugins via an API defined at https://github.com/RFCreations/bluespy_codecs.
- The blueSPY manual is now a more comprehensive HTML version, replacing the older PDF version.

## Bugfixes

- Fix regression causing slow loading of LE captures with long encrypted connections in.
- Various HDT-related fixes.
- Better summary strings for BR/EDR FHS packets and ID packets.
- Improved LL procedure processing so that a "Procedure with missing packets" isn't created after every missed packet in a procedure.

# 25.12.02

## Features since 25.10.06:

- Updated to late-October iterations of IPT, IPU, and HDT draft specifications.
- Enable simultaneous capture of QHS and Channel-Sounding.
- Add support for PBAP, MAP, and OBEX/GOEP v2.
- Add various HDT-related queries (for searching and filtering), and fixes to HDT packet-timing calculations.
- Add support for EKS encryption start procedures
- Add support for HID SCI.
- Update VAS/P support to final assigned numbers and latest characteristics.
- Add TPMS support.

## Bugfixes

- Fixed issues with reassembly of multi-PDU L2CAP SDUs.
- Fixes bug with CS events containing multiple 160-step CS subevents.
- Fixed various issues in CIS/BIS with multi-PDU SDUs, and SDUs with unusual numbers of frames.
- Fixed issues with recombining of multi-payload HDT Format-1 packets, and playback of audio in HDT CIS.
- Fixed issue where changing the label of a key could prevent it being saved afterwards.
- Fixed issue with keyboard modifiers (Alt, Ctrl, Shift) staying enabled when clicking outside of blueSPY.
- Fixed visual glitch in the Timeline tab.
- Fixed GUI issue when fullscreen on MacOS.
- Fix issue where extra digital lines carrying audio data could be shown as logic in the Timeline when using audiopod.
- Fixed issues using Moreph30 with Audiopod.

# 25.10.06

## Features since 25.09.08:

- HDT support is much improved with several critical bugs fixed. It's still a work in progress, any collaboration with captures etc would be appreciated.
- Initial support for the CCC digital key specification. We would again appreciate more captures if anyone is working on this.
- Full support for Apple's LE audio. This is only available to Apple MFI members, and requires a free licence upgrade for your Moreph.
- The 'Corrupt' and 'Encrypted' buttons on the toolbar are now orthogonal filter options to protocol.
- 'Empty' has been split into multiple sub-types, so you can for example see empty CIS packets without enabling all the others.
- Added ctrl-tab and ctrl-shift-tab shortcuts for changing UI tabs.

## Bugfixes

- Fix parsing of Broadcast Audio Scan Service Control Point Add and Modify source
- Fix LE audio locations label in the timeline for multichannel streams
- Fix mHDT and QHS Classic capture
- Fix issue with saving of device information between captures.
- Improve loading time of some large UPF captures by a third.
- Fix issue where BIS packets with CSTF set are sometimes incorrectly marked as CRC fails.

# 25.09.08

## Bugfixes since 25.09.01:

- Fix crash when capturing in API
- Fix stepping through topology view with no device filter selected.

# 25.09.01

## Features since 25.06.23:

- If the default temporary directory is not writable, or you want to store temporary files on another disk you can override it with the BLUESPY_TEMP_DIR environment variable. It was already accessible via GUI settings, this makes it available for API uses.
- Concatenate complete Advertising Data from AUX_CHAIN_IND packets.
- Export logic to VCD or FST formats
- Keys in the security manager can now be individually disabled, so it's easier to view or save the encrypted packets, or to speed up loading files.
- Update to latest versions of various specifications and Assigned Numbers for the San Francisco IOP.
- You can now add time based bookmarks that are shown in the timeline/spectrum that aren't attached to a specific packet.
- Initial support for Apple's Low Energy Audio modified encryption scheme.

## Bugfixes

- Fix file permissions issue while running the API inside a windows service.
- Fix issues with display of AUX_SCAN_RSP and AUX_CONNECT_RSP.
- Fix timing calculations for aux and sync packet windows.
- Fix issues with display of AUX_SYNC_IND.
- Fix issues with IRKs from HCI.
- Fix slow scrolling downwards in the summary on Mac.

# 25.06.23

## Bugfixes

- Fix issue with LE capture producing CRC errors in 25.06.21

# 25.06.21

## Features since 25.05.20:

- Early support for HDT. All HDT packet formats and modulations are received; connection/CIS-level parsing not yet applied, so all packets will show as Unknown, Invalid or Empty, and won't have their sender identified (so device filtering must be disabled to see HDT).
- Checks and potentially updates mini-moreph's firmware when adding a license.
- Files are now signed periodically during a capture. This greatly reduces the time until you start seeing packets when loading such a capture. Old files retain the current behaviour.
- BlueSPY will now offer to repair files that have periodic signatures in, but aren't signed properly and can't be opened without a moreph connected. This can happen if the software crashes during capture.
- Updated to latest IOP assigned numbers for Stockholm.
- Licences present on a device can now be viewed in the log.
- Allows monitoring I2S lines with logic analyser when using audiopod.
- btsnoop files can now be loaded without a Moreph.
- We no longer ship or require the VC runtime redistributable libraries on Windows. This should improve compatibility when loaded as a python module into python processes that have already loaded an outdated library version.
- There is now a pythonwrapper executable in the installation directory which you can use in place of the native python command. It sets up the paths correctly so that "import bluespy" works with no other configuration.
- Logging options can be controlled by defining BLUESPY_LOG_STDOUT and BLUESPY_LOG_DEBUG in the environment.

## Bugfixes

- Fixed issue introduced in 25.05.20 where pressing the filter clear button doesn't clear "Filter Search".
- Fix Python API crashing on import on Linux.
- Fix subsequent capture starts from the API with the same filename and not explicitly closing the file.
- Fix GUI reset on opening capture settings dialog during a capture.
- Fix issue where MiniMorephs would show up as either "Moreph LP" or "Unknown" in the connect dialog.
- Fixed incorrect range for parameter in LMP_CHANNEL_CLASSIFICATION_REQ
- Advertising grouping in the summary is disabled by default. This version resets this user setting. The grouping can be changed by right-clicking in the summary under the "Set Advertising grouping" option or under the "File" menu -> "Preferences..." -> "Analyser" tab -> "Advertising".
- Fixed timestamp issue when merging BTSnoop files into a capture.
- Fixed creating multiple CISes from CIS IND retransmission.
- Fix I2S data line assignment when using audiopod with 2 inputs.

# 25.05.20

## Features since 25.02.28:

- Improved file opening speed. Across a representative set of captures this version processes packets 54% faster.
- Custom protocol decoding. You can now add you own packet definitions to blueSPY by writing a binary plugin using the API. Refer to the manual and examples for more information.
- Audio stream IDs in the API are separated by direction. XXX_central and XXX_peripheral queries have been replaced by XXX queries for the central and peripheral stream IDs.
- Added new queries to audio streams.
- Can now capture Audiopod and I2S from the API.
- Can measure latencies between two audio streams in the API.
- Can change LC3 configuation of CIS streams from the API.
- Can use the API to play audio files from the audiopod output.
- Updated to Bluetooth 6.1
- Added option to reduce file sizes by filtering out packets while capturing, based on a device-filter and/or by ignoring all Advertising or BIS traffic.
- Added option to use Bookmarks to select start and end times for Save Advanced.
- Added option to specify the min and max RSSI values for the Spectrum plot.
- Add ability to reboot Morephs from the API.
- Add notification when a newer blueSPY version is available.

## Bugfixes:

- Fix loading the API shared library on Mac.
- Fix CS procedure analysis issue with antenna-switching and different T_SW values.
- Fix bluespy_add_to_filter_file function in the API.
- Fix crash when receiving invalid L2CAP packets.
- Fix for playback & export of BIGes/CIGes containing unequal numbers of channels on each BIS/CIS.
- Fix audiopod latency calculation time after toggling "(LEA) Include Presentation Delay" checkbox.
- Fix default capture settings.
- Fix issue with disk space being used up and not returned until a reboot with some antiviruses.

# 25.02.28

## Features since 24.12.11:

- Add ability to search for IRKs in the device filter.
- Update LE Test Mode Enhancements to match the VS_r02 version of the specification.
- Add support for Frame Space Update.

## Bugfixes:

- Fixes some parsing issues with Extended Feature Set.
- Fixes Channel-Sounding analysis issues when the Central has a large clock drift relative to the sniffer.
- Fixed a bug when saving to the same file you have open.
- Fixed issues with displaying logic lines and UART packets in the timeline.
- Fixed Channel-Sounding procedure analysis when a new channel set is generated on the first step of a subevent after the first.
- Fixes OTA latency measurements not working, when "audiopod" tab is opened via the "View" menu under certain conditions.
- Fixes "audiopod" tab showing "audiopod not selected in capture settings" when loading 2 captures.
- Fixed audio export of segmented framed isoc data.
- Fix crash when BIGInfos are seen with BN == 0.

# 24.12.11

## Features since 24.09.27:

- Save Advanced allows omission of Logic, UART, and Audiopod packets
- Add access to Devices, Connections, and Audio streams in the API.
- Add support for querying Devices, Connections, and Audio streams in the API.
- Capturing Logic in the API.
- Time object in API, which can be printed in hh:mm:ss.xxxxxx format.
- Can create multiple 'extra' capture files in the API and manually add packets from the main capture file to them.
- Add support for multiple morephs in the API.
- Add support for GPS location data in capture files, as generated by the Android "mm Capture" app.

## Bugfixes:

- Fixed issue with Channel-sounding procedure generation when using repeated procedures and a short procedure interval.
- Fixed timings for BISes with PTO.
- Fixed issue with reception of 2M CS packets.
- Fixed Save Advanced producing unsigned files and crashes.
- Add missing libblueSPY.lib to release on Windows
- Simplified display of periodic advertising packets in Transactions Collection view.
- Fixes intermittent crash when closing blueSPY.
- Fixed blueSPY significantly slowing down with a capture containing a lot of BISes.
- Fixed latency measurements when I2S and analogue have different sample rates.
- Fixed latency measurements when 2 OTA streams have different sample rates.
- Fixed audiopod I2S input shown as output.
- Fix issue with AUX_CHAIN_IND handling.

# 24.09.27

## Features since 24.09.09:

- Handle ATT_PREPARE_WRITE correctly even if some non-essential packets are corrupted/missing.

## Bugfixes:

- Prevent crash when adding empty query column.
- Fix crash when receiving certain types of Classic EIR packets.
- Fix MiniMoreph-capture files not loading correctly.
- Fix Summary not loading correctly when loading a new layout.
- Fix reloading btsnoop merged captures without a moreph connected.
- Prevent intermittent crash when opening very small captures.
- Fix parsing of ATT “Read Multiple Variable Length Characteristic Values” procedure.

# 24.09.09

## Features since 24.06.14:

- Add codec autodetect for HFP streams where the configuration packet is missing or corrupted.
- Add option to show graphs of RSSI and throughput in the Timeline.
- Add support for multiple moreph devices to capture LE, Classic, and WiFi packets simultaneously.
  - Packets confirmed to be the same packet captured from different devices are merged together.
  - Details tab now displays the serial numbers of the devices which captured it.
- Add actions to the Summary's context menu which allow you to alter the present device filter and column-based filtering.
  - Add/Remove devices associated with a particular row from the present filter.
  - Creating a new filter containing only the device(s) associated with the clicked row.
  - Quickly show or hide 'rows like this one' using the column-based filtering.
- Visual indicator in the Capture button when Advanced Settings are enabled.
- Add support for AHP version d07r02
- Add add_log_message function to the API.
- Prevent a capture being stopped in the GUI when opened from API.
- Display errors when BIS packets are sent using the same payload counter but different payloads.
- Resize columns based on contents by double-clicking the handle.
- Improvements to Channel-Sounding sniffing, and updates to match the adopted BT 6.0 Core spec.

## Bugfixes:

- Fixed down button on summary scrollbar not scrolling.
- Fixed bug with drawing of CS packets in the timeline.
- Fixed bug with editing device nicknames and IRKs in the Device Filter.
- Fixed issues with importing/loading files with non-ASCII characters in their filename.
- Fixed issue with AVDTP decoding when Content Protection is in use.
- The clicked column no longer tries to keep itself in view when you highlight a row.
- Fixed issues with user entered codec config for BISes
- Fixed inconsistent I2S SD line display when using audiopod
- Fixed Goto Pkt# and Goto Time entries for MacOS
- Prevent menus from touching edges of screen or going under the notch of a Mac.
- Closing the API GUI no longer stops a capture.
- Fixed I2S audio export to .wav file
- Fixed decode of BASE with multiple subgroups.
- Fixed incorrect "OTA config" shown in the LC3 configuration dialog
- Fixed LC3 autodetect not working when starting from an unknown configuration
- Fixed LC3 configuration dialog for fragmented SDUs
- Fixed not decoding HCI traffic from UARTs
- Fixed not displaying all bytes captured on UARTs
- Fixed selection in Column Selector dialog.
- Fix MHDT packet header length calculation.

# 24.06.14

## Features since 24.04.19:

- Add tool for analysing CS procedure configurations.
- Add LE Channel Index as an optional column.
- audiopod UI changes
  - added printing of time used for correlation
  - the time used is adjusted to start/end of the stream if it would fall outside of it
  - added button to open audiopod section in the manual
  - tone generator and file playback now have only 1 button to indicate when the audio is being played
  - rows in the latency table have tooltips to better explain what is measured
  - added indication why the "audiopod" tab is blank
  - audiopod is now shown with PHYs in the status bar
- When capturing, show filter buttons for air packet types enabled in the capture settings rather than only the ones that have been seen.

## Bugfixes:

- Saving a capture is now instant and doesn't need to reload the new file, which could take a significant amount of time with large captures.
- Device filtering updates are blocked while the user is interacting with the table, and some performance improvements. Add a configurable minimum number of packets below which devices are ignored.
- Improved performance when drawing large amounts of LC3 audio.
- Improve performance in the presence of very large numbers of connections.
- "audiopod" tab was blank sometimes when opened via "View" menu.
- Panning in the timeline could cause it to zoom out.
- Display both audiopod channels as input if configured to have 2 inputs.
- Audiopod OTA stream latency calculations weren't updating in autoscroll mode.
- Fixed issue where audiopod plots could overlap.
- Fixed issue with layouts having duplicate names.
- Fixed issue with opening tabs from view menu.
- Fixed crash when opening very large captures.

# 24.04.19:

## Features since 24.03.15:

- Added GUI "Layouts"
  - A layout is the arrangement of tabs and the state of each tab (e.g. filters, queries, etc. for Summary).
  - There is a new dropdown in the toolbar to select a layout.
  - Several default layouts for particular use cases and screen sizes are provided.
  - Any custom layout can be saved from the current state to be used in future.
  - Layouts can be exported to a file for sharing.
- Added option to open TCP socket for capture injection in the following formats:
  - HCI H4
  - BTSnoop
  - Pcap HCI H4 PHDR (Windows Bluetooth Virtual Sniffer compatible)
  - PcapNG
  - custom PcapNG blocks are defined, allowing automatic loading of keys, and injection of log messages.
- Added more indications of which PHYs/transports are enabled: all PHYs present in the current file are now shown in the Summary toolbar, and during capture the PHYs being captured are shown in the status bar.

## Bugfixes:

- Fix byte-ordering of Broadcast Code in generated URI.
- Fix issue with handling PAWR events after extended advertising has finished.
- Make sure sender.irk and receiver.irk queries only return an IRK when we know the IRK of the devices.
- Fix issue with AVDTP state machine.
- Fix AHP issues.
- Fix issues with "goto" and other selection related problems.
- Fix LE audio mono channel allocation.
- Fix drawing times of LE audio in the timeline.
- Add I2S streams to Audio Export even when a device filter is set.
- Highlight that a packet is missing in ATT read long characteristics.

# 24.03.15:

## Features since 24.01.29:

- Update Channel-Sounding to match Atlanta r05 version of the spec, including new CS_TERMINATE_REQ/RSP PDUs.
- Always show CONNECT_IND/AUX_CONNECT packets, even when advertising is filtered out.
- Add "Save and Close" option, to avoid reloading very large files if you just want to close them.
- Add decryption of mHDT CISes & BISes, and some related fixes
- Parse CS procedures triggered by the HCI_LE_CS_Test command, if we are provided with the HCI. More checking/analysis of CS RTT payloads.
- Add support for LE Test Mode Enhancements (over-the-air control of RFPHY tests).
- Add support for the Broadcast Audio URI; click on any BIS or BIG in the Audio Export tab to generate a URI and matching QR code corresponding to the BIS/BIG.
- Add support for d07r01 version of AHP.

## Bugfixes:

- Fix issues with packet length/timing calculations in LE Coded and mHDT PHYs.
- Don't identify normal periodic advertising packets as being part of PAWR.
- Fix issue with capturing Classic ID packets when using Moreph30.
- Save Advanced Capture Settings.

# 24.01.29:

## Features since 24.01.06:

- LE devices with unknown addresses (e.g. those involved in connections from before the start of capturing) can now be included in device filters etc.
- More ESL/PAWR support: Identify responders based on PAWR response slots, and check against their assigned advertising data keys to identify devices transmitting in the wrong slots.

## Bugfixes:

- Fixed an issue with a second encryption pause following a roleswitch
- Fix many issues with the summary:
  - In rare cases some packets would not appear in the summary at levels above baseband.
  - Fix some issues where clicking in the timeline or using goto would not highlight the packet in the summary.
  - Go to the approximate location of a packet if it's currently filtered out in the summary.
  - Fix performance regression when selecting all rows in the summary and then changing filters.
  - When you change the level with items selected, then go back to your original level, your original selection is restored.
  - When you change to a lower level where you selected item is not visible, all the child elements of what you had selected will be highlighted.
  - The incremental filter update now indicates where it's up to by rendering rows that haven't been filtered yet in monochrome.

# 24.01.06:

## Features since 23.12.01:

- Integration with ADB (Android Debug Bridge) to pull keys and GATT databases, and stream HCI messages, from connected Android phones; this runs during capture or beforehand, and can substantially streamline the process of capturing new pairings. There are modes to extract the available information from both rooted and non-rooted devices. Files (currently bt_config.conf) can also be loaded manually from the Tools menu. This is a beta release of this feature; this has been tested on a modest range of Android devices and so we expect there to be some issues with other hardware and software versions. If you would like to use these features then please:

  - let us know if you have any device-specific problems;
  - let us know if there are other pieces of information you would like to extract from blueSPY, or other sources of HCI you would like to import.

- Channel-sounding improvements:

  - Add options in preferences dialog to decode HCI CS Test command based on current or older versions of the command
  - Add optional debug printing information about the DRBG outputs/invocations.
  - Add information about expected CS Procedure in the Details tab for the CS Start LL procedure, to help debug when the procecure is missing.
  - Extra analysis of sounding/random payloads, to help debug bit-ordering issues.
  - More resilience to missing Initiator packets.

## Bugfixes:

- Fixed issue where CIS packets were erroneously shown as having T_IFS errors even when the timing is correct.
- The summary now incrementally updates when you change filter, so it doesn't get emptied and it's easier to keep your position.
- Fixed some crashes to do with expending things in the summary, particularly during capture.
- Fixed issue where the area above the left hand summary column could become blank until you move the mouse over it.
- Highlight search now searches new incoming packets as well as existing ones.
- Fixed audiopod SPDIF.
- Fix no lines drawn when there are no logic edges.

# 23.12.01

## Features since 23.11.06:

- Extended HCI parsing: Tracking multiple connections in each HCI stream to parse L2CAP channels, ATT etc correctly.
- Improved highlighting of selected audio in Timeline to make matching audio frame more obvious when using audiopod.
- Update to latest Temporary Assigned Numbers/other changes ready for the Sydney/Paris IOP sessions.
- Add more timing details to CIS/BIS event/subevent views, and highlight when payloads are associated with a different event due to PTO or FT.

## Bugfixes:

- Parse Vendor ID correctly in EIR/advertising packets
- Fix LMP_SNIFF field display

# 23.11.06:

## Features since 23.11.01:

- Show vendor name when it's a USB VID.
- By popular request, the Timeline/Spectrum are no longer automatically centred on the packet you select if it was already visible.
- Added Preferences dialog in File menu, collecting together some existing options from context menus and adding the option to choose the folder used for temporary capture files and file-backed memory.

## Bugfixes:

- Fixed an issue where classic encryption would not resume when a key size < 16 was used. This was a regression from 23.06.26.

# 23.11.01:

## Features since 23.10.04:

- Large file support. blueSPY can now cache metadata on disk, so when opening a large capture it's limited by your free disk space instead of free RAM. This should eliminate crashes when making or opening very large captures, and eliminate the need to mess about with segmented captures.
- Add option to set the Moreph RF gain manually, and an option to filter out packets below a certain RSSI; controls for these can be found in the Capture Settings dialog, which can now be accessed during a capture. Setting the gain manually isn't needed or recommended for most use cases; two scenarios we believe it will be useful are:
  - Using a sniffer as part of cabled setup, or in other scenarios with packets at around 0+ dBm; here it will be useful to manually set a low gain to avoid the first packets being corrupted as the AGC adjusts.
  - Capturing distant or very quiet devices in the presence of loud devices that you're not interested in; normally the AGC will adjust to ensure the loudest devices are heard successfully, but if you're not interested in the nearby devices you can manually fix the gain to maximum to give the best reception of quiet/distant devices.
- Update to latest additions to Company IDs in Assigned Numbers.
- Improve display of Class of Device in FHS packets.

## Bugfixes:

- Fix issue with proprietary decoding on Moreph30.

# 23.10.04:

## Features since 23.09.09:

- Added throughput and RSSI gauges to Topology tab, and dual-mode device links are shown more clearly.
- Add context-menu option to copy complete contents of selected rows in a Summary tab to the clipboard.
- Add dialog to display decode of HCI packets pasted as hex bytes.
- Add more checks for T_IFS errors, and display more prominent warnings on failures.
- Added tracking of average TX frequency error for a device in the Devices/Connections tab, and added query for per-packet frequency error.
- Added extra parsing of Apple advertising structures and attempt to identify sending device, e.g. as an iPhone.
- Added ESL Profile & Service support.

## Bugfixes:

- BIG Control packets on unencrypted BIGes handled correctly.

# 23.09.09:

## Features since 23.08.08:

- Advertising packets can now be grouped into larger collections of packets in the Summary (e.g. 1 second chunks per device, or grouping all packets from each device). Select the grouping using a context menu in the Summary.
- LC3-autodetect: In the Audio Export tab, you can modify the LC3 parameters for a stream (sample rate, number of channels etc) either manually, or we can autodetect the parameters. This is useful if an implementation misconfigures the audio stream, or if a packet containing the configuration was missing or corrupted.
- CSIP/S support: Use any known SIRKs to resolve RSIs sent in advertising, to identify devices that are part of a Coordinated Set.
- Channel-Sounding improvements: Timing discrepancies and other errors (AA mismatches etc) are now highlighted in more places; Assigned Numbers (LL opcodes etc) have been updated to match the latest values, with backwards compatability to earlier versions of the "permanent" and temporary Assigned Numbers.
- LE Extended Features Mask added.
- Improved summaries of SDP Transactions.

## Bugfixes:

- Device filter search boxes now pop up from a button on the header bar, so it's easier to use on small screens.
- Fixed parsing of some types of SDP transaction.

# 23.08.08:

## Features since 23.07.03:

- Handle Channel-sounding link-layer procedures, and create CS Procedures/Events/Subevents/Steps based on the Sync and Tone packets received.
- Implement Channel-sounding DRBG, and check for errors in creation of AAs, submode steps, channel maps etc.
- Export to YAML or CSV now exports all columns from the Summary, including any that have been drag-and-dropped there. Extended some of the queries for examining baseband packet fields (SN/SEQN etc).
- Advertising packets which fail CRC but have an address equal to or close to a known device address are now associated with the device.
- LC3 audio configuration and LE Audio transport parameters can be manually edited, either to fix playback/display/export of streams with missing audio configuration, or to help debug situations where an implementation has configured one set of parameters but encoded/transmitted the audio using a different set.
- Split "Times" column in Audio Export and Device Filter into two to allow sorting independently by Start Time and End Time. Add optional device filtering to Audio Export tab.
- Allow opening multiple Details tabs, and "freezing" a Details tab; this prevents it being updated when you click on a new packet or event, to allow you to look at the contents of multiple packets, procedures etc simultaneously.
- audiopod:
  - "Advanced" dialog added to allow correlating of more complex combinations of OTA channels and audiopod channels.
  - Draw spectra of OTA audio streams.
  - Improvements to latency-table UI and correlation plot interfaces.

## Bugfixes:

- Workaround for issues with unclear payload counters in captures which have been filtered.
- Fix intermittent crash when moving mouse over Topology.
- Fix application name so it shows correctly in MacOS's utilities.

# 23.07.03:

## Features since 23.06.26:

- Support for audiopod, our USB powered audio measurement tool which integrates seamlessly with the mini-moreph and moreph30 protocol analysers to generate and record audio over a variety of analogue and digital interfaces. Each audio stream is timestamped using the same clock as the protocol analyser, allowing the audio streams to be aligned with Bluetooth packets and displayed in the GUI.
  - End-to-end latency measurements
  - Auracast presentation point to audio rendering latencies
  - Left/right channel sync measurements
  - .mp3, .wav file playback to analogue output
  - Tone and chirp generation
  - Automatic Gain Control, Dynamic Range Compression
  - Manual gain and volume controls
  - User configurable logic threshold
  - Current and power measurements, with internal or external power supply to DUT
  - I2S master support
- Added 'Persistent Reference Time' so that all displays of time will be relative to this reference instead of the time of day.
  - It can be set manually, set to the start of the capture, or cleared in a new Tools menu.
  - Alternatively can be set to the time of a selected packet, stream, device, or connection by right clicking.
- Colour code RSSI columns by signal quality.
- Support for classic change link key procedure, the new key is now automatically calculated and added to the key manager.
- Support for mHDT2.0
- In cases where GATT information is missing, deduce which handle is the ASE Control Point to ensure the audio in CISes can be decoded.
- RSSIs now shown in Dashboard.
- Optionally display 'silent' devices in the device filter, i.e. devices mentioned in packets in the capture (e.g. Scan Requests), but which haven't transmitted any packets.
- 'Import GATT', 'Merge BTSnoop', and the 'Export' submenu have moved to a new 'Tools' Menu.

## Bugfixes:

- Correct presentation point calculation for peripheral to central packets.
- Fix wrong segment of audio being highlighted in the timeline in some cases.

# 23.06.26:

## Features since 23.06.06:

- Improved detection of matching devices by IRK

## Bugfixes:

- Fixed a crash on using some right click menu options in the topology view
- Fixed a crash affecting the capture settings dialog on new installations
- Some minor fixes to audio decode (avoids glitching on undecrypted packets, updated LC3 codec)

# 23.06.06:

## Features since 23.05.03:

- Can now view captured raw UART and HCI data in the timeline.
- Multiple logic lines can be grouped into a bus and viewed numerically in the timeline.
- Added some throughput and duty cycle statistics to the labels in the timeline.
- Can now use the same device filter everywhere more easily.
- Detects BIS/CIS packets that have been sent with the wrong payload counter, this is shown in the dashboard and errors tabs.
- There is a new logic ‘rate’ setting which can in most cases be left as default (Low). It increases the rate at which the logic data is transferred from the moreph, which increases file size but can fix issues when capturing high data rate signals, particularly fast clocks.

## Bugfixes:

- Fixed an issue where MAC addresses entered in the key editor were ignored.
- Fixed export of raw audio without headers.
- Fixed audio decoding when an mSBC frame is fragmented into multiple eSCO packets.
- Fixed setting correct codec from eSCO link request.
- Minor stability improvements.
- Mac installer no longer requires rosetta unnecessarily.

# 23.05.03:

## Features since 23.04.18:

- Improved topology view: The topology view can now be set to show the current topology at any time in the capture, or the overall topology of the entire capture.
- ‘Raw’ view mode: New option in the top left of the Summary view. In this mode blueSPY doesn't parse packets into L2CAP or higher layer specifications, which means it only treats packets as ‘Invalid’ if the CRC/HEC fails, but not if they contain an invalid L2CAP PDU. This mode is particularly useful for controller developers or other users who are sending BB packets with arbitrary payloads.
- CVSD audio decoder.
- Rearranged the new capture settings to fit on low resolution screens.

## Bugfixes:

- Fixed a longstanding issue where new packets would not appear immediately in some circumstances while capture is active.
- The above fix should also fix cases where new packets that ought to be filtered out appear in the summary, or are filtered out and shouldn’t be, until you change the filter settings.
- Fixed several crashes.
- Fixed an issue causing gaps in eSCO audio waveforms in the timeline view.
- Fixed an issue where HCI/Dukosi/Varjo packets disappear after a reload.
- Fixed an issue where parts of the index column would be drawn outside the summary in rare circumstances.

# 23.04.18:

## Features since 23.03.23:

- This release now supports all the additions in Bluetooth 5.4.
- HCI over UART can be captured through the logic lines. It is configured in the capture settings.
- I2S capture can also be enabled in the capture settings.
- Decrypt encrypted advertising data.
- The security tab now supports multiple key types. You can add custom ECDSA pairing keys and EAD keys, in addition to link keys and broadcast codes.
- Broadcast codes are now stored directly rather than after conversion to GLTKs, so the code can be retrieved. It is shown in the tooltip when you mouse over the key.
- Add a free mode for timeline/spectrum cursors to avoid snapping to packet boundaries.
- When decryption fails on a particular connection, the ‘Dashboard’ tab now tries to explain why.
- Support L2CAP I-frame extended control.
- Add channel sounding control procedure parsing.
- The user guide has been improved.

## Bugfixes:

- Fixed bug where 128-bit UUIDs were printed with the upper and lower halves reversed.
- Many HCI parsing bugs fixed.
- Fixed several issues in the device filter.

# 23.03.23:

## Features since 23.03.02:

- Topology view: A visual representation of the currently selected devices showing their connections etc. Some improvements e.g. allowing you to use it to edit the filter are coming soon.
- PAWR: Added support for periodic advertising with responses from 5.4.
- HIDS: Added support for detailed decoding of HID report maps and reports over GATT.
- Headless: There is a new linux build with no dependence on GUI libraries for use on servers.
- Optionally zoom around the centre of the view rather than the cursor in .

## Bugfixes:

- Fixed several crashes.
- Improvements to QHS tracking, which should improve long packet reception.
- Fixed an issue where the reported playback time would change weirdly when playing a BIS.
- Fixed some slight inconsistencies in CL processing after pressing reload.

# 23.03.02:

## Features since 23.02.10:

- Support Google ASHA audio

## Bugfixes:

- Improvements to advertising packet handling with better heuristics for guessing senders of packets with no address; improves decoding of BISes when many devices are broadcasting.
- Some fixes to audio playback, there were issues with getting some silence after seeking, and getting stuck in the stopped state.
- Fixed an issue where occasionally corrupt QHS packets were marked as CRC passes with invalid CRCinit values, which was preventing decryption of subsequent packets due to a bad clock value.
- Audio on the timeline is now shown next to the relevant packets, instead of as an independent row.
- Fixed an issue where the context menu and cursors would render in the wrong place if you scroll down in the timeline.
- Fixed failure to decode LC3 in eSCO.

# 23.02.10:

## Features since 22.12.15:

- Dashboard: There is a new ‘Dashboard’ panel in the top right tab area. This shows a high level view of each connection showing only important events and errors, providing a quick way to track connection state and jump to important events without trawling through the whole summary.
- GATT Database: You can now export the GATT state to a JSON file, and import that file in another capture to transfer setup information that is missing from the later capture. We use the same mechanism automatically on capture, so capturing from devices where you have previously captured the setup should work a lot better.
- Android GATT database import: If the GATT setup was missed, state can also be imported directly from the android format, which can be extracted from /data/misc/bluetooth.
- Audio: The audio export dialog is improved. You can now export or play back individual audio streams in a bidirectional transport like eSCO or CIS, and also multiple related streams, e.g. where audio channels are in separate streams in a CIG or BIG.
- File segmenting: There is a new button on the toolbar that allows you to segment captures, effectively allowing you to quickly save a capture and start a new one. This is done with no missed packets.
- You can add broadcast codes to the key manager without manually converting them to a GLTK.
- Timeline markers can now be placed on any segment (e.g. header, payload) of a packet.

## Bugfixes:

- Fixed several issues that could lead to crashes. Particularly, a bug causing the windows save dialog to crash after audio playback in some circumstances, and a crash particularly affecting ARM based Macs.
- Some issues with the new device filter panel not updating itself have been fixed.

# 22.12.15:

## Features since 22.11.14:

- New device filtering – there is now one place to filter devices instead of being split into LE and CL devices. It’s also a lot more powerful, you can create multiple device filters, switch between them, and save them. You can also filter specific connections as well as just devices.
- The summary, spectrum and timeline have a drop down to select which device filter (or no device filtering) you want to use
- The drop down in the “Filter Devices” tab selects which one you’re editing. You can add, name and delete filters in that tab. To use your new filter everywhere, press in that tab.
- This lets you select whether to filter on devices only, or devices and connections. The devices/connections you want are selected with a checkbox in the left-hand column. You need to select a device to see its connections and filter on those.
- If you want to keep using a filter you can pin it using this button which will mean it is stored for next time you open the GUI.
- Updates to the device filter are paused while your mouse is over it – this is because it can be very annoying trying to click on something while new devices are appearing during a capture. So if you think something’s not showing up, make sure you’re not hovering your mouse over it. This is indicated by the pause icon in the top right .
- Audio playback – there is now basic audio playback in the Audio Export panel. Currently you can only play the first audio stream in a link, in the next release you will be able to select which thing you want to play in a multichannel/bidirectional stream, and it will play a set of CISs that represent multichannel audio. The audio export panel is now a tab on the right rather than being hidden in the file menu.
- Audio in timeline – waveforms are now shown in the timeline. If you right click you can configure a buffer depth to highlight anywhere the (retransmitted) packet was too late for the audio.
- Merge btsnoop – as well as loading a btsnoop, you can now merge it into a capture so you can see all the packets inline.
- Packets in the timeline/spectrum now show the component parts (sync word, header, payload etc) if you zoom in far enough
- Basic channel sounding support – we can now collect channel sounding sync and tone packets
- Set IRK – you can manually set an IRK for a device in the new device filters tab
- Support for LE Audio advertising service data
- LC3 over SCO

## Bugfixes:

- Fixed an issue that could result in large numbers of packets going missing, or a crash, in rare circumstances.

# 22.11.14:

## Features since 22.11.07:

## Bugfixes:

- Fixes an issue where the sniffer would not capture some types of packet (particularly CIS) after being stopped and started again in some circumstances.

# 22.11.07:

## Features since 22.10.13:

- Packages are now signed for Windows and Mac, which should prevent any warnings when you open the downloaded file.
- You can open HCI pcap files and import btsnoop files. You will need a connected Moreph. Merging the imported HCI into an air trace and other HCI improvements are coming soon, if you have a specific source of HCI (UART, USB, TCP socket, ADB, ???) you’d like us to prioritise, let us know.
- Any encryption keys we find from HCI will be extracted to the key manager.
- Show device information in the details view.
- mHDT CL and LE are now in one image.
- Inquiry has been removed from this release to enable some of the other FPGA features. If you use it, please let us know and we will prioritise restoring it.
- Attempt to decrypt shadow eSCO.

## Bugfixes:

- Fixed an issue with the LE whitelist that caused packets to be missed.
- Decryption is more robust when we miss packets or the devices send packets in non-standard orders.
- Improve QCIS detection.
- Fix some performance problems from having many keys loaded.
- Improve BIS decryption, particularly BIG control PDUs.

# 22.10.13:

## Features since 22.09.27:

- Configurable columns: You can now press this button on the summary toolbar to add or remove columns. There is a dropdown with the available column types, or you can add a search query which will show a coloured block on any matching packet.
- Drag and drop columns: Many of you have requested this one. You now can drag any row from the details view into the summary to show it as a column. In some cases, you will only see a value for exactly the same type of packet where it ought to match other similar ones. We’re working to improve this, let us know about any that are bothering you.
- SBC export: You can now export SBC audio from A2DP or eSCO.
- ASHA: We now support the GATT parts of Audio Streaming for Hearing Aids.
- More LE Audio characteristics.

## Bugfixes:

- Fixed a regression in blocking performance in the last couple of releases.
- Fixed an issue where LE packets would be discarded if the sender transmitted a tone for a significant period before the access address.
- Fixed an issue with SBC header decoding.
- Fixed an issue where the query comparison operators (<, > etc) would do a string rather than integer comparison for payload_length.
- Fixed CSV compatibility with Excel.

# 22.09.27:

## Features since 22.09.15:

## Bugfixes:

- Fix file creation on Mac and Linux – new capture files were being created with random permissions, which could cause saving to fail.
- Fix L2CAP I frames
- Fix some (rare) crashes

# 22.09.15:

## Features since 22.09.08:

## Bugfixes:

- Fix save advanced dialog not being shown.
- Fix encryption resume after role switch on BR/EDR.
- Fix crash when we see a LL_REJECT_IND for a procedure we entirely missed.
- Fix issue where the QHS restricted mode was always enabled during capture.
- Fix issue where decrypted QLE packets were improperly marked as encrypted after reloading the capture, in some circumstances.
- Fix a rare crash triggered by loading a new file before the previous one has finished loading
- File load/save/close/reload is now a bit faster
- The GUI now works normally while a reload is in progress
- The Linux build now works on older glibc versions (2.17+) again

# 22.09.08:

## Features since 22.07.20:

- Automation API. The installation now includes a libblueSPY/bluespy.h C library, and a bluespy.py python interface. These can be run independently of the GUI, though you can also spawn an instance of the GUI to look at the current capture from the API. There is documentation in the manual and in bluespy.h/.py. The following python code should get you going:

      import sys
      sys.path.append("C:/Program Files/RFcreations/blueSPY") # Adjust to your installation folder
      import bluespy
      bluespy.connect() # Connect to a moreph
      bluespy.capture("test.pcapng", LE=True, CL=True) # Capture LE and Classic to test.pcapng
      # Wait for a bit
      bluespy.stop_capture()
      print("Captured {} packets".format(len(bluespy.packets)))
      bluespy.close_file()
      bluespy.disconnect()

- Added a bookmark shortcut to the right click menu on a packet.

- Bookmarks are now sortable.
- There is a list of available queries for the API and searching in Help->List Queries.
- Added support for Decision-based advertising filtering.
- More LE Audio characteristics.
- Experimental QCIS support.

# Bugfixes:

- Fixed occasional issue where clicking a link would take you to the start of the capture instead of the relevant packet.
- Fixed an issue where the file menu is very slow if any recent captures were on a disconnected network drive.
- You can now paste hexadecimal keys of the form “0x01, 0x02, 0x03…” into the security manager.
- Various mHDT fixes (CRC, ISO).
- Improve LE connection event handling when first packet is missed.
- Fix scrolling in spectrum / timeline with trackpads.
- Improve detection of retransmissions.

# 22.07.28:

## Features since 22.07.20:

- mHDT LE ISO support

## Bugfixes:

# 22.07.20:

## Features since 22.07.05:

- Improved summaries of ATT and GATT packets/transactions/procedures, including the Characteristics involved and the values where appropriate.
- Changes to the Summary view layout, including a fixed left-hand column and changes to the keyboard shortcuts.
- Various performance improvements to handle high-traffic situations and large captures better.
- Support for mHDT-LE PHY (requires mHDT licence); support for mHDT-LL messages.
- Support for identifying CIS packets sent incorrectly before the first anchor.
- Improved caching of Device Filter settings, including moving them to a separate .ini file which is easier to share. This will mean as a one-off change that the currently cached devices will be cleared when you upgrade to 22.07.20

## Bugfixes:

- Fixed an issue that could cause corruption of EDR-3 packets.
- Bookmarks are now updated correctly when trimming a capture using Save Advanced.
- Fixed an issue where unidirectional BR/EDR traffic could cause the Summary not to show new packets for a while.
- Fixed issue which could cause Filter Search to sometimes return no packets.

# 22.07.05:

## Features since 22.06.17:

- Support mHDT CL PHY (requires mHDT licence)
- Support mHDT specific LMP messages

## Bugfixes:

- Fixed decryption after classic SSP pairing with the debug key
- Attempted to fix crash on capture save. Improved handling of Unicode filenames and moved temporary captures to AppData/Local.
- Many fixes to parsing of partially received LE connections
- Improved QHS phy switch handling when relevant packets are missing / corrupted
- Improve handling of BIS/CIS stream creation

# 22.06.17:

## Features since 22.05.19:

- Many improvements to CIS/BIS/LE Audio support
- CIS packets are now decrypted
- CIS streams can be exported
- There is a new bookmarks panel that allows you to save sets of highlighted packets
- Beginning of channel sounding support (LL packet formats only)
- Added support for mixed LE/Classic encrypted connections

## Bugfixes:

- Sending inquiry packets has been fixed
- The “Save As” dialog now works correctly on MacOS
- Fixed an issue that could cause the app to falsely claim the device is unlicenced
- Setting a start time in the save advanced dialog now works properly again
- The RSSI calibration has been improved for very loud signals
- Fixed a bug that could cause duplicated classic packets in rare cases
- Fixed a bug that could cause the first packets on an LE connection to be missed
- Fixed a bug where a BIGInfo packet could prevent any subsequent LE connections being detected properly
- Fixed some issues around missed retransmissions
- Fixed decrypting LE secure connections using the debug key
- Improve handling of L2CAP connections where we missed the CONNECTION_REQ
- Fixed some zoom bugs in the Timeline view

# 22.05.19:

## Features since 22.04.11:

- Added CIS packet decryption.
- Added CIS event/subevent tracking, with analysis of ReTXes etc
- Decryption keys stored in files by default.
- Added experimental support for eSCO over QHS.
- Add basic export of audio streams to files.
- Added columns in Summary to show timestamp and SSRC for AVDTP packets.
- Overhaul UI, including new icons, colour changes, and simplification of protocol filtering.
- Allow "Reload" (after adding a new link key) during ongoing capture.
- Completed LE Audio-related GATT Characteristic definitions.

## Bugfixes:

- Fixed "Save Advanced".
- Keep track of configured L2CAP channels across PHY switch (e.g. BR/EDR -> QHS) and roleswitch.
- Display AT commands with the icon for the correct PHY.
- Fixed some crashes related to QHS packets appearing in unusual places.

# 22.04.11:

## Features since 22.03.09:

- Added some new default summary views for baseband and the highest level of aggregation (We found that some users didn’t know you can have multiple summaries open, or didn’t know how to view the higher layer packets, hopefully this will make it more obvious)
- The timeline has been regrouped so that more things are shown in one line (There are more improvements to the timeline on the way)
- The manual is now installed, and is accessible from the start menu, or the help menu in the application
- Fixed ID packet timestamp offset
- Fixed long QHS-5 packet corruption
- Improved AVCTP handling
- Improved L2CAP SDU handling
- Fixed QHS shadowing CRC issue
- Fixed HV3/EV3 determination
- Fixed SCO decryption

# 22.03.09:

## Features:

- Some more support for the ATT side of LE Audio, and multi-packet ATT writes
- Some summarising of Audio streams, in the Timeline and in their own tab
- Various bugfixes and UI tweaks.

# 22.03.02:

## Features since 22.02.10:

- Support Google ASHA audio

## Bugfixes:

- Improvements to advertising packet handling with better heuristics for guessing senders of packets with no address; improves decoding of BISes when many devices are broadcasting.
- Some fixes to audio playback, there were issues with getting some silence after seeking, and getting stuck in the stopped state.
- Fixed an issue where occasionally corrupt QHS packets were marked as CRC passes with invalid CRCinit values, which was preventing decryption of subsequent packets due to a bad clock value.
- Audio on the timeline is now shown next to the relevant packets, instead of as an independent row.
- Fixed an issue where the context menu and cursors would render in the wrong place if you scroll down in the timeline.
- Fixed failure to decode LC3 in eSCO.

# 22.01.25:

- Performance improvements

# 21.12.23:

## Features:

- Improved dewhitening and decryption, should be more resilient to following the link in the face of interference, and show more of the contents of packets on ongoing/unknown connections.
- Added support for LE Credit-based L2CAP Connections, and EATT.
- Started adding the many new characteristics required for LE Audio.
- Fixed bugs with signing files, any capture created using a Moreph should now always be signed and openable without hardware connected; other PCAPNG files can be opened if a Moreph is connected.
- Added OBEX parsing.
- Added GUI to provide control over the order of the rows in the Timeline.

# 21.11.18:

- Logic analyser support: up to 16 IO lines, at either an externally-supplied voltage between 0.8V and 3.6V, or at 3.3V provided by the Moreph.
- Basic 802.15.4 sniffing: Parsing packets up to the headers, which includes device and PAN addresses.
- Simultaneous capture of all traffic types supported: LE, BR/EDR, QHS, WiFi, 802.15.4, Logic, Spectrum.
- GUI:
  - Improved Device filtering; Device selection tabs now allow searching on localnames/vendor names and on address sections, as well as sorting by address/power/number of packets
  - Performance improvements: GUI should now stay responsive even when millions of packets and hundreds of devices have been captured.
  - Fixed bug where Shift/Ctrl hotkeys for Pan/Zoom didn't always work.

# 21.09.25:

- RFCOMM Procedures and Signalling PDUs parsed
- SDP Transactions and improved SDP Profile/Service data parsing
- Fixed bug involving key reuse
- Added column for time-delta between selected packet and others, and added separate column for icons
- Distinguish better between CRC/dewhitening failures, and encrypted packets; improved filtering of these.
- Fixed missing last byte on maximum length packets with MIC.

# 21.08.26:

- WiFi coexistence added. We detect RSSI, duration, start-time and modulation for 802.11 b/g/n (20 and 40 MHz packets), and depict in the Spectrum the time/frequencies of the interference (802.11ax to be added). Tools to classify corrupted BT packets as "suffering from interference" or "had no excuse!" to follow.
- Full quint-mode capture added; simultaneous capture of LE, BR/EDR, QHS, WiFi, and Spectrum is now supported.
- "Connect" interface added for Moreph control; use this to select which Moreph to connect to, to reboot a Moreph already running, and to add licences.
- Search now has two modes.
  - "Filter", the existing mode: only packets/events matching the search are displayed.
  - "Highlight": all packets are still displayed, highlights applied to the packets/events matching the search.
- Filtering:
  - Device and Protocol filtering can now (optionally) be applied to the Spectrum and the Timeline, as well as to the Summary tabs. Device filtering is universal across the application (unless disabled for a tab); Protocol selection is based on the currently-focussed Summary tab, to allow switching between e.g. one Summary tab displaying LMP only, and another displaying audio packets.
  - The "Filter Devices" tab provides a summary of which devices are hidden or shown, but devices can also be enabled/disabled using context menus in the "Devices Detail" and "Connections" tabs, and by right-clicking in the Timeline itself. Devices/Connections coloured red in the Devices/Connections tabs have been hidden, those coloured grey have been mentioned (e.g. by paging or LE Scan) but have not transmitted any packets.
  - The distinction between: packets sent by a known device (where only part of its address is known); and packets sent (e.g. on an encrypted link) by unknown devices, using a particular LAP; has been made more obvious in the display.
- Spectrum and Timeline: Detailed tooltips added; toggle between detailed and brief using context menu.
- Timeline:
  - Connections (including QHS-Classic) and eSCO links added as rows in Timeline. These can be hidden/shown by right-clicking on the relevant field in the Connections tab, or hidden by right-clicking on the row in the Timeline.
  - Display of time-gaps between packets improved, now shows end->start and start->start gaps for all baseband packets on a row.
- New BT 5.3 LE link-layer packets added.
- We now track eSCO connection setup and collect together packets on an eSCO link for display.

# 21.07.09:

- We now support simultaneous capture of LE, Classic and QHS.
- You can now right-click on the summary to export to CSV or YAML
- Timestamps are printed at higher resolution
- You can now open multiple summary tabs so you can have different filters in each one (View menu)