diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 3106e0b..a46efdd 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -298,6 +298,9 @@ #define sts_version 1U #define sts_senddataport (YUNHORN_STS_M1A_LORA_APP_DATA_PORT) #define sts_sendhtbtport (YUNHORN_STS_M1A_LORA_APP_HTBT_PORT) + +#define CFG_CMD_TMG_SIZE 6U + #endif #define sts_appctrlport (YUNHORN_STS_USER_APP_CTRL_PORT) diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h index b29b30c..311adb4 100644 --- a/Core/Inc/yunhorn_sts_sensors.h +++ b/Core/Inc/yunhorn_sts_sensors.h @@ -47,7 +47,12 @@ enum cfg_cmd_order{ CFG_CMD3, // # Z {H, S, C} M {0,1,2,3,4] CFG_CMD4, // # CFG_CMD5, // 'S','M','H' - CFG_CMD6 + CFG_CMD6, + CFG_CMD7, + CFG_CMD8, + CFG_CMD9, + CFG_CMD10, + CFG_CMD11 }; enum p_cmd_order{ P_CMD=0, //'P' //P_MTM_CODE, // #1 diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 299ac4b..2ed9b99 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -60,7 +60,11 @@ extern volatile int sts_tof_distance_data[MAX_TOF_COUNT]; volatile uint32_t SamplingPeriodicity = 1000; //unit ms volatile uint32_t HeartBeatPeriodicity = 120000; //unit ms volatile uint8_t STS_LoRa_WAN_Joined = 0; - +#ifdef STS_TMG +extern volatile uint8_t waterTempThreshold; +extern volatile uint8_t normalPeopleTemp; +extern volatile uint8_t normalWaterTemp; +#endif volatile uint8_t heart_beat_timer =0; char outbuf[128]=""; volatile uint8_t upload_message_timer =0; @@ -1809,6 +1813,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) uint8_t j=0; if (mems_ver == sts_version) { // Firmware version or Variation of MEMS/component +#ifdef YUNHORN_STS_O6_ENABLED if (tlv_buf_size >= CFG_CMD_TOF_SIMPLE_SIZE) { //Validation check @@ -1849,7 +1854,74 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); } +#endif +#ifdef STS_TMG +/* YUNHORN TODO XXXXXX +P # # A # # + +--------------- HW VER + +------------- SW VER + + ---------- TYPE OF PARAMETER + 'W': Water threshold + 'A': Average Temperature + 'H': Human Body Temperature + + -------- MSB OF PARAMETER + + ------ LSB OF PARAMTER + +*/ + + if (tlv_buf_size >= CFG_CMD_TMG_SIZE) + { + //Validation check + invalid_flag = 0; + + if (tlv_buf[CFG_CMD4] == 'W') { + if ((tlv_buf[CFG_CMD5]>='0')&&(tlv_buf[CFG_CMD6]<='9')&&(tlv_buf[CFG_CMD5]>='0')&&(tlv_buf[CFG_CMD5]<='9')) { + + //volatile uint8_t waterTempThreshold=15, normalWaterTemp=25; + waterTempThreshold = (tlv_buf[CFG_CMD5]-0x30)*10+(tlv_buf[CFG_CMD6]-0x30); + + } else { + invalid_flag = 1; + } + } + for (j =0; j < CFG_CMD_TMG_SIZE; j++) + { + sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xff); + APP_LOG(TS_OFF,VLEVEL_H,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n", + j,tlv_buf[CFG_CMD4+j], j, sts_cfg_nvm.p[j]); + } + + + //STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(); + STS_SENSOR_NVM_CFG_SIMPLE(); + + i=0; // Step 1: Prepare status update message + outbuf[i++] = (char) 'P'; + outbuf[i++] = sts_mtmcode1; + outbuf[i++] = sts_mtmcode2; + outbuf[i++] = sts_version; + outbuf[i++] = sts_hardware_ver; + + for (j=0; j < CFG_CMD_TMG_SIZE; j++) + { + outbuf[i++] = (uint8_t)(sts_cfg_nvm.p[j]+0x30)&0xff; + } + APP_LOG(TS_OFF, VLEVEL_H, "###### RSS Simple CFG=%s\r\n",*outbuf); + + // Step 2: Save valid config to NVM + sts_cfg_nvm.mtmcode1 = sts_mtmcode1; + sts_cfg_nvm.mtmcode2 = sts_mtmcode2; + sts_cfg_nvm.version = sts_version; + sts_cfg_nvm.hardware_ver = sts_hardware_ver; + sts_cfg_nvm.work_mode = sts_work_mode; + sts_cfg_nvm.sts_service_mask = sts_service_mask; + sts_cfg_nvm.length = CFG_CMD_TMG_SIZE; + + OnStoreSTSCFGContextRequest(); + } + +#endif // Invalid parameters // Step 1/2: Prepare status update message if (invalid_flag == 1) diff --git a/STM32CubeIDE/.project b/STM32CubeIDE/.project index 96964bb..304d6aa 100644 --- a/STM32CubeIDE/.project +++ b/STM32CubeIDE/.project @@ -522,16 +522,6 @@ 1 copy_PARENT/mlx90640/mlx90640_lcd_display.c - - Application/User/MLX90640/mlx90640_user.c - 1 - copy_PARENT/mlx90640/mlx90640_user.c - - - Application/User/MLX90640/st7789.c - 1 - copy_PARENT/mlx90640/st7789.c - Application/User/MLX90640/stm32_hx8347d_lcd.c 1 diff --git a/STM32CubeIDE/Release/objects.list b/STM32CubeIDE/Release/objects.list index 75e6802..b7cf1a9 100644 --- a/STM32CubeIDE/Release/objects.list +++ b/STM32CubeIDE/Release/objects.list @@ -31,8 +31,6 @@ "./Application/User/MLX90640/MLX90640_I2C_Driver.o" "./Application/User/MLX90640/hx8347d.o" "./Application/User/MLX90640/mlx90640_lcd_display.o" -"./Application/User/MLX90640/mlx90640_user.o" -"./Application/User/MLX90640/st7789.o" "./Application/User/MLX90640/stm32_hx8347d_lcd.o" "./Application/User/Startup/startup_stm32wl55jcix.o" "./Application/User/TOF/App/X-WL55_WLE5_53L0X.o" diff --git a/mlx90640/mlx90640_lcd_display.c b/mlx90640/mlx90640_lcd_display.c index 3732f61..f3d5f18 100644 --- a/mlx90640/mlx90640_lcd_display.c +++ b/mlx90640/mlx90640_lcd_display.c @@ -21,7 +21,7 @@ paramsMLX90640 mlx90640; static uint16_t eeMLX90640[832]; int status; volatile uint8_t draw_legend_once=0, normalPeopleTemp=32, blackOutTag=0; -volatile uint8_t waterTempThreshold=18, normalWaterTemp=25; +volatile uint8_t waterTempThreshold=15, normalWaterTemp=25; volatile uint8_t detectCycle=0, v_water_cnt=0,h_water_cnt=0, spot_cnt=0; // start with some initial colors volatile float minTemp = -20.0f; @@ -30,7 +30,7 @@ volatile float centerTemp=0.0f; volatile float averageTemp=0.0f; volatile uint16_t waterSpillCount=0; extern volatile uint8_t sensor_data_ready; -char tempBuffer[128]; +char tempBuffer[256]; // variables for interpolated colors uint8_t red, green, blue; @@ -249,7 +249,7 @@ static void drawPicture(void) v_1++; } } - for (y=12; y 20) - { - detectCycle = 0; + detectCycle ++; - memset((void *)zoneMask,0,sizeof(zoneMask)); - memset((void *)edgeMask, 0, sizeof(edgeMask)); - memset((void *)upMask, 0, sizeof(upMask)); - } + } while (detectCycle <30); + waterSpillCount /=30; } @@ -359,7 +358,7 @@ void STS_M1A_SENSOR_Read(STS_M1A_SensorDataTypeDef *m1a_data) { m1a_data->waterSpillCount = waterSpillCount; - m1a_data->spillage_level = (uint8_t)((int)waterSpillCount*99/((ROW-2)*(COL-2)))&0xff; // (24-4) * (32 -4) minus edge dots + m1a_data->spillage_level = (uint8_t)(waterSpillCount*99/80); //((ROW-2)*(COL-2))); // (24-4) * (32 -4) minus edge dots m1a_data->averageTemp = averageTemp; m1a_data->centerTemp = centerTemp; m1a_data->minTemp = minTemp; @@ -388,8 +387,8 @@ void STS_M1A_SENSOR_Read(STS_M1A_SensorDataTypeDef *m1a_data) memset(tempBuffer,0,sizeof(tempBuffer)); - sprintf(tempBuffer,(char *)"Read Sensor Spot CNT=%4d V_cnt=%2d H_cnt=%2d Spillage Level =%2d average=%2.2fC center=%2.2fC min=%2.2fC max=%2.2fC \r\n", - m1a_data->waterSpillCount, v_water_cnt, h_water_cnt, m1a_data->spillage_level, (float)averageTemp, (float)centerTemp, (float)minTemp, (float)maxTemp); + sprintf(tempBuffer,(char *)"\r\n## Read Sensor Spot CNT=%4d (areas) \r\n## V_cnt=%2d (lane) H_cnt=%2d (lane) \r\n## Spillage Level =%2.2f%% \r\n## averageTemp=%2.2f C centerTemp=%2.2f C MinTemp=%2.2f C maxTemp=%2.2f C \r\n", + m1a_data->waterSpillCount, v_water_cnt, h_water_cnt, (float)(m1a_data->spillage_level), (float)averageTemp, (float)centerTemp, (float)minTemp, (float)maxTemp); APP_LOG(TS_OFF, VLEVEL_L,(char *)tempBuffer); @@ -408,6 +407,10 @@ void STS_M1A_SENSOR_Read(STS_M1A_SensorDataTypeDef *m1a_data) void mlx90640_display_process(void) { + memset((void *)zoneMask, 0,sizeof(zoneMask)); + memset((void *)edgeMask, 0, sizeof(edgeMask)); + memset((void *)upMask, 0, sizeof(upMask)); + readTempValues(); setTempScale(); blackOutFilter(); @@ -430,7 +433,7 @@ void mlx90640_display_process(void) //BSP_LCD_DisplayOff(); } #endif - APP_LOG(TS_OFF, VLEVEL_L, "Water Spill Detected Level = %d of 768 \r\n", waterSpillCount); + APP_LOG(TS_OFF, VLEVEL_L, "Water Spill Detected Level = %d of 600 \r\n", waterSpillCount); } uint8_t mlx90640_bringup_test(void) @@ -477,7 +480,7 @@ static void bubbleSort(uint8_t arr[], uint8_t len, uint8_t order[]) { uint8_t i, j, temp, t1; for (j=0; j < len ; j++) { - order[j] = 1+j; + order[j] = j; } for (i = 0; i < len - 1; i++) { for (j = 0; j < len - i - 1; j++) {