Mercurial > public > ostc4
diff Discovery/Src/simulation.c @ 813:1e688b630a6e
Used real sensor state in simulation:
In previous version the status information of the digital O2 sensors were not forwarded to the simulator. As result the simulator did not show the failure reaction in case of error injection using the RTE.
In the new version the status information provided by RTE is used within the simulator.
author | Ideenmodellierer |
---|---|
date | Sun, 03 Sep 2023 17:53:07 +0200 |
parents | dd7ce655db26 |
children | b7d93ff6b3b2 |
line wrap: on
line diff
--- a/Discovery/Src/simulation.c Thu Aug 31 10:33:25 2023 +0200 +++ b/Discovery/Src/simulation.c Sun Sep 03 17:53:07 2023 +0200 @@ -130,6 +130,7 @@ void simulation_UpdateLifeData( _Bool checkOncePerSecond) { SDiveState * pDiveState = &stateSim; + const SDiveState * pRealState = stateRealGetPointer(); SSettings *pSettings; static int last_second = -1; @@ -167,15 +168,20 @@ } } - pDiveState->lifeData.temperature_celsius = stateRealGetPointer()->lifeData.temperature_celsius; - pDiveState->lifeData.battery_charge = stateRealGetPointer()->lifeData.battery_charge; - pDiveState->lifeData.compass_heading = stateRealGetPointer()->lifeData.compass_heading; - pDiveState->lifeData.compass_roll = stateRealGetPointer()->lifeData.compass_roll; - pDiveState->lifeData.compass_pitch = stateRealGetPointer()->lifeData.compass_pitch; + pDiveState->lifeData.temperature_celsius = pRealState->lifeData.temperature_celsius; + pDiveState->lifeData.battery_charge = pRealState->lifeData.battery_charge; + pDiveState->lifeData.compass_heading = pRealState->lifeData.compass_heading; + pDiveState->lifeData.compass_roll = pRealState->lifeData.compass_roll; + pDiveState->lifeData.compass_pitch = pRealState->lifeData.compass_pitch; + + for(index = 0; index < 3; index++) + { + memcpy(&pDiveState->lifeData.extIf_sensor_data[index], &pRealState->lifeData.extIf_sensor_data[index], 32); + } #ifdef ENABLE_BOTTLE_SENSOR - pDiveState->lifeData.bottle_bar[pDiveState->lifeData.actualGas.GasIdInSettings] = stateRealGetPointer()->lifeData.bottle_bar[stateRealGetPointer()->lifeData.actualGas.GasIdInSettings]; - pDiveState->lifeData.bottle_bar_age_MilliSeconds[pDiveState->lifeData.actualGas.GasIdInSettings] = stateRealGetPointer()->lifeData.bottle_bar_age_MilliSeconds[stateRealGetPointer()->lifeData.actualGas.GasIdInSettings]; + pDiveState->lifeData.bottle_bar[pDiveState->lifeData.actualGas.GasIdInSettings] = pRealState->lifeData.bottle_bar[pRealState->lifeData.actualGas.GasIdInSettings]; + pDiveState->lifeData.bottle_bar_age_MilliSeconds[pDiveState->lifeData.actualGas.GasIdInSettings] = pRealState->lifeData.bottle_bar_age_MilliSeconds[pRealState->lifeData.actualGas.GasIdInSettings]; #endif int now = current_second(); if( last_second == now) @@ -201,18 +207,18 @@ pDiveState->lifeData.dive_time_seconds += 1; pDiveState->lifeData.pressure_ambient_bar = sim_get_ambient_pressure(pDiveState); - pDiveState->lifeData.sensorVoltage_mV[0] = stateRealGetPointer()->lifeData.sensorVoltage_mV[0] + simSensmVOffset[0]; + pDiveState->lifeData.sensorVoltage_mV[0] = pRealState->lifeData.sensorVoltage_mV[0] + simSensmVOffset[0]; if(pDiveState->lifeData.sensorVoltage_mV[0] < 0.0) { pDiveState->lifeData.sensorVoltage_mV[0] = 0.0; } - pDiveState->lifeData.sensorVoltage_mV[1] = stateRealGetPointer()->lifeData.sensorVoltage_mV[1] + simSensmVOffset[1]; + pDiveState->lifeData.sensorVoltage_mV[1] = pRealState->lifeData.sensorVoltage_mV[1] + simSensmVOffset[1]; if(pDiveState->lifeData.sensorVoltage_mV[1] < 0.0) { pDiveState->lifeData.sensorVoltage_mV[1] = 0.0; } - pDiveState->lifeData.sensorVoltage_mV[2] = stateRealGetPointer()->lifeData.sensorVoltage_mV[2] + simSensmVOffset[2]; + pDiveState->lifeData.sensorVoltage_mV[2] = pRealState->lifeData.sensorVoltage_mV[2] + simSensmVOffset[2]; if(pDiveState->lifeData.sensorVoltage_mV[2] < 0.0) { pDiveState->lifeData.sensorVoltage_mV[2] = 0.0; } pDiveState->lifeData.ppO2Sensor_bar[0] = pDiveState->lifeData.sensorVoltage_mV[0] * localCalibCoeff[0] * pDiveState->lifeData.pressure_ambient_bar; pDiveState->lifeData.ppO2Sensor_bar[1] = pDiveState->lifeData.sensorVoltage_mV[1] * localCalibCoeff[1] * pDiveState->lifeData.pressure_ambient_bar; pDiveState->lifeData.ppO2Sensor_bar[2] = pDiveState->lifeData.sensorVoltage_mV[2] * localCalibCoeff[2] * pDiveState->lifeData.pressure_ambient_bar; - pDiveState->lifeData.CO2_data.CO2_ppm = stateRealGetPointer()->lifeData.CO2_data.CO2_ppm; + pDiveState->lifeData.CO2_data.CO2_ppm = pRealState->lifeData.CO2_data.CO2_ppm; if(is_ambient_pressure_close_to_surface(&pDiveState->lifeData)) // new hw 170214 {