KDocs 研发资料库
  • 手表穿戴技术应用文档入口汇总
  • JL707N穿戴客述问题FAQ
  • 彩屏仓 硬件开发指南 与 量产作业流程规范
  • 彩屏仓 AC98N和JL701烧录升级注意事项
  • JL707 硬件开发资料
  • JL707 手表硬件设计注意事项 总结
  • 穿戴生产烧录OTA和key文件添加使用说明
  • JL707N-入门到进阶开发指导文档
  • 彩屏仓982相关
  • 彩屏仓耳机介绍
  • 杰理701_707双屏demo介绍
  • 707电子吧唧开发资料
  • GPIO相关
  • UART串口相关
  • SPI相关
  • nandflash相关
  • norflash相关
  • IIC相关
  • PWM相关
  • SD卡相关
  • 定时器TIMER
  • 文件系统接口设计说明文档
  • 音视频录像开发流程
  • rdec编码器
  • 穿戴功耗数据标准
  • 手表蓝牙开发文档
  • 701蓝牙PAN联网demo
  • BLE开发使用说明
  • 701手表2.0.0版本SDK EQ在线调试和离线调试方法 V1.1
  • JL707 手表喇叭输出声音大小评估方法 V1.0
  • JL707 手表音频EQ调试方法 V1.0
  • AC707N 手表通话写卡 软件配置方法
  • 录音功能
  • 701手表2.X.X系列SDK调试EQ配置方法及音频调试技巧V1.1
  • 701手表104版本SDK EQ在线调试和离线调试方法 V1.1
  • mic2dac示例
  • P11 SensorHub相关
  • 手表升级操作文档
  • AC707NGPU
  • DBI模块介绍
  • GPU模块介绍
  • 701N屏幕驱动配置说明
  • 701N_UI编辑工具用户手册
  • 支付宝资料
  • 支付宝硬件接入资料
  • 支付宝乘车码接入资料
  • CAT1 接入文档
  • 701N_WATCH_CAT1开发说明
  • Findmy功能
  • music模式相关
  • 707电池曲线
  • 707N内置FLASH挂载FAT文件系统251112_v1.2
  • AC707N_本地视频播放demo(AVI-MJPEG-PCM)
  • 光波导屏幕调试
  • 耳机研发和生产流程 指南
  • 707-NandFlash 代码和UI资源独立烧录方案
  • 彩屏仓时间同步补丁
  • 彩屏仓抖音点赞移植
  • 707LVGLv8双屏开发
  • 707N蓝牙互传图传demo
  • AVIPCM数据流接入AIVOICE
  • Flash分区操作demo
  • 手表发射问题
  • 701_707 双备份升级DEMO
  • 707_乘车码刷码失败问题_共性

JL701N_watch_FindMy_20250116

📎 原始文档:https://www.kdocs.cn/l/cgsYEAsV4mXjimage JL701N watch FindMy

说明文档

珠海市杰理科技股份有限公司

Zhuhai Jieli Technology Co., LTD
版权所有,未经许可,禁止外传
目录
一、 FindMy原理简介和概述............................................................................................................... 5
二、 快速上手................................................................................................................................................7
(一)开发环境搭建......................................................................................................................... 7
(二)添加苹果授权信息............................................................................................................... 7
(三)添加杰理授权使用............................................................................................................... 9
(四)烧录固件................................................................................................................................ 10
(五)测试使用................................................................................................................................ 10
三、代码架构介绍..................................................................................................................................... 11
(一)FindMySDK框图介绍..................................................................................................... 11
(二)应用层代码文件介绍....................................................................................................... 12
四、 FindMy状态介绍............................................................................................................................13
(一)状态介绍................................................................................................................................ 13
(二)FindMy状态回调函数..................................................................................................... 14
五、 apple license和产品信息配置................................................................................................. 16
(一)产品信息配置...................................................................................................................... 16
(二)apple licen se信息配置和说明................................................................................ 17
(三)fmy功能特性设置..............................................................................................................20
六、 绑定和解绑功能.............................................................................................................................. 22
(一)绑定功能................................................................................................................................ 22
(二)解绑功能................................................................................................................................ 22
七、 playsound功能.............................................................................................................................. 24
(一)playsound功能介绍........................................................................................................ 24
(二)playsound配置.................................................................................................................. 24
(三)play sound 驱动函数.......................................................................................................24
八、 Motion Detection功能.................................................................................................................26
(一)Motion Detection功能介绍.......................................................................................... 26
(二)gsensor外设配置...............................................................................................................26
(三)gsensor调试功能...............................................................................................................27
(四)UARP功能............................................................................................................................. 27
(五)按键调试................................................................................................................................ 27
(六)FindMy 电池相关功能..................................................................................................... 28
九、 FindMy第三方认证.......................................................................................................................30
(一)申请流程................................................................................................................................ 30
(二)MFi工具使用....................................................................................................................... 31
十.常用api介绍...................................................................................................................................... 35
十一.常见问题汇总................................................................................................................................ 37
image FindMy 原理简介和概述 http://www.zh.jieli.com/

修改记录

版本更新日期描述
1.12025/1/16更新“FindMy第三方认证”->“MFi工具使用”
更新:● 建立初始版本
● 定义文档格

一、FindMy原理简介和概述

本文档基于701N_watch_release_V3.0.1,使用AC701N Watch Develp v1.1开发板环境进行验证。
FindMy 是苹果公司提供的一种寻找丢失设备的服务和协议。 它可以帮助用户定位并追踪丢失的苹果设备,如 AirTag 和 AirPods 等。 FindMy协议依托庞大的FindMy network 网络,即使本身没有 GPS 模块,也能利用它周围的苹果设备(iPhone, iPad,Mac)来帮助其定位。
image 如上图所示,在FindMy协议中主要可以分为以下角色:
1.拥有者设备(Owner device):
拥有者设备是用户的苹果设备,如iPhone或iPad,通过使用 FindMy应用程序与外设进行连接和配对。拥有者设备与用户的Apple ID关联,并成为FindMy 网络的拥有者设备角色。

2. FindMy服务器(FindMy apple server):

FindMy功能涉及到苹果的服务器,用于处理设备的定位和数据传输。这些服务器经过IOS设备通过网络协议接收来自支持FindMy功能的设备发送的定位数据,并将其提供给用户的FindMy应用程序进行显示和处理。
3.外设(Accessory):
外设是实现了FindMy 网络协议的设备,如AirTag或其他支持 FindMy功能的设备(使用烧录JL FindMy SDK 的芯片的产品)。
外设可以通过与拥有者设备进行BLE协议连接和配对数据交互,加入FindMy 网络。

二、快速上手

本章节主要介绍拿到sdk后如何快速运行FindMy应用功能。

(一)开发环境搭建

1.首先请确保正确的搭建了 Windows 下的第三方集成开发环境CodeBlocks和杰理的编译工具链 jl toolchain。
2.打开FindMy功能 board_ 701n_demo_cfg.h
image

  1. #ifdef CONFIG_APP_BT_ENABLE
  2. #define TRANS_DATA_EN 0
  3. #define SMART_BOX_EN 1
  4. #define OTA_RX_EN 0
  5. #define FindMy_EN 1
  6. #else
  7. #define TRANS_DATA_EN 0
  8. #define SMART_BOX_EN 0
  9. #define OTA_RX_EN 0
  10. #define FindMy_EN 0
  11. #endif

(二)添加苹果授权信息

由于FindMy配件还需要依赖苹果服务器去做功能的运转, 因此需要向苹果申请对应的授权信息才能成功绑定入网,注意第一次烧写一定要修改以下信息,这个只是JL 的示例数据无法正常使用,否则无法配对入网。
授权信息的修改文件位于:ble_fmy_cfg.h

  1. // fmy authentication information
  2. static const uint8_t fmy_serial_number [16] = "xxx " ;
  3. static const uint8_t fmy_product_data[8 ] = {​xxx​} ;//JL
  4. static const char fmy_Server_Encryption_Key[] = "xxx " ;
  5. static const char fmy_Signature_Verification_Key[] = "xxx " ; 6.
  6. #if UUID_TOKEN_IS_BASE64_MODE
  7. static const char fmy_token_uuid_char [] = "xxx " ;
  8. static const char fmy_token_auth_char [] = "xxx " ; 10.
  9. #else
    image
  10. static const uint8_t fmy_token_uuid_hex [16] = {​ [14.](14. xxx)[ xxx](14. xxx)[ ](14. xxx)15. ​} ; 16.
  11. static const uint8_t fmy_token_auth_hex [] = {​ [18.](18. xxx)[ xxx](18. xxx)[ ](18. xxx)19. ​} ;
  12. #endif
    ◆ fmy_serial_number:从apple 申请的序列序列号
    ◆ fmy_product_data:从apple 申请的产品信息
    ◆ fmy_Server_Encryption_Key:从apple 申请的Encryption_Key
    ◆ fmy_Signature_Verification_Key:从apple 申请的Verification_Key
    ◆ fmy_token_uuid_char:从mfi 申请的每个产品授权的uuid
    ◆ fmy_token_auth_char:从mfi 申请的每个产品授权的token
    ◆ fmy_token_uuid_hex:从mfi 申请的每个产品授权的uuid 的十六进制格式
    ◆ fmy_token_auth_hex:从mfi 申请的每个产品授权的token 的十六进制格式
    正确烧写苹果授权数据后,此时之后的固件烧写不会影响苹果的授权数据,并且每次新的绑定后都会进行新的密钥轮转(除非你擦除了所有的flash数据,非必要不要擦除所有flash数据)。

(三)添加杰理授权使用

目前JL FindMy SDK对fmna.a库进行授权的方式进行生产样机个数进行收费,有关授权算法的使用介绍如下:
https://doc.zh-jieli.com/Tools/zh-cn/mass_prod_tools/multi_auth/index.html
并且参考以下步骤完成对授权数据的烧录:
https://doc.zh-jieli.com/Tools/zh-cn/mass_prod_tools/multi_auth/prod-user.html#authroization-id
操作步骤提示如下:
◆ 获取授权Lic: 请在下单采购701N具体芯片型号时,备注“FindMy 多算法授权”,并联系珠海杰理客服。
◆ 修改授权文件名称,并放在cpu 的下载目录(和 download.bat一个路径)才能编译生成带算法授权功能的fw 文件。其中tkn文件的名字应与 isd_config.ini 的配置信息一致 file_au thrunFindMy.tkn,生成完fw文件后使用烧写器进行算法授权信息的烧录
◆ 运行的芯片第一次需要经过 1拖2或者1拖8烧写器(lastest version)烧写授权码;如果你未完成这一步直
接烧写固件,如果fw程序运行出现异常复位或者添加调试信息后出现ASSERT-FAILD: 0 fmna forbidden cfg!!!,说明芯片还没被授权,需要通过烧写器写入授权数据。

  1. // ini文件的最后一段配置
  2. [ FW_ADDITIONAL]
  3. FILE_LIST=(file=file_auth runFindMy .t kn:type=0xec)
    正确烧写杰理授权数据后,此时之后的固件烧写不会影响杰理的授权数据(除非你擦除了所有的flash数据,非必要不要擦除所有flash数据)。

(四)烧录固件

如果杰理授权数据已经烧录到芯片里面,并且你也正确的修改了 sdk 的苹果授权信息,那么现在把FindMy 固件写入,打开 codeblocks工程, ,点击编译烧录,编译烧录教程参考:
https://doc.zh-jieli.com/Tools/zh-
cn/dev_tools/build_download/build_with_codeblocks.html

(五)测试使用

初始化FindMy功能后,默认不打开广播,在手表中进入设置界面,点击FindMy打开FindMy功能,点击开始配对,此时用户可打开IOS终端查找应用->物品->添加其他应用->搜索到设备->命名绑定连接->播放声音
如果成功连接绑定连接,在app上可以成功点击播放声音,那么恭喜你!已经完成了JL FindMy SDK 的上手使用,可以依靠后续章节去开发属于你的FindMy

三、代码架构介绍

(一)FindMy SDK框图介绍

image 上图为JL FindMy SDK 的框图架构,依托杰理的平台和fmna 协议库,用户工程师不需要关注fmna 中FindMy状态机的转换运作原理,也不需要关注FindMy协议是如何和IOS进行加密交握手完成配对,只需要简单的在我们上层留出的接口和杰理SDK原有的功能去适配自己产品上层的交互逻辑和外设即可。

(二)应用层代码文件介绍

手表的sdk都位于bt_fmy这个文件夹,用户的应用开发基本都围绕着这几个文件进行。
fmy功能接口应用层文件架构介绍如图所示:
image

四、FindMy状态介绍

(一)状态介绍

FindMy通过状态机的控制会在不同行为场景中转化为不同的状态,常见的状态如下:
1.等待配对状态(pair mode):
产品还未与苹果设备(例如iPhone或者iPad)配对时,或者产品从FindMy应用中移除配对时,此状态会发送等待配对的蓝牙广播。 为了尽可能快的被苹果设备发现,此状态会高速广播,功耗比较大。

2.配对连接状态(pairing):

产品与苹果设备连接完成配对过程,此状态产品与苹果设备交换大量的数据,功耗也比较大, 因为此状态出现非常低频, 所以此状态对产品续航影响小。

3.高速连接并寻找状态(产品响铃) (high connected):

完成配对的产品,可以在FindMy应用中点击 “播放声音”按钮,可以使产品响铃,来找到产品, 因为此状态出现低频, 所以此状态对产品续航影响小。
4.低速连接状态(low connected):
如果已配对产品与苹果设备重连时,会处于高速连接过程(高速可以理解为产品与苹果设备的数据交互高速很高),如果没有“播放声音”操作,30秒后就会进入低速连接状态。此状态下功耗比较低。如果产品与苹果设备不断开,此状态会一直保持着。

5.慢速广播状态(待机状态) (separated):

如果已配对产品与苹果设备远离,产品与苹果设备蓝牙断开了,此时产品就会发送慢速蓝牙广播,等待下一次重连被寻找,如果用户不尝试“播放声音”功能,产品会一直处于此状态。

(二)FindMy状态回调函数

JL FindMy SDK 中在外部设置定义了回调函数供用户捕捉对应的状态以便用户自定义外设行为(例如配对完成后或者解绑有特殊的铃声)。
ble_fmy_fmna .c
image

fmna_api.h

image

  1. typedef enum {​
  2. FMNA_SM_BOOT = 0 ,
  3. FMNA_SM_PAIR,
  4. FMNA_SM_SEPARATED,
  5. FMNA_SM_NEARBY,
  6. FMNA_SM_CONNECTING,
  7. FMNA_SM_FMNA_PAIR,
  8. FMNA_SM_FMNA_PAIR_COMPLETE, 9. FMNA_SM_CONNECTED,
  9. FMNA_SM_DISCONNECTING, 11. FMNA_SM_NOCHANGE,
  10. FMNA_SM_UNPAIR
  11. ​} FMNA_SM_State_t;

五、apple license和产品信息配置

(一)产品信息配置

ble_fmy .c

  1. static const char FMY_ManufacturerName[64] = "Zhuhai Jieli Technology Co . , Ltd. " ;
  2. static const char FMY_ModelName[64] = " JLtag " ;
  3. static const uint8_t FMY_AccessoryCategory[8 ] = {​ FMY_CATEGORY_Finder, 0 , 0 , 0 , 0 , 0 , 0 , 0 ​} ;
    ◆ FMY_ManufacturerName:公司名称
    ◆ FMY_ModelName:配件名字
    ◆ FMY_AccessoryCategory:产品类型
    ble_fmy_cfg.h
    ◆ TOKEN_ID_PRODUCTION_MODE:选择debug模式还是production
    ◆ FMY_FW_VERSION_MAJOR_NUMBER:固件主要版本
    ◆ FMY_FW_VERSION_MINOR_NUMBER:固件次要版本
    ◆ FMY_FW_VERSION_REVISION_NUMBER:固件修订版本号
    imageimageimage

固件版本需遵循以下规则

The firmware revision string shall use the x [ .y[ .z]] format where :
• <x> is the major version number , required.
• <y> is the minor version number , required if it is non zero or if <z> is present .
• <z> is the revision version number , required if non zero .

(二)apple license信息配置和说明

ble_fmy_cfg.h

image

  1. #define UUID_TOKEN_IS_BASE64_MODE 1 //0--hex, 1--base64 2.
  2. static const uint8_t fmy_serial_number [16] = "" ;
  3. static const uint8_t fmy_product_data[8 ] = {​​};
  4. static const char fmy_Server_Encryption_Key[] = "" ;
  5. static const char fmy_Signature_Verification_Key[] = "" ; 7.
  6. static const char fmy_token_uuid_char [] = "" ;
  7. static const char fmy_token_auth_char [] = "" ;
    ◆ TOKEN_ID_PRODUCTION_MODE:产品模式选择(debug和production)
    ◆ UUID_TOKEN_IS_BASE64_MODE:UUID和TOKEN数据格式(hex: 以十六进制填入,base64: 以base64数据格式填入)
    ◆ fmy_serial_number:从apple 申请的序列序列号
    ◆ fmy_product_data:从apple 申请的产品信息
    ◆ fmy_Server_Encryption_Key:从apple 申请的Encryption_Key
    ◆ fmy_Signature_Verification_Key:从apple 申请的Verification_Key
    ◆ fmy_token_uuid_char:从mfi 申请的每个产品授权的uuid
    ◆ fmy_token_auth_char:从mfi 申请的每个产品授权的token
    有关apple FindMy开发资格申请可参考以下链接:
    https://www.apple.com/newsroom/2021/04/apples-find-my-network-now-offers-new-third-party-finding-experiences/
    授权信息写入函数如下:
    ble_fmy_fmna .c
  8. static int fmy_set_user_infomation(void)
  9. {​
  10. ret_code_t ret = FMY_SUCCESS;
  11. fmna_input_cfg_t input_cfg;
  12. fmna_user_cfg_set_patch (fmy_user_config_path);
  13. fmna_set_product_data(fmy_product_data) ;
    image
  14. fmna_set_crypto_enc_key_config (fmy_Server_Encryption_Key, fmy_Signature_Verification_Key) ;
    image
  15. uint8_t *data_ram = zalloc(16 + 1024) ;
    [11.](11. int)[ int](11. int) len;
  16. if (data_ram) {​
  17. fmna_user_cfg_set_patch (fmy_user_config_path);
  18. ret = fmna_user_cfg_open();
  19. if ( ret == FMY_SUCCESS) {​
  20. if (fmna_user_cfg_is_exist()) {​
  21. log_info ( "exist user_cfg info " ) ;
  22. goto w_end ; 19. ​}
  23. //配置区有效,并且为空才写入
  24. input_cfg .serial_number = (uint8_t * )fmy_serial_number;
  25. input_cfg .uuid = data_ ram;
  26. input_cfg .token = &data_ ram [16] ;
  27. #if UUID_TOKEN_IS_BASE64_MODE
  28. len = uuid_str_to_hex(fmy_token_uuid_char, input_cfg .uuid);
  29. if (len != 16) {​
  30. log_info ( "err uuid char " ) ;
  31. ret = FMY_ERROR_INVALID_DATA;
  32. goto w_end ; 31. ​}
  33. len = fmna_Base64Decode (fmy_token_auth_char, input_cfg .token, 1024) ;
    imageimage
  34. if (len == 0 ) {​
  35. log_info ( "err token char " ) ;
  36. ret = FMY_ERROR_INVALID_DATA;
  37. goto w_end ;
  38. ​}
  39. #else
  40. memcpy(input_cfg .uuid , fmy_token_uuid_hex , 16) ;
  41. if (cpy_len > 1024) {​ 43. ​}
    image [40.](40. int)[ int](40. int) cpy_len = sizeof(fmy_token_auth_hex);
    image
  42. cpy_len = 1024;
  43. memcpy(input_cfg .token, fmy_token_auth_hex, sizeof (fmy_token_auth_he
    imageimage x ));
    image 参考上述流程,如果当前苹果授权数据不正确,可以注释掉这部分逻辑重新烧录新的apple授权数据,但上电更新后,需要重新打开这段代码再烧一次回来避免每次上电后又覆盖之前的apple授权数据信息。
    其中fmy_token_uuid_char和fmy_token_au th_char都将写入在flash 自定义区域,并且在每次配对绑定时会进行轮转,不可随意擦除此区域数据,否则之后将无法成功绑定,起始地址和大小如下(以512k flash平台为例),可在isd_config.ini见。
    isd_config .ini
  44. [RESERVED_EXPAND_CONFIG]
  45. FindMy_LEN=0x2000;
    image
  46. FindMy_ADR=0x1FC000;
    image
  47. FindMy_OPT=1;

(三)fmy功能特性设置

fmna_api.h

  1. //Accessory capability
    image
  2. #define FMY_CAPABILITY_SUPPORTS_PLAY_SOUND BIT(0 ) //Supports play sound
  3. #define FMY_CAPABILITY_SUPPORTS_MOTION_DETECTOR_UT BIT(1 ) //Supports motion detector UT
    image
  4. #define FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_NFC umber lookup by NFC
  5. #define FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_BLE umber lookup by BLE
  6. #define FMY_CAPABILITY_SUPPORTS_FW_UPDATE_SERVICE update service
    BIT(2 ) //Supports serial n
    BIT(3 ) //Supports serial n
    BIT(4 ) //Supports fi rmware
ble_fmy .c

image

  1. //set capability
  2. static const uint8_t FMY_AccessoryCapabilities [4 ] = {​
  3. ( FMY_CAPABILITY_SUPPORTS_PLAY_SOUND 4.
  4. #if FMY_OTA_SUPPORT_CONFIG
  5. | FMY_CAPABILITY_SUPPORTS_FW_UPDATE_SERVICE
  6. #endif 8.
  7. #if TCFG_GSENSOR_ENABLE
  8. | FMY_CAPABILITY_SUPPORTS_MOTION_DETECTOR_UT
  9. #endif 12.
  10. | FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_BLE) , 14. 0x00 , 0x00 , 0x00 15. ​} ;
    AccessoryCapabilities描述了FindMy配件支持的各种功能,默认打开play sound和serial_number_look_up功能, motion_detection和uarp用户可根据产品特性选择打开对应的宏控制,如何控制可见下表:
Characteristic nameData
type
Size(octets)Description
AccessoryUint324Bit 0 : Supports play sound
Characteristic nameData
type
Size(octets)Description
capabilityBit 1 :Supports motion detector UT
Bit 2 : Supports serial number lookup by NFC
Bit 3 : Supports serial number lookup by BLE
Bit 4: Supports firmware update service

●例如我要打开playSound , Supports serial number lookup by BLE , motion detector, firmware update service 功能,则可以将这个数组的第一个字节的前五个bit设置对应的二进制值即可:10101, 由于FindMy产品定位是防丢器,其中motion detection和play sound是否需要取决于产品的体积, 当符合以下所有标准则需要这两项功能:
●The accessory is ≤ 30 cm in at least one dimension.
●The accessory is ≤ 18 cm X 13 cm in two of its dimensions.
●The accessory is ≤ 250 cm3 in three dimensional space.

六、绑定和解绑功能

(一)绑定功能

FindMy绑定功能依赖ble 的gatt交互握手实现,对于小机来说只需要打开开启FindMy和配对广播即可,sdk默认在UI界面已经交互调用以下接口实现,开启配对广播后,打开IOS终端查找应用->物品->添加其他应用->搜索到设备->命名绑定连接->播放声音
FindMy 总开关
int fmy_enable (bool en)
开启配对广播
void fmy_open_close_pairing_mode (bool en)
其中FindMy绑定的握手数据会话流程在sdk 已经实现,用户无需去关注

(二)解绑功能

1.方法 1(推荐):手机打开蓝牙靠近配件,打开查找app-点击物品名字-下拉"移除物品"(这个操作需要手机在旁边开启蓝牙连接才能操作)
2.方法2(这种方法适合配对手机在远程时无法解绑时操作,或者误在手机删除绑定而手表设备未收到通知的情况,两者缺一不可):
3.进行物品单方面解绑复位操作,调用fmy_factory_reset,从机强制解除配对(可以在connect separated nearby 三种状态下
解绑))

4.并在手机上移除物品(会显示连接不上直接强制删掉就可以)这个操作不需要手机在旁边蓝牙连接操作

七、p lay sound功能

(一)play sound功能介绍

play sound功能是fmna 官方定义的近距离查找功能,SDK 中默认打开, 当 IOS终端靠近FindMy设备并且点击FindMy app 的播放声音的按键则可以通过ble连接gatt控制触发这种行为,SDK 中默认的方案使用GPIO驱动蜂鸣器(有源或无源)来实现响声。

(二)play sound配置

ble_fmy_fmna .c

  1. #define SOUND_GPIO_PORT IO_PORTA_00

(三)play sound 驱动函数

ble_fmy_fmna .c
imageimageimage SDK 中只是简单的用定时器做IO翻转达到驱动蜂鸣器发声的功能,用户可以自行修改这部分声音外设逻辑来达到自己的发声效

八、Motion Detection功能

(一)Motion Detection功能介绍

由于FindMy产品定位为防丢器协议, 因此为了如何防止 FindMy设备被用于恶意跟踪,FindMy协议设计了Motion Detection功能, 当别人的设备混入您的随身物品时,并跟踪超过一段时间(设备远离拥有者设备时将会处于待机分离状态),此时设备将会开启加速度传感器g sensor检测设备是否移动, 当移动时,将会发出响声提醒此时你正在被FindMy设备跟踪。JL FindMy SDK 中默认集成了三种加速度传感器来采集加速度数据来完成这个功能。具体代码功能参考ble_fmy_modet.c

(二)g sensor外设配置

默认使用watch sdk 的p 11 sensor hub数据做数据处理检测,p 11 的 sensor hub iic配置参考p 11具体工程
board_ 701n_demo_cfg .h
imageimage

14. #define TCFG_GSENOR_USER_IIC_TYPE IICimage
0 //0:软件IIC 1:硬件
15. #define TCFG_GSENOR_USER_IIC_INDEX0 //IIC 序号
16. #define TCFG_GSENSOR_NAME 称 需要和宏开关匹配image
"p11gsensor " //传感器名
17. #define TCFG_GSENSOR_DETECT_IO(-1) //传感器中断io
image
18. #define TCFG_GSENSOR_ALGO_SILAN
image
(0 ) //士兰微的G-Sensor算法
(三)g sensor调试功能
可以简单使用以下代码进行测试sensor采集检测是否正常
1.intfmy_motion_detection_test(void)
2.{​
3.fmy_motion_detection_init ();
4.sys_timer_add(NULL,fmy_motion_detection, 1000) ;
5.​}

imageimageimageimageimage 如果传感器初始化和采集数据正常,可以尝试移动旋转传感器观察打印信息看是否检测到移动,如未观测到,则需要检测传感器是否工作正常。

(四)UARP功能

JL watch sdk并未接入FindMy 的 UARP功能,具体UARP使用介绍参考AC632N 的FindMy SDK
https://doc.zh-jieli.com/AC63/zh-
cn/master/module_demo/spple/FindMy.html

(五)按键调试

1.用户可以添加button行为来调试产品的一些按键特性

按键行为控制:ble_fmy_fmna .c

  1. void fmy_key_process(u8 key_event)
    image

(六)FindMy 电池相关功能

在配对时, IOS主机将会读取配件的产品信息,其中包括此时产品的电量,用户根据产品电池特性来设置电池类型。
fmna_api.h
image

使用杰理平台的电量检测来获取产品的电量数据

fmna_api.h

  1. typedef enum {​
  2. BAT_STATE_FULL = 0 ,
  3. BAT_STATE_MEDIUM,
  4. BAT_STATE_LOW,
  5. BAT_STATE_CRITICALLY_LOW ,//5 .1 .4 , stop advertising
    image
  6. ​} fmna_bat_state_level_t;
    ble_fmy .c
    image
  7. static void fmy_update_battery_level (void)
  8. {​ 3.
  9. #if TCFG_SYS_LVD_EN
  10. uint8_t bat_level = get_cur_battery_level ();//0~9
  11. log_info ( " read vbat:%d\n " , bat_level); 7.
  12. if (bat_level > 8 ) {​
  13. fydata->battery_level = BAT_STATE_FULL;
  14. ​} else if (bat_level < 2 ) {​
  15. fydata->battery_level = BAT_STATE_CRITICALLY_LOW;
  16. ​} else if (bat_level < 4 ) {​
  17. fydata->battery_level = BAT_STATE_LOW;
  18. ​} else {​
  19. fydata->battery_level = BAT_STATE_MEDIUM; 16. ​}
  20. #else
  21. fydata->battery_level = BAT_STATE_FULL;
  22. #endif 20.
  23. log_info ( "% s,bat_lev= %d " , FUNCTION , fydata->battery_level); 22. ​}

九、FindMy第三方认证

(一)申请流程

杰理作为芯片原厂为FindMy 的 MFI 的生产型会员, 目前sdk 已经通过的FindMy 的所有的软件测试,对于后续用户的产品认证来说,只需要做以下步骤
申请成为mfi 的FindMy会员,拿到属于自家产品的产品 license,按前面章节文档将apple license 和产品信息配置烧录进芯片中
申请mfi会员后,可以拿到FindMy 的内部文档FindMy Network Self-Certification Test Cases R1.6 ,根据此文档对自家产品进行自测试(可见FindMy Certification Assistant User Manual R1.2文档,apple针对FindMy测试设计了一个专门的 app),测试完所有项pass后寄送样机到apple认可的FindMy实验室
FindMy实验室完成确认测试后会有邮件通知
image

(二)MFi工具使用

客户申请到MFi 资格后,需要自己生成证书和密钥并上传到 Mfi 系统上,参考苹果官方文档Software Token Authentication Server Specification R2.1.pdf,上传完后可以使用杰理提供的
MFiTools.exe工具(需向杰理申请)获取token 步骤如下:

1.双击MFiTools.exe 工具启动

image

2.配置好MFi.pem MFi.key 证书

image

3.配置好PPID、 数量,点击获取Token

image 获取到的 Token 文件,将会放到当前目录下的 token 目录。
image 如果出现失败, 请检查失败原因。
image

4.选择 Token 文件, 注册到苹果服务器

选择刚才下载的 Token CSV 文件, 然后点击 Auth Token 按钮
image 如果出现错误, 请检查失败原因
image

5.注册成功

在 authToken 目录下, 会生成一个与 token 目录下对应的 csv 文件, 这个 csv 文件就是授权文件。 文件内容如下:
image 最后将 UUID 和 Base64Token 填写到 SDK 对应位置即可。

十.常用api介绍

已封装以下控制行为函数,可根据产品特性功能使用
●模拟设置配件电量
void fmy_test_switch_battery_level ( u8 bat_val); bat_val – 电池状态值可参考以下结构体
image

  1. typedef enum {​
  2. BAT_STATE_FULL = 0 ,
  3. BAT_STATE_MEDIUM,
  4. BAT_STATE_LOW,
  5. BAT_STATE_CRITICALLY_LOW ,//5 .1 .4 , stop advertising
  6. ​} fmna_bat_state_level_t;

●获得电池电量状态

static int fmy_get_battery_level (void);
●打开/关闭serial number_lookup read
void fmna_paired_serial number_lookup_enable ( u int8_t enable ) enable:true/false打开或关闭
●手动强制解除配对(可以在connect separated nearby三种状态下解绑)
void fmy_factory_reset(void)
●检测是否已经配对
bool fmy_get_pair_state(void)
●FindMy 总开关
int fmy_enable (bool en)

●开启配对广播

void fmy_open_close_pairing_mode (bool en)

十一.常见问题汇总

◆ codeblocks提示tkn文件不存在
image ◆ 没有把tkn文件放到指定路径,需要向杰理申请tkn授权文件
◆ 绑定时显示无法继续
image ◆ 没有使用正确的apple授权信息,或者存储信息错误,需要重新擦写授权信息