优化气象覆冰内存安全

hdrplus
陈曦 7 months ago
parent fefa90b01f
commit e7da756eec

@ -3479,6 +3479,11 @@ void CPhoneDevice::SetStaticIp(const std::string& iface, const std::string& ip,
int CPhoneDevice::GetIceData(IDevice::ICE_INFO *iceInfo, IDevice::ICE_TAIL *iceTail, SENSOR_PARAM *sensorParam) int CPhoneDevice::GetIceData(IDevice::ICE_INFO *iceInfo, IDevice::ICE_TAIL *iceTail, SENSOR_PARAM *sensorParam)
{ {
m_tempData.instantaneous_windspeed = 0;
m_tempData.air_temperature = 0;
m_tempData.instantaneous_winddirection = 0;
m_tempData.humidity = 0;
Collect_sensor_data(); //15s Collect_sensor_data(); //15s
Data_DEF airt; Data_DEF airt;
//++等值覆冰厚度, 综合悬挂载荷, 不均衡张力差 置0 //++等值覆冰厚度, 综合悬挂载荷, 不均衡张力差 置0
@ -3493,54 +3498,135 @@ int CPhoneDevice::GetIceData(IDevice::ICE_INFO *iceInfo, IDevice::ICE_TAIL *iceT
if(sensorParam[num].SensorsType == RALLY_PROTOCOL) if(sensorParam[num].SensorsType == RALLY_PROTOCOL)
{ {
GetPullValue(num, &airt); GetPullValue(num, &airt);
iceInfo->t_sensor_data[pullno].original_tension = airt.EuValue; if(airt.AiState == 2)
iceInfo->t_sensor_data[pullno].original_tension = airt.EuValue;
pullno++; pullno++;
} else if(sensorParam[num].SensorsType == SLANT_PROTOCOL) } else if(sensorParam[num].SensorsType == SLANT_PROTOCOL)
{ {
GetAngleValue(num, &airt, 0); GetAngleValue(num, &airt, 0);
iceInfo->t_sensor_data[angleno].deflection_angle = airt.EuValue; if(airt.AiState == 2)
iceInfo->t_sensor_data[angleno].deflection_angle = airt.EuValue;
GetAngleValue(num, &airt, 1); GetAngleValue(num, &airt, 1);
iceInfo->t_sensor_data[angleno].windage_yaw_angle = airt.EuValue; if(airt.AiState == 2)
iceInfo->t_sensor_data[angleno].windage_yaw_angle = airt.EuValue;
angleno++; angleno++;
} }
} }
GetWindSpeedData(&airt); {
iceTail->instantaneous_windspeed = airt.EuValue; std::lock_guard<std::mutex> lock(m_dataLocker);
GetWindDirectionData(&airt); GetWindSpeedData(&airt);
iceTail->instantaneous_winddirection = airt.EuValue;//需求无符号整数给出浮点数 if(airt.AiState == 2)
GetAirTempData(&airt); {
iceTail->air_temperature = airt.EuValue; iceTail->instantaneous_windspeed = airt.EuValue;
GetHumidityData(&airt); m_tempData.instantaneous_windspeed = iceTail->instantaneous_windspeed;
iceTail->humidity = airt.EuValue;//需求无符号整数给出浮点数 } else
{
iceTail->instantaneous_windspeed = m_tempData.instantaneous_windspeed;
m_tempData.instantaneous_windspeed = 0;
}
GetWindDirectionData(&airt);
if(airt.AiState == 2)
{
iceTail->instantaneous_winddirection = airt.EuValue;
m_tempData.instantaneous_winddirection = iceTail->instantaneous_winddirection;
} else
{
iceTail->instantaneous_winddirection = m_tempData.instantaneous_winddirection;
m_tempData.instantaneous_winddirection = 0;
}
GetAirTempData(&airt);
if(airt.AiState == 2) {
iceTail->air_temperature = airt.EuValue;
m_tempData.air_temperature = iceTail->air_temperature;
} else
{
iceTail->air_temperature = m_tempData.air_temperature;
m_tempData.air_temperature = 0;
}
GetHumidityData(&airt);
if(airt.AiState == 2)
{
iceTail->humidity = airt.EuValue;
m_tempData.humidity = iceTail->humidity;
} else
{
iceTail->humidity = m_tempData.humidity;
m_tempData.humidity = 0;
}
}
return true; return true;
} }
int CPhoneDevice::GetWData(IDevice::WEATHER_INFO *weatherInfo) int CPhoneDevice::GetWData(IDevice::WEATHER_INFO *weatherInfo)
{ {
m_tempData.instantaneous_windspeed = 0;
m_tempData.air_temperature = 0;
m_tempData.instantaneous_winddirection = 0;
m_tempData.humidity = 0;
Collect_sensor_data(); //15s Collect_sensor_data(); //15s
Data_DEF airt; Data_DEF airt;
GetWeatherData(&airt, 0); {
weatherInfo->air_temperature = airt.EuValue; std::lock_guard<std::mutex> lock(m_dataLocker);
GetWeatherData(&airt, 1); GetWeatherData(&airt, 2);
weatherInfo->humidity = airt.EuValue; if(airt.AiState == 2)
GetWeatherData(&airt, 2); {
weatherInfo->avg_windspeed_10min = airt.EuValue; weatherInfo->avg_windspeed_10min = airt.EuValue;
weatherInfo->extreme_windspeed = airt.EuValue; weatherInfo->extreme_windspeed = airt.EuValue;
weatherInfo->standard_windspeed = airt.EuValue; weatherInfo->standard_windspeed = airt.EuValue;
GetWeatherData(&airt, 3); m_tempData.instantaneous_windspeed = weatherInfo->avg_windspeed_10min;
weatherInfo->avg_winddirection_10min = airt.EuValue; } else
GetWeatherData(&airt, 4); {
if(airt.AiState == 2) weatherInfo->avg_windspeed_10min = m_tempData.instantaneous_windspeed;
weatherInfo->precipitation = airt.EuValue; weatherInfo->extreme_windspeed = m_tempData.instantaneous_windspeed;
GetWeatherData(&airt, 5); weatherInfo->standard_windspeed = m_tempData.instantaneous_windspeed;
if(airt.AiState == 2) m_tempData.instantaneous_windspeed = 0;
weatherInfo->air_pressure = airt.EuValue; }
GetWeatherData(&airt, 6); GetWeatherData(&airt, 3);
if(airt.AiState == 2) if(airt.AiState == 2)
weatherInfo->radiation_intensity = airt.EuValue; {
weatherInfo->avg_winddirection_10min = airt.EuValue;
m_tempData.instantaneous_winddirection = weatherInfo->avg_winddirection_10min;
} else
{
weatherInfo->avg_winddirection_10min = m_tempData.instantaneous_winddirection;
m_tempData.instantaneous_winddirection = 0;
}
GetWeatherData(&airt, 0);
if(airt.AiState == 2)
{
weatherInfo->air_temperature = airt.EuValue;
m_tempData.air_temperature = weatherInfo->air_temperature;
} else
{
weatherInfo->air_temperature = m_tempData.air_temperature;
m_tempData.air_temperature = 0;
}
GetWeatherData(&airt, 1);
if(airt.AiState == 2)
{
weatherInfo->humidity = airt.EuValue;
m_tempData.humidity = weatherInfo->humidity;
} else
{
weatherInfo->humidity = m_tempData.humidity;
m_tempData.humidity = 0;
}
GetWeatherData(&airt, 4);
if(airt.AiState == 2)
weatherInfo->precipitation = airt.EuValue;
GetWeatherData(&airt, 5);
if(airt.AiState == 2)
weatherInfo->air_pressure = airt.EuValue;
GetWeatherData(&airt, 6);
if(airt.AiState == 2)
weatherInfo->radiation_intensity = airt.EuValue;
}
return true; return true;
} }

@ -398,6 +398,9 @@ protected:
time_t m_lastTime; time_t m_lastTime;
std::atomic<bool> m_shouldStopWaiting; std::atomic<bool> m_shouldStopWaiting;
IDevice::ICE_TAIL m_tempData;
mutable std::mutex m_dataLocker;
}; };

Loading…
Cancel
Save