alipay使用指南¶
1. 介绍¶
支付宝手表版本提供付款码和乘车码功能,根据芯片差异分为两个版本:
TEE 版本:适用于 52X 系列主控(内置 security)
SE 版本:适用于 56X 系列主控(需外挂 SE 芯片,目前支持宏思电子 HSC32I1 芯片)
2. TEE版本支付宝¶
2.1 适用范围¶
仅适用于52X系列主控,需在bootloader、LCPU及HCPU中开启相关配置。
通过BLE获取乘车码数据,需配套手机APP(可提供SDK及源码,与系统适配;若使用支付宝原生SDK需自行对接)。
2.2 配置说明¶
2.2.1 Bootloader配置¶
开启宏PKG_SIFLI_MBEDTLS_BOOT,配置如下:

2.2.2 LCPU配置¶
依次开启以下配置:
BSP_USING_DMAPM_DEEP_ENABLEUSING_SEC_ENV
配置截图:



注意:
DMA使用DMA1的channel8,不可被其他外设占用
DMA配置代码:
hdma.Instance = DMA1_Channel8; hdma.Init.Request = 0; // 内存到内存模式下无效,设为0 hdma.Init.Direction = DMA_MEMORY_TO_MEMORY; hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma.Init.PeriphInc = DMA_PINC_ENABLE; hdma.Init.MemInc = DMA_MINC_ENABLE; hdma.Init.Mode = DMA_NORMAL; hdma.Init.Priority = DMA_PRIORITY_MEDIUM;
2. TEE 版本配置与使用¶
TEE版本目前只适用于52X系列的主控,需要在bootloader、LCPU及HCPU打开相关配置.
TEE版本是使用的ble获取乘车码数据,手机需要一个APP与手表端进行通信去获取乘车码数据。
此APP我们可提供SDK及源码,此APP的SDK与我们的代码是适配了的可正常获取乘车码。
如果使用付宝原生SDK需要用户自行对接。
bootloader配置¶
在bootloader中需要打开宏PKG_SIFLI_MBEDTLS_BOOT相关配置如下。

lcpu配置¶
lcpu需要依次打开如下配置;BSP_USING_DMA、PM_DEEP_ENABLE和USING_SEC_ENV



其中MDA是使用的DMA1的channel8,需要注意此channel不能被其他外设使用,否则会导致使用异常,还不好查原因。
hdma.Instance = DMA1_Channel8;
hdma.Init.Request = 0; //Request id is useless while memory to memory, just set to 0
hdma.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma.Init.PeriphInc = DMA_PINC_ENABLE;
hdma.Init.MemInc = DMA_MINC_ENABLE;
hdma.Init.Mode = DMA_NORMAL;
hdma.Init.Priority = DMA_PRIORITY_MEDIUM;
2.4 HCPU配置(TEE版本)¶
hcpu需要依次打开如下配置:
USING_SEC_ENVPKG_ALIPAY_TRANSPORT_CODE
配置截图:



说明:
乘车码依赖于付款码,TEE版本目前暂不支持付款码单独使用。
配置项要求:
company name:公司名简称(不要超过16个字符)product model:产品型号(不要超过16个字符)
上述两项需与
alipay_adaptation.h文件中的以下参数一同向支付宝申请:#if defined (PKG_ALIPAY_MODE_TEE) #define ALIPAY_DEVICE_NAME "HAAS-2AX-SIF-55X-" // 设备名前缀 #define ALIPAY_PARA_PK_STR "hj5r4Qos6De" // 产品模型 #define ALIPAY_PARA_PS_STR "DxPlqtjTIc5xqlh5" // #define ALIPAY_PARA_ID2_PK "7KSJA9nSuuu" #endif
2.5 分区及文件夹要求(TEE版本)¶
分区要求:
需存在名为
secure_data的分区:用于保存支付宝绑定信息。需存在名为
upay_safety的分区:用于保存支付宝的ID2数据(需放置于sys分区,确保恢复出厂设置及OTA升级后数据仍保留)。
文件夹要求:
根目录下需创建名为
alipay_transport的文件夹:用于存储从服务器获取的乘车码脚本文件。
注:以上三个名称(secure_data``upay_safety``alipay_transport)不可修改,若修改需同步调整对应代码。
配置截图:


2.6 接口说明(TEE版本)¶
支付宝接口分为两种调用方式:
直接调用:适用于非耗时、栈空间占用小的操作。
临时线程调用:适用于耗时长、栈空间占用大的操作(临时线程执行完成后,通过消息队列将结果发送至UI线程,期间播放等待动画)。
2.6.1 直接调用接口¶
/**
* 获取是否已经绑定
* 此API在进入支付宝界面时调用,判断支付宝是否已经绑定
* @param [in] void
* @return 返回绑定状态 true:已绑定 false:未绑定
*/
bool ali_pay_get_binding_result(void);
/**
* 获取绑定码
* @param [out] binding_str 存放绑定码的指针
* @param [out] len_binding_str 绑定码数据大小,传入时为binding_str buff大小
* @return UPAY_RV_OK: 获取成功
* UPAY_RV_BINDING_STR_TOO_LONG:数据size超过限制,请减少upay_product_model的长度
*/
upay_rc_t ali_pay_get_binding_string(uint8_t *binding_str, uint32_t *len_binding_str);
/**
* 注册ble接收函数,允许接收绑定数据,在展示绑定码之前调用
*/
void alipay_data_subscribe(void);
/**
* 取消注册ble接收函数,不允许接收绑定数据,绑定成功后调用
*/
void alipay_data_unsubscribe(void);
/**
* 轮询绑定结果
* 此API必须在获取绑定码后并且在绑定过程中才能调用
* @param [in] void
* @return 返回绑定状态 @upay_binding_status_e
*/
upay_binding_status_e ali_pay_get_binding_status(void);
/**
* 从Flash读取存储的logon_ID
* @param [out] id 存放数据的指针
* @param [out] len_id数据大小,最大读取不超过传入这个值的数据大小
* @return UPAY_RV_OK:读取成功
* UPAY_RV_NOT_FOUND:未发现该存储项
*/
upay_rc_t ali_pay_get_logon_ID(uint8_t *id, uint32_t *len_id);
/**
* 从Flash读取存储的nick_name
* @param [out] nick_name 存放数据的指针
* @param [out] len_nick_name数据大小,最大读取不超过传入这个值的数据大小
* @return UPAY_RV_OK:读取成功
* UPAY_RV_NOT_FOUND:未发现该存储项
*/
upay_rc_t ali_pay_get_nick_name(uint8_t *nick_name, uint32_t *len_nick_name);
/**
* 获取帮助码
* @param [out] aidCode 存放码串的缓存
* @param [inout] len_aidCode 输入时为允许存放的最大长度;输出时为实际的长度, 建议长度为256
* @return UPAY_RV_OK: 获取成功
* UPAY_RV_BUF_TOO_SHORT:缓存太小,此时输出的len_aidCode,为所需要的大小
* UPAY_RV_JS_ERROR:json错误,可能是堆空间不够
*/
upay_rc_t ali_pay_get_aid_code(char *paycode, uint32_t *len_paycode);
2.6.2 临时线程调用接口说明
/**
* 创建获取乘车码临时线程
* @param [in] parameter->type 根据type调用不同函数
* parameter->data 对应函数需要的参数
* @return true : On success
flase : error
*/
bool transport_processing_thread(lv_transport_data_t *parameter);
注意:
在调用transport_processing_thread函数创建临时线程时,需要调用alipay_take_sema获取信号量,当获取失败时,表示临时线程还在执行上一次的操作,需要等待。
参考支付宝线程类型与对应函数说明
2.7 绑定流程图(TEE版本)¶

2.8 乘车码流程图(TEE版本)¶

3. SE版本alipay¶
se版本需要外挂一个SE芯片,目前仅提供宏思电子的HSC32I1芯片的对接,其他厂商请自行对接。
硬件连接:需连接芯片的IIC、电源、地及RST引脚。
代码路径:
sdk\external\alipay-se目录下参考文档:HSC32I1产品规格书
se版本默认使用PAN连接网络获取数据,若需使用其他方式(如ble代理),请自行对接solution\components\alipay\hal\network\sample\alipay_net_kal.c文件。
3.1 hcpu配置(SE版本)¶
se版本只需打开HCPU的PKG_ALIPAY_TRANSPORT_CODE配置,其他依赖会自动开启:

3.1.1 PAN长连接控制¶
若打开PAN长连接功能:PAN和BT的其他profile会一起自动连接。
若不启用:需用户自行处理连接和断开操作。

3.1.2 SE芯片配置¶
需配置SE芯片使用的IIC(及是否与其他IIC共用)、RST连接引脚:

说明:
company name(公司名简称,≤16字符)和product model(产品型号,≤16字符)需与TEE版本一样,向支付宝申请。
调用流程与TEE版本大致相同,不同之处在函数说明中有标注。