Merge branch 'pixel_network' of http://gitea.yunhorn.com/sundp/O7 into pixel_network_rm2
This commit is contained in:
commit
3ea2d318bb
|
@ -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>
|
|
@ -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";
|
||||
|
||||
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]);
|
||||
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_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();
|
||||
} 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[28] << 24 | bytes[29] << 16 | bytes[30] << 8 | bytes[31]);
|
||||
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_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();
|
||||
} 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 };
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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,11 @@ 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 +148,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+RESET_PULSE));
|
||||
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,7 +169,8 @@ void STS_Lamp_Bar_Refresh(void)
|
|||
|
||||
void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum)
|
||||
{
|
||||
|
||||
if (sts_lamp_color <=8)
|
||||
{
|
||||
switch (sts_lamp_color)
|
||||
{
|
||||
case STS_DARK:
|
||||
|
@ -197,10 +197,10 @@ void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum)
|
|||
case STS_WHITE:
|
||||
STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum);
|
||||
break;
|
||||
case STS_COLOR_MAX: // RED/BLUE
|
||||
sts_lamp_bar_color = STS_RED_BLUE;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
|
||||
|
@ -219,7 +219,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 +236,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 +251,7 @@ void STS_Lamp_Bar_Self_Test(void)
|
|||
{
|
||||
STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, lum_level);
|
||||
}
|
||||
STS_Lamp_Bar_Set_Dark();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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.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,13 +409,17 @@ 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))
|
||||
{
|
||||
for (int i = 0; i < (iterations); i++)
|
||||
{
|
||||
success = acc_detector_presence_get_next(handle, &result);
|
||||
if (!success)
|
||||
|
@ -414,69 +428,82 @@ int sts_presence_rss_fall_rise_detection(void)
|
|||
break;
|
||||
}
|
||||
|
||||
print_result(result);
|
||||
//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);
|
||||
//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 = 6 - detected_zone;
|
||||
detected_hs_zone = 10 - 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)
|
||||
{
|
||||
// STS_YunhornCheckStandardDeviation(); no Deviation in middle 2024 -7-22
|
||||
motion_count = 0;
|
||||
}
|
||||
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(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE);
|
||||
//acc_integration_sleep_ms(1);
|
||||
}
|
||||
|
||||
acc_detector_presence_deactivate(handle);
|
||||
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);
|
||||
|
||||
#endif
|
||||
// ******** Second Half detection of fall down and rise up
|
||||
//if (sts_presence_fall_detection == TRUE)
|
||||
//{
|
||||
//acc_detector_presence_deactivate(handle);
|
||||
}
|
||||
else if ((sts_work_mode == STS_UNI_MODE))
|
||||
{
|
||||
|
||||
// ******** 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_M,"Failed to reconfigure detector\n");
|
||||
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
|
||||
// activated already
|
||||
#if 0
|
||||
if (!acc_detector_presence_activate(handle))
|
||||
{
|
||||
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
acc_detector_presence_configuration_destroy(&presence_configuration);
|
||||
// set to full length of iteration
|
||||
for (int i = 0; i < (iterations/2); i++)
|
||||
|
||||
// set to full length of iteration
|
||||
for (int i = 0; i < (iterations); i++)
|
||||
{
|
||||
success = acc_detector_presence_get_next(handle, &result);
|
||||
if (!success)
|
||||
|
@ -485,15 +512,20 @@ int sts_presence_rss_fall_rise_detection(void)
|
|||
break;
|
||||
}
|
||||
|
||||
print_result(result);
|
||||
|
||||
if (!result.data_saturated)
|
||||
{
|
||||
if (result.presence_detected)
|
||||
//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);
|
||||
//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
|
||||
|
||||
|
@ -501,102 +533,114 @@ int sts_presence_rss_fall_rise_detection(void)
|
|||
//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;
|
||||
//(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++;
|
||||
}
|
||||
|
||||
if (sts_presence_fall_detection == TRUE)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
||||
STS_YunhornCheckStandardDeviation();
|
||||
motion_count = 0;
|
||||
|
||||
}
|
||||
}
|
||||
// ~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();
|
||||
|
||||
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Second Half --- Motion Count Sum to = %u \r\n", motion_count);
|
||||
|
||||
//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;
|
||||
motion_count = motion_count%DEFAULT_MOTION_DATASET_LEN; // get all required number of motion data
|
||||
|
||||
if (motion_detected_count++ == 10) {
|
||||
motion_detected_count=0;
|
||||
} else {
|
||||
OnSensor3CStateChanged();
|
||||
//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();
|
||||
}
|
||||
|
||||
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);
|
||||
// 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();
|
||||
}
|
||||
else
|
||||
|
||||
//#ifdef LOG_RSS
|
||||
if (sts_work_mode == STS_UNI_MODE)
|
||||
{
|
||||
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)
|
||||
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++)
|
||||
{
|
||||
#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);
|
||||
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);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
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)
|
||||
{
|
||||
//APP_LOG(TS_OFF, VLEVEL_M,"Application finished OK\n");
|
||||
|
@ -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
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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,21 +228,37 @@ 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();
|
||||
}
|
||||
|
||||
|
@ -251,12 +273,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 ) {
|
||||
|
@ -275,7 +315,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);
|
||||
|
||||
|
@ -283,7 +323,7 @@ void STS_Reed_Hall_Presence_Detection(void)
|
|||
|
||||
sts_reed_hall_changed_flag = 0;
|
||||
|
||||
sts_reed_hall_ext_int = 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -462,6 +502,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;
|
||||
|
@ -473,7 +515,6 @@ void STS_Combined_Status_Processing(void)
|
|||
case STS_REEDSWITCH_MODE:
|
||||
|
||||
sts_status_color = (sts_reed_hall_1_result == STS_Status_Door_Open )? STS_GREEN: STS_RED;
|
||||
|
||||
if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown )
|
||||
{
|
||||
sts_status_color = STS_RED_BLUE;
|
||||
|
@ -505,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;
|
||||
|
||||
|
@ -626,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();
|
||||
|
@ -658,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
|
||||
|
||||
|
@ -716,6 +762,9 @@ void STS_PRESENCE_SENSOR_Init_Send_Data(void)
|
|||
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_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;
|
||||
|
@ -726,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)
|
||||
{
|
||||
|
@ -743,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) ||
|
||||
|
@ -765,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",
|
||||
|
@ -791,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;
|
||||
|
@ -799,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) {
|
||||
|
@ -828,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;
|
||||
|
@ -864,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)
|
||||
|
@ -888,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;
|
||||
do {
|
||||
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);
|
||||
APP_LOG(TS_ON, VLEVEL_H, "##### 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");
|
||||
APP_LOG(TS_ON, VLEVEL_H, "##### RSS Installation Height Error \r\n");
|
||||
HAL_Delay(100);
|
||||
}
|
||||
sts_sensor_install_height=sts_distance_rss_distance;
|
||||
} while((0));
|
||||
|
||||
sts_sensor_install_height = (uint16_t)sts_distance_rss_distance;
|
||||
}
|
||||
|
||||
STS_PRESENCE_SENSOR_NVM_CFG();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -953,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)
|
||||
|
@ -977,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)
|
||||
{
|
||||
|
@ -1095,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
|
||||
|
@ -1122,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
|
||||
|
@ -1148,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();
|
||||
|
@ -1166,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:
|
||||
|
@ -1201,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
|
||||
|
@ -1226,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
|
||||
|
@ -1237,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 */
|
||||
|
||||
|
|
|
@ -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
|
@ -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,
|
||||
|
|
|
@ -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"/>
|
||||
<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)"/>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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.'
|
||||
|
|
|
@ -43,8 +43,15 @@ 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
|
||||
<<<<<<< HEAD
|
||||
******************************************************************************
|
||||
2024-08-05 PIXEL-NETWORK RM2
|
||||
|
||||
=======
|
||||
2024-07-30 revert back ...not good for alarm so far
|
||||
2024-08-06 start focus on fall detection
|
||||
2024-08-06 a...
|
||||
*****************************************************************************
|
||||
>>>>>>> da4c2742329b0ee8493739f64b95f19a6d5daea3
|
||||
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue