Deactivate deco gas calculation option:
In the previous version had the option to consider a deco gas i the calculation or not. Reason for this was to have the automatic gas suggestion available while the deco calculation is still based on the current gas.
This might cause a critical situation in case the diver is not sure if the option is active or not => In the new version the TTS / deco is always calculated considering all deco gases.
line source
///////////////////////////////////////////////////////////////////////////////+ −
/// -*- coding: UTF-8 -*-+ −
///+ −
/// \file Discovery/Src/tInfoPredive.c+ −
/// \brief Show information which might be of interest during predive checks+ −
/// \author heinrichs weikamp gmbh+ −
/// \date 23-Feb-2015+ −
///+ −
/// \details+ −
///+ −
/// $Id$+ −
///////////////////////////////////////////////////////////////////////////////+ −
/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh+ −
///+ −
/// This program is free software: you can redistribute it and/or modify+ −
/// it under the terms of the GNU General Public License as published by+ −
/// the Free Software Foundation, either version 3 of the License, or+ −
/// (at your option) any later version.+ −
///+ −
/// This program is distributed in the hope that it will be useful,+ −
/// but WITHOUT ANY WARRANTY; without even the implied warranty of+ −
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ −
/// GNU General Public License for more details.+ −
///+ −
/// You should have received a copy of the GNU General Public License+ −
/// along with this program. If not, see <http://www.gnu.org/licenses/>.+ −
//////////////////////////////////////////////////////////////////////////////+ −
+ −
/* Includes ------------------------------------------------------------------*/+ −
+ −
#include "gfx_engine.h"+ −
#include "gfx_fonts.h"+ −
#include "tHome.h"+ −
#include "tInfo.h"+ −
#include "tInfoPreDive.h"+ −
#include "tMenuEdit.h"+ −
#include "data_exchange_main.h"+ −
+ −
#include <string.h>+ −
#include <inttypes.h>+ −
+ −
#define MEASURE_INTERVALL (10u) /* refresh function should be called every 100ms => one second interval */+ −
#define HISTORY_BUF_SIZE (240u) /* store 240 entries a one second */+ −
#define INVALID_PRESSURE_VALUE (0xFFFF)+ −
#define DELTA_SHIFT (50) /* the graph printers do not support negative values => shift data into positiv area (assumes pressure range +- 300mBar) */+ −
+ −
/* Private variables ---------------------------------------------------------*/+ −
static uint16_t surfacePressureStart = INVALID_PRESSURE_VALUE;+ −
static uint16_t surfaceTemperatureStart = 0;+ −
static uint16_t pressureHistory[HISTORY_BUF_SIZE];+ −
static uint8_t pressureHistoryIndex = 0;+ −
static uint16_t temperatureHistory[HISTORY_BUF_SIZE];+ −
static uint8_t temperatureHistoryIndex = 0;+ −
static uint8_t measureCnt = MEASURE_INTERVALL;+ −
static uint8_t referenceSensor = 0xff;+ −
+ −
/* Exported functions --------------------------------------------------------*/+ −
+ −
+ −
+ −
static void storePressureValue(int16_t deltapressure_mBar)+ −
{+ −
uint16_t newValue = DELTA_SHIFT - deltapressure_mBar; /* invert value because graph is drawing larger values to bottom direction */+ −
if(pressureHistoryIndex + 2 < HISTORY_BUF_SIZE)+ −
{+ −
pressureHistoryIndex++;+ −
pressureHistory[pressureHistoryIndex] = newValue;+ −
pressureHistoryIndex++;+ −
pressureHistory[pressureHistoryIndex] = newValue;+ −
}+ −
else+ −
{+ −
memcpy (&pressureHistory[0],&pressureHistory[2],sizeof(pressureHistory) - 2);+ −
pressureHistory[pressureHistoryIndex] = newValue;+ −
}+ −
}+ −
+ −
static void storeTemperatureValue(uint16_t temperature)+ −
{+ −
uint16_t newValue = temperature; /* todo: consider negativ temperature */+ −
if(temperatureHistoryIndex + 2 < HISTORY_BUF_SIZE)+ −
{+ −
temperatureHistoryIndex++;+ −
temperatureHistory[temperatureHistoryIndex] = newValue;+ −
temperatureHistoryIndex++;+ −
temperatureHistory[temperatureHistoryIndex] = newValue;+ −
}+ −
else+ −
{+ −
memcpy (&temperatureHistory[0],&temperatureHistory[2],sizeof(temperatureHistory) - 2);+ −
temperatureHistory[temperatureHistoryIndex] = newValue;+ −
}+ −
}+ −
+ −
void openInfo_PreDive()+ −
{+ −
const SDiveState *pStateReal = stateRealGetPointer();+ −
uint8_t index = 0;+ −
SSensorDataDiveO2* pDiveO2Data = NULL;+ −
SSettings *pSettings = settingsGetPointer();+ −
set_globalState(StIPREDIVE);+ −
+ −
surfacePressureStart = 0;+ −
pressureHistoryIndex = 0;+ −
referenceSensor = 0xff;+ −
+ −
for(index = 0; index < EXT_INTERFACE_MUX_OFFSET; index++)+ −
{+ −
if((pSettings->ext_sensor_map[index] == SENSOR_DIGO2M) && pStateReal->lifeData.ppO2Sensor_bar[index] != 0)+ −
{+ −
referenceSensor = index;+ −
pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[index];+ −
if(pDiveO2Data->pressure != 0)+ −
{+ −
surfacePressureStart = pDiveO2Data->pressure / 1000;+ −
surfaceTemperatureStart = pDiveO2Data->temperature;+ −
}+ −
break;+ −
}+ −
}+ −
for(index = 0; index < HISTORY_BUF_SIZE; index++)+ −
{+ −
pressureHistory[index] = DELTA_SHIFT;+ −
temperatureHistory[index] = 0;+ −
}+ −
}+ −
+ −
void refreshInfo_PreDive(GFX_DrawCfgScreen s)+ −
{+ −
const SDiveState *pStateReal = stateRealGetPointer();+ −
static int16_t deltaPressure = 0;+ −
static uint16_t temperature = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
uint8_t index = 0;+ −
char text[31];+ −
SSensorDataDiveO2* pDiveO2Data = NULL;+ −
point_t start, stop;+ −
+ −
SWindowGimpStyle wintempppO2;+ −
SWindowGimpStyle wintemptemp;+ −
+ −
if(--measureCnt == 0)+ −
{+ −
measureCnt = MEASURE_INTERVALL;+ −
pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[referenceSensor];+ −
if(pDiveO2Data->pressure != 0)+ −
{+ −
if(surfacePressureStart == 0)+ −
{+ −
surfacePressureStart = pDiveO2Data->pressure / 1000;+ −
surfaceTemperatureStart = pDiveO2Data->temperature;+ −
}+ −
deltaPressure = (pDiveO2Data->pressure / 1000) - surfacePressureStart;+ −
storePressureValue(deltaPressure);+ −
temperature = pDiveO2Data->temperature;+ −
storeTemperatureValue(temperature);+ −
}+ −
}+ −
+ −
text[0] = '\001';+ −
text[1] = TXT_PreDive;+ −
text[2] = 0;+ −
tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware);+ −
+ −
for(index = 0; index < EXT_INTERFACE_MUX_OFFSET; index++)+ −
{+ −
if((pSettings->ext_sensor_map[index] == SENSOR_DIGO2M) || (pSettings->ext_sensor_map[index] == SENSOR_ANALOG))+ −
{+ −
snprintf(text,32,"%c%c%d: %01.2f", TXT_2BYTE, TXT2BYTE_Sensor, index, pStateReal->lifeData.ppO2Sensor_bar[index]);+ −
tInfo_write_content_simple( 5, 780, ME_Y_LINE1 + (index * ME_Y_LINE_STEP), &FontT48, text, CLUT_Font020);+ −
}+ −
else if(pSettings->ext_sensor_map[index] == SENSOR_CO2M)+ −
{+ −
snprintf(text,32,"CO2: %4ld", pStateReal->lifeData.CO2_data.CO2_ppm);+ −
tInfo_write_content_simple( 5, 780, ME_Y_LINE5, &FontT48, text, CLUT_Font020);+ −
}+ −
}+ −
+ −
wintempppO2.left = 350;+ −
wintempppO2.right = 590;+ −
+ −
wintemptemp.left = 350;+ −
wintemptemp.right = 590;+ −
+ −
wintempppO2.top = ME_Y_LINE3;+ −
wintempppO2.bottom = wintempppO2.top + DELTA_SHIFT * 2;+ −
wintemptemp.top = ME_Y_LINE5;+ −
wintemptemp.bottom = wintemptemp.top + DELTA_SHIFT * 2;+ −
+ −
start.x = wintempppO2.left - 5;+ −
start.y = 480 - wintemptemp.bottom - 5;+ −
stop.x = wintempppO2.right- start.x + 5;+ −
stop.y = DELTA_SHIFT * 2 + 10;+ −
GFX_draw_box(&s, start, stop,1, CLUT_Font020);+ −
+ −
start.y = 480 - wintempppO2.bottom - 5;+ −
GFX_draw_box(&s, start, stop,1, CLUT_Font020);+ −
+ −
if(pSettings->FlipDisplay)+ −
{+ −
wintempppO2.left = 800 - 590;+ −
wintempppO2.right = 800 - 350;+ −
wintemptemp.left = 800 - 590;+ −
wintemptemp.right = 800 - 350;+ −
}+ −
GFX_graph_print(&s, &wintempppO2, 1,1,0, DELTA_SHIFT * 2, pressureHistory, HISTORY_BUF_SIZE, CLUT_Font030, NULL);+ −
+ −
GFX_graph_print(&s, &wintemptemp, 1,1, surfaceTemperatureStart - 2000, surfaceTemperatureStart + 10000, temperatureHistory, HISTORY_BUF_SIZE, CLUT_Font030, NULL);+ −
+ −
/* Graph labeling */+ −
snprintf(text,32,"%c%c", TXT_2BYTE, TXT2BYTE_CounterLung);+ −
tInfo_write_content_simple( 350, 795, ME_Y_LINE2, &FontT48, text, CLUT_Font020);+ −
+ −
snprintf(text,32,"\002\016\016%c%c", TXT_2BYTE, TXT2BYTE_Pressure);+ −
tInfo_write_content_simple( 500, 795, ME_Y_LINE3, &FontT48, text, CLUT_Font020);+ −
snprintf(text,32,"\002%d",deltaPressure);+ −
tInfo_write_content_simple( 500, 795, ME_Y_LINE4, &FontT48, text, CLUT_Font020);+ −
snprintf(text,32,"\002\016\016%c",TXT_Temperature);+ −
tInfo_write_content_simple( 300, 795, ME_Y_LINE5, &FontT48, text, CLUT_Font020);+ −
snprintf(text,32,"\002%2.2f",(temperature / 1000.0));+ −
tInfo_write_content_simple( 300, 795, ME_Y_LINE6, &FontT48, text, CLUT_Font020);+ −
}+ −
+ −
void sendActionToInfoPreDive(uint8_t sendAction)+ −
{+ −
switch(sendAction)+ −
{+ −
case ACTION_BUTTON_BACK:+ −
// exitInfo();+ −
exitMenuEdit_to_Menu_with_Menu_Update();+ −
break;+ −
+ −
case ACTION_BUTTON_ENTER:+ −
break;+ −
case ACTION_BUTTON_NEXT:+ −
break;+ −
case ACTION_TIMEOUT:+ −
case ACTION_MODE_CHANGE:+ −
case ACTION_IDLE_TICK:+ −
case ACTION_IDLE_SECOND:+ −
default:+ −
break;+ −
}+ −
}+ −
+ −