From f8460f8b004842c9b038800a216ecb69f55991d0 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 11 Jun 2024 14:26:25 +0800 Subject: [PATCH] stable STS-O6 O7 --- Core/Inc/sts_lamp_bar.h | 26 ++++++++-------- Core/Src/sts_lamp_bar.c | 47 +++++++++++++++++------------ Core/Src/yunhorn_sts_presence_rss.c | 32 ++++++++++++++------ Core/Src/yunhorn_sts_process.c | 5 --- LoRaWAN/App/lora_app.c | 24 +++++++++------ 5 files changed, 78 insertions(+), 56 deletions(-) diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index e77b08f..87726ac 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -36,18 +36,20 @@ extern "C" { #define STS_Status_SOS_Release (1) //Normal Open NO:Close enum sts_lamp_color { - STS_DARK = 0, //灭:0 - STS_GREEN, //绿:1 0 1 0 - STS_RED, //红:2 1 0 0 - STS_BLUE, //蓝:3 0 0 1 - STS_YELLOW, //黄:4 1 1 0 - STS_PINK, //紫:5 1 0 1 - STS_CYAN, //青:6 0 1 1 - STS_WHITE, //白:7 1 1 1 - STS_COLOR_MAX, - STS_RED_BLUE=0x23, //红蓝闪烁:8 - STS_RED_DARK=0x20 //RD: 9 1 0 0 RED Flash - // MAX NUM OF COLORS + STS_DARK = 0, //灭:0, Code 0x00 + STS_GREEN, //绿:1 0 1 0 code 0x01 0b0000 0001 + STS_RED, //红:2 1 0 0 code 0x02 0b0000 0010 + STS_BLUE, //蓝:3 0 0 1 code 0x03 0b0000 0011 + STS_YELLOW, //黄:4 1 1 0 code 0x04 0b0000 0100 + STS_PINK, //紫:5 1 0 1 code 0x05 0b0000 0101 + STS_CYAN, //青:6 0 1 1 code 0x06 0b0000 0110 + STS_WHITE, //白:7 1 1 1 code 0x07 0b0000 0111 + STS_COLOR_MAX, //8: MAX NUM OF COLORS 0x08 0b0000 1000 + + STS_GREEN_DARK=0x10, //0b0001 0000 GREEN DARK + STS_RED_DARK=0x20, //0b0010 0000, + STS_BLUE_DARK=0x30, //0b0011 0000 BLUE DARK + STS_RED_BLUE=0x23 //0b0010 0011 RED BLUE FLASH }; enum sts_oo_work_mode { diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 82d0871..f8aca6a 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -282,31 +282,38 @@ void STS_Combined_Status_Processing(void) } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) { sts_status_color = STS_RED; + + if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) + { + sts_status_color = STS_RED_BLUE; + } } switch(sts_fall_rising_detected_result) { - case STS_PRESENCE_LAYDOWN: + case STS_PRESENCE_NONE: + //do nothing + break; + + case STS_PRESENCE_LAYDOWN: sts_lamp_bar_color = STS_YELLOW; sts_status_color = STS_YELLOW; - break; - case STS_PRESENCE_FALL: //RED_BLUE FLASH + break; + + case STS_PRESENCE_FALL: //RED_BLUE FLASH sts_lamp_bar_color = STS_RED_BLUE; sts_status_color = STS_RED_BLUE; - break; - case STS_PRESENCE_RISING: //NORMAL OCCUPANCY STATUS - sts_lamp_bar_color = STS_RED; - sts_status_color = STS_RED; - break; - default: - sts_lamp_bar_color = STS_RED; - sts_status_color = STS_RED; - break; - } + break; - if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) - { - sts_status_color = STS_RED_BLUE; + case STS_PRESENCE_RISING: //NORMAL OCCUPANCY STATUS + // sts_lamp_bar_color = STS_RED; + // sts_status_color = STS_RED; + break; + + default: +// sts_lamp_bar_color = STS_RED; +// sts_status_color = STS_RED; + break; } break; @@ -420,7 +427,7 @@ void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) void STS_Lamp_Bar_Self_Test_Simple(void) { uint8_t color=0, lum_level=DEFAULT_LUMINANCE_LEVEL; - APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Lumianance Level Testing Start\r\n"); + APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#1] RGB Space Lumianance Level Testing Start\r\n"); for (color=STS_GREEN; color < STS_COLOR_MAX; color++) { lum_level = 10; @@ -431,13 +438,13 @@ void STS_Lamp_Bar_Self_Test_Simple(void) } while (lum_level < 99); STS_Lamp_Bar_Set_Dark(); } - APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Lumianance Level Testing Finished\r\n"); + APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#1] RGB Space Lumianance Level Testing Finished\r\n"); } void STS_Lamp_Bar_Self_Test(void) { uint8_t color=0, lum_level=DEFAULT_LUMINANCE_LEVEL; - APP_LOG(TS_OFF, VLEVEL_M, "\r\n YunHorn STS Indicative Lamp Self Test\r\n"); + APP_LOG(TS_OFF, VLEVEL_H, "\r\n YunHorn STS Indicative Lamp Self Test\r\n"); STS_Lamp_Bar_Self_Test_Simple(); @@ -448,7 +455,7 @@ void STS_Lamp_Bar_Self_Test(void) } STS_Lamp_Bar_Set_Dark(); - APP_LOG(TS_OFF, VLEVEL_M, "\r\n [##] YunHorn STS Indicative Lamp Self Test Finished\r\n"); + APP_LOG(TS_OFF, VLEVEL_H, "\r\n [##] YunHorn STS Indicative Lamp Self Test Finished\r\n"); if ((sts_work_mode == STS_WIRED_MODE) ) { STS_Lamp_Bar_Set_Dark(); diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c index 8cba4bd..b56f8a8 100644 --- a/Core/Src/yunhorn_sts_presence_rss.c +++ b/Core/Src/yunhorn_sts_presence_rss.c @@ -95,7 +95,7 @@ volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config; //static void update_configuration(acc_detector_presence_configuration_t presence_configuration); static void print_result(acc_detector_presence_result_t result); -volatile uint16_t motion_count, motion_feature_count; +volatile uint16_t motion_count=0, motion_feature_count=0; static acc_detector_presence_result_t sts_motion_dataset[DEFAULT_MOTION_DATASET_LEN]; static STS_PRESENCE_Motion_Featuer_t sts_motion_feature[DEFAULT_MOTION_FEATURE_LEN]; volatile uint8_t sts_fall_rising_detected_result = STS_PRESENCE_NONE; @@ -374,7 +374,7 @@ int sts_presence_rss_fall_rise_detection(void) uint16_t detected_zone=0; //for (k=0; k<5; k++) {motion_in_zone[k]=0;} #if 1 - for (int i = 0; i < (iterations/2); i++) + for (int i = 0; i < (iterations); i++) { success = acc_detector_presence_get_next(handle, &result); if (!success) @@ -402,18 +402,21 @@ int sts_presence_rss_fall_rise_detection(void) if (motion_count ++ == DEFAULT_MOTION_DATASET_LEN) { + STS_YunhornCheckStandardDeviation(); + motion_count = 0; } } } - acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // DEFAULT_UPDATE_RATE); + //acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE); + //acc_integration_sleep_ms(1); } acc_detector_presence_deactivate(handle); - APP_LOG(TS_OFF, VLEVEL_H,"First Half Presence Detection, Motion Count = %u \r\n", (int)motion_count); + #endif // ******** Second Half detection of fall down and rise up //if (sts_presence_fall_detection == 1) @@ -465,16 +468,19 @@ int sts_presence_rss_fall_rise_detection(void) if (motion_count ++ == DEFAULT_MOTION_DATASET_LEN) { + STS_YunhornCheckStandardDeviation(); motion_count = 0; + } } } - acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // DEFAULT_UPDATE_RATE); + //acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15 ms, DEFAULT_UPDATE_RATE); + //acc_integration_sleep_ms(1); } //APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); - APP_LOG(TS_OFF, VLEVEL_H,"Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); + sts_rss_result = (average_result > 1)? 1: 0; if (sts_rss_result) {LED1_ON;} else {LED1_OFF;} @@ -487,12 +493,16 @@ int sts_presence_rss_fall_rise_detection(void) * */ - APP_LOG(TS_OFF, VLEVEL_H,"Average Motion Result = %u OUTPUT RSS RESULT=%u \r\n", (int)average_result, sts_rss_result); +#ifdef LOG_RSS for (k=0; k<10; k++) { - if (motion_in_zone[k]>0) - APP_LOG(TS_OFF, VLEVEL_L,"\nMotion in Zone %u, Count=%u \r\n", k, motion_in_zone[k]); + if (motion_in_zone[k]>0) { + APP_LOG(TS_OFF, VLEVEL_M,"\r\nMotion Distance Zone: %2u %4u %4d cm", k, motion_in_zone[k], (80+k*40)); + } + else { + APP_LOG(TS_OFF, VLEVEL_M,"\r\nMotion Distance Zone: %2u %4s", k, " "); + } } - +#endif average_distance = (1000.0f*average_distance)/average_result; // in meters average_score = (1000.0f*average_score)/average_result; sts_presence_rss_distance = average_distance; @@ -610,8 +620,10 @@ void STS_YunhornCheckStandardDeviation(void) APP_LOG(TS_OFF, VLEVEL_L, "\r\n-------------Distance Average =%6u; Variance = %6u ; Standard =%6u \r\n", (int)(average_presence_distance*1000.0f), (int)(variance_presence_distance*1000.0f), (int)(standard_variance_presence_distance*1000.0f)); #endif +#ifdef LOG_RSS APP_LOG(TS_OFF, VLEVEL_M, "-------------Motion Average =%6u; Variance = %6u ; Standard =%6u \r\n", (int)(average_presence_score*1000.0f), (int)(variance_presence_score*1000.0f), (int)(standard_variance_presence_score*1000.0f)); +#endif #ifdef LOG_RSS APP_LOG(TS_OFF, VLEVEL_L, "-------------ROC Dist Average =%6u; Variance = %6u ; Standard =%6u \r\n", (int)(average_roc_distance), (int)(variance_roc_distance), (int)(standard_variance_roc_distance)); diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 7520230..5aff5fb 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -241,16 +241,11 @@ void STS_YunhornSTSEventP2_Process(void) //STS_Lamp_Bar_Refresh(); //TODO XXX eliminate refresh every second.... try if ((sts_work_mode >= STS_RSS_MODE) && (sts_work_mode <= STS_TOF_RSS_MODE)) { - APP_LOG(TS_OFF,VLEVEL_M, "\r\n****************P2--id=%d Call rss_fall_rise_detection %d\r\n", (wcnt-1), cnt++) sts_presence_rss_fall_rise_detection(); - sts_rss_result_changed_flag = (sts_rss_result == last_sts_rss_result)? 0:1; last_sts_rss_result = sts_rss_result; - APP_LOG(TS_OFF, VLEVEL_M, "rss_result=%d \r\nrss_result_changed_flag=%1d \r\nRSS_MOTION_RESULT=%s \r\n", - sts_rss_result, sts_rss_result_changed_flag,(STS_RESULT_NO_MOTION == sts_rss_result)?"NO_MOTION":"MOTION"); - sts_fall_rising_detected_result_changed_flag = (sts_fall_rising_detected_result == last_sts_fall_rising_detected_result)?0:1; last_sts_fall_rising_detected_result = sts_fall_rising_detected_result; diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 96eb1cb..e5023e2 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -133,7 +133,7 @@ extern volatile uint8_t sensor_data_ready; extern volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData; extern volatile float sts_distance_rss_distance; -char sts_lamp_color_code[10][10]={ +char sts_lamp_color_code[15][15]={ "Dark", "Green", "Red", @@ -142,7 +142,11 @@ char sts_lamp_color_code[10][10]={ "Pink", "Cyan", "White", - "Red_Blue", + "color_max", //8 + "Green_Flash", //0x10 ==16 + "Red_Flash", // 0x20 ==32 + "Blue_Flash", // 0x30 == 48 + "Red_Blue_Flash" //0x23 = 35 }; char sts_work_mode_code[15][25] ={ @@ -910,12 +914,16 @@ static void SendTxData(void) AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration>>8)&0xff; //14 occupancy over stay duration MSB AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration)&0xff; //15 occupancy over stay duration LSB } + uint8_t ich= (sts_lamp_bar_color>>4 & 0x0f); + uint8_t icl= (sts_lamp_bar_color & 0x0f); + char colorshow[30]=""; + strcpy(colorshow, (ich==0)?"":sts_lamp_color_code[ich]); APP_LOG(TS_OFF, VLEVEL_L, - "\r\n######| Color = %4s | Mode = %5s |\r\n",(char *)sts_lamp_color_code[0x0f&sensorData.lamp_bar_color], (char*)sts_work_mode_code[sensorData.workmode]); + "\r\n######| Color = %s%s | Mode = %5s |\r\n",(char *)colorshow, sts_lamp_color_code[icl], (char*)sts_work_mode_code[sensorData.workmode]); if (sts_work_mode == STS_UNI_MODE) { - APP_LOG(TS_OFF, VLEVEL_L, + APP_LOG(TS_OFF, VLEVEL_H, "\r\n######| S1-DoorOpen | S2-Motion | S3-SOS | S4 |Distance(mm) | MotionScore| Unconcious | Over_Stay | Fall Detected|" "\r\n######| %1d | %1d | %1d | %1d | %04d | %04d | %1d | %1d | %1d |\r\n", sensorData.state_sensor1_on_off, sensorData.state_sensor2_on_off,sensorData.state_sensor3_on_off, sensorData.state_sensor4_on_off, @@ -1265,7 +1273,7 @@ static void OnSysTimeUpdate(void) static void OnClassChange(DeviceClass_t deviceClass) { /* USER CODE BEGIN OnClassChange_1 */ - APP_LOG(TS_OFF, VLEVEL_M, "Switch to Class %c done\r\n", "ABC"[deviceClass]); + APP_LOG(TS_OFF, VLEVEL_H, "Switch to Class %c done\r\n", "ABC"[deviceClass]); /* USER CODE END OnClassChange_1 */ } @@ -1301,7 +1309,7 @@ static void OnTxPeriodicityChanged(uint32_t periodicity) UTIL_TIMER_SetPeriod(&TxTimer, TxPeriodicity); UTIL_TIMER_Start(&TxTimer); /* USER CODE BEGIN OnTxPeriodicityChanged_2 */ - APP_LOG(TS_OFF, VLEVEL_M,"**************** TxPeriodicity = %u (sec)\r\n", (TxPeriodicity/1000) ); + APP_LOG(TS_OFF, VLEVEL_H,"**************** TxPeriodicity = %u (sec)\r\n", (TxPeriodicity/1000) ); /* USER CODE END OnTxPeriodicityChanged_2 */ } @@ -1472,11 +1480,9 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) { if (p2_work_finished) { - APP_LOG(TS_OFF,VLEVEL_M, "****************Wakeup Timer-- Call P2 %d\r\n", wcnt++) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP2), CFG_SEQ_Prio_0); - if ((STS_LoRa_WAN_Joined != 0)&&(sts_rss_result_changed_flag==1)) { sts_rss_result_changed_flag = 0; @@ -1538,7 +1544,7 @@ static void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity) UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); /* USER CODE BEGIN OnTxPeriodicityChanged_2 */ - APP_LOG(TS_OFF, VLEVEL_M,"**************** HeartBeatPeriodicity Changed to: %u (ms)\r\n", HeartBeatPeriodicity ); + APP_LOG(TS_OFF, VLEVEL_H,"**************** HeartBeatPeriodicity Changed to: %u (ms)\r\n", HeartBeatPeriodicity ); /* USER CODE END OnTxPeriodicityChanged_2 */ }