From d289b7b1e9a630ee4de72718980e23280eaa44a7 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Fri, 13 Dec 2024 19:47:54 +0800 Subject: [PATCH] wip L8 --- STM32CubeIDE/Release/WLE5CC_NODE_STS.bin | Bin 186524 -> 187064 bytes STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 275856 -> 275856 bytes STM32CubeIDE/Release/makefile | 2 - STM32CubeIDE/Release/sources.mk | 2 - STS/Core/Inc/yunhorn_sts_sensors.h | 1 - STS/Core/Src/yunhorn_sts_process.c | 5 +- STS/TOF/App/app_tof.c | 153 +++++++++++++---------- 7 files changed, 87 insertions(+), 76 deletions(-) diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin b/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin index a163f669a4368ef61576ef8b8d2a040958bfa62e..aacf24985a40915a63e34d49444d985b28413fbe 100644 GIT binary patch delta 10992 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 BX!igB delta 10202 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 diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 23354ea16c6444bae8e6082cb4c97f1c2d9dc55d..26c8ceea615eb1a510f2fd5d6e735b429448d6cf 100644 GIT binary patch delta 41372 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≪5$8>B7bu#(Ug}Mra{A7f( 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 diff --git a/STM32CubeIDE/Release/makefile b/STM32CubeIDE/Release/makefile index 4f7e63f..36e5c5c 100644 --- a/STM32CubeIDE/Release/makefile +++ b/STM32CubeIDE/Release/makefile @@ -14,13 +14,11 @@ RM := rm -rf -include Middlewares/LoRaWAN/subdir.mk -include Drivers/STM32WLxx_HAL_Driver/subdir.mk -include Drivers/CMSIS/subdir.mk --include Drivers/BSP/STM32WLxx_Nucleo/subdir.mk -include Drivers/BSP/Components/subdir.mk -include Drivers/BSP/53L8A1/subdir.mk -include Application/User/Startup/subdir.mk -include Application/User/STS/TOF/Target/subdir.mk -include Application/User/STS/TOF/App/subdir.mk --include Application/User/STS/RSS/subdir.mk -include Application/User/STS/Core/Src/subdir.mk -include Application/User/LoRaWAN/Target/subdir.mk -include Application/User/LoRaWAN/App/subdir.mk diff --git a/STM32CubeIDE/Release/sources.mk b/STM32CubeIDE/Release/sources.mk index dfd77e9..4110fdd 100644 --- a/STM32CubeIDE/Release/sources.mk +++ b/STM32CubeIDE/Release/sources.mk @@ -27,13 +27,11 @@ Application/User/Core \ Application/User/LoRaWAN/App \ Application/User/LoRaWAN/Target \ Application/User/STS/Core/Src \ -Application/User/STS/RSS \ Application/User/STS/TOF/App \ Application/User/STS/TOF/Target \ Application/User/Startup \ Drivers/BSP/53L8A1 \ Drivers/BSP/Components \ -Drivers/BSP/STM32WLxx_Nucleo \ Drivers/CMSIS \ Drivers/STM32WLxx_HAL_Driver \ Middlewares/LoRaWAN \ diff --git a/STS/Core/Inc/yunhorn_sts_sensors.h b/STS/Core/Inc/yunhorn_sts_sensors.h index 1b91589..1b66377 100644 --- a/STS/Core/Inc/yunhorn_sts_sensors.h +++ b/STS/Core/Inc/yunhorn_sts_sensors.h @@ -531,7 +531,6 @@ void STS_SENSOR_Function_Test_Process(void); void 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 STS_TOF_L8_Process(void); void STS_TOF_L8_Reconfig(void); void MX_53L8A1_ThresholdDetection_ConfigIT(uint32_t sts_low_threshold, uint32_t sts_high_threshold); diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 167595e..e593c7d 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -179,7 +179,7 @@ volatile uint8_t sensor_data_ready=0; #if defined(STS_R1)||defined(STS_R5)||defined(STS_R4)||defined(STS_R1D) volatile uint32_t STS_TOFScanPeriod_msec=50, STS_TxPeriod_sec=30, STS_HeartBeatTimerPeriod_sec=3600; #elif defined(STS_L8)||defined(STS_P2)||defined(STS_O6T)||defined(STS_T6)||defined(O1L) -volatile uint32_t STS_TOFScanPeriod_msec=1200, STS_TxPeriod_sec=300, STS_HeartBeatTimerPeriod_sec=3600; +volatile uint32_t STS_TOFScanPeriod_msec=5000, STS_TxPeriod_sec=300, STS_HeartBeatTimerPeriod_sec=3600; #endif //volatile uint8_t sts_pir_state = 0, sts_pir_result=0; volatile uint8_t last_sts_pir_read=0; @@ -2056,10 +2056,11 @@ void STS_SENSOR_Distance_Test_Process(void) #if defined(VL53LX)||defined(L8) //MX_TOF_Init(); STSWakeupScanTimerStop(); - STS_TOF_L8_Process(); + //STS_TOF_L8_Process(); //MX_TOF_Process(); sts_sensor_install_height = (uint16_t)MX_TOF_Ranging_Process(); + //sts_sensor_install_height = (uint16_t)STS_Get_Center_Range_Distance(); APP_LOG(TS_OFF, VLEVEL_M, "\n STS SENSOR INSTALLATION HEIGHT =%d mm\n\r", (uint16_t)sts_sensor_install_height); STS_LMZ_Ambient_Height_Scan_Process(); diff --git a/STS/TOF/App/app_tof.c b/STS/TOF/App/app_tof.c index edddc5c..b92ac84 100644 --- a/STS/TOF/App/app_tof.c +++ b/STS/TOF/App/app_tof.c @@ -56,6 +56,7 @@ extern volatile uint8_t sts_fhmos_bitmap_pending; #endif #include "stm32wlxx_nucleo.h" +static uint32_t STS_Get_Center_Range_Distance(RANGING_SENSOR_Result_t *Result); /* Private typedef -----------------------------------------------------------*/ /* * The application is to showcase the threshold detection @@ -197,44 +198,49 @@ void STS_LMZ_Ambient_Height_Scan_Process(void) STS_TOF_L8_Process(); - APP_LOG(TS_OFF, VLEVEL_H, "\r\n ----------------------" - "\r\n------BGHM in 2cm-----" + APP_LOG(TS_OFF, VLEVEL_M, "\r\n ----------------------" "\r\n------Threshold %d cm--\r\n", fhmos_cfg.th_gesture_mask_off_height_cm); for (uint8_t i = 0; i < 64; i++) { /* Print distance and status */ - if ((Result.ZoneResult[i].NumberOfTargets > 0)) - { - range_distance = (uint32_t)Result.ZoneResult[i].Distance[0]; + if (i%8==0) APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); + if ((Result.ZoneResult[i].NumberOfTargets > 0)) + { + range_distance = (uint32_t)Result.ZoneResult[i].Distance[0]; - fhmos_bg.h2cm[i] = abs(sts_sensor_install_height - range_distance)/20; + fhmos_bg.h2cm[i] = abs(sts_sensor_install_height - range_distance)/20; - if (2*fhmos_bg.h2cm[i] < fhmos_cfg.th_gesture_mask_off_height_cm) - { - fhmos_bg.maskoff[i] = 0; - } else - { - fhmos_bg.maskoff[i] = 1; - } - //sts_mask_bitmap[(uint8_t)(i/8)] |= (fhmos_bg.maskoff[i])<<(7-i%8); - sts_mask_bitmap[(uint8_t)(i/8)] |= (fhmos_bg.maskoff[i])<<(i%8); - if (i%8==0) APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); - APP_LOG(TS_OFF, VLEVEL_M, "|%4d ", fhmos_bg.h2cm[i]); + if (2*fhmos_bg.h2cm[i] < fhmos_cfg.th_gesture_mask_off_height_cm) + { + fhmos_bg.maskoff[i] = 0; + } else + { + fhmos_bg.maskoff[i] = 1; + } + //sts_mask_bitmap[(uint8_t)(i/8)] |= (fhmos_bg.maskoff[i])<<(7-i%8); + sts_mask_bitmap[(uint8_t)(i/8)] |= (fhmos_bg.maskoff[i])<<(i%8); + // if (i%8==0) APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); + APP_LOG(TS_OFF, VLEVEL_M, "|%4d ", fhmos_bg.h2cm[i]); - } - else { - fhmos_bg.h2cm[i] = 0; - //printf(" .%d. ", i); - } + } + else { + fhmos_bg.h2cm[i] = 0; + APP_LOG(TS_OFF, VLEVEL_M, " .%d. ", i); + } } + APP_LOG(TS_OFF, VLEVEL_M, "\r\n ------- Mask off matrix \r\n"); + for (i=0; i<64; i++) { if (i%8==0) APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); APP_LOG(TS_OFF, VLEVEL_M, "|%d ", (uint8_t)fhmos_bg.maskoff[i]); } + + APP_LOG(TS_OFF, VLEVEL_M, "\r\nmask bitmap \r\n"); + for (i=0; i<8; i++) APP_LOG(TS_OFF, VLEVEL_M, "%02X\r\n",sts_mask_bitmap[i]); @@ -325,41 +331,22 @@ uint16_t MX_TOF_Ranging_Process(void) return (uint16_t) range_distance; #elif defined(L8) uint32_t range_distance=0; - uint8_t center_roi[4] = {27,28,35,36}; - // uint8_t range_mode = 2; //STS_TOF_LONG_RANGE; - // int status = VL53L8A1_RANGING_SENSOR_GetDistance(VL53L8A1_DEV_CENTER, &Result); + //uint8_t center_roi[4] = {27,28,35,36}; - // printf("\r| 27 | 28 | 35 | 36 |\r\n"); - for (uint8_t k=0; k<1; k++) - { - STS_TOF_L8_Process(); + if (ToF_EventDetected != 0) + { + ToF_EventDetected = 0; + status = VL53L8A1_RANGING_SENSOR_GetDistance(VL53L8A1_DEV_CENTER, &Result); - // int status = VL53L8A1_RANGING_SENSOR_GetDistance(VL53L8A1_DEV_CENTER, &Result); - // printf("\r\n status =%d \r\n", status); - - - for (uint8_t zone_nbr = 0; zone_nbr < 4; zone_nbr++) - { - #if 0 - /* Print distance and status */ - if (Result.ZoneResult[center_roi[zone_nbr]].NumberOfTargets > 0) - { - APP_LOG(TS_OFF, VLEVEL_M, "| %04ld %2ld", - (long)Result.ZoneResult[center_roi[zone_nbr]].Distance[RANGING_SENSOR_NB_TARGET_PER_ZONE-1], - (long)Result.ZoneResult[center_roi[zone_nbr]].Status[RANGING_SENSOR_NB_TARGET_PER_ZONE-1]); - } - else { - APP_LOG(TS_OFF, VLEVEL_M, "| -- "); - } - #endif - range_distance += Result.ZoneResult[center_roi[zone_nbr]].Distance[RANGING_SENSOR_NB_TARGET_PER_ZONE-1]; + if (status == BSP_ERROR_NONE) + { + range_distance= STS_Get_Center_Range_Distance(&Result); + } else { + APP_LOG(TS_OFF, VLEVEL_M, "\r\n x \r\n"); + } } - } - APP_LOG(TS_OFF, VLEVEL_M, "\n\r"); - range_distance /=4; - APP_LOG(TS_OFF, VLEVEL_M, "| %u mm\r\n", (uint16_t)range_distance); return (uint16_t) range_distance; #endif @@ -388,11 +375,13 @@ void MX_TOF_Process(void) /* USER CODE END TOF_Process_PostTreatment */ } #ifdef L8 + void STS_TOF_L8_Init(void) { MX_53L8A1_ThresholdDetection_Init(); MX_53L8A1_ThresholdDetection_Process(); } + void STS_TOF_L8_Process(void) { //while (1) @@ -535,6 +524,21 @@ static void MX_53L8A1_ThresholdDetection_Process(void) #endif } +uint32_t STS_Get_Center_Range_Distance(RANGING_SENSOR_Result_t *Result) +{ + uint32_t center_range_distance=0; + uint8_t center_roi[4] = {27,28,35,36}; + + for (uint8_t i=0; i<4; i++) + { + center_range_distance +=(uint32_t)(Result->ZoneResult[center_roi[i]].Distance[0]); + } + + center_range_distance /= 4; + + return center_range_distance; +} + static void print_result(RANGING_SENSOR_Result_t *Result) { int8_t i; @@ -543,7 +547,7 @@ static void print_result(RANGING_SENSOR_Result_t *Result) uint8_t center_roi[4] = {27,28,35,36}; //static uint32_t prev_distance[64]={0}; //uint32_t motion_diff=0, motion_power=0; - uint16_t head_distance=8000; + uint16_t head_distance_from_ceiling=8000; //uint32_t motion_power_threshold = 3200; // 64*50mm //SysTime_t sensor_event_time = SysTimeGetMcuTime(); @@ -574,36 +578,47 @@ static void print_result(RANGING_SENSOR_Result_t *Result) (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4; #endif //printf("%c[2H", 27); /* clear screen */ +#if 0 for (i=0; i<4; i++) { - center_range_distance +=(uint32_t)(Result->ZoneResult[center_roi[i]].Distance[0]); - } - +#endif //int32_t roi_distance =(uint32_t)center_range_distance/4; - uint16_t factor1_floor_level = sts_sensor_install_height - 50; // 50mm min body height - uint16_t factor2_head_level = (sts_sensor_install_height - 10*fhmos_cfg.th_head_level_height_cm); + uint16_t factor1_floor_level_from_ceiling = sts_sensor_install_height; // 50mm min body height + uint16_t factor2_head_level_from_floor = (sts_sensor_install_height - 10*fhmos_cfg.th_head_level_height_cm); + uint16_t head_distance_from_floor=0; + sts_head_level_low = 0; for (i=0; i<64; i++) { - if (0 == fhmos_bg.maskoff[i]) - { - if (Result->ZoneResult[i].Distance[0] < head_distance) - head_distance = Result->ZoneResult[i].Distance[0]; // find out the min_distance + if (i%8 ==0) APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); + APP_LOG(TS_OFF, VLEVEL_M, "%2d__%4d ", fhmos_bg.maskoff[i],Result->ZoneResult[i].Distance[0]); + if (0 == fhmos_bg.maskoff[i]) // only within the non-mask-off blocks + { // Result.ZoneResult[i].NumberOfTargets > 0) + if ((Result->ZoneResult[i].Distance[0] < head_distance_from_ceiling)&& (Result->ZoneResult[i].NumberOfTargets > 0)) + head_distance_from_ceiling = Result->ZoneResult[i].Distance[0]; + // find out the min_distance or the highest position level } } + + head_distance_from_floor = sts_sensor_install_height - head_distance_from_ceiling; + + APP_LOG(TS_OFF, VLEVEL_M, "\r\n #### Head distance from ceiling = %4d \r\n Head distance from floor\r\n",head_distance_from_ceiling, head_distance_from_floor); /* state tree */ -#if 0 - printf("\r\n Factor1_install_height=%d mm, F2 th_high=%d, th_head=%d, Factor2 (gap)=%d \r\n", - factor1_floor_level, (int)sts_high_threshold, (int)10*fhmos_cfg.th_head_level_height_cm, factor2_head_level); +#if 2 + APP_LOG(TS_OFF, VLEVEL_M,"\r\n factor1_floor_level_from_ceiling=%d mm\r\n, F2 th_high=%d, th_head=%d, \r\nFactor2 (factor2_head_level_from_floor)=%d \r\n", + factor1_floor_level_from_ceiling, (int)sts_high_threshold, (int)10*fhmos_cfg.th_head_level_height_cm, factor2_head_level_from_floor); #endif - if ((head_distance <= factor1_floor_level) && (head_distance >= factor2_head_level)) + + if ((head_distance_from_ceiling <= factor1_floor_level_from_ceiling) && ((sts_sensor_install_height - head_distance_from_ceiling) <= (10*fhmos_cfg.th_head_level_height_cm) )) { - // printf("\r\n YELLOW OR RED Distance=%d \r\n", head_distance); - sts_head_level_low = 1; + APP_LOG(TS_OFF, VLEVEL_M,"\r\n YELLOW OR RED (head from ceiling) =%d (mm)\r\n Head from floor (mm) \r\n", head_distance_from_ceiling, (sts_sensor_install_height - head_distance_from_ceiling)); + + sts_head_level_low = 1; + #if 0 fhmos_data.state_fall = STS_FHMOS_FALL_STATE_POTENTIAL; fhmos_data.color_fall = STS_FALL_SUSPICIOUS_COLOR; @@ -612,7 +627,7 @@ static void print_result(RANGING_SENSOR_Result_t *Result) //sts_fhmos_state_changed |=1; - } else if ((head_distance < (factor2_head_level - 150))) // TODO XXX 50mm gap to avoid flapping back and forth + } else if ((head_distance_from_ceiling < (factor2_head_level_from_floor - 150))) // TODO XXX 50mm gap to avoid flapping back and forth { sts_head_level_low = 0; fhmos_data.state_fall = STS_FHMOS_FALL_STATE_NORMAL;