From c0dd7ed53631ea75c8ff8abda7b5327e0f16d057 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 13 Aug 2024 12:58:24 +0800 Subject: [PATCH] fix p cmd full size, simple size parameter bug --- Core/Inc/yunhorn_sts_prd_conf.h | 4 +- Core/Inc/yunhorn_sts_sensors.h | 4 +- Core/Src/yunhorn_sts_process.c | 2 + LoRaWAN/App/lora_app.c | 66 ++++++++++++++++++++++++--------- 4 files changed, 56 insertions(+), 20 deletions(-) diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 46ac3d8..a1a2371 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -255,8 +255,8 @@ #define STS_O7_NVM_CFG_SIZE 32U #define STS_O7_CFG_PCFG_SIZE 20U -#define STS_O7_CFG_CMD_SIZE 30U -#define STS_O7_CFG_CMD_SHORT_LEN 8U +#define STS_O7_CFG_CMD_SIZE 33U +#define STS_O7_CFG_CMD_SHORT_LEN 11U #define STS_MODE_COLOR_CMD_LEN 5U #define sts_mtmcode1 0U diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h index 657d27d..c513944 100644 --- a/Core/Inc/yunhorn_sts_sensors.h +++ b/Core/Inc/yunhorn_sts_sensors.h @@ -50,7 +50,9 @@ enum cfg_cmd_order{ CFG_CMD7, CFG_CMD8, CFG_CMD9, - CFG_CMD10 + CFG_CMD10, CFG_CMD11, CFG_CMD12, CFG_CMD13, CFG_CMD14,CFG_CMD15, CFG_CMD16, CFG_CMD17, CFG_CMD18, CFG_CMD19, + CFG_CMD20, CFG_CMD21, CFG_CMD22, CFG_CMD23, CFG_CMD24,CFG_CMD25, CFG_CMD26, CFG_CMD27, CFG_CMD28, CFG_CMD29, + CFG_CMD30, CFG_CMD31, CFG_CMD32, CFG_CMD33, CFG_CMD34,CFG_CMD35, CFG_CMD36, CFG_CMD37, CFG_CMD38, CFG_CMD39 }; enum p_cmd_order{ P_CMD=0, //'P' //P_MTM_CODE, // #1 diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 5e1c255..aef4e23 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -680,8 +680,10 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void) sts_presence_rss_config.default_inter_frame_deviation_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_DEVIATION]*0.1f); sts_presence_rss_config.default_inter_frame_fast_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF]); sts_presence_rss_config.default_inter_frame_slow_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF]*0.01f); + sts_presence_rss_config.default_intra_frame_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_TIME]); sts_presence_rss_config.default_intra_frame_weight = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_WEIGHT]*0.1f); + sts_presence_rss_config.default_output_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME]*0.1f); //filter parameter diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index e29607c..1f62fa5 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -1445,7 +1445,7 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) //UTIL_TIMER_Start(&STSDurationCheckTimer); OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); - UTIL_TIMER_Create(&YunhornSTSRSSWakeUpTimer, YUNHORN_STS_RSS_WAKEUP_CHECK_TIME, UTIL_TIMER_ONESHOT, OnYunhornSTSOORSSWakeUpTimerEvent, NULL); + UTIL_TIMER_Create(&YunhornSTSRSSWakeUpTimer, YUNHORN_STS_RSS_WAKEUP_CHECK_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSOORSSWakeUpTimerEvent, NULL); UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); STS_SENSOR_Distance_Test_Process(); @@ -1712,8 +1712,9 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) if ((STS_LoRa_WAN_Joined != 0)&&(sts_rss_result_changed_flag==1)) { sts_rss_result_changed_flag = 0; - APP_LOG(TS_OFF,VLEVEL_M,"\r\n Wakeup Timer ======== Send Tx Result=\r\n"); - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + APP_LOG(TS_OFF,VLEVEL_M,"\r\n Wakeup Timer ======== Send Tx Result\r\n"); + SendTxData(); + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); //if ((last_sts_rss_result ==STS_RESULT_NO_MOTION)&& (sts_rss_result==STS_RESULT_MOTION)) { //OnSensor3StateChanged(); @@ -1722,7 +1723,7 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) } - UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); } @@ -2488,22 +2489,48 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) invalid_flag = 1; } - } else if (tlv_buf_size >= CFG_CMD_RSS_FULL_SIZE) + } else if (tlv_buf_size == CFG_CMD_RSS_FULL_SIZE) { invalid_flag = 0; - for (j =0; j < CFG_CMD_RSS_FULL_SIZE; j++) + for (j =0; j < CFG_CMD_RSS_FULL_SIZE-3; j++) { if ((tlv_buf[CFG_CMD4+j] >='0') && (tlv_buf[CFG_CMD4+j]<='9')) { - sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xFF); + //sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xFF); //APP_LOG(TS_OFF,VLEVEL_H,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n",j,tlv_buf[CFG_CMD4+j], j, sts_cfg_nvm.p[j]); } else { invalid_flag = 1; } } + i=0; + sts_cfg_nvm.p[RSS_CFG_START_M] = (uint8_t)((tlv_buf[CFG_CMD4] - 0x30)*10+(tlv_buf[CFG_CMD5] - 0x30)); + sts_cfg_nvm.p[RSS_CFG_LENGTH_M] = (uint8_t)((tlv_buf[CFG_CMD6] - 0x30)*10+(tlv_buf[CFG_CMD7] - 0x30)); + sts_cfg_nvm.p[RSS_CFG_THRESHOLD] = (uint8_t)((tlv_buf[CFG_CMD8] - 0x30)*10+(tlv_buf[CFG_CMD9] - 0x30)); + sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN] = (uint8_t)((tlv_buf[CFG_CMD10]- 0x30)*10+(tlv_buf[CFG_CMD11]- 0x30)); - if (invalid_flag != 1) + sts_cfg_nvm.p[RSS_CFG_PROFILE] = (uint8_t)((tlv_buf[CFG_CMD12]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_RATE_TRACKING] = (uint8_t)((tlv_buf[CFG_CMD13]- 0x30)*10+(tlv_buf[CFG_CMD14]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_RATE_PRESENCE] = (uint8_t)((tlv_buf[CFG_CMD15]- 0x30)*10+(tlv_buf[CFG_CMD16]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_HWAAS] = (uint8_t)((tlv_buf[CFG_CMD17]- 0x30)*10+(tlv_buf[CFG_CMD18]- 0x30)); + + sts_cfg_nvm.p[RSS_CFG_NBR_REMOVED_PC] = (uint8_t)((tlv_buf[CFG_CMD19]- 0x30)); + + sts_cfg_nvm.p[RSS_CFG_ITE_DEVIATION] = (uint8_t)((tlv_buf[CFG_CMD20]- 0x30)*10+(tlv_buf[CFG_CMD21]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF] = (uint8_t)((tlv_buf[CFG_CMD22]- 0x30)*10+(tlv_buf[CFG_CMD23]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF] = (uint8_t)((tlv_buf[CFG_CMD24]- 0x30)*10+(tlv_buf[CFG_CMD25]- 0x30)); + + sts_cfg_nvm.p[RSS_CFG_ITR_TIME] = (uint8_t)((tlv_buf[CFG_CMD26]- 0x30)*10+(tlv_buf[CFG_CMD27]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_ITR_WEIGHT] = (uint8_t)((tlv_buf[CFG_CMD28]- 0x30)*10+(tlv_buf[CFG_CMD29]- 0x30)); + + sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME] = (uint8_t)((tlv_buf[CFG_CMD30]- 0x30)*10+(tlv_buf[CFG_CMD31]- 0x30)); + + sts_cfg_nvm.p[RSS_CFG_DOWNSAMPLING_FACTOR] = (uint8_t)((tlv_buf[CFG_CMD32]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_POWER_MODE] = (uint8_t)((tlv_buf[CFG_CMD33]- 0x30)); + + + + if (invalid_flag == 0) { STS_PRESENCE_SENSOR_NVM_CFG(); @@ -2520,28 +2547,33 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) sts_cfg_nvm.hardware_ver = sts_hardware_ver; sts_cfg_nvm.work_mode = sts_work_mode; sts_cfg_nvm.sts_service_mask = sts_service_mask; - sts_cfg_nvm.length = CFG_CMD_RSS_FULL_SIZE; + //sts_cfg_nvm.length = CFG_CMD_RSS_FULL_SIZE; OnStoreSTSCFGContextRequest(); } - } else if (tlv_buf_size >= CFG_CMD_RSS_SIMPLE_SIZE) + } else if (tlv_buf_size == CFG_CMD_RSS_SIMPLE_SIZE) { //Validation check invalid_flag = 0; - - for (j =0; j < CFG_CMD_RSS_SIMPLE_SIZE; j++) +#if 1 + for (j =0; j < CFG_CMD_RSS_SIMPLE_SIZE-3; j++) { if ((tlv_buf[CFG_CMD4+j] >='0') && (tlv_buf[CFG_CMD4+j]<='9')) { - sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xff); + //sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xff); //APP_LOG(TS_OFF,VLEVEL_H,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n",j,tlv_buf[CFG_CMD4+j], j, sts_cfg_nvm.p[j]); } else { invalid_flag = 1; } } +#endif + sts_cfg_nvm.p[RSS_CFG_START_M] = (uint8_t)((tlv_buf[CFG_CMD4] - 0x30)*10+(tlv_buf[CFG_CMD5] - 0x30)); + sts_cfg_nvm.p[RSS_CFG_LENGTH_M] = (uint8_t)((tlv_buf[CFG_CMD6] - 0x30)*10+(tlv_buf[CFG_CMD7] - 0x30)); + sts_cfg_nvm.p[RSS_CFG_THRESHOLD] = (uint8_t)((tlv_buf[CFG_CMD8] - 0x30)*10+(tlv_buf[CFG_CMD9] - 0x30)); + sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN] = (uint8_t)((tlv_buf[CFG_CMD10]- 0x30)*10+(tlv_buf[CFG_CMD11]- 0x30)); - if (invalid_flag != 1) + if (invalid_flag == 0) { STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(); @@ -2549,7 +2581,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); i = tlv_buf_size; - APP_LOG(TS_OFF, VLEVEL_L, "###### RSS Simple CFG=%s\r\n",(char*)outbuf); + APP_LOG(TS_OFF, VLEVEL_M, "###### RSS Simple CFG=%s\r\n",(char*)outbuf); // Step 2: Save valid config to NVM sts_cfg_nvm.mtmcode1 = sts_mtmcode1; @@ -2558,7 +2590,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) sts_cfg_nvm.hardware_ver = sts_hardware_ver; sts_cfg_nvm.work_mode = sts_work_mode; sts_cfg_nvm.sts_service_mask = sts_service_mask; - sts_cfg_nvm.length = CFG_CMD_RSS_SIMPLE_SIZE; + //sts_cfg_nvm.length = CFG_CMD_RSS_SIMPLE_SIZE; OnStoreSTSCFGContextRequest(); } @@ -2913,7 +2945,7 @@ void OnRestoreSTSCFGContextProcess(void) // if ((sts_version == sts_cfg_nvm.version)&& (NVM_CFG_PARAMETER_SIZE == sts_cfg_nvm.length)) { STS_PRESENCE_SENSOR_Init(); - //STS_PRESENCE_SENSOR_RSS_Init(); + STS_PRESENCE_SENSOR_RSS_Init(); } #endif //STS_SENSOR_Distance_Test_Process();