New features: * Smart Audio Source Switching. * Fast Pair for BLE-only devices. * Two byte salt size for improved security. Other changes: * Added optional encryption modules based on mbedtls. * Fixed build issues. * More verbose and readable logs.
2.3 KiB
Nearby embedded SDK library
This repository contains Nearby SDK library for embedded systems. Nearby SDK implements the Fast Pair protocol and its future versions per https://developers.google.com/nearby/fast-pair/spec
Threading model
Nearby SDK assumes a single-threading model. All calls to the SDK must be on the same thread, or protected with a mutex. That includes:
- client API, for example
nearby_fp_client_SetAdvertisement() - ble and other event callbacks
- timers
Porting guidelines
- Follow the steps at Fast Pair Help to register a Model Id for your device.
- Review
nearby_config.hand disable features, if any, that you don't wish to support. - Implement the HAL defined in
nearby_platform_*.hheaders. - Set platform specific compile flags in
config.mk- seetarget/gLinux/config.mkfor inspiration, and add your platform inbuild.sh, or use your own build system. - Compile with
./build.sh <your platform> - Start advertising in your application. For example
nearby_fp_client_Init(NULL); nearby_fp_client_SetAdvertisement(NEARBY_FP_ADVERTISEMENT_DISCOVERABLE); - Use Fast Pair Validator to verify that your device is behaving correctly.
Optional modules
The optional modules provide partial implementation of HAL interfaces using common libraries, mbedtls in particular.
- mbedtls located in
common/source/mbedtls/mbedtls.cimplementsnearby_platform_Sha256Start(),nearby_platform_Sha256Update(),nearby_platform_Sha256Finish(),nearby_platform_Aes128Encrypt(),nearby_platform_Aes128Decrypt().
Nearby SDK can be configured to use the MBEDTLS package, commonly available on ARM
implementations, with the config.mk flag NEARBY_PLATFORM_USE_MBEDTLS.
- gen_secret located in
common/source/mbedtls/gen_secret.cimplementsnearby_platform_GenSec256r1Secret().
gen_secret generates a shared secret based on a given private key on platforms that don't support hardware SE. gen_secret module is enabled NEARBY_PLATFORM_USE_MBEDTLS is set and NEARBY_PLATFORM_HAS_SE is not set. When NEARBY_PLATFORM_HAS_SE is set, the platform needs to provide their own nearby_platform_GenSec256r1Secret() routine.