From b39e6dd47f252672cb621b8edfc4d963720642c0 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 14 Jan 2025 13:17:37 +0800 Subject: [PATCH] refine P2 --- LoRaWAN/App/lora_app.c | 16 +++--- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 159860 -> 160068 bytes STS/Core/Inc/yunhorn_sts_sensors.h | 5 +- STS/Core/Src/yunhorn_sts_process.c | 60 ++++++++++++++++++----- STS/TOF/App/app_tof_peoplecount.c | 48 +++++++++--------- 5 files changed, 84 insertions(+), 45 deletions(-) diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 3f95890..2cfa67f 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -541,7 +541,7 @@ void LoRaWAN_Init(void) #if defined(STS_P2)||defined(STS_T6)||defined(L8) - // UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), UTIL_SEQ_RFU, STS_YunhornSTSEventP5_Process); + UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), UTIL_SEQ_RFU, STS_YunhornSTSEventP5_Process); #endif @@ -561,7 +561,7 @@ void LoRaWAN_Init(void) UTIL_TIMER_Start(&STSLampBarColorTimer); #elif defined(STS_P2) - UTIL_TIMER_Create(&YunhornSTSWakeUpScanTimer, STS_TOFScanPeriod_msec, UTIL_TIMER_PERIODIC, (void*)STS_TOF_VL53LX_PeopleCounting_Process_Start, NULL); + UTIL_TIMER_Create(&YunhornSTSWakeUpScanTimer, 2*STS_TOFScanPeriod_msec, UTIL_TIMER_PERIODIC, (void*)STS_TOF_VL53LX_PeopleCounting_Process_Start, NULL); UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); #endif @@ -1034,7 +1034,7 @@ static void SendTxData(void) #ifdef STS_P2 #ifdef VL53LX // VL53L1X - AppData.Buffer[i++] = (uint8_t) 15; //sum of below + AppData.Buffer[i++] = (uint8_t) 6; //sum of below AppData.Buffer[i++] = (uint8_t)((sts_p2_sensor_data.Walk_In_People_Count>>8) & 0xFF); AppData.Buffer[i++] = (uint8_t)(sts_p2_sensor_data.Walk_In_People_Count & 0xFF); @@ -1044,6 +1044,7 @@ static void SendTxData(void) AppData.Buffer[i++] = (uint8_t)((sts_p2_sensor_data.Walk_Around_People_Count>>8) & 0xFF); AppData.Buffer[i++] = (uint8_t)(sts_p2_sensor_data.Walk_Around_People_Count & 0xFF); #endif // VL53L1X +#if 0 #ifdef VL53LX // VL53L1X AppData.Buffer[i++] = (uint8_t)((sts_p2_sensor_data.Count_Period) & 0xFF); AppData.Buffer[i++] = (uint8_t)((sts_p2_sensor_data.Count_Period_Unit) & 0xFF); @@ -1059,7 +1060,7 @@ static void SendTxData(void) AppData.Buffer[i++] = (uint8_t)(sts_p2_sensor_data.Count_Valid & 0xFF); #endif // VL53L1X - +#endif #endif //STS_P2 #if defined(STS_T6) @@ -1228,9 +1229,10 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } AppData.Port = 1; AppData.BufferSize = 16; - UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t *)"YUNHORN168", 10); - UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer+10, (uint8_t *)(uint8_t*)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); - AppData.BufferSize = sizeof(YUNHORN_STS_PRD_STRING)+10; + // UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t *)"YUNHORN168", 10); + // UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer+10, (uint8_t *)(uint8_t*)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); + UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t*)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); + AppData.BufferSize = sizeof(YUNHORN_STS_PRD_STRING); LmHandlerParams.IsTxConfirmed = true; LmHandlerErrorStatus_t status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); if (status ==LORAMAC_HANDLER_SUCCESS ) LmHandlerParams.IsTxConfirmed = false; diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 9fe4dd09df44bb5a4efc1a6732078524bdcb606e..c6065950ef01de471e70fe4bae60413751ea898e 100644 GIT binary patch delta 42400 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 delta 41659 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 Gs;ocS9(oi2 diff --git a/STS/Core/Inc/yunhorn_sts_sensors.h b/STS/Core/Inc/yunhorn_sts_sensors.h index 11605e3..ab663b0 100644 --- a/STS/Core/Inc/yunhorn_sts_sensors.h +++ b/STS/Core/Inc/yunhorn_sts_sensors.h @@ -291,7 +291,10 @@ void STS_SENSOR_Function_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); + +void ppc_cfg_parameter_update(void); // STS_T6 +void sts_p2_ppc_cfg_parameter_update(void); // STS_P2 + /* USER CODE BEGIN Private defines */ /* In this example TIM2 input clock (TIM2CLK) is set to APB1 clock (PCLK1), diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 2d4509d..270f928 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -685,20 +685,26 @@ void USER_APP_Parse_CMD_P(uint8_t *parse_buffer, uint8_t parse_buffer_size) break; case 12: break; - case 13: - for (uint8_t i=0; i<10; i++) { - sts_cfg_nvm.p[i] = (uint8_t)parse_buffer[CFG_CMD4+i]; - } + case 15: + if ((parse_buffer[CFG_CMD4]=='P') && ((parse_buffer[CFG_CMD5]-0x30)<=6)) // P 1 1 'P' + { + for (uint8_t i=0; i<10; i++) { + sts_cfg_nvm.p[i] = (uint8_t)(parse_buffer[CFG_CMD5+i]-0x30); + } + // P 1 1 P 6 DistArraySize MaxDist MinDist ThreDist ROWSPADS TimeBudget + // p 1 1 p 6 8 40(x10cm) 10(x10cm) 16(x10cm) 8 3/5/10/20/50(x10ms) - ppc_cfg[parse_buffer[CFG_CMD4]].distance_array_size = (uint8_t)parse_buffer[CFG_CMD4+1]; - ppc_cfg[parse_buffer[CFG_CMD4]].max_distance = (uint8_t)parse_buffer[CFG_CMD4+2]; - ppc_cfg[parse_buffer[CFG_CMD4]].min_distance = (uint8_t)parse_buffer[CFG_CMD4+3]; - ppc_cfg[parse_buffer[CFG_CMD4]].dist_threshold = (uint8_t)parse_buffer[CFG_CMD4+4]; - ppc_cfg[parse_buffer[CFG_CMD4]].rows_of_SPADS = (uint8_t)parse_buffer[CFG_CMD4+5]; - ppc_cfg[parse_buffer[CFG_CMD4]].timing_budget = (uint8_t)parse_buffer[CFG_CMD4+6]; - ppc_cfg[parse_buffer[CFG_CMD4]].distance_mode = (uint8_t)parse_buffer[CFG_CMD4+7]; - ppc_cfg[parse_buffer[CFG_CMD4]].front_zone_center = (uint8_t)parse_buffer[CFG_CMD4+8]; - ppc_cfg[parse_buffer[CFG_CMD4]].back_zone_center = (uint8_t)parse_buffer[CFG_CMD4+9]; + ppc_cfg[parse_buffer[CFG_CMD5]-0x30].distance_array_size = (uint8_t)(parse_buffer[CFG_CMD5+1]-0x30); + ppc_cfg[parse_buffer[CFG_CMD5]-0x30].max_distance = (uint8_t)((parse_buffer[CFG_CMD5+2]-0x30)*10 + (parse_buffer[CFG_CMD5+3]-0x30)); + ppc_cfg[parse_buffer[CFG_CMD5]-0x30].min_distance = (uint8_t)((parse_buffer[CFG_CMD5+4]-0x30)*10 + (parse_buffer[CFG_CMD5+5]-0x30)); + ppc_cfg[parse_buffer[CFG_CMD5]-0x30].dist_threshold = (uint8_t)((parse_buffer[CFG_CMD5+6]-0x30)*10 + (parse_buffer[CFG_CMD5+7]-0x30)); + ppc_cfg[parse_buffer[CFG_CMD5]-0x30].rows_of_SPADS = (uint8_t)(parse_buffer[CFG_CMD5+8]-0x30); + ppc_cfg[parse_buffer[CFG_CMD5]-0x30].timing_budget = (uint8_t)((parse_buffer[CFG_CMD5+9]-0x30)*100 + (parse_buffer[CFG_CMD5+10]-0x30)*10); + + APP_LOG(TS_OFF, VLEVEL_L, "\r\nDistArray=%d Max=%d, Min=%d Threshold=%d SPADS=%d TimingBudget=%d \r\n", + ppc_cfg[DOOR_JAM_NOW].distance_array_size, ppc_cfg[DOOR_JAM_NOW].max_distance, ppc_cfg[DOOR_JAM_NOW].min_distance, ppc_cfg[DOOR_JAM_NOW].dist_threshold, + ppc_cfg[DOOR_JAM_NOW].rows_of_SPADS, ppc_cfg[DOOR_JAM_NOW].timing_budget); + } break; default: @@ -1097,6 +1103,7 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s case 'S': /* "YZS": Self Function Testing */ STS_SENSOR_Function_Test_Process(); + #if defined(STS_T6) ppc_cfg_parameter_update(); sts_cfg_nvm.sensor_install_height_in_10cm = sts_sensor_install_height/100; //in 10 cm, say 4500mm=450cm=45 dm @@ -1104,6 +1111,13 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s 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(); +#elif defined(STS_P2) + sts_p2_ppc_cfg_parameter_update(); + sts_cfg_nvm.sensor_install_height_in_10cm = sts_sensor_install_height/100; //in 10 cm, say 4500mm=450cm=45 dm + sts_cfg_nvm.sts_door_jam_profile = sts_door_jam_profile; + 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(); + #endif break; @@ -1889,6 +1903,26 @@ void ppc_cfg_parameter_update(void) APP_LOG(TS_OFF, VLEVEL_M, "\r\n Door Jam profile updated to %d with Max/Min/Threshold=%d:%d:%d \r\n", sts_door_jam_profile, ppc_cfg[DOOR_JAM_NOW].max_distance,ppc_cfg[DOOR_JAM_NOW].min_distance, ppc_cfg[DOOR_JAM_NOW].dist_threshold); } + +#ifdef STS_P2 +void sts_p2_ppc_cfg_parameter_update(void) +{ + ppc_cfg[DOOR_JAM_NOW].profile_name = DOOR_JAM_NOW; + ppc_cfg[DOOR_JAM_NOW].distance_array_size = 8; + ppc_cfg[DOOR_JAM_NOW].max_distance = sts_sensor_install_height; + ppc_cfg[DOOR_JAM_NOW].min_distance = MAX((sts_sensor_install_height*0.2), 200); // 200 mm for toilet seat height + ppc_cfg[DOOR_JAM_NOW].dist_threshold = MAX((sts_sensor_install_height - 500),sts_sensor_install_height*0.8); + ppc_cfg[DOOR_JAM_NOW].rows_of_SPADS = ROWS_OF_SPADS; + ppc_cfg[DOOR_JAM_NOW].timing_budget = 100; // TIMING_BUDGET, in ms possible values [15, 20, 33, 50, 100, 200, 500] + ppc_cfg[DOOR_JAM_NOW].distance_mode = 2; /* 1=short, 2=long, DISTANCE_MODE */ + ppc_cfg[DOOR_JAM_NOW].front_zone_center = FRONT_ZONE_CENTER; + ppc_cfg[DOOR_JAM_NOW].back_zone_center = BACK_ZONE_CENTER; + sts_door_jam_profile = DOOR_JAM_NOW; + + APP_LOG(TS_OFF, VLEVEL_M, "\r\n STS_P2 Door Jam profile updated to %d with Max/Min/Threshold=%d:%d:%d \r\n", + sts_door_jam_profile, ppc_cfg[DOOR_JAM_NOW].max_distance,ppc_cfg[DOOR_JAM_NOW].min_distance, ppc_cfg[DOOR_JAM_NOW].dist_threshold); +} +#endif void STS_SENSOR_MEMS_Get_ID(uint16_t *devID) { #ifdef VL53LX diff --git a/STS/TOF/App/app_tof_peoplecount.c b/STS/TOF/App/app_tof_peoplecount.c index 991e890..04cf701 100644 --- a/STS/TOF/App/app_tof_peoplecount.c +++ b/STS/TOF/App/app_tof_peoplecount.c @@ -299,7 +299,7 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu MinDistance = Distances[zone][i]; } } - //APP_LOG(TS_OFF, VLEVEL_M, "\r\n MinDistance & dist_threshold ---%d %d", MinDistance,ppc_cfg[sts_distance_mode].dist_threshold); + // APP_LOG(TS_OFF, VLEVEL_M, "\r\n Distance=%d Min. & threshold ---%d %d", Distance, MinDistance,ppc_cfg[sts_distance_mode].dist_threshold); if (MinDistance < ppc_cfg[sts_door_jam_profile].dist_threshold) { // Someone is in ! CurrentZoneStatus = SOMEONE; @@ -376,7 +376,7 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu // reset the table filling size in case an entry or exit just found DistancesTableSize[0] = 0; DistancesTableSize[1] = 0; - APP_LOG(TS_OFF, VLEVEL_L,"Walk In, People Count=%d\n", PeopleCount); + APP_LOG(TS_OFF, VLEVEL_L,"Walk In, People Count=%d Head/Min =%d Range=%d\n", PeopleCount, MinDistance, Distance); sts_people_count_sensor_data.Walk_In_People_Count ++; sts_people_count_number_changed = 1; LED_RED_OFF; @@ -394,13 +394,12 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu // reset the table filling size in case an entry or exit just found DistancesTableSize[0] = 0; DistancesTableSize[1] = 0; - APP_LOG(TS_OFF, VLEVEL_L,"Walk Out, People Count=%d\n", PeopleCount); + APP_LOG(TS_OFF, VLEVEL_L,"Walk Out, People Count=%d Head/Min =%d Range=%d\n", PeopleCount, MinDistance, Distance); sts_people_count_sensor_data.Walk_Out_People_Count ++; //LED1_ON; //TODO XXX, CHANGE TO (LED_IN_OFF && LED_OUT_ON); //LED1_TOGGLE; - + LED_GREEN_OFF; LED_RED_ON; - LED_GREEN_OFF; HAL_Delay(50); LED_RED_OFF; sts_people_count_number_changed = 1; @@ -409,18 +408,18 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu DistancesTableSize[0] = 0; DistancesTableSize[1] = 0; - APP_LOG(TS_OFF, VLEVEL_L,"Walk Around ie. Wrong path\n"); + APP_LOG(TS_OFF, VLEVEL_L,"Walk Around ie. Wrong path, Head Distance=%d \n", MinDistance); sts_people_count_sensor_data.Walk_Around_People_Count ++; LED_RED_ON; LED_GREEN_ON; - HAL_Delay(50); + HAL_Delay(30); LED_GREEN_OFF; LED_RED_OFF; - HAL_Delay(50); + HAL_Delay(30); LED_RED_ON; LED_GREEN_ON; - HAL_Delay(50); + HAL_Delay(30); LED_GREEN_OFF; LED_RED_OFF; } @@ -645,24 +644,24 @@ void STS_TOF_VL53LX_PeopleCounting_Process_Init(void) uint16_t log_in_nvm[32]; OnRestoreSTSLOGContextRequest(log_in_nvm); sts_people_count_sensor_data.Sum_Day_Walk_In_People_Count = (uint16_t)log_in_nvm[0]; - sts_people_count_sensor_data.Sum_Day_Walk_Out_People_Count = (uint16_t)log_in_nvm[2]; - sts_people_count_sensor_data.Sum_Day_Walk_Around_People_Count = (uint16_t)log_in_nvm[4]; + sts_people_count_sensor_data.Sum_Day_Walk_Out_People_Count = (uint16_t)log_in_nvm[1]; + sts_people_count_sensor_data.Sum_Day_Walk_Around_People_Count = (uint16_t)log_in_nvm[2]; - sts_people_count_sensor_data.Sum_Week_Walk_In_People_Count = (uint16_t)log_in_nvm[6]; - sts_people_count_sensor_data.Sum_Week_Walk_Out_People_Count = (uint16_t)log_in_nvm[8]; - sts_people_count_sensor_data.Sum_Week_Walk_Around_People_Count = (uint16_t)log_in_nvm[10]; + sts_people_count_sensor_data.Sum_Week_Walk_In_People_Count = (uint16_t)log_in_nvm[3]; + sts_people_count_sensor_data.Sum_Week_Walk_Out_People_Count = (uint16_t)log_in_nvm[4]; + sts_people_count_sensor_data.Sum_Week_Walk_Around_People_Count = (uint16_t)log_in_nvm[5]; - sts_people_count_sensor_data.Sum_Month_Walk_In_People_Count = (uint16_t)log_in_nvm[12]; - sts_people_count_sensor_data.Sum_Month_Walk_Out_People_Count = (uint16_t)log_in_nvm[14]; - sts_people_count_sensor_data.Sum_Month_Walk_Around_People_Count = (uint16_t)log_in_nvm[16]; + sts_people_count_sensor_data.Sum_Month_Walk_In_People_Count = (uint16_t)log_in_nvm[6]; + sts_people_count_sensor_data.Sum_Month_Walk_Out_People_Count = (uint16_t)log_in_nvm[7]; + sts_people_count_sensor_data.Sum_Month_Walk_Around_People_Count = (uint16_t)log_in_nvm[8]; - sts_people_count_sensor_data.Sum_Year_Walk_In_People_Count = (uint16_t)log_in_nvm[18]; - sts_people_count_sensor_data.Sum_Year_Walk_Out_People_Count = (uint16_t)log_in_nvm[20]; - sts_people_count_sensor_data.Sum_Year_Walk_Around_People_Count = (uint16_t)log_in_nvm[22]; + sts_people_count_sensor_data.Sum_Year_Walk_In_People_Count = (uint16_t)log_in_nvm[9]; + sts_people_count_sensor_data.Sum_Year_Walk_Out_People_Count = (uint16_t)log_in_nvm[10]; + sts_people_count_sensor_data.Sum_Year_Walk_Around_People_Count = (uint16_t)log_in_nvm[11]; - sts_people_count_sensor_data.Sum_LifeCycle_Walk_In_People_Count = (uint16_t)log_in_nvm[24]; - sts_people_count_sensor_data.Sum_LifeCycle_Walk_Out_People_Count = (uint16_t)log_in_nvm[26]; - sts_people_count_sensor_data.Sum_LifeCycle_Walk_Around_People_Count = (uint16_t)log_in_nvm[28]; + sts_people_count_sensor_data.Sum_LifeCycle_Walk_In_People_Count = (uint16_t)log_in_nvm[12]; + sts_people_count_sensor_data.Sum_LifeCycle_Walk_Out_People_Count = (uint16_t)log_in_nvm[13]; + sts_people_count_sensor_data.Sum_LifeCycle_Walk_Around_People_Count = (uint16_t)log_in_nvm[14]; } @@ -937,7 +936,7 @@ int sts_tof_vl53lx_peoplecount_init(void) wordData = 0; while (sensorState == 0) { status = VL53L1X_BootState(dev, &sensorState); - HAL_Delay(2); + HAL_Delay(1); wordData ++; if (wordData > 8000) { APP_LOG(TS_OFF, VLEVEL_L,"\n\n ***Failed to boot Chip***\n\n\n"); @@ -1035,6 +1034,7 @@ int sts_tof_vl53lx_peoplecount_start(void) Distance = ppc_cfg[sts_door_jam_profile].max_distance; //MAX_DISTANCE; #endif // inject the new ranged distance in the people counting algorithm + //APP_LOG(TS_OFF, VLEVEL_L,"%d,%d,%d\n", Zone, Distance, Signal); PplCounter = ProcessPeopleCountingData(Distance, Zone, RangeStatus); //printf("\nPplCounter =%d \n\r", PplCounter); //sprintf(DisplayStr, "%4d", PplCounter); // only use for special EVK with display