Hi people,
There is a UWB module named as ULM3 by Haorutech.
It consists of a DWM3000 chip with an STM32F103b as a host.
I have few anchors and a tag, now all these were preprogrammed to work in such a manner that we have to place the anchors at some fixed positions and the tag can be anywhere inside the range. and will be tracked.
this all works fine.
what i need to do for a project is that i have to make that chip talk with the Iphone using Apple’s Nearby interaction Framework.
The issues i am facing are that i am unable to make the devices do a handshake just because we lack the knowledge that dataframe do we have to send to the apple device and what will we get in return.
Additionally, we also do not know the exact configuration of the dwm3000 chip which will make it compatible with the Apple’s U! chip.
I recommend downloading the Qorvo Nearby Interaction Software Package and read the documentation there.
You’ll find more details on the Out-Of-Band “handshake”, but you’ll need to use the NIQ library to use the data from the iPhone packages to configure the DW3000 and FiRa session.
I am having a similar problem to @Obaidtanveer . I am developing a custom iOS app (using NearbyInteraction) to interface with the DWM3001CDK, rather than using the official Qorvo demo app.
I have successfully established a BLE connection and can see the GATT services. However, I am stuck on the Accessory Configuration exchange. When I attempt to initialize NINearbyAccessoryConfiguration with the data provided by the board (Message ID 0x01), I consistently receive: NIERROR_INVALID_CONFIGURATION_DESCRIPTION
Specifics of my issue:
Handshake: I’ve observed that the board often sends a 0x02 (Ranging Started) response before the iOS app has even successfully run the NISession.
Binary Data: Does the DWM3001C-QANI firmware require a specific “pre-handshake” write command to trigger an Apple-compliant Accessory Configuration packet?
Third-Party Compatibility: Can the DWM3001CDK (running QANI firmware) be used with a standard NINearbyAccessoryConfiguration in a third-party app, or is the NIQ library logic on the board strictly tied to the encrypted handshake used by the Qorvo demo app?
I have the full PacketLogger traces and my Swift implementation follows the iOS 16+ bluetoothPeerIdentifier requirements. I have read all of the Nearby Interaction documentation in the Qorvo Nearby Interaction Software Package thoroughly, but have been unable to find an answer. For context, the board interacts perfectly with the official Qorvo demo app. Any insight into why the board’s configuration data is being rejected by the iOS framework would be deeply appreciated.
qorvo provides a sample app that does all that. I used it to make a library for my app and use the DWM3001CDK as the target board.
the 3001CDK MUST be running the Nearby firmware, not the Fira firmware.
from the source , in the app code. apple calls with the parms it expects on the ranging session
extension uwbplugin: NISessionDelegate {
public func session(_ session: NISession, didGenerateShareableConfigurationData shareableConfigurationData: Data, for object: NINearbyObject) {
let accessory = findAccessoryBySession(session)
guard object.discoveryToken == accessory?.configuration?.accessoryDiscoveryToken else { return }
// Prepare to send a message to the accessory.
var msg = Data([MessageId.configureAndStart.rawValue])
msg.append(shareableConfigurationData)
let str = msg.map { String(format: "0x%02x, ", $0) }.joined()
logger.info("Sending shareable configuration bytes: \(str)")
// Send the message to the correspondent accessory.
sendDataToAccessory(msg, deviceIDFromSession(session))
//infoLabelUpdate(with: "Sent shareable configuration data.")
Hey @rexxdad , that worked! Thank you so much for the help. I am, however, running into another issue. I can’t seem to get any ranging data from the board. Here is where I’m at:
BLE: Connection and service discovery are successful.
Handshake: The board sends the Accessory Configuration (0x01) packet. My app initializes an NINearbyAccessoryConfiguration successfully (no invalid configuration errors).
Token Exchange: The iPhone generates the shareable configuration data, which I send back to the board via Opcode 0x05 (configureAndStart).
Session State: The NISession starts correctly, and the iOS “Nearby Interaction” permission prompt was accepted. The app enters the “Ranging Active” state.
The Problem: Even though the session is active, the nearbyObject.distance remains nil. On the board, the LED remains flashing red.
Question: Is there a final “Start” opcode or a specific bitmask I need to send to the board after the 0x05 handshake to physically trigger the UWB pulses and reporting and is the DWM3001CDK supposed to flash a red LED when QUANI is running successfully?