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++) {