From 7783576405ff70d704eec71acdaeb875b43168b8 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Fri, 22 Dec 2023 16:26:04 +0800 Subject: [PATCH] revised for correct upload message of Self-testing of Thermal Graph centerTemp, averageTemp, minTemp, maxTemp --- Core/Inc/sys_conf.h | 2 +- Core/Inc/yunhorn_sts_sensors.h | 2 + Core/Src/main.c | 1 - LoRaWAN/App/lora_app.c | 62 ++++++++++++++++---- STM32CubeIDE/.settings/language.settings.xml | 4 +- TOF/App/app_tof.c | 7 ++- mlx90640/mlx90640_lcd_display.c | 29 +++++++++ mlx90640/mlx90640_lcd_display.h | 3 + 8 files changed, 95 insertions(+), 15 deletions(-) diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h index 51ca3b6..de3a94d 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_L +#define VERBOSE_LEVEL VLEVEL_H /** * @brief Enable trace logs diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h index 899256d..b29b30c 100644 --- a/Core/Inc/yunhorn_sts_sensors.h +++ b/Core/Inc/yunhorn_sts_sensors.h @@ -667,6 +667,8 @@ void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_ void STS_PRESENCE_SENSOR_Distance_Measure_Process(void); + + /* USER CODE BEGIN Private defines */ /* In this example TIM2 input clock (TIM2CLK) is set to APB1 clock (PCLK1), diff --git a/Core/Src/main.c b/Core/Src/main.c index 62e77d5..55f72e0 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -129,7 +129,6 @@ int main(void) /* Infinite loop */ /* USER CODE BEGIN WHILE */ - while (1) { /* USER CODE END WHILE */ diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 723487e..479e6cc 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -43,6 +43,7 @@ #include "yunhorn_sts_prd_conf.h" #include "sts_cmox_hmac_sha.h" #include "X-WL55_WLE5_53L0X.h" +#include "mlx90640_lcd_display.h" /* USER CODE END Includes */ /* External variables ---------------------------------------------------------*/ @@ -1527,7 +1528,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) } else if ((char)tlv_buf[CFG_CMD3] == 'S') { // Self Function Testing "YZS" i=0; - memset(outbuf,sizeof(outbuf),0x30); + memset(outbuf,0x30,sizeof(outbuf)); STS_SENSOR_Function_Test_Process(); @@ -1556,7 +1557,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) STS_SENSOR_Distance_Test_Process(); i=0; - memset(outbuf,sizeof(outbuf),0x30); + memset(outbuf,0x30, sizeof(outbuf)); outbuf[i++] = (uint8_t)'D'; outbuf[i++] = (uint8_t)sts_mtmcode1; outbuf[i++] = (uint8_t)sts_mtmcode2; @@ -1629,7 +1630,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) uint8_t cfg_in_nvm[YUNHORN_STS_MAX_NVM_CFG_SIZE]=""; OnRestoreSTSCFGContextRequest((uint8_t *)cfg_in_nvm); i=0; - memset(outbuf,sizeof(outbuf),0x30); + memset(outbuf,0x30, sizeof(outbuf)); outbuf[i++] = (uint8_t) 'C'; outbuf[i++] = (uint8_t) cfg_in_nvm[NVM_MTM1]; //MTM Code @@ -2184,9 +2185,9 @@ void STS_SENSOR_Distance_Test_Process(void) void STS_SENSOR_Function_Test_Process(void) { - char tstbuf[128] =""; uint8_t i=0; + uint8_t tstbuf[128] ={0x0}; uint8_t i=0; uint8_t count = 0; - uint8_t mems_Dev_ID[2] = {0x0,0x0}; + uint8_t mems_Dev_ID[2] = {0x0}; tstbuf[i++] = (uint8_t) 'S'; tstbuf[i++] = (uint8_t) sts_mtmcode1; @@ -2194,9 +2195,16 @@ void STS_SENSOR_Function_Test_Process(void) tstbuf[i++] = (uint8_t) sts_version; tstbuf[i++] = (uint8_t) sts_hardware_ver; tstbuf[i++] = (uint8_t) (99*GetBatteryLevel()/254)&0xff; +#ifdef STS_TMG + count = mlx90640_bringup_test(); + APP_LOG(TS_OFF, VLEVEL_L, "Thermal Graph Sensor count =%d \r\n", count); + +#endif +#if (defined(YUNHORN_STS_R0_ENABLED)||defined(YUNHORN_STS_R5_ENABLED)||defined(YUNHORN_STS_R1_ENABLED)) count = STS_SENSOR_MEMS_Get_ID(mems_Dev_ID); APP_LOG(TS_OFF, VLEVEL_H, "count =%d \r\n", count); +#endif // if ((mems_Dev_ID[0]==0X0) && (mems_Dev_ID[1]==0x0)) if (count ==0) @@ -2205,7 +2213,7 @@ void STS_SENSOR_Function_Test_Process(void) } else { - tstbuf[i++] = (uint8_t) (6+1)&0xff; //length of following data + //tstbuf[i++] = (uint8_t) (6+1)&0xff; //length of following data #ifdef YUNHORN_STS_O6_ENABLED tstbuf[i++] = (uint8_t)20; //length of following data uint8_t self_test_result[10]={0,0,0,0,0, 0,0,0,0,0}; @@ -2224,7 +2232,7 @@ void STS_SENSOR_Function_Test_Process(void) #endif #if (defined(YUNHORN_STS_R0_ENABLED)||defined(YUNHORN_STS_R5_ENABLED)||defined(YUNHORN_STS_R1_ENABLED)) - tstbuf[i++] = (uint8_t) (count)&0xff; + tstbuf[i++] = (uint8_t) (6)&0xff; //MX_TOF_Process(); STS_TOF_VL53L0X_Range_Process(); tstbuf[i++] = (uint8_t) ((sts_tof_distance_data[0] >>8 ) &0xff); @@ -2234,12 +2242,46 @@ void STS_SENSOR_Function_Test_Process(void) tstbuf[i++] = (uint8_t) ((sts_tof_distance_data[2] >>8 ) &0xff); tstbuf[i++] = (uint8_t) (sts_tof_distance_data[2] &0xff); #endif + +#if (defined(YUNHORN_STS_M1A_ENABLED)) + tstbuf[i++] = (uint8_t) (8)&0xff; //length of following data + + float self_test_result[4]={0x0}; + + STS_SENSOR_Thermal_Graph_Test_Process(self_test_result, count); +#if 0 + memset(outbuf,0,sizeof(outbuf)); + sprintf(outbuf,(char *)" ============ Calibrated Temp Average=%2.2fC Center=%2.2fC Min=%2.2fC Max=%2.2fC \r\n", + (float)self_test_result[0], (float)self_test_result[1], (float)self_test_result[2], (float)self_test_result[3]); + APP_LOG(TS_OFF, VLEVEL_L,(char *)outbuf); +#endif + + tstbuf[i++] = ((int)self_test_result[0])&0xff; //AverageTemp + tstbuf[i++] = ((int)((self_test_result[0])*100)%100)&0xff; + + tstbuf[i++] = ((int)self_test_result[1])&0xff; //centerTemp + tstbuf[i++] = ((int)((self_test_result[1])*100)%100)&0xff; + + tstbuf[i++] = ((int)self_test_result[2])&0xff; //minTemp + tstbuf[i++] = ((int)((self_test_result[2])*100)%100)&0xff; + + tstbuf[i++] = ((int)self_test_result[3])&0xff; //maxTemp + tstbuf[i++] = ((int)((self_test_result[3])*100)%100)&0xff; +#if 0 + for (uint8_t jj=0;jj<8;jj++) { + APP_LOG(TS_OFF,VLEVEL_L, "tstbuf[%02d] = %02d \r\n", jj, tstbuf[7+jj]); + } +#endif + +#endif + } - memset((void*)outbuf,sizeof(outbuf),0x30); + + memset((void*)outbuf, 0x0, sizeof(outbuf)); memcpy((void*)outbuf, tstbuf, i); + //APP_LOG(TS_OFF, VLEVEL_L, "Ready to upload\r\n"); - - STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf); + //STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf); } diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml index 3533a98..7aa0e53 100644 --- a/STM32CubeIDE/.settings/language.settings.xml +++ b/STM32CubeIDE/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/TOF/App/app_tof.c b/TOF/App/app_tof.c index 665ed88..40632f3 100644 --- a/TOF/App/app_tof.c +++ b/TOF/App/app_tof.c @@ -40,6 +40,9 @@ extern "C" { #include "X-WL55_WLE5_53L0X.h" #endif +#ifdef STS_TMG +#include "mlx90640_lcd_display.h" +#endif #include "stm32wlxx_nucleo.h" @@ -166,7 +169,9 @@ uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *mems_Dev_ID) #ifdef STS_USE_TOF_VL53L0X cnt = sts_tof_vl53l0x_DetectSensors(); #endif - if (cnt > 0){ + + if (cnt > 0) + { mems_Dev_ID[0] = (Id >>8)&0xff; mems_Dev_ID[1] = (Id & 0xff); } diff --git a/mlx90640/mlx90640_lcd_display.c b/mlx90640/mlx90640_lcd_display.c index a2d7628..24920a3 100644 --- a/mlx90640/mlx90640_lcd_display.c +++ b/mlx90640/mlx90640_lcd_display.c @@ -428,6 +428,15 @@ void mlx90640_display_process(void) APP_LOG(TS_OFF, VLEVEL_L, "Water Spill Detected Level = %d of 768 \r\n", waterSpillCount); } +uint8_t mlx90640_bringup_test(void) +{ + + status = MLX90640_DumpEE(MLX90640_ADDR, eeMLX90640); + + return (status==0?1:0); + +} + void mlx90640_display_init(void){ MLX90640_SetRefreshRate(MLX90640_ADDR, RefreshRate); MLX90640_SetChessMode(MLX90640_ADDR); @@ -438,6 +447,26 @@ void mlx90640_display_init(void){ if (status != 0) APP_LOG(TS_OFF, VLEVEL_L, "\r\nParameter extraction failed with error code:%d\r\n",status); } +void STS_SENSOR_Thermal_Graph_Test_Process(float *self_test_result, uint8_t count) +{ + + mlx90640_display_init(); + readTempValues(); + setTempScale(); + + self_test_result[0] = averageTemp; + self_test_result[1] = centerTemp; + self_test_result[2] = minTemp; + self_test_result[3] = maxTemp; +#if 0 + memset(tempBuffer,0,sizeof(tempBuffer)); + sprintf(tempBuffer,(char *)"Upload ============ Calibrated Temp Average=%2.2fC Center=%2.2fC Min=%2.2fC Max=%2.2fC \r\n", + (float)self_test_result[0], (float)self_test_result[1], (float)self_test_result[2], (float)self_test_result[3]); + APP_LOG(TS_OFF, VLEVEL_L,(char *)tempBuffer); +#endif + +} + static void bubbleSort(uint8_t arr[], uint8_t len, uint8_t order[]) { diff --git a/mlx90640/mlx90640_lcd_display.h b/mlx90640/mlx90640_lcd_display.h index 8370324..c956680 100644 --- a/mlx90640/mlx90640_lcd_display.h +++ b/mlx90640/mlx90640_lcd_display.h @@ -41,9 +41,12 @@ SOFTWARE. #define abs(x) ((x)>0?(x):(-x)) +//void mlx90640_display_init(void); void mlx90640_display_init(void); void mlx90640_display_process(void); +uint8_t mlx90640_bringup_test(void); +void STS_SENSOR_Thermal_Graph_Test_Process(float *self_test_result, uint8_t count); #ifdef __cplusplus }