接上一篇分享,我們將使用工廠數據構建一個示例應用,討論如何工廠數據以及大致介紹如何使用自己的工廠數據的實現。
1
使用工廠數據構建一個示例應用
您可以使用上述步驟手動生成工廠數據集,也可以使用 Telink 平臺構建系統,該系統使用 Kconfig 選項自動創建工廠數據內容。
要啟用自動生成工廠數據集,請轉到示例應用的目錄,并使用以下選項構建示例應用:
westbuild---DCONFIG_CHIP_FACTORY_DATA=y-DCONFIG_CHIP_FACTORY_DATA_BUILD=y
或者,您還可以將 `CONFIG_CHIP_FACTORY_DATA_BUILD=y` 的Kconfig設置添加到示例應用的 `prj.conf` 文件中。
注意,如果這一步遇到了 ModuleNotFoundError 的報錯,請在 connectedhomeip 目錄下執行以下命令更新依賴項后,再次嘗試構建:
.environment/pigweed-venv/bin/python3-mpipinstall-rscripts/setup/requirements.telink.txt
構建成功后會得到開啟了工廠數據分區的應用的固件,和獨立的工廠數據集二進制文件,燒錄時需要分別燒錄它們。
每個工廠數據參數都有一個默認值。這些在Kconfig文件中有描述。要為工廠數據參數設置一個新值,可以通過將其作為構建參數列表提供,或使用交互式 Kconfig 界面來完成。
1
提供工廠數據參數作為生成參數列表
這種提供工廠數據的方式可以與第三方構建腳本一起使用,因為它只使用一個命令??梢酝ㄟ^west命令的附加選項開啟工廠數據功能:
westbuild---DCONFIG_CHIP_FACTORY_DATA=y--DCONFIG_CHIP_FACTORY_DATA_BUILD=y--DCONFIG_CHIP_DEVICE_DISCRIMINATOR=0xF11
或者,也可以將相關的 Kconfig 選項行添加到示例應用的 `prj.conf` 文件中。
2
分開燒錄應用固件和工廠數據集
我們的應用固件和工廠數據集都是二進制 BIN 文件,可以使用 BDT 工具和 Telink burning key 燒錄到設備的Flash指中。
燒錄時使用 Telink BDT 工具的多地址燒錄即可:
選擇 Tool 中的 Multi-address download
此處以 v1.1-branch 分支上的固件為例,工廠數據的偏移值是 `0x104000`:
2
設置工廠數據
將獨立的工廠數據集,合并到示例應用的固件之中的一種方法,是使用在[使用工廠數據構建一個示例應用](#使用工廠數據構建一個示例應用)中描述的Telink平臺構建系統,并使用附加下面的選項構建示例應用 `-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y`:
westbuild--
-DCONFIG_CHIP_FACTORY_DATA=y
-DCONFIG_CHIP_FACTORY_DATA_BUILD=y
-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y
為了更好地理解以上設置項所對應的需求場景,可以參見下面的表格:
您還可以構建一個使用自動生成的新CD、DAC和PAI證書的示例應用。新生成的證書將被自動添加到工廠數據集里。要生成新證書,通過使用附加選項構建示例應用來禁用默認證書 `-DCHIP_FACTORY_DATA_USE_DEFAULT_CERTS=n`:
westbuild--
-DCONFIG_CHIP_FACTORY_DATA=y
-DCONFIG_CHIP_FACTORY_DATA_BUILD=y
-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y
-DCONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS=n
注意:要使用Telink平臺構建系統生成新的證書,您需要系統變量PATH中的 `chip-cert` 可執行文件。要了解如何獲取 `chip-cert`,請參考[構建matter工具](#構建-matter-工具)中的步驟,并將新構建的可執行文件添加到系統變量PATH中。Cmake構建系統將自動找到這個可執行文件。
然后,在示例應用目錄中,可以使用生成的一個二進制固件,便可以同時寫入應用固件和新生成的工廠數據。
3
使用自己的工廠數據實現
上面介紹的工廠數據生成過程僅是對Telink平臺有效的示例應用。根據用途和格式的不同,可以用不同的方式從設備的閃存中讀取工廠數據集。在Telink示例中,工廠數據以 `CBOR` 格式存儲。
還可以創建一個包含任意格式的所有工廠數據組件表的HEX文件,然后實現一個解析器來讀取所有參數并將它們傳遞給提供程序。每個制造商都可以通過在Matter棧中實現解析器和工廠數據訪問器來自行實現工廠數據集。
使用 Telink工廠數據提供程序(FactoryDataProvider.h)和工廠數據解析器(FactoryDataParser.h)作為示例。設備使用工廠數據解析器(FactoryDataParser.h)讀取輸出原始數據,將其解碼并存儲在 `FactoryData` 結構中。工廠數據提供程序(FactoryDataProvider.h)實現使用這個解析器獲取所有需要的工廠數據參數,并將它們提供給Matter核心。
在Telink示例中, `FactoryDataProvider`是一個模板類,繼承自`DeviceAttestationCredentialsProvider`, `CommissionableDataProvider`, 和 `DeviceInstanceInfoProvider` 類。
自定義實現必須繼承這些類并實現它們的功能來從設備的閃存中獲取所有工廠數據集。這些類是虛類,需要由派生類重寫。
要覆蓋繼承的類,請完成以下步驟:
1、覆蓋以下方法:
//=====MembersfunctionsthatimplementtheDeviceAttestationCredentialsProvider
CHIP_ERRORGetCertificationDeclaration(MutableByteSpan&outBuffer)override;
CHIP_ERRORGetFirmwareInformation(MutableByteSpan&out_firmware_info_buffer)override;
CHIP_ERRORGetDeviceAttestationCert(MutableByteSpan&outBuffer)override;
CHIP_ERRORGetProductAttestationIntermediateCert(MutableByteSpan&outBuffer)override;
CHIP_ERRORSignWithDeviceAttestationKey(constByteSpan&messageToSign,MutableByteSpan&outSignBuffer)override;
//=====MembersfunctionsthatimplementtheCommissionableDataProvider
CHIP_ERRORGetSetupDiscriminator(uint16_t&setupDiscriminator)override;
CHIP_ERRORSetSetupDiscriminator(uint16_tsetupDiscriminator)override;
CHIP_ERRORGetSpake2pIterationCount(uint32_t&iterationCount)override;
CHIP_ERRORGetSpake2pSalt(MutableByteSpan&saltBuf)override;
CHIP_ERRORGetSpake2pVerifier(MutableByteSpan&verifierBuf,size_t&verifierLen)override;
CHIP_ERRORGetSetupPasscode(uint32_t&setupPasscode)override;
CHIP_ERRORSetSetupPasscode(uint32_tsetupPasscode)override;
//=====MembersfunctionsthatimplementtheDeviceInstanceInfoProvider
CHIP_ERRORGetVendorName(char*buf,size_tbufSize)override;
CHIP_ERRORGetVendorId(uint16_t&vendorId)override;
CHIP_ERRORGetProductName(char*buf,size_tbufSize)override;
CHIP_ERRORGetProductId(uint16_t&productId)override;
CHIP_ERRORGetSerialNumber(char*buf,size_tbufSize)override;
CHIP_ERRORGetManufacturingDate(uint16_t&year,uint8_t&month,uint8_t&day)override;
CHIP_ERRORGetHardwareVersion(uint16_t&hardwareVersion)override;
CHIP_ERRORGetHardwareVersionString(char*buf,size_tbufSize)override;
CHIP_ERRORGetRotatingDeviceIdUniqueId(MutableByteSpan&uniqueIdSpan)override;
2、將新創建的解析器和提供程序文件移動到項目目錄中。
3、把文件添加到 `CMakeList.txt` 中。
4、禁用工廠數據提供程序的默認實現和Telink實現,以開始使用您自己的工廠數據解析器和提供程序實現。這可以通過以下方式之一來實現:
把Kconfig設置 `CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND=y` 加到 `prj.conf` 文件中。
用以下選項構建一個示例:
westbuild---DCONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND=y
-
FlaSh
+關注
關注
10文章
1562瀏覽量
146818 -
二進制
+關注
關注
2文章
717瀏覽量
41310 -
泰凌微
+關注
關注
5文章
127瀏覽量
10662
原文標題:【技術專欄】Matter工廠數據使用介紹(二)
文章出處:【微信號:telink-semi,微信公眾號:泰凌微電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論