updated for heart-beat, sensor power on-off before and after measure.

This commit is contained in:
Yunhorn 2023-06-30 10:35:10 +08:00
parent d5415ac9ac
commit 9e0a206e9b
3 changed files with 47 additions and 74 deletions

View File

@ -47,7 +47,7 @@ extern "C" {
/**
* @brief Verbose level for all trace logs
*/
#define VERBOSE_LEVEL VLEVEL_M
#define VERBOSE_LEVEL VLEVEL_L
/**
* @brief Enable trace logs

View File

@ -269,10 +269,13 @@ void STS_YunhornSTSEventP3_Process(void)
*/
void STS_YunhornSTSEventP4_Process(void)
{
STS_SENSOR_Power_ON(0);
STS_SENSOR_Power_OFF(0);
APP_LOG(TS_OFF, VLEVEL_L, "\r\n P4 Testing Process\r\n");
STS_TOF_VL53L0X_Range_Process();
STS_SENSOR_Power_OFF(0);
}
@ -296,6 +299,10 @@ void STS_YunhornSTSEventP5_Process(void)
void STS_YunhornSTSEventP6_Process(void)
{
APP_LOG(TS_OFF, VLEVEL_L, "\r\n P6 Testing Process\r\n");
STS_SENSOR_Power_ON(0);
STS_SENSOR_Power_OFF(0);
}
@ -306,6 +313,9 @@ void STS_YunhornSTSEventP6_Process(void)
void STS_YunhornSTSEventP7_Process(void)
{
APP_LOG(TS_OFF, VLEVEL_L, "\r\n P7 Testing Process\r\n");
STS_SENSOR_Power_ON(0);
STS_SENSOR_Power_OFF(0);
}
@ -456,7 +466,7 @@ void STS_SENSOR_Power_OFF(uint8_t cnt)
case 0:
case 1:
case 2:
#ifdef YUNHORN_STS_M7_ENABLED
#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET);
#endif
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET);
@ -472,11 +482,14 @@ void STS_SENSOR_MEMS_Reset(uint8_t cnt)
case 0:
case 1:
case 2:
#ifdef YUNHORN_STS_M7_ENABLED
#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_RESET);
#endif
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_RESET);
break;
default:
break;
@ -487,52 +500,12 @@ void STS_SENSOR_MEMS_Reset(uint8_t cnt)
void STS_SENSOR_NVM_CFG(void)
{
/*
sts_presence_rss_config.default_start_m = (float)(sts_cfg_nvm.p[RSS_CFG_START_M_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_START_M_L]);
sts_presence_rss_config.default_length_m = (float)(sts_cfg_nvm.p[RSS_CFG_LENGTH_M_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_LENGTH_M_L]);
sts_presence_rss_config.default_threshold = (float)(sts_cfg_nvm.p[RSS_CFG_THRESHOLD_H] + 0.1*sts_cfg_nvm.p[RSS_CFG_THRESHOLD_L]);
sts_presence_rss_config.default_receiver_gain = (float)(sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN_H]*0.1 + 0.01* sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN_L]);
sts_presence_rss_config.default_zone_length_m = DEFAULT_ZONE_LENGTH;
sts_presence_rss_config.default_profile = (float)(sts_cfg_nvm.p[RSS_CFG_PROFILE]);
sts_presence_rss_config.default_update_rate_tracking = (float)(sts_cfg_nvm.p[RSS_CFG_RATE_TRACKING_H]*10 + sts_cfg_nvm.p[RSS_CFG_RATE_TRACKING_L]);
sts_presence_rss_config.default_update_rate_presence = (float)(sts_cfg_nvm.p[RSS_CFG_RATE_PRESENCE_H]*10 + sts_cfg_nvm.p[RSS_CFG_RATE_PRESENCE_L]);
sts_presence_rss_config.default_hwaas = (float)(sts_cfg_nvm.p[RSS_CFG_HWAAS_H]*10 + sts_cfg_nvm.p[RSS_CFG_HWAAS_L]);
sts_presence_rss_config.default_nbr_removed_pc = (float)(sts_cfg_nvm.p[RSS_CFG_NBR_REMOVED_PC]);
//filter parameter
sts_presence_rss_config.default_inter_frame_deviation_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_DEVIATION_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_ITE_DEVIATION_L]);
sts_presence_rss_config.default_inter_frame_fast_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF_H]*10 + sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF_L]);
sts_presence_rss_config.default_inter_frame_slow_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF_H]*.1 + 0.01* sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF_L]);
sts_presence_rss_config.default_intra_frame_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_TIME_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_ITR_TIME_L]);
sts_presence_rss_config.default_intra_frame_weight = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_WEIGHT_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_ITR_WEIGHT_L]);
sts_presence_rss_config.default_output_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME_L]);
//filter parameter
sts_presence_rss_config.default_downsampling_factor = (float)(sts_cfg_nvm.p[RSS_CFG_DOWNSAMPLING_FACTOR]);
sts_presence_rss_config.default_power_save_mode = (float)(sts_cfg_nvm.p[RSS_CFG_POWER_MODE]);
*/
}
void STS_SENSOR_NVM_CFG_SIMPLE(void)
{
/*
sts_presence_rss_config.default_start_m = (float)(sts_cfg_nvm.p[RSS_CFG_START_M_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_START_M_L]);
sts_presence_rss_config.default_length_m = (float)(sts_cfg_nvm.p[RSS_CFG_LENGTH_M_H] + 0.1* sts_cfg_nvm.p[RSS_CFG_LENGTH_M_L]);
sts_presence_rss_config.default_threshold = (float)(sts_cfg_nvm.p[RSS_CFG_THRESHOLD_H] + 0.1*sts_cfg_nvm.p[RSS_CFG_THRESHOLD_L]);
sts_presence_rss_config.default_receiver_gain = (float)(sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN_H]*0.1 + 0.01* sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN_L]);
*/
/*
char pout[128]="";
sprintf(pout,"\r\n Start=%.2f Length= %.2f Threshold=%.2f Gain=%.2f\r\n",
sts_presence_rss_config.default_start_m,
sts_presence_rss_config.default_length_m,
sts_presence_rss_config.default_threshold,
sts_presence_rss_config.default_receiver_gain);
APP_LOG(TS_OFF, VLEVEL_L,"\r\n %s \r\n", pout);
*/
}
/* USER CODE BEGIN EF */

View File

@ -67,10 +67,10 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = {
sts_mtmcode2,
sts_version,
sts_hardware_ver,
0x02, //Regular TxPeriodicity interval
'M', //unit of Regular TxPeriodicity interval
0x0A, //Heart-beat interval or Sampling interval
'S', //unit of Heart-beat interval or Sampling interval
0x20, //Regular TxPeriodicity interval
'S', //unit of Regular TxPeriodicity interval
0x02, //Heart-beat interval or Sampling interval
'M', //unit of Heart-beat interval or Sampling interval
0x04, // dual mode
0x00, // service mask
0x00, // reserve01
@ -614,7 +614,7 @@ void LoRaWAN_Init(void)
// FOR Event trigger type sensor, use this as Heart Beat Timer, such as O1/O2/O3/M1
#if (defined(YUNHORN_STS_R0_ENABLED))
UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, HeartBeatPeriodicity,
UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL);
UTIL_TIMER_ONESHOT, OnYunhornSTSHeartBeatTimerEvent, NULL);
UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer);
#endif
@ -765,6 +765,10 @@ static void SendTxData(void)
STS_R0_SensorDataTypeDef r0_data;
UTIL_TIMER_Time_t nextTxIn = 0;
APP_LOG(TS_ON, VLEVEL_L, "\r\n Flag: Heart-beat-timer = %u \r\n upload_message_timer %u \r\n sensor_data_ready = %u \r\n",
heart_beat_timer, upload_message_timer, sensor_data_ready);
if (LmHandlerIsBusy() == false)
{
uint8_t i = 0;
@ -779,7 +783,7 @@ static void SendTxData(void)
// APP_LOG(TS_ON, VLEVEL_M, "\r\nVDDA: %d\r\n", batteryLevel);
// APP_LOG(TS_ON, VLEVEL_M, "\r\ntemp: %d\r\n", (int16_t)(sensor_data.temperature));
APP_LOG(TS_ON, VLEVEL_L, "\r\nDistance = %d mm, VBAT=%d%%\r\n", r0_data.distance_mm, r0_data.battery_Pct);
//APP_LOG(TS_ON, VLEVEL_L, "\r\nDistance = %d mm, VBAT=%d%%\r\n", r0_data.distance_mm, r0_data.battery_Pct);
AppData.Port = LORAWAN_USER_APP_PORT;
@ -795,6 +799,7 @@ static void SendTxData(void)
{
heart_beat_timer = 0;
AppData.Port = LORAWAN_USER_HTBT_PORT; //LORAWAN_USER_APP_PORT+1;
APP_LOG(TS_ON, VLEVEL_L, "\r\n------------ Heart-Beat ------------- \r\n ------------------Distance = %d mm, VBAT=%d%%\r\n", r0_data.distance_mm, r0_data.battery_Pct);
} else if (upload_message_timer) //sensor_data_ready)
{
@ -804,9 +809,10 @@ static void SendTxData(void)
AppData.Buffer[i++] = (uint8_t)(r0_data.distance_mm_h); //#05
AppData.Buffer[i++] = (uint8_t)(r0_data.distance_mm_l); //#05
APP_LOG(TS_ON, VLEVEL_L, "\r\n------------ Periodicity Upload Heart-Beat ------------- \r\n ------------------Distance = %d mm, VBAT=%d%%\r\n", r0_data.distance_mm, r0_data.battery_Pct);
}
AppData.BufferSize = (sts_service_mask >=2?0:i);
AppData.BufferSize = (sts_service_mask >1?0:i);
if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET))
{
@ -1017,7 +1023,7 @@ static void OnTxPeriodicityChanged(uint32_t periodicity)
UTIL_TIMER_SetPeriod(&TxTimer, TxPeriodicity);
UTIL_TIMER_Start(&TxTimer);
/* USER CODE BEGIN OnTxPeriodicityChanged_2 */
APP_LOG(TS_OFF, VLEVEL_L,"\r\n TxPeriodicity changed to %u (msec) \r\n", TxPeriodicity);
/* USER CODE END OnTxPeriodicityChanged_2 */
}
@ -1218,7 +1224,7 @@ static void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity)
UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer);
/* USER CODE BEGIN OnTxPeriodicityChanged_2 */
APP_LOG(TS_OFF, VLEVEL_M,"**************** HeartBeatPeriodicity = %u (ms)\r\n", HeartBeatPeriodicity );
APP_LOG(TS_OFF, VLEVEL_L,"**************** HeartBeatPeriodicity Changed to: %u (ms)\r\n", HeartBeatPeriodicity );
/* USER CODE END OnTxPeriodicityChanged_2 */
}
@ -1349,22 +1355,18 @@ static void OnYunhornSTSSamplingCheckTimerEvent(void *context)
*/
static void OnYunhornSTSHeartBeatTimerEvent(void *context)
{
if (STS_LoRa_WAN_Joined )
{
#ifdef YUNHORN_STS_R0_ENABLED
heart_beat_timer = 1;
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
heart_beat_timer = 1;
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer);
if (sts_ac_code[0]==0x0) {
/* RFAC Challenge */
if (rfac_timer < (STS_BURN_IN_RFAC+3)) {
rfac_timer ++;
}
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0);
}
UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer);
#endif
}
if ((STS_LoRa_WAN_Joined ) && (sts_ac_code[0]==0x0))
{
/* RFAC Challenge */
if (rfac_timer < (STS_BURN_IN_RFAC+3)) {
rfac_timer ++;
}
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0);
}
}
void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
@ -1558,12 +1560,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_MTM2]; //MTM Code
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_VER]; //STS Version
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_HWV]; //STS Version
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_PERIODICITY]/10); //UPLINK Periodicity count high
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_PERIODICITY]%10); //UPLINK Periodicity count low
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_PERIODICITY]); //UPLINK Periodicity
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_UNIT]; //UPLINK Periodicity unit
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_SAMPLING]/10); //SAMPLING Periodicity count high
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_SAMPLING]%10); //SAMPLING Periodicity count low
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_S_UNIT]; //SAMPLING Periodicity unit
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_SAMPLING]); //Heart-beat or SAMPLING Periodicity
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_S_UNIT]; //Heart-beat or SAMPLING Periodicity unit
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_WORK_MODE]; // STS WORK MODE
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_SERVICE_MASK]; //service mask
outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_RESERVE01]; //service mask