From 5aed732764e1e4990570fd43b3016ff8ff99bf87 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Sat, 2 Nov 2024 21:05:55 +0800 Subject: [PATCH 1/3] wip, not good --- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 159960 -> 159456 bytes STS/Core/Src/yunhorn_sts_process.c | 33 ++++++++++---- STS/TOF/App/app_tof.c | 10 +++-- STS/TOF/App/app_tof_peoplecount.c | 52 ++++++++++++++++++++--- STS/TOF/App/app_tof_peoplecount.h | 1 + 5 files changed, 80 insertions(+), 16 deletions(-) diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 35a1ed080996d27b919e70c36177cd063e31a187..3c0989b8bffb33c94179f69c32d99c1cbedd3f0a 100644 GIT binary patch delta 43755 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 z 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 ZNQrV diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 31a25e6..78cfb0c 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -1041,6 +1041,7 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s //OnSystemReset(); break; case 'S': /* "YZS": Self Function Testing */ + STS_SENSOR_Function_Test_Process(); break; @@ -1067,14 +1068,16 @@ 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)(4); //four bytes for distance + 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; - //outbuf[i++] = (uint8_t)(sts_sensor_install_height>>8)&0xFF; - //outbuf[i++] = (uint8_t)(sts_sensor_install_height)&0xFF; +#endif + outbuf[i++] = (uint8_t)(sts_sensor_install_height>>8)&0xFF; + outbuf[i++] = (uint8_t)(sts_sensor_install_height)&0xFF; #endif STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); @@ -1732,8 +1735,12 @@ void STS_SENSOR_Distance_Test_Process(void) #if defined(VL53LX)||defined(L8) //MX_TOF_Init(); //MX_TOF_Process(); - sts_sensor_install_height = (uint16_t)MX_TOF_Ranging_Process(); + int status=0; + uint16_t range_distance =0; + status = sts_tof_vl53lx_range_distance(&range_distance); + sts_sensor_install_height = range_distance; APP_LOG(TS_OFF, VLEVEL_M, "\n STS SENSOR INSTALLATION HEIGHT =%d mm\n\r", (uint16_t)sts_sensor_install_height); + #endif #if defined(VL53L0) STS_TOF_VL53L0X_Range_Process(); @@ -1762,14 +1769,20 @@ void STS_SENSOR_Function_Test_Process(void) tstbuf[i++] = (uint8_t) (99*GetBatteryLevel()/254)&0xff; #if (defined(STS_P2)||defined(STS_T6)) - STS_SENSOR_MEMS_Get_ID(&sensor_id); + //STS_SENSOR_MEMS_Get_ID(&sensor_id); + + APP_LOG(TS_OFF, VLEVEL_M, "\r\nSensor_id=%04x\r\n", sensor_id); if (((sensor_id & 0xff)!= 0xCC) && (((sensor_id >>8) & 0xFF)!=0xEA)) // no VL53L1X found { tstbuf[i++] = (uint8_t) 'X'; // Slave MEMS Not Avaliable } else { - STS_SENSOR_Distance_Test_Process(); + //STS_SENSOR_Distance_Test_Process(); + int status=0; + uint16_t range_distance =0; + status = sts_tof_vl53lx_range_distance(&range_distance); + sts_sensor_install_height = range_distance; APP_LOG(TS_OFF, VLEVEL_M, "\nSensor Install Height =%4d mm\n", sts_sensor_install_height); tstbuf[i++] = (uint8_t) (2)&0xff; //length of following data tstbuf[i++] = (uint8_t) (sts_sensor_install_height>>8)&0xff; // MSB of sensor height @@ -1785,12 +1798,16 @@ void STS_SENSOR_Function_Test_Process(void) if (sts_sensor_install_height >= 2000) sts_door_jam_profile ++; //DOOR_JAM_2400 + if (sts_sensor_install_height >= 2400) sts_door_jam_profile ++; //DOOR_JAM_3000 + if (sts_sensor_install_height >= 3000) sts_door_jam_profile ++; //DOOR_JAM_3500 + if (sts_sensor_install_height >= 3500) sts_door_jam_profile ++; //DOOR_JAM_4000 + APP_LOG(TS_OFF, VLEVEL_M, "\r\nDOOR JAM PROFILE=%d \r\n", sts_door_jam_profile); } #endif #ifdef YUNHORN_STS_O6_ENABLED @@ -1817,8 +1834,8 @@ void STS_SENSOR_Function_Test_Process(void) #endif //MX_TOF_Process(); #ifdef STS_P2 - MX_TOF_Init(); - MX_TOF_Ranging_Process(); + //MX_TOF_Init(); + //MX_TOF_Ranging_Process(); #endif #ifdef VL53L0 PME_ON; diff --git a/STS/TOF/App/app_tof.c b/STS/TOF/App/app_tof.c index 226a4d3..601d9ba 100644 --- a/STS/TOF/App/app_tof.c +++ b/STS/TOF/App/app_tof.c @@ -134,7 +134,7 @@ uint16_t MX_TOF_Ranging_Process(void) #if (defined(STS_P2)||defined(STS_T6)) uint16_t range_distance=0; - uint8_t range_mode = 2; //STS_TOF_LONG_RANGE; + uint8_t range_mode = STS_TOF_LONG_RANGE; //STS_TOF_LONG_RANGE; STS_TOF_VL53LX_Range_Process(range_mode, &range_distance); APP_LOG(TS_OFF, VLEVEL_M, "\n VL53L1 Range distance =%u mm \n\r", (uint16_t)range_distance); @@ -483,10 +483,13 @@ void BSP_PB_Callback(Button_TypeDef Button) uint8_t sts_vl53lx_ranging(uint16_t *ranged_distance, uint8_t range_mode, uint16_t distance_threshold_mm, uint16_t inter_measurement_ms, uint16_t macro_timing, uint16_t roi_width, uint16_t sigma_mm, uint16_t signal_kcps) { + uint8_t status=0, dev=0x52; + uint16_t estimated_distance_mm=0; +#if 0 uint8_t status=0, dev=0x52; uint16_t estimated_distance_mm=0; status = VL53L1X_SensorInit(dev); - status += VL53L1X_SetDistanceMode(dev, 2); /* 1=short, 2=long, DISTANCE_MODE */ + status += VL53L1X_SetDistanceMode(dev, range_mode); /* 1=short, 2=long, DISTANCE_MODE */ status += VL53L1X_SetTimingBudgetInMs(dev, 100); /* TIMING_BUDGET, in ms possible values [15, 20, 50, 100, 200, 500] */ status += VL53L1X_SetInterMeasurementInMs(dev, 50); status += VL53L1X_SetROI(dev, 8, 8); /* minimum ROI 4,4 */ @@ -499,8 +502,9 @@ uint16_t roi_width, uint16_t sigma_mm, uint16_t signal_kcps) APP_LOG(TS_OFF, VLEVEL_L,"Start Range failed\n"); return (-1); } - +#endif status = VL53L1X_GetDistance(dev, &estimated_distance_mm); + status = VL53L1X_ClearInterrupt(dev); /* clear interrupt has to be called to enable next interrupt*/ APP_LOG(TS_OFF,VLEVEL_M,"Target detected! Distance =%d mm \r\n", estimated_distance_mm ); *ranged_distance = estimated_distance_mm; status = VL53L1X_StopRanging(dev); diff --git a/STS/TOF/App/app_tof_peoplecount.c b/STS/TOF/App/app_tof_peoplecount.c index 7f58865..a1b0bfb 100644 --- a/STS/TOF/App/app_tof_peoplecount.c +++ b/STS/TOF/App/app_tof_peoplecount.c @@ -39,7 +39,7 @@ volatile sts_zone_center_by_rows_of_spads_t zone_center[4]={ extern volatile uint8_t sts_door_jam_profile; volatile uint8_t sts_presence_state=0; static int PresenceState=0, PrevPresenceState=0; -volatile uint8_t sts_distance_mode = DOOR_JAM_2400; //sts_door_jam_profile; //DOOR_JAM_3000; +volatile uint8_t sts_distance_mode = DOOR_JAM_2400; //DOOR_JAM_2400; //sts_door_jam_profile; //DOOR_JAM_3000; #endif #if (defined(STS_P2)) volatile uint8_t sts_people_count_number_changed = 0; @@ -117,12 +117,13 @@ int ProcessPresenceDetectionData(int16_t Distance, uint8_t zone, uint8_t RangeSt MinDistance = Distances[zone][i]; } } - + APP_LOG(TS_OFF, VLEVEL_M, "\r\nMin Distance =%d ", MinDistance); if (MinDistance < ppc_cfg[sts_distance_mode].dist_threshold) { // Someone is in ! CurrentZoneStatus = SOMEONE; + APP_LOG(TS_OFF, VLEVEL_M, "---> Someone is in"); } - + APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); //return CurrentZoneStatus; #if 1 // left zone @@ -275,11 +276,13 @@ 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); if (MinDistance < ppc_cfg[sts_distance_mode].dist_threshold) { // Someone is in ! CurrentZoneStatus = SOMEONE; + APP_LOG(TS_OFF, VLEVEL_M, ">SOMEONE IN"); } + APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); // left zone if (zone == LEFT) { @@ -352,6 +355,9 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu APP_LOG(TS_OFF, VLEVEL_M,"Walk In, People Count=%d\n", PeopleCount); sts_people_count_sensor_data.Walk_In_People_Count ++; sts_people_count_number_changed = 1; + //LED1_ON; //TODO XXX, CHANGE TO (LED_IN_ON && LED_OUT_OFF); + LED1_TOGGLE; + } else if ((PathTrack[1] == 2) && (PathTrack[2] == 3) && (PathTrack[3] == 1)) { // This an exit PeopleCount --; @@ -360,11 +366,14 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu DistancesTableSize[1] = 0; APP_LOG(TS_OFF, VLEVEL_M,"Walk Out, People Count=%d\n", PeopleCount); sts_people_count_sensor_data.Walk_Out_People_Count ++; + //LED1_ON; //TODO XXX, CHANGE TO (LED_IN_OFF && LED_OUT_ON); + LED1_TOGGLE; sts_people_count_number_changed = 1; } else { // reset the table filling size also in case of unexpected path DistancesTableSize[0] = 0; DistancesTableSize[1] = 0; + APP_LOG(TS_OFF, VLEVEL_M,"Walk Around ie. Wrong path\n"); sts_people_count_sensor_data.Walk_Around_People_Count ++; } @@ -394,6 +403,7 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu #endif #endif } + //printf ("Inside PeopleCount = %d , returned\n", PeopleCount); // output debug data to main host machine return(PeopleCount); @@ -692,6 +702,10 @@ int sts_tof_vl53lx_peoplecount_init(void) /* Initialize and configure the device according to people counting need */ status = VL53L1X_SensorInit(dev); + sts_distance_mode = sts_door_jam_profile; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Door Jam Profile=%d, distance Mode =%d \r\n", sts_door_jam_profile, sts_distance_mode); + APP_LOG(TS_OFF, VLEVEL_M, "\r\n MaxDistance=%d, \nMinDistance=%d \ndist_threshold=%d \n timing_budget=%d \n distance_mode=%d \r\n", + ppc_cfg[sts_distance_mode].max_distance, ppc_cfg[sts_distance_mode].min_distance, ppc_cfg[sts_distance_mode].dist_threshold,ppc_cfg[sts_distance_mode].timing_budget,ppc_cfg[sts_distance_mode].distance_mode); status += VL53L1X_SetDistanceMode(dev, ppc_cfg[sts_distance_mode].distance_mode); /* 1=short, 2=long, DISTANCE_MODE */ status += VL53L1X_SetTimingBudgetInMs(dev, ppc_cfg[sts_distance_mode].timing_budget); /* TIMING_BUDGET, in ms possible values [15, 20, 50, 100, 200, 500] */ status += VL53L1X_SetInterMeasurementInMs(dev, ppc_cfg[sts_distance_mode].timing_budget); @@ -756,6 +770,7 @@ int sts_tof_vl53lx_peoplecount_start(void) if ((RangeStatus == 0) || (RangeStatus == 4) || (RangeStatus == 7)) { if (Distance <= ppc_cfg[sts_distance_mode].min_distance) //MIN_DISTANCE) // wraparound case see the explanation at the constants definition place Distance = ppc_cfg[sts_distance_mode].max_distance + ppc_cfg[sts_distance_mode].min_distance; //MAX_DISTANCE + MIN_DISTANCE; + APP_LOG(TS_OFF, VLEVEL_M, "\r\nRangeStatus=%d Distance=%d \r\n", RangeStatus, Distance); } else // severe error cases Distance = ppc_cfg[sts_distance_mode].max_distance; //MAX_DISTANCE; @@ -764,9 +779,36 @@ int sts_tof_vl53lx_peoplecount_start(void) //printf("\nPplCounter =%d \n\r", PplCounter); //sprintf(DisplayStr, "%4d", PplCounter); // only use for special EVK with display //XNUCLEO53L1A1_SetDisplayString(DisplayStr); - //APP_LOG(TS_OFF, VLEVEL_M,"%d,%d,%d\n", Zone, Distance, Signal); + //APP_LOG(TS_OFF, VLEVEL_M,"Zone, Distance, Signal = %d,%d,%d\n", Zone, Distance, Signal); Zone++; Zone = Zone%2; return 0; } +int sts_tof_vl53lx_range_distance(uint16_t *range_distance) +{ + + uint16_t wordData=0, Distance=0; + uint8_t RangeStatus; + uint8_t dataReady=0, status=0, dev=0x52; + + /* read and display data */ + + while (dataReady == 0) { + status = VL53L1X_CheckForDataReady(dev, &dataReady); + HAL_Delay(1); + wordData++; + if (wordData > 30) return -1; // 50 ms timer, so make this 60% to fail back + } + dataReady = 0; + //status += VL53L1X_GetRangeStatus(dev, &RangeStatus); + status += VL53L1X_GetDistance(dev, &Distance); + status += VL53L1X_ClearInterrupt(dev); /* clear interrupt has to be called to enable next interrupt*/ + if (status != 0) { + APP_LOG(TS_OFF, VLEVEL_L,"Error in operating the device\n"); + return (-1); + } + APP_LOG(TS_OFF, VLEVEL_M,"\r\nVL53L1X RANGE DISTANCE =%d \r\n", Distance); + *range_distance = Distance; + return status; +} diff --git a/STS/TOF/App/app_tof_peoplecount.h b/STS/TOF/App/app_tof_peoplecount.h index c5a6ed8..b84f7a6 100644 --- a/STS/TOF/App/app_tof_peoplecount.h +++ b/STS/TOF/App/app_tof_peoplecount.h @@ -172,6 +172,7 @@ int sts_tof_vl53lx_presence_detection_start(void); int sts_tof_vl53lx_peoplecount_init(void); int sts_tof_vl53lx_peoplecount_start(void); +int sts_tof_vl53lx_range_distance(uint16_t *range_distance); //int sts_tof_vl53lx_peoplecount(void); From c05dc010e578552437608812fc03c7fb67607cec Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Sun, 3 Nov 2024 11:26:18 +0800 Subject: [PATCH 2/3] wip...work good, yet not, if door jam profile changed --- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 159456 -> 159408 bytes STS/Core/Src/yunhorn_sts_process.c | 1 + STS/TOF/App/app_tof_peoplecount.c | 25 +++++++++++++++-------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 3c0989b8bffb33c94179f69c32d99c1cbedd3f0a..d6cdfe95d80066b83e5111a4d83cd084c2826eab 100644 GIT binary patch delta 35472 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 delta 35712 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 i=!BJiq=RmHyZ=lrwRv-t_K|s|NakyELwK} diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 78cfb0c..392b9a9 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -1670,6 +1670,7 @@ void OnRestoreSTSCFGContextProcess(void) //sampling_heartbeat_periodicity = (sampling_heartbeat_periodicity > 0)? sampling_heartbeat_periodicity : 1; // in seconds unit //sampling_heartbeat_periodicity = sampling_heartbeat_periodicity*1000; #ifdef STS_P2 + STS_TxPeriod_sec = periodicity; STS_HeartBeatTimerPeriod_sec = sampling_heartbeat_periodicity; #endif diff --git a/STS/TOF/App/app_tof_peoplecount.c b/STS/TOF/App/app_tof_peoplecount.c index a1b0bfb..f4df1e1 100644 --- a/STS/TOF/App/app_tof_peoplecount.c +++ b/STS/TOF/App/app_tof_peoplecount.c @@ -3,6 +3,7 @@ #include "main.h" #include "sys_app.h" /* USER CODE BEGIN Includes */ +#include "yunhorn_sts_sensors.h" #include "app_tof_peoplecount.h" #ifdef STS_P2 #include "VL53L1X_API.h" @@ -17,17 +18,23 @@ extern I2C_HandleTypeDef hi2c2; volatile sts_people_count_sensor_data_t sts_people_count_sensor_data={0,0,0,2,'M',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; extern volatile uint32_t STS_TOFScanPeriod_sec, STS_TxPeriod_sec, STS_HeartBeatTimerPeriod_sec; +extern volatile sts_cfg_nvm_t sts_cfg_nvm; volatile uint8_t sts_tof_presence_state=0, sts_tof_presence_state_changed=0; /* TIMING_BUDGET, in ms possible values [15, 20, 50, 100, 200, 500] */ /* DISTANCE_THRESHOLD = MAX - ASSUME_CHILD_HEIGHT(800mm) */ volatile sts_ppc_cfg_type_t ppc_cfg[6] = { + {DOOR_JAM_2000, 8, 2000,0,1600,8,33,DISTANCE_MODE_SHORT,175,247}, + {DOOR_JAM_2000, 8, 2000,0,1600,8,33,DISTANCE_MODE_SHORT,175,247}, + {DOOR_JAM_2400, 10, 2400,0,1600,8,33,DISTANCE_MODE_LONG,175,231}, +/* {DOOR_JAM_2000, 16, 2000,0, 1200,16, tbms_33,DISTANCE_MODE_LONG,199,199}, {DOOR_JAM_2400, 10, 2400,0, 1600,8, tbms_50,DISTANCE_MODE_LONG,175,231}, {DOOR_JAM_3000, 10, 3000,0, 2200,8,tbms_100,DISTANCE_MODE_LONG,175,231}, {DOOR_JAM_3500, 10, 3500,0, 2700,8,tbms_100,DISTANCE_MODE_LONG,175,231}, {DOOR_JAM_4000, 10, 4000,0, 3200,8,tbms_200,DISTANCE_MODE_LONG,175,231}, {DOOR_SIDE_1600, 8, 1600,0, 300,8, tbms_33,DISTANCE_MODE_SHORT,175,231}, +*/ }; volatile sts_zone_center_by_rows_of_spads_t zone_center[4]={ {4, 151, 247}, @@ -117,13 +124,13 @@ int ProcessPresenceDetectionData(int16_t Distance, uint8_t zone, uint8_t RangeSt MinDistance = Distances[zone][i]; } } - APP_LOG(TS_OFF, VLEVEL_M, "\r\nMin Distance =%d ", MinDistance); + //APP_LOG(TS_OFF, VLEVEL_M, "\r\nMin Distance =%d ", MinDistance); if (MinDistance < ppc_cfg[sts_distance_mode].dist_threshold) { // Someone is in ! CurrentZoneStatus = SOMEONE; - APP_LOG(TS_OFF, VLEVEL_M, "---> Someone is in"); + //APP_LOG(TS_OFF, VLEVEL_M, "---> Someone is in"); } - APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); + //APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); //return CurrentZoneStatus; #if 1 // left zone @@ -276,13 +283,13 @@ 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 MinDistance & dist_threshold ---%d %d", MinDistance,ppc_cfg[sts_distance_mode].dist_threshold); if (MinDistance < ppc_cfg[sts_distance_mode].dist_threshold) { // Someone is in ! CurrentZoneStatus = SOMEONE; - APP_LOG(TS_OFF, VLEVEL_M, ">SOMEONE IN"); + //APP_LOG(TS_OFF, VLEVEL_M, ">SOMEONE IN"); } - APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); + //APP_LOG(TS_OFF, VLEVEL_M, "\r\n"); // left zone if (zone == LEFT) { @@ -546,6 +553,8 @@ void STS_TOF_VL53LX_PeopleCounting_Process_Init(void) { APP_LOG(TS_OFF, VLEVEL_M,"\n\n# YUNHORN STS-P2 PEOPLE COUNTING PROCESS #\r\n"); sts_tof_vl53lx_peoplecount_init(); + sts_people_count_sensor_data.Count_Period = sts_cfg_nvm.periodicity; + sts_people_count_sensor_data.Count_Period_Unit = sts_cfg_nvm.unit; } @@ -702,7 +711,7 @@ int sts_tof_vl53lx_peoplecount_init(void) /* Initialize and configure the device according to people counting need */ status = VL53L1X_SensorInit(dev); - sts_distance_mode = sts_door_jam_profile; + sts_distance_mode = (sts_door_jam_profile ==5)?DISTANCE_MODE_SHORT:DISTANCE_MODE_LONG; APP_LOG(TS_OFF, VLEVEL_M, "\r\n Door Jam Profile=%d, distance Mode =%d \r\n", sts_door_jam_profile, sts_distance_mode); APP_LOG(TS_OFF, VLEVEL_M, "\r\n MaxDistance=%d, \nMinDistance=%d \ndist_threshold=%d \n timing_budget=%d \n distance_mode=%d \r\n", ppc_cfg[sts_distance_mode].max_distance, ppc_cfg[sts_distance_mode].min_distance, ppc_cfg[sts_distance_mode].dist_threshold,ppc_cfg[sts_distance_mode].timing_budget,ppc_cfg[sts_distance_mode].distance_mode); @@ -770,7 +779,7 @@ int sts_tof_vl53lx_peoplecount_start(void) if ((RangeStatus == 0) || (RangeStatus == 4) || (RangeStatus == 7)) { if (Distance <= ppc_cfg[sts_distance_mode].min_distance) //MIN_DISTANCE) // wraparound case see the explanation at the constants definition place Distance = ppc_cfg[sts_distance_mode].max_distance + ppc_cfg[sts_distance_mode].min_distance; //MAX_DISTANCE + MIN_DISTANCE; - APP_LOG(TS_OFF, VLEVEL_M, "\r\nRangeStatus=%d Distance=%d \r\n", RangeStatus, Distance); + //APP_LOG(TS_OFF, VLEVEL_M, "\r\nRangeStatus=%d Distance=%d \r\n", RangeStatus, Distance); } else // severe error cases Distance = ppc_cfg[sts_distance_mode].max_distance; //MAX_DISTANCE; From 53eef4569b618499bd9bf62fbcec5d4ffbc9aab9 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Sun, 3 Nov 2024 18:08:44 +0800 Subject: [PATCH 3/3] wip --- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 159408 -> 159648 bytes STS/Core/Inc/yunhorn_sts_prd_conf.h | 4 +- STS/Core/Inc/yunhorn_sts_sensors.h | 4 +- STS/Core/Src/yunhorn_sts_process.c | 71 +++++++-- STS/TOF/App/app_tof_peoplecount.c | 181 +++++++++++++++-------- STS/TOF/App/app_tof_peoplecount.h | 17 ++- 6 files changed, 200 insertions(+), 77 deletions(-) diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index d6cdfe95d80066b83e5111a4d83cd084c2826eab..812681e82ecd41f1fc14ab7c0bd4cb4aa7f4713a 100644 GIT binary patch delta 47383 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 O+jWjdkD#>b-~R!5>OgY< diff --git a/STS/Core/Inc/yunhorn_sts_prd_conf.h b/STS/Core/Inc/yunhorn_sts_prd_conf.h index be73bb6..59ecd04 100644 --- a/STS/Core/Inc/yunhorn_sts_prd_conf.h +++ b/STS/Core/Inc/yunhorn_sts_prd_conf.h @@ -369,7 +369,9 @@ enum sts_lamp_color { */ #define STS_CONFIG_NVM_BASE_ADDRESS FLASH_USER_START_ADDR -#define STS_CONFIG_NVM_CONFIG_SIZE FLASH_USER_CONFIG_SIZE +#define STS_CONFIG_NVM_CONFIG_SIZE FLASH_USER_CONFIG_SIZE +#define STS_SENSOR_DATA_NVM_BASE_ADDRESS ((void *) 0x0803F000U) // Last 4kB of flash +#define STS_SENSOR_DATA_NVM_SIZE ((void *) 0x000007FFU) //0x400=1KB=1024 /*---------------------------------------------------------------------------*/ /* LoRaWAN NVM configuration */ /*---------------------------------------------------------------------------*/ diff --git a/STS/Core/Inc/yunhorn_sts_sensors.h b/STS/Core/Inc/yunhorn_sts_sensors.h index 4fa99cb..8dc2ce4 100644 --- a/STS/Core/Inc/yunhorn_sts_sensors.h +++ b/STS/Core/Inc/yunhorn_sts_sensors.h @@ -238,7 +238,9 @@ void OnStoreSTSCFGContextRequest(void); /** * @brief Read config from flash */ -void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm); +void OnRestoreSTSCFGContextRequest(void *cfg_in_nvm); + +void OnRestoreSTSLOGContextRequest(void *log_in_nvm); void STS_REBOOT_CONFIG_Init(void); diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 392b9a9..1a8c6ba 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -47,8 +47,10 @@ #if defined(STS_P2)||defined(STS_T6) #include "app_tof.h" #include "app_tof_peoplecount.h" +extern volatile sts_people_count_sensor_data_t *sts_people_count_sensor_data; extern volatile uint8_t sts_door_jam_profile; extern volatile uint8_t sts_tof_presence_state_changed; +extern volatile sts_ppc_cfg_type_t ppc_cfg[]; #elif defined(L8) #include "app_tof.h" #endif @@ -71,6 +73,11 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = { 0x00, //sts_ioc_mask 0x20, //32 bytes, below start of p[0] 20 BYTES AND 12 BYTES FALL DOWN CFG { // below 20 bytes +#ifdef STS_P2 + 0x0,0x8,0x10,0x0,0x3,0x8,0x21,0x1,0xaf,0xe7, //current work config profile short + 0x1,0x8,0x10,0x0,0x3,0x8,0x21,0x1,0xaf,0xe7, //current work config profile long, after measured distance + // change the max distance, min distance, SPAD, front center and back center, etc. +#else 0x08, //start_m [8]*0.1 meter =0.8 0x19, //lenght_m 0x19=[25]*0.1=2.5f meter 0x0F, //threshold 0X0F=[15]*0.1=1.5f @@ -91,6 +98,7 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = { 0x00, //reserve --P[17] 0x00, //reserve --P[18] 0x00, //reserve --P[19] +#endif }, // above 20 bytes 0x00, //reserve2 0x00, //reserve3 @@ -137,7 +145,7 @@ extern volatile int sts_tof_distance_data[MAX_TOF_COUNT]; volatile sts_tof_range_data_t sts_range_sensor_data={0x0,0x0,0x0}; #endif #if defined(STS_P2)||defined(STS_T6) -volatile uint8_t sts_door_jam_profile = 0; +volatile uint8_t sts_door_jam_profile = DOOR_JAM_2400; #endif #ifdef STS_R4 volatile uint8_t sts_soap_level_state=0; @@ -647,6 +655,22 @@ 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]; + } + + 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]; + break; + default: break; } @@ -1084,6 +1108,7 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s break; case 'M': /* "YZM": Mask level */ i = 0; + outbuf[i++] = (uint8_t)'Y'; outbuf[i++] = (uint8_t)'M'; outbuf[i++] = (uint8_t)sts_service_mask; outbuf[i++] = (uint8_t)sts_work_mode; @@ -1169,6 +1194,17 @@ 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 'M': + uint8_t log_in_nvm[YUNHORN_STS_MAX_NVM_CFG_SIZE]={0x0}; + OnRestoreSTSLOGContextRequest((void*)&log_in_nvm); + i=0; + outbuf[0] = 0x4D; // 'M' for MEM IN FLASH + UTIL_MEM_cpy_8(outbuf+1, log_in_nvm,32); + i=33; + STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); + + break; + default: break; } @@ -1252,8 +1288,12 @@ void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_s APP_LOG(TS_OFF,VLEVEL_M, "\nSTS Tx Periodicty changed to %u sec\n\r", STS_TxPeriod_sec); #ifdef STS_R4 OnYunhornSTSTxPeriodicityChanged(STS_TxPeriod_sec*1000); -#elif defined(STS_R1D)||defined(STS_R1)||defined(STS_R5)||defined(STS_P2)||defined(STS_O6T)||defined(STS_R2)||defined(STS_R3)||defined(STS_R6)||defined(STS_O5)||defined(STS_M1) +#elif defined(STS_R1D)||defined(STS_R1)||defined(STS_R5)||defined(STS_O6T)||defined(STS_R2)||defined(STS_R3)||defined(STS_R6)||defined(STS_O5)||defined(STS_M1) OnYunhornSTSTxPeriodicityChanged(STS_TxPeriod_sec*1000); +#elif defined(STS_P2) + OnYunhornSTSTxPeriodicityChanged(STS_TxPeriod_sec*1000); + sts_people_count_sensor_data->Count_Period = (uint8_t)((tlv_buf[CFG_CMD3]-0x30)*10+ (tlv_buf[CFG_CMD4]-0x30)); + sts_people_count_sensor_data->Count_Period_Unit = (uint8_t)tlv_buf[CFG_CMD5]; #elif defined(STS_O6)||defined(STS_O7) OnYunhornSTSHeartBeatPeriodicityChanged(periodicity_length); #endif @@ -1551,7 +1591,7 @@ void OnStoreSTSCFGContextRequest(void) /* USER CODE END OnStoreContextRequest_Last */ } -void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm) +void OnRestoreSTSCFGContextRequest(void *cfg_in_nvm) { /* USER CODE BEGIN OnRestoreSTSCFGContextRequest_1 */ @@ -1562,6 +1602,16 @@ void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm) /* USER CODE END OnRestoreSTSCFGContextRequest_Last */ } +void OnRestoreSTSLOGContextRequest(void *log_in_nvm) +{ + /* USER CODE BEGIN OnRestoreSTSCFGContextRequest_1 */ + + /* USER CODE END OnRestoreSTSCFGContextRequest_1 */ + UTIL_MEM_cpy_8((void*)log_in_nvm, (void *)STS_SENSOR_DATA_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); + /* USER CODE BEGIN OnRestoreSTSCFGContextRequest_Last */ + + /* USER CODE END OnRestoreSTSCFGContextRequest_Last */ +} void STS_REBOOT_CONFIG_Init(void) { @@ -1672,6 +1722,8 @@ void OnRestoreSTSCFGContextProcess(void) #ifdef STS_P2 STS_TxPeriod_sec = periodicity; STS_HeartBeatTimerPeriod_sec = sampling_heartbeat_periodicity; + sts_people_count_sensor_data->Count_Period = sts_cfg_nvm.periodicity; + sts_people_count_sensor_data->Count_Period_Unit = sts_cfg_nvm.unit; #endif @@ -1795,21 +1847,22 @@ void STS_SENSOR_Function_Test_Process(void) if ((sts_sensor_install_height >= 1500)&&(sts_sensor_install_height<=4000)) { - sts_door_jam_profile = DOOR_JAM_2000; // DOOR_JAM_2000: assume door_jame less 2000mm + sts_door_jam_profile = DOOR_JAM_1600; // assume door_jame less 1600mm profile =1 - if (sts_sensor_install_height >= 2000) - sts_door_jam_profile ++; //DOOR_JAM_2400 + if (sts_sensor_install_height >= 1600) + sts_door_jam_profile ++; //DOOR_JAM_2400, profile =2 if (sts_sensor_install_height >= 2400) - sts_door_jam_profile ++; //DOOR_JAM_3000 + sts_door_jam_profile ++; //DOOR_JAM_3000, profile =3 if (sts_sensor_install_height >= 3000) - sts_door_jam_profile ++; //DOOR_JAM_3500 + sts_door_jam_profile ++; //DOOR_JAM_3500, profile = 4 if (sts_sensor_install_height >= 3500) - sts_door_jam_profile ++; //DOOR_JAM_4000 + sts_door_jam_profile ++; //DOOR_JAM_4000, profile = 5 APP_LOG(TS_OFF, VLEVEL_M, "\r\nDOOR JAM PROFILE=%d \r\n", sts_door_jam_profile); } + #endif #ifdef YUNHORN_STS_O6_ENABLED tstbuf[i++] = (uint8_t)20; //length of following data diff --git a/STS/TOF/App/app_tof_peoplecount.c b/STS/TOF/App/app_tof_peoplecount.c index f4df1e1..b51bd60 100644 --- a/STS/TOF/App/app_tof_peoplecount.c +++ b/STS/TOF/App/app_tof_peoplecount.c @@ -5,6 +5,8 @@ /* USER CODE BEGIN Includes */ #include "yunhorn_sts_sensors.h" #include "app_tof_peoplecount.h" +#include "flash_if.h" +#include "stm32_mem.h" #ifdef STS_P2 #include "VL53L1X_API.h" #include "VL53l1X_calibration.h" @@ -19,22 +21,19 @@ extern I2C_HandleTypeDef hi2c2; volatile sts_people_count_sensor_data_t sts_people_count_sensor_data={0,0,0,2,'M',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; extern volatile uint32_t STS_TOFScanPeriod_sec, STS_TxPeriod_sec, STS_HeartBeatTimerPeriod_sec; extern volatile sts_cfg_nvm_t sts_cfg_nvm; +extern volatile uint8_t nvm_store_value[]; volatile uint8_t sts_tof_presence_state=0, sts_tof_presence_state_changed=0; /* TIMING_BUDGET, in ms possible values [15, 20, 50, 100, 200, 500] */ /* DISTANCE_THRESHOLD = MAX - ASSUME_CHILD_HEIGHT(800mm) */ +// door jam profile volatile sts_ppc_cfg_type_t ppc_cfg[6] = { - {DOOR_JAM_2000, 8, 2000,0,1600,8,33,DISTANCE_MODE_SHORT,175,247}, - {DOOR_JAM_2000, 8, 2000,0,1600,8,33,DISTANCE_MODE_SHORT,175,247}, - {DOOR_JAM_2400, 10, 2400,0,1600,8,33,DISTANCE_MODE_LONG,175,231}, -/* - {DOOR_JAM_2000, 16, 2000,0, 1200,16, tbms_33,DISTANCE_MODE_LONG,199,199}, - {DOOR_JAM_2400, 10, 2400,0, 1600,8, tbms_50,DISTANCE_MODE_LONG,175,231}, - {DOOR_JAM_3000, 10, 3000,0, 2200,8,tbms_100,DISTANCE_MODE_LONG,175,231}, - {DOOR_JAM_3500, 10, 3500,0, 2700,8,tbms_100,DISTANCE_MODE_LONG,175,231}, - {DOOR_JAM_4000, 10, 4000,0, 3200,8,tbms_200,DISTANCE_MODE_LONG,175,231}, - {DOOR_SIDE_1600, 8, 1600,0, 300,8, tbms_33,DISTANCE_MODE_SHORT,175,231}, -*/ + {DOOR_SIDE_1300,10, 1300,0, 1200,8,33, DISTANCE_MODE_SHORT,175,231}, + {DOOR_JAM_1600, 10, 1600,0, 1300,8,33, DISTANCE_MODE_SHORT,175,231}, + {DOOR_JAM_2400, 10, 2400,0, 1600,8,33, DISTANCE_MODE_LONG,175,231}, + {DOOR_JAM_3000, 10, 3000,0, 2200,8,100,DISTANCE_MODE_LONG,175,231}, + {DOOR_JAM_3500, 10, 3500,0, 2700,8,100,DISTANCE_MODE_LONG,175,231}, + {DOOR_JAM_4000, 10, 4000,0, 3200,8,200,DISTANCE_MODE_LONG,175,231}, }; volatile sts_zone_center_by_rows_of_spads_t zone_center[4]={ {4, 151, 247}, @@ -50,8 +49,8 @@ volatile uint8_t sts_distance_mode = DOOR_JAM_2400; //DOOR_JAM_2400; //sts_door_ #endif #if (defined(STS_P2)) volatile uint8_t sts_people_count_number_changed = 0; -static uint32_t cnt_today=0, cnt_week=0; -static uint8_t last_year=0, this_year=0,last_month=0, this_month=0,last_week=0, this_week=0,last_day=0, this_day=0; +static uint32_t cnt_today=0, cnt_day=0, cnt_week=0, cnt_month=0, cnt_year=0; +//static uint8_t last_year=0, this_year=0,last_month=0, this_month=0,last_week=0, this_week=0,last_day=0, this_day=0; #endif uint16_t dev=0x52; extern uint16_t sensor_id; @@ -60,7 +59,8 @@ volatile int IntCount; #define isInterrupt 1 /* If isInterrupt = 1 then device working in interrupt mode, else device working in polling mode */ /* USER CODE END PV */ static int PplCounter; -static int center[2] = {FRONT_ZONE_CENTER,BACK_ZONE_CENTER}; //{ppc_cfg[sts_distance_mode].front_zone_center, ppc_cfg[sts_distance_mode].back_zone_center}; /* these are the spad center of the 2 4*16 zones */ +static int center[2] = {FRONT_ZONE_CENTER,BACK_ZONE_CENTER}; + static int Zone = 0; static int PathTrack[] = {0,0,0,0}; static int PathTrackFillingSize = 1; // init this to 1 as we start from state where nobody is any of the zones @@ -265,14 +265,14 @@ int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatu int AnEventHasOccured = 0; // Add just picked distance to the table of the corresponding zone - if (DistancesTableSize[zone] < ppc_cfg[sts_distance_mode].distance_array_size) { + if (DistancesTableSize[zone] < ppc_cfg[sts_door_jam_profile].distance_array_size) { Distances[zone][DistancesTableSize[zone]] = Distance; DistancesTableSize[zone] ++; } else { - for (i=1; iSOMEONE IN"); @@ -429,8 +429,8 @@ void STS_people_count_sensor_Read(sts_people_count_sensor_data_t *sts_p2_sensor_ sts_p2_sensor_data->Walk_In_People_Count = sts_people_count_sensor_data.Walk_In_People_Count; sts_p2_sensor_data->Walk_Out_People_Count = sts_people_count_sensor_data.Walk_Out_People_Count; sts_p2_sensor_data->Walk_Around_People_Count = sts_people_count_sensor_data.Walk_Around_People_Count; - sts_p2_sensor_data->Count_Period = sts_people_count_sensor_data.Count_Period; - sts_p2_sensor_data->Count_Period_Unit = sts_people_count_sensor_data.Count_Period_Unit; + sts_p2_sensor_data->Count_Period = sts_cfg_nvm.periodicity; //sts_people_count_sensor_data.Count_Period; + sts_p2_sensor_data->Count_Period_Unit = sts_cfg_nvm.unit; //sts_people_count_sensor_data.Count_Period_Unit; // Sum Day counting // if not end of day --- @@ -506,40 +506,80 @@ void STS_people_count_sensor_Read(sts_people_count_sensor_data_t *sts_p2_sensor_ sts_people_count_sensor_data.Walk_Around_People_Count = 0; } - if (cnt_today ==0) + //if (cnt_today ==0) { // new day, then check week/month/year, not check every time // reset counter at end of day TODO XXX - if (last_day != this_day) { - cnt_today = 0; - + cnt_day ++; + if (cnt_day >=7) { + cnt_day = 0; sts_people_count_sensor_data.Sum_Day_Walk_In_People_Count = 0; sts_people_count_sensor_data.Sum_Day_Walk_Out_People_Count = 0; sts_people_count_sensor_data.Sum_Day_Walk_Around_People_Count = 0; - } - if (cnt_week) - // reset counter at end of week TODO XXX - if (last_week != this_week) { + cnt_week++; + if (cnt_week >= 4 ) { + cnt_week =0; + sts_people_count_sensor_data.Sum_Week_Walk_In_People_Count = 0; + sts_people_count_sensor_data.Sum_Week_Walk_Out_People_Count = 0; + sts_people_count_sensor_data.Sum_Week_Walk_Around_People_Count = 0; - sts_people_count_sensor_data.Sum_Week_Walk_In_People_Count = 0; - sts_people_count_sensor_data.Sum_Week_Walk_Out_People_Count = 0; - sts_people_count_sensor_data.Sum_Week_Walk_Around_People_Count = 0; + cnt_month++; + if (cnt_month >=12) { + cnt_month =0; + + sts_people_count_sensor_data.Sum_Month_Walk_In_People_Count = 0; + sts_people_count_sensor_data.Sum_Month_Walk_Out_People_Count = 0; + sts_people_count_sensor_data.Sum_Month_Walk_Around_People_Count = 0; + + cnt_year++; + sts_people_count_sensor_data.Sum_Year_Walk_In_People_Count = 0; + sts_people_count_sensor_data.Sum_Year_Walk_Out_People_Count = 0; + sts_people_count_sensor_data.Sum_Year_Walk_Around_People_Count = 0; + } + } } - // reset counter at end of month TODO XXX - if (last_month != this_month) { + uint16_t sts_p2_data_to_nvm[32] ={0x0}, pp =0; + // OnRestoreSTSLOGContextRequest((void*)sts_p2_data_to_nvm); + // TODO XXX, better read the data in flash and then add up today's data + // TODO XXX - sts_people_count_sensor_data.Sum_Month_Walk_In_People_Count = 0; - sts_people_count_sensor_data.Sum_Month_Walk_Out_People_Count = 0; - sts_people_count_sensor_data.Sum_Month_Walk_Around_People_Count = 0; - } + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Day_Walk_In_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Day_Walk_Out_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Day_Walk_Around_People_Count; - if (last_year != this_year) { + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Week_Walk_In_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Week_Walk_Out_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Week_Walk_Around_People_Count; + + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Month_Walk_In_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Month_Walk_Out_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Month_Walk_Around_People_Count; + + + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Year_Walk_In_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Year_Walk_Out_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_Year_Walk_Around_People_Count; + + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_LifeCycle_Walk_In_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_LifeCycle_Walk_Out_People_Count; + sts_p2_data_to_nvm[pp++] = sts_people_count_sensor_data.Sum_LifeCycle_Walk_Around_People_Count; +/* + APP_LOG(TS_OFF, VLEVEL_M, "\n-----------------------------------------------\n"); + APP_LOG(TS_OFF, VLEVEL_M, "\n00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15\n"); + for (uint8_t i=0; i