Android + Qorvo Support & UWB Configuration

Hi Everyone,

I hope you’re all doing well.

We’re still waiting for Qorvo to provide support for Android. We really need sample code or documentation to proceed. I have reviewed the iOS example and gathered some logs. Below, I will first share the logs and then ask my questions. I would really appreciate any help regarding Android + Qorvo sample code.

First of all:
I found this sample (.hex file + Android source code + Python script):
:link: GitHub - UWB Ranging Sample

I was able to run this sample, but it only works with UWB and does not support BLE. If I had access to the firmware source code, I could modify it to make it work.

Questions:

:one: Firmware Source Code:

:question: Question 1:

  • Does anyone have access to the firmware source code for this sample from github as I mentioned that link?

:two: BLE Communication Logs Explanation:
During BLE communication after pairing:

  • Step 1: The iPhone sends 0A to the Dev Board.
  • Step 2: The Dev Board responds with:
01 01 00 00 00 14 00 00 00 00 00 00 00 00 00 00 15 01 00 01 00 3F F5 03 00 B8 0B 00 00 00 00 01 01 01 11 D7 19 00
  • The response structure is as follows:
struct AccessoryConfigurationData {
    uint16_t majorVersion; // NI Accessory Protocol major version
    uint16_t minorVersion; // NI Accessory Protocol minor version
    uint8_t preferredUpdateRate;
    uint8_t rfu[10];
    uint8_t uwbConfigDataLength;
    uint8_t uwbConfigData[MAX_UWB_CONFIG_SIZE]; // Undefined content
} __attribute__((packed));
  • The first byte is the message ID, but we cannot determine the contents of uwbConfigData (01 00 01 00 3F F5 03 00 B8 0B 00 00 00 00 01 01 01 11 D7 19 00).
  • This data is passed into a lock function before being sent to the phone.
// UWB middleware responsibility
    niq_populate_accessory_uwb_config_data(&config->uwbConfigData ,  &config->uwbConfigDataLength);

:question: Question 2:

  • Does anyone have details on the function below that populates the uwbConfigData?
niq_populate_accessory_uwb_config_data(&config->uwbConfigData ,  &config->uwbConfigDataLength);

:three: Shareable Configuration Bytes:

  • The phone sends the following data to the Dev Board as Shareable Configuration Bytes:
0B 01 00 01 00 19 45 55 A7 48 00 00 0B 09 06 00 10 0E B0 01 03 D8 D4 87 12 1F 1B 43 42 C8 00
  • The only struct I found is:
typedef struct __attribute__((__packed__)) {
    uint8_t message_id;
    uint8_t payload[NI_MAX_PACKET_SIZE];
} ni_packet_t;
  • The content is passed into this function:
niq_configure_and_start_uwb(packet->payload, data_len-1, (void*)&fira_config);

:question: Question 3:

  • Does anyone know what this data represents?

:four: Channel Configuration Issue:

  • As I understand the iphone sends the channel number and preamble to the Dev Board.
  • because I attempted to change the channel from 9 to 5 by modifying the FiRa configuration in the firmware’s C code. However, the system is still using channel 9.

:question: Question 4:

  • Why isn’t the channel change taking effect? How can we properly change it to channel 5?

finally ,we are a Automative company , and alreay we singed NDA with qorvo.

Any insights or suggestions would be greatly appreciated!

Best regards,
Meti

Hello, If you already signed a NDA with Qorvo, the best is to go to your Sales Rep or FAE. You should get your answers through this way.

We don’t offer SDK for android, the one you points on github come from people we don’t know. The hex file likely comes from an old SDK we provided (the 0.1.1 version) and it is no more available on our website I think.

Concerning the channel, maybe you did updated the default configuration, but when setting up a Fira session, it is possible to choose the channel, so maybe the channel is set this way, bypassing your default value.