view Discovery/Src/tMenuDecoParameter.c @ 283:04cdeff80254
ndl-in-logbook
Bugfix: write NDL in logbook correctly
This is a subtle one. Typecasting takes precedence over, for example, division.
So, we first typecasted an int to an uint8_t, loosing data in the process, and
then do a seconds to minute conversion. This, obviously, does not give the
result one expects.
And in hindsight a trivial fix for a bug that like has been there forever.
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
author
Jan Mulder <jlmulder@xs4all.nl>
date
Thu, 02 May 2019 13:08:17 +0200 (2019-05-02)
parents
5f11787b4f42
children
d4622533271d
line source
///////////////////////////////////////////////////////////////////////////////+ −
/// -*- coding: UTF-8 -*-+ −
///+ −
/// \file Discovery/Src/tMenuDecoParameter.c+ −
/// \brief Deco Parameter+ −
/// \author heinrichs weikamp gmbh+ −
/// \date 02-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 <stdio.h>+ −
#include <string.h>+ −
#include "tMenu.h"+ −
#include "tStructure.h"+ −
#include "tMenuDecoParameter.h"+ −
#include "text_multilanguage.h"+ −
#include "settings.h"+ −
#include "data_central.h"+ −
#include "unit.h"+ −
+ −
#define MDP_TAB (380)+ −
+ −
/* Exported functions --------------------------------------------------------*/+ −
+ −
uint32_t tMDecoParameters_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext)+ −
{+ −
uint8_t decoType, VpmConsveratism, GFlow, GFhigh, aGFlow, aGFhigh;+ −
int8_t mode;+ −
uint8_t textPointer;+ −
uint8_t lastStop;+ −
char decotypeTxtId;+ −
+ −
textPointer = 0;+ −
*tab = MDP_TAB;+ −
*subtext = 0;+ −
+ −
if(actual_menu_content != MENU_SURFACE)+ −
{+ −
const SDiveSettings * pDiveSettings;+ −
+ −
if(actual_menu_content == MENU_DIVE_REAL)+ −
{+ −
const SDiveState * pState = stateRealGetPointer();+ −
pDiveSettings = &pState->diveSettings;+ −
}+ −
else+ −
{+ −
const SDiveState * pState = stateSimGetPointer();+ −
pDiveSettings = &pState->diveSettings;+ −
}+ −
+ −
if(pDiveSettings->deco_type.ub.standard == VPM_MODE)+ −
mode = VPM_MODE;+ −
else+ −
if((pDiveSettings->gf_high == settingsGetPointer()->GF_high) && (pDiveSettings->gf_low == settingsGetPointer()->GF_low))+ −
mode = GF_MODE;+ −
else+ −
mode = -1;+ −
+ −
+ −
VpmConsveratism = pDiveSettings->vpm_conservatism;+ −
GFlow = settingsGetPointer()->GF_low;+ −
GFhigh = settingsGetPointer()->GF_high;+ −
aGFlow = settingsGetPointer()->aGF_low;+ −
aGFhigh = settingsGetPointer()->aGF_high;+ −
+ −
text[textPointer++] = '\006' - (mode == VPM_MODE);+ −
text[textPointer++] = ' ';+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"VPM"+ −
"\t"+ −
"+"+ −
"%u"+ −
"\n\r"+ −
, VpmConsveratism+ −
);+ −
+ −
text[textPointer++] = '\006' - (mode == GF_MODE);+ −
text[textPointer++] = ' ';+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"GF"+ −
"\016\016"+ −
"low/high"+ −
"\017"+ −
"\t"+ −
"%u"+ −
"/"+ −
"%u"+ −
"\n\r"+ −
, GFlow, GFhigh+ −
);+ −
+ −
text[textPointer++] = '\006' - (mode == -1);+ −
text[textPointer++] = ' ';+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"aGF"+ −
"\016\016"+ −
"low/high"+ −
"\017"+ −
"\t"+ −
"%u"+ −
"/"+ −
"%u"+ −
"\n\r"+ −
, aGFlow, aGFhigh+ −
);+ −
+ −
text[textPointer++] = 0;+ −
return StMDECOP;+ −
}+ −
+ −
SSettings *data = settingsGetPointer();+ −
+ −
decoType = settingsGetPointer()->deco_type.ub.standard;+ −
VpmConsveratism = data->VPM_conservatism.ub.standard;+ −
GFlow = data->GF_low;+ −
GFhigh = data->GF_high;+ −
aGFlow = data->aGF_low;+ −
aGFhigh = data->aGF_high;+ −
lastStop = data->last_stop_depth_meter;+ −
+ −
if((line == 0) || (line == 1))+ −
{+ −
if(decoType == VPM_MODE)+ −
decotypeTxtId = TXT_VPM;+ −
else+ −
decotypeTxtId = TXT_ZHL16GF;+ −
+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"%c"+ −
"\t"+ −
"%c"+ −
, TXT_DecoAlgorithm+ −
, decotypeTxtId+ −
);+ −
}+ −
strcpy(&text[textPointer],"\n\r");+ −
textPointer += 2;+ −
+ −
if((line == 0) || (line == 2))+ −
{+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"VPM"+ −
"\t"+ −
"+"+ −
"%u"+ −
, VpmConsveratism+ −
);+ −
}+ −
strcpy(&text[textPointer],"\n\r");+ −
textPointer += 2;+ −
+ −
if((line == 0) || (line == 3))+ −
{+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"GF"+ −
"\016\016"+ −
"low/high"+ −
"\017"+ −
"\t"+ −
"%u"+ −
"/"+ −
"%u"+ −
, GFlow, GFhigh+ −
);+ −
}+ −
strcpy(&text[textPointer],"\n\r");+ −
textPointer += 2;+ −
+ −
if((line == 0) || (line == 4))+ −
{+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"aGF"+ −
"\016\016"+ −
"low/high"+ −
"\017"+ −
"\t"+ −
"%u"+ −
"/"+ −
"%u"+ −
, aGFlow, aGFhigh+ −
);+ −
}+ −
strcpy(&text[textPointer],"\n\r");+ −
textPointer += 2;+ −
+ −
if((line == 0) || (line == 5))+ −
{+ −
textPointer += snprintf(&text[textPointer], 60,\+ −
"%c"+ −
"\t"+ −
"%u"+ −
"\016\016"+ −
" %c%c"+ −
"\017"+ −
, TXT_LastDecostop+ −
, unit_depth_integer(lastStop)+ −
, unit_depth_char1()+ −
, unit_depth_char2()+ −
);+ −
}+ −
strcpy(&text[textPointer],"\n\r");+ −
textPointer += 2;+ −
+ −
return StMDECOP;+ −
}+ −