diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index 848d190..1b1d990 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -88,19 +88,28 @@ enum sts_lamp_color { #define STS_SOS_COLOR STS_RED_BLUE #define STS_FALL_NORMAL_COLOR STS_GREEN -#define STS_FALL_SUSPICIOUS_COLOR STS_YELLOW -#define STS_FALL_CONFIRMED_COLOR STS_RED +//#define STS_FALL_SUSPICIOUS_COLOR STS_YELLOW +//#define STS_FALL_CONFIRMED_COLOR STS_RED +#define STS_FALL_SUSPICIOUS_COLOR (sts_color_severity_l2_l3<<4) +#define STS_FALL_CONFIRMED_COLOR (sts_color_severity_l2_l3&0x0F) #define STS_HUMAN_MOVEMENT_MOTIONLESS_NORMAL STS_GREEN -#define STS_HUMAN_MOVEMENT_MOTIONLESS_SHORT_COLOR STS_YELLOW -#define STS_HUMAN_MOVEMENT_MOTIONLESS_LONG_COLOR STS_RED +//#define STS_HUMAN_MOVEMENT_MOTIONLESS_SHORT_COLOR STS_YELLOW +//#define STS_HUMAN_MOVEMENT_MOTIONLESS_LONG_COLOR STS_RED +#define STS_HUMAN_MOVEMENT_MOTIONLESS_SHORT_COLOR (sts_color_severity_l2_l3<<4) +#define STS_HUMAN_MOVEMENT_MOTIONLESS_LONG_COLOR (sts_color_severity_l2_l3&0x0F) #define STS_OCCUPANCY_NORMAL_COLOR STS_GREEN -#define STS_OCCUPANCY_STAYLONGER_COLOR STS_YELLOW //NOT REALLY USED, JUST TO ALIGN FOR COLORS PATTERN -#define STS_OCCUPANCY_OVERSTAY_COLOR STS_BLUE +//#define STS_OCCUPANCY_STAYLONGER_COLOR STS_YELLOW //NOT REALLY USED, JUST TO ALIGN FOR COLORS PATTERN +//#define STS_OCCUPANCY_OVERSTAY_COLOR STS_BLUE +#define STS_OCCUPANCY_STAYLONGER_COLOR (sts_color_severity_l2_l3<<4) +#define STS_OCCUPANCY_OVERSTAY_COLOR (sts_color_severity_l2_l3&0x0F) +#define STS_COLOR_SEVERITY_L2 (sts_color_severity_l2_l3<<4) +#define STS_COLOR_SEVERITY_L3 (sts_color_severity_l2_l3&0x0F) #endif + /* enum sts_oo_work_mode { STS_NETWORK_MODE = 0, // 0 NETWORK MODE diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c index 7af21e7..e1bf19b 100644 --- a/Core/Src/sys_app.c +++ b/Core/Src/sys_app.c @@ -136,7 +136,7 @@ void SystemApp_Init(void) #if defined(STS_T6)||defined(L8) //STS_TOF_VL53LX_PresenceDetection_Process_Init(); - //STS_Lamp_Bar_Self_Test_Simple(); + STS_Lamp_Bar_Self_Test_Simple(); //STS_Lamp_Bar_Self_Test(); /* LED_GREEN_ON;HAL_Delay(50); diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 7314483..997f09f 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -45,7 +45,7 @@ #include "app_tof_peoplecount.h" #include "yunhorn_sts_prd_conf.h" #include "yunhorn_sts_sensors.h" - +#include "app_tof.h" #if (defined(STS_O6)||defined(STS_T6)||defined(O1L)) #include "sts_lamp_bar.h" #endif @@ -615,6 +615,7 @@ void STS_Sensor_Init(void) LED_GREEN_ON;HAL_Delay(150); LED_RED_ON;HAL_Delay(150); LED_GREEN_OFF;HAL_Delay(150); + #if 0 LED_RED_OFF;HAL_Delay(150); LED_GREEN_ON;HAL_Delay(50); @@ -654,6 +655,8 @@ void STS_Sensor_Init(void) UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); #endif + sts_lamp_bar_color = HALL1_STATE==0? STS_RED:STS_GREEN; // DOOR CLOSED=0, RED, DOOR OPEN=1 + UTIL_TIMER_Start(&STSLampBarColorTimer); UTIL_TIMER_Start(&STSDurationCheckTimer); @@ -1491,6 +1494,7 @@ static void OnRxTimerLedEvent(void *context) static void OnJoinTimerLedEvent(void *context) { HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */ + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), CFG_SEQ_Prio_0); } /* USER CODE END PrFD_LedEvents */ diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml index 6f79038..d7e3a93 100644 --- a/STM32CubeIDE/.settings/language.settings.xml +++ b/STM32CubeIDE/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin b/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin index dfee3bf..1021669 100644 Binary files a/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin and b/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin differ diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 16c63c2..ad7c998 100644 Binary files a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf and b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf differ diff --git a/STS/Core/Inc/yunhorn_sts_prd_conf.h b/STS/Core/Inc/yunhorn_sts_prd_conf.h index 8c5ccc4..0148de2 100644 --- a/STS/Core/Inc/yunhorn_sts_prd_conf.h +++ b/STS/Core/Inc/yunhorn_sts_prd_conf.h @@ -186,8 +186,8 @@ /* General Settings */ #define MajorVer 25U -#define MinorVer 5U -#define SubMinorVer 19U +#define MinorVer 6U +#define SubMinorVer 25U #define FirmwareVersion 3U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U #define YUNHORN_STS_AC_CODE_SIZE 20U diff --git a/STS/Core/Inc/yunhorn_sts_sensors.h b/STS/Core/Inc/yunhorn_sts_sensors.h index ffb53d3..6e23030 100644 --- a/STS/Core/Inc/yunhorn_sts_sensors.h +++ b/STS/Core/Inc/yunhorn_sts_sensors.h @@ -190,8 +190,9 @@ typedef struct sts_cfg_nvm { uint8_t length; // length of following parameters except AC CODE(20bytes) uint8_t p[STS_CFG_PCFG_SIZE]; - uint8_t reserve02; - uint8_t reserve03; + uint8_t color_occupy_vacant; // occupy color and vacant color define, C_OCCUPY<<4|C_VACANT + uint8_t color_severity_l2_l3; // over stay, motionless, fall down severity level 2 and level 3 color define + // (C_S_L2<<4)|(C_S_L3&0x0F) uint8_t sensor_install_height_in_10cm; uint8_t alarm_parameter05; #ifdef L8 diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 86cc5bd..ad29557 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -72,7 +72,7 @@ volatile uint8_t sts_cloud_netcolor = STS_BLUE; //netColor extern volatile uint8_t sts_occupancy_status; extern volatile sts_fhmos_sensor_config_t fhmos_cfg; extern volatile sts_fhmos_sensor_cmd_t fhmos_cmd; -extern volatile uint8_t sts_status_color, sts_lamp_bar_color;//puColor +extern volatile uint8_t sts_status_color, sts_lamp_bar_color, sts_color_occupy_vacant, sts_color_severity_l2_l3;//puColor extern uint8_t luminance_level; volatile uint8_t sts_fhmos_state_changed=0; volatile uint8_t sts_head_level_low =0, last_head_level_low_state=0; @@ -128,8 +128,8 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = { 0x00, //reserve --P[18] 0x00, //reserve --P[19] }, // above 20 bytes - 0x00, //reserve2 - 0x00, //reserve3 + 0x21, //reserve2 + 0x11, //reserve3 0x20, //sensor install height in dm =10 cm, default 32*10=320cm, 3.2meter 0x00, //reserve5 alarm_parameter05 @@ -237,7 +237,16 @@ volatile uint8_t sts_fhmos_result=STS_FHMOS_FALL_STATE_NO_OCCUPY; volatile uint8_t sts_fhmos_bitmap_pending=FHMOS_BITMAP_BLANK; #endif +#define STS_COLOR_DEFAULT_VACANT (sts_color_occupy_vacant&0x0f) +#define STS_COLOR_DEFAULT_OCCUPY ((sts_color_occupy_vacant>>4)&0x0f) +#ifdef SERCO_PWH +volatile uint8_t sts_color_occupy_vacant = (STS_RED<<4)|(STS_GREEN&0x0f); +volatile uint8_t sts_color_severity_l2_l3 = (STS_RED<<4)|((STS_RED)&0x0F); +#else +volatile uint8_t sts_color_occupy_vacant = (STS_RED<<4)|(STS_GREEN&0x0f); +volatile uint8_t sts_color_severity_l2_l3 = (STS_YELLOW<<4)|((STS_BLUE)&0x0F); +#endif #if (defined(YUNHORN_STS_O6_ENABLED) && defined(USE_ACCONEER_A111)) extern volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config; @@ -761,6 +770,29 @@ void USER_APP_Parse_CMD_P(uint8_t *parse_buffer, uint8_t parse_buffer_size) case 5: break; + case 6: // switch lamp bar color of occupy and vacant + // P 1 1 L O V --> P11L21 --> RED:2 for occupy, GREEN:1 for vacant + // P 1 1 S L2 L3 ---> P11S43 ---> YELLOW:4 ofr severity L2, BLUE:3 for severity L3 + if ((parse_buffer[CFG_CMD5]>='0')&& (parse_buffer[CFG_CMD5]<='9')&&(parse_buffer[CFG_CMD6]>='0')&& (parse_buffer[CFG_CMD6]<='9')) + { + if ((parse_buffer[CFG_CMD4] == 'L')){ + sts_cfg_nvm.color_occupy_vacant = ((uint8_t)(parse_buffer[CFG_CMD5]-0x30)<<4)|((uint8_t)(parse_buffer[CFG_CMD6]-0x30)); + 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(); + + } else if ((parse_buffer[CFG_CMD4] == 'S')){ + sts_cfg_nvm.color_severity_l2_l3 = ((uint8_t)(parse_buffer[CFG_CMD5]-0x30)<<4)|((uint8_t)(parse_buffer[CFG_CMD6]-0x30)); + sts_color_severity_l2_l3 = sts_cfg_nvm.color_severity_l2_l3; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Workmode=%d Severity Color L2 =%02X L3=%02X \r\n", sts_work_mode, STS_COLOR_SEVERITY_L2, STS_COLOR_SEVERITY_L3); + + OnStoreSTSCFGContextRequest(); + + } + } + + break; // P11T XYYY for fall down, human movement, occupancy, SOS case 8: if ((parse_buffer[CFG_CMD4]=='T') && (parse_buffer[CFG_CMD5]>='0')&& (parse_buffer[CFG_CMD5]<='9')) @@ -1736,8 +1768,8 @@ void OnStoreSTSCFGContextRequest(void) to_store__value[i++] = (sts_cfg_nvm.p[j]); } #endif - to_store__value[i++] = sts_cfg_nvm.reserve02; - to_store__value[i++] = sts_cfg_nvm.reserve03; + to_store__value[i++] = sts_cfg_nvm.color_occupy_vacant; + to_store__value[i++] = sts_cfg_nvm.color_severity_l2_l3; to_store__value[i++] = sts_cfg_nvm.sensor_install_height_in_10cm; to_store__value[i++] = sts_cfg_nvm.alarm_parameter05; #ifdef L8 @@ -1850,8 +1882,11 @@ void STS_REBOOT_CONFIG_Init(void) APP_LOG(TS_OFF, VLEVEL_M, "%2d ", fhmos_bg.maskoff[j]); } #endif - sts_cfg_nvm.reserve02 =(uint8_t)nvm_store_value[NVM_RESERVE02]; - sts_cfg_nvm.reserve03 =(uint8_t)nvm_store_value[NVM_RESERVE03]; +// sts_cfg_nvm.reserve02 =(uint8_t)nvm_store_value[NVM_RESERVE02]; +// sts_cfg_nvm.reserve03 =(uint8_t)nvm_store_value[NVM_RESERVE03]; + sts_cfg_nvm.color_occupy_vacant =(uint8_t)nvm_store_value[NVM_RESERVE02]; + sts_cfg_nvm.color_severity_l2_l3 =(uint8_t)nvm_store_value[NVM_RESERVE03]; + sts_cfg_nvm.sensor_install_height_in_10cm =(uint8_t)nvm_store_value[NVM_SENSOR_INSTALL_HEIGHT]; sts_cfg_nvm.alarm_parameter05 =(uint8_t)nvm_store_value[NVM_ALARM_PARAMETER05]; #ifdef L8 @@ -1949,6 +1984,11 @@ void OnRestoreSTSCFGContextProcess(void) sts_work_mode = sts_cfg_nvm.work_mode; sts_service_mask = sts_cfg_nvm.sts_service_mask; sts_sensor_install_height = sts_cfg_nvm.sensor_install_height_in_10cm*100; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Color Severity L2L3=0x%02x Occupy Vacant=0x%02x \r\n", sts_color_severity_l2_l3, sts_color_occupy_vacant); + sts_color_severity_l2_l3 = sts_cfg_nvm.color_severity_l2_l3; + sts_color_occupy_vacant = sts_cfg_nvm.color_occupy_vacant; + + APP_LOG(TS_OFF, VLEVEL_M, "\r\n After restore from NVM ---> #### Color Severity L2L3=0x%02x Occupy Vacant=0x%02x \r\n", sts_color_severity_l2_l3, sts_color_occupy_vacant); #ifdef YUNHORN_STS_O6_ENABLED sts_lamp_bar_color = STS_GREEN; @@ -2430,10 +2470,11 @@ void YunhornSTSDurationCheckTimer(void) #endif LED_RED_ON; + APP_LOG(TS_OFF, VLEVEL_M, "\r\nSensor1 overstay process: sts_color_severity_l2_l3=0x%02x, STS_OCCUPANCY_OVERSTAY_COLOR = 0x%02x \r\n", sts_color_severity_l2_l3, STS_OCCUPANCY_OVERSTAY_COLOR); sts_lamp_bar_color = STS_OCCUPANCY_OVERSTAY_COLOR; -// APP_LOG(TS_OFF, VLEVEL_M, "\r\nSensor1 overstay set color to %d color:%s\r\n",sts_lamp_bar_color, (char*)code2color[sts_lamp_bar_color]); + APP_LOG(TS_OFF, VLEVEL_M, "\r\nSensor1 overstay set color to 0x%02x color:%s\r\n",sts_lamp_bar_color, (char*)code2color[sts_lamp_bar_color]); over_threshold |= 1<<0; -// APP_LOG(TS_OFF, VLEVEL_M, "\r\n 1<<1 Over Threshold =0x%02x \r\n", over_threshold); + APP_LOG(TS_OFF, VLEVEL_M, "\r\n 1<<1 Over Threshold =0x%02x \r\n", over_threshold); } @@ -3135,7 +3176,7 @@ void OnSensorL8AStateChanged(void) fhmos_data.head_low_level_start_time = sensor_event_time.Seconds; fhmos_data.state_fall_released = 0; - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Head Level Low -------- state =%d last =%d \r\n", sts_head_level_low, last_head_level_low_state); + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Head Level Low -------- state =%d last =%d \r\n", sts_head_level_low, last_head_level_low_state); sts_o7_sensorData.event_sensor3_fall_start_time = sensor_event_time.Seconds; @@ -3145,7 +3186,7 @@ void OnSensorL8AStateChanged(void) { fhmos_data.head_low_level_stop_time = sensor_event_time.Seconds; fhmos_data.state_fall = STS_FHMOS_FALL_STATE_NORMAL; - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Head Level Rise up or Out of Focus Area ++++++++++ \r\n"); + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Head Level Rise up or Out of Focus Area ++++++++++ \r\n"); sts_fhmos_state_changed = 1; fhmos_data.state_fall_released = 1; } //else { diff --git a/STS/TOF/App/app_tof.c b/STS/TOF/App/app_tof.c index 7af13bd..2bb1f27 100644 --- a/STS/TOF/App/app_tof.c +++ b/STS/TOF/App/app_tof.c @@ -57,7 +57,7 @@ extern volatile uint8_t sts_fhmos_bitmap_pending; #include "stm32wlxx_nucleo.h" //static int to_confirm = 0; static uint8_t yes_count=0, no_count=0; -#define TIME_C 2 +#define TIME_C 4 static uint32_t STS_Get_Center_Range_Distance(RANGING_SENSOR_Result_t *Result); uint16_t bg_distance[64]={0}; uint8_t idx[64]={0}; @@ -831,15 +831,20 @@ static void print_result(RANGING_SENSOR_Result_t *Result) if (yes_count < TIME_C) { yes_count ++; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n YES++ %d\r\n", yes_count); + } else { no_count =0; } + } else if ((head_distance_from_ceiling_mm < (factor2_head_level_from_floor_mm - 150))) // TODO XXX 50mm gap to avoid flapping back and forth { if (no_count < TIME_C) { no_count ++; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n NO++ %d\r\n", no_count); + } else { yes_count =0; } @@ -849,10 +854,13 @@ static void print_result(RANGING_SENSOR_Result_t *Result) { sts_head_level_low = 1; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n lead low = 1\r\n"); + } else if (no_count > (TIME_C -1)) { sts_head_level_low = 0; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n lead low = 0\r\n"); sts_fhmos_bitmap_pending = FHMOS_BITMAP_BLANK; APP_LOG(TS_OFF, VLEVEL_M, "\r\n return zero statues, bitmap status=%d \r\n", sts_fhmos_bitmap_pending); }