Distance Measurement for iPhone App in Background State

Inquiry 1) When the iPhone is in the background state, it doesn’t measure the distance as I approach the device. However, when I open the app, it starts measuring the distance.

What settings are needed to enable distance measurement without having to open the app?

Environment:

  • App Version: Qorvo NI Background v1.0.0
  • Device Version: Qorvo_Nearby_Interaction_3_1_0

Device Log Details(situation of moving away from the device and then approaching again):

{"Block":37, "results":[{"Addr":"0xfcc5","Status":"Ok","D_cm":105,"CFO_100ppm":-247}]}
{"Block":38, "results":[{"Addr":"0xfcc5","Status":"Ok","D_cm":199,"CFO_100ppm":-233}]}
{"Block":39, "results":[{"Addr":"0xfcc5","Status":"Ok","D_cm":229,"CFO_100ppm":-242}]}
{"Block":40, "results":[{"Addr":"0xfcc5","Status":"Ok","D_cm":210,"CFO_100ppm":-266}]}
{"Block":41, "results":[{"Addr":"0xfcc5","Status":"Ok","D_cm":216,"CFO_100ppm":-263}]}
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
reportTask      	2576/4096
BLE             	776/1024
logger          	428/1024
Tmr Svc         	156/512
mcpsTask        	1472/1600
Total HEAP      	51200
Current HEAP used	26704
Max HEAP used   	28800
{"Block":42, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":43, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":44, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":45, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":46, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":47, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":48, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":49, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":50, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":51, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":52, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":53, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
{"Block":54, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
<info> app: Slow advertising.
<info> app: Disconnected
{"Block":55, "results":[{"Addr":"0xfcc5","Status":"Err"}]}
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
logger          	428/1024
Tmr Svc         	156/512
BLE             	776/1024
Total HEAP      	51200
Current HEAP used	9720
Max HEAP used   	31576
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
logger          	428/1024
BLE             	776/1024
Tmr Svc         	156/512
Total HEAP      	51200
Current HEAP used	9720
Max HEAP used   	31576
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
logger          	428/1024
Tmr Svc         	156/512
BLE             	776/1024
Total HEAP      	51200
Current HEAP used	9720
Max HEAP used   	31576
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
logger          	428/1024
BLE             	776/1024
Tmr Svc         	156/512
Total HEAP      	51200
Current HEAP used	9720
Max HEAP used   	31576
<info> peer_manager_handler: Peer data updated in flash: peer_id: 0, data_id: Peer rank, action: Update, no change
<info> app: Notification is enabled
<info> app: Connected
<info> peer_manager_handler: Connection secured: role: Peripheral, conn_handle: 0, procedure: Encryption
<info> peer_manager_handler: Peer data updated in flash: peer_id: 0, data_id: Peer rank, action: Update, no change
<info> app: Notification is enabled
<info> app: App requests accessory config data
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
logger          	428/1024
Tmr Svc         	156/512
BLE             	776/1024
Total HEAP      	51200
Current HEAP used	9720
Max HEAP used   	31576
{"Block":0, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":1, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":2, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":3, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":4, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":5, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":6, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":7, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":8, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":9, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":10, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":11, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":12, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":13, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":14, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":15, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":16, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":17, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":18, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":19, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":20, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":21, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":22, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
mcpsTask        	1104/1600
reportTask      	2576/4096
logger          	428/1024
BLE             	776/1024
Tmr Svc         	156/512
Total HEAP      	51200
Current HEAP used	26704
Max HEAP used   	31576
{"Block":23, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":24, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":25, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":26, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":27, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":28, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":29, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":30, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":31, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":32, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":33, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":34, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":35, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":36, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":37, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":38, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":39, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":40, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":41, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":42, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":43, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":44, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
mcpsTask        	1104/1600
reportTask      	2576/4096
logger          	428/1024
Tmr Svc         	156/512
BLE             	776/1024
Total HEAP      	51200
Current HEAP used	26704
Max HEAP used   	31576
{"Block":45, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":46, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":47, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":48, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":49, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":50, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":51, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":52, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":53, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":54, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":55, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":56, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":57, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":58, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":59, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":60, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":61, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":62, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":63, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":64, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":65, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":66, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":67, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
mcpsTask        	1104/1600
reportTask      	2576/4096
logger          	428/1024
BLE             	776/1024
Tmr Svc         	156/512
Total HEAP      	51200
Current HEAP used	26704
Max HEAP used   	31576
{"Block":68, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":69, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":70, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":71, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":72, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":73, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":74, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":75, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":76, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":77, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":78, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":79, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":80, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":81, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":82, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":83, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":84, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":85, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":86, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":87, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":88, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":89, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
THREAD NAME     	Stack usage
defaultTask     	2652/4304
IDLE            	308/512
mcpsTask        	1104/1600
reportTask      	2576/4096
logger          	428/1024
Tmr Svc         	156/512
BLE             	776/1024
Total HEAP      	51200
Current HEAP used	26704
Max HEAP used   	31576
{"Block":90, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":91, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":92, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":93, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":94, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":95, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":96, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":97, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":98, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":99, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":100, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":101, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":102, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":103, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":104, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":105, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":106, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":107, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":108, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
<info> app: App requests accessory config data
{"Block":109, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":110, "results":[{"Addr":"0xe3ed","Status":"Err"}]}
{"Block":0, "results":[{"Addr":"0xb779","Status":"Ok","D_cm":62,"CFO_100ppm":-192}]}
{"Block":1, "results":[{"Addr":"0xb779","Status":"Ok","D_cm":61,"CFO_100ppm":47}]}
{"Block":2, "results":[{"Addr":"0xb779","Status":"Ok","D_cm":65,"CFO_100ppm":-241}]}
{"Block":3, "results":[{"Addr":"0xb779","Status":"Ok","D_cm":73,"CFO_100ppm":-274}]}
{"Block":4, "results":[{"Addr":"0xb779","Status":"Ok","D_cm":72,"CFO_100ppm":-269}]}

Inquiry 2) Is there a way to increase the maximum range for distance measurement?

The device is placed in the central console box of the vehicle, and when I am at the trunk of the vehicle as shown in the picture with the app turned on, it does not measure the distance.

I would like to increase the range at which distance measurement is possible.

I have found the cause for Inquiry 1.

Hi @theo ,

What was the cause for inquiry 1 ?

About inquiry 2:
What you can do to increase the range, is to increase the transmit power of the device.
This will get you more range, but you’ll not be compliant with FCC regulation (transmitting at -41.3 dBm / MHz).
To do this you can change these values below to 0xFFFFFFFF (maximum power):

#define DEFAULT_TX_POWER_REGULAR_PULSE_AOA       0xa6a6a6a6UL
#define DEFAULT_TX_POWER_REGULAR_PULSE_NON_AOA   0x8a8a8a8aUL
#define DEFAULT_TX_POWER_ALTERNATE_PULSE_AOA     0x93939393UL
#define DEFAULT_TX_POWER_ALTERNATE_PULSE_NON_AOA 0x63636363UL
1 Like

The cause is that the background task stops in the middle and restarts when the app is launched.

Detailed Information:
When at a distance where UWB distance measurement is not possible, the Uwb Session on the iPhone ends after 10 seconds. At this point, the background task in the app (creating a Uwb Session and requesting Uwb Initialize to the device) stops

Thanks.

I will check again.

I have confirmed that the range has increased.

Could there be any issues caused by setting the TxPower too high?

The issue is that you do not comply with FCC regulation. So you cannot certify your device as it is with the actual transmit power.

Your answer was very helpful. Thank you.

Background ranging on iOS requires some way of waking up the iPhone in the background, so something like an iBeacon to wake up and then perform UWB ranging.
However I think the UWB beacon really needs to implement background ranging for this to work, as Estimote are talking about combining UWB and iBeacon and then using BLE to pass the UWB ranging info over to the iPhone.

Thank you for the valuable information.

We have ordered Estimote beacons, but they are marked as ‘manufacturing’, so we have not received the products yet. Could you please inform us which UWB chip is being used?

Hi @theo ,

Estimote beacons are based on DW3000 chip:

1 Like