From 4725a97d34a6df861a25d2c7499ffed7a2742f77 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Mon, 30 Dec 2024 19:18:01 +0800 Subject: [PATCH] fix issue of no vl53 detected issue and color store to nvm --- Core/Src/sts_lamp_bar.c | 4 +- Core/Src/sys_app.c | 2 +- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 166892 -> 167072 bytes STS/Core/Inc/yunhorn_sts_sensors.h | 2 +- STS/Core/Src/yunhorn_sts_process.c | 56 ++++++++++++++--------- STS/TOF/App/app_tof_peoplecount.c | 6 ++- 6 files changed, 43 insertions(+), 27 deletions(-) diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 01c7d0c..4419a90 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -220,7 +220,7 @@ void STS_Lamp_Bar_Self_Test_Simple(void) do { STS_Lamp_Bar_Set_STS_RGB_Color(color, lum_level); HAL_Delay(50); - lum_level += 20; + lum_level += 10; } while (lum_level < 99); STS_Lamp_Bar_Set_Dark(); } @@ -233,7 +233,7 @@ void STS_Lamp_Bar_Self_Test(void) APP_LOG(TS_OFF, VLEVEL_M, "\r\n YunHorn STS Indicative Lamp Self Test\r\n"); - //STS_Lamp_Bar_Self_Test_Simple(); + STS_Lamp_Bar_Self_Test_Simple(); APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#2] Scoller Testing\r\n"); lum_level=50; diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c index 1c4673c..07ff13b 100644 --- a/Core/Src/sys_app.c +++ b/Core/Src/sys_app.c @@ -135,7 +135,7 @@ void SystemApp_Init(void) #if defined(STS_T6) //STS_TOF_VL53LX_PresenceDetection_Process_Init(); //STS_Lamp_Bar_Self_Test_Simple(); - //STS_Lamp_Bar_Self_Test(); + STS_Lamp_Bar_Self_Test(); LED_GREEN_ON;HAL_Delay(50); LED_RED_ON;HAL_Delay(50); LED_GREEN_OFF;HAL_Delay(50); diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index b90af9cb8616ecd692684c667790428c1c0a6912..5a6da59aaa4e05f0eda73e8ccf05467b4990094f 100644 GIT binary patch delta 46390 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 bd~j$IZ<+fKZuLyM{q4=X=tz$Kr+fE5`T6VA delta 45636 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 Jz%(vD{|6o(2)qCQ diff --git a/STS/Core/Inc/yunhorn_sts_sensors.h b/STS/Core/Inc/yunhorn_sts_sensors.h index c602e02..37818a9 100644 --- a/STS/Core/Inc/yunhorn_sts_sensors.h +++ b/STS/Core/Inc/yunhorn_sts_sensors.h @@ -288,7 +288,7 @@ void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity); void OnYunhornSTSTxPeriodicityChanged(uint32_t periodicity); void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_size); void STS_SENSOR_Function_Test_Process(void); -void STS_SENSOR_Distance_Test_Process(void); +int STS_SENSOR_Distance_Test_Process(void); void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_t count); void STS_PRESENCE_SENSOR_Distance_Measure_Process(void); void ppc_cfg_parameter_update(void); diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 9083ae8..fb3ec65 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -678,6 +678,8 @@ void USER_APP_Parse_CMD_P(uint8_t *parse_buffer, uint8_t parse_buffer_size) sts_color_occupy_vacant = sts_cfg_nvm.color_occupy_vacant; APP_LOG(TS_OFF, VLEVEL_M, "\r\n Workmode=%d Color Occupy=%02X Vacant=%02X \r\n", sts_work_mode, STS_COLOR_DEFAULT_OCCUPY, STS_COLOR_DEFAULT_VACANT); + + OnStoreSTSCFGContextRequest(); } break; @@ -1112,10 +1114,7 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); break; case 'D': /* "YZD": Distance/Install height Measure */ - STS_SENSOR_Distance_Test_Process(); - sts_cfg_nvm.sensor_install_height_in_10cm = sts_sensor_install_height/100; //in 10 cm, say 4500mm=450cm=45 dm - APP_LOG(TS_OFF, VLEVEL_M, "\n STS CFG NVM -> SENSOR INSTALL HEIGHT STORED = %d dm(10cm)\n", sts_cfg_nvm.sensor_install_height_in_10cm); - OnStoreSTSCFGContextRequest(); + uint16_t range_distance = STS_SENSOR_Distance_Test_Process(); i = 0; outbuf[i++] = (uint8_t)'D'; outbuf[i++] = (uint8_t)sts_mtmcode1; @@ -1123,23 +1122,35 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s outbuf[i++] = (uint8_t)sts_version; outbuf[i++] = (uint8_t)sts_hardware_ver; outbuf[i++] = (uint8_t)(99*((GetBatteryLevel()/254)&0xff)); - outbuf[i++] = (uint8_t)(2); //two bytes for distance - #if defined(VL53LX)||defined(VL53L0) -#if 0 - outbuf[i++] = (uint8_t)(sts_sensor_install_height/1000+0x30)&0xff; - outbuf[i++] = (uint8_t)((sts_sensor_install_height/100)%10+0x30)&0xff; - outbuf[i++] = (uint8_t)((sts_sensor_install_height/10)%10+0x30)&0xff; - outbuf[i++] = (uint8_t)((sts_sensor_install_height/1)%10+0x30)&0xff; -#endif - outbuf[i++] = (uint8_t)(sts_sensor_install_height>>8)&0xFF; - outbuf[i++] = (uint8_t)(sts_sensor_install_height)&0xFF; - #endif + + if (range_distance == 0 ) + { + sts_cfg_nvm.sensor_install_height_in_10cm = sts_sensor_install_height/100; //in 10 cm, say 4500mm=450cm=45 dm + APP_LOG(TS_OFF, VLEVEL_M, "\n STS CFG NVM -> SENSOR INSTALL HEIGHT STORED = %d dm(10cm)\n", sts_cfg_nvm.sensor_install_height_in_10cm); + OnStoreSTSCFGContextRequest(); + outbuf[i++] = (uint8_t)(2); //two bytes for distance + #if defined(VL53LX)||defined(VL53L0) + #if 0 + outbuf[i++] = (uint8_t)(sts_sensor_install_height/1000+0x30)&0xff; + outbuf[i++] = (uint8_t)((sts_sensor_install_height/100)%10+0x30)&0xff; + outbuf[i++] = (uint8_t)((sts_sensor_install_height/10)%10+0x30)&0xff; + outbuf[i++] = (uint8_t)((sts_sensor_install_height/1)%10+0x30)&0xff; + #endif + outbuf[i++] = (uint8_t)(sts_sensor_install_height>>8)&0xFF; + outbuf[i++] = (uint8_t)(sts_sensor_install_height)&0xFF; + #endif + + #if defined(STS_T6) + ppc_cfg_parameter_update(); + #endif + + } else + { + outbuf[i++] = (uint8_t)'X'; + } STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); -#if defined(STS_T6) - ppc_cfg_parameter_update(); -#endif break; case 'M': /* "YZM": Mask level */ i = 0; @@ -1818,7 +1829,7 @@ static void STS_Show_STS_CFG_NVM(uint8_t * store_value) APP_LOG(TS_OFF, VLEVEL_H, "\n\r"); APP_LOG(TS_OFF, VLEVEL_H, "\n###############################################\n\r"); } -void STS_SENSOR_Distance_Test_Process(void) +int STS_SENSOR_Distance_Test_Process(void) { #ifdef YUNHORN_STS_O6_ENABLED sts_distance_rss_distance =0; @@ -1849,6 +1860,7 @@ void STS_SENSOR_Distance_Test_Process(void) sts_sensor_install_height=sts_tof_distance_data[0]+sts_tof_distance_data[1]; #endif + return status; } void ppc_cfg_parameter_update(void) @@ -1893,14 +1905,14 @@ void STS_SENSOR_Function_Test_Process(void) if (((sensor_id & 0xff)!= 0xCC) && (((sensor_id >>8) & 0xFF)!=0xEA)) // no VL53L1X found { - tstbuf[i++] = (uint8_t) 'X'; // Slave MEMS Not Avaliable + tstbuf[i++] = (uint8_t) 'X'; // Slave MEMS Not Available } else { //STS_SENSOR_Distance_Test_Process(); int status=0; uint16_t range_distance =0; status = sts_tof_vl53lx_range_distance(&range_distance); - if (status ==0) + if ((status ==0) && (range_distance !=0)) { sts_sensor_install_height = range_distance; APP_LOG(TS_OFF, VLEVEL_M, "\nSensor Install Height =%4d mm\n", sts_sensor_install_height); @@ -1909,6 +1921,8 @@ void STS_SENSOR_Function_Test_Process(void) tstbuf[i++] = (uint8_t) (sensor_id)&0xff; tstbuf[i++] = (uint8_t) (sts_sensor_install_height>>8)&0xff; // MSB of sensor height tstbuf[i++] = (uint8_t) (sts_sensor_install_height)&0xff; // LSB of sensor height + } else { + tstbuf[i++] = (uint8_t) 'x'; // Slave MEMS available yet not stable } } #endif diff --git a/STS/TOF/App/app_tof_peoplecount.c b/STS/TOF/App/app_tof_peoplecount.c index b879224..d73847e 100644 --- a/STS/TOF/App/app_tof_peoplecount.c +++ b/STS/TOF/App/app_tof_peoplecount.c @@ -1029,8 +1029,10 @@ int sts_tof_vl53lx_range_distance(uint16_t *range_distance) if (status != 0) { APP_LOG(TS_OFF, VLEVEL_L,"Error in operating the device\n"); return (-1); + } else if (Distance != 0 ) + { + APP_LOG(TS_OFF, VLEVEL_M,"\r\nVL53L1X RANGE DISTANCE =%d \r\n", Distance); + *range_distance = Distance; } - APP_LOG(TS_OFF, VLEVEL_M,"\r\nVL53L1X RANGE DISTANCE =%d \r\n", Distance); - *range_distance = Distance; return status; }