diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h index 035430c..cf0598b 100644 --- a/Core/Inc/sys_conf.h +++ b/Core/Inc/sys_conf.h @@ -47,7 +47,7 @@ extern "C" { /** * @brief Verbose level for all trace logs */ -#define VERBOSE_LEVEL VLEVEL_OFF +#define VERBOSE_LEVEL VLEVEL_H /** * @brief Enable trace logs @@ -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 0 +#define DEBUGGER_ENABLED 1 /** * @brief Disable Low Power mode diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index f84347f..98bc7c0 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -74,7 +74,7 @@ #define STS_MODE_COLOR_CMD_LEN 5U #define YUNHORN_STS_M7_NVM_CFG_SIZE 3U -#define YUNHORN_STS_M7_CFG_CMD_SIZE 9U +#define YUNHORN_STS_M7_CFG_CMD_SIZE 10U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U #define YUNHORN_STS_AC_CODE_SIZE 20U diff --git a/Core/Src/yunhorn_sts_motion_sensor.c b/Core/Src/yunhorn_sts_motion_sensor.c index 76e4592..29a5137 100644 --- a/Core/Src/yunhorn_sts_motion_sensor.c +++ b/Core/Src/yunhorn_sts_motion_sensor.c @@ -42,7 +42,7 @@ extern TIM_HandleTypeDef htim2; extern I2C_HandleTypeDef MOTION_SENSOR_I2C_HANDLE; volatile STS_M7_SensorDataTypeDef sts_m7_sensorData; volatile STS_MOTION_SENSOR_Event_Status_t sts_m7_event_status; -extern volatile uint8_t mems_int1_detected, link_wakeup, link_sleep; +extern volatile uint8_t mems_int1_detected, link_wakeup, link_sleep, do_fft_flag; volatile uint32_t event_start_time, event_stop_time, vibration_duration, sensor_data_ready; #endif /* (YUNHORN_STS_PRD) &&(YUNHORN_STS_PRD == 1) */ @@ -125,7 +125,7 @@ void STS_MOTION_SENSOR_Prepare_Send_Data() // APP_LOG(TS_ON, VLEVEL_M, "\r\n--- %d times sampled\r\n", get_value_count); sts_m7_sensorData.vibration_on_off = (uint8_t)0x01; sts_m7_sensorData.vibration_duration = (uint8_t)vibration_duration; - + if (do_fft_flag !=0) { sts_m7_sensorData.vb_x_freq = (uint16_t)(ft_x/get_value_count); sts_m7_sensorData.vb_y_freq = (uint16_t)(ft_y/get_value_count); sts_m7_sensorData.vb_z_freq = (uint16_t)(ft_z/get_value_count); @@ -133,7 +133,7 @@ void STS_MOTION_SENSOR_Prepare_Send_Data() sts_m7_sensorData.vb_x_rms = (float)(spectrumPeak_x/get_value_count); sts_m7_sensorData.vb_y_rms = (float)(spectrumPeak_y/get_value_count); sts_m7_sensorData.vb_z_rms = (float)(spectrumPeak_z/get_value_count); - + } //sts_m7_sensorData.battery_mV = GetBatteryLevel(); // @@ -201,7 +201,7 @@ void STS_MOTION_SENSOR_After_Wake_Up() { ADXL345_GetXyz(&raw_x, &raw_y, &raw_z); - + //APP_LOG(TS_ON, VLEVEL_M, "##### RAW Data After Wakeup X=%d Y=%d Z=%d ######\r\n", raw_x, raw_y, raw_z); } @@ -217,14 +217,17 @@ void STS_MOTION_SENSOR_WakeUp_Process(void) if (event_status.WakeUpStatus != 0U) { + STS_MOTION_SENSOR_After_Wake_Up(); // for 1st wakeup value STS_MOTION_SENSOR_Init_Send_Data(); - - for (uint8_t ccc=0; ccc < 3; ccc++) { + + if (do_fft_flag != 0) { + for (uint8_t ccc=0; ccc < 3; ccc++) { - STS_MOTION_SENSOR_GetValue(); + STS_MOTION_SENSOR_GetValue(); + } } } diff --git a/Core/Src/yunhorn_sts_motion_sensor_adxl345.c b/Core/Src/yunhorn_sts_motion_sensor_adxl345.c index 7c61cc6..06ee50d 100644 --- a/Core/Src/yunhorn_sts_motion_sensor_adxl345.c +++ b/Core/Src/yunhorn_sts_motion_sensor_adxl345.c @@ -34,7 +34,7 @@ extern uint32_t freq_at_spectrumPeak_x,freq_at_spectrumPeak_y,freq_at_spectrumP extern uint32_t bin_at_spectrumPeak_x,bin_at_spectrumPeak_y,bin_at_spectrumPeak_z; extern volatile uint16_t TIM2_Counter, ggx,ggy,ggz; -volatile uint8_t act_threshold=6, inact_threshold=3, inact_duration=3; +volatile uint8_t act_threshold=6, inact_threshold=3, inact_duration=3, do_fft_flag=0; extern I2C_HandleTypeDef MOTION_SENSOR_I2C_HANDLE; extern TIM_HandleTypeDef htim2; /******************************************************************************/ @@ -249,8 +249,14 @@ void ADXL345_Init_Motion_Detection(void) ADXL345_SetRegisterValue(ADXL345_REG_INT_ENABLE, val); // val=0x08; // POWER ON FOR MEASURE ONLY +//if (do_fft_flag !=0) +//{ val=0x38; // POWER ON FOR MEASURE,LINK,AUTO_SLEEP MODE (*** STEP 3 ) +//} else { +// val=0x90; // Power ON for LINK, AUTO_SLEEP MODE, NO MEASURE +//} //val=0x18; // POWER ON FOR MEASURE,AUTO_SLEEP MODE (*** STEP 3 ) + ADXL345_SetRegisterValue(ADXL345_REG_POWER_CTL, val); ADXL345_GetRegisterValue(ADXL345_REG_INT_SOURCE); ////////////////////////////////////////// @@ -722,8 +728,9 @@ void Do_FFT(void) void Process_FFT_and_Amplitude(void) { char outbuf[128]=""; - - Do_FFT(); + if (do_fft_flag !=0) { + Do_FFT(); + } // // sprintf(outbuf,"\r\nSpectrum Peak: X=%.2f, Y=%.2f, Z=%.2f\r\n", diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 09dcaa4..fa71bc4 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -64,7 +64,7 @@ volatile uint32_t HeartBeatPeriodicity = 3600000; //unit ms #ifdef YUNHORN_STS_M7_ENABLED extern volatile uint8_t sensor_data_ready; extern volatile STS_M7_SensorDataTypeDef sts_m7_sensorData; -extern volatile uint8_t act_threshold, inact_threshold, inact_duration; +extern volatile uint8_t act_threshold, inact_threshold, inact_duration, do_fft_flag; #endif char outbuf[64]=""; /* USER CODE END EV */ @@ -507,7 +507,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) #if defined(USE_STM32WLE5) case MEMS_EXTI2_Pin: - APP_LOG(TS_OFF, VLEVEL_M, "\r\n(3) Vibration Sensor EXTI 2 Event \r\n"); //YUNHORN_STS_TODO + //APP_LOG(TS_OFF, VLEVEL_M, "\r\n(3) Vibration Sensor EXTI 2 Event \r\n"); //YUNHORN_STS_TODO break; #endif @@ -759,11 +759,15 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_SERVICE_MASK]; //service mask outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_RESERVE01]; //service mask outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_LEN]; //length of following cfg value + + outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_LEN+1]; + outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_LEN+2]; + outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_LEN+3]; + outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_LEN+4]; - - for (uint8_t j=0; j <= cfg_in_nvm[NVM_LEN]; j++) { - outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_LEN+j]); - } +// for (uint8_t j=0; j < 4; j++) { +// outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_LEN+j]); +// } STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf); //APP_LOG(TS_OFF, VLEVEL_H, "###### YUNHORN Report Config in NVM [ %10x ] \r\n", outbuf); @@ -875,11 +879,12 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) if (mems_ver == sts_version) { // Firmware version or Variation of MEMS/component if (tlv_buf_size == CFG_CMD_PARAMETER_SIZE) { //Validation check act_threshold = (uint8_t) (tlv_buf[i++]-0x30)*10; // "P 1 0 0 8" -> 0*10 - act_threshold += (tlv_buf[i++]-0x30); // "P 1 0 0 8" -> 0*10 + 8 + act_threshold += (uint8_t) (tlv_buf[i++]-0x30); // "P 1 0 0 8" -> 0*10 + 8 inact_threshold = (uint8_t) (tlv_buf[i++]-0x30)*10; // "P 1 0 0 8 0 4" -> 0*10 - inact_threshold += (tlv_buf[i++]-0x30); // "P 1 0 0 8 0 4" -> 0*10 + 4 + inact_threshold += (uint8_t) (tlv_buf[i++]-0x30); // "P 1 0 0 8 0 4" -> 0*10 + 4 inact_duration = (uint8_t) (tlv_buf[i++]-0x30)*10; // "P 1 0 0 8 0 4 0 3" -> 0*10 inact_duration += (uint8_t) (tlv_buf[i++]-0x30); // "P 1 0 0 8 0 4 0 3" -> 0*10+3 + do_fft_flag = (uint8_t) (tlv_buf[i++]-0x30); // "P 1 0 0 8 0 4 0 3 1" fft flag if (act_threshold <= inact_threshold) act_threshold += 2; @@ -896,6 +901,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) outbuf[i++] = (uint8_t) act_threshold; outbuf[i++] = (uint8_t) inact_threshold; outbuf[i++] = (uint8_t) inact_duration; + outbuf[i++] = (uint8_t) do_fft_flag; // Step 2: Save valid config to NVM sts_cfg_nvm.mtmcode1 = sts_mtmcode1; @@ -907,6 +913,8 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) sts_cfg_nvm.p[0] = (uint8_t) act_threshold; sts_cfg_nvm.p[1] = (uint8_t) inact_threshold; sts_cfg_nvm.p[2] = (uint8_t) inact_duration; + sts_cfg_nvm.p[3] = (uint8_t) do_fft_flag; + OnStoreSTSCFGContextRequest(); @@ -1700,6 +1708,7 @@ void OnRestoreSTSCFGContextProcess(void) act_threshold = sts_cfg_nvm.p[0]; inact_threshold = sts_cfg_nvm.p[1]; inact_duration = sts_cfg_nvm.p[2]; + do_fft_flag = sts_cfg_nvm.p[3]; STS_MOTION_SENSOR_ACT_INACT_DURATION_Init(); }