#include "systick.h"\r
#include "gpio.h"\r
\r
+#define PRINT_I2C_LOG 0\r
+\r
#define ALIPAY_SEC_I2C_MEMPOOL_SIZE 2048\r
#define ALIPAY_SEC_I2C_SLAVE_ADDR 100\r
\r
if (ret != ERRCODE_SUCC) {\r
MyPrintf("se i2c data write fail! ret=0x%x", ret);\r
}\r
- // MyPrintf("se i2c data write byAddr(0x%x),pData[0](0x%x),wLen(%d),ret=0x%x",byAddr, *pData,wLen,ret);\r
+\r
+#if PRINT_I2C_LOG\r
+ char printbuf[128*3]={0};\r
+ uint8_t buflen = sizeof(printbuf)/3;\r
+ uint8_t printlen = wLen;\r
+ if(wLen > buflen)\r
+ {\r
+ printlen = buflen;\r
+ }\r
+ for( int ii=0;ii<printlen;ii++)\r
+ {\r
+ sprintf(printbuf+(ii*3),"%02X ",pData[ii]);\r
+ }\r
+ MyPrintf("se i2c data write byAddr(0x%x),pData(0x%s),wLen(%d),ret=0x%x",byAddr, printbuf,wLen,ret);\r
+#endif\r
+ \r
return;\r
}\r
\r
if (ret != ERRCODE_SUCC) {\r
MyPrintf("se i2c data read fail! ret=0x%x", ret);\r
}\r
- // MyPrintf("se i2c data read byAddr(0x%x),pData[0](0x%x),wLen(%d),ret=0x%x",byAddr, *pData,wLen,ret);\r
-\r
+#if PRINT_I2C_LOG\r
+ char printbuf[128*3]={0};\r
+ uint8_t buflen = sizeof(printbuf)/3;\r
+ uint8_t printlen = wLen;\r
+ if(wLen > buflen)\r
+ {\r
+ printlen = buflen;\r
+ }\r
+ for( int ii=0;ii<printlen;ii++)\r
+ {\r
+ sprintf(printbuf+(ii*3),"%02X ",pData[ii]);\r
+ }\r
+ MyPrintf("se i2c data read byAddr(0x%x),pData(0x%s),wLen(%d),ret=0x%x",byAddr, printbuf,wLen,ret);\r
+#endif\r
return;\r
}\r
\r
static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_89 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_90.bin";
/* -------------------------------------------------------------------------- */
- static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE = APP_RES_PATH "/alipay/ailipy_logo.bin"; // 支付宝
+ static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE = APP_RES_PATH "/alipay/alipay_logo.bin"; // 支付宝
static constexpr const char *PNG_ALIPAY_BIND_FAILURE = APP_RES_PATH "/alipay/ALIPAY_BIND_FAILURE.bin";
static constexpr const char *PNG_ALIPAY_BIND_SUCCESS = APP_RES_PATH "/alipay/ALIPAY_BIND_SUCCESS.bin";
static constexpr const char *PNG_ALIPAY_LIST_PAY = APP_RES_PATH "/alipay/ALIPAY_LIST_PAY.bin";
#include "hs_private.h"
unsigned char *g_HSI2CBuf;
-unsigned char gHSEncTransSign; //ͨÐÅÊÇ·ñ¼ÓÃÜ£¬0 = Ã÷ÎÄͨÐÅ£¬1 = ¼ÓÃÜͨÐÅ
+unsigned char gHSEncTransSign; //通信是否加密,0 = 明文通信,1 = 加密通信
unsigned char g_DefTransKey[16] = {0x54,0x8E,0x8D,0x7A,0x26,0x35,0x85,0x11,0x25,0x2E,0xF8,0xD6,0xB7,0x17,0xA4,0xE4};
unsigned char g_TransTmpKey[16];
-//CRCµ¥×Ö½Ú¼ÆË㡪¡ªÑ»·×óÒÆ£¬ÏÈÒÆ×î¸ßbit
+//CRC单字节计算——循环左移,先移最高bit
unsigned short LeftShift_CRC(unsigned char byValue, unsigned short *lpwCrc)
{
byValue ^= (unsigned char)(*lpwCrc>>8);
return ;
}
-//Ïàͬ·µ»Ø0£¬²»Í¬·µ»Ø1
+//相同返回0,不同返回1
unsigned char lmemcmp(unsigned char *pBuf1, unsigned char *pBuf2, unsigned short wLen)
{
unsigned short i;
g_HSI2CBuf[6] = 0x00;
ComputeCRC(g_HSI2CBuf, 7, g_HSI2CBuf+7);
HS_IIC_Send_Cmd(g_HSI2CBuf, 9);
- if(0 != HS_IIC_Recv_Resp(ver, 29))//Èç¹û»ñÈ¡³õÖµÃÜÔ¿Ö¸ÁîÖ´ÐÐÒì³££¬¾ÍÓÃ16×Ö½ÚFF½øÐмÓÃÜͨÐÅ
+ if(0 != HS_IIC_Recv_Resp(ver, 29))//如果获取初值密钥指令执行异常,就用16字节FF进行加密通信
{
gHSEncTransSign = 0x01;
lmemset(g_TransTmpKey, 0xFF, 16);
return ;
}
- if((ver[0] == 0x80) && (ver[1] == 0x10) && (ver[18] == 0x81) && (ver[19] == 0x02))//¼òµ¥µÄ¼ì²éÒ»ÏÂÊý¾Ý¸ñʽÄÚÈÝ
+ if((ver[0] == 0x80) && (ver[1] == 0x10) && (ver[18] == 0x81) && (ver[19] == 0x02))//简单的检查一下数据格式内容
{
if((ver[20] != 0x10) || (ver[21] != 0x03))
{
}
}
-//·¢ËÍ: C8 + LEN(2) + { ÃüÁî¼°Êý¾Ý} ^ g_TransTmpKey + CRC
-//·µ»ØFALSE±íʾ½ÓÊÕÖ¸Áî»òÊý¾ÝCRCУÑé´íÎó
+//发送: C8 + LEN(2) + { 命令及数据} ^ g_TransTmpKey + CRC
+//返回FALSE表示接收指令或数据CRC校验错误
void HS_IIC_Send_Cmd(unsigned char *pData, unsigned short wLen)
{
IIC_Master_Send(0xC8, pData, wLen);
}
-//½ÓÊÕ: C9 + 55
-// C9 + LEN(2) + { ÏìÓ¦Êý¾Ý+ ״̬×Ö} ^ g_TransTmpKey + CRC
+//接收: C9 + 55
+// C9 + LEN(2) + { 响应数据+ 状态字} ^ g_TransTmpKey + CRC
-//¹¦ÄÜ: ½ÓÊÕwLen³¤¶ÈµÄÊý¾Ý£¬µ½pData»º³åÇøÖÐ
-//·µ»Ø:
-// 0 ±íʾÕýÈ·½ÓÊÕ
-// 1 ±íʾ½ÓÊÕÊý¾ÝCRC´íÎó
-// 2 ±íʾʵ¼Ê½ÓÊÕÊý¾Ý³¤¶ÈÓò²»ÊÇwLen
-// 3 ±íʾָÁî·µ»Ø×´Ì¬×Ö²»ÊÇ9000
-// 4 ±íʾָÁʱδÏìÓ¦
+//功能: 接收wLen长度的数据,到pData缓冲区中
+//返回:
+// 0 表示正确接收
+// 1 表示接收数据CRC错误
+// 2 表示实际接收数据长度域不是wLen
+// 3 表示指令返回状态字不是9000
+// 4 表示指令超时未响应
unsigned char HS_IIC_Recv_Resp(unsigned char *pData, unsigned short wLen)
{
unsigned short wRspLen;
g_HSI2CBuf[2+i] ^= g_TransTmpKey[i % 16];
}
}
- if((g_HSI2CBuf[2+wLen] != 0x90) || (g_HSI2CBuf[3+wLen] != 0x00))//״̬×Ö
+ if((g_HSI2CBuf[2+wLen] != 0x90) || (g_HSI2CBuf[3+wLen] != 0x00))//状态字
{
pData[0] = g_HSI2CBuf[2+wLen];
pData[1] = g_HSI2CBuf[3+wLen];
extern unsigned char g_TransTmpKey[16];
-//CRCµ¥×Ö½Ú¼ÆË㡪¡ªÑ»·×óÒÆ£¬ÏÈÒÆ×î¸ßbit
+//CRC单字节计算——循环左移,先移最高bit
extern unsigned short LeftShift_CRC(unsigned char byValue, unsigned short *lpwCrc);
extern void ComputeCRC(unsigned char *Data, unsigned short Length, unsigned char *pbyOut);
extern void lmemset(unsigned char *pBuf, unsigned char byVal, unsigned short wLen);
//--------------------------------------------------------------------------
//
-// °æ±¾V2.0.00
+// 版本V2.0.00
//
//--------------------------------------------------------------------------
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö »ñÈ¡¶ÁÈ¡×ʲúµÄÎļþ¾ä±ú
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö fd - ´æ·Å×ʲú¾ä±ú
- ¡ö asset_name - ×ʲúÃû×Ö
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 获取读取资产的文件句柄
+ ○ 接口参数
+ ■ fd - 存放资产句柄
+ ■ asset_name - 资产名字
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_open_asset(void **fd, char asset_name[36])
{
unsigned char tmpBuf[10];
return CSI_ERROR;
}
- *fd = (void*)(tmpBuf[0] * 256 + tmpBuf[1]); //ÎļþµØÖ·
+ *fd = (void*)(tmpBuf[0] * 256 + tmpBuf[1]); //文件地址
return CSI_OK;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö дÈëÖ¸¶¨µÄ×ʲú
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö fd - ´æ·Å×ʲú¾ä±ú
- ¡ö offset - ×ʲúÊý¾ÝÆ«ÒÆ
- ¡ö buffer - ´æ·Å×ʲúÊý¾Ý»º³åÇø
- ¡ö data_len - дÈë×ʲúÊý¾Ý¸öÊý
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 写入指定的资产
+ ○ 接口参数
+ ■ fd - 存放资产句柄
+ ■ offset - 资产数据偏移
+ ■ buffer - 存放资产数据缓冲区
+ ■ data_len - 写入资产数据个数
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_write_asset(void* fd,uint32_t offset,void *data,uint32_t data_len)
{
unsigned int dwBufOff;
return CSI_ERROR;
}
- //Ïȸù¾ÝfdÑ¡ÔñÎļþ
+ //先根据fd选择文件
g_HSI2CBuf[0] = 0x00;
g_HSI2CBuf[1] = 0x07;
g_HSI2CBuf[2] = 0x00;
return CSI_OK;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö ¶Áȡָ¶¨µÄ×ʲú
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö fd - ´æ·Å×ʲú¾ä±ú
- ¡ö offset - ×ʲúÊý¾ÝÆ«ÒÆ
- ¡ö buffer - ´æ·Å×ʲúÊý¾Ý»º³åÇø
- ¡ö data_len - ·µ»Ø¶ÁÈ¡×ʲúÊý¾Ý¸öÊý
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 读取指定的资产
+ ○ 接口参数
+ ■ fd - 存放资产句柄
+ ■ offset - 资产数据偏移
+ ■ buffer - 存放资产数据缓冲区
+ ■ data_len - 返回读取资产数据个数
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_read_asset(void* fd,uint32_t offset,void *buffer,uint32_t* data_len)
{
unsigned int dwOff;
}
- //Ïȸù¾ÝfdÑ¡ÔñÎļþ
+ //先根据fd选择文件
g_HSI2CBuf[0] = 0x00;
g_HSI2CBuf[1] = 0x07;
g_HSI2CBuf[2] = 0x00;
return CSI_OK;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö ¹Ø±ÕÖ¸¶¨µÄ×ʲú¾ä±ú
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö fd - ´æ·Å×ʲú¾ä±ú
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 关闭指定的资产句柄
+ ○ 接口参数
+ ■ fd - 存放资产句柄
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_close_asset(void* fd)
{
unsigned char abySW[2];
return CSI_OK;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö È·ÈÏÖ¸¶¨µÄ×ʲúÊÇ·ñ¿É·ÃÎÊ
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö access-flag - ×ʲú·ÃÎʽá¹û±êʶ: ×ʲú´æÔÚÉèÖÃΪ1£¬×ʲú²»´æÔÚÉèÖÃΪ0
- ¡ö asset_name - ×ʲúÃû×Ö
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 确认指定的资产是否可访问
+ ○ 接口参数
+ ■ access-flag - 资产访问结果标识: 资产存在设置为1,资产不存在设置为0
+ ■ asset_name - 资产名字
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_access_asset(uint32_t *access_flag, char asset_name[36])
{
unsigned char i;
return CSI_OK;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö Çå³ýÖ¸¶¨µÄ×ʲú
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö asset_name - ×ʲúÃû×Ö
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 清除指定的资产
+ ○ 接口参数
+ ■ asset_name - 资产名字
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_remove_asset(char asset_name[36])
{
unsigned char i;
return CSI_OK;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö Çå³ýËùÓÐ×ʲú
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö ÎÞ
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 清除所有资产
+ ○ 接口参数
+ ■ 无
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_clear_assets(void)
{
unsigned char abySW[2];
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö »ñÈ¡°²È«Ð¾Æ¬¹Ì¼þ°æ±¾ºÅ
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö ver - ´æ·Å°æ±¾ºÅbuffer
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 获取安全芯片固件版本号
+ ○ 接口参数
+ ■ ver - 存放版本号buffer
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_get_fw_version(char ver[8])
{
unsigned char i;
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö ϵͳ½øÈëµÍ¹¦ºÄģʽ
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö ctx - ±£´æ½øÈëµÍ¹¦ºÄǰµÄÐèÒª±£´æµÄÉÏÏÂÎÄ
- ¡ð ·µ»ØÖµ
- ¡ö ÎÞ*/
+/*○ 功能描述
+ ■ 系统进入低功耗模式
+ ○ 接口参数
+ ■ ctx - 保存进入低功耗前的需要保存的上下文
+ ○ 返回值
+ ■ 无*/
void csi_enter_lpm(void *ctx)
{
unsigned char abySW[2];
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö ϵͳÍ˳öµÍ¹¦ºÄģʽ
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö ctx - ±£´æ½øÈëµÍ¹¦ºÄǰµÄÐèÒª±£´æµÄÉÏÏÂÎÄ
- ¡ð ·µ»ØÖµ
- ¡ö ÎÞ*/
+/*○ 功能描述
+ ■ 系统退出低功耗模式
+ ○ 接口参数
+ ■ ctx - 保存进入低功耗前的需要保存的上下文
+ ○ 返回值
+ ■ 无*/
void csi_exit_lpm(void *ctx)
{
unsigned char abyVer[8];
}
-/*¡ð ¹¦ÄÜÃèÊö
- ¡ö ·¢ËÍÇëÇó¸øSEÇÒͬ²½´¦ÀíÓû§ÃüÁî
- ¡ð ½Ó¿Ú²ÎÊý
- ¡ö req - ÃüÁîÇëÇóÊý¾Ý°ü
- ¡ö req_len - ÃüÁîÇëÇóÊý¾Ý°ü³¤¶È
- ¡ö rsp - ÃüÁîÏìÓ¦Êý¾Ý°ü
- ¡ö rsp_len - ÃüÁîÏìÓ¦Êý¾Ý°ü³¤¶È
- ¡ð ·µ»ØÖµ
- ¡ö 0±íʾ³É¹¦£¬·Ç0±íʾʧ°Ü*/
+/*○ 功能描述
+ ■ 发送请求给SE且同步处理用户命令
+ ○ 接口参数
+ ■ req - 命令请求数据包
+ ■ req_len - 命令请求数据包长度
+ ■ rsp - 命令响应数据包
+ ■ rsp_len - 命令响应数据包长度
+ ○ 返回值
+ ■ 0表示成功,非0表示失败*/
csi_error_t csi_user_cmd_process_sync(void *req, unsigned int req_len, void *rsp, unsigned int *rsp_len)
{
unsigned short i;
g_HSI2CBuf[2+i] ^= g_TransTmpKey[i % 16];
}
}
- if((g_HSI2CBuf[wRspLen] != 0x90) || (g_HSI2CBuf[1+wRspLen] != 0x00))//״̬×Ö
+ if((g_HSI2CBuf[wRspLen] != 0x90) || (g_HSI2CBuf[1+wRspLen] != 0x00))//状态字
{
return CSI_ERROR;
}
void api_record_test_entry(yunit_test_suite_t *suite)
{
- yunit_add_test_case(suite, "test_get_compile_timestamp", case_test_get_compile_timestamp);
- yunit_add_test_case(suite, "test_get_productmodel", case_test_get_productmodel);
- yunit_add_test_case(suite, "test_memory_align", case_test_memory_align);
- yunit_add_test_case(suite, "test_libc_function", case_test_libc_function);
- yunit_add_test_case(suite, "test_int_endian", case_test_int_endian);
- yunit_add_test_case(suite, "hal_get_credential", case_test_get_credential);
- yunit_add_test_case(suite, "hal_compat_check", case_test_compat_check);
- yunit_add_test_case(suite, "hal_suid_update", case_test_hal_suid_update);
- yunit_add_test_case(suite, "hal_suid_remove", case_test_hal_suid_remove);
- yunit_add_test_case(suite, "hal_mem", case_test_hal_mem);
- yunit_add_test_case(suite, "hal_sha", case_test_hal_sha);
- yunit_add_test_case(suite, "hal_aes", case_test_hal_aes);
- yunit_add_test_case(suite, "hal_asset", case_test_hal_asset);
- yunit_add_test_case(suite, "hal_random_pressure", case_test_hal_random_pressure);
- yunit_add_test_case(suite, "hal_mcu_pressure", case_test_hal_mcu_pressure);
- yunit_add_test_case(suite, "hal_random", case_test_hal_random);
- yunit_add_test_case(suite, "hal_uuid", case_test_hal_uuid);
+ // yunit_add_test_case(suite, "test_get_compile_timestamp", case_test_get_compile_timestamp);
+ // yunit_add_test_case(suite, "test_get_productmodel", case_test_get_productmodel);
+ // yunit_add_test_case(suite, "test_memory_align", case_test_memory_align);
+ // yunit_add_test_case(suite, "test_libc_function", case_test_libc_function);
+ // yunit_add_test_case(suite, "test_int_endian", case_test_int_endian);
+ // yunit_add_test_case(suite, "hal_get_credential", case_test_get_credential);
+ // yunit_add_test_case(suite, "hal_compat_check", case_test_compat_check);
+ // yunit_add_test_case(suite, "hal_suid_update", case_test_hal_suid_update);
+ // yunit_add_test_case(suite, "hal_suid_remove", case_test_hal_suid_remove);
+ // yunit_add_test_case(suite, "hal_mem", case_test_hal_mem);
+ // yunit_add_test_case(suite, "hal_sha", case_test_hal_sha);
+ // yunit_add_test_case(suite, "hal_aes", case_test_hal_aes);
+ // yunit_add_test_case(suite, "hal_asset", case_test_hal_asset);
+ // yunit_add_test_case(suite, "hal_random_pressure", case_test_hal_random_pressure);
+ // yunit_add_test_case(suite, "hal_mcu_pressure", case_test_hal_mcu_pressure);
+ // yunit_add_test_case(suite, "hal_random", case_test_hal_random);
+ // yunit_add_test_case(suite, "hal_uuid", case_test_hal_uuid);
yunit_add_test_case(suite, "hal_sn", case_test_hal_sn);
yunit_add_test_case(suite, "hal_deviceid", case_test_hal_deviceid);
- yunit_add_test_case(suite, "get_fw_version", case_test_get_fw_version);
- yunit_add_test_case(suite, "hal_companyname", case_test_hal_companyname);
- yunit_add_test_case(suite, "hal_timestamp", case_test_hal_timestamp);
- yunit_add_test_case(suite, "hal_prototype", case_test_hal_protoctype);
+ // yunit_add_test_case(suite, "get_fw_version", case_test_get_fw_version);
+ // yunit_add_test_case(suite, "hal_companyname", case_test_hal_companyname);
+ // yunit_add_test_case(suite, "hal_timestamp", case_test_hal_timestamp);
+ // yunit_add_test_case(suite, "hal_prototype", case_test_hal_protoctype);
}