Google Find My Device Network implementation

Hello, 

I need to implement Find My Device for nRF52833. 

From Sample I could find "samples/bluetooth/fast_pair/Locator Tag" example. I tried to go through it. but I could not able to map with fast pair specification(Fast Pair  |  Google for Developers). 

I want to check in which function advertisement is prepared ?

How keys(account keys,anti-snoofing keys) are sent in encrypted ?

In the advertisement which data we are sending(like fast pair UUID, Model id, anti snoofing keys, unique mac address,salt field ) etc ?  

Parents
  • Sorry, maybe I jumped to conclusions initally. Most people asking about this says that they don't see the fast pair popup in Android. I am not sure exactly how the keys are being used. It is based on Google/android specification, so I don't think there is much room for customization exactly there. 

    I believe the advertisement data is set in NCS\nrf\subsys\bluetooth\services\fast_pair\fmdn\state.c, in e.g. fmdn_adv_data_async_update() it is set several places. At least there it calls bt_le_ext_adv_set_data().

    Is it something in particular that you want to add in your advertising data?

    Best regards,

    Edvin

  • No problem edvin. Thank you for your support. 

    I want to know do we use automatic advertisement or custom advertisement ? I need to use custom advertisement .  

    If I need to change advertisement data where I implement custom advertisement in source code ? 

    I also want to map Google Fast pair specification and source code.  Could you please help me on this ? 

  • Thank you for your response. I am mapping find my protocol ble message frame with "Locator Tag" sample.   

    Find My Device Network Accessory Specification  |  Fast Pair  |  Google for Developers

    I would like to map specification of Google's FMDN and nordic "locator tag". How I would map message frame ? Please guide me. 

    Please help me to understand FMDN technology to track item. Suppose I have manufacturer 100 quantities ble devices(same hardware model). I would like to track each device. How Google identify each device uniquely ?

  • All of this is covered by the FMD specification so you will need to look at that. The nRF Connect SDK implementation is a spec compliant implementation so if you start to change the frame content than I would expect you will fail compliancy tests and it won't work as an FMD tag.

    The technology uses the ephemeral data to uniquely identify the tag and allow the owner to track it. This is encrypted data so can only be used by the owner, you can't change how this works as that will break the FMD compliance.

    Maybe you could explain why you want to break down these features as there may already be a solution for what you want to do, or we may already know this can't be done.

  • Thank you PaKa for giving this information. This is very useful so I cannot modify FMDN frame in sample code.  

    I can directly use "location tag" for my product. I want to understand FMDN technology and BLE message frame preparation. So in source code where BLE message frame parameters(16 bit UUID 0xFEAA, FMDN frame type - 0x41 and ephemeral  identifier etc)  are filled  ?   

  • Thank you PaKa for giving this information. This is very useful so I cannot modify FMDN frame in sample code.  

    I can directly use "location tag" for my product. I want to understand FMDN technology and BLE message frame preparation. So in source code where BLE message frame parameters(16 bit UUID 0xFEAA, FMDN frame type - 0x41 and ephemeral  identifier etc)  are filled  ?   

  •   and  Could you resolve my above query please ? This is related to FMDN frame parameters in source code. 

Reply Children
  • I haven't read the code so can't answer, this should be possible to read out of the code.

  • You should study the file fp_adv.c.

    I have not looked into the details of this, but this seems to be where it sets and starts the advertising in the locator_tag sample. 

    fp_adv_payload_set() seems to be the function that populates the ad[] and sd[] (advertising data and scan_response data). Exactly what it is put in here I don't know, but it comes from the specification from Google.

    From looking around, the UUID itself is coming from:

    bt_le_ext_adv_set_data() -> fndb_frame_data -> fmdn_frame_payload -> BT_UUID_16_ENCODE(FMDN_FRAME_UUID), FMDN_FRAME_TYPE_UTP_MODE_OFF,, where FMDN_FRAME_UUID is 0xFEAA.
    Best regards,
    Edvin
Related