Qorvo Nearby Interaction Software package v.3.0 Release

PS: I also asked the Qorvo support. Their answer is that they focus on their largest customers and can’t guarantee a response.

I think that’s not how you should market a product or reply to customers. A company should be thankful for every bug report and fix their code and documentation, which helps all customers, even their largest customers. I’m an independent developer and work for big companies as well. I wouldn’t recommend them to use Qorvo products based on my experience.

@frankbuss i feel your pain, but at the end of the day you was able to do something. Try other UWB vendors and try understand reasons they’ve answered you like that.
I know the algorithm is used CCM*, not CCM, maybe that can help you.

Anyway, what is the issue with Zephyr? It should be straight, as Qorvo libs do not seems have an os-dependency?

Besides the crypto test I described, it needed a special linker file, to keep the dw_drivers section and create the __dw_drivers_start and __dw_drivers_end variables, which otherwise the GCC linker optimized out, and then the probe function didn’t find the right driver for the detected chip. And while the libraries might be relatively clean abstracting the OS and hardware level, I tried porting the whole application, and needed to change the FreeRtos task functions and event handling to Zephyr. Another place used a hardware timer of the nRF microcontroller.

So at least on application level, there is no clear distinction between operating system and microcontroller hardware, and the UWB functionality, it is all mixed together, which makes porting difficult.

Hi, can you please share some of your experience on solving the issues you mentioned? I started a Zephyr project, and got the same dificults as well, now I am stuck on

the probe function didn’t find the right driver for the detected chip

as you mentioned.
Yair

Yeah, it is tricky. Would be nice if Qorvo would provide it for Zephyr as well.

To solve your problem, create a file uwb.ld:

. = ALIGN(4);
__dw_drivers_start = .;
KEEP(*(.dw_drivers));
__dw_drivers_end = .;

and use it from CMakeLists.txt:

zephyr_linker_sources(RODATA uwb.ld)

BTW, has someone get the DW3000 working with Android?

Thanks, I checked it, but I am getting the same results. I believe that I am not linking the “.a” correctly. I have tried lot’s of configurations, but none works. This is my last and best config:

set(DWTLIBNAME libdwt_uwb_driver-m4-hfp-6.0.14.a)
zephyr_include_directories(inc)
add_library(dwtlib STATIC IMPORTED GLOBAL)
set_target_properties(dwtlib PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib/${DWTLIBNAME})
target_link_options(app PUBLIC -Wl,–whole-archive ${CMAKE_CURRENT_SOURCE_DIR}/lib/${DWTLIBNAME} -Wl,–no-whole-archive)
target_link_libraries(app PUBLIC dwtlib)

and it is better than my others tries- I can see in the generate hex file it has

1203CADE
1303CADE
1403CADE
which are some hard-codded qorvo chip-ID’s (reverse) but:

  1. there are no others qorvo ID’s
  2. the probe function keep failes
    I also have:

zephyr_library_compile_options(-O1)

and some other version of the .ld file (but i like more the one you sujjest)
what an I missing?

I needed 3 libraries:

zephyr_library_import(dwtlib ${drivers_dir}/uwb/Qorvo/Libs/dwt_uwb_driver/lib/libdwt_uwb_driver-m4-hfp-6.0.14.a)
zephyr_library_import(niqlib ${drivers_dir}/uwb/Qorvo/Libs/niq/libniq-m4-hfp-1.1.0.0.a)
zephyr_library_import(maclib ${drivers_dir}/uwb/Qorvo/Libs/uwbstack/uwbstack_lib/lib/cmsis_v1/embedded_mac/libembedded_mac_arm-m4-hfp_R11.9.2.a)

Hey Frank,

We have been able to get UWB ranging working using Android + Nearby Interaction (FreeRTOS) with a couple of tweaks to message parsing in ble_niq.c

I was wondering if you had successfully ported over all of Nearby Interaction to Zephyr and gotten it ranging?

in the sample app code in the 3.0.1 package in the BluetoothCentral.didDiscover callback is reference to a missing function

 if let didDiscoverHandler = accessoryDiscoveryHandler {
            didDiscoverHandler(qorvoDevices.count - 1)
        }
        if let didDiscoverHandler = accessoryDiscoverHandler {
                    didDiscoverHandler(peripheral,advertisementData, RSSI)
                }
    }

accessoryDiscoverHandler is not defined anywhere… (the one WITH a y, accessoryDiscoveryHandler, is, but it only accepts a single value,
here this unknown function returns a function with 3 values as parameters.

I have been unable to get my app to work on iphone 14/15… i get the distance , and convergence errors… but never the direction info…

going thru my code I see I don’t call this missing function, which contains usage of the advertisement data…

help…