本文描述把ADK中Gaia Application部分从Sink Project移植到Source Project中的相关注意事项;
在ADK的Sample Project中,其Source Project部分默认没有提供Gaia实现,需自行移植整合(如当前笔者把ADK4.0(非4.2)Sink Project 中Gaia移植到ADK4.2 Source 中);
移植部分分为:
Source Code移植、PS Key重新设定、相关宏定义以及Project属性设置 等4大部分;
需要留意整合的gaia 默认走的是spp还是rfcomm,然后对应设置相关宏,具体可以参考API GaiaStartService的宏管控;
Note:
ADK3.0的lib gaia,默认走的是frcomm; ---但3.0没有专门的lib upgrade,且OTA使用dfu档。
ADK4.0的lib gaia,默认走的是rfcomm;
ADK4.2的lib gaia,默认走的是SPP;
注意点1,注意宏定义;
ENABLE_GAIA以及ENABLE_UPGRADE,因ADK4.0开始的DFU OTA 需要使用lib upgrade进行管控,所以也需要移植Sink Project中ENABLE_UPGRADE 管控的内容;同时需要在Project属性中增加宏定义以及相关lib:
注意点2,移植后的Source Code 需注意的API有哪些;
API gaia_get_dfu_partition 用于返回指定保存dfu data 的partition index; 当移植到Source Project中后,我们需要自行定义;其值用于API GaiaDfuRequest;基于当前“UpgradeInit -->logicalPartitions”的设置,我们可以直接定义为Partition 0;
API UpgradeInit, 注意其partition table, 这里必须和.ptn文件的定义对应,所以当外部修改.ptn文件和.upd文件时,这里的logicalPartitions也需要同步修改;
可以看到Sink Project sample实现中,其指定了partiton index 0作为DFU 的data 保存;
另外,也需注意API UpgradeInit的第2、3 参数,其是指定lib upgrade 用于保存数据的PS Key以及数据的offset,在Source Project中可以基于实际进行指定;
注意点3:PS Key 设置;
直接在Code中API gaia_get_dfu_partition 指定了DFU Partition Index,这在Sink Project 中也是通过PS Key 设置;在以上API UpgradeInit的第2、3 参数,其实就是PS Key的使用,我们参考了ADK4.0(非4.2)的 Sink Project中的实现, PS Key User49进行数据保存(但需改造Source project API);
Attention:在改造Source Project 的PS Key User49前,我们需要先理解ADK4.0 的Sink Project中PS Key User49的具体组成部分:
以下是某 Project 中PS Key User49的组成:
// PSKEY_USR49
&02bb = 0000 0021 0002 0002 0001 0002 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
前2Byte 表示的是
version_id[0] = PRODUCT_VERSION;
version_id[1] = CONFIG_SET_VERSION;
表现API 是:configManagerSetVersionNo
第3Byte用于保存VM Upgrade transpor,
表现API 是:configManagerSetUpgradeTransportType
和configManagerGetUpgradeTransportType
从第4Byte 开始的16Byte则是通过API UpgradeInit的2、3 参数传送给 lib upgrade 进行数据保存,保存的数据结构体是UPGRADE_LIB_PSKEY;
需注意的是:PS Key 的单位是word ,1word=2Byte;
所以当我们在ADK4.2 的Source Project中沿用PS Key User49时,一定记得改造设置PS Key User49中的data[0]和datap[1] 的API,不然会乱套;Source Project中对应的API 是ps_set_version;
因ADK4.0 Sink Project中的data[0]表示的是PRODUCT_VERSION;
但ADK4.2 Source Project中的data[0]表示的是CONFIG_SET_PRODUCT_TYPE;
所以不能直接把ADK4.0的Sink Project PS key User49 的值直接copy到ADK4.2的Source Project中;注意前2Byte的差异;
Attention:升级的Bin 文档的PSR文件中,一定不能出现PS Key User49;