UCI over BLE questions

we have a technical solution that uses UWB/QANI on iPhones, but is broken since iPhone 14 due to the camera assistance required..
we also need Android support, which is different and uses a a different channel , so multi phones in the same room cause config problems..

Fira UCI looks like the answer, BUT USB cables don’t work..
so I am invested in BLE and a different app model

Is there anyone I can talk to offline about the technical restrictions on the current UCI FIRA firmware implemetation in the DW3_QM33_SDK?
I have added BLE thru Softdevice , and am ‘almost’ there.. triggering the UWB components for ranging is where I am stuck at the moment.. I can’t tell if its a SD problem, or something else.

I am using the Murata Type2AB 52840 device for the primary dev environment..

Hi @rexxdad !

Let me see if I understood. To have more freedom to handle both iOS and Android sessions than using the QNI project, you’re including an Out-Of-Band layer, over BLE, to the DW3_QM33_SDK/UCI, right!?

If that’s the case, I think you can look at the BLE part of the QANI implementation inside the SDK:
DW3_QM33_SDK_1.1.0/Projects/FreeRTOS/QANI, “Murata Type2AB” is one of the targets, and it uses the same driver and uwb-stack as the UCI project you’re modifying.

Please let me know how it goes!
Kind regards!

thanks.. I’ve looked thru the QANI implementation but it is very limited compared to the UCI implementation.

I basically want to add another transport, next to USB. that other transport happens to be BLE, could be TCP.. anyhow, I don’t want to change the UCI design , as its quite complicated with all the tasks involved.

and for my other requirements, on the primary device, I need to use the S140 softdevice.
(tricky how QANI added the SD code, I saw and saved your script). I haven’t got to packaging yet. using Ozone debugger, loading SD on top of the elf

I have all the BLE transport functions I need working.
I am using the 1.0.2 SDK, working on porting to the 1.1.1,

now need to get ranging going..
but in task_uci.c

void uci_task_on_entry(void)
{
...
...
    /* Initialize UWB driver for FiRa by default. */
    uwbmac_helper_init_fira();  //< ---- was a problem with interrupt priorities, fixed

    if (!rx_buffer_mutex)
    {
        rx_buffer_mutex = qmutex_init();
        if (!rx_buffer_mutex)
            return;
    }

    uci_open_backends();   //< --- somewhere in here, I think SD , is a hardfault.

if I comment out the open_backends() , all the rest of my new transport works, messages flow
get processed, send responses.

doing this has exposed lots of interesting questions about 1->Many ranging with a non-USB transport, with different/mix (end location) devices..

and doing all the open_backends work BEFORE SD is up doesn’t work either..

any wisdom or guidance welcomed..

I sent you a message

here is the key thing

in QANI this

sdk_config.h
#define NRFX_SPIM3_NRF52840_ANOMALY_198_WORKAROUND_ENABLED 1

is 0 (disabled)

when it is set to 1 (default), the memory area for spim3 is in a protected space that takes special coding to enable (not done in the sdk)

devzone.nordicsemi.com/…/enabling-workaround-for-anomaly-198-crashes-softdevice

I can’t edit my prior post
for the define in sdk_config.h
NRFX_SPIM3_NRF52840_ANOMALY_198_WORKAROUND_ENABLED

when set to 1 (default) the hardware does it all , but conflicts with SD
when set to 0, the developer is responsible for the buffer placement, and configuration, this does not conflict with SD