diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index ff9e86b..ca1243f 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -45,9 +45,11 @@ /* External variables ---------------------------------------------------------*/ /* USER CODE BEGIN EV */ uint8_t outbuf[128]={0x0}; -extern volatile uint8_t *sts_ac_code; +extern volatile uint8_t sts_ac_code[20]; +extern volatile sts_cfg_nvm_t sts_cfg_nvm; extern volatile uint32_t rfac_timer; extern volatile uint32_t STS_TOFScanPeriod_msec, STS_TxPeriod_sec, STS_HeartBeatTimerPeriod_sec; + /* USER CODE END EV */ /* Private typedef -----------------------------------------------------------*/ @@ -364,8 +366,8 @@ static UTIL_TIMER_Object_t YunhornSTSLampBarColorTimer; /** * @brief Tx Timer period */ -static UTIL_TIMER_Time_t TxPeriodicity = APP_TX_DUTYCYCLE; - +//static UTIL_TIMER_Time_t TxPeriodicity = APP_TX_DUTYCYCLE; +UTIL_TIMER_Time_t TxPeriodicity = APP_TX_DUTYCYCLE; /** * @brief Join Timer period */ @@ -499,9 +501,8 @@ void LoRaWAN_Init(void) } /* USER CODE BEGIN LoRaWAN_Init_Last */ - APP_LOG(TS_OFF, VLEVEL_M, "\n reboot config start \n"); - //STS_REBOOT_CONFIG_Init(); + STS_REBOOT_CONFIG_Init(); UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), UTIL_SEQ_RFU, STS_YunhornSTSEventRFAC_Process); @@ -516,7 +517,8 @@ void LoRaWAN_Init(void) UTIL_TIMER_Create(&YunhornSTSWakeUpScanTimer, STS_TOFScanPeriod_msec, UTIL_TIMER_PERIODIC, (void*)OnYunhornSTSWakeUpScanTimerEvent, NULL); UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); - UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); + //UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); + UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_ONESHOT, OnYunhornSTSHeartBeatTimerEvent, NULL); UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); /* USER CODE END LoRaWAN_Init_Last */ @@ -1218,26 +1220,33 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) static void OnYunhornSTSHeartBeatTimerEvent(void *context) { // UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); + UTIL_TIMER_Stop(&YunhornSTSHeartBeatTimer); +#if 1 + uint8_t appHeartBeatDataPort, appHeartBeatBufferSize, appHeartBeatDataBuffer[32]; + appHeartBeatDataPort = YUNHORN_STS_P2_LORA_APP_HTBT_PORT; + appHeartBeatBufferSize = 2; + appHeartBeatDataBuffer[0]=0x80; + appHeartBeatDataBuffer[1]=0x63; //TODO XXX change to battery level % - uint8_t appDataPort, appBufferSize, appDataBuffer[32]; - appDataPort = YUNHORN_STS_P2_LORA_APP_HTBT_PORT; - appBufferSize = 2; - appDataBuffer[0]=0x80; - appDataBuffer[1]=0x63; //TODO XXX change to battery level % - - STS_SENSOR_Upload_Message(appDataPort, appBufferSize, (uint8_t*)appDataBuffer); - - if ((sts_ac_code[0]==0x0) && (sts_ac_code[19]==0x0)) /* simple validation of non-empty ac code */ + STS_SENSOR_Upload_Message(appHeartBeatDataPort, appHeartBeatBufferSize, (uint8_t*)appHeartBeatDataBuffer); +#endif + if (rfac_timer <100) + { + STS_YunhornSTSEventRFAC_Process(); + rfac_timer ++; + } +#if 0 + if ((sts_cfg_nvm.ac[0]==0x0) && (sts_cfg_nvm.ac[19]==0x0)) /* simple validation of non-empty ac code */ { /* RFAC Challenge */ if (rfac_timer < (STS_BURN_IN_RFAC+3)) { rfac_timer ++; } - //STS_YunhornSTSEventRFAC_Process(); - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); + APP_LOG(TS_OFF, VLEVEL_M, "\n Start send RFAC request \n"); + STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, 4, (uint8_t*)"RFAC"); } +#endif UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); - } @@ -1247,25 +1256,25 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) */ void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity) { - /* USER CODE BEGIN OnTxPeriodicityChanged_1 */ + /* USER CODE BEGIN OnYunhornSTSHeartBeatPeriodicityChanged_1 */ - /* USER CODE END OnTxPeriodicityChanged_1 */ + /* USER CODE END OnYunhornSTSHeartBeatPeriodicityChanged_1 */ if (periodicity == 0) { - /* Revert to application default periodicity */ + /* Revert to application default Heat-beat periodicity */ periodicity = 10*APP_TX_DUTYCYCLE; //10*10 000 ms } - /* Update timer periodicity */ + /* Update timer YunhornSTSHeartBeatTimer */ UTIL_TIMER_Stop(&YunhornSTSHeartBeatTimer); UTIL_TIMER_SetPeriod(&YunhornSTSHeartBeatTimer, periodicity); UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); - /* USER CODE BEGIN OnTxPeriodicityChanged_2 */ + /* USER CODE BEGIN OnYunhornSTSHeartBeatPeriodicityChanged_2 */ APP_LOG(TS_OFF, VLEVEL_H,"**************** HeartBeatPeriodicity = %u (sec)\r\n", periodicity/1000 ); - /* USER CODE END OnTxPeriodicityChanged_2 */ + /* USER CODE END OnYunhornSTSHeartBeatPeriodicityChanged_2 */ } /* USER CODE BEGIN PrFD_YunhornSTSWakeUpScanTimerEvents */ diff --git a/STS/Core/Src/sts_cmox_hmac_sha.c b/STS/Core/Src/sts_cmox_hmac_sha.c index 6621d26..be5bcce 100644 --- a/STS/Core/Src/sts_cmox_hmac_sha.c +++ b/STS/Core/Src/sts_cmox_hmac_sha.c @@ -43,6 +43,12 @@ uint32_t sts_hmac_verify(void) ret = sts_hmac_sha1((const uint8_t *) mKey, sizeof(mKey), (const uint8_t*)(uid+4), 4, &hmac_result); ret = memcmp(hmac_result.hmac_tag, (void *)sts_ac_code, sizeof(sts_ac_code)); + APP_LOG(TS_OFF, VLEVEL_M, "\n STS_AC_CODE \n"); + + for (uint8_t k=0; k= STS_BURN_IN_RFAC) && (rfac_timer < (STS_BURN_IN_RFAC +3))) { - if ((rfac_timer >= STS_BURN_IN_RFAC) && (rfac_timer < (STS_BURN_IN_RFAC +3))) - { - APP_LOG(TS_OFF, VLEVEL_M, "\r\n -------------------RFAC Process\r\n"); - STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, 4, (uint8_t*)"RFAC"); - } - if ((rfac_timer > (STS_BURN_IN_RFAC + 2))) - { - APP_LOG(TS_OFF, VLEVEL_M, "\r\n -------------------Verify RFAC Success or Not\r\n"); - if (sts_hmac_verify() != 0) - { - sts_service_mask = STS_SERVICE_MASK_L2; - sts_ac_code[0] = 0x0; - sts_ac_code[19]= 0x0; - } else { - sts_service_mask = STS_SERVICE_MASK_L0; - } - } + APP_LOG(TS_OFF, VLEVEL_M, "\r\n -RFAC Process\r\n"); + STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, 4, (uint8_t*)"RFAC"); } +#if 0 + if ((rfac_timer > (STS_BURN_IN_RFAC + 3))) + { + APP_LOG(TS_OFF, VLEVEL_M, "\r\n -Verify RFAC Success or Not\r\n"); + STS_YunhornAuthenticationCode_Process(); + } +#endif } /* @@ -1105,14 +1099,14 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s periodicity_length = periodicity_length*1000; //translate to 1000ms=1s - + TxPeriodicity = periodicity_length; //OnTxPeriodicityChanged(periodicity_length); #if defined(STS_O6)||defined(STS_O7) OnYunhornSTSHeartBeatPeriodicityChanged(periodicity_length); #endif // 2024-07-31 UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); - UTIL_MEM_cpy_8((void*)outbuf,(void*)parse_buffer,parse_buffer_size); + UTIL_MEM_cpy_8(outbuf,parse_buffer,parse_buffer_size); i = parse_buffer_size; STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); @@ -1151,7 +1145,7 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s STS_HeartBeatTimerPeriod_sec = heart_beat_or_sampling_periodicity_length; #ifdef STS_P2 - //OnYunhornSTSHeartBeatPeriodicityChanged(heart_beat_or_sampling_periodicity_length*1000); + //OnYunhornSTSHeartBeatPeriodicityChanged(STS_HeartBeatTimerPeriod_sec*1000); #endif #ifdef YUNHORN_STS_E0_ENABLED @@ -1342,9 +1336,8 @@ void STS_SENSOR_Upload_Config_Invalid_Message(void) void OnStoreSTSCFGContextRequest(void) { /* USER CODE BEGIN OnStoreContextRequest_1 */ - uint8_t i=0,j=0; -#if 1 + uint8_t nvm_store_value[YUNHORN_STS_MAX_NVM_CFG_SIZE]={0x0}; /* KEEP THIS LOCAL */ sts_cfg_nvm.length = STS_NVM_CFG_SIZE; nvm_store_value[i++] = sts_cfg_nvm.mtmcode1; nvm_store_value[i++] = sts_cfg_nvm.mtmcode2; @@ -1358,14 +1351,11 @@ void OnStoreSTSCFGContextRequest(void) nvm_store_value[i++] = sts_cfg_nvm.sts_service_mask; nvm_store_value[i++] = sts_cfg_nvm.sts_ioc_mask; nvm_store_value[i++] = (uint8_t) STS_CFG_PCFG_SIZE; //sts_cfg_nvm.length; -#endif - for (j = 0; j < STS_CFG_PCFG_SIZE; j++) { nvm_store_value[i++] = (sts_cfg_nvm.p[j]); } -#if 1 nvm_store_value[i++] = sts_cfg_nvm.reserve02; nvm_store_value[i++] = sts_cfg_nvm.reserve03; nvm_store_value[i++] = sts_cfg_nvm.sensor_install_height_in_10cm; @@ -1374,44 +1364,25 @@ void OnStoreSTSCFGContextRequest(void) nvm_store_value[i++] = sts_cfg_nvm.alarm_lamp_bar_flashing_color; nvm_store_value[i++] = sts_cfg_nvm.occupancy_overtime_threshold_in_10min; - + nvm_store_value[i++] = sts_cfg_nvm.motionless_duration_threshold_in_min; + nvm_store_value[i++] = sts_cfg_nvm.unconscious_or_motionless_level_threshold; nvm_store_value[i++] = sts_cfg_nvm.fall_detection_acc_threshold; nvm_store_value[i++] = sts_cfg_nvm.fall_detection_depth_threshold; nvm_store_value[i++] = sts_cfg_nvm.fall_confirm_threshold_in_10sec; - nvm_store_value[i++] = sts_cfg_nvm.occupancy_overtime_threshold_in_10min; -#endif + if ((sts_cfg_nvm.ac[0]!=0x0) && (sts_cfg_nvm.ac[19]!=0x0)) { for (j = 0; j < YUNHORN_STS_AC_CODE_SIZE; j++) { nvm_store_value[i++] = (sts_cfg_nvm.ac[j]); } } - for (uint8_t x=0; x< 64; x++) - { - if (x%16 ==0) APP_LOG(TS_OFF, VLEVEL_M, "\n"); - APP_LOG(TS_OFF, VLEVEL_M, "%02x ",nvm_store_value[x]); - } - - APP_LOG(TS_OFF, VLEVEL_M, "\n STS_CFG_NVM stored to NVM_STORE_VALUE\n"); /* USER CODE END OnStoreContextRequest_1 */ /* store nvm in flash */ - //UTIL_MEM_cpy_8((void*)nvm_store_value, (void *)&sts_cfg_nvm,YUNHORN_STS_MAX_NVM_CFG_SIZE); + if (FLASH_IF_Erase(STS_CONFIG_NVM_BASE_ADDRESS, FLASH_PAGE_SIZE) == FLASH_IF_OK) { - APP_LOG(TS_OFF, VLEVEL_M, "\n ***********FLASH ERASED ***********\n"); - if (FLASH_IF_Write(STS_CONFIG_NVM_BASE_ADDRESS, (const void *)nvm_store_value, YUNHORN_STS_MAX_NVM_CFG_SIZE) == FLASH_IF_OK) - { - APP_LOG(TS_OFF, VLEVEL_M, "\n +++++++++++ FLASH OK +++++++++++++ \n"); - } else { - APP_LOG(TS_OFF, VLEVEL_M, "\n ----------- FLASH ERROR ------------- \n"); - } - - //FLASH_IF_Write(STS_CONFIG_NVM_BASE_ADDRESS, (const void *)&sts_cfg_nvm, YUNHORN_STS_MAX_NVM_CFG_SIZE); - } else { - - APP_LOG(TS_OFF, VLEVEL_M, "\n ***********FLASH NOT ERASED ***********\n"); + FLASH_IF_Write(STS_CONFIG_NVM_BASE_ADDRESS, (const void *)nvm_store_value, YUNHORN_STS_MAX_NVM_CFG_SIZE); } - /* USER CODE BEGIN OnStoreContextRequest_Last */ @@ -1433,16 +1404,10 @@ void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm) void STS_REBOOT_CONFIG_Init(void) { /* USER CODE BEGIN OnRestoreContextRequest_1 */ - + uint8_t nvm_store_value[YUNHORN_STS_MAX_NVM_CFG_SIZE]={0x0}; /* USER CODE END OnRestoreContextRequest_1 */ - //UTIL_MEM_cpy_8((void*)nvm_store_value, (void*)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); FLASH_IF_Read(nvm_store_value, STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); /* USER CODE BEGIN OnRestoreContextRequest_Last */ - for (uint8_t x=0; x< 64; x++) - { - if (x%16 ==0) APP_LOG(TS_OFF, VLEVEL_M, "\n"); - APP_LOG(TS_OFF, VLEVEL_M, "%02x ",nvm_store_value[x]); - } if ((nvm_store_value[NVM_MTM1] != sts_mtmcode1) || (nvm_store_value[NVM_MTM2] != sts_mtmcode2) || (nvm_store_value[NVM_VER] != sts_version)) { @@ -1488,7 +1453,6 @@ void STS_REBOOT_CONFIG_Init(void) sts_cfg_nvm.ac[j] = (uint8_t)nvm_store_value[NVM_AC_CODE_START +j]; } - //UTIL_MEM_cpy_8((void*) &sts_cfg_nvm, (void*)nvm_store_value, YUNHORN_STS_MAX_NVM_CFG_SIZE); } OnRestoreSTSCFGContextProcess(); @@ -1558,7 +1522,7 @@ void OnRestoreSTSCFGContextProcess(void) //{ // sts_ac_code[j] = sts_cfg_nvm.ac[j]; //} - UTIL_MEM_cpy_8((void*)sts_ac_code,(void*)sts_cfg_nvm.ac, YUNHORN_STS_AC_CODE_SIZE); + //UTIL_MEM_cpy_8((void*)sts_ac_code,(void*)sts_cfg_nvm.ac, YUNHORN_STS_AC_CODE_SIZE); #ifdef YUNHORN_STS_O6_ENABLED if ((sts_version == sts_cfg_nvm.version)&& (NVM_CFG_PARAMETER_SIZE == sts_cfg_nvm.length))