add thermal detect tag for upload

This commit is contained in:
Yunhorn 2024-01-10 14:30:18 +08:00
parent 429c373f47
commit 41ff95d980
4 changed files with 60 additions and 33 deletions

View File

@ -256,9 +256,9 @@
#define MajorVer 23U
#define MinorVer 12U
#define SubMinorVer 13U
#define MajorVer 24U
#define MinorVer 01U
#define SubMinorVer 10U
#define FirmwareVersion 3U
#define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U
#define YUNHORN_STS_AC_CODE_SIZE 20U

View File

@ -244,8 +244,10 @@ typedef struct
#if defined(YUNHORN_STS_M1A_ENABLED)
typedef struct
{
uint8_t thermalDetectTag; /* 0x01 water detect, 0x02 human detect */
uint16_t waterSpillCount; /* count of water spillage */
uint16_t humanSpotCount; /* count of human body spot */
uint8_t detectedEvent; /* detected Event, 1: true, 0:false */
float averageTemp; /* 0-120 C */
float maxTemp; /* 0-120 C */
float minTemp; /* 0-120 C */

View File

@ -881,30 +881,33 @@ static void SendTxData(void)
// AppData.Buffer[i++] = (uint8_t)(r0_data.battery_mV)&0xff; //#13
#endif
#ifdef STS_TMG
AppData.Buffer[i++] = (uint8_t)(14)&0xff; //#length of following bytes
AppData.Buffer[i++] = (uint8_t)(17)&0xff; //#length of following bytes
APP_LOG(TS_OFF, VLEVEL_L, "\r\n------------- SPOT_CNT =%d \r\n", (m1a_data.spot_cnt));
AppData.Buffer[i++] = (uint8_t)(m1a_data.spot_cnt)&0xff; //#01
AppData.Buffer[i++] = (uint8_t)(m1a_data.spillage_level)&0xff; //#02
AppData.Buffer[i++] = (uint8_t)(m1a_data.thermalDetectTag)&0xff; //#01
AppData.Buffer[i++] = (uint8_t)(m1a_data.detectedEvent)&0xff; //#02
AppData.Buffer[i++] = (uint8_t)(m1a_data.spot_cnt)&0xff; //#03
AppData.Buffer[i++] = (uint8_t)(m1a_data.spillage_level)&0xff; //#04
AppData.Buffer[i++] = (uint8_t)(m1a_data.humanSpot_level)&0xff; //#05
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[0])&0xff; //#03 non zero value is valid
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[1])&0xff; //#04
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[2])&0xff; //#05
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[3])&0xff; //#06
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[0])&0xff; //#06 non zero value is valid
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[1])&0xff; //#07
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[2])&0xff; //#08
AppData.Buffer[i++] = (uint8_t)(m1a_data.order[3])&0xff; //#09
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.minTemp)&0xff; //#7
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.minTemp*100))%100)&0xff; //#8
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.minTemp)&0xff; //#10
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.minTemp*100))%100)&0xff; //#11
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.averageTemp)&0xff; //#9
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.averageTemp*100))%100)&0xff; //#10
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.averageTemp)&0xff; //#12
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.averageTemp*100))%100)&0xff; //#13
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.maxTemp)&0xff; //#11
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.maxTemp*100))%100)&0xff; //#12
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.maxTemp)&0xff; //#14
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.maxTemp*100))%100)&0xff; //#15
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.centerTemp)&0xff; //#13
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.centerTemp*100))%100)&0xff; //#14
AppData.Buffer[i++] = (uint8_t)((int)m1a_data.centerTemp)&0xff; //#16
AppData.Buffer[i++] = (uint8_t)(((int)(m1a_data.centerTemp*100))%100)&0xff; //#17
#endif

View File

@ -198,7 +198,7 @@ static void sortFocusAreas(void)
{
float temp1=0.0;
if (maxTemp > humanTempThreshold)
if ((maxTemp > humanTempThreshold)&&(thermalDetectTag==WATER_DETECT))
{
blackOutTag =1;
} else
@ -242,9 +242,11 @@ static void sortFocusAreas(void)
void STS_M1A_SENSOR_Read(STS_M1A_SensorDataTypeDef *m1a_data)
{
m1a_data->thermalDetectTag = thermalDetectTag;
m1a_data->waterSpillCount = blackOutTag==0?waterSpillCount:0;
m1a_data->humanSpotCount = humanSpotCount;
m1a_data->humanSpot_level = (uint8_t)((m1a_data->humanSpotCount)*99/768.0);
m1a_data->spillage_level = (uint8_t)((m1a_data->waterSpillCount)*99/768.0); //((ROW-2)*(COL-2))); // (24-4) * (32 -4) minus edge dots
m1a_data->averageTemp = averageTemp;
@ -257,6 +259,9 @@ void STS_M1A_SENSOR_Read(STS_M1A_SensorDataTypeDef *m1a_data)
spot_cnt = max(v_water_cnt, h_water_cnt);
m1a_data->spot_cnt = blackOutTag ==0? spot_cnt:0; //max(v_water_cnt, h_water_cnt);
// TODO XXXX for fall detection logic
m1a_data->detectedEvent = (m1a_data->spot_cnt>0)? 1:0; //fall detection or water spillage detection result
uint8_t i=0;
if ((spot_cnt != 0) && (blackOutTag == 0)) {
bubbleSort((void *)upMask, 80, (void *)order);
@ -276,20 +281,34 @@ void STS_M1A_SENSOR_Read(STS_M1A_SensorDataTypeDef *m1a_data)
memcpy((void *)m1a_data->order, (const void *)order, sizeof(order));
memset(tempBuffer,0x0,sizeof(tempBuffer));
sprintf(tempBuffer,(char *)"\r\n## Blackout=%u ######\n##Read Sensor Spot CNT=%4d (areas), \r\n Env_Temp =%2.2f C \r\n## V_cnt=%2d (lane) H_cnt=%2d (lane)\r\n## Spillage Level =%u %% \r\n## averageTempInner=%02.2f C averageTemp=%02.2f C, centerTemp=%2.2f C MinTemp=%2.2f C maxTemp=%2.2f C \r\n",
(uint8_t)blackOutTag, (uint16_t)(m1a_data->waterSpillCount), (float)env_temperature, (int)v_water_cnt, (int)h_water_cnt, (uint8_t)(m1a_data->spillage_level), (float)averageTempInner, (float)averageTemp, (float)centerTemp, (float)minTemp, (float)maxTemp);
APP_LOG(TS_OFF, VLEVEL_H,(char *)tempBuffer);
sprintf(tempBuffer,(char *)"\r\n######## Gap_Average= %2.2f C Gap_Inner =%2.2f C\r\n",(float)(averageTemp - minTemp),(float)(averageTempInner - minTemp));
APP_LOG(TS_OFF, VLEVEL_H,(char *)tempBuffer);
if ((m1a_data->spot_cnt !=0 ) && (blackOutTag == 0))
if (thermalDetectTag == WATER_DETECT)
{
for (uint8_t i=0; i< 4; i++) {
memset(tempBuffer,0x0,sizeof(tempBuffer));
sprintf(tempBuffer, (char *) " Top {%2u} : order =%2u X=%2u : Y=%2u \r\n", (uint8_t)i, (int)(order[i]),
(int)(order[i]%(10)), (int)(order[i]/10));
APP_LOG(TS_OFF, VLEVEL_H,(char *)tempBuffer);
sprintf(tempBuffer,(char *)"\r\n## Blackout=%u ######\n##Read Sensor Spot CNT=%4d (areas), \r\n Env_Temp =%2.2f C \r\n## V_cnt=%2d (lane) H_cnt=%2d (lane)\r\n## Spillage Level =%u %% \r\n## averageTempInner=%02.2f C averageTemp=%02.2f C, centerTemp=%2.2f C MinTemp=%2.2f C maxTemp=%2.2f C \r\n",
(uint8_t)blackOutTag, (uint16_t)(m1a_data->waterSpillCount), (float)env_temperature, (int)v_water_cnt, (int)h_water_cnt, (uint8_t)(m1a_data->spillage_level), (float)averageTempInner, (float)averageTemp, (float)centerTemp, (float)minTemp, (float)maxTemp);
} else if (thermalDetectTag == HUMAN_DETECT)
{
sprintf(tempBuffer,(char *)"\r\n######Read Sensor Spot CNT=%4d (areas), \r\n Env_Temp =%2.2f C \r\n## V_cnt=%2d (lane) H_cnt=%2d (lane)\r\n## Spillage Level =%u %% \r\n## averageTempInner=%02.2f C averageTemp=%02.2f C, centerTemp=%2.2f C MinTemp=%2.2f C maxTemp=%2.2f C \r\n",
(uint16_t)(m1a_data->humanSpotCount), (float)env_temperature, (int)v_water_cnt, (int)h_water_cnt, (uint8_t)(m1a_data->humanSpot_level), (float)averageTempInner, (float)averageTemp, (float)centerTemp, (float)minTemp, (float)maxTemp);
}
APP_LOG(TS_OFF, VLEVEL_H,(char *)tempBuffer);
sprintf(tempBuffer,(char *)"\r\n######## Gap_Average= %2.2f C Gap_Inner =%2.2f C\r\n ##### Thermal Detect Tag =%s \r\n Human Body Threshold=%2.2f C WaterThreshold=%2.2f C\r\n",(float)(averageTemp - minTemp),(float)(averageTempInner - minTemp), ((thermalDetectTag == WATER_DETECT)? "Water Detect":"Human Detect"), (float)humanTempThreshold, (float)(waterTempThreshold/10));
APP_LOG(TS_OFF, VLEVEL_H,(char *)tempBuffer);
if ((m1a_data->spot_cnt !=0 ))
{
if ((blackOutTag == 0) || (thermalDetectTag == HUMAN_DETECT))
{
for (uint8_t i=0; i< 4; i++)
{
memset(tempBuffer,0x0,sizeof(tempBuffer));
sprintf(tempBuffer, (char *) " Top {%2u} : order =%2u X=%2u : Y=%2u \r\n", (uint8_t)i, (int)(order[i]),
(int)(order[i]%(10)), (int)(order[i]/10));
APP_LOG(TS_OFF, VLEVEL_H,(char *)tempBuffer);
}
}
}
@ -324,9 +343,12 @@ void mlx90640_display_process(void)
spot_cnt /= DetectCycleCount ; //max(v_water_cnt, h_water_cnt);
if (blackOutTag == 0)
if ((blackOutTag == 0)&& (thermalDetectTag == WATER_DETECT))
{
APP_LOG(TS_OFF, VLEVEL_H, "Water Spill Detected Level = %u of 768 \r\n", (uint16_t)waterSpillCount);
}
else if (thermalDetectTag == HUMAN_DETECT)
{
APP_LOG(TS_OFF, VLEVEL_H, "Human Spot Detected Level = %u of 768 \r\n", (uint16_t)humanSpotCount);
}
}