Merge branch 'RM2_1' of http://gitea.yunhorn.com/sundp/O7 into pixel_network

This commit is contained in:
Yunhorn 2024-08-20 11:52:02 +08:00
commit f3f002bb23
25 changed files with 1351 additions and 805 deletions

11
.project Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>STS_O7</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View File

@ -6,6 +6,7 @@
// for Yunhorn SmarToilets STS-O7 Occupancy/Fall Detection/Over stay sensor
function Decode(fPort, data, variables) {
var data = {};
data.length = bytes.length;
if ((fPort === 10)) { // STS_O2_O6 V3 version 2023,pixel-network version
switch (bytes[0]) {
case 0x00:
@ -86,8 +87,12 @@ function Decode(fPort, data, variables) {
// For NC(Normal Closed states
//data.Sensor1_Door_Contact_Open = bytes[3]===1?"Door Closed":"Door Open";
data.Sensor2_Motion_Detected = bytes[3] === 0 ? "No Motion" : "Motion Detected";
if (bytes[1] == 0x02) //Hall_element_mode
{
data.Sensor2_SOS_Pushed = bytes[3] === 0 ? "PushDown" : "RelaseUP";
} else if (bytes[1] > 0x02) {
data.Sensor2_Motion_Detected = bytes[3] === 0 ? "No Motion" : "Motion Detected";
}
return { "Yunhorn_SmarToilets_data": data };
}
@ -172,10 +177,10 @@ function Decode(fPort, data, variables) {
// For NC(Normal Closed states
//data.Sensor1_Door_Contact_Open = bytes[3]===1?"Door Closed":"Door Open";
data.Sensor2_Emergency_Button = bytes[4] === 0 ? "Alarm Push Down" : "No Alarm, Released";
data.Sensor3_Motion_Detected = bytes[5] === 0 ? "No Motion" : "Motion Detected";
data.Sensor2_Motion_Detected = bytes[4] === 0 ? "No Motion" : "Motion Detected";
data.Sensor3_Emergency_Button = bytes[5] === 0 ? "Alarm Push Down" : "No Alarm, Released";
data.length = bytes.length
data.length = bytes.length;
if (data.length === 9) {
data.Over_stay_state = (bytes[6] === 0) ? "False" : "True";
data.Over_Stay_duration_in_Seconds = (bytes[7] << 8 | bytes[8]);
@ -183,13 +188,14 @@ function Decode(fPort, data, variables) {
return { "Yunhorn_SmarToilets_data": data };
}
else if (data.length > 9) {
data.Sensor4 = (bytes[6] === 0) ? "No" : "Yes";
data.Distance_in_mm = (bytes[7] << 8 | bytes[8]);
data.MotionLevel = (bytes[9] << 8 | bytes[10]);
data.Sensor4_ALARM_MUTE = (bytes[6] === 0) ? "Down Mute" : "No Mute";
data.Sensor5_ALARM_RESET = (bytes[7] === 0) ? "Down RESET" : "NO Reset";
data.Distance_in_mm = (bytes[8] << 8 | bytes[9]);
data.MotionLevel = (bytes[10] << 8 | bytes[11]);
data.Unconcious_State = (bytes[11] == 0) ? "False" : "True";
data.Unconcious_State = (bytes[12] == 0) ? "False" : "True";
switch (bytes[12]) {
switch (bytes[13]) {
case 0x0:
data.Fall_Down_Detected_State = "Presence_Normal";
break;
@ -212,26 +218,33 @@ function Decode(fPort, data, variables) {
data.Fall_Down_Detected_State = "Presence_Normal";
break;
}
data.OverStay_Detected_State = (bytes[13] == 0x0) ? "False" : "True";
data.OverStay_Duration_in_Seconds = (bytes[14] << 8 | bytes[15]);
data.No_Movement_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
data.Unconcious_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
data.Fall_Down_Speed_in_m_per_s = (bytes[18]);
data.Fall_Down_Gravity_in_g = (bytes[19]);
data.SOS_PushDown_Stamp = (bytes[20] << 24 | bytes[21] << 16 | bytes[22] << 8 | bytes[23]);
var sos_start = new Date(1000 * data.SOS_PushDown_Stamp);
data.SOS_ReleaseUP_Stamp = (bytes[24] << 24 | bytes[25] << 16 | bytes[26] << 8 | bytes[27]);
var sos_stop = new Date(1000 * data.SOS_ReleaseUP_Stamp);
data.SOS_PushDown_Time = "[" + sos_start.getDate() + "." + (sos_start.getMonth() + 1) + "." + (sos_start.getFullYear()) + "] " + sos_start.getHours() + ":" + sos_start.getMinutes() + ":" + sos_start.getSeconds();
data.SOS_ReleaseUP_Time = "[" + sos_stop.getDate() + "." + (sos_stop.getMonth() + 1) + "." + (sos_stop.getFullYear()) + "] " + sos_stop.getHours() + ":" + sos_stop.getMinutes() + ":" + sos_stop.getSeconds();
data.Fall_Down_Stamp = (bytes[28] << 24 | bytes[29] << 16 | bytes[30] << 8 | bytes[31]);
var fall_start = new Date(1000 * data.Fall_Down_Stamp);
data.Fall_RiseUp_Stamp = (bytes[32] << 24 | bytes[33] << 16 | bytes[34] << 8 | bytes[35]);
var fall_stop = new Date(1000 * data.Fall_RiseUp_Stamp);
data.Fall_Down_Time = "[" + fall_start.getDate() + "." + (fall_start.getMonth() + 1) + "." + (fall_start.getFullYear()) + "] " + fall_start.getHours() + ":" + fall_start.getMinutes() + ":" + fall_start.getSeconds();
data.Fall_RiseUp_Time = "[" + fall_stop.getDate() + "." + (fall_stop.getMonth() + 1) + "." + (fall_stop.getFullYear()) + "] " + fall_stop.getHours() + ":" + fall_stop.getMinutes() + ":" + fall_stop.getSeconds();
data.OverStay_Detected_State = (bytes[14] == 0x0) ? "False" : "True";
data.OverStay_Duration_in_Seconds = (bytes[15] << 8 | bytes[16]);
data.No_Movement_Duration_in_Seconds = (bytes[17] << 8 | bytes[18]);
data.Unconcious_Duration_in_Seconds = (bytes[17] << 8 | bytes[18]);
data.Fall_Down_Speed_in_m_per_s = (bytes[19]);
data.Fall_Down_Gravity_in_g = (bytes[20]);
data.SOS_PushDown_Stamp = (bytes[21] << 24 | bytes[22] << 16 | bytes[23] << 8 | bytes[24]);
if (data.SOS_PushDown_Stamp != 0) {
var sos_start = new Date(1000 * data.SOS_PushDown_Stamp);
data.SOS_PushDown_Time = "[" + sos_start.getDate() + "." + (sos_start.getMonth() + 1) + "." + (sos_start.getFullYear()) + "] " + sos_start.getHours() + ":" + sos_start.getMinutes() + ":" + sos_start.getSeconds();
} else data.SOS_PushDown_Time = "N/A";
data.SOS_ReleaseUP_Stamp = (bytes[25] << 24 | bytes[26] << 16 | bytes[27] << 8 | bytes[28]);
if (data.SOS_ReleaseUP_Stamp != 0) {
var sos_stop = new Date(1000 * data.SOS_ReleaseUP_Stamp);
data.SOS_ReleaseUP_Time = "[" + sos_stop.getDate() + "." + (sos_stop.getMonth() + 1) + "." + (sos_stop.getFullYear()) + "] " + sos_stop.getHours() + ":" + sos_stop.getMinutes() + ":" + sos_stop.getSeconds();
} else data.SOS_ReleaseUP_Time = "N/A";
data.Fall_Down_Stamp = (bytes[29] << 24 | bytes[30] << 16 | bytes[31] << 8 | bytes[32]);
if (data.Fall_Down_Stamp != 0) {
var fall_start = new Date(1000 * data.Fall_Down_Stamp);
data.Fall_Down_Time = "[" + fall_start.getDate() + "." + (fall_start.getMonth() + 1) + "." + (fall_start.getFullYear()) + "] " + fall_start.getHours() + ":" + fall_start.getMinutes() + ":" + fall_start.getSeconds();
} else data.Fall_RiseUp_Stamp = "N/A";
data.Fall_RiseUp_Stamp = (bytes[33] << 24 | bytes[34] << 16 | bytes[35] << 8 | bytes[36]);
if (data.Fall_RiseUp_Stamp != 0) {
var fall_stop = new Date(1000 * data.Fall_RiseUp_Stamp);
data.Fall_RiseUp_Time = "[" + fall_stop.getDate() + "." + (fall_stop.getMonth() + 1) + "." + (fall_stop.getFullYear()) + "] " + fall_stop.getHours() + ":" + fall_stop.getMinutes() + ":" + fall_stop.getSeconds();
} else data.Fall_RiseUp_Time = "N/A";
}
return { "Yunhorn_SmarToilets_data": data };
}
@ -249,11 +262,39 @@ function Decode(fPort, data, variables) {
var data = {};
data.length = bytes.length;
if (data.length === 4) {
if ((data.length === 4) && (bytes[0] == 0x52) && (bytes[1] = 0x46)) //RFAC
{
data.Request_Performed = "OK";
data.RFAC = "OK";
data.AC0 = bytes[0];
data.AC1 = bytes[1];
}
else if ((data.length === 4) && (bytes[0] === 0x50) && (bytes[1] === 0x31) && (bytes[2] === 0x31)) {
data.Work_Mode_Switch = "OK";
switch (bytes[3] - 0x30) {
case 0x0:
data.workmode = "Network_mode";
break;
case 0x01:
data.workmode = "Wired_Mode";
break;
case 0x02:
data.workmode = "Hall_element_mode";
break;
case 0x03:
data.workmode = "MotionDetect_mode";
break;
case 0x04:
data.workmode = "Dual_mode";
break;
case 0x05:
data.workmode = "Uni_Mode";
break;
default:
data.workmode = "Unknown Mode";
break;
}
}
if ((bytes[0] === 0x59) && (bytes[1] === 0x44)) //Duration interval
@ -303,7 +344,7 @@ function Decode(fPort, data, variables) {
data.rss_reserve04 = bytes[32];
data.reserve2 = bytes[33];
data.reserve3 = bytes[34];
data.reserve4 = bytes[35];
data.sensor_install_height = bytes[35] * 10 + " cm";
data.alarm_parameter05 = bytes[36];
data.alarm_mute_expire_timer = bytes[37];
@ -373,6 +414,59 @@ function Decode(fPort, data, variables) {
data.LocalTime_EST8 = "GMT+8: " + data.L_year + "/" + data.L_mon + "/" + data.L_day + " " + (data.L_hour + 8) + ":" + data.L_min + ":" + data.L_sec;
}
}
else if (bytes[0] === 0x50) { // P cmd report
if (data.length == 7) {
switch (bytes[3]) {
case 0x46: // F --- fall down & unconscious detection threshold
data.FALL_acceleration = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30) * 10) + " mg/s2");
data.FALL_depth_measure = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " cm");
data.FALL_confirm_threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " seconds");
//data.FALL_reserved = (bytes[7]==0x0?"Disabled":((bytes[6]-0x30)*10)+" min");
break;
} //switch
}
else if (data.length == 8) {
switch (bytes[3]) {
case 0x4f: // O -- over stay, onconscious, long stay
data.OMU_Motionless_duration_in_min = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30)) + " Min");
data.OMU_Long_Occupy_duration_in_Min = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " Min");
data.OMU_Unconcious_Threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 100) + "ml");
data.OMU_Alarm_Mute_Reset_Timer = (bytes[7] == 0x30 ? "Disabled" : ((bytes[7] - 0x30) * 10) + " Seconds");
break;
case 0x46: // F --- fall down & unconscious detection threshold
data.FALL_acceleration = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30) * 10) + " mg/s2");
data.FALL_depth_measure = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " cm");
data.FALL_confirm_threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " seconds");
data.FALL_reserved = (bytes[7] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " min");
break;
} //switch
} else if (data.length == 11) { // P 1108201365
data.RSS_SIMPLE_Start = ((bytes[3] - 0x30) * 100 + (bytes[4] - 0x30) * 10) + " cm";
data.RSS_SIMPLE_Length = ((bytes[5] - 0x30) * 100 + (bytes[6] - 0x030) * 10) + " cm";
data.RSS_SIMPLE_Threshold = ((bytes[7] - 0x30) * 1000 + (bytes[8] - 0x30) * 100) + " ml";
data.RSS_SIMPLE_Gain = ((bytes[9] - 0x30) * 10 + (bytes[10] - 0x30)) + " %";
} else if (data.length == 33) { // P 11
data.RSS_FULL_Start = ((bytes[3] - 0x30) * 100 + (bytes[4] - 0x30) * 10) + " cm";
data.RSS_FULL_Length = ((bytes[5] - 0x30) * 100 + (bytes[6] - 0x30) * 10) + " cm";
data.RSS_FULL_Threshold = ((bytes[7] - 0x30) * 1000 + (bytes[8] - 0x30) * 100) + " ml";
data.RSS_FULL_Gain = ((bytes[9] - 0x30) * 10 + (bytes[10] - 0x30)) + " %";
data.RSS_FULL_Profile = (bytes[11] - 0x30);
data.RSS_FULL_Rate_Tracking = ((bytes[12] - 0x30) * 10 + (bytes[13] - 0x30));
data.RSS_FULL_Rate_Presence = ((bytes[14] - 0x30) * 10 + (bytes[15] - 0x30));
data.RSS_FULL_HWAAS = ((bytes[16] - 0x30) * 10 + (bytes[17] - 0x30));
data.RSS_FULL_Num_Removed_PC = (bytes[18] - 0x30);
data.RSS_FULL_Inter_Deviation_Time_Const_in_Sec = ((bytes[19] - 0x30) + (bytes[20] - 0x30) * 0.1);
data.RSS_FULL_Inter_Fast_Cut_Off = ((bytes[21] - 0x30) * 10 + (bytes[22] - 0x30));
data.RSS_FULL_Inter_Slow_Cut_Off = ((bytes[23] - 0x30) * 0.1 + (bytes[24] - 0x30) * 0.001);
data.RSS_FULL_Inter_Time_Const_in_Sec = ((bytes[25] - 0x30) * 10 + (bytes[26] - 0x30));
data.RSS_FULL_Inter_Weight = ((bytes[27] - 0x30) + (bytes[28] - 0x30) * 0.1);
data.RSS_FULL_Output_Time_Const_in_Sec = ((bytes[29] - 0x30) + (bytes[30] - 0x30) * 0.1);
data.RSS_FULL_DownSampling_factor = (bytes[31] - 0x30);
data.RSS_FULL_Power_Saving_mode = (bytes[32] - 0x30);
}
}
return { "Yunhorn_SmarToilets_data": data };
}
}
}

View File

@ -99,9 +99,22 @@ void Error_Handler(void);
#define HALL2_GPIO_Port GPIOA
#define HALL2_EXTI_IRQn EXTI1_IRQn
#define HALL1_STATE HAL_GPIO_ReadPin(HALL1_GPIO_Port, HALL1_Pin)
#define HALL2_STATE HAL_GPIO_ReadPin(HALL2_GPIO_Port, HALL2_Pin)
#define HALL3_Pin GPIO_PIN_9 // ALARM MUTE PIN
#define HALL3_GPIO_Port GPIOA
#define HALL3_EXTI_IRQn EXTI9_5_IRQn
#define HALL4_Pin GPIO_PIN_10 // ALARM RESET PIN
#define HALL4_GPIO_Port GPIOA
#define HALL4_EXTI_IRQn EXTI15_10_IRQn
#define ALARM_MUTE_Pin HALL3_Pin // ALARM MUTE BUTTON
#define ALARM_RESET_Pin HALL4_Pin // ALARM RESET BUTTON
#define HALL1_STATE HAL_GPIO_ReadPin(HALL1_GPIO_Port, HALL1_Pin) //DOOR CONTACT
#define HALL2_STATE HAL_GPIO_ReadPin(HALL2_GPIO_Port, HALL2_Pin) //SOS BUTTON
#define HALL3_STATE HAL_GPIO_ReadPin(HALL3_GPIO_Port, HALL3_Pin) //ALARM MUTE BUTTON
#define HALL4_STATE HAL_GPIO_ReadPin(HALL4_GPIO_Port, HALL4_Pin) //ALARM RESET BUTTON
#else
#define BUT1_Pin GPIO_PIN_0

View File

@ -34,6 +34,10 @@ extern "C" {
#define STS_Status_Door_Open (1) //Normal Close NC:Close **2024-07-15 changed
#define STS_Status_SOS_Pushdown (0) //Normal Open NO:Open
#define STS_Status_SOS_Release (1) //Normal Open NO:Close
#define STS_Status_Alarm_Mute_Pushdown (0) //Normal Open NO:Open
#define STS_Status_Alarm_Mute_Release (1) //Normal Open NO:Close#
#define STS_Status_Alarm_Reset_Pushdown (0) //Normal Open NO:Open
#define STS_Status_Alarm_Reset_Release (1) //Normal Open NO:Close#
enum sts_lamp_color {
STS_DARK = 0, //灭0, Code 0x00
@ -48,8 +52,17 @@ enum sts_lamp_color {
STS_GREEN_DARK=0x10, //0b0001 0000 GREEN DARK
STS_RED_DARK=0x20, //0b0010 0000,
STS_RED_GREEN=0x21,
STS_RED_BLUE=0x23, //0b0010 0011 RED BLUE FLASH
STS_BLUE_DARK=0x30 //0b0011 0000 BLUE DARK
STS_BLUE_DARK=0x30, //0b0011 0000 BLUE DARK
STS_BLUE_GREEN=0x31,
STS_GREENDARK=0x41, // GREEN FLASH 'A'
STS_REDDARK=0x42, // RED FLASH 'B'
STS_REDBLUE=0x43, // RED/BLUE FLASH 'C'
STS_BLUEDARK=0x44, // BLUE FLASH 'D'
STS_REDGREEN=0x45, // RED/GREEN FLASH 'E'
STS_BLUEGREEN=0x46 // BLUE/GREEN FLASH 'F'
};
enum sts_oo_work_mode {

View File

@ -223,23 +223,31 @@
//#define YUNHORN_STS_M10_LORA_APP_DATA_PORT 9U
//#define YUNHORN_STS_M10_LORA_APP_HTBT_PORT 9U
#define STS_IOC_IN_0 ((uint8_t)0x01) /* I/O Control sensor 1 */
#define STS_IOC_IN_1 ((uint8_t)0x02) /* I/O Control sensor 2 */
#define STS_IOC_IN_2 ((uint8_t)0x04) /* I/O Control sensor 3 */
#define STS_IOC_IN_3 ((uint8_t)0x08) /* I/O Control sensor 4 */
#define STS_IOC_IN_0 ((uint8_t)0x01) /* I/O Control sensor 1 */ // HALL-1
#define STS_IOC_IN_1 ((uint8_t)0x02) /* I/O Control sensor 2 */ // HALL-2
#define STS_IOC_IN_2 ((uint8_t)0x04) /* I/O Control sensor 3 */ // MOTION-1
#define STS_IOC_IN_3 ((uint8_t)0x08) /* I/O Control sensor 4 */ // HALL-4
#define STS_IOC_OUT_0 ((uint8_t)0x10) /* I/O Control out interface 1 */
#define STS_IOC_OUT_1 ((uint8_t)0x20) /* I/O Control out interface 2 */
#define STS_IOC_OUT_2 ((uint8_t)0x40) /* I/O Control out interface 3 */
#define STS_IOC_OUT_3 ((uint8_t)0x80) /* I/O Control out interface 4 */
#define STS_IOC_MASK (0xFFu) /* I/O Control mask */
#define STS_IOC_MASK_ALL (0xFF) /* I/O Control mask */
#define STS_IOC_MASK_NONE (0x00) /* NONE enabled */
#define STS_IOC_IN_ALL (STS_IOC_IN_0|STS_IOC_IN_1 |STS_IOC_IN_2 |STS_IOC_IN_3)
#define STS_IOC_OUT_ALL (STS_IOC_OUT_0|STS_IOC_OUT_1|STS_IOC_OUT_2|STS_IOC_OUT_3)
#define IS_STS_LAMP_BAR_OUTPUT_ENABLE STS_IOC_OUT_0
#define IS_STS_RS485_OUTPUT_ENABLE STS_IOC_OUT_1
#define STS_IOC_MODE_0_MASK STS_IOC_OUT_0 //NETWOR MODE, NO ON-BOARD INTERFACE, OUT LAMP BAR ENABLED
#define STS_IOC_MODE_1_MASK STS_IOC_IN_1 //WIRED MODE, ONE ON-BOARD INTEFACE ENABLE, NO LAMP BAR
#define STS_IOC_MODE_2_MASK STS_IOC_IN_0|STS_IOC_IN_1 //REEDSWITCH MODE, ONE ON-BOARD INTERFACE ENABLED, LAMP BAR ENABLED
#define STS_IOC_MODE_3_MASK STS_IOC_IN_2|STS_IOC_IN_1|STS_IOC_OUT_0 // RSS MODE, ONE ON-BOARD INTERFACE MOTION ENABLED, LAMP BAR ENABLED
#define STS_IOC_MODE_4_MASK STS_IOC_IN_0|STS_IOC_IN_1|STS_IOC_IN_2|STS_IOC_OUT_0|STS_IOC_OUT_1 //DUAL MODE
#define STS_IOC_MODE_5_MASK STS_IOC_IN_ALL|STS_IOC_OUT_ALL //UNI_MODE
#define MajorVer 24U
#define MinorVer 07U
#define SubMinorVer 26U
#define MinorVer 8U
#define SubMinorVer 15U
#define FirmwareVersion 3U
#define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U
@ -247,8 +255,8 @@
#define STS_O7_NVM_CFG_SIZE 32U
#define STS_O7_CFG_PCFG_SIZE 20U
#define STS_O7_CFG_CMD_SIZE 30U
#define STS_O7_CFG_CMD_SHORT_LEN 8U
#define STS_O7_CFG_CMD_SIZE 33U
#define STS_O7_CFG_CMD_SHORT_LEN 11U
#define STS_MODE_COLOR_CMD_LEN 5U
#define sts_mtmcode1 0U
@ -265,8 +273,8 @@
#define sts_sendhtbtport (YUNHORN_STS_O6_LORA_APP_HTBT_PORT)
#endif
#ifdef STS_O7
#define sts_senddataport (YUNHORN_STS_O6_LORA_APP_DATA_PORT)
#define sts_sendhtbtport (YUNHORN_STS_O6_LORA_APP_HTBT_PORT)
#define sts_senddataport (YUNHORN_STS_O7_LORA_APP_DATA_PORT)
#define sts_sendhtbtport (YUNHORN_STS_O7_LORA_APP_HTBT_PORT)
#endif
#if defined(STS_O6)||defined(STS_O7)
#define sts_appctrlport (YUNHORN_STS_O7_USER_APP_CTRL_PORT)
@ -429,8 +437,8 @@
* Address range 0800 0000H - 0803 FFFFH Size: 0x0004 0000
*/
#define FLASH_USER_START_ADDR ((void *) 0x0803F800U) // Last 2kB of flash
#define FLASH_USER_CONFIG_SIZE ((void *) 0x000007FFU) //0x400=1KB=1024
#define FLASH_USER_START_ADDR ((void *) 0x0803F800UL) // Last 2kB of flash
#define FLASH_USER_CONFIG_SIZE ((void *) 0x000007FFUL) //0x400=1KB=1024
#define FLASH_USER_END_ADDR (FLASH_USER_START_ADDR + FLASH_USER_CONFIG - 1)
/* 2KB = 2048 = 0x800 End @ of user Flash area */

View File

@ -50,7 +50,9 @@ enum cfg_cmd_order{
CFG_CMD7,
CFG_CMD8,
CFG_CMD9,
CFG_CMD10
CFG_CMD10, CFG_CMD11, CFG_CMD12, CFG_CMD13, CFG_CMD14,CFG_CMD15, CFG_CMD16, CFG_CMD17, CFG_CMD18, CFG_CMD19,
CFG_CMD20, CFG_CMD21, CFG_CMD22, CFG_CMD23, CFG_CMD24,CFG_CMD25, CFG_CMD26, CFG_CMD27, CFG_CMD28, CFG_CMD29,
CFG_CMD30, CFG_CMD31, CFG_CMD32, CFG_CMD33, CFG_CMD34,CFG_CMD35, CFG_CMD36, CFG_CMD37, CFG_CMD38, CFG_CMD39
};
enum p_cmd_order{
P_CMD=0, //'P' //P_MTM_CODE, // #1
@ -88,10 +90,12 @@ enum RSS_CFG_order{
#if defined(STS_O7)||defined(STS_O6)
enum sts_rss_config_t {
STS_RSS_CONFIG_DEFAULT=0,
enum sts_rss_config_update_t {
STS_RSS_CONFIG_NON=0,
STS_RSS_CONFIG_DEFAULT,
STS_RSS_CONFIG_SIMPLE,
STS_RSS_CONFIG_FULL
STS_RSS_CONFIG_FULL,
STS_RSS_CONFIG_FALL_DETECTION
};
enum sts_ctrl_cmd_type {
@ -166,7 +170,8 @@ typedef struct STS_OO_SensorStatusDataTypeDef
uint8_t state_sensor1_on_off; /* reedswitch or hall element 0: open, 1: closed */
uint8_t state_sensor2_on_off; /* reedswitch or hall element 0: open, 1: closed */
uint8_t state_sensor3_on_off; /* motion RSS, pcr_sensor_on_off; 1: occupancy, 0: no occupancy */
uint8_t state_sensor4_on_off; /* reserved_sensor_on_off sensor state */
uint8_t state_sensor4_on_off; /* alarm mute button_on_off sensor state */
uint8_t state_sensor5_on_off; /* alarm reset button_on_off sensor state */
uint16_t rss_presence_distance; // in mm
uint8_t rss_presence_zone[10];
uint8_t rss_presence_zone_count[10];
@ -208,6 +213,9 @@ typedef struct STS_OO_SensorStatusDataTypeDef
uint32_t event_sensor3_fall_stop_time;
uint32_t event_sensor3_fall_duration;
uint16_t event_sensor3_fall_distance;
uint16_t event_sensor3_fall_motionscore;
uint32_t event_sensor3_no_movement_start_time;
uint32_t event_sensor3_no_movement_stop_time;
uint32_t event_sensor3_no_movement_duration;
@ -217,11 +225,21 @@ typedef struct STS_OO_SensorStatusDataTypeDef
uint32_t event_sensor3_unconcious_duration;
uint32_t event_sensor4_start_time; /* reserved */
uint32_t event_sensor4_start_timestamp;
uint32_t event_sensor4_stop_time;
uint32_t event_sensor4_stop_timestamp;
uint32_t event_sensor4_duration;
uint8_t alarm_indictor_mute_state;
uint32_t event_sensor5_start_time; /* reserved */
uint32_t event_sensor5_stop_time;
uint32_t event_sensor5_start_timestamp;
uint32_t event_sensor5_stop_timestamp;
uint32_t event_sensor5_duration;
uint8_t alarm_indictor_reset_state;
} STS_OO_SensorStatusDataTypeDef;
//#endif
@ -251,12 +269,12 @@ enum sts_sensor_result_t {
typedef struct
{
float p_dist_avg;
float p_dist_v;
float p_dist_standard;
float m_score_avg;
float roc_avg;
float roc_standard;
uint16_t p_dist_avg;
uint16_t p_dist_v;
uint16_t p_dist_standard;
uint16_t m_score_avg;
uint16_t roc_avg;
uint16_t roc_standard;
uint8_t fall_rising;
} STS_PRESENCE_Motion_Featuer_t;
@ -654,7 +672,7 @@ void OnStoreSTSCFGContextRequest(void);
/**
* @brief Read config from flash
*/
void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm);
void OnRestoreSTSCFGContextRequest(void *cfg_in_nvm);
void STS_REBOOT_CONFIG_Init(void);
@ -679,10 +697,12 @@ void STS_YunhornSTSEventP8_Process(void);
void OnSensor1StateChanged(void);
void OnSensor2StateChanged(void);
void OnSensor3StateChanged(void);
void OnSensor3AStateChanged(void);
void OnSensor3BStateChanged(void);
void OnSensor3CStateChanged(void);
void OnSensor4StateChanged(void);
void OnSensorRSS3AStateChanged(void);
void OnSensorRSS3BStateChanged(void);
void OnSensorRSS3CStateChanged(void);
uint32_t STS_Get_Date_Time_Stamp(void);//uint32_t *time_stamp, uint8_t *datetimestamp);
void STS_SENSOR_MEMS_Reset(uint8_t cnt);
@ -732,12 +752,13 @@ void STS_MOTION_SENSOR_Enable_Wake_Up_Detection(void);
void STS_MOTION_SENSOR_Initialization(void);
*/
void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size);
void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size);
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);
float KalmanFilter(float inData);
/* USER CODE BEGIN Private defines */
/*

View File

@ -52,15 +52,15 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */
//HAL_GPIO_WritePin(GPIOB, LED1_Pin|LED2_Pin|PROB2_Pin|PROB1_Pin|LED3_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, A111_CS_N_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A111_CS_N_GPIO_Port, A111_CS_N_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PBPin PBPin PBPin */
GPIO_InitStruct.Pin = LED1_Pin; //|LED2_Pin|LED3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = MEMS_POWER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@ -88,11 +88,11 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(A111_SENSOR_INTERRUPT_GPIO_Port, &GPIO_InitStruct);
#ifdef STS_O7
GPIO_InitStruct.Pin = HALL1_Pin|HALL2_Pin;
#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2)
GPIO_InitStruct.Pin = HALL1_Pin|HALL2_Pin|HALL3_Pin|HALL4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
#else
/*Configure GPIO pins : PAPin PAPin */
@ -116,13 +116,19 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(BUT3_GPIO_Port, &GPIO_InitStruct);
#endif
#ifdef STS_O7
#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2)
HAL_NVIC_SetPriority(HALL1_EXTI_IRQn, 15, 0);
HAL_NVIC_EnableIRQ(HALL1_EXTI_IRQn);
HAL_NVIC_SetPriority(HALL2_EXTI_IRQn, 15, 0);
HAL_NVIC_EnableIRQ(HALL2_EXTI_IRQn);
HAL_NVIC_SetPriority(HALL3_EXTI_IRQn, 15, 0);
HAL_NVIC_EnableIRQ(HALL3_EXTI_IRQn);
HAL_NVIC_SetPriority(HALL4_EXTI_IRQn, 15, 0);
HAL_NVIC_EnableIRQ(HALL4_EXTI_IRQn);
HAL_NVIC_SetPriority(A111_SENSOR_INTERRUPT_EXTI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(A111_SENSOR_INTERRUPT_EXTI_IRQn);

View File

@ -25,16 +25,10 @@
#include "usart.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "yunhorn_sts_sensors.h"
#include "sts_cmox_hmac_sha.h"
#include "spi.h"
#include "dma.h"
#include "tim.h"
#include "sts_lamp_bar.h"
#include "sys_app.h"
#include "acc_hal_integration.h"
#include "acc_detector_presence.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -99,15 +93,11 @@ int main(void)
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
LED1_ON;
MX_LoRaWAN_Init();
STS_Lamp_Bar_Self_Test_Simple();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */

View File

@ -231,7 +231,7 @@ void EXTI0_IRQHandler(void)
/* USER CODE BEGIN EXTI0_IRQn 0 */
/* USER CODE END EXTI0_IRQn 0 */
#ifdef STS_O7
#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2)
//sts_reed_hall_1_changed = 1;
HAL_GPIO_EXTI_IRQHandler(HALL1_Pin);
#else
@ -251,7 +251,7 @@ void EXTI1_IRQHandler(void)
/* USER CODE BEGIN EXTI1_IRQn 0 */
/* USER CODE END EXTI1_IRQn 0 */
#ifdef STS_O7
#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2)
//sts_reed_hall_2_changed = 1;
HAL_GPIO_EXTI_IRQHandler(HALL2_Pin);
#else
@ -358,20 +358,41 @@ void DMA1_Channel7_IRQHandler(void)
/**
* @brief This function handles EXTI Lines [9:5] Interrupt.
*/
#if 1
void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
/* USER CODE END EXTI9_5_IRQn 0 */
//HAL_GPIO_EXTI_IRQHandler(BUT3_Pin);
HAL_GPIO_EXTI_IRQHandler(HALL3_Pin); // GPIOA -9
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
#ifdef RM2
HAL_GPIO_EXTI_IRQHandler(A111_SENSOR_INTERRUPT_Pin);
#endif
/* USER CODE END EXTI9_5_IRQn 1 */
}
/**
* @brief This function handles EXTI Lines [15:10] Interrupt.
*/
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(HALL4_Pin); // GPIOA -10
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
#ifdef RM2
HAL_GPIO_EXTI_IRQHandler(A111_SENSOR_INTERRUPT_Pin);
#endif
/* USER CODE END EXTI9_5_IRQn 1 */
}
/**
* @brief This function handles SPI1 Interrupt.
*/

View File

@ -63,6 +63,7 @@ extern volatile uint8_t sts_occupancy_status;
extern volatile uint8_t sts_reed_hall_result, sts_emergency_button_pushed; // inital 0 = close
volatile uint8_t sts_hall1_read=STS_Status_Door_Open,sts_hall2_read=STS_Status_SOS_Release; // Above hall1_read == reed_hall_result, hall2_read == emergency_button
volatile uint8_t sts_hall3_read=STS_Status_Alarm_Mute_Release,sts_hall4_read=STS_Status_Alarm_Reset_Release;
extern volatile uint8_t sts_reed_hall_1_result, sts_reed_hall_2_result;
extern volatile uint8_t sts_tof_result_changed_flag;
@ -73,7 +74,7 @@ extern volatile uint8_t sts_rss_result;
extern volatile uint8_t sts_rss_2nd_result; //2nd RSS sensor status
extern volatile uint8_t sts_tof_result;
//extern volatile uint8_t last_sts_reed_hall_result = 2; //Initial state, not 0, not 1
volatile uint8_t last_lamp_bar_color=STS_GREEN;
extern volatile uint8_t sts_presence_fall_detection;
extern volatile uint8_t sts_fall_rising_detected_result;
@ -125,13 +126,12 @@ void STS_Lamp_Bar_Scoller(uint8_t color, uint8_t lum_level)
for(uint8_t i = 0; i<STS_LAMP_BAR_LED_NUM; i++)
{
HAL_Delay(6); //MAKE THIS LESS THAN 10 NOT TO BLOCK JOIN THE LORAWAN
HAL_Delay(10); //MAKE THIS LESS THAN 10 NOT TO BLOCK JOIN THE LORAWAN
STS_WS2812B_Set_RGB(color_rgb[color][0]*lum_level,color_rgb[color][1]*lum_level, color_rgb[color][2]*lum_level, i);
STS_WS2812B_Refresh();
}
HAL_Delay(10);
}
@ -149,7 +149,7 @@ void STS_WS2812B_Set_RGB(uint8_t red, uint8_t green, uint8_t blue, uint8_t idx)
void STS_Lamp_Bar_Set_RGB_Color(uint8_t red, uint8_t green, uint8_t blue )
{
uint8_t i =0;
UTIL_MEM_set_8((void*)rgb_buf.GRB,0x0,(WS2812B_DATA_LEN));
UTIL_MEM_set_8((void*)rgb_buf.GRB,0x00,(WS2812B_DATA_LEN+RESET_PULSE));
for(i = 0; i < STS_LAMP_BAR_LED_NUM; i++)
{
@ -170,37 +170,38 @@ void STS_Lamp_Bar_Refresh(void)
void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum)
{
switch (sts_lamp_color)
if (sts_lamp_color <=8)
{
case STS_DARK:
STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0);
break;
case STS_GREEN:
STS_Lamp_Bar_Set_RGB_Color(0x0, lum, 0x0);
break;
case STS_RED:
STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0);
break;
case STS_BLUE:
STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum);
break;
case STS_YELLOW:
STS_Lamp_Bar_Set_RGB_Color(lum, lum, 0x0);
break;
case STS_PINK:
STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, lum);
break;
case STS_CYAN:
STS_Lamp_Bar_Set_RGB_Color(0x0, lum, lum);
break;
case STS_WHITE:
STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum);
break;
case STS_COLOR_MAX:
sts_lamp_bar_color = STS_RED_BLUE;
break;
switch (sts_lamp_color)
{
case STS_DARK:
STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0);
break;
case STS_GREEN:
STS_Lamp_Bar_Set_RGB_Color(0x0, lum, 0x0);
break;
case STS_RED:
STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0);
break;
case STS_BLUE:
STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum);
break;
case STS_YELLOW:
STS_Lamp_Bar_Set_RGB_Color(lum, lum, 0x0);
break;
case STS_PINK:
STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, lum);
break;
case STS_CYAN:
STS_Lamp_Bar_Set_RGB_Color(0x0, lum, lum);
break;
case STS_WHITE:
STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum);
break;
}
}
}
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
@ -219,7 +220,7 @@ void STS_Lamp_Bar_Self_Test_Simple(void)
lum_level = 10;
do {
STS_Lamp_Bar_Set_STS_RGB_Color(color, lum_level);
HAL_Delay(50);
HAL_Delay(20);
lum_level += 20;
} while (lum_level < 99);
STS_Lamp_Bar_Set_Dark();
@ -236,11 +237,12 @@ void STS_Lamp_Bar_Self_Test(void)
STS_Lamp_Bar_Self_Test_Simple();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#2] Scoller Testing\r\n");
lum_level=50;
for (color = STS_GREEN; color < STS_COLOR_MAX; color++)
{
STS_Lamp_Bar_Scoller(color, lum_level);
}
STS_Lamp_Bar_Set_Dark();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [##] YunHorn STS Indicative Lamp Self Test Finished\r\n");
if ((sts_work_mode == STS_WIRED_MODE) )
@ -250,7 +252,7 @@ void STS_Lamp_Bar_Self_Test(void)
{
STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, lum_level);
}
STS_Lamp_Bar_Set_Dark();
}

View File

@ -117,7 +117,13 @@ void SystemApp_Init(void)
/*Initialize the Sensors */
EnvSensors_Init();
// LED1 Flash 3 times for normal power on
LED1_TOGGLE; HAL_Delay(500);
LED1_TOGGLE; HAL_Delay(500);
LED1_TOGGLE; HAL_Delay(500);
LED1_TOGGLE; HAL_Delay(500);
LED1_TOGGLE; HAL_Delay(500);
LED1_TOGGLE;
/*Init low power manager*/
UTIL_LPM_Init();
/* Disable Stand-by mode */

View File

@ -53,9 +53,14 @@
#endif
//volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 1, 63, 2, 10, 0.5, 1.3, 0.2};
volatile distance_measure_cfg_t distance_cfg={1.0, 3.5, 4, 63, 2, 10, 0.5, 1.3, 0.2};
// SPARK FUN EXAMPLE
// GOOD --- volatile distance_measure_cfg_t distance_cfg={0.4, 3.5, 4, 63, 0, 10, 0.5, 1.3, 0.2};
// 2024-08-15 volatile distance_measure_cfg_t distance_cfg={0.8, 3.5, 2, 63, 2, 10, 0.5, 1.3, 0.2};
//volatile distance_measure_cfg_t distance_cfg={0.8, 3.5, 4, 63, 2, 10, 0.5, 1.3, 0.2};
volatile distance_measure_cfg_t distance_cfg={0.8, 3.5, 4, 63, 2, 10, 0.4, 1.2, 0.2};
//volatile distance_measure_cfg_t distance_cfg={1.5, 3.3, 2, 63, 4, 10, 0.8182f, 0.4, 0.2};
extern float sts_distance_rss_distance, sts_sensor_install_height;
extern volatile uint16_t sts_distance_rss_distance, sts_sensor_install_height;
static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration);
@ -71,27 +76,28 @@ int sts_distance_rss_detector_distance(void)
if (!acc_rss_activate(hal))
{
APP_LOG(TS_OFF, VLEVEL_M, "Failed to activate RSS\n");
APP_LOG(TS_OFF, VLEVEL_L, "Failed to activate RSS\n");
return EXIT_FAILURE;
}
acc_rss_override_sensor_id_check_at_creation(true);
//acc_rss_override_sensor_id_check_at_creation(true);
acc_detector_distance_configuration_t distance_configuration = acc_detector_distance_configuration_create();
if (distance_configuration == NULL)
{
APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_configuration_create() failed\n");
APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_configuration_create() failed\n");
acc_rss_deactivate();
return EXIT_FAILURE;
}
sts_distance_rss_update_configuration(distance_configuration);
acc_detector_distance_handle_t distance_handle = acc_detector_distance_create(distance_configuration);
if (distance_handle == NULL)
{
APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_create() failed\n");
APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_create() failed\n");
acc_detector_distance_configuration_destroy(&distance_configuration);
acc_rss_deactivate();
return EXIT_FAILURE;
@ -101,7 +107,7 @@ int sts_distance_rss_detector_distance(void)
if (!acc_detector_distance_activate(distance_handle))
{
APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_activate() failed\n");
APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_activate() failed\n");
acc_detector_distance_destroy(&distance_handle);
acc_rss_deactivate();
return EXIT_FAILURE;
@ -109,7 +115,8 @@ int sts_distance_rss_detector_distance(void)
bool success = true;
const int iterations = 5; //5;
uint16_t number_of_peaks = 5;
uint16_t number_of_peaks = 1; // FSB first significant Bin
acc_detector_distance_result_t result[number_of_peaks];
acc_detector_distance_result_info_t result_info;
float tmp_distance = 0.0f;
@ -120,19 +127,20 @@ int sts_distance_rss_detector_distance(void)
if (!success)
{
APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_get_next() failed\n");
APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_get_next() failed\n");
break;
}
for(uint8_t j=0; j< result_info.number_of_peaks; j++)
tmp_distance += result[j].distance_m;
tmp_distance = tmp_distance + (result[j].distance_m); //KalmanFilter(result[j].distance_m);
print_distances(result, result_info.number_of_peaks);
}
sts_distance_rss_distance = (uint16_t)(1000*(tmp_distance/result_info.number_of_peaks)/iterations);
APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Distance= %u mm\r\n", (uint16_t)sts_distance_rss_distance);
sts_distance_rss_distance = (uint16_t)(1000*tmp_distance)/(number_of_peaks*iterations);
// ensure it's a valid installation height
sts_sensor_install_height = sts_distance_rss_distance; //MAX(sts_distance_rss_distance,2000);
//sts_sensor_install_height = (uint16_t)MAX(sts_distance_rss_distance,2000);
sts_sensor_install_height = (uint16_t)sts_distance_rss_distance;
APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Distance =%u mm --- Assume Sensor Install Height = %u mm\r\n", (uint16_t)sts_distance_rss_distance, (uint16_t)sts_sensor_install_height);
bool deactivated = acc_detector_distance_deactivate(distance_handle);
@ -142,13 +150,13 @@ int sts_distance_rss_detector_distance(void)
if (deactivated && success)
{
APP_LOG(TS_OFF, VLEVEL_H, "Application finished OK\n");
APP_LOG(TS_OFF, VLEVEL_L, "Application finished OK\n");
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
/*
static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration)
{
acc_detector_distance_configuration_mur_set(distance_configuration, DEFAULT_FAR_RANGE_MUR); // NEW ADD
@ -167,8 +175,9 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur
acc_detector_distance_configuration_cfar_threshold_window_set(distance_configuration,DEFAULT_FAR_RANGE_CFAR_THRESHOLD_WINDOW);
acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16);
}
*/
//backup. ... previous setting ----don't delete
/*
static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration)
{
acc_detector_distance_configuration_requested_start_set(distance_configuration, distance_cfg.start_m);
@ -185,6 +194,7 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur
acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16);
}
*/
//
static void print_distances(acc_detector_distance_result_t *result, uint16_t reflection_count)
{

View File

@ -35,6 +35,14 @@
#include "sys_app.h"
#include "yunhorn_sts_prd_conf.h"
#include "yunhorn_sts_sensors.h"
#ifndef MIN
#define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
#endif
#ifndef MAX
#define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
#endif
/*
#define DEFAULT_START_M (0.2f)
#define DEFAULT_LENGTH_M (1.4f)
@ -50,7 +58,7 @@
#define DEFAULT_SENSOR_ID (1)
#define DEFAULT_START_M (0.8f) //(0.80f) //default 0.2 unit(meter) [1]
#define DEFAULT_LENGTH_M (2.5f) // (2.0f)) //default 1.0 unit(meter) [2]
#define DEFAULT_LENGTH_M (3.5f) // (2.0f)) //default 1.0 unit(meter) [2]
#define DEFAULT_ZONE_LENGTH (0.4f) //default 0.4 unit(meter)
#define DEFAULT_UPDATE_RATE_WAKEUP (2.0f) //default 80 unit(hz)
#define DEFAULT_UPDATE_RATE_TRACKING (10.0f) //default 80 unit(hz) [7]
@ -59,14 +67,14 @@
//#define DEFAULT_UPDATE_RATE_PRESENCE (80.0F) //(65.0f) //default 80 unit(hz)
#define DEFAULT_HWAAS (63) //default 10 unit(hz)
#define DEFAULT_THRESHOLD (1.2f) //default 1.5 level float [3]
#define DEFAULT_THRESHOLD (1.5f) //default 1.5 level float [3]
//acc_detector_presence_configuration_filter_parameters_t
#define DEFAULT_INTER_FRAME_DEVIATION_TIME_CONST (0.5f) //default 0.5 unit(seconds) [6]
#define DEFAULT_INTER_FRAME_FAST_CUTOFF (10.0f) //default 20.0 unit(hz) [8]
#define DEFAULT_INTER_FRAME_SLOW_CUTOFF (0.01f) //(0.01f) 0.2 hz unit(hz) [9]
#define DEFAULT_INTRA_FRAME_TIME_CONST (0) //default 0.0 unit(seconds)
#define DEFAULT_INTRA_FRAME_WEIGHT (0) //default 0.6
#define DEFAULT_INTRA_FRAME_WEIGHT (0) //default 0.6 for normal slow tracking 1.0 for fast tracking
#define DEFAULT_OUTPUT_TIME_CONST (0.5f) //default 0.5 unit(seconds) [5]
//#define DEFAULT_OUTPUT_TIME_CONST (0.4f) //default 0.5 unit(seconds) [5]
@ -74,8 +82,8 @@
#define DEFAULT_NBR_REMOVED_PC (0) //default 0 int [10]
#define DEFAULT_DOWNSAMPLING_FACTOR (2) //default 1
#define DEFAULT_RECEIVER_GAIN (0.65f) //default 0.9 gain mdB [4]
//#define DEFAULT_RECEIVER_GAIN (0.65f) //default 0.9 gain mdB [4]
//#define DEFAULT_RECEIVER_GAIN (0.65f) //default 0.9 gain mdB [4]
#define DEFAULT_RECEIVER_GAIN (0.40f) //default 0.9 gain mdB [4]
#define DEFAULT_MOTION_DATASET_LEN (128) //MOTION DATASET/PATTERN COLLECTION
#define DEFAULT_MOTION_FEATURE_LEN (10) //MOTION FEATURE IDENDIFIED
@ -111,8 +119,9 @@ extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_dep
volatile uint8_t sts_unconscious_state=0;
volatile uint16_t sts_unconscious_threshold=1280, sts_unconscious_duration=0;
extern volatile uint8_t sts_rss_result, sts_rss_config_updated_flag, last_sts_rss_result;
extern volatile float sts_distance_rss_distance, sts_sensor_install_height;
extern volatile uint16_t sts_distance_rss_distance, sts_sensor_install_height;
extern volatile uint8_t sts_work_mode;
extern volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData;
volatile float sts_presence_rss_distance, sts_presence_rss_score;
volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config;
//static void update_configuration(acc_detector_presence_configuration_t presence_configuration);
@ -121,13 +130,19 @@ volatile uint8_t motion_detected_count=0;
volatile uint8_t motion_in_hs_zone[12][10]={0}; //0.4*12=4.8meter high, past 10 measures
volatile uint8_t detected_hs_zone=0;;
volatile uint16_t motion_count=0, motion_feature_count=0;
static acc_detector_presence_result_t sts_motion_dataset[DEFAULT_MOTION_DATASET_LEN];
typedef struct
{
uint32_t presence_score; // 1000*
uint32_t presence_distance; // 1000*, in mm
} STS_presence_result_t;
static STS_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_NORMAL;
volatile uint8_t sts_fall_rising_detected_result_changed_flag =0;
volatile uint8_t last_sts_fall_rising_detected_result= STS_PRESENCE_NORMAL;
volatile float last_average_presence_distance;
volatile uint16_t sts_fall_rising_pattern_factor1=0, sts_fall_rising_pattern_factor2=0;
volatile uint16_t last_average_presence_distance=0;
volatile uint16_t sts_fall_rising_pattern_factor1=0, sts_fall_rising_pattern_factor2=0, sts_fall_rising_pattern_factor3=0;
volatile uint16_t sts_roc_acc_standard_variance=0;
extern volatile uint8_t sts_presence_fall_detection;
/* USER CODE END Includes */
@ -169,21 +184,6 @@ extern volatile uint8_t sts_presence_fall_detection;
/* Exported functions --------------------------------------------------------*/
void STS_PRESENCE_RSS_update_default_configuration(acc_detector_presence_configuration_t presence_configuration)
{
acc_detector_presence_configuration_sensor_set(presence_configuration, DEFAULT_SENSOR_ID);
acc_detector_presence_configuration_service_profile_set(presence_configuration, DEFAULT_PROFILE);
acc_detector_presence_configuration_update_rate_set(presence_configuration, DEFAULT_UPDATE_RATE);
acc_detector_presence_configuration_detection_threshold_set(presence_configuration, DEFAULT_DETECTION_THRESHOLD);
acc_detector_presence_configuration_start_set(presence_configuration, DEFAULT_START_M);
acc_detector_presence_configuration_length_set(presence_configuration, DEFAULT_LENGTH_M);
acc_detector_presence_configuration_power_save_mode_set(presence_configuration, DEFAULT_POWER_SAVE_MODE);
acc_detector_presence_configuration_nbr_removed_pc_set(presence_configuration, DEFAULT_NBR_REMOVED_PC);
}
/**
* @brief Set default values in presence configuration
*
@ -315,14 +315,16 @@ static void print_result(acc_detector_presence_result_t result)
{
if (result.presence_detected)
{
uint32_t detected_zone = (uint32_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
//uint32_t detected_zone = (uint32_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
// 2024-08-05
uint32_t detected_zone = (uint32_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH);
APP_LOG(TS_OFF, VLEVEL_H,"Motion in zone: %u, distance: %d, score: %d\n", (unsigned int)detected_zone,
(int)(result.presence_distance * 1000.0f),
(int)(result.presence_score * 1000.0f));
}
else
{
APP_LOG(TS_OFF, VLEVEL_H,"No motion, score: %d\n", (int)(result.presence_score * 1000.0f));
APP_LOG(TS_OFF, VLEVEL_H,"No motion, score: %u\n", (int)(result.presence_score * 1000.0f));
}
}
@ -353,22 +355,30 @@ int sts_presence_rss_fall_rise_detection(void)
switch (sts_rss_config_updated_flag)
{
case STS_RSS_CONFIG_NON:
APP_LOG(TS_OFF, VLEVEL_M,"\r\n##### YUNHORN STS *** Non *** cfg \n");
return EXIT_SUCCESS;
break;
case STS_RSS_CONFIG_DEFAULT:
set_default_configuration(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_M,"\r\n##### YUNHORN STS *** Default *** cfg applied\n");
break;
case STS_RSS_CONFIG_SIMPLE:
sts_rss_set_current_configuration_simple(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_L,"\r\n##### YUNHORN STS *** Simple *** cfg applied\n");
APP_LOG(TS_OFF, VLEVEL_M,"\r\n##### YUNHORN STS *** Simple *** cfg applied\n");
break;
case STS_RSS_CONFIG_FULL:
sts_rss_set_current_configuration_full(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_L,"\r\n######### YUNHORN STS *** FULL *** cfg applied\n");
APP_LOG(TS_OFF, VLEVEL_M,"\r\n######### YUNHORN STS *** FULL *** cfg applied\n");
break;
case STS_RSS_CONFIG_FALL_DETECTION:
set_default_fall_rise_configuration(presence_configuration);
APP_LOG(TS_OFF, VLEVEL_M,"\r\n######### YUNHORN STS *** FALL DETECTION *** cfg applied\n");
break;
default:
break;
}
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT; //update finished, set to 0
//sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT; //update finished, set to 0
acc_detector_presence_handle_t handle = acc_detector_presence_create(presence_configuration);
if (handle == NULL)
@ -386,7 +396,7 @@ int sts_presence_rss_fall_rise_detection(void)
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
return false;
}
bool deactivated = false;
bool success = true;
const int iterations = (DEFAULT_UPDATE_RATE_PRESENCE+1);
acc_detector_presence_result_t result;
@ -399,203 +409,237 @@ int sts_presence_rss_fall_rise_detection(void)
for (uint8_t k=0;k<12;k++)
motion_in_hs_zone[k][motion_detected_count]=0;
UTIL_MEM_set_8(sts_motion_dataset, 0x0, sizeof(sts_motion_dataset));
motion_count =0;
//memset((void*)motion_in_hs_zone, 0x0, 12*10);
//past 10 times of detection with 5 zones from ground to ceiling
//for (k=0; k<5; k++) {motion_in_zone[k]=0;}
#if 1
for (int i = 0; i < (iterations/2); i++)
if ((sts_work_mode == STS_DUAL_MODE)||(sts_work_mode == STS_RSS_MODE))
{
success = acc_detector_presence_get_next(handle, &result);
if (!success)
{
APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n");
break;
}
print_result(result);
if (!result.data_saturated)
{
if (result.presence_detected)
for (int i = 0; i < (iterations); i++)
{
average_result++;
average_distance += result.presence_distance;
average_score += result.presence_score;
detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
motion_in_zone[detected_zone]++;
// new add 2024-06-18
//detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH);
//if (detected_hs_zone == 0)
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nPresence_Distance=%u \r\n", (int)result.presence_distance*1000.0);
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nHS_ZONE=%u", (int)detected_hs_zone);
detected_hs_zone = 6 - detected_zone;
motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++;
}
sts_motion_dataset[motion_count].presence_distance = result.presence_distance;
sts_motion_dataset[motion_count].presence_score = result.presence_score;
if (sts_presence_fall_detection == TRUE)
{
if (motion_count ++ == DEFAULT_MOTION_DATASET_LEN)
success = acc_detector_presence_get_next(handle, &result);
if (!success)
{
// STS_YunhornCheckStandardDeviation(); no Deviation in middle 2024 -7-22
motion_count = 0;
APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n");
break;
}
//print_result(result);
if (!result.data_saturated)
{
//APP_LOG(TS_OFF, VLEVEL_H,"\n%u ", i);
//print_result(result);
if (result.presence_detected)
{
//print_result(result);
average_result++;
average_distance += result.presence_distance;
average_score += result.presence_score;
//detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
//2024-08-05
detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH);
motion_in_zone[detected_zone]++;
// new add 2024-06-18
//detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH);
//if (detected_hs_zone == 0)
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nPresence_Distance=%u \r\n", (int)result.presence_distance*1000.0);
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nHS_ZONE=%u", (int)detected_hs_zone);
detected_hs_zone = 10 - detected_zone;
motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++;
sts_motion_dataset[motion_count].presence_distance = 1000*result.presence_distance;
sts_motion_dataset[motion_count].presence_score = 1000*result.presence_score;
motion_count++;
}
}
acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE);
//acc_integration_sleep_ms(1);
}
}
//acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE);
//acc_integration_sleep_ms(1);
deactivated = acc_detector_presence_deactivate(handle);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n First Half --- Motion Count = %u \r\n", motion_count);
//acc_detector_presence_deactivate(handle);
}
else if ((sts_work_mode == STS_UNI_MODE))
{
acc_detector_presence_deactivate(handle);
// ******** Second Half detection of fall down and rise up
//if (sts_presence_fall_detection == TRUE)
//{
// the following has been updated, no need to re-cofig
#if 0
set_default_fall_rise_configuration(presence_configuration);
if (!acc_detector_presence_reconfigure(&handle, presence_configuration))
{
APP_LOG(TS_OFF, VLEVEL_H,"Failed to reconfigure detector\n");
acc_detector_presence_configuration_destroy(&presence_configuration);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
return EXIT_FAILURE;
}
#endif
// ******** Second Half detection of fall down and rise up
//if (sts_presence_fall_detection == TRUE)
//{
set_default_fall_rise_configuration(presence_configuration);
if (!acc_detector_presence_reconfigure(&handle, presence_configuration))
{
APP_LOG(TS_OFF, VLEVEL_M,"Failed to reconfigure detector\n");
acc_detector_presence_configuration_destroy(&presence_configuration);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
return EXIT_FAILURE;
}
if (!acc_detector_presence_activate(handle))
{
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
return false;
}
acc_detector_presence_configuration_destroy(&presence_configuration);
// set to full length of iteration
for (int i = 0; i < (iterations/2); i++)
{
success = acc_detector_presence_get_next(handle, &result);
if (!success)
{
APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n");
break;
}
print_result(result);
if (!result.data_saturated)
{
if (result.presence_detected)
// activated already
#if 0
if (!acc_detector_presence_activate(handle))
{
average_result++;
average_distance += result.presence_distance;
average_score += result.presence_score;
detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
motion_in_zone[detected_zone]++;
// new add 2024-06-18
//detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH);
//if (detected_hs_zone == 0)
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nPresence_Distance=%u \r\n", (int)result.presence_distance*1000.0);
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nHS_ZONE=%u", detected_hs_zone);
detected_hs_zone = 6 - detected_zone;
motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++;
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
return false;
}
#endif
if (sts_presence_fall_detection == TRUE)
acc_detector_presence_configuration_destroy(&presence_configuration);
// set to full length of iteration
for (int i = 0; i < (iterations); i++)
{
sts_motion_dataset[motion_count].presence_distance = result.presence_distance;
sts_motion_dataset[motion_count].presence_score = result.presence_score;
if (motion_count ++ == DEFAULT_MOTION_DATASET_LEN)
success = acc_detector_presence_get_next(handle, &result);
if (!success)
{
APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n");
break;
}
STS_YunhornCheckStandardDeviation();
motion_count = 0;
if (!result.data_saturated)
{
//APP_LOG(TS_OFF, VLEVEL_H,"\n%u ", i);
//print_result(result);
if ((result.presence_detected) && (result.presence_score > DEFAULT_THRESHOLD))
{
//print_result(result);
average_result++;
average_distance += result.presence_distance;
average_score += result.presence_score;
//detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH);
// 2024-08-05
detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH);
motion_in_zone[detected_zone]++;
// new add 2024-06-18
//detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH);
//if (detected_hs_zone == 0)
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nPresence_Distance=%u \r\n", (int)result.presence_distance*1000.0);
//APP_LOG(TS_OFF, VLEVEL_L, "\r\nHS_ZONE=%u", detected_hs_zone);
//(sts_sensor_install_height/1000)/(DEFAULT_ZONE_LENGTH)
detected_hs_zone = (sts_sensor_install_height/1000)/(DEFAULT_ZONE_LENGTH) - detected_zone;
motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++;
sts_motion_dataset[motion_count].presence_distance = 1000*result.presence_distance;
sts_motion_dataset[motion_count].presence_score = 1000*result.presence_score;
motion_count++;
}
}
// ~12 ms per RSS scan
// acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15 ms, DEFAULT_UPDATE_RATE);
//acc_integration_sleep_ms(10); --- around 1500 ms in total
acc_integration_sleep_ms(2); //--- around 1000ms in total
}
}
deactivated = acc_detector_presence_deactivate(handle);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
//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);
//uint8_t thiscnt= motion_detected_count;
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Second Half --- Motion Count Sum to = %u \r\n", motion_count);
//APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count);
motion_count = motion_count%DEFAULT_MOTION_DATASET_LEN; // get all required number of motion data
//sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
if ((sts_presence_fall_detection == TRUE)&& (motion_count> (DEFAULT_MOTION_DATASET_LEN/2)))
{
// major fall/rise/laydown/unconscious suggestion process
STS_YunhornCheckStandardDeviation();
}
if (motion_detected_count++ == 10) {
motion_detected_count=0;
} else {
OnSensor3CStateChanged();
}
sts_rss_result = (average_result > 3)? 1: 0;
average_distance = (1000.0f*average_distance)/average_result; // in meters
average_score = (1000.0f*average_score)/average_result;
sts_presence_rss_distance = average_distance;
sts_presence_rss_score = average_score;
sts_rss_result = (average_result > (DEFAULT_UPDATE_RATE_PRESENCE/5))? 1: 0;
//if (average_result) //if (average_score !=0) //if (sts_rss_result)
{
APP_LOG(TS_OFF, VLEVEL_L,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
(uint8_t)sts_rss_result,(int) sts_presence_rss_distance, (int)(sts_presence_rss_score), (int)average_result, (int)iterations);
}
// RSS feature 1: Motion, No-motion process
if (sts_rss_result) {
LED1_ON;
OnSensor3AStateChanged();
OnSensorRSS3AStateChanged();
} else {
LED1_OFF;
}
// RSS feature 2: Fall Detection process
/* TODO XXXX 2024-06-06
* Fall Detection settings
*/
if (sts_fall_rising_detected_result) {
if (sts_fall_rising_detected_result)
{
LED1_ON;
OnSensor3BStateChanged();
OnSensorRSS3BStateChanged();
sts_fall_rising_detected_result_changed_flag = sts_fall_rising_detected_result;
} else {
LED1_OFF;
}
#ifdef LOG_RSS
APP_LOG(TS_OFF, VLEVEL_L,"\r\nSensor at Ceiling Height: %4u mm\r\n",(int)sts_sensor_install_height);
for (uint8_t k=0; k<12; k++) {
if (motion_in_hs_zone[k][thiscnt]>0) {
APP_LOG(TS_OFF, VLEVEL_L,"\r\nMotion Distance Zone: %2u %4u Height< %4u cm", k, (uint8_t)motion_in_hs_zone[k][thiscnt], (int)(k+1)*40);
}
else
{
APP_LOG(TS_OFF, VLEVEL_L,"\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;
sts_presence_rss_score = average_score;
if (average_score) //if (average_score !=0) //if (sts_rss_result)
{
#ifdef LOG_RSS
APP_LOG(TS_OFF, VLEVEL_L,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
(uint8_t)sts_rss_result,(int) average_distance, (int)(average_score), (int)average_result, (int)iterations);
#endif
#ifdef LOG_RSS
for (uint8_t j=0; j<5; j++) {
APP_LOG(TS_OFF, VLEVEL_M,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
(uint8_t)sts_rss_result,(int) average_distance, (int)(average_score), (int)average_result, (int)iterations);
}
#endif
// RSS feature 3: No motion, or stay still , or unconscious process
uint8_t thiscnt= motion_detected_count;
if (motion_detected_count++ == 10) {
motion_detected_count=0;
} else {
OnSensorRSS3CStateChanged();
}
//#ifdef LOG_RSS
if (sts_work_mode == STS_UNI_MODE)
{
APP_LOG(TS_OFF, VLEVEL_M,"\r\nSensor at Ceiling Height: %u cm\r\n",(uint16_t)sts_sensor_install_height/10);
APP_LOG(TS_OFF, VLEVEL_M,"\r\n|Motion Distance Zone| ##### |Height cm|\r\n");
uint8_t kk = (uint8_t)((uint16_t)(sts_sensor_install_height/1000)/(DEFAULT_ZONE_LENGTH));
APP_LOG(TS_OFF, VLEVEL_M,"\r\n|-----------Ceiling-------Sensor---V-----|\r\n");
for (uint8_t k=0; k <=kk; k++)
{
if (motion_in_hs_zone[kk - k][thiscnt] > 0)
{
APP_LOG(TS_OFF, VLEVEL_M,"\r\n| %2u | %4u | %4u |\r\n",
(kk-k), (uint8_t)motion_in_hs_zone[kk-k][thiscnt], (int)(kk-k)*40);
} else {
APP_LOG(TS_OFF, VLEVEL_M,"\r\n| %2u | | |\r\n", kk-k);
}
}
APP_LOG(TS_OFF, VLEVEL_M,"\r\n|-----------Floor Ground-----------^-----|\r\n");
}
//#endif
bool deactivated = acc_detector_presence_deactivate(handle);
acc_detector_presence_destroy(&handle);
acc_rss_deactivate();
if (deactivated && success)
{
@ -610,114 +654,134 @@ int sts_presence_rss_fall_rise_detection(void)
void STS_YunhornCheckStandardDeviation(void)
{
uint16_t i,j; // sts_sensor_install_height <--- average_presence_distance should be approaching this distance - 50cm
float sum_presence_distance = 0, sum_presence_score=0; //presence score act as magnetic or amplitude of motion
float average_presence_distance = 0, average_presence_score=0;
float variance_presence_distance = 0, variance_presence_score=0;
float standard_variance_presence_distance = 0, standard_variance_presence_score=0;
uint32_t sum_presence_distance = 0, sum_presence_score=0; //presence score act as magnetic or amplitude of motion
uint32_t average_presence_distance = 0, average_presence_score=0;
uint32_t variance_presence_distance = 0, variance_presence_score=0;
uint32_t standard_variance_presence_distance = 0, standard_variance_presence_score=0;
// ROC -- rate of change
float roc_distance[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_distance=0, average_roc_distance=0, variance_roc_distance=0, standard_variance_roc_distance=0;
float roc_acc[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_acc=0.0f, average_roc_acc=0.0f, variance_roc_acc=0.0f, standard_variance_roc_acc=0.0f;;
uint32_t roc_distance[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_distance=0, average_roc_distance=0, variance_roc_distance=0, standard_variance_roc_distance=0;
uint32_t roc_acc[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_acc=0, average_roc_acc=0, variance_roc_acc=0, standard_variance_roc_acc=0;
//act as speed of change at given time slot acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE);
uint8_t SAMPLE_DATASET_NUM = MIN(motion_count,DEFAULT_MOTION_DATASET_LEN );
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Sample dataset for deviation process =%u \r\n",SAMPLE_DATASET_NUM);
//SUM
for(i= 0; i< DEFAULT_MOTION_DATASET_LEN; i++)
// initial state
sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
//SUM of samples
for(i= 0; i< SAMPLE_DATASET_NUM; i++)
{
sum_presence_distance += (float)sts_motion_dataset[i].presence_distance;
sum_presence_score += (float)sts_motion_dataset[i].presence_score;
sum_presence_distance += (uint32_t)sts_motion_dataset[i].presence_distance;
sum_presence_score += (uint32_t)sts_motion_dataset[i].presence_score;
}
// AVERAGE
average_presence_distance = ((float)sum_presence_distance/(float)DEFAULT_MOTION_DATASET_LEN);
average_presence_score = ((float)sum_presence_score/(float)DEFAULT_MOTION_DATASET_LEN);
// AVERAGE of all samples ( u (miu) )
average_presence_distance = ((uint32_t)sum_presence_distance/(uint32_t)(SAMPLE_DATASET_NUM));
average_presence_score = ((uint32_t)sum_presence_score/(uint32_t)(SAMPLE_DATASET_NUM));
// VARIANCE
for (j = 0; j < DEFAULT_MOTION_DATASET_LEN; j++)
// 1) VARIANCE^2
for (j = 0; j < SAMPLE_DATASET_NUM; j++)
{
variance_presence_distance += (float)pow(sts_motion_dataset[j].presence_distance - average_presence_distance,2);
variance_presence_score += (float)pow(sts_motion_dataset[j].presence_score - average_presence_score,2);
sum_presence_distance += (uint32_t)pow(sts_motion_dataset[j].presence_distance - average_presence_distance,2);
sum_presence_score += (uint32_t)pow(sts_motion_dataset[j].presence_score - average_presence_score,2);
}
variance_presence_distance /= (float)DEFAULT_MOTION_DATASET_LEN;
variance_presence_score /= (float)DEFAULT_MOTION_DATASET_LEN;
//STANDARD VARIANCE
standard_variance_presence_distance = (float)pow(variance_presence_distance,0.5);
standard_variance_presence_score = (float)pow(variance_presence_score,0.5);
variance_presence_distance =sum_presence_distance/(uint32_t)(SAMPLE_DATASET_NUM-1);
variance_presence_score =sum_presence_score/(uint32_t)(SAMPLE_DATASET_NUM-1);
//STANDARD VARIANCE sigma
standard_variance_presence_distance = (uint32_t)sqrt(sum_presence_distance/SAMPLE_DATASET_NUM);
standard_variance_presence_score = (uint32_t)sqrt(sum_presence_score/SAMPLE_DATASET_NUM);
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Standard Variance_Presence_Distance=%u \r\n Standard Variance Presence Score=%u\r\n",
standard_variance_presence_distance, standard_variance_presence_score);
// ROC distance
// SUM
for(i= 0; i< (DEFAULT_MOTION_DATASET_LEN-1); i++)
for(i= 0; i< (SAMPLE_DATASET_NUM-1); i++)
{
roc_distance[i] = (float)(labs(sts_motion_dataset[i+1].presence_distance - sts_motion_dataset[i].presence_distance));
sum_roc_distance += ((float)roc_distance[i]);
roc_distance[i] = (uint32_t)(labs(sts_motion_dataset[i+1].presence_distance - sts_motion_dataset[i].presence_distance));
sum_roc_distance += ((uint32_t)roc_distance[i]);
}
average_roc_distance = (float)sum_roc_distance/(float)(DEFAULT_MOTION_DATASET_LEN-1);
average_roc_distance = (uint32_t)sum_roc_distance/(SAMPLE_DATASET_NUM-1);
for (j = 0; j < (DEFAULT_MOTION_DATASET_LEN-1); j++)
for (j = 0; j < (SAMPLE_DATASET_NUM-1); j++)
{
variance_roc_distance += (float)(pow((float)roc_distance[j] - (float)average_roc_distance,2.0f));
sum_roc_distance += (uint32_t)(pow(roc_distance[j] - average_roc_distance,2));
}
// average
variance_roc_distance =sum_roc_distance/(uint32_t)(SAMPLE_DATASET_NUM-2);
variance_roc_distance /= (float)(DEFAULT_MOTION_DATASET_LEN-1);
standard_variance_roc_distance = (float)pow((float)variance_roc_distance,0.5f);
//????
standard_variance_roc_distance = (uint32_t)sqrt((uint32_t)variance_roc_distance)/(SAMPLE_DATASET_NUM-1);
// ROC Acceleration
for(i= 0; i< (DEFAULT_MOTION_DATASET_LEN-2); i++)
for(i= 0; i< (SAMPLE_DATASET_NUM-2); i++)
{
roc_acc[i] = (float)(labs((float)roc_distance[i+1] - (float)roc_distance[i]));
sum_roc_acc += ((float)roc_acc[i]);
roc_acc[i] = (uint32_t)(labs((uint32_t)roc_distance[i+1] - (uint32_t)roc_distance[i]));
sum_roc_acc += ((uint32_t)roc_acc[i]);
}
average_roc_acc = (float)sum_roc_acc/(float)(DEFAULT_MOTION_DATASET_LEN-2);
average_roc_acc = (uint32_t)sum_roc_acc/(SAMPLE_DATASET_NUM-3);
for (j = 0; j < (DEFAULT_MOTION_DATASET_LEN-2); j++)
for (j = 0; j < (SAMPLE_DATASET_NUM-3); j++)
{
variance_roc_acc += (float)pow((float)((float)roc_acc[j] - (float)average_roc_acc),2.0f);
sum_roc_acc += (uint32_t)pow((uint32_t)((uint32_t)roc_acc[j] - (uint32_t)average_roc_acc),2);
}
variance_roc_acc /= (float)(DEFAULT_MOTION_DATASET_LEN-2);
variance_roc_acc = sum_roc_acc/(uint32_t)(SAMPLE_DATASET_NUM-4);
standard_variance_roc_acc = (float)pow((float)variance_roc_acc,0.5f);
standard_variance_roc_acc = (uint32_t)sqrt((uint32_t)sum_roc_acc)/(SAMPLE_DATASET_NUM-3);
//Normallize to m/s --- * DEFAULT_MOTION_DATASET_LEN for One single second
#if 0
average_roc_distance *= (uint32_t)DEFAULT_MOTION_DATASET_LEN;
variance_roc_distance *= (uint32_t)DEFAULT_MOTION_DATASET_LEN;
standard_variance_roc_distance *= (uint32_t)DEFAULT_MOTION_DATASET_LEN;
average_roc_distance *= (float)DEFAULT_MOTION_DATASET_LEN;
variance_roc_distance *= (float)DEFAULT_MOTION_DATASET_LEN;
standard_variance_roc_distance *= (float)DEFAULT_MOTION_DATASET_LEN;
average_roc_acc *= (float)DEFAULT_MOTION_DATASET_LEN;
variance_roc_acc *= (float)DEFAULT_MOTION_DATASET_LEN;
standard_variance_roc_acc *= (float)DEFAULT_MOTION_DATASET_LEN;
average_roc_acc *= (uint32_t)DEFAULT_MOTION_DATASET_LEN;
variance_roc_acc *= (uint32_t)DEFAULT_MOTION_DATASET_LEN;
standard_variance_roc_acc *= (uint32_t)DEFAULT_MOTION_DATASET_LEN;
#endif
// print result
#ifdef LOG_RSS
APP_LOG(TS_OFF, VLEVEL_L, "\r\n---Sensor Install Height=%6u-----Distance Average =%6u; Variance = %6u ; Standard =%6u \r\n",
(int)sts_sensor_install_height, (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));
//#ifdef LOG_RSS
APP_LOG(TS_OFF, VLEVEL_M, "\r\n---Sensor Install Height=%4u (mm)-----\r\n-------------Distance Average =%6u (mm); Standard_Variance =%04u (mm)\r\n",
(int)sts_sensor_install_height, (int)(average_presence_distance), (int)(standard_variance_presence_distance));
//#endif
//#ifdef LOG_RSS
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n-------------Motion Average (score)=%04u; Standard_Variance (score)=%04u \r\n",
(int)(average_presence_score), (int)(standard_variance_presence_score));
APP_LOG(TS_OFF, VLEVEL_L, "-------------ROC ACC Average =%6u; Variance = %6u ; Standard =%6u \r\n",
(int)(average_roc_acc), (int)(variance_roc_acc), (int)(standard_variance_roc_acc));
sts_o7_sensorData.event_sensor3_fall_distance =(uint16_t)average_presence_distance;
sts_o7_sensorData.event_sensor3_fall_motionscore =(uint16_t)average_presence_score;
sts_fall_rising_pattern_factor1 = (int)(standard_variance_roc_distance);
sts_fall_rising_pattern_factor2 = (int)(fabs(average_presence_distance - fmax(0,last_average_presence_distance))*100.0f); // in cm
APP_LOG(TS_OFF, VLEVEL_L,"Avg-Dist =%6u, Last_AVG-Dist =%6u \r\n", (int)(average_presence_distance*1000.0f), (int)(last_average_presence_distance*1000.0f));
//#endif
//#ifdef LOG_RSS
APP_LOG(TS_OFF, VLEVEL_M, "\r\n-------------ROC Dist Average (mm/s) =%6u; Standard_Variance =%6u (mm/s)\r\n",
(int)(average_roc_distance), (int)(standard_variance_roc_distance));
APP_LOG(TS_OFF, VLEVEL_L, "Threshold 1: \r\nAcc = %6u \r\nMeasure 1 = %6u ---- \r\n",
APP_LOG(TS_OFF, VLEVEL_M, "\r\n-------------ROC ACC Average =%6u (mm/s2); Standard_Variance =%6u (mm/s2)\r\n",
(int)(average_roc_acc), (int)(standard_variance_roc_acc));
//sts_fall_rising_pattern_factor1 = (int)(standard_variance_roc_distance);
sts_fall_rising_pattern_factor1 = (int)(average_roc_distance);
if (last_average_presence_distance >0)
sts_fall_rising_pattern_factor2 = (uint16_t)(abs((uint16_t)average_presence_distance - (uint16_t)last_average_presence_distance));
//sts_fall_rising_pattern_factor2 = (uint16_t)(abs((uint16_t)average_presence_distance - (uint16_t)sts_sensor_install_height));
//APP_LOG(TS_OFF, VLEVEL_M, "\r\n*************** factor2=%6u ---- average_distance=%6u ----install height=%6u\r\n", sts_fall_rising_pattern_factor2,average_presence_distance,sts_sensor_install_height )
sts_fall_rising_pattern_factor3 = (int)(standard_variance_presence_score);
APP_LOG(TS_OFF, VLEVEL_L,"\r\nAvg-Dist =%6u (mm), Last_AVG-Dist =%6u (mm)\r\n", (int)(average_presence_distance), (int)(last_average_presence_distance));
APP_LOG(TS_OFF, VLEVEL_L,"\r\nStandard Variance Presence_score =%u (score)\r\n", (int)(standard_variance_presence_score));
APP_LOG(TS_OFF, VLEVEL_M, "\r\nThreshold 1: Acc = %6u (mm/s) ---- Measure 1 = %6u (mm/s)---- \r\n",
(int)(sts_fall_detection_acc_threshold), (int)(sts_fall_rising_pattern_factor1));
APP_LOG(TS_OFF, VLEVEL_L, "Threshold 2: \r\nDis = %6u cm \r\nMeasure 2 = %6u cm ---- \r\n",
(int)(sts_fall_detection_depth_threshold), (int)(sts_fall_rising_pattern_factor2));
#endif
APP_LOG(TS_OFF, VLEVEL_M, "\r\nThreshold 2: Dis = %6u (cm) --- Measure 2 = %6u (cm) ---- \r\n",
(int)(sts_fall_detection_depth_threshold), (int)(sts_fall_rising_pattern_factor2/10));
APP_LOG(TS_OFF, VLEVEL_M, "\r\nMeasure 3 = %6u (score) ---- \r\n", (int)(sts_fall_rising_pattern_factor3));
//#endif
// *******************************************
// *********** detection situation suggestion
@ -726,17 +790,24 @@ void STS_YunhornCheckStandardDeviation(void)
{
sts_fall_rising_detected_result = STS_PRESENCE_STAYSTILL;
//sts_fall_rising_detected_result = STS_PRESENCE_NO_MOVEMENT;
} else {
sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
}
//
// Considering factor #1 --- fall down speed, say > 0.3g or in less than 0.3 seconds
//
if ( sts_fall_rising_pattern_factor1 > (uint16_t)sts_fall_detection_acc_threshold)
{
// if ((average_presence_distance > (sts_motion_feature[motion_feature_count].p_dist_avg + sts_motion_feature[motion_feature_count].p_dist_v)))
// if ((average_presence_distance > (sts_motion_feature[motion_feature_count].p_dist_avg + sts_motion_feature[motion_feature_count].p_dist_v)))
// if ((average_presence_distance > (last_average_presence_distance + sts_fall_detection_depth_threshold*0.1)))
if ((sts_fall_rising_pattern_factor2 > sts_fall_detection_depth_threshold ) && (average_presence_distance > DEFAULT_START_M))
//
// Considering factor #2 --- fall down depth, say > 30 cm 40 cm in given factor 1 time unit
//
if ((sts_fall_rising_pattern_factor2 > (sts_fall_detection_depth_threshold*10) ) && (average_presence_distance > 1000*DEFAULT_START_M))
{
sts_fall_rising_detected_result = STS_PRESENCE_FALL;
//last_sts_fall_rising_detected_result = sts_fall_rising_detected_result;
@ -766,7 +837,7 @@ void STS_YunhornCheckStandardDeviation(void)
}
}
if ((last_sts_fall_rising_detected_result == STS_PRESENCE_FALL))
if ((last_sts_fall_rising_detected_result == STS_PRESENCE_FALL)&&( sts_fall_rising_detected_result != STS_PRESENCE_FALL ))
{
if ((average_presence_distance < (sts_motion_feature[motion_feature_count].p_dist_avg + sts_motion_feature[motion_feature_count].p_dist_standard)))
{
@ -780,21 +851,15 @@ void STS_YunhornCheckStandardDeviation(void)
}
last_sts_fall_rising_detected_result = sts_fall_rising_detected_result;
} else if ((average_presence_distance + sts_motion_feature[motion_feature_count].p_dist_standard) > last_average_presence_distance)
{
sts_fall_rising_detected_result = STS_PRESENCE_LAYDOWN;
} else {
sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
}
}
last_sts_fall_rising_detected_result = sts_fall_rising_detected_result;
last_average_presence_distance = average_presence_distance;
#if 0
if (sts_fall_rising_detected_result != STS_PRESENCE_NORMAL)
{
STS_FallDetection_LampBarProcess();
}
#endif
}

View File

@ -45,7 +45,7 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
uint8_t t=0;
uint8_t test_result[20]={0x0};
APP_LOG(TS_OFF, VLEVEL_H,"-- 0 -- Acconeer software version %s\n", acc_version_get());
APP_LOG(TS_OFF, VLEVEL_L,"-- 0 -- Acconeer software version %s\n", acc_version_get());
const acc_hal_t *hal = acc_hal_integration_get_implementation();
@ -89,7 +89,7 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
acc_rss_assembly_test_configuration_communication_write_read_test_disable(configuration);
// Enable and run: Interrupt Test
APP_LOG(TS_OFF, VLEVEL_H,"-- Interrupt Test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Interrupt Test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_communication_interrupt_test_enable(configuration);
if (!run_test(configuration))
@ -104,10 +104,10 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_communication_interrupt_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Interrupt Test --- End ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Interrupt Test --- End ********************\r\n");
// Enable and run: Clock Test
APP_LOG(TS_OFF, VLEVEL_H,"-- Clock Test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_clock_test_enable(configuration);
if (!run_test(configuration))
{
@ -121,11 +121,11 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_clock_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Clock Test --- end ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- end ********************\r\n");
// Enable and run: Power cycle test
APP_LOG(TS_OFF, VLEVEL_H,"-- Power cycle test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_power_cycle_test_enable(configuration);
if (!run_test(configuration))
{
@ -139,11 +139,11 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_power_cycle_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Power cycle test --- end ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- end ********************\r\n");
// Enable and run: Hibernate Test
APP_LOG(TS_OFF, VLEVEL_H,"-- Hibernate Test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Hibernate Test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_communication_hibernate_test_enable(configuration);
if (!run_test(configuration))
{
@ -157,10 +157,10 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_communication_hibernate_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Hibernate Test --- End ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Hibernate Test --- End ********************\r\n");
// Enable and run: Supply Test
APP_LOG(TS_OFF, VLEVEL_H,"-- Supply Test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Supply Test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_supply_test_enable(configuration);
if (!run_test(configuration))
{
@ -174,10 +174,10 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_supply_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Supply Test --- End ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Supply Test --- End ********************\r\n");
// Enable and run: Clock Test
APP_LOG(TS_OFF, VLEVEL_H,"-- Clock Test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_clock_test_enable(configuration);
if (!run_test(configuration))
{
@ -191,10 +191,10 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_clock_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Clock Test --- end ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- end ********************\r\n");
// Enable and run: Power cycle test
APP_LOG(TS_OFF, VLEVEL_H,"-- Power cycle test --- Start ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- Start ********************\r\n");
acc_rss_assembly_test_configuration_power_cycle_test_enable(configuration);
if (!run_test(configuration))
{
@ -208,14 +208,14 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
}
acc_rss_assembly_test_configuration_power_cycle_test_disable(configuration);
APP_LOG(TS_OFF, VLEVEL_H,"-- Power cycle test --- end ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- end ********************\r\n");
APP_LOG(TS_OFF, VLEVEL_H,"-- 10 -- Bring up test: All tests passed\n");
APP_LOG(TS_OFF, VLEVEL_L,"-- 10 -- Bring up test: All tests passed\n");
test_result[t++] = 1; //(10)
memcpy(rss_self_test_result, test_result, 12);
APP_LOG(TS_OFF, VLEVEL_H,"--Bring up test result #=%d \r\n", t);
APP_LOG(TS_OFF, VLEVEL_L,"--Bring up test result #=%d \r\n", t);
acc_rss_assembly_test_configuration_destroy(&configuration);
acc_rss_deactivate();
@ -231,17 +231,17 @@ static bool run_test(acc_rss_assembly_test_configuration_t configuration)
if (!acc_rss_assembly_test(configuration, test_results, &nr_of_test_results))
{
APP_LOG(TS_OFF, VLEVEL_H,"Bring up test: Failed to complete\n");
APP_LOG(TS_OFF, VLEVEL_L,"Bring up test: Failed to complete\n");
return false;
} else {
APP_LOG(TS_OFF, VLEVEL_H,"Bring up test: SUCCESS to complete\n");
APP_LOG(TS_OFF, VLEVEL_L,"Bring up test: SUCCESS to complete\n");
}
for (uint16_t i = 0; i < nr_of_test_results; i++)
{
const bool passed = test_results[i].test_passed;
APP_LOG(TS_OFF, VLEVEL_H,"Name: %s, result: %s\n", test_results[i].test_name, passed ? "Pass" : "Fail");
APP_LOG(TS_OFF, VLEVEL_L,"Name: %s, result: %s\n", test_results[i].test_name, passed ? "Pass" : "Fail");
if (!passed)
{

View File

@ -37,44 +37,56 @@
/* USER CODE BEGIN Includes */
extern volatile sts_cfg_nvm_t sts_cfg_nvm;
extern volatile uint8_t sts_ac_code[20];
volatile uint8_t sts_work_mode = STS_UNI_MODE;
#if 0
#if defined(STS_O7)
volatile uint8_t sts_work_mode = STS_UNI_MODE;
#elif defined(STS_O6)
volatile uint8_t sts_work_mode = STS_DUAL_MODE;
#elif defined(STS_O2)
volatile uint8_t sts_work_mode = STS_RSS_MODE;
#endif
#endif
volatile uint8_t sts_service_mask=0;
volatile uint32_t rfac_timer;
volatile uint8_t sensor_data_ready=0;
volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o7_event_status;
// GPIO reed hall pin
extern volatile uint8_t sts_reed_hall_result;
volatile uint8_t last_sts_reed_hall_result;
extern volatile uint8_t sts_hall1_read,sts_hall2_read, sts_hall3_read, sts_hall4_read;
volatile uint8_t sts_reed_hall_1_result=STS_Status_Door_Open,sts_reed_hall_2_result=STS_Status_SOS_Release, last_sts_reed_hall_1_result=STS_Status_Door_Open, last_sts_reed_hall_2_result=STS_Status_SOS_Release;
volatile uint8_t sts_reed_hall_3_result=STS_Status_Door_Open, last_sts_reed_hall_3_result=STS_Status_Door_Open, sts_reed_hall_4_result=STS_Status_Door_Open, last_sts_reed_hall_4_result=STS_Status_Door_Open;
volatile uint8_t sts_soap_level_state;
// RSS motion and distance
volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData;
volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o7_event_status;
volatile float sts_distance_rss_distance, sts_sensor_install_height=0;//in mm
volatile uint16_t sts_distance_rss_distance=0, sts_sensor_install_height=0;//in mm
extern volatile float sts_presence_rss_distance, sts_presence_rss_score;
extern volatile uint8_t sts_hall1_read,sts_hall2_read;
volatile uint8_t sts_reed_hall_1_result=STS_Status_Door_Open,sts_reed_hall_2_result=STS_Status_SOS_Release, last_sts_reed_hall_1_result=STS_Status_Door_Open, last_sts_reed_hall_2_result=STS_Status_SOS_Release;
volatile uint8_t sts_rss_config_updated_flag = 0;
extern volatile uint8_t mems_int1_detected, link_wakeup, link_sleep;
volatile uint32_t event_start_time=0, event_stop_time=0;
volatile uint32_t event_door_lock_start_time=0,event_door_lock_stop_time=0;
volatile uint8_t sts_rss_config_updated_flag = STS_RSS_CONFIG_NON;
extern volatile uint8_t sts_occupancy_overtime_state;
//extern volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config;
extern volatile sts_cfg_nvm_t sts_cfg_nvm;
extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_depth_threshold, sts_occupancy_overtime_threshold_in_10min;
extern volatile uint8_t sts_fall_rising_detected_result_changed_flag;
extern volatile uint8_t last_sts_fall_rising_detected_result;
extern volatile uint16_t sts_motionless_duration_threshold_in_min;
extern volatile uint8_t sts_emergency_button_pushed, sts_rss_2nd_result,sts_tof_result, sts_status_color, sts_lamp_bar_color, sts_service_mask;
extern volatile distance_measure_cfg_t distance_cfg;
extern uint8_t sts_fall_rising_detected_result;
extern volatile uint16_t sts_fall_rising_pattern_factor1;
extern volatile uint16_t sts_roc_acc_standard_variance;
volatile uint32_t last_sts_rss_time_stamp=0;
// RSS fall detection
extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_depth_threshold, sts_occupancy_overtime_threshold_in_10min;
extern volatile uint8_t sts_fall_rising_detected_result, sts_fall_rising_detected_result_changed_flag;
extern volatile uint8_t sts_presence_fall_detection;
extern volatile uint8_t last_sts_fall_rising_detected_result;
extern volatile uint16_t sts_motionless_duration_threshold_in_min;
extern volatile uint8_t sts_status_color, sts_lamp_bar_color;//puColor
extern volatile uint8_t sts_cloud_netcolor; //netColor
extern uint8_t luminance_level;
SysTime_t mems_event_time;
volatile uint32_t last_sts_rss_time_stamp=0;
extern volatile uint8_t sts_reed_hall_ext_int;
volatile uint8_t sts_occupancy_status;
volatile uint8_t sts_hall1_changed_flag=0, sts_hall2_changed_flag=0, last_sts_hall1_result=0, last_sts_hall2_result=0;
volatile uint8_t sts_reed_hall_changed_flag = 0;
@ -96,12 +108,6 @@ extern volatile uint8_t detected_hs_zone;
extern volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config;
volatile uint32_t cnt=0;
extern volatile distance_measure_cfg_t distance_cfg;
volatile uint8_t sts_work_mode = STS_RSS_MODE;
extern uint8_t luminance_level;
extern volatile uint8_t sts_status_color;
extern volatile uint8_t sts_lamp_bar_color; //puColor
extern volatile uint8_t sts_cloud_netcolor; //netColor
volatile uint8_t sts_tof_result_changed_flag = 0;
@ -222,20 +228,38 @@ void STS_YunhornSTSEventRFAC_Process(void)
void STS_YunhornSTSEventP1_Process(void)
{
sts_reed_hall_1_result = HALL1_STATE; //sts_hall1_read;
if (sts_reed_hall_1_result != last_sts_reed_hall_1_result)
{
sts_reed_hall_changed_flag = TRUE;
sts_reed_hall_changed_flag |= 0x01;
}
last_sts_reed_hall_1_result = sts_reed_hall_1_result;
sts_reed_hall_2_result = HALL2_STATE;// sts_hall2_read;
if (sts_reed_hall_2_result != last_sts_reed_hall_2_result)
{
sts_reed_hall_changed_flag = TRUE;
sts_reed_hall_changed_flag |= 0x02;
}
last_sts_reed_hall_2_result = sts_reed_hall_2_result;
sts_reed_hall_3_result = sts_hall3_read;//HALL3_STATE;// sts_hall3_read;
if (sts_reed_hall_3_result != last_sts_reed_hall_3_result)
{
sts_reed_hall_changed_flag |= 0x04;
}
last_sts_reed_hall_3_result = sts_reed_hall_3_result;
sts_reed_hall_4_result = sts_hall4_read;//HALL4_STATE;// sts_hall3_read;
if (sts_reed_hall_4_result != last_sts_reed_hall_4_result)
{
sts_reed_hall_changed_flag |= 0x08;
}
last_sts_reed_hall_4_result = sts_reed_hall_4_result;
STS_Combined_Status_Processing();
}
@ -250,12 +274,30 @@ 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))
{
switch (sts_work_mode) {
case STS_RSS_MODE:
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
break;
case STS_DUAL_MODE:
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
break;
case STS_UNI_MODE:
sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
break;
default:
break;
}
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;
sts_fall_rising_detected_result_changed_flag = (sts_fall_rising_detected_result == last_sts_fall_rising_detected_result)?0:1;
//sts_fall_rising_detected_result_changed_flag = (sts_fall_rising_detected_result == last_sts_fall_rising_detected_result)?0:1;
//sts_fall_rising_detected_result_changed_flag = (sts_fall_rising_detected_result != last_sts_fall_rising_detected_result)?1:0;
last_sts_fall_rising_detected_result = sts_fall_rising_detected_result;
if (sts_service_mask > 0 ) {
@ -274,7 +316,7 @@ void STS_Reed_Hall_Presence_Detection(void)
// HAL_Delay(50); // BOUNCING ELIMIATION
sts_reed_hall_1_result = (sts_hall1_read==0)?STS_Status_Door_Close:STS_Status_Door_Open;
sts_reed_hall_2_result = (sts_hall2_read==0)?STS_Status_Door_Close:STS_Status_Door_Open;
sts_reed_hall_3_result = (sts_hall3_read==0)?STS_Status_Door_Close:STS_Status_Door_Open;
//sts_reed_hall_result = ((STS_Reed_Hall_State)&STS_Status_Door_Open);
@ -282,7 +324,7 @@ void STS_Reed_Hall_Presence_Detection(void)
sts_reed_hall_changed_flag = 0;
sts_reed_hall_ext_int = 0;
}
@ -461,6 +503,8 @@ void STS_Combined_Status_Processing(void)
{
case STS_NETWORK_MODE:
sts_status_color = sts_cloud_netcolor;
sts_lamp_bar_color = sts_cloud_netcolor;
break;
case STS_WIRED_MODE: // NO LAMP BAR FOR THOSE WATER LEAKAGE SENSOR OR SOAP CAPACITY SENSORS
sts_status_color = STS_DARK;
@ -502,11 +546,13 @@ void STS_Combined_Status_Processing(void)
break;
case STS_UNI_MODE: //FOR STS-O7
if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release ))
if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )
&& (sts_reed_hall_3_result == STS_Status_Alarm_Mute_Release )&& (sts_reed_hall_4_result == STS_Status_Alarm_Reset_Release ))
{
sts_status_color = STS_GREEN;
} 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 ))
} 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_reed_hall_3_result == STS_Status_Alarm_Mute_Pushdown )|| (sts_reed_hall_4_result == STS_Status_Alarm_Reset_Pushdown ))
{
sts_status_color = STS_RED;
@ -623,10 +669,11 @@ void STS_Combined_Status_Processing(void)
}
if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag))
if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag)||(sts_fall_rising_detected_result_changed_flag))
{
//sts_rss_result_changed_flag =0;
//sts_reed_hall_changed_flag =0;
//sts_fall_rising_detected_result_changed_flag =0;
//sts_tof_result_changed_flag =0;
sensor_data_ready = 1;
//STS_PRESENCE_SENSOR_Prepare_Send_Data();
@ -655,8 +702,10 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void)
sts_presence_rss_config.default_inter_frame_deviation_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_DEVIATION]*0.1f);
sts_presence_rss_config.default_inter_frame_fast_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF]);
sts_presence_rss_config.default_inter_frame_slow_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF]*0.01f);
sts_presence_rss_config.default_intra_frame_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_TIME]);
sts_presence_rss_config.default_intra_frame_weight = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_WEIGHT]*0.1f);
sts_presence_rss_config.default_output_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME]*0.1f);
//filter parameter
@ -697,22 +746,25 @@ void STS_PRESENCE_SENSOR_Init_Send_Data(void)
sts_o7_sensorData.unconscious_duration = 0x0;
sts_o7_sensorData.no_movement_duration = 0x0;
sts_o7_sensorData.event_sensor1_start_time = 0x0;
sts_o7_sensorData.event_sensor1_duration = 0x0;
sts_o7_sensorData.event_sensor1_start_time = 0x0;
sts_o7_sensorData.event_sensor1_duration = 0x0;
sts_o7_sensorData.event_sensor2_start_time = 0x0;
sts_o7_sensorData.event_sensor2_duration = 0x0;
sts_o7_sensorData.event_sensor2_start_timestamp = 0x0;
sts_o7_sensorData.event_sensor2_stop_timestamp = 0x0;
sts_o7_sensorData.event_sensor2_start_time = 0x0;
sts_o7_sensorData.event_sensor2_duration = 0x0;
sts_o7_sensorData.event_sensor2_start_timestamp = 0x0;
sts_o7_sensorData.event_sensor2_stop_timestamp = 0x0;
sts_o7_sensorData.event_sensor3_motion_start_time = 0x0;
sts_o7_sensorData.event_sensor3_motion_duration = 0x0;
sts_o7_sensorData.event_sensor3_fall_start_time = 0x0;
sts_o7_sensorData.event_sensor3_fall_start_time_stamp = 0x0;
sts_o7_sensorData.event_sensor3_fall_duration = 0x0;
sts_o7_sensorData.event_sensor3_motion_start_time = 0x0;
sts_o7_sensorData.event_sensor3_motion_duration = 0x0;
sts_o7_sensorData.event_sensor3_fall_start_time = 0x0;
sts_o7_sensorData.event_sensor3_fall_start_time_stamp = 0x0;
sts_o7_sensorData.event_sensor3_fall_duration = 0x0;
sts_o7_sensorData.event_sensor3_fall_stop_time_stamp = 0x0;
sts_o7_sensorData.event_sensor4_start_time = 0x0;
sts_o7_sensorData.event_sensor4_duration = 0x0;
sts_o7_sensorData.event_sensor4_start_time = 0x0;
sts_o7_sensorData.event_sensor4_duration = 0x0;
sts_o7_sensorData.event_sensor3_fall_distance = 0x0;
sts_o7_sensorData.event_sensor3_fall_motionscore = 0x0;
sts_o7_sensorData.battery_Pct = 99; // 99% as init value
sts_o7_sensorData.dutycycletimelevel = 1;
@ -723,10 +775,13 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
{
sensor_data->lamp_bar_color = sts_lamp_bar_color;
sensor_data->workmode = sts_work_mode;
// #1 for HALL_ELEMENT, DOOR CONTACT, SENSOR STATE PROCESS
sensor_data->state_sensor1_on_off = HALL1_STATE;//sts_hall1_read; //sts_hsts_reed_hall_result; // sts_hall1_read
sensor_data->state_sensor2_on_off = HALL2_STATE;//sts_hall2_read; //sts_emergency_button_pushed; //sts_hall2_read
sensor_data->state_sensor3_on_off = sts_rss_result;
sensor_data->state_sensor4_on_off = sts_rss_2nd_result;
sensor_data->state_sensor4_on_off = sts_hall3_read; //for alarm mute button
sensor_data->state_sensor5_on_off = sts_hall4_read; //for alarm reset button
if (sensor_data->state_sensor2_on_off==STS_Status_SOS_Pushdown)
{
@ -740,17 +795,18 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
sts_o7_sensorData.event_sensor2_stop_timestamp = 0;
}
// #2 for MOTION RELATED SENSOR STATE PROCESS, OCCUPY/VACANT/OVERSTAY/LONGSTAY/UNCONSCIOUS
if (sts_rss_result == STS_RESULT_MOTION)
{
sensor_data->rss_presence_distance = (uint16_t)(sts_presence_rss_distance)&0xFFFF;
sensor_data->rss_presence_score = (uint16_t)(sts_presence_rss_score)&0xFFFF;
sensor_data->rss_presence_distance = (uint16_t)(sts_presence_rss_distance);
sensor_data->rss_presence_score = (uint16_t)(sts_presence_rss_score);
// uint8_t sts_unconscious_state;
// uint16_t sts_unconscious_threshold, sts_unconscious_threshold_duration;
} else {
sensor_data->rss_presence_distance = 0x0;
sensor_data->rss_presence_score = 0x0;
}
//else {
// sensor_data->rss_presence_distance = 0x0;
// sensor_data->rss_presence_score = 0x0;
// }
// no_movement or unconscious duration
sensor_data->unconscious_state = ((sts_fall_rising_detected_result == STS_PRESENCE_UNCONSCIOUS) ||
@ -762,24 +818,24 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
sensor_data->no_movement_duration = sts_o7_sensorData.event_sensor3_no_movement_duration;
if (sensor_data->unconscious_state !=0)
{
APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Unconscious or No Movement Duration = %u Sec [Threshold: %u Seconds]\r\n",
APP_LOG(TS_OFF,VLEVEL_M,"\r\n ... Unconscious or No Movement Duration = %u Sec [Threshold: %u Seconds]\r\n",
sensor_data->unconscious_duration, sts_motionless_duration_threshold_in_min*60);
}
// Over stay, long stay duration and state
sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state;
sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
if (sensor_data->over_stay_state !=0)
{
APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Over Stay Duration = %u Sec [Threshold: %u Seconds]\r\n",
APP_LOG(TS_OFF,VLEVEL_M,"\r\n ... Over Stay Duration = %u Sec [Threshold: %u Seconds]\r\n",
sensor_data->over_stay_duration,
sts_occupancy_overtime_threshold_in_10min*60);
}
// Fall detection and duration, confirmation duration
// #3 for FALL DETECTION, FALL, RISING, LAYDOWN DURATION CONFIRMATION STATE PROCESS
sensor_data->fall_state = sts_fall_rising_detected_result;
if ((sts_fall_rising_detected_result == STS_PRESENCE_FALL)||
(sts_fall_rising_detected_result == STS_PRESENCE_RISING)||
(sts_fall_rising_detected_result == STS_PRESENCE_LAYDOWN))
{
APP_LOG(TS_OFF, VLEVEL_M, "\r\n......FALL RISING DETECTION RESULT: %25s \r\n",
@ -788,7 +844,8 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
sensor_data->fall_gravity = (uint8_t)sts_roc_acc_standard_variance;
sensor_data->event_sensor3_fall_start_time_stamp = sts_o7_sensorData.event_sensor3_fall_start_time_stamp;
sensor_data->event_sensor3_fall_stop_time_stamp = sts_o7_sensorData.event_sensor3_fall_stop_time_stamp;
sensor_data->event_sensor3_fall_distance = (uint16_t)(sts_o7_sensorData.event_sensor3_fall_distance);
sensor_data->event_sensor3_fall_motionscore = (uint16_t)(sts_o7_sensorData.event_sensor3_fall_motionscore);
} else {
sensor_data->fall_speed = 0;
sensor_data->fall_gravity = 0;
@ -796,9 +853,10 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
sensor_data->event_sensor3_fall_stop_time_stamp =0;
}
// For occupancy over time process
//SysTime_t occupy_check_time = SysTimeGetMcuTime();
#if 0
// TODO XXXX
// FOR ALARM MUTE AND RESET
if ((sts_occupancy_overtime_threshold_in_10min != 0) && (event_start_time !=0))
{
if (sts_occupancy_overtime_state == 1U) {
@ -825,7 +883,7 @@ void STS_PRESENCE_SENSOR_Init(void)
APP_LOG(TS_ON, VLEVEL_M, "##### YunHorn SmarToilets(r) Presence Sensor Started\r\n");
sts_o7_sensorData.workmode = (uint8_t)sts_work_mode; //STS_DUAL_MODE;
//sts_o7_sensorData.lamp_bar_color = (uint8_t)STS_GREEN;
sts_o7_sensorData.lamp_bar_color = (uint8_t)STS_GREEN;
sts_o7_sensorData.battery_Pct = 99;
sts_o7_sensorData.dutycycletimelevel = 1;
sts_o7_sensorData.event_sensor1_start_time = 0;
@ -861,13 +919,13 @@ void STS_PRESENCE_SENSOR_Init(void)
sts_o7_sensorData.unconscious_state = 0;
sts_o7_sensorData.unconscious_duration = 0;
PME_ON;
STS_PRESENCE_SENSOR_REEDSWITCH_HALL_Init();
//PME_ON;
//STS_PRESENCE_SENSOR_REEDSWITCH_HALL_Init();
//STS_PRESENCE_SENSOR_TOF_Init();
//HAL_Delay(2000);
//STS_PRESENCE_SENSOR_Distance_Measure_Process();
mems_int1_detected=0;
}
void STS_PRESENCE_SENSOR_TOF_Init(void)
@ -885,26 +943,42 @@ void STS_PRESENCE_SENSOR_RSS_Init(void)
{
APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) MEMS RSS Initializing \r\n");
PME_ON;
// PME_ON;
if ((sts_distance_rss_distance==0)&&(sts_sensor_install_height==0))
//if ((sts_distance_rss_distance==0)&&(sts_sensor_install_height==0))
{
uint8_t exit_status =0;
exit_status=sts_distance_rss_detector_distance();
if (exit_status ==0) {
APP_LOG(TS_ON, VLEVEL_M, "##### RSS Installation Height =%u \r\n", (uint16_t)sts_distance_rss_distance);
}
else {
APP_LOG(TS_ON, VLEVEL_M, "##### RSS Installation Height Error \r\n");
}
sts_sensor_install_height=sts_distance_rss_distance;
do {
exit_status=sts_distance_rss_detector_distance();
if (exit_status ==0) {
APP_LOG(TS_ON, VLEVEL_H, "##### RSS Installation Height =%u \r\n", (uint16_t)sts_distance_rss_distance);
}
else {
APP_LOG(TS_ON, VLEVEL_H, "##### RSS Installation Height Error \r\n");
HAL_Delay(100);
}
} while((0));
sts_sensor_install_height = (uint16_t)sts_distance_rss_distance;
}
STS_PRESENCE_SENSOR_NVM_CFG();
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
switch (sts_work_mode)
{
case STS_RSS_MODE:
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
break;
case STS_DUAL_MODE:
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
break;
mems_int1_detected=0;
case STS_UNI_MODE:
sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
break;
default:
break;
}
}
@ -950,8 +1024,8 @@ void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_
}
HAL_Delay(1000);
memcpy(self_test_result, bring_up_result, 10);
mems_int1_detected=0;
UTIL_MEM_cpy_8(self_test_result, bring_up_result, 10);
}
uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID)
@ -974,20 +1048,6 @@ uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID)
}
void STS_SENSOR_MEMS_Reset(uint8_t cnt)
{
switch (cnt) {
case 0:
case 1:
case 2:
HAL_GPIO_TogglePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin);
break;
default:
break;
}
}
#ifdef STS_R4
void YUNHORN_STS_R4_SENSOR_Read(STS_R0_SensorDataTypeDef *r4_data)
{
@ -1092,7 +1152,7 @@ void OnSensor2StateChanged(void)
}
/* motion sensor RSS ON-OFF */
void OnSensor3StateChanged(void)
void OnSensorRSS3StateChanged(void)
{
SysTime_t sensor_event_time = SysTimeGetMcuTime();
#if 0
@ -1119,7 +1179,7 @@ void OnSensor3StateChanged(void)
}
/* motion sensor A: Motion/No-Motion Detection, Unconscious Detection */
void OnSensor3AStateChanged(void)
void OnSensorRSS3AStateChanged(void)
{
SysTime_t sensor_event_time = SysTimeGetMcuTime();
#if 0
@ -1145,7 +1205,7 @@ void OnSensor3AStateChanged(void)
}
/* motion sensor B, Fall Detection suggestionF */
void OnSensor3BStateChanged(void)
void OnSensorRSS3BStateChanged(void)
{
SysTime_t sensor_event_time = SysTimeGetMcuTime();
uint32_t time_stamp=STS_Get_Date_Time_Stamp();
@ -1163,15 +1223,21 @@ void OnSensor3BStateChanged(void)
break;
case STS_PRESENCE_FALL:
if (motion_in_hs_zone[0][motion_detected_count]) {
//if (motion_in_hs_zone[0][motion_detected_count])
{
sts_o7_sensorData.event_sensor3_fall_start_time_stamp = time_stamp;
sts_o7_sensorData.event_sensor3_fall_start_time = sensor_event_time.Seconds;
//start counter of fall after rising up or other release actions/states
sts_o7_sensorData.event_sensor3_fall_duration = 0;
sts_o7_sensorData.event_sensor3_fall_stop_time_stamp = 0;
sts_o7_sensorData.event_sensor3_fall_stop_time = 0;
}
break;
case STS_PRESENCE_RISING:
sts_o7_sensorData.event_sensor3_fall_stop_time_stamp = time_stamp;
sts_o7_sensorData.event_sensor3_fall_stop_time = sensor_event_time.Seconds;
break;
case STS_PRESENCE_LAYDOWN:
@ -1198,7 +1264,7 @@ void OnSensor3BStateChanged(void)
}
/* motion sensor C: Over stay detection */
void OnSensor3CStateChanged(void)
void OnSensorRSS3CStateChanged(void)
{
SysTime_t sensor_event_time = SysTimeGetMcuTime();
#if 0
@ -1223,6 +1289,38 @@ void OnSensor3CStateChanged(void)
}
void OnSensor3StateChanged(void)
{
#if 0
SysTime_t sensor_event_time = SysTimeGetMcuTime();
// reserved... to be finalized 2024-06-03
if (sts_xxx_result)
sts_o7_sensorData.event_sensor4_start_time = sensor_event_time.Seconds;
else
sts_o7_sensorData.event_sensor4_stop_time = sensor_event_time.Seconds;
#endif
SysTime_t sensor_event_time = SysTimeGetMcuTime();
uint32_t time_stamp=STS_Get_Date_Time_Stamp();
if (sts_hall3_read==STS_Status_Alarm_Mute_Pushdown)
{
sts_o7_sensorData.event_sensor4_start_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor4_start_timestamp = time_stamp;
sts_o7_sensorData.event_sensor4_stop_time = 0;
sts_o7_sensorData.event_sensor4_duration = 0;
APP_LOG(TS_OFF, VLEVEL_L, "Alarm Mute PushDown ---Timer start: %u\r\n",sts_o7_sensorData.event_sensor4_start_time );
}else if (sts_hall3_read==STS_Status_Alarm_Mute_Release)
{
sts_o7_sensorData.event_sensor4_start_time = 0;
sts_o7_sensorData.event_sensor4_start_timestamp = 0;
sts_o7_sensorData.event_sensor4_stop_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor4_stop_timestamp = time_stamp;
//sts_o7_sensorData.over_stay_state = 0;
//sts_o7_sensorData.event_sensor2_duration = 0;
}
}
void OnSensor4StateChanged(void)
{
#if 0
@ -1234,9 +1332,43 @@ void OnSensor4StateChanged(void)
else
sts_o7_sensorData.event_sensor4_stop_time = sensor_event_time.Seconds;
#endif
SysTime_t sensor_event_time = SysTimeGetMcuTime();
uint32_t time_stamp=STS_Get_Date_Time_Stamp();
if (sts_hall4_read==STS_Status_Alarm_Mute_Pushdown)
{
sts_o7_sensorData.event_sensor5_start_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor5_start_timestamp = time_stamp;
sts_o7_sensorData.event_sensor5_stop_time = 0;
sts_o7_sensorData.event_sensor5_duration = 0;
APP_LOG(TS_OFF, VLEVEL_L, "Alarm RESET PushDown ---Timer start: %u\r\n",sts_o7_sensorData.event_sensor5_start_time );
}else if (sts_hall4_read==STS_Status_Alarm_Mute_Release)
{
sts_o7_sensorData.event_sensor5_start_time = 0;
sts_o7_sensorData.event_sensor5_start_timestamp = 0;
sts_o7_sensorData.event_sensor5_stop_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor5_stop_timestamp = time_stamp;
//sts_o7_sensorData.over_stay_state = 0;
//sts_o7_sensorData.event_sensor2_duration = 0;
}
}
//卡尔曼滤波
float KalmanFilter(float inData)
{
static float prevData = 0; //先前数值
static float p = 10, q = 0.001, r = 0.001, kGain = 0; // q控制误差 r控制响应速度
p = p + q;
kGain = p / ( p + r ); //计算卡尔曼增益
inData = prevData + ( kGain * ( inData - prevData ) ); //计算本次滤波估计值
p = ( 1 - kGain ) * p; //更新测量方差
prevData = inData;
return inData; //返回滤波值
}
/* USER CODE BEGIN EF */

View File

@ -69,7 +69,8 @@ void MX_LoRaWAN_Init(void)
/* USER CODE END MX_LoRaWAN_Init_1 */
SystemApp_Init();
/* USER CODE BEGIN MX_LoRaWAN_Init_2 */
//STS_Lamp_Bar_Self_Test_Simple();
//STS_Lamp_Bar_Self_Test();
/* USER CODE END MX_LoRaWAN_Init_2 */
LoRaWAN_Init();
/* USER CODE BEGIN MX_LoRaWAN_Init_3 */

File diff suppressed because it is too large Load Diff

View File

@ -73,8 +73,11 @@ extern "C" {
/*!
* LoRaWAN default class
*/
#ifndef STS_BAT
#define LORAWAN_DEFAULT_CLASS CLASS_C
#elif defined(STS_BAT)
#define LORAWAN_DEFAULT_CLASS CLASS_A
#endif
/*!
* LoRaWAN default confirm state
*/
@ -90,8 +93,11 @@ extern "C" {
* LoRaWAN Default Data Rate
* @note Please note that LORAWAN_DEFAULT_DATA_RATE is used only when LORAWAN_ADR_STATE is disabled
*/
#ifndef STS_BAT
#define LORAWAN_DEFAULT_DATA_RATE DR_0
#elif defined(STS_BAT)
#define LORAWAN_DEFAULT_DATA_RATE DR_5
#endif
/*!
* LoRaWAN Default Tx output power
* @note LORAWAN_DEFAULT_TX_POWER must be defined in the [XXXX_MIN_TX_POWER - XXXX_MAX_TX_POWER] range,

View File

@ -39,7 +39,7 @@
</tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.185590387" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.996713053" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1022522097" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.og" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1022522097" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.2089215826" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="CORE_CM4"/>
<listOptionValue builtIn="false" value="STS_O7"/>
@ -135,9 +135,10 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.2109882892" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-WL55JC1" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.239742593" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.5 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-WL55JC1 || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../Core/Inc | ../../LoRaWAN/Target | ../../../../../../../Utilities/misc | ../../../../../../../Middlewares/Third_Party/SubGHz_Phy | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WLxx/Include | ../../../../../../../Utilities/sequencer | ../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler/Packages | ../../LoRaWAN/App | ../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac/Region | ../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc | ../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc/Legacy | ../../../../../../../Utilities/trace/adv_trace | ../../../../../../../Drivers/BSP/STM32WLxx_Nucleo | ../../../../../../../Utilities/timer | ../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac | ../../../../../../../Middlewares/Third_Party/LoRaWAN/Utilities | ../../../../../../../Middlewares/Third_Party/LoRaWAN/Crypto | ../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler | ../../../../../../../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32WL55xx | CORE_CM4 || || || || || ${workspace_loc:/${ProjName}/STM32WL55JCIX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoscanffloat.1874218879" name="Use float with scanf from newlib-nano (-u _scanf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoscanffloat" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.1776401448" name="Use float with printf from newlib-nano (-u _printf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.1776401448" name="Use float with printf from newlib-nano (-u _printf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.639397767" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.2096511505" name="Convert to Intel Hex file (-O ihex)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.2096511505" name="Convert to Intel Hex file (-O ihex)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.listfile.769752034" name="Generate list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.listfile" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.504306143" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/LoRaWAN_End_Node}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.820311016" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1121803732" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
@ -153,6 +154,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1119592399" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.2024044405" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="CORE_CM4"/>
<listOptionValue builtIn="false" value="STS_BAT"/>
<listOptionValue builtIn="false" value="CLOCK_SYNC"/>
<listOptionValue builtIn="false" value="RM2_1"/>
<listOptionValue builtIn="false" value="STS_O7"/>
@ -207,6 +209,7 @@
<listOptionValue builtIn="false" value="-Xlinker -no-enum-size-warning"/>
<listOptionValue builtIn="false" value="-z noexecstack"/>
</option>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.uselinkergroup.144730019" name="Place libraries in a linker group (-Wl,--start-group $(LIBS) -Wl,--end-group)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.uselinkergroup" value="true" valueType="boolean"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.715223353" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>

View File

@ -56,12 +56,6 @@ STS_O7.map \
SIZE_OUTPUT += \
default.size.stdout \
OBJDUMP_LIST += \
STS_O7.list \
OBJCOPY_HEX += \
STS_O7.hex \
OBJCOPY_BIN += \
STS_O7.bin \
@ -74,7 +68,7 @@ main-build: STS_O7.elf secondary-outputs
# Tool invocations
STS_O7.elf STS_O7.map: $(OBJS) $(USER_OBJS) D:\ONEDRIVE\STM32WLV13\Projects\NUCLEO-WL55JC\Applications\LoRaWAN\YUNHORN_STS_E5CC_AS923_POC\STM32CubeIDE\STM32WLE5CCUX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS)
arm-none-eabi-gcc -o "STS_O7.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"D:\ONEDRIVE\STM32WLV13\Projects\NUCLEO-WL55JC\Applications\LoRaWAN\YUNHORN_STS_E5CC_AS923_POC\STM32CubeIDE\STM32WLE5CCUX_FLASH.ld" --specs=nosys.specs -Wl,-Map="STS_O7.map" -Wl,--gc-sections -static -L"D:\ONEDRIVE\STM32WLV13\Projects\NUCLEO-WL55JC\Applications\LoRaWAN\STS_O7\STM32CubeIDE\rss\lib" -L../../../../../../../Middlewares/ST/STM32_Cryptographic/lib -Xlinker -no-enum-size-warning -z noexecstack --specs=nano.specs -mfloat-abi=soft -mthumb -u _printf_float -Wl,--start-group -lc -lm -Wl,--end-group
arm-none-eabi-gcc -o "STS_O7.elf" @"objects.list" $(USER_OBJS) -Wl,--start-group $(LIBS) -Wl,--end-group -mcpu=cortex-m4 -T"D:\ONEDRIVE\STM32WLV13\Projects\NUCLEO-WL55JC\Applications\LoRaWAN\YUNHORN_STS_E5CC_AS923_POC\STM32CubeIDE\STM32WLE5CCUX_FLASH.ld" --specs=nosys.specs -Wl,-Map="STS_O7.map" -Wl,--gc-sections -static -L"D:\ONEDRIVE\STM32WLV13\Projects\NUCLEO-WL55JC\Applications\LoRaWAN\STS_O7\STM32CubeIDE\rss\lib" -L../../../../../../../Middlewares/ST/STM32_Cryptographic/lib -Xlinker -no-enum-size-warning -z noexecstack --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
@echo 'Finished building target: $@'
@echo ' '
@ -83,16 +77,6 @@ default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
@echo 'Finished building: $@'
@echo ' '
STS_O7.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
arm-none-eabi-objdump -h -S $(EXECUTABLES) > "STS_O7.list"
@echo 'Finished building: $@'
@echo ' '
STS_O7.hex: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
arm-none-eabi-objcopy -O ihex $(EXECUTABLES) "STS_O7.hex"
@echo 'Finished building: $@'
@echo ' '
STS_O7.bin: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
arm-none-eabi-objcopy -O binary $(EXECUTABLES) "STS_O7.bin"
@echo 'Finished building: $@'
@ -100,10 +84,10 @@ STS_O7.bin: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
# Other Targets
clean:
-$(RM) STS_O7.bin STS_O7.elf STS_O7.hex STS_O7.list STS_O7.map default.size.stdout
-$(RM) STS_O7.bin STS_O7.elf STS_O7.map default.size.stdout
-@echo ' '
secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) $(OBJCOPY_HEX) $(OBJCOPY_BIN)
secondary-outputs: $(SIZE_OUTPUT) $(OBJCOPY_BIN)
fail-specified-linker-script-missing:
@echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.'

View File

@ -43,7 +43,9 @@ STS_O7 For Occupancy sensors
2024-06-06 before STS_FALL_DETECTION_MODE change
2024-06-17 good for sensor 1 and sensor 2 start stop timer freezed for now
2024-06-26 RTM for pixel-network STS_RSS_MODE = 3 P113 switch
******************************************************************************
2024-07-30 revert back ...not good for alarm so far
2024-08-06 start focus on fall detection
2024-08-06 a...
*****************************************************************************
*/