--- STS-O2 for HACTL 202406071331

This commit is contained in:
Yunhorn 2024-06-07 13:31:26 +08:00
parent fb67997139
commit 0405c35ade
8 changed files with 116 additions and 108 deletions

View File

@ -67,7 +67,7 @@ enum sts_oo_work_mode {
STS_OTHER_MODE // ? OTHER MODE
};
#ifdef STS_O7
#if defined(STS_O7)||defined(STS_O6)
#define STS_Reed_Hall_State HALL1_STATE
#define STS_Emergency_Button_State HALL2_STATE
#else

View File

@ -47,12 +47,12 @@ extern "C" {
/**
* @brief Verbose level for all trace logs
*/
#define VERBOSE_LEVEL VLEVEL_M
#define VERBOSE_LEVEL VLEVEL_OFF
/**
* @brief Enable trace logs
*/
#define APP_LOG_ENABLED 1
#define APP_LOG_ENABLED 0
/**
* @brief Activate monitoring (probes) of some internal RF signals for debug purpose
@ -75,7 +75,7 @@ extern "C" {
* @brief Enable/Disable MCU Debugger pins (dbg serial wires)
* @note by HW serial wires are ON by default, need to put them OFF to save power
*/
#define DEBUGGER_ENABLED 1
#define DEBUGGER_ENABLED 0
/**
* @brief Disable Low Power mode

View File

@ -221,7 +221,7 @@
#define MajorVer 24U
#define MinorVer 06U
#define SubMinorVer 05U
#define SubMinorVer 07U
#define FirmwareVersion 3U
#define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U
@ -247,8 +247,8 @@
#define sts_sendhtbtport (YUNHORN_STS_O6_LORA_APP_HTBT_PORT)
#endif
#ifdef STS_O7
#define sts_senddataport (YUNHORN_STS_O7_LORA_APP_DATA_PORT)
#define sts_sendhtbtport (YUNHORN_STS_O7_LORA_APP_HTBT_PORT)
#define sts_senddataport (YUNHORN_STS_O6_LORA_APP_DATA_PORT)
#define sts_sendhtbtport (YUNHORN_STS_O6_LORA_APP_HTBT_PORT)
#endif
#if defined(STS_O6)||defined(STS_O7)
#define sts_appctrlport (YUNHORN_STS_O7_USER_APP_CTRL_PORT)

View File

@ -39,7 +39,7 @@ extern "C" {
* Sensor data parameters
*/
#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_O7_ENABLED))
#if defined(STS_O7)||defined(STS_O6)
enum cfg_cmd_order{
CFG_CMD1=0, //'Y'
CFG_CMD2, //'D' 'Z' 'V' 'O' 'F' 'H' 'M'
@ -86,7 +86,7 @@ enum RSS_CFG_order{
#endif
#ifdef YUNHORN_STS_O7_ENABLED
#if defined(STS_O7)||defined(STS_O6)
enum sts_rss_config_t {
STS_RSS_CONFIG_DEFAULT=0,

View File

@ -238,7 +238,6 @@ void STS_Combined_Status_Processing(void)
case STS_NETWORK_MODE:
sts_status_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;
#ifdef STS_M1
@ -246,13 +245,11 @@ void STS_Combined_Status_Processing(void)
sts_water_leakage_changed_flag = 1;
#endif
break;
case STS_REEDSWITCH_MODE:
sts_status_color = (sts_reed_hall_result == STS_Status_Door_Open )? STS_GREEN: STS_RED;
break;
case STS_RSS_MODE:
if (sts_rss_result == STS_RESULT_NO_MOTION){
sts_status_color = STS_GREEN;
@ -261,18 +258,14 @@ void STS_Combined_Status_Processing(void)
sts_status_color = STS_RED;
}
break;
case STS_DUAL_MODE: // FOR STS_O6
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_status_color = STS_GREEN;
sts_lamp_bar_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 ))
{
sts_status_color = STS_RED;
sts_lamp_bar_color = STS_RED;
#if 0 // not for STS-O6 sensor
switch(sts_fall_rising_detected_result) {
case STS_PRESENCE_LAYDOWN:
sts_lamp_bar_color = STS_YELLOW;
@ -287,11 +280,9 @@ void STS_Combined_Status_Processing(void)
sts_status_color = STS_RED;
break;
}
#endif
if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown )
{
sts_status_color = STS_RED_BLUE;
sts_lamp_bar_color = STS_RED_BLUE;
}
}
break;
@ -300,55 +291,35 @@ void STS_Combined_Status_Processing(void)
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_status_color = STS_GREEN;
sts_lamp_bar_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 ))
{
sts_status_color = STS_RED;
sts_lamp_bar_color = STS_RED;
}
switch(sts_fall_rising_detected_result)
{
case STS_PRESENCE_NONE:
sts_lamp_bar_color = STS_GREEN;
sts_status_color = STS_GREEN;
break;
case STS_PRESENCE_FALL: //RED_BLUE FLASH
sts_lamp_bar_color = STS_RED_BLUE;
sts_status_color = STS_RED_BLUE;
break;
case STS_PRESENCE_LAYDOWN:
sts_lamp_bar_color = STS_YELLOW;
sts_status_color = STS_YELLOW;
break;
case STS_PRESENCE_FALL: //RED_BLUE FLASH
sts_lamp_bar_color = STS_RED_BLUE;
sts_status_color = STS_RED_BLUE;
break;
case STS_PRESENCE_RISING: //NORMAL OCCUPANCY STATUS
sts_lamp_bar_color = STS_RED;
sts_status_color = STS_RED;
break;
case STS_PRESENCE_UNCONCIOUS:
sts_lamp_bar_color = STS_RED_BLUE;
sts_status_color = STS_RED_BLUE;
break;
case STS_PRESENCE_STAYSTILL:
sts_lamp_bar_color = STS_RED_BLUE;
sts_status_color = STS_RED_BLUE;
break;
default:
sts_lamp_bar_color = STS_GREEN;
sts_status_color = STS_GREEN;
sts_lamp_bar_color = STS_RED;
sts_status_color = STS_RED;
break;
}
if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown )
{
sts_status_color = STS_RED_BLUE;
sts_lamp_bar_color = STS_RED_BLUE;
}
break;
@ -410,6 +381,17 @@ void STS_Combined_Status_Processing(void)
break;
}
#if 0
if (sts_status_color == STS_RED_BLUE)
{
//STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level);
STS_Lamp_Bar_Set_STS_RGB_Color(STS_RED, luminance_level);
HAL_Delay(100);
STS_Lamp_Bar_Set_STS_RGB_Color(STS_BLUE, luminance_level);
HAL_Delay(100);
STS_Lamp_Bar_Set_STS_RGB_Color(STS_RED_BLUE, luminance_level);
}
#endif
if ((sts_work_mode == STS_WIRED_MODE) || (sts_service_mask > STS_SERVICE_MASK_L0))
{
sts_status_color = STS_DARK;
@ -417,11 +399,39 @@ void STS_Combined_Status_Processing(void)
last_lamp_bar_color = STS_DARK;
STS_Lamp_Bar_Set_Dark();
}
else
{
// sensor_data_ready = 1;
//if ((last_lamp_bar_color != sts_status_color))
{
sts_lamp_bar_color = ((sts_service_mask == STS_SERVICE_MASK_L0)? sts_status_color:STS_DARK);
STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level);
if ((sts_service_mask == STS_SERVICE_MASK_L0) || (sts_lamp_bar_color == STS_DARK))
{
// STS_WS2812B_Refresh();
}
last_lamp_bar_color = sts_lamp_bar_color;
}
}
//STS_Lamp_Bar_Refresh();
#if 1
//if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag) || (sts_tof_result_changed_flag) || (sts_water_leakage_changed_flag))
{
//sts_rss_result_changed_flag =0;
sts_reed_hall_changed_flag =0;
sts_tof_result_changed_flag =0;
#ifdef STS_M1
sts_water_leakage_changed_flag=0;
#endif
sensor_data_ready = 1;
//STS_PRESENCE_SENSOR_Prepare_Send_Data();
}
#endif
}
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)

View File

@ -38,7 +38,7 @@
/* 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_service_mask=0;
volatile uint8_t sts_service_mask;
volatile uint32_t rfac_timer;
volatile uint8_t sensor_data_ready=0;
@ -88,7 +88,7 @@ volatile STS_R0_SensorDataTypeDef r4_data;
#ifdef YUNHORN_STS_O5_ENABLED
#endif
#ifdef STS_O7
#if defined(STS_O7)||defined(STS_O6)
extern volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config;
extern volatile distance_measure_cfg_t distance_cfg;
@ -724,7 +724,7 @@ uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID)
{
uint8_t scanned_id[2] = {0x0,0x0};
#ifdef YUNHORN_STS_O7_ENABLED
#if defined(STS_O7)||defined(STS_O6)
if (hal_test_spi_read_chipid(scanned_id))
{
devID[0] = scanned_id[0];

View File

@ -125,7 +125,7 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = {
{0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0}
};
#ifdef YUNHORN_STS_O7_ENABLED
#if defined(STS_O6)||defined(STS_O7)
extern volatile uint8_t sensor_data_ready;
extern volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData;
extern volatile float sts_distance_rss_distance;
@ -449,7 +449,7 @@ static LmHandlerParams_t LmHandlerParams =
/**
* @brief Type of Event to generate application Tx
*/
static TxEventType_t EventType = TX_ON_EVENT;
static TxEventType_t EventType = TX_ON_EVENT; //TX_ON_TIMER;//TX_ON_EVENT;
/**
* @brief Timer to handle the application Tx
@ -645,11 +645,11 @@ void LoRaWAN_Init(void)
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP8), UTIL_SEQ_RFU, STS_YunhornSTSEventP8_Process);
#endif
#ifdef YUNHORN_STS_O7_ENABLED
#if defined(STS_O7)||defined(STS_O6)
UTIL_TIMER_Create(&YunhornSTSRSSWakeUpTimer,
YUNHORN_STS_RSS_WAKEUP_CHECK_TIME,
UTIL_TIMER_PERIODIC, OnYunhornSTSOORSSWakeUpTimerEvent, NULL);
//UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer);
UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer);
UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer,
YUNHORN_STS_HEART_BEAT_CHECK_TIME,
@ -672,11 +672,11 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch (GPIO_Pin)
{
#ifdef STS_O7
#if defined(STS_O6)||defined(STS_O7)
case HALL1_Pin:
if (sts_reed_hall_1_changed)
{
HAL_Delay(450); //de-bouncing
HAL_Delay(250); //de-bouncing
sts_hall1_read = HALL1_STATE;
APP_LOG(TS_OFF, VLEVEL_M, "\n\n Door Contact Read = %02x --%20s\r\n", HALL1_STATE, (HALL1_STATE==STS_Status_Door_Close)?"Door Closed":"Door Opened");
OnSensor1StateChanged();
@ -684,24 +684,22 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
// if (EventType == TX_ON_EVENT)
{
//sensor_data_ready =1;
//UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0);
STS_YunhornSTSEventP1_Process();
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0);
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
}
sts_reed_hall_1_changed =0;
//sts_reed_hall_1_changed =0;
}
break;
case HALL2_Pin:
if (sts_reed_hall_2_changed)
{
HAL_Delay(450); //de-bouncing
HAL_Delay(250); //de-bouncing
sts_hall2_read = HALL2_STATE;
APP_LOG(TS_OFF, VLEVEL_M, "\n\n SOS Button Read = %02x --%20s\r\n", HALL2_STATE, (HALL2_STATE==STS_Status_SOS_Pushdown)?"SOS Pushdown":"SOS Released");
OnSensor2StateChanged();
//sensor_data_ready =1;
//UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0);
STS_YunhornSTSEventP1_Process();
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0);
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
//sts_reed_hall_2_changed =0;
}
@ -856,20 +854,25 @@ static void SendTxData(void)
uint32_t i = 0;
STS_PRESENCE_SENSOR_Prepare_Send_Data(&sensorData);
if (sts_work_mode == STS_DUAL_MODE) {
AppData.Port = LORAWAN_USER_APP_PORT;
} else if (sts_work_mode == STS_UNI_MODE) {
}
if ((heart_beat_timer != 0L)) // sensor data OVERWRITE heart-beat message, 2024-05-12
{
heart_beat_timer=0;
AppData.Port = sts_sendhtbtport; //LORAWAN_USER_APP_PORT+1;
AppData.Buffer[i++]= AppLedStateOn|0x80;
AppData.Port = (uint8_t)sts_sendhtbtport; //LORAWAN_USER_APP_PORT+1;
AppData.Buffer[i++]= (uint8_t)(AppLedStateOn|0x80)&0x0ff;
AppData.Buffer[i++] = (uint8_t)(99*batteryLevel/254)&0xff; //#05
} else if ((sensor_data_ready!= 0U)) //sensor_data_ready for manual push button-1 trigger)
{
sensor_data_ready =0;
AppData.Buffer[i++] = AppLedStateOn|0x80; //00 ************ MUST KEEP IT HERE, NON-ZERO ******
AppData.Buffer[i++] = (uint8_t)(AppLedStateOn|0x80)&0xff; //00 ************ MUST KEEP IT HERE, NON-ZERO ******
AppData.Buffer[i++] = (uint8_t)(sensorData.lamp_bar_color)&0xff; //01
AppData.Buffer[i++] = (uint8_t)(sensorData.workmode)&0xff; //02 WORK MODE
@ -918,7 +921,7 @@ static void SendTxData(void)
}
}
AppData.BufferSize = (sts_service_mask > STS_SERVICE_MASK_L1? 0:i);
AppData.BufferSize = (uint8_t)(sts_service_mask > STS_SERVICE_MASK_L1? 0:i)&0xff;;
if( IsClockSynched == false )
{
@ -950,14 +953,14 @@ static void SendTxData(void)
status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false);
if (LORAMAC_HANDLER_SUCCESS == status)
{
APP_LOG(TS_ON, VLEVEL_L, "SEND REQUEST\r\n");
APP_LOG(TS_ON, VLEVEL_H, "SEND REQUEST\r\n");
}
else if (LORAMAC_HANDLER_DUTYCYCLE_RESTRICTED == status)
{
nextTxIn = LmHandlerGetDutyCycleWaitTime();
if (nextTxIn > 0)
{
APP_LOG(TS_ON, VLEVEL_L, "Next Tx in : ~%d second(s)\r\n", (nextTxIn / 1000));
APP_LOG(TS_ON, VLEVEL_H, "Next Tx in : ~%d second(s)\r\n", (nextTxIn / 1000));
}
}
}
@ -1208,13 +1211,10 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
APP_LOG(TS_OFF, VLEVEL_H, "###### U/L FRAME:JOIN | DR:%d | PWR:%d\r\n", joinParams->Datarate, joinParams->TxPower);
}
UTIL_TIMER_Start(&STSLampBarColorTimer);
HAL_Delay(2000);
heart_beat_timer = 1;
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
HAL_Delay(2000);
UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer);
UTIL_TIMER_Start(&STSLampBarColorTimer);
/* USER CODE END OnJoinRequest_1 */
}
@ -1470,8 +1470,6 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context)
{
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP2), CFG_SEQ_Prio_0);
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ******** MOTION CHANGED FLAG= %d \r\n", sts_rss_result_changed_flag);
if ((STS_LoRa_WAN_Joined != 0)&&(sts_rss_result_changed_flag==1))
{
sts_rss_result_changed_flag = 0;
@ -1549,7 +1547,7 @@ static void OnYunhornSTSSamplingPeriodicityChanged(uint32_t periodicity)
/* Update timer periodicity */
#ifdef STS_O7
#if defined(STS_O6)||defined(STS_O7)
UTIL_TIMER_Stop(&YunhornSTSRSSWakeUpTimer);
UTIL_TIMER_SetPeriod(&YunhornSTSRSSWakeUpTimer, SamplingPeriodicity);
UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer);
@ -2436,7 +2434,7 @@ void STS_REBOOT_CONFIG_Init(void)
UTIL_MEM_cpy_8(nvm_stored_value, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE);
/* USER CODE BEGIN OnRestoreContextRequest_Last */
#if (defined(STS_O7)||defined(STS_O5) || defined(STS_O6) || defined(STS_R0) || defined(STS_R5)|| defined(STS_R4)|| defined(STS_R1D))
//#if (defined(STS_O7)||defined(STS_O5) || defined(STS_O6) || defined(STS_R0) || defined(STS_R5)|| defined(STS_R4)|| defined(STS_R1D))
if ((nvm_stored_value[NVM_MTM1] != sts_mtmcode1) || (nvm_stored_value[NVM_MTM2] != sts_mtmcode2) || (nvm_stored_value[NVM_VER] != sts_version))
{
APP_LOG(TS_OFF, VLEVEL_M, "Initial Boot with Empty Config, Flash with default config....\r\n");
@ -2479,7 +2477,7 @@ void STS_REBOOT_CONFIG_Init(void)
sts_cfg_nvm.ac[j] = (uint8_t)nvm_stored_value[NVM_AC_CODE_START +j];
}
}
#endif
//#endif
OnRestoreSTSCFGContextProcess();
@ -2556,7 +2554,7 @@ void OnRestoreSTSCFGContextProcess(void)
}
#ifdef YUNHORN_STS_O7_ENABLED
#if defined(STS_O7)||defined(STS_O6)
if ((sts_version == sts_cfg_nvm.version)&& (NVM_CFG_PARAMETER_SIZE == sts_cfg_nvm.length))
{
STS_PRESENCE_SENSOR_Init();