This commit is contained in:
huxi
2025-12-03 11:12:34 +08:00
parent c23ae4f24c
commit bc195654bf
8163 changed files with 3799544 additions and 92 deletions
@@ -0,0 +1,19 @@
#ifndef __AID_CODE_H__
#define __AID_CODE_H__
#include "alipay_common.h"
/**
* 获取帮助码
* @param [out] aid_code 存放数据的指针,建议buffer大小为256
* @param [inout] len_aid_code 帮助码大小,输入时为最大允许读取长度,输出时为实际长度
* @param [in] isSupportBle 若为true,表示支持蓝牙,进入帮助码页面后需要打开蓝牙和3802服务
* @return RV_OK:获取成功
* RV_WRONG_PARAM:参数错误
* RV_UNKNOWN:不应该出现
* RV_JS_ERROR:不应该出现
* RV_BUF_TOO_SHORT:缓存太小
*/
EXTERNC retval_e alipay_get_aid_code(PARAM_OUT char aid_code[256], PARAM_INOUT uint32_t *len_aid_code, PARAM_IN bool isSupportBle);
#endif
@@ -0,0 +1,108 @@
/**
* @file bot_device_api.h
* @brief 设备功能接口头文件
*
* @copyright Copyright (C) 2015-2023 Ant Group Holding Limited
*/
#ifndef __BOT_DEVICE_API_H__
#define __BOT_DEVICE_API_H__
#ifdef __cplusplus
extern "C"
{
#endif
/***********************************************************************************************************************
* Including File
***********************************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stdint.h>
/***********************************************************************************************************************
* Macro Definition
***********************************************************************************************************************/
// ECDSA and SHA256 params
#define BOT_PUBLIC_KEY_EX_LEN 64u
#define BOT_SIGNATURE_EX_LEN 64u
#define BOT_IOT_HASH_VALUE_LEN 32u
/***********************************************************************************************************************
* Enumeration Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Type & Structure Definition
***********************************************************************************************************************/
/* 需要用户自行保存设备状态值,在SDK初始化时,通过参数传入 */
typedef enum _bot_dev_status_e {
BOT_DEV_STATUS_UNREG = 0, /* 设备未注册 */
BOT_DEV_STATUS_REG, /* 设备已注册 */
BOT_DEV_STATUS_INV /* 无效值 */
} bot_dev_status_e;
/* user's trust info struct */
typedef struct _bot_trust_info_t {
uint8_t pubkey[BOT_PUBLIC_KEY_EX_LEN]; // 设备端公钥
bot_dev_status_e dev_status; // 设备注册状态
} bot_trust_info_t; /* 对外数据 */
/***********************************************************************************************************************
* Global Variable Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Fuction Declaration
***********************************************************************************************************************/
/**
* @brief bot_device_version_get: get SDK version for parsing in server.
*
* @param[inout] version version: SDK version
*
* @return 0 on success, otherwise negative error code indicating the cause of error will be returned.
*/
int bot_device_version_get(char *version);
/**
* @brief device init: generate and recover ECDSA kaypair and get ASCON encrypt key (optional).
*
* @param[in] trust_info the device key info: ECDSA keypair and the address to save or recover the key
*
* @return 0 on success, otherwise negative error code indicating the cause of error will be returned.
*/
int bot_device_init(bot_trust_info_t *trust_info);
/**
* @brief device asset register: generate the register data using device primary data.
*
* @param[in] trust_info the device key info: ECDSA keypair and the address to save or recover the key
* @param[out] reg_out pointer to the buffer containing the register data
* @param[out] reg_outlen the length of output data
* @param[in] reg_in pointer to the buffer containing the asset data
* @param[in] inlen the length of input data
*
* @return 0 on success, otherwise negative error code indicating the cause of error will be returned.
*/
int bot_asset_register(bot_trust_info_t *trust_info, uint8_t *reg_out, int *reg_outlen, uint8_t *reg_in, int inlen);
/**
* @brief device data upload: generate the upload data by ECDSA signature.
*
* @param[in] trust_info the device key info: ECDSA keypair and the address to save or recover the key
* @param[out] sig_out the signature of register data
* @param[out] sig_outlen the length of signature
* @param[in] data_in pointer to the buffer containing the asset data
* @param[in] inlen the length of input data
*
* @return 0 on success, otherwise negative error code indicating the cause of error will be returned.
*/
int bot_data_upload(bot_trust_info_t *trust_info, uint8_t *sig_out, int *sig_outlen, uint8_t *data_in, int inlen);
#ifdef __cplusplus
}
#endif
#endif /* __BOT_DEVICE_API_H__ */
@@ -0,0 +1,98 @@
/***********************************************************************************************************************
* Copyright (C) 2021-2022 Alibaba Group Holding Limited
* description: source file of bot hal iot. It defines the function of iot hal adpter interface.
* Customers are requested to implement all functions befor integrating it into your own project.
* author: Bot Team
* date: 2021-11-08
***********************************************************************************************************************/
/***********************************************************************************************************************
* Including File
***********************************************************************************************************************/
#include "bot_adapter.h"
#include "bot_device_api.h"
/***********************************************************************************************************************
* Macro Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Enumeration Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Type & Structure Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Global Variable Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Fuction Declaration
***********************************************************************************************************************/
/***********************************************************************************************************************
* Fuction Implementation
***********************************************************************************************************************/
uint16_t bot_get_vendor(void)
{
return 0x0100;
}
int bot_get_meta_id(void)
{
return 1;
}
#include "app_config.h"
#if TCFG_PAY_ALIOS_ENABLE
#if (TCFG_PAY_ALIOS_WAY_SEL==TCFG_PAY_ALIOS_WAY_T_HEAD)
#ifndef TCFG_PAY_ALIOS_COMPANY_NAME
#error "TCFG_PAY_ALIOS_COMPANY_NAME not define!!!"
#endif
#ifndef TCFG_PAY_ALIOS_PRODUCT_MODEL
#error "TCFG_PAY_ALIOS_PRODUCT_MODEL not define!!!"
#endif
#endif
#else
#endif
int user_assetInfo_get(uint8_t *reg_data)
{
if (reg_data == NULL) {
bot_printf("Input data is NULL\r\n");
return -1;
}
bot_get_timestamp();
bot_asset_reg_t asset_reg = {0};
const char *device_id = bot_get_device_id();
const char *timestamp = bot_get_timestamp();
const uint16_t vendor = bot_get_vendor();
memcpy(asset_reg.device_id, device_id, strlen(device_id));
memcpy(asset_reg.product_time, timestamp, strlen(timestamp));
asset_reg.vendor = vendor;
asset_reg.device_id[strlen(device_id)] = '\0';
asset_reg.product_time[strlen(timestamp)] = '\0';
bot_snprintf((char *)reg_data, BOT_USER_ASSET_STRING_MAX_SIZE, BOT_ASSET_INFO_PRINT_FMT, \
asset_reg.device_id, \
asset_reg.product_time, \
asset_reg.vendor);
bot_printf("asset_data: %s, len is: %d\r\n", reg_data, strlen((const char *)reg_data));
return 0;
}
@@ -0,0 +1,124 @@
/**
* @file bot_adapter.h
* @brief 适配接口头文件
*
* @copyright Copyright (C) 2015-2023 Ant Group Holding Limited
*/
#ifndef __BOT_ADAPTER_H__
#define __BOT_ADAPTER_H__
#ifdef __cplusplus
extern "C"
{
#endif
/***********************************************************************************************************************
* Including File
***********************************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stdint.h>
// #include <stdbool.h>
/***********************************************************************************************************************
* Macro Definition
***********************************************************************************************************************/
#define BOT_USER_ASSET_STRING_MAX_SIZE 600u
#define BOT_ASSET_INFO_PRINT_FMT "{\"DEVICE-ID\":\"%s\", \"PRODUCT-TIME\":\"%s\", \"VENDOR\":\"%04x\"}"
#define DEVICE_ID_MAX_LEN 40u
#define DEVICE_MAC_MAX_LEN 20u
#define DEVICE_TIME_MAX_LEN 14u
/***********************************************************************************************************************
* Enumeration Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Type & Structure Definition
***********************************************************************************************************************/
typedef struct _bot_asset_reg_t {
char device_id[DEVICE_ID_MAX_LEN];
char mac[DEVICE_MAC_MAX_LEN];
char product_time[DEVICE_TIME_MAX_LEN];
uint16_t vendor;
} bot_asset_reg_t;
/***********************************************************************************************************************
* Global Variable Definition
***********************************************************************************************************************/
/***********************************************************************************************************************
* Fuction Declaration
***********************************************************************************************************************/
/**
* @brief Write to the character string
*
* @param[in] str buff to store the data
* @param[in] len length of the buffer
* @param[in] fmt format
*
* @return the number of characters printed
*/
int bot_snprintf(char *str, const int len, const char *fmt, ...);
/**
* @brief Printf log output
*
* @param[in] fmt format
*
* @return void
*/
void bot_printf(const char *fmt, ...);
/**
* @brief get device id
*
* @return the device id string.
*/
const char *bot_get_device_id(void);
/**
* @brief get device's time
*
* @return the timestamp string.
*/
const char *bot_get_timestamp(void);
/**
* @brief get device's asset or register info
*
* @param[out] reg_data the info of the device's asset or register info.
*
* @return 0 on success, otherwise negative error code indicating the cause of error will be returned.
*/
int user_assetInfo_get(uint8_t *reg_data);
/**
* @brief Get meta module type, it must be consistent with the ANT IoT trust platform
*
* @return meta module type.
*/
int bot_get_meta_id(void);
/**
* @brief get device's vendor
*
* @return the vendor number.
*/
uint16_t bot_get_vendor(void);
#ifdef __cplusplus
}
#endif
#endif /* __BOT_ADAPTER_H__ */
@@ -0,0 +1,41 @@
#ifndef __ALIPAY_BIND_H__
#define __ALIPAY_BIND_H__
#include "alipay_common.h"
/**
* 初始化该功能,启动设备或者进入支付宝前调用一次即可,若失败则表示功能不可用,不允许打开支付宝
* @return 0 初始化成功
* 其他value:失败
*/
EXTERNC int alipay_pre_init(void);
/**
* 获取绑定码
* @param [out] result 存放绑定码的指针,建议buffer大小为256
* @param [inout] len_result 绑定码数据大小,传入时为允许的最大长度,传出时为实际的长度
* @return RV_OK 获取成功
* RV_WRONG_PARAM:入惨错误,result为空,或者*len_result为0
* RV_BUF_TOO_SHORT:缓存太小
*/
EXTERNC retval_e alipay_get_binding_code(PARAM_OUT char *result, PARAM_INOUT int *len_result);
/***
* 轮询绑定结果
* @param [out] status 当前的绑定状态
* ALIPAY_STATUS_UNKNOWN 还未开始绑定
* ALIPAY_STATUS_START_BINDING 绑定中
* ALIPAY_STATUS_BINDING_OK 绑定成功
* ALIPAY_STATUS_BINDING_FAIL 绑定失败
* @return
*/
EXTERNC retval_e alipay_query_binding_result(PARAM_OUT binding_status_e *status);
/**
* BLE数据接收的CallBack函数
* @param [in] data 存放数据的指针
* @param [in] len 收到的数据大小
* @return void
*/
EXTERNC void alipay_ble_recv_data_handle(PARAM_IN const uint8_t *data, PARAM_IN uint32_t len);
#endif
@@ -0,0 +1,25 @@
#ifndef __ALIPAY_PAY_H__
#define __ALIPAY_PAY_H__
#include "alipay_common.h"
/**
* 获取支付码,支付码为18或19位纯数字字符串,条形码编码和显示时应注意
* @param [out] paycode 存放支付码的指针,建议缓存大小为20
* @param [inout] len_paycode 支付码数据大小,传入时为paycode buff大小,传出时为实际获取的大小
* @return RV_OK 获取成功
* 其他value:获取失败
*/
EXTERNC retval_e alipay_get_paycode(PARAM_OUT uint8_t *paycode, PARAM_INOUT uint32_t *len_paycode);
/***
* 获取收钱码,仅儿童设备可用,用法及返回值状态同alipay_get_paycode()
* 收钱码为长度40或41的字符串,含有字母和数字
* @param [out] paycode 存放支付码的指针,建议缓存大小为64
* @param [inout] len_paycode 支付码数据大小,传入时为允许的最大大小,传出时为实际获取的大小
* @return RV_OK 获取成功
* 其他value:获取失败
*/
EXTERNC retval_e alipay_get_collectioncode(PARAM_OUT uint8_t *code, PARAM_INOUT uint32_t *len_code);
#endif
@@ -0,0 +1,45 @@
#ifndef __ALIPAY_ACCOUNT_MANAGE_H__
#define __ALIPAY_ACCOUNT_MANAGE_H__
#include "alipay_common.h"
/**
* 获取缓存的绑定状态
* @param [in] void
* @return 返回绑定状态(是否已经绑定)
*/
EXTERNC bool alipay_get_binding_status(void);
/**
* 获取缓存的的logon_ID
* @param [out] id 存放数据的指针,建议buffer大小为128
* @param [inout] len_id数据大小,输入时为最大允许读取长度,输出时为实际长度
* @return RV_OK:读取成功
* RV_NOT_FOUND:未发现该存储项
*/
EXTERNC retval_e alipay_get_logon_ID(PARAM_OUT uint8_t *id, PARAM_INOUT uint32_t *len_id);
/**
* 读取存储的nick_name
* @param [out] nick_name 存放数据的指针,,建议buffer大小为128
* @param [out] len_nick_name数据大小,输入时为最大允许读取长度,输出时为实际长度
* @return RV_OK:读取成功
* RV_NOT_FOUND:未发现该存储项
*/
EXTERNC retval_e alipay_get_nick_name(PARAM_OUT uint8_t *nick_name, PARAM_INOUT uint32_t *len_nick_name);
/**
* 支付功能解绑,清除绑定数据
* @return RV_OK 成功
* 其他value:失败 频繁失败说明芯片可能出错,建议禁止支付功能
*/
EXTERNC retval_e alipay_unbinding(void);
/**
* @brief 清除所有数据,包括安全环境(含加密芯片中的账户维度 + 设备维护的所有数据) 耗时较多
* @return
* RV_OK 成功
* 其他value:失败 频繁失败说明芯片可能出错,建议禁止支付功能
*/
EXTERNC retval_e alipay_reset_all(void);
#endif
@@ -0,0 +1,163 @@
#ifndef __ALIPAY_TRANSIT_H__
#define __ALIPAY_TRANSIT_H__
#include "alipay_common.h"
typedef struct alipay_tansit_CardBaseVO {
char cardNo[40]; //卡号
char cardType[40]; //卡类型
char title[40]; //卡标题
} alipay_tansit_CardBaseVO_t;
typedef enum {
TRANSIT_CARD_LIST_UNBIND = 0, //设备已经在服务端解绑,设备端也需要调用解绑接口
TRANSIT_CARD_LIST_NET_ERROR = 1, //网络错误
TRANSIT_CARD_LIST_OWN_TOO_MANY_CARD = 2, //用户开通了太多乘车码
TRANSIT_CARD_LIST_FUNC_NOT_SUPPPORT = 3, //不支持该功能
TRANSIT_CARD_LIST_DEV_ERROR = 4, //不该出现的错误
TRANSIT_CARD_LIST_BUF_TOO_SHORT = 5, //入参的缓存太小
TRANSIT_CARD_LIST_SUCCESS = 99, //获取成功
} transit_card_list_result_e;
typedef enum {
TRANSIT_CODE_UNBIND = 0, //设备已经在服务端解绑,设备端也需要调用解绑接口
TRANSIT_CODE_NET_ERROR = 1, //网络错误
TRANSIT_CODE_DATA_LIMIT = 2, //因安全原因限制生码
TRANSIT_CODE_NOT_SUPPORT = 3, //该乘车码不支持
TRANSIT_CODE_SERVER_ERROR = 4, //服务端报错
TRANSIT_CODE_DEV_ERROR = 5, //不该出现的错误
TRANSIT_CODE_SUCCESS = 99, //生码或者更新乘车码信息成功
} transit_transit_code_result_e;
/***
* 获取本地的开通状态(成人设备默认开通,无需关心该接口)
* @param [out] activity_flag 开通状态,true表示已经开通,false表示未开通
* @return RV_OK 获取成功
* 其他 获取失败,当未开通处理
**/
EXTERNC retval_e alipay_transit_get_activity_status_offline(PARAM_OUT bool *activity_flag);
/***
* 获取服务端的开通状态(成人设备默认开通,无需关心该接口)
* @param [out] activity_flag 开通状态,true表示已经开通,false表示未开通
* @return RV_OK 获取成功
* 其他 获取失败,当未开通处理
**/
EXTERNC retval_e alipay_transit_get_activity_status_online(PARAM_OUT bool *activity_flag);
/***
* 获取本地缓存的城市列表
* @param [out] card_list 城市列表
* @param [inout] len_card_list 传入时表示允许读取的最大长度,传出时为实际获取的长度
* @param [out] card_num 实际的卡数量,返回值为RV_BUF_TOO_SHORT时,该参数仍有效为实际的卡数量
* @return RV_OK 获取成功
* RV_BUF_TOO_SHORT(15) 传入的buffer太小,需要根据实际的card_num扩大缓存,再次获取
* RV_IO_ERROR(5) 读取失败, 本地不存在,通过联网接口获取
**/
EXTERNC retval_e alipay_transit_get_card_list_offline(PARAM_OUT alipay_tansit_CardBaseVO_t *card_list, PARAM_INOUT uint32_t *len_card_list, PARAM_OUT uint32_t *card_num);
/***
* 获取服务端的城市列表
* @param [out] card_list 城市列表
* @param [inout] len_card_list 传入时表示允许读取的最大长度,传出时为实际获取的长度
* @param [out] card_num 实际的卡数量,返回值为RV_BUF_TOO_SHORT时,该参数仍有效为实际的卡数量
* @return RV_OK 获取成功
* RV_BUF_TOO_SHORT(15) 传入的buffer太小,需要根据实际的card_num扩大缓存,再次获取
* RV_NETWORK_ERROR(7) 网络错误,可以再尝试获取一次
* 其他错误 不应该出现
**/
EXTERNC retval_e alipay_transit_get_card_list_online(PARAM_OUT alipay_tansit_CardBaseVO_t *card_list, PARAM_INOUT uint32_t *len_card_list, PARAM_OUT uint32_t *card_num);
/***
* 更新指定卡的数据
* @param [in]cardNo 卡序号
* [in]cardType 卡类型
* [out] error_message 错误原因,建议缓存大小为256,仅在返回值为RV_SERVER_FAIL_ERROR的时候使用
* [in] len_error_message error_message的buffer大小,建议为256
* @return RV_OK(0) 更新成功
* RV_NETWORK_ERROR(5) 网络错误,可以再尝试更新一次
* 其他错误 不应该出现
**/
EXTERNC retval_e alipay_transit_update_card_data(PARAM_IN char *cardNo, PARAM_IN char *cardType, PARAM_OUT char *error_message, PARAM_IN uint32_t len_error_message);
typedef struct {
bool is_exists; //本地是否有缓存
int32_t expire_timestamp; //过期时间戳
int32_t remain_use_count; //未来12小时内剩余使用次数
} alipay_transit_card_status_t;
EXTERNC retval_e alipay_transit_check_card_status(PARAM_IN char *cardNo, PARAM_IN char *cardType, PARAM_OUT alipay_transit_card_status_t *status);
/***
* 获取指定卡的乘车码码值
* @param [in]cardNo 卡序号
* [in]cardType 卡类型
* [out]transitcode 储存码值的缓存,buffer大小建议为512,字节码,不是字符串
* [inout]len_transitcode 输入时为允许获取的最大长度,输出时为实际获取的长度
* [out] error_message 错误原因,缓存大小建议为256,仅在返回值为RV_SERVER_FAIL_ERROR的时候使用
* [in] len_error_message error_message的buffer大小,建议为256
* @return RV_OK 更新成功
* RV_NETWORK_ERROR(5) 网络错误
* RV_SERVER_FAIL_ERROR 生码失败
* RV_CARD_DATA_LIMITED(40) 由于风控原因生码受限,切换到手机侧使用
* RV_BUF_TOO_SHORT(15) 允许的最大长度小于实际获取的长度,不应该出现
* RV_UNSUPPORTED_CARD(43) 不支持该乘车码,显示“暂不支持,请重试或切换到手机侧使用”
* RV_BUSCARDDATA_INVALID(54) 需要联网更新数据
* 其他错误 不应该出现,显示“暂不支持,请重试或切换到手机侧使用”
**/
EXTERNC retval_e alipay_transit_get_TransitCode(PARAM_IN char *cardNo, PARAM_IN char *cardType, PARAM_OUT uint8_t *transitcode, PARAM_INOUT uint32_t *len_transitcode, PARAM_OUT char *error_message, PARAM_IN uint32_t len_error_message);
/***
* 获取最近一次使用的乘车码码值,断电后会清空
* @param [out]title 卡标题,缓存大小建议为40
* [out]transitcode 储存码值的缓存,buffer大小建议为512,字节码,不是字符串
* [inout]len_transitcode 输入时为允许获取的最大长度,输出时为实际获取的长度
* [out] error_message 错误原因,缓存大小建议为256,仅在返回值为RV_SERVER_FAIL_ERROR的时候使用
* [in] len_error_message error_message的buffer大小,建议为256
* @return RV_OK 获取到默认卡
* RV_BUF_TOO_SHORT15 允许的最大长度小于实际获取的长度,不应该出现
* RV_UNSUPPORTED_CARD43 不支持该乘车码,显示“暂不支持,请重试或切换到手机侧使用”
* RV_BUSCARDDATA_INVALID54 需要联网更新数据
* RV_CARD_DATA_LIMITED(40) 由于风控原因生码受限,切换到手机侧使用
* RV_COMMON_ERROR(56) 显示“暂不支持,请重试或切换到手机侧使用”
* 其他错误 未获取到上一次卡信息
**/
EXTERNC retval_e alipay_transit_get_the_last_transitCode(PARAM_OUT char *title, PARAM_OUT uint8_t *transitcode, PARAM_INOUT uint32_t *len_transitcode, PARAM_OUT char *error_message, PARAM_IN uint32_t len_error_message);
/**
* @brief 获取最近一次使用的乘车码卡信息, 断电后会丢失
* @param card_info
* @return RV_OK 获取到默认卡
* RV_BUF_TOO_SHORT15 允许的最大长度小于实际获取的长度,不应该出现
* RV_UNSUPPORTED_CARD43 不支持该乘车码,显示“暂不支持,请重试或切换到手机侧使用”
* RV_BUSCARDDATA_INVALID54 需要联网更新数据
* RV_CARD_DATA_LIMITED(40) 由于风控原因生码受限,切换到手机侧使用
* RV_COMMON_ERROR(56) 显示“暂不支持,请重试或切换到手机侧使用”
* 其他错误 未获取到上一次卡信息
*/
EXTERNC retval_e alipay_transit_get_the_last_transcode_info(PARAM_OUT alipay_tansit_CardBaseVO_t *card_info);
/**
* 初始化该功能,启动设备或者进入支付宝前调用一次即可,若失败则表示功能不可用,不允许打开支付宝
* @return 0 初始化成功
* 其他value:失败
*/
EXTERNC int alipay_init_transit_module(void);
/**
* @brief 中断网路请求(正在进行中的最近一次)
*/
EXTERNC void alipay_break_rpc();
/**
* @brief 调用alipay_transit_get_card_list_offline和alipay_transit_get_card_list_online之后可以
* 调用此接口查询具体错误原因
*/
EXTERNC void alipay_get_last_card_list_result(transit_card_list_result_e *request_result);
/**
* @brief 调用alipay_transit_update_card_data、alipay_transit_get_the_last_transitCode
* 、alipay_transit_get_TransitCode之后可以调用此接口查询具体错误原因
*/
EXTERNC void alipay_get_last_transit_code_result(transit_transit_code_result_e *request_result);
#endif