Index: make/YC3121_hal.uvoptx
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/make/YC3121_hal.uvoptx	(revision 742)
+++ /YC3121_SDK/fw/hal/jinghongling/make/YC3121_hal.uvoptx	(working copy)
@@ -215,7 +215,7 @@
 
   <Group>
     <GroupName>lib_sdk</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -735,7 +735,7 @@
 
   <Group>
     <GroupName>HalApp</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
Index: src/HalSecurity/halSecurity.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalSecurity/halSecurity.c	(revision 742)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalSecurity/halSecurity.c	(working copy)
@@ -1,35 +1,19 @@
-/*******************************************************************************
-文件名: halSecurity.c
-描  述: 安全触发接口
-版  权:
-作  者: jqdeng
---------------------------------------------------------------------------------
-备注  : -
---------------------------------------------------------------------------------
-修改记录:
-日期		版本	修改人		修改内容
-2019/11/21  1.0		jqdeng			创建
-*******************************************************************************/
 #include "halSecurity.h"
-#include "yc3121.h"
-#include "yc_timer.h"
-#include "yc_ssc.h"
-#include "yc_rtc.h"
 
 
 //##############################################################################
-//############################################################## 本地函数
+//############################################################## 鏈湴鍑芥暟
 
 
 /*******************************************************************************
-函数功能: 对结构体SECURITY_STATE参数初始化
-输入参数: ptState : 要初始化的结构体指针
-输出参数: 无
-返回值  : 无
+鍑芥暟鍔熻兘: 瀵圭粨鏋勪綋SECURITY_STATE鍙傛暟鍒濆鍖
+杈撳叆鍙傛暟: ptState : 瑕佸垵濮嬪寲鐨勭粨鏋勪綋鎸囬拡
+杈撳嚭鍙傛暟: 鏃
+杩斿洖鍊  : 鏃
 --------------------------------------------------------------------------------
-备注    :
+澶囨敞    :
 --------------------------------------------------------------------------------
-修改信息: 2019.11.27 jqdeng 创建
+淇敼淇℃伅: 2019.11.27 jqdeng 鍒涘缓
 *******************************************************************************/
 static void secStateInit(SECURITY_STATE *ptState)
 {
@@ -41,329 +25,209 @@
 
 
 //##############################################################################
-//############################################################## 外部函数
+//############################################################## 澶栭儴鍑芥暟
 
 
 /*******************************************************************************
-函数功能: 初始化安全配置
-输入参数: 无
-输出参数: 无
-返回值: HAL_OK      成功
-        HAL_ERROR   失败
+鍑芥暟鍔熻兘: 鍒濆鍖栧畨鍏ㄩ厤缃
+杈撳叆鍙傛暟: 鏃
+杈撳嚭鍙傛暟: 鏃
+杩斿洖鍊: HAL_OK      鎴愬姛
+        HAL_ERROR   澶辫触
 --------------------------------------------------------------------------------
-备注  :
+澶囨敞  :
 --------------------------------------------------------------------------------
-修改信息: 2019.11.21 jqdeng 创建
+淇敼淇℃伅: 2019.11.21 jqdeng 鍒涘缓
 *******************************************************************************/
 s32 halSecurityInit(void)
 {
-    TEMPER_InitTypeDef TEMPER_InitStruct;
+    TAMPER_InitTypeDef TAMPER_InitStruct;
+    memset(&TAMPER_InitStruct, 0, sizeof(TAMPER_InitStruct));
 
+    /* 瀹夊叏妯″潡妫娴嬪懆鏈熴佸畨鍏ㄦā鍧椾娇鑳 */
     SSC_Interval(INTERVAL_999MS);
     SSC_LPMSheildingAlarmEnable(ENABLE);
-    SSC_clear_key_enable(ENABLE);
 
-    SSC_Sensor_dur(SENSOR_DUR_8MS);
-    SSC_Sensor_delay(SENEOR_DELAY_1_MS);
+    /* SENSOR妫娴嬫椂闀裤佹娴嬮棬闄愭椂闂撮厤缃 */
+    SSC_SensorDur(SENSOR_DUR_8MS);
+    SSC_SensorDelay(SENEOR_DELAY_4MS);
 
-#ifdef SEC_CFG_VOLTAGE
-    SSC_LPMSensorCmd(LPM_BAT_VDT12_ENABLE, ENABLE);
-	SSC_LPMSensorCmd(LPM_BAT_VDT33H_ENABLE, ENABLE);
-	SSC_LPMSensorCmd(LPM_BAT_VDT33L_ENABLE, ENABLE);
+#ifdef SEC_CFG_TEMPERATURE
+    SSC_LPMSensorCmd(LPM_TEMPERATURE_40_ENABLE,  ENABLE);
+    SSC_LPMSensorCmd(LPM_TEMPERATURE_120_ENABLE, ENABLE);
 #endif
 
-#ifdef SEC_CFG_TEMPERATURE
-	SSC_LPMSensorCmd(LPM_TEMPERATURE_40_ENABLE, ENABLE);
-	SSC_LPMSensorCmd(LPM_TEMPERATURE_120_ENABLE, ENABLE);
+#ifdef SEC_CFG_VOLTAGE
+    /* 鐢靛帇妫娴嬩娇鑳介厤缃 */
+    SSC_LPMSensorCmd(LPM_BAT_VDT12L_ENABLE, ENABLE);
+    SSC_LPMSensorCmd(LPM_BAT_VDT33H_ENABLE, ENABLE);
+    SSC_LPMSensorCmd(LPM_BAT_VDT33L_ENABLE, ENABLE);
 #endif
 
-	TEMPER_InitStruct.TEMPER_GlitchTimes   = TEMPER_GlitchTimes_4ms;
-	TEMPER_InitStruct.TEMPER_PUPU_HoldTime = TEMPER_PUPU_HoldTime_1_2;
-	TEMPER_InitStruct.TEMPER_Port_PullUp   = 0;
+    /* 瀹夊叏闃茬牬鎷哠DIO閰嶇疆 */
+    TAMPER_InitStruct.TAMPER_GlitchTimes   = TAMPER_GlitchTimes_8ms;
+    TAMPER_InitStruct.TAMPER_PUPU_HoldTime = TAMPER_PUPU_HoldTime_16ms;
+
 #ifdef SEC_CFG_SD_DYNAMIC_01
-    //MyPrintf("\r\nhal security start!\n");
-	TEMPER_InitStruct.TEMPER_Port_mode   = TEMPER_Port_S01_active;
-	TEMPER_InitStruct.TEMPER_Port_Enable = TEMPER_Port_S01;
-	SSC_TemperInit(&TEMPER_InitStruct);
-	//MyPrintf("\r\nhal security start!\n");
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S1_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S01_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S01;
 #endif
 
 #ifdef SEC_CFG_SD_DYNAMIC_23
-    TEMPER_InitStruct.TEMPER_Port_mode   = TEMPER_Port_S23_active;
-	TEMPER_InitStruct.TEMPER_Port_Enable = TEMPER_Port_S23;
-	SSC_TemperInit(&TEMPER_InitStruct);
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S3_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S23_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S23;
 #endif
 
 #ifdef SEC_CFG_SD_DYNAMIC_45
-    TEMPER_InitStruct.TEMPER_Port_mode   = TEMPER_Port_S45_active;
-	TEMPER_InitStruct.TEMPER_Port_Enable = TEMPER_Port_S45;
-	SSC_TemperInit(&TEMPER_InitStruct);
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S5_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S45_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S45;
 #endif
 
 #ifdef SEC_CFG_SD_DYNAMIC_67
-    TEMPER_InitStruct.TEMPER_Port_mode   = TEMPER_Port_S67_active;
-	TEMPER_InitStruct.TEMPER_Port_Enable = TEMPER_Port_S67;
-	SSC_TemperInit(&TEMPER_InitStruct);
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S7_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S67_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S67;
 #endif
 
-  return HAL_OK;
-}
-
-/*******************************************************************************
-函数功能: 读取自毁寄存器的触发状态
-输入参数: 无
-输出参数: ptState : 读取到的触发状态
-返回值: HAL_OK      成功
-        HAL_ERROR   失败
---------------------------------------------------------------------------------
-备注  :
---------------------------------------------------------------------------------
-修改信息: 2019.11.21 jqdeng 创建
-*******************************************************************************/
-s32 halSecurityReadState(SECURITY_STATE *ptState)
-{
-	uint32_t ret;
-	//uint8_t a;
-
-    // 清空结构体
-    secStateInit(ptState);
+#if defined(SEC_CFG_SD_STATIC_0) && defined(SEC_CFG_SD_STATIC_1)
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S0_PU | TAMPER_Port_S1_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S01_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S01;
+#endif
 
-	ret = lpm_read(LPM_STATUS);
-	//MyPrintf("LPM_STATUS is %08x\n", ret);
+#if defined(SEC_CFG_SD_STATIC_2) && defined(SEC_CFG_SD_STATIC_3)
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S2_PU | TAMPER_Port_S3_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S23_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S23;
+#endif
 
-#ifdef SEC_CFG_VOLTAGE
-	if ((ret>>16) & 0x1)
-		ptState->vBatPowerOff = 1;
-	else
-		ptState->vBatPowerOff = 0;
-
-	if ((ret>>17) & 0x1)
-		ptState->voltage |= SEC_STATE_HIGH_VOL;
-	if ((ret>>18) & 0x1)
-		ptState->voltage |= SEC_STATE_LOW_VOL;
-	if (1 == !((ret>>17) & 0x3))
-		ptState->voltage = 0;
+#if defined(SEC_CFG_SD_STATIC_4) && defined(SEC_CFG_SD_STATIC_5)
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S4_PU | TAMPER_Port_S5_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S45_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S45;
 #endif
 
-#ifdef SEC_CFG_TEMPERATURE
-	if ((ret>>19) & 0x1)
-		ptState->temperature |= SEC_STATE_HIGH_TEMP;
-	if ((ret>>20) & 0x1)
-		ptState->temperature |= SEC_STATE_LOW_TEMP;
-	if (1 == !((ret>>19) & 0x3))
-		ptState->temperature = 0;
+#if defined(SEC_CFG_SD_STATIC_6) && defined(SEC_CFG_SD_STATIC_7)
+    TAMPER_InitStruct.TAMPER_Port_PullUp   |= TAMPER_Port_S6_PU | TAMPER_Port_S7_PU;
+    TAMPER_InitStruct.TAMPER_Port_mode     |= TAMPER_Port_S67_active;
+    TAMPER_InitStruct.TAMPER_Port_Enable   |= TAMPER_Port_S67;
 #endif
 
+    SSC_TemperInit(&TAMPER_InitStruct);
 
-#ifdef SEC_CFG_SD_DYNAMIC_01
-  if ((ret>>21) & 0x3)
-		ptState->SD |= (SEC_STATE_SD_0|SEC_STATE_SD_1);
-#endif
+    /* BPK澶囦唤鍖鸿嚜鍔ㄦ摝闄や娇鑳介厤缃 */
+    SSC_ClearKeyCMD(ENABLE);
 
-#ifdef SEC_CFG_SD_DYNAMIC_23
-	if ((ret>>23) & 0x3)
-		ptState->SD |= (SEC_STATE_SD_2|SEC_STATE_SD_3);
-#endif
+    return HAL_OK;
+}
 
-#ifdef SEC_CFG_SD_DYNAMIC_45
-	if ((ret>>25) & 0x3)
-		ptState->SD |= (SEC_STATE_SD_4|SEC_STATE_SD_5);
-#endif
+s32 halSecurityReadState(SECURITY_STATE *ptState)
+{
+    s16 ssc_inq = 0, cnt = 0;
+    u32 ssc_key[32];
 
-#ifdef SEC_CFG_SD_DYNAMIC_67
-	if ((ret>>27) & 0x3)
-		ptState->SD |= (SEC_STATE_SD_6|SEC_STATE_SD_7);
-#endif
+    memset(&ssc_key, 0, sizeof(ssc_key));
+
+    ssc_inq = SSC_GetLPMStatusReg();
+
+    /* 楂樹綆娓 鑷瘉鐘舵 */
+    if (ssc_inq & SSC_IT_TEMPERATURE_120)
+        ptState->temperature |= SEC_STATE_HIGH_TEMP;
+    if (ssc_inq & SSC_IT_TEMPERATURE_40)
+        ptState->temperature |= SEC_STATE_LOW_TEMP;
+
+    /* 楂樹綆鍘 鑷瘉鐘舵 */
+    if (ssc_inq & SSC_IT_VDT33H)
+        ptState->voltage |= SEC_STATE_HIGH_VOL;
+    if ((ssc_inq & SSC_IT_VDT33L) || (ssc_inq & SSC_IT_VDT12L))
+        ptState->voltage |= SEC_STATE_LOW_VOL;
+
+    /* 闃茬牬鎷 鑷瘉鐘舵 */
+    if (ssc_inq & SSC_IT_TAMPER_S0)
+        ptState->SD |= SEC_STATE_SD_0;
+    if (ssc_inq & SSC_IT_TAMPER_S1)
+        ptState->SD |= SEC_STATE_SD_1;
+    if (ssc_inq & SSC_IT_TAMPER_S2)
+        ptState->SD |= SEC_STATE_SD_2;
+    if (ssc_inq & SSC_IT_TAMPER_S3)
+        ptState->SD |= SEC_STATE_SD_3;
+    if (ssc_inq & SSC_IT_TAMPER_S4)
+        ptState->SD |= SEC_STATE_SD_4;
+    if (ssc_inq & SSC_IT_TAMPER_S5)
+        ptState->SD |= SEC_STATE_SD_5;
+    if (ssc_inq & SSC_IT_TAMPER_S6)
+        ptState->SD |= SEC_STATE_SD_6;
+    if (ssc_inq & SSC_IT_TAMPER_S7)
+        ptState->SD |= SEC_STATE_SD_7;
+
+    /* 鏂數澶嶄綅 鑷瘉鐘舵 */
+    SSC_LPMKeyWrite(ssc_key, sizeof(ssc_key), 0);
 
-	if (1 == !((ret>>21) & 0xff))
-	{
-		ptState->SD = 0;
+    for (cnt = 0; cnt < 32; cnt++)
+    {
+        if (ssc_key[cnt] == 0)
+            ptState->vBatPowerOff = 1;
+        else
+        {
+            ptState->vBatPowerOff = 0;
+            break;
+        }
     }
 
     return HAL_OK;
 }
 
-/*******************************************************************************
-函数功能: 清除自毁寄存器的触发状态
-输入参数: 无
-输出参数: 无
-返回值: HAL_OK      成功
-        HAL_ERROR   失败
---------------------------------------------------------------------------------
-备注  :
---------------------------------------------------------------------------------
-修改信息: 2019.11.27 jqdeng 创建
-*******************************************************************************/
 s32 halSecurityClearState(void)
 {
-	SSC_LPMSheildingAlarmEnable(DISABLE);
-	SSC_LPMSheildingAlarmEnable(ENABLE);
+    SSC_LPMClearStatusBit();
 
     return HAL_OK;
 }
 
-
-/*******************************************************************************
-函数功能: 写入密钥到电池电源域寄存器
-输入参数: puiData : 要写入的密钥
-          uiDataLen : 写入密钥的长度
-输出参数: 无
-返回值: HAL_OK      写入成功
-        HAL_ERROR   写入失败,
---------------------------------------------------------------------------------
-备注  :
---------------------------------------------------------------------------------
-修改信息: 2019.11.27 jqdeng 创建
-*******************************************************************************/
 s32 halSecurityWriteRam(u32 *puiData, u32 uiDataLen)
 {
-	uint8_t i;
-	uint32_t temp;
-
-	if (uiDataLen > 32)
-		return HAL_ERROR;
-
-	temp = lpm_read(LPM_GPIO_WKHI);
-	temp &= 0xFFEFFFFF;
-	lpm_write(LPM_GPIO_WKHI,temp);
-
-	for (i = 0; i < uiDataLen; i++)
-	{
-		lpm_write(LPM_KEY(i), puiData[i]);
-	}
-
-	temp |= 1<<20;
-	lpm_write(LPM_GPIO_WKHI,temp);
+    SSC_LPMKeyWrite(puiData, uiDataLen, 0);
 
     return HAL_OK;
 }
 
-/*******************************************************************************
-函数功能: 读取电池电源域寄存器的密钥
-输入参数: puiData : 读取的密钥
-          uiDataLen : 要读取密钥的长度
-输出参数: 无
-返回值: HAL_OK      读取成功
-        HAL_ERROR   读取失败
---------------------------------------------------------------------------------
-备注  :
---------------------------------------------------------------------------------
-修改信息: 2019.11.27 jqdeng 创建
-*******************************************************************************/
 s32 halSecurityReadRam(u32 *puiData, u32 uiDataLen)
 {
-	uint8_t i;
-
-	if (uiDataLen > 32)
-		return HAL_ERROR;
-
-	for (i = 0; i < uiDataLen; i++)
-	{
-		puiData[i] = lpm_read(LPM_KEY(i));
-	}
+    SSC_LPMKeyRead(puiData, uiDataLen, 0);
 
     return HAL_OK;
 }
 
-/*******************************************************************************
-函数功能: 安全去初始化(配置成最省电的方式)
-输入参数: 无
-输出参数: 无
-返回值: HAL_OK      成功
-        HAL_ERROR   失败
---------------------------------------------------------------------------------
-备注  :
---------------------------------------------------------------------------------
-修改信息: 2019.11.27 jqdeng 创建
-*******************************************************************************/
 s32 halSecurityDeinit(void)
 {
-	uint32_t ret;
+    TAMPER_InitTypeDef TAMPER_InitStruct;
+    memset(&TAMPER_InitStruct, 0, sizeof(TAMPER_InitStruct));
 
-	ret = lpm_read(LPM_SENSOR);
+    SSC_LPMSheildingAlarmEnable(DISABLE);
 
-	ret &= 0xFFFF0FE0;
-	lpm_write(LPM_SENSOR,ret);
+    TAMPER_InitStruct.TAMPER_Port_mode     = TAMPER_Port_None_active;
+    TAMPER_InitStruct.TAMPER_Port_PullUp   = TAMPER_Port_All_PU;
+    TAMPER_InitStruct.TAMPER_PUPU_HoldTime = TAMPER_PUPU_HoldTime_2ms;
+    TAMPER_InitStruct.TAMPER_GlitchTimes   = TAMPER_GlitchTimes_31_25US;
+    TAMPER_InitStruct.TAMPER_Port_Enable   = 0;
 
-	SSC_LPMSheildingAlarmEnable(DISABLE);
+    SSC_TemperInit(&TAMPER_InitStruct);
 
-	return HAL_OK;
-}
+    SSC_LPMSensorCmd(LPM_SENSOR_ALL_ENABLE, DISABLE);
 
-//##############################################################################
-//############################################################## 测试函数
+    return HAL_OK;
+}
 
-void secPrintfState(SECURITY_STATE *tState)
+void testSecurity(void)
 {
-    halPrintf("tState.SD: <%08x>\n", tState->SD);
-    halPrintf("tState.temperature: <%08x>\n", tState->temperature);
-    halPrintf("tState.voltage: <%08x>\n", tState->voltage);
-    halPrintf("tState.vBatPowerOff: <%08x>\n", tState->vBatPowerOff);
+    halSecurityInit();
 }
 
-void testSecurity_jhl(void)
+void SEC_IRQHandler(void)
 {
-    u32 uiDatain[32] = {0x00000000, 0x11111111, 0x22222222, 0x33333333,
-                        0x44444444,0};
-    u32 uiDataout[32] = {0};
-	SECURITY_STATE tState;
-
-    halPrintf("<test security start>\n");
-
-    //while(1);
-	secStateInit(&tState);
-
-    halSecurityReadState(&tState);
-    secPrintfState(&tState);
-
-    halPrintf("----- halSecurityClearState------\n");
-    halSecurityClearState();
-
-    halMsDelay(500);
-    halSecurityReadState(&tState);
-    secPrintfState(&tState);
-
-	halPrintf("----- halSecurityInit------\n");
-	halSecurityInit();
-    halSecurityWriteRam(uiDatain, 32);
-    halMsDelay(500);
-	halSecurityReadState(&tState);
-    secPrintfState(&tState);
-
-	halSecurityReadRam(uiDataout, 32);
-
-	for (uint8_t i  = 0; i < 32; i++)
-	{
-		halPrintf("key[%d]:%08x    ", i, uiDataout[i]);
-	}
-    halPrintf("\r\n");
-
-    while (1)
-    {
-        halSecurityClearState();
-        halMsDelay(500);
-        halSecurityReadState(&tState);
-
-        if (tState.SD)
-        {
-            halPrintf("tState.SD: <%08x>\n", tState.SD);
-
-            halSecurityDeinit(); // 省电模式
-            halPrintf("------- deinit -------\n");
-            halMsDelay(5000);
-            halSecurityInit(); // 重新初始化测试
-            halPrintf("------- init -------\n");
-        }
-    }
-
-    //halPrintf("<test security end>\n");
+    SSC_LPMClearStatusBit();
+    MyPrintf("SEC_IRQHandler In\n");
 }
-
-
-
-
-
-
-
-
-
