good progress keep stable with time c control

This commit is contained in:
Yunhorn 2025-05-08 20:49:58 +08:00
parent 15595112b0
commit 5da52a8702
5 changed files with 85 additions and 258 deletions

View File

@ -83,7 +83,7 @@ enum RSS_CFG_order{
RSS_CFG_ITR_WEIGHT, // 13
RSS_CFG_OUTPUT_TIME, // 14
RSS_CFG_DOWNSAMPLING_FACTOR, // 15
RSS_CFG_POWER_MODE, // 16
RSS_CFG_TIME_C_THRESHOLD, // 16
RSS_CFG_UPDATE_FLAG, // 17 ADD AT 2025-04-11
RSS_CFG_BG_MOTION_NOISE, // 18
RSS_CFG_SLID_WIN, // 19 THRESHOLD AND WIN
@ -375,7 +375,7 @@ typedef struct STS_OO_RSS_SensorTuneDataTypeDef
float default_receiver_gain; //[45](0.45f) //default 0.9 gain mdB [4]
uint8_t default_config_update_flag; // 1,2,3,4,5
uint8_t default_time_c_threshold; // 4 ++
} STS_OO_RSS_SensorTuneDataTypeDef;

View File

@ -154,7 +154,7 @@ extern uint8_t sts_lamp_bar_color;
acc_detector_presence_handle_t rss_handle=NULL;
acc_detector_presence_result_t rss_result;
volatile float sts_rss_threshold=1.6f, sts_run_start, sts_run_length, sts_run_threshold, sts_run_gain, sts_run_profile, sts_run_f_inter_fast_cutoff,sts_run_f_inter_slow_cutoff;
volatile uint8_t sts_time_c_threshold=20;
/* USER CODE END Includes */
/* External variables ---------------------------------------------------------*/
@ -575,7 +575,8 @@ static void print_current_configuration(acc_detector_presence_configuration_t pr
static uint8_t yes_count=0;
static uint8_t no_count=0;
#define TIME_C 4
// #define TIME_C 4
// replaced by sts_time_c_threshold
static void sts_print_result(acc_detector_presence_result_t result)
{
@ -595,7 +596,7 @@ static void sts_print_result(acc_detector_presence_result_t result)
if(signal>(threshold+1000))
{
LED1_ON;
if(yes_count<TIME_C)
if(yes_count < sts_time_c_threshold)
{
yes_count++;
}
@ -607,7 +608,7 @@ static void sts_print_result(acc_detector_presence_result_t result)
else
{
LED1_OFF;
if(no_count<TIME_C)
if(no_count<sts_time_c_threshold)
{
no_count++;
}
@ -620,7 +621,7 @@ static void sts_print_result(acc_detector_presence_result_t result)
else
{
LED1_ON;
if(yes_count<TIME_C)
if(yes_count<sts_time_c_threshold)
{
yes_count++;
}
@ -633,7 +634,7 @@ static void sts_print_result(acc_detector_presence_result_t result)
else
{
LED1_OFF;
if(no_count<TIME_C)
if(no_count<sts_time_c_threshold)
{
no_count++;
}
@ -647,7 +648,7 @@ static void sts_print_result(acc_detector_presence_result_t result)
// {
// printf("Wait.....");
// }
if(yes_count>(TIME_C-1))
if(yes_count>(sts_time_c_threshold-1))
{
//Out1_ON
//Out2_OFF
@ -655,7 +656,7 @@ static void sts_print_result(acc_detector_presence_result_t result)
APP_LOG(TS_OFF, VLEVEL_M,"Motion (%5d), Distance: %4dmm [start: %4d length: %4d gain: %3d Threshold:%6d Yes:%d No:%d \r\n",
signal,dist,(int)(sts_run_start*1000.0f), (int)(sts_run_length*1000.0f), (int)(sts_run_gain*100.0f), (int)(sts_run_threshold*1000.0f), yes_count, no_count);
}
else if(no_count>(TIME_C-1))
else if(no_count>(sts_time_c_threshold-1))
{
//Out1_OFF
//Out2_ON
@ -836,109 +837,11 @@ int sts_presence_rss_detection_deinit(void)
int sts_presence_rss_fall_rise_detection(void)
{
const acc_hal_t *hal = acc_hal_integration_get_implementation();
if (!acc_rss_activate(hal))
{
APP_LOG(TS_OFF, VLEVEL_H,"Failed to activate RSS\n");
return EXIT_FAILURE;
}
acc_rss_override_sensor_id_check_at_creation(true);
acc_detector_presence_configuration_t presence_configuration = acc_detector_presence_configuration_create();
if (presence_configuration == NULL)
{
APP_LOG(TS_OFF, VLEVEL_H,"Failed to create configuration\n");
acc_rss_deactivate();
return EXIT_FAILURE;
}
if ((sts_rss_config_updated_flag != STS_RSS_CONFIG_NON) || (sts_rss_init_ok != 1))
{
APP_LOG(TS_OFF, VLEVEL_H, "\r\n ------ ---------- rss cfg update flag=%02x \r\n", sts_rss_config_updated_flag);
if (sts_rss_init_ok==0)
{
if (sts_work_mode ==STS_UNI_MODE)
{
sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
}
else if ((sts_work_mode == STS_RSS_MODE) || (sts_work_mode == STS_DUAL_MODE))
{
if (sts_rss_config_updated_flag == STS_RSS_CONFIG_NON)
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
}
//set_default_configuration(presence_configuration);
//APP_LOG(TS_OFF, VLEVEL_M, "\r\n First Time RSS init, update flag=%02x\r\n", sts_rss_config_updated_flag);
//print_current_configuration(presence_configuration);
sts_rss_init_ok = 1;
}
APP_LOG(TS_OFF, VLEVEL_H, "\r\n Update flag=%02x, workmode=%2d \r\n", sts_rss_config_updated_flag, sts_work_mode);
update_configuration_with_type(presence_configuration, sts_rss_config_updated_flag);
#if 0
switch (sts_rss_config_updated_flag)
{
#if 0
case STS_RSS_CONFIG_NON:
APP_LOG(TS_OFF, VLEVEL_H,"\r\n##### YUNHORN STS *** Non *** cfg \n");
// return EXIT_SUCCESS;
break;
#endif
case STS_RSS_CONFIG_DEFAULT:
set_default_configuration(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_H,"\r\n##### YUNHORN STS *** Default *** cfg applied\n");
break;
case STS_RSS_CONFIG_SIMPLE:
sts_rss_set_current_configuration_simple(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_H,"\r\n##### YUNHORN STS *** Simple *** cfg applied\n");
break;
case STS_RSS_CONFIG_FULL:
sts_rss_set_current_configuration_full(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_H,"\r\n######### YUNHORN STS *** FULL *** cfg applied\n");
break;
case STS_RSS_CONFIG_FALL_DETECTION:
set_default_fall_rise_configuration(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_H,"\r\n######### YUNHORN STS *** FALL DETECTION *** cfg applied\n");
break;
default:
break;
}
#endif
// sts_rss_config_updated_flag = STS_RSS_CONFIG_NON; //update finished, set to 0
}
acc_detector_presence_handle_t handle = acc_detector_presence_create(presence_configuration);
if (handle == NULL)
{
APP_LOG(TS_OFF, VLEVEL_H,"Failed to create detector\n");
acc_detector_presence_configuration_destroy(&presence_configuration);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
return EXIT_FAILURE;
}
APP_LOG(TS_OFF, VLEVEL_H,"\r\n============= Start Scan\n");
print_current_configuration(presence_configuration);
acc_detector_presence_configuration_destroy(&presence_configuration);
// BEFORE MERGE FIRST AND SECOND HALF FALL RISE DETECTION
if (!acc_detector_presence_activate(handle))
{
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
return false;
}
bool deactivated = false;
bool success = true;
const int iterations = 1; //(DEFAULT_UPDATE_RATE_PRESENCE);
acc_detector_presence_result_t result;
uint8_t average_result = 0;
float average_distance =0.0f;
float average_score =0.0f;
@ -956,100 +859,13 @@ int sts_presence_rss_fall_rise_detection(void)
//past 10 times of detection with 5 zones from ground to ceiling
//for (k=0; k<5; k++) {motion_in_zone[k]=0;}
if ((sts_work_mode == STS_DUAL_MODE)||(sts_work_mode == STS_RSS_MODE))
{
for (int i = 0; i < (iterations); i++)
{
success = acc_detector_presence_get_next(handle, &result);
success = acc_detector_presence_get_next(handle, &result);
if (!success)
{
APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n");
break;
}
//print_result(result);
sts_print_result(result);
if (!result.data_saturated)
{
//APP_LOG(TS_OFF, VLEVEL_H,"\n%u ", i);
//print_result(result);
if (result.presence_detected)
{
//print_result(result);
average_result++;
average_distance += result.presence_distance;
average_score += result.presence_score;
//detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
//2024-08-05
detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH);
motion_in_zone[detected_zone]++;
// new add 2024-06-18
//detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH);
//if (detected_hs_zone == 0)
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nPresence_Distance=%u \r\n", (int)result.presence_distance*1000.0);
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nHS_ZONE=%u", (int)detected_hs_zone);
//detected_hs_zone = 12 - detected_zone;
detected_hs_zone = (sts_sensor_install_height/1000)/(DEFAULT_ZONE_LENGTH) - detected_zone;
//motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++;
motion_in_hs_zone[detected_hs_zone][motion_detected_count]++;
sts_motion_dataset[motion_count].presence_distance = 1000*result.presence_distance;
sts_motion_dataset[motion_count].presence_score = 1000*result.presence_score;
motion_count++;
}
}
//acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE);
//acc_integration_sleep_ms(10); // --- around 1500 ms in total
//acc_integration_sleep_ms(2); //--- around 1000ms in total
//acc_integration_sleep_ms(1000 / 20);
}
deactivated = acc_detector_presence_deactivate(handle);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n First Half --- Motion Count = %u \r\n", motion_count);
//acc_detector_presence_deactivate(handle);
}
else if ((sts_work_mode == STS_UNI_MODE))
{
// ******** Second Half detection of fall down and rise up
//if (sts_presence_fall_detection == TRUE)
//{
// the following has been updated, no need to re-cofig
#if 0
set_default_fall_rise_configuration(presence_configuration);
if (!acc_detector_presence_reconfigure(&handle, presence_configuration))
{
APP_LOG(TS_OFF, VLEVEL_H,"Failed to reconfigure detector\n");
acc_detector_presence_configuration_destroy(&presence_configuration);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
return EXIT_FAILURE;
}
#endif
// activated already
#if 0
if (!acc_detector_presence_activate(handle))
{
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
return false;
}
#endif
acc_detector_presence_configuration_destroy(&presence_configuration);
// set to full length of iteration
for (int i = 0; i < (iterations); i++)
{
success = acc_detector_presence_get_next(handle, &result);
success = acc_detector_presence_get_next(rss_handle, &rss_result);
if (!success)
{
APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n");
@ -1057,19 +873,19 @@ int sts_presence_rss_fall_rise_detection(void)
}
if (!result.data_saturated)
if (!rss_result.data_saturated)
{
//APP_LOG(TS_OFF, VLEVEL_L,"\n%u ", i);
//print_result(result);
if ((result.presence_detected) && (result.presence_score > DEFAULT_THRESHOLD))
if ((rss_result.presence_detected) && (rss_result.presence_score > DEFAULT_THRESHOLD))
{
//print_result(result);
average_result++;
average_distance += result.presence_distance;
average_score += result.presence_score;
//detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
average_distance += rss_result.presence_distance;
average_score += rss_result.presence_score;
// 2024-08-05
detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH);
detected_zone = (uint16_t)((float)(rss_result.presence_distance) / (float)DEFAULT_ZONE_LENGTH);
motion_in_zone[detected_zone]++;
// new add 2024-06-18
@ -1082,8 +898,8 @@ int sts_presence_rss_fall_rise_detection(void)
//motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++;
motion_in_hs_zone[detected_hs_zone][motion_detected_count]++;
sts_motion_dataset[motion_count].presence_distance = 1000*result.presence_distance;
sts_motion_dataset[motion_count].presence_score = 1000*result.presence_score;
sts_motion_dataset[motion_count].presence_distance = 1000*rss_result.presence_distance;
sts_motion_dataset[motion_count].presence_score = 1000*rss_result.presence_score;
motion_count++;
@ -1095,9 +911,6 @@ int sts_presence_rss_fall_rise_detection(void)
//acc_integration_sleep_ms(10); //--- around 1500 ms in total
acc_integration_sleep_ms(2); //--- around 1000ms in total
}
deactivated = acc_detector_presence_deactivate(handle);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n Second Half --- Motion Count Sum to = %u \r\n", motion_count);
@ -1116,25 +929,6 @@ int sts_presence_rss_fall_rise_detection(void)
}
average_distance = (float)(1000.0f*average_distance)/(float)average_result; // in meters
average_score = (float)(1000.0f*average_score)/(float)average_result;
sts_presence_rss_distance = average_distance;
sts_presence_rss_score = average_score;
//STS_Yunhorn_DistanceStandardDeviation();
// APP_LOG(TS_OFF, VLEVEL_H, "\r\nAverage Distance: %d (mm) Score: %d Singularity: %d \r\n",(int)average_distance, (int)average_score, sts_presence_singularity);
// uint8_t pre_sts_rss_result = (average_result > (DEFAULT_UPDATE_RATE_PRESENCE/5))? 1: 0;
// sts_rss_result=STS_RSS_Filter(pre_sts_rss_result);
//APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Result=%d Distance=%d, Score=%d MotionCount=%d \r\n",
// (int)average_result, (int)average_distance, (int)average_score, (int)motion_count);
// sts_rss_result = (average_result > (DEFAULT_UPDATE_RATE_PRESENCE/5))? 1: 0;
// sts_rss_result = (average_result > 0)? 1: 0;
uint8_t pre_sts_rss_result=0;
if (sts_work_mode == STS_UNI_MODE) {
@ -1148,24 +942,8 @@ int sts_presence_rss_fall_rise_detection(void)
//STS_RSS_Filter_ring();
STS_RSS_Filter(pre_sts_rss_result);
//else {
// sts_rss_result = 0;
// }
// APP_LOG(TS_OFF, VLEVEL_M, "\r\nMotionCount=%4d Overall Motion=%d \r\n", (int)motion_count, (int)sts_rss_result);
//APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Result=%d Distance=%d, Score=%d MotionCount=%d ---Overall Result=%d \r\n",
// (int)average_result, (int)average_distance, (int)average_score, (int)motion_count, (int)sts_rss_result);
APP_LOG(TS_OFF, VLEVEL_M, "\r\nMotion Status: %d %d (mm) %d singularity: %d Rated-> %d \r\n",(int)average_result, (int)average_distance, (int)average_score, (int)sts_presence_singularity, (int)sts_rss_result);
#if 0
if (sts_rss_result) //if (average_score !=0) //if (sts_rss_result)
{
APP_LOG(TS_OFF, VLEVEL_L,"\r\n######## MotionLevel=%4u (level) Gain=%2u (%) Start=%4u (mm) Length=%4u (mm)\r\n",
(int)(1000.0f*sts_presence_rss_config.default_threshold),(int)(100.0f*sts_presence_rss_config.default_receiver_gain),
(int)(1000.0f*sts_presence_rss_config.default_start_m), (int)(1000.0f*sts_presence_rss_config.default_length_m));
APP_LOG(TS_OFF, VLEVEL_M,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
(uint8_t)sts_rss_result,(int) sts_presence_rss_distance, (int)(sts_presence_rss_score), (int)average_result, (int)iterations);
}
#endif
// RSS feature 1: Motion, No-motion process
@ -1226,15 +1004,9 @@ int sts_presence_rss_fall_rise_detection(void)
#endif
if (deactivated && success)
{
APP_LOG(TS_OFF, VLEVEL_H,"Application finished OK\n");
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
void STS_Yunhorn_DistanceStandardDeviation(void)
{
uint16_t i,j;

View File

@ -79,7 +79,7 @@ extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_dep
extern volatile uint8_t sts_fall_rising_detected_result, sts_fall_rising_detected_result_changed_flag;
extern volatile uint8_t sts_presence_fall_detection;
extern volatile uint8_t last_sts_fall_rising_detected_result;
extern volatile uint8_t sts_time_c_threshold;
extern volatile uint16_t sts_motionless_duration_threshold_in_min;
extern volatile uint8_t sts_status_color, sts_lamp_bar_color;//puColor
extern volatile uint8_t sts_cloud_netcolor; //netColor
@ -769,7 +769,7 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void)
//filter parameter
sts_presence_rss_config.default_downsampling_factor = (float)(sts_cfg_nvm.p[RSS_CFG_DOWNSAMPLING_FACTOR]);
sts_presence_rss_config.default_power_save_mode = (float)(sts_cfg_nvm.p[RSS_CFG_POWER_MODE]);
sts_presence_rss_config.default_time_c_threshold = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD]);
// sts_rss_config_updated_flag = (sts_rss_config_updated_flag|STS_RSS_CONFIG_FULL); //set to 2 for FULL config effect in next detection
//sts_rss_config_updated_flag = (STS_RSS_CONFIG_FULL); //set to 2 for FULL config effect in next detection
@ -777,7 +777,7 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void)
sts_rss_config_updated_flag = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_UPDATE_FLAG]);
sts_rss_cfg_slid_win_threshold = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])>>4;
sts_rss_cfg_slid_win_size = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])&0x0F;
sts_time_c_threshold = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD]);
APP_LOG(TS_ON, VLEVEL_H, "\r\n##### Reboot --- with NVM CFG'ED RSS flag =%02x \r\n", sts_rss_config_updated_flag);
}

View File

@ -92,6 +92,7 @@ static void STS_Show_STS_CFG_NVM(uint8_t * store_value, uint16_t store_size);
extern volatile uint8_t sts_rss_cfg_slid_win_threshold;
extern volatile uint8_t sts_rss_cfg_slid_win_size;
extern volatile uint8_t self_test_result[18];
extern volatile uint8_t sts_time_c_threshold;
volatile sts_cfg_nvm_t sts_cfg_nvm = {
sts_mtmcode1,
sts_mtmcode2,
@ -122,7 +123,7 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = {
0x0A, //intra frame weight, 0x00=[0]*0.1=0.0F 0x0A=10, 10*0.1=1 FOR FAST MOVEMENT TRACKING FALL DETECTION
0x01, //output time const 0x05=[5]*0.1=0.5 0.5--> 0.9 2025-03-26 TODO XXXXXX
0x01, //downsampling factor [2]=2
0x03, //power saving mode ACTIVE [3] = 3U
0x14, //default time_c threshold 4
0x02, //P[17] RSS CFG UPDATE FLAG 2025-04-14
0x6E, //P[18] RSS_CFG_BG_MOTION_NOISE 2025-04-14
0x8C, //P[19] RSS SLIDING WINDOW CFG: 0x08 AS threshold, 0x0C as window size
@ -2008,7 +2009,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
uint8_t i=0, mems_ver, invalid_flag=1;
UTIL_MEM_set_8((void*)outbuf,0x0, sizeof(outbuf));
if (((char)tlv_buf[CFG_CMD1] == 'Y') && (tlv_buf_size <=5)) // BEGIN OF *** BOARD LEVEL CONTROL OR REPORT
if (((char)tlv_buf[CFG_CMD1] == 'Y') && (tlv_buf_size <=7)) // BEGIN OF *** BOARD LEVEL CONTROL OR REPORT
{
switch ((char)tlv_buf[CFG_CMD2])
{
@ -2431,6 +2432,60 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
break;
case 'T': // YTCCC --- CHANGE RSS Internal yes no threshold
if ( ((char)tlv_buf[CFG_CMD3] >= '0') && ((char)tlv_buf[CFG_CMD3] <= '2')
&& ((char)tlv_buf[CFG_CMD4] >= '0') && ((char)tlv_buf[CFG_CMD4] <= '9')
&& ((char)tlv_buf[CFG_CMD5] >= '0') && ((char)tlv_buf[CFG_CMD5] <= '9'))
{
uint8_t time_c_threshold=0;
time_c_threshold = ( (tlv_buf[CFG_CMD3]-0x30)*100 + (tlv_buf[CFG_CMD4] - 0x30)*10 + (tlv_buf[CFG_CMD5] - 0x30))&0xFF;
sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD] = (time_c_threshold)&0xff;
sts_time_c_threshold = time_c_threshold;
APP_LOG(TS_OFF, VLEVEL_M, "\r\nRSS interval yes no counting threshold: %d \r\n", time_c_threshold);
OnStoreSTSCFGContextRequest();
} else {
APP_LOG(TS_OFF, VLEVEL_M, "\r\nCFG ERR, sliding win threshold/length incorrect");
}
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;
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
break;
case 'C': // YCXXYY --- CHANGE RSS FAST CUT OFF AND SLOW CUT OFF THRESHOLD
if ( ((char)tlv_buf[CFG_CMD3] >= '0') && ((char)tlv_buf[CFG_CMD3] <= '9')
&& ((char)tlv_buf[CFG_CMD4] >= '0') && ((char)tlv_buf[CFG_CMD4] <= '9')
&& ((char)tlv_buf[CFG_CMD5] >= '0') && ((char)tlv_buf[CFG_CMD5] <= '9')
&& ((char)tlv_buf[CFG_CMD6] >= '0') && ((char)tlv_buf[CFG_CMD6] <= '9'))
{
uint8_t ite_fast_cut=0, ite_slow_cut=0;
ite_fast_cut = ((tlv_buf[CFG_CMD3] - 0x30)*10 + (tlv_buf[CFG_CMD4] - 0x30))&0xff;
ite_slow_cut = ((tlv_buf[CFG_CMD5] - 0x30)*10 + (tlv_buf[CFG_CMD6] - 0x30))&0xff;
{
sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF] = ite_fast_cut;
sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF] = ite_slow_cut;
APP_LOG(TS_OFF, VLEVEL_M, "\r\nite_fast_cut threshold: %d ite_slow_cut:0.%2d \r\n", ite_fast_cut, ite_slow_cut);
OnStoreSTSCFGContextRequest();
}
}
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;
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
break;
default:
//STS_SENSOR_Upload_Config_Invalid_Message();
@ -2690,7 +2745,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
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));
sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD] = (uint8_t)((tlv_buf[CFG_CMD33]- 0x30));

Binary file not shown.