GNSS improvments:
- Introduce alive indicator; Status string will switch between white and grey with every message received from the module
- shorten visibility of "shutting down" string. a busy wait of 1 second was applied in the sleep prepare function. The time is now included in the time needed to prepare the module for low power operation
- make sure GPIO is properly initialized after deep sleep
line source
///////////////////////////////////////////////////////////////////////////////+ −
/// -*- coding: UTF-8 -*-+ −
///+ −
/// \file Discovery/Src/tMenuEditXtra.c+ −
/// \brief Menu Edit Xtra - Specials in Divemode like Reset Stopwatch+ −
/// \author heinrichs weikamp gmbh+ −
/// \date 02-Mar-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 "tMenuEditCustom.h"+ −
+ −
#include "gfx_fonts.h"+ −
#include "simulation.h"+ −
#include "timer.h"+ −
#include "tMenuEdit.h"+ −
#include "tHome.h" // for enum CUSTOMVIEWS and init_t7_compass()+ −
#include "t3.h"+ −
#include "t7.h"+ −
#include "data_exchange_main.h"+ −
#include "motion.h"+ −
#include "tMenu.h"+ −
#include "tMenuSystem.h"+ −
#include <math.h>+ −
+ −
+ −
#define CV_PER_PAGE (5u) /* number of cv selections shown at one page */+ −
#define MAX_BACKLIGHT_BOOST (2u) /* max number of backlight levels which may be increased during focus state */+ −
+ −
#define MAX_FOCUS_LIMITER (2u) /* max number for reducing the spot used for focus detection */+ −
+ −
static uint8_t customviewsSubpage = 0;+ −
static uint8_t customviewsSubpageMax = 0; /* number of pages needed to display all selectable views */+ −
static const uint8_t* pcv_curchangelist;+ −
/* Private function prototypes -----------------------------------------------*/+ −
void openEdit_Customview(void);+ −
void openEdit_BigScreen(void);+ −
void openEdit_MotionCtrl(void);+ −
void openEdit_ViewPort(void);+ −
void refresh_Customviews(void);+ −
void setMenuContentStructure();+ −
char customview_TXT2BYTE_helper(uint8_t customViewId);+ −
char customviewBF_TXT2BYTE_helper(uint8_t customViewId);+ −
/* Announced function prototypes -----------------------------------------------*/+ −
uint8_t OnAction_CViewTimeout (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewStandard (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewStandardBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewAutofocusBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CornerTimeout (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CornerStandard(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewPortCalib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewPortLayout(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewPortAmbient(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewPortControl(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
uint8_t OnAction_CViewPortSpot(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);+ −
/* Exported functions --------------------------------------------------------*/+ −
+ −
+ −
+ −
+ −
void refresh_Customviews(void)+ −
{+ −
char text[32];+ −
uint8_t textpointer = 0;+ −
+ −
// header+ −
text[0] = '\001';+ −
text[1] = TXT_2BYTE;+ −
text[2] = TXT2BYTE_Customviews;+ −
text[3] = 0;+ −
write_topline(text);+ −
+ −
// custom view center return+ −
textpointer = 0;+ −
text[textpointer++] = TXT_2BYTE;+ −
text[textpointer++] = TXT2BYTE_CViewTimeout;+ −
textpointer += snprintf(&text[textpointer],11," %02u\016\016 %c\017",settingsGetPointer()->tX_customViewTimeout,TXT_Seconds);+ −
write_label_var( 30, 700, ME_Y_LINE1, &FontT48, text);+ −
+ −
// custom view center primary+ −
text[0] = TXT_2BYTE;+ −
text[1] = TXT2BYTE_CViewStandard;+ −
text[2] = ' ';+ −
text[3] = ' ';+ −
+ −
text[4] = TXT_2BYTE;+ −
text[5] = customview_TXT2BYTE_helper(settingsGetPointer()->tX_customViewPrimary);+ −
text[6] = 0;+ −
write_label_var( 30, 700, ME_Y_LINE2, &FontT48, text);+ −
+ −
// custom view big font+ −
text[0] = TXT_2BYTE;+ −
text[1] = TXT2BYTE_ExtraDisplay;+ −
text[2] = ' ';+ −
text[3] = ' ';+ −
text[4] = TXT_2BYTE;+ −
text[5] = customviewBF_TXT2BYTE_helper(settingsGetPointer()->tX_customViewPrimaryBF);+ −
text[6] = 0;+ −
write_label_var( 30, 700, ME_Y_LINE3, &FontT48, text);+ −
+ −
/* Bigfont autofocus selector */+ −
textpointer = 0;+ −
text[textpointer++] = TXT_2BYTE;+ −
text[textpointer++] = TXT2BYTE_ExtraDisplay;+ −
textpointer += snprintf(&text[textpointer],20," %c%c",TXT_2BYTE, TXT2BYTE_Autofocus);+ −
write_label_var( 30, 700, ME_Y_LINE4, &FontT48, text);+ −
+ −
tMenuEdit_refresh_field(StMCustom1_CViewAutoFocusBF);+ −
+ −
+ −
// field corner return+ −
textpointer = 0;+ −
text[textpointer++] = TXT_2BYTE;+ −
text[textpointer++] = TXT2BYTE_CornerTimeout;+ −
textpointer += snprintf(&text[textpointer],11," %02u\016\016 %c\017",settingsGetPointer()->tX_userselectedLeftLowerCornerTimeout,TXT_Seconds);+ −
write_label_var( 30, 700, ME_Y_LINE5, &FontT48, text);+ −
+ −
// field corner primary+ −
text[0] = TXT_2BYTE;+ −
text[1] = TXT2BYTE_CornerStandard;+ −
text[2] = ' ';+ −
text[3] = ' ';+ −
switch(settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary)+ −
{+ −
/* Temperature */+ −
case LLC_Temperature:+ −
text[4] = TXT_Temperature;+ −
break;+ −
/* Average Depth */+ −
case LLC_AverageDepth:+ −
text[4] = TXT_AvgDepth;+ −
break;+ −
/* ppO2 */+ −
case LLC_ppO2:+ −
text[4] = TXT_ppO2;+ −
break;+ −
/* Stop Uhr */+ −
case LLC_Stopwatch:+ −
text[4] = TXT_Stopwatch;+ −
break;+ −
/* Ceiling */+ −
case LLC_Ceiling:+ −
text[4] = TXT_Ceiling;+ −
break;+ −
/* Future TTS */+ −
case LLC_FutureTTS:+ −
text[4] = TXT_FutureTTS;+ −
break;+ −
/* CNS */+ −
case LLC_CNS:+ −
text[4] = TXT_CNS;+ −
break;+ −
case LLC_GF:+ −
text[4] = TXT_ActualGradient;+ −
break;+ −
case LLC_ScrubberTime:+ −
text[4] = TXT_ScrubTime;+ −
break;+ −
+ −
#ifdef ENABLE_BOTTLE_SENSOR+ −
case LCC_BottleBar:+ −
text[4] = TXT_AtemGasVorrat;+ −
break;+ −
#endif+ −
+ −
#ifdef ENABLE_PSCR_MODE+ −
case LCC_SimPpo2:+ −
text[4] = TXT_SimPpo2;+ −
break;+ −
#endif+ −
#ifdef ENABLE_CO2_SUPPORT+ −
case LCC_CO2:+ −
text[4] = TXT_CO2Sensor;+ −
break;+ −
#endif+ −
case LLC_Compass:+ −
text[4] = TXT_2BYTE;+ −
text[5] = TXT2BYTE_Compass;+ −
+ −
break;+ −
/* none */+ −
case LLC_Empty:+ −
text[4] = '-';+ −
break;+ −
default:+ −
text[4] = 'X';+ −
break;+ −
}+ −
if (text[4] != TXT_2BYTE) {+ −
text[5] = 0;+ −
} else {+ −
text[6] = 0;+ −
}+ −
+ −
write_label_var( 30, 700, ME_Y_LINE6, &FontT48, text);+ −
+ −
write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);+ −
}+ −
+ −
void refresh_ViewPort(void)+ −
{+ −
char text[32];+ −
uint8_t textIndex = 0;+ −
float distance = 0.0;+ −
SSettings* pSettings = settingsGetPointer();+ −
GFX_DrawCfgScreen* pdrawScreen;+ −
point_t lowerleft = {0,0};+ −
point_t upperright = {799,479};+ −
float localLimit = 0.1;+ −
uint8_t spotSize = (pSettings->viewPortMode >> 5) & 0x03;+ −
+ −
text[0] = '\001';+ −
text[1] = TXT_2BYTE;+ −
text[2] = TXT2BYTE_MotionCtrl;+ −
text[3] = 0;+ −
write_topline(text);+ −
+ −
text[0] = TXT_2BYTE;+ −
text[1] = TXT2BYTE_CalibView;+ −
text[2] = 0;+ −
write_label_var( 30, 700, ME_Y_LINE2, &FontT48, text);+ −
+ −
+ −
textIndex = 0;+ −
text[textIndex++] = TXT_2BYTE;+ −
text[textIndex++] = TXT2BYTE_FocusSpotSize;+ −
text[textIndex++] = 0;+ −
write_label_var( 30, 340, ME_Y_LINE3, &FontT48, text);+ −
+ −
textIndex = 0;+ −
text[textIndex++] = TXT_2BYTE;+ −
switch(spotSize)+ −
{+ −
case 2: text[textIndex++] = TXT2BYTE_Minimum; break;+ −
case 1: text[textIndex++] = TXT2BYTE_Normal; break;+ −
default:+ −
case 0: text[textIndex++] = TXT2BYTE_Maximum; break;+ −
}+ −
text[textIndex++] = 0;+ −
write_label_var( 500, 800, ME_Y_LINE3, &FontT48, text);+ −
+ −
textIndex = 0;+ −
text[textIndex++] = TXT_2BYTE;+ −
text[textIndex++] = TXT2BYTE_IndicateFrame;+ −
text[textIndex++] = 0;+ −
write_label_var( 30, 340, ME_Y_LINE4, &FontT48, text);+ −
textIndex = 0;+ −
text[textIndex++] = '\006' - ((settingsGetPointer()->viewPortMode >> 4) & 1);+ −
text[textIndex++] = 0;+ −
write_label_var( 500, 800, ME_Y_LINE4, &FontT48, text);+ −
textIndex = 0;+ −
text[textIndex++] = TXT_2BYTE;+ −
text[textIndex++] = TXT2BYTE_BoostBacklight;+ −
text[textIndex++] = 0;+ −
write_label_var( 30, 340, ME_Y_LINE5, &FontT48, text);+ −
textIndex = 0;+ −
snprintf(&text[textIndex],32,"%d",(settingsGetPointer()->viewPortMode & 0x3));+ −
write_label_var( 500, 800, ME_Y_LINE5, &FontT48, text);+ −
+ −
write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);+ −
+ −
/* test if we are in focus */+ −
if((pSettings->viewPitch != 0.0) || (pSettings->viewRoll != 0.0) || (pSettings->viewYaw != 0.0))+ −
{+ −
distance = checkViewport(stateUsed->lifeData.compass_roll, stateUsed->lifeData.compass_pitch, stateUsed->lifeData.compass_heading, MOTION_ENABLE_ALL);+ −
+ −
/* show "bar graph" indicating the distance to the center point */+ −
textIndex = 0;+ −
text[textIndex++] = '\001';+ −
+ −
if(fabs(distance) < localLimit)+ −
{+ −
text[textIndex++] = '+';+ −
}+ −
else+ −
{+ −
while (localLimit < 0.6)+ −
{+ −
localLimit += 0.1;+ −
text[textIndex++] = '-';+ −
text[textIndex++] = '-';+ −
if(fabs(distance) < localLimit)+ −
{+ −
break;+ −
}+ −
}+ −
}+ −
text[textIndex] = 0;+ −
write_label_var( 30, 700, ME_Y_LINE1, &FontT48, text);+ −
+ −
/* MotionCtrl */+ −
textIndex = 0;+ −
+ −
text[textIndex++] = TXT_2BYTE;+ −
text[textIndex++] = TXT2BYTE_MotionCtrl;+ −
text[textIndex++] = 0;+ −
write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text);+ −
textIndex = 0;+ −
text[textIndex++] = TXT_2BYTE;+ −
switch(settingsGetPointer()->MotionDetection)+ −
{+ −
case MOTION_DETECT_OFF:+ −
text[textIndex++] = TXT2BYTE_MoCtrlNone;+ −
break;+ −
case MOTION_DETECT_MOVE:+ −
text[textIndex++] = TXT2BYTE_MoCtrlPitch;+ −
break;+ −
case MOTION_DETECT_SECTOR:+ −
text[textIndex++] = TXT2BYTE_MoCtrlSector;+ −
break;+ −
case MOTION_DETECT_SCROLL:+ −
text[textIndex++] = TXT2BYTE_MoCtrlScroll;+ −
break;+ −
default:+ −
textIndex += snprintf(&text[4],4,"%u",settingsGetPointer()->MotionDetection);+ −
break;+ −
}+ −
text[textIndex] = 0;+ −
write_label_var(500, 800, ME_Y_LINE6, &FontT48, text);+ −
+ −
+ −
if(viewInFocus())+ −
{+ −
set_Backlight_Boost(settingsGetPointer()->viewPortMode & 0x03);+ −
if((pSettings->viewPortMode >> 4) & 0x01)+ −
{+ −
pdrawScreen = getMenuEditScreen();+ −
GFX_draw_box(pdrawScreen,lowerleft,upperright,0,CLUT_NiceGreen);+ −
}+ −
}+ −
else+ −
{+ −
set_Backlight_Boost(0);+ −
if((pSettings->viewPortMode >> 4) & 0x01)+ −
{+ −
pdrawScreen = getMenuEditScreen();+ −
GFX_draw_box(pdrawScreen,lowerleft,upperright,0,CLUT_MenuTopBackground);+ −
}+ −
}+ −
resetFocusState(); /* no other instance shall be impacted by the local detection */+ −
}+ −
}+ −
+ −
void openEdit_Custom(uint8_t line)+ −
{+ −
set_globalState_Menu_Line(line);+ −
+ −
switch(line)+ −
{+ −
case 1:+ −
default: openEdit_Customview();+ −
break;+ −
case 2: openEdit_BigScreen();+ −
break;+ −
case 3: openEdit_CustomviewDivemode(cv_changelist);+ −
break;+ −
case 4: openEdit_CustomviewDivemode(cv_changelist_BS);+ −
break;+ −
case 5: openEdit_ViewPort();+ −
break;+ −
}+ −
}+ −
+ −
/* Private functions ---------------------------------------------------------*/+ −
void openEdit_Customview(void)+ −
{+ −
resetMenuEdit(CLUT_MenuPageCustomView);+ −
refresh_Customviews();+ −
+ −
write_field_button(StMCustom1_CViewTimeout, 400, 700, ME_Y_LINE1, &FontT48, "");+ −
write_field_button(StMCustom1_CViewStandard, 400, 700, ME_Y_LINE2, &FontT48, "");+ −
write_field_button(StMCustom1_CViewStandardBF, 400, 700, ME_Y_LINE3, &FontT48, "");+ −
write_field_on_off(StMCustom1_CViewAutoFocusBF, 650, 700, ME_Y_LINE4, &FontT48, "", settingsGetPointer()->cvAutofocus);+ −
write_field_button(StMCustom1_CornerTimeout, 400, 700, ME_Y_LINE5, &FontT48, "");+ −
write_field_button(StMCustom1_CornerStandard, 400, 700, ME_Y_LINE6, &FontT48, "");+ −
+ −
setEvent(StMCustom1_CViewTimeout, (uint32_t)OnAction_CViewTimeout);+ −
setEvent(StMCustom1_CViewStandard, (uint32_t)OnAction_CViewStandard);+ −
setEvent(StMCustom1_CViewStandardBF, (uint32_t)OnAction_CViewStandardBF);+ −
setEvent(StMCustom1_CViewAutoFocusBF, (uint32_t)OnAction_CViewAutofocusBF);+ −
setEvent(StMCustom1_CornerTimeout, (uint32_t)OnAction_CornerTimeout);+ −
setEvent(StMCustom1_CornerStandard, (uint32_t)OnAction_CornerStandard);+ −
}+ −
+ −
void openEdit_BigScreen(void)+ −
{+ −
uint8_t newValue = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
newValue = pSettings->extraDisplay + 1;+ −
+ −
if(newValue >= EXTRADISPLAY_END)+ −
{+ −
newValue = EXTRADISPLAY_none;+ −
}+ −
pSettings->extraDisplay = newValue;+ −
+ −
exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only();+ −
}+ −
+ −
void openEdit_MotionCtrl(void)+ −
{+ −
uint8_t newValue = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
switch(pSettings->MotionDetection)+ −
{+ −
case MOTION_DETECT_OFF:+ −
newValue = MOTION_DETECT_MOVE;+ −
break;+ −
case MOTION_DETECT_MOVE:+ −
newValue = MOTION_DETECT_SECTOR;+ −
break;+ −
case MOTION_DETECT_SECTOR:+ −
newValue = MOTION_DETECT_SCROLL;+ −
break;+ −
case MOTION_DETECT_SCROLL:+ −
newValue = MOTION_DETECT_OFF;+ −
break;+ −
default:+ −
newValue = MOTION_DETECT_OFF;+ −
break;+ −
}+ −
pSettings->MotionDetection = newValue;+ −
InitMotionDetection();+ −
+ −
exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only();+ −
}+ −
+ −
+ −
+ −
void openEdit_ViewPort(void)+ −
{+ −
resetMenuEdit(CLUT_MenuPageCustomView);+ −
refresh_ViewPort();+ −
+ −
write_field_button(StMCustom5_CViewPortCalib, 400, 700, ME_Y_LINE2, &FontT48, "");+ −
write_field_button(StMCustom5_CViewPortSpotSize,400, 700, ME_Y_LINE3, &FontT48, "");+ −
write_field_button(StMCustom5_CViewPortLayout, 400, 700, ME_Y_LINE4, &FontT48, "");+ −
write_field_button(StMCustom5_CViewPortAmbient, 400, 700, ME_Y_LINE5, &FontT48, "");+ −
write_field_button(StMCustom5_CViewPortControl, 400, 700, ME_Y_LINE6, &FontT48, "");+ −
+ −
setEvent(StMCustom5_CViewPortCalib, (uint32_t)OnAction_CViewPortCalib);+ −
setEvent(StMCustom5_CViewPortSpotSize, (uint32_t)OnAction_CViewPortSpot);+ −
setEvent(StMCustom5_CViewPortLayout, (uint32_t)OnAction_CViewPortLayout);+ −
setEvent(StMCustom5_CViewPortAmbient, (uint32_t)OnAction_CViewPortAmbient);+ −
setEvent(StMCustom5_CViewPortControl, (uint32_t)OnAction_CViewPortControl);+ −
}+ −
+ −
+ −
char customview_TXT2BYTE_helper(uint8_t customViewId)+ −
{+ −
char text = 0;+ −
+ −
switch(customViewId)+ −
{+ −
case CVIEW_sensors:+ −
text = TXT2BYTE_O2monitor;+ −
break;+ −
case CVIEW_sensors_mV:+ −
text = TXT2BYTE_O2voltage;+ −
break;+ −
case CVIEW_Compass:+ −
text = TXT2BYTE_Compass;+ −
break;+ −
case CVIEW_Decolist:+ −
text = TXT2BYTE_Decolist;+ −
break;+ −
case CVIEW_Tissues:+ −
text = TXT2BYTE_Tissues;+ −
break;+ −
case CVIEW_Profile:+ −
text = TXT2BYTE_Profile;+ −
break;+ −
case CVIEW_Gaslist:+ −
text = TXT2BYTE_Gaslist;+ −
break;+ −
case CVIEW_EADTime:+ −
text = TXT2BYTE_Info;+ −
break;+ −
case CVIEW_SummaryOfLeftCorner:+ −
text = TXT2BYTE_Summary;+ −
break;+ −
case CVIEW_Timer:+ −
text = TXT2BYTE_Timer;+ −
break;+ −
case CVIEW_Position:+ −
text = TXT2BYTE_Position;+ −
break;+ −
case CVIEW_noneOrDebug:+ −
text = TXT2BYTE_DispNoneDbg;+ −
break;+ −
default:+ −
break;+ −
}+ −
return text;+ −
}+ −
char customviewBF_TXT2BYTE_helper(uint8_t customViewId)+ −
{+ −
char text = 0;+ −
+ −
switch(customViewId)+ −
{+ −
case CVIEW_T3_noneOrDebug:+ −
text = TXT2BYTE_DispNoneDbg;+ −
break;+ −
case CVIEW_T3_sensors:+ −
text = TXT2BYTE_O2monitor;+ −
break;+ −
case CVIEW_T3_Compass:+ −
text = TXT2BYTE_Compass;+ −
break;+ −
case CVIEW_T3_Decostop:+ −
text = TXT2BYTE_Decolist;+ −
break;+ −
#ifdef ENABLE_T3_PROFILE_VIEW+ −
case CVIEW_T3_Profile:+ −
text = TXT2BYTE_Profile;+ −
break;+ −
#endif+ −
case CVIEW_T3_Temperature:+ −
text = TXT2BYTE_AmbientTemperature;+ −
break;+ −
case CVIEW_T3_GasList:+ −
text = TXT2BYTE_Gaslist;+ −
break;+ −
case CVIEW_T3_MaxDepth:+ −
text = TXT2BYTE_MaxDepth;+ −
break;+ −
case CVIEW_T3_StopWatch:+ −
text = TXT2BYTE_Stopwatch;+ −
break;+ −
case CVIEW_T3_TTS:+ −
text = TXT2BYTE_TTS;+ −
break;+ −
case CVIEW_T3_ppO2andGas:+ −
text = TXT2BYTE_ppoNair;+ −
break;+ −
case CVIEW_T3_Navigation:+ −
text = TXT2BYTE_Navigation;+ −
break;+ −
case CVIEW_T3_DepthData:+ −
text = TXT2BYTE_DepthData;+ −
break;+ −
case CVIEW_T3_DecoTTS:+ −
text = TXT2BYTE_DecoTTS;+ −
break;+ −
default:+ −
break;+ −
}+ −
return text;+ −
}+ −
+ −
uint8_t OnAction_CViewTimeout(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t value;+ −
value = settingsGetPointer()->tX_customViewTimeout;+ −
+ −
if(value < 5)+ −
value = 5;+ −
else if(value < 10)+ −
value = 10;+ −
else if(value < 15)+ −
value = 15;+ −
else if(value < 20)+ −
value = 20;+ −
else if(value < 30)+ −
value = 30;+ −
else if(value < 45)+ −
value = 45;+ −
else if(value < 60)+ −
value = 60;+ −
else+ −
value = 0;+ −
+ −
settingsGetPointer()->tX_customViewTimeout = value;+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
+ −
uint8_t OnAction_CViewStandard(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t newValue;+ −
switch(settingsGetPointer()->tX_customViewPrimary)+ −
{+ −
case CVIEW_sensors:+ −
newValue = CVIEW_sensors_mV;+ −
break;+ −
case CVIEW_sensors_mV:+ −
newValue = CVIEW_Compass;+ −
break;+ −
case CVIEW_Compass:+ −
newValue = CVIEW_Decolist;+ −
break;+ −
case CVIEW_Decolist:+ −
newValue = CVIEW_Tissues;+ −
break;+ −
case CVIEW_Tissues:+ −
newValue = CVIEW_Profile;+ −
break;+ −
case CVIEW_Profile:+ −
newValue = CVIEW_Gaslist;+ −
break;+ −
case CVIEW_Gaslist:+ −
newValue = CVIEW_EADTime;+ −
break;+ −
case CVIEW_EADTime:+ −
newValue = CVIEW_SummaryOfLeftCorner;+ −
break;+ −
case CVIEW_SummaryOfLeftCorner:+ −
newValue = CVIEW_Timer;+ −
break;+ −
case CVIEW_Timer:+ −
newValue = CVIEW_noneOrDebug;+ −
break;+ −
case CVIEW_noneOrDebug:+ −
default:+ −
newValue = CVIEW_sensors;+ −
break;+ −
}+ −
settingsGetPointer()->tX_customViewPrimary = newValue;+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
uint8_t OnAction_CViewStandardBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t index = 0;+ −
uint8_t newValue;+ −
+ −
/* list contains all views which may be selected => get index of current setting */+ −
while((settingsGetPointer()->tX_customViewPrimaryBF != cv_changelist_BS[index]) && (cv_changelist_BS[index] != CVIEW_T3_END))+ −
{+ −
index++;+ −
}+ −
if((cv_changelist_BS[index] == CVIEW_T3_END) || (cv_changelist_BS[index+1] == CVIEW_T3_END)) /* invalid or last setting */+ −
{+ −
newValue = cv_changelist_BS[0];+ −
}+ −
else+ −
{+ −
newValue = cv_changelist_BS[index + 1];+ −
}+ −
+ −
settingsGetPointer()->tX_customViewPrimaryBF = newValue;+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
uint8_t OnAction_CViewAutofocusBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
SSettings *pSettings = settingsGetPointer();+ −
if(pSettings->cvAutofocus)+ −
{+ −
pSettings->cvAutofocus = 0;+ −
}+ −
else+ −
{+ −
pSettings->cvAutofocus = 1;+ −
}+ −
tMenuEdit_set_on_off(editId, pSettings->cvAutofocus);+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
uint8_t OnAction_CornerTimeout(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t value;+ −
value = settingsGetPointer()->tX_userselectedLeftLowerCornerTimeout;+ −
+ −
if(value < 5)+ −
value = 5;+ −
else if(value < 10)+ −
value = 10;+ −
else if(value < 15)+ −
value = 15;+ −
else if(value < 20)+ −
value = 20;+ −
else if(value < 30)+ −
value = 30;+ −
else if(value < 45)+ −
value = 45;+ −
else if(value < 60)+ −
value = 60;+ −
else+ −
value = 0;+ −
+ −
settingsGetPointer()->tX_userselectedLeftLowerCornerTimeout = value;+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
+ −
uint8_t OnAction_CornerStandard(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t value;+ −
value = settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary;+ −
+ −
value += 1;+ −
+ −
if(value >= LLC_END)+ −
value = 0;+ −
+ −
settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary = value;+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
+ −
uint8_t OnAction_Customview_Toggle(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
+ −
uint8_t line = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
switch(editId)+ −
{+ −
case StMCustom3_CViewSelection1: line = 1;+ −
break;+ −
case StMCustom3_CViewSelection2: line = 2;+ −
break;+ −
case StMCustom3_CViewSelection3: line = 3;+ −
break;+ −
case StMCustom3_CViewSelection4: line = 4;+ −
break;+ −
case StMCustom3_CViewSelection5: line = 5;+ −
break;+ −
+ −
default:+ −
break;+ −
}+ −
if(pcv_curchangelist == cv_changelist)+ −
{+ −
pSettings->cv_configuration ^= 1 << (pcv_curchangelist[customviewsSubpage * 5 + line-1]);+ −
if(t7_GetEnabled_customviews() == 0)+ −
{+ −
pSettings->cv_configuration ^= (1 << CVIEW_noneOrDebug);+ −
}+ −
}+ −
else+ −
{+ −
pSettings->cv_config_BigScreen ^= 1 << (pcv_curchangelist[customviewsSubpage * 5 + line-1]);+ −
if(t3_GetEnabled_customviews() == 0)+ −
{+ −
pSettings->cv_config_BigScreen ^= (1 << CVIEW_noneOrDebug);+ −
}+ −
}+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
+ −
uint8_t OnAction_Customview_NextPage(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
resetMenuContentStructure();+ −
customviewsSubpage++;+ −
+ −
if(customviewsSubpage == customviewsSubpageMax)+ −
{+ −
customviewsSubpage = 0;+ −
setMenuContentStructure();+ −
tMenuEdit_select(StMCustom3_CViewSelection6);+ −
}+ −
else+ −
{+ −
setMenuContentStructure();+ −
}+ −
+ −
CustomviewDivemode_refresh();+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
uint8_t OnAction_CViewPortCalib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
float heading;+ −
if(settingsGetPointer()->compassInertia)+ −
{+ −
heading = (uint16_t)compass_getCompensated();+ −
}+ −
else+ −
{+ −
heading = (uint16_t)stateUsed->lifeData.compass_heading;+ −
}+ −
calibrateViewport(stateUsed->lifeData.compass_roll,stateUsed->lifeData.compass_pitch,heading);+ −
+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
uint8_t OnAction_CViewPortLayout(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
SSettings* pSettings = settingsGetPointer();+ −
if((pSettings->viewPortMode & 0x10) != 0)+ −
{+ −
pSettings->viewPortMode &= 0xEF; /* 1110 1111 */+ −
}+ −
else+ −
{+ −
pSettings->viewPortMode |= 0x10;+ −
}+ −
+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
uint8_t OnAction_CViewPortAmbient(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
SSettings* pSettings = settingsGetPointer();+ −
if(((pSettings->viewPortMode +1) & 0x03) <= MAX_BACKLIGHT_BOOST)+ −
{+ −
pSettings->viewPortMode++;+ −
}+ −
else+ −
{+ −
pSettings->viewPortMode &= 0xFC;+ −
}+ −
+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
uint8_t OnAction_CViewPortControl(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t newValue = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
switch(pSettings->MotionDetection)+ −
{+ −
case MOTION_DETECT_OFF:+ −
newValue = MOTION_DETECT_MOVE;+ −
break;+ −
case MOTION_DETECT_MOVE:+ −
newValue = MOTION_DETECT_SECTOR;+ −
break;+ −
case MOTION_DETECT_SECTOR:+ −
newValue = MOTION_DETECT_SCROLL;+ −
break;+ −
case MOTION_DETECT_SCROLL:+ −
newValue = MOTION_DETECT_OFF;+ −
break;+ −
default:+ −
newValue = MOTION_DETECT_OFF;+ −
break;+ −
}+ −
pSettings->MotionDetection = newValue;+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
uint8_t OnAction_CViewPortSpot(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t newValue = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
newValue = ((pSettings->viewPortMode >> 5) + 1) & 0x03;+ −
if(newValue > MAX_FOCUS_LIMITER)+ −
{+ −
newValue = 0;+ −
}+ −
pSettings->viewPortMode &= 0x9F; /* 1001 1111 */+ −
pSettings->viewPortMode |= (newValue << 5);+ −
return UPDATE_DIVESETTINGS;+ −
}+ −
+ −
void setMenuContentStructure()+ −
{+ −
char text[MAX_PAGE_TEXTSIZE];+ −
uint8_t textPointer = 0;+ −
uint32_t id;+ −
+ −
uint8_t i;+ −
uint8_t endID = CVIEW_END;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
if(pcv_curchangelist == cv_changelist_BS)+ −
{+ −
endID = CVIEW_T3_END;+ −
}+ −
+ −
for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */+ −
{+ −
textPointer = 0;+ −
id = pcv_curchangelist[customviewsSubpage * 5 + i];+ −
if(id == endID) /* last list item? */+ −
{+ −
break;+ −
}+ −
else+ −
{+ −
if(pcv_curchangelist == cv_changelist)+ −
{+ −
text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_configuration,id);+ −
}+ −
else+ −
{+ −
text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_config_BigScreen,id);+ −
}+ −
text[textPointer++] = ' ';+ −
textPointer += snprintf(&text[textPointer], 60, "%c%c\n\r", TXT_2BYTE, customview_TXT2BYTE_helper(id));+ −
+ −
switch(i)+ −
{+ −
case 0: write_field_button(StMCustom3_CViewSelection1, 30, 800, ME_Y_LINE1, &FontT48, "");+ −
break;+ −
case 1: write_field_button(StMCustom3_CViewSelection2, 30, 800, ME_Y_LINE2, &FontT48, "");+ −
break;+ −
case 2: write_field_button(StMCustom3_CViewSelection3, 30, 800, ME_Y_LINE3, &FontT48, "");+ −
break;+ −
case 3: write_field_button(StMCustom3_CViewSelection4, 30, 800, ME_Y_LINE4, &FontT48, "");+ −
break;+ −
case 4: write_field_button(StMCustom3_CViewSelection5, 30, 800, ME_Y_LINE5, &FontT48, "");+ −
break;+ −
default:+ −
break;+ −
}+ −
}+ −
}+ −
for(;i<5;i++) /* clear empty lines in case menu shows less than 5 entries */+ −
{+ −
switch(i)+ −
{+ −
case 0: write_label_var( 30, 800, ME_Y_LINE1, &FontT48, "");+ −
break;+ −
case 1: write_label_var( 30, 800, ME_Y_LINE2, &FontT48, "");+ −
break;+ −
case 2: write_label_var( 30, 800, ME_Y_LINE3, &FontT48, "");+ −
break;+ −
case 3: write_label_var( 30, 800, ME_Y_LINE4, &FontT48, "");+ −
break;+ −
case 4: write_label_var( 30, 800, ME_Y_LINE5, &FontT48, "");+ −
break;+ −
default:+ −
break;+ −
};+ −
}+ −
+ −
if(customviewsSubpageMax != 1)+ −
{+ −
textPointer = 0;+ −
text[textPointer++] = TXT_2BYTE;+ −
text[textPointer++] = TXT2BYTE_ButtonNext;+ −
text[textPointer] = 0;+ −
write_field_button(StMCustom3_CViewSelection6, 30, 800, ME_Y_LINE6, &FontT48, text);+ −
}+ −
+ −
/* because of the ID handling inside of the functions, all buttons needs to be assigned before the events may be set => have the same loop twice */+ −
for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */+ −
{+ −
id = pcv_curchangelist[customviewsSubpage * 5 + i];+ −
if(id == endID) /* last list item? */+ −
{+ −
break;+ −
}+ −
else+ −
{+ −
switch(i)+ −
{+ −
case 0: setEvent(StMCustom3_CViewSelection1, (uint32_t)OnAction_Customview_Toggle);+ −
break;+ −
case 1: setEvent(StMCustom3_CViewSelection2, (uint32_t)OnAction_Customview_Toggle);+ −
break;+ −
case 2: setEvent(StMCustom3_CViewSelection3, (uint32_t)OnAction_Customview_Toggle);+ −
break;+ −
case 3: setEvent(StMCustom3_CViewSelection4, (uint32_t)OnAction_Customview_Toggle);+ −
break;+ −
case 4: setEvent(StMCustom3_CViewSelection5, (uint32_t)OnAction_Customview_Toggle);+ −
break;+ −
+ −
default:+ −
break;+ −
}+ −
+ −
}+ −
}+ −
if(customviewsSubpageMax != 1)+ −
{+ −
setEvent(StMCustom3_CViewSelection6,(uint32_t)OnAction_Customview_NextPage);+ −
}+ −
}+ −
void openEdit_CustomviewDivemode(const uint8_t* pcv_changelist)+ −
{+ −
resetMenuEdit(CLUT_MenuPageCustomView);+ −
customviewsSubpageMax = (tHome_getNumberOfAvailableCVs(pcv_changelist) / CV_PER_PAGE) + 1;+ −
+ −
if(pcv_curchangelist != pcv_changelist) /* new selection base? => reset page index */+ −
{+ −
customviewsSubpage = 0;+ −
}+ −
pcv_curchangelist = pcv_changelist;+ −
+ −
setMenuContentStructure();+ −
+ −
write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);+ −
}+ −
+ −
void openEdit_CustomviewDivemodeMenu(uint8_t line)+ −
{+ −
static uint8_t customviewsSubpage = 0;+ −
SSettings *pSettings = settingsGetPointer();+ −
+ −
customviewsSubpageMax = (tHome_getNumberOfAvailableCVs(cv_changelist) / CV_PER_PAGE) + 1;+ −
+ −
if((line == 6) || (cv_changelist[customviewsSubpage * 5 + line-1] == CVIEW_END)) /* select next set of views */+ −
{+ −
customviewsSubpage++;+ −
if(customviewsSubpage == customviewsSubpageMax)+ −
{+ −
customviewsSubpage = 0;+ −
}+ −
set_CustomsviewsSubpage(customviewsSubpage);+ −
/* rebuild the selection page with the next set of customer views */+ −
updateSpecificMenu(StMSYS);+ −
openMenu(0);+ −
}+ −
else+ −
{+ −
pSettings->cv_configuration ^= 1 << (cv_changelist[customviewsSubpage * 5 + line-1]);+ −
if(t7_GetEnabled_customviews() == 0)+ −
{+ −
pSettings->cv_configuration ^= (1 << CVIEW_noneOrDebug);+ −
}+ −
InitMotionDetection(); /* consider new view setup for view selection by motion */+ −
exitMenuEdit_to_Menu_with_Menu_Update();+ −
}+ −
}+ −
+ −
uint8_t OnAction_ExtraDisplay (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)+ −
{+ −
uint8_t newValue;+ −
+ −
newValue = settingsGetPointer()->extraDisplay + 1;+ −
+ −
if(newValue >= EXTRADISPLAY_END)+ −
{+ −
newValue = EXTRADISPLAY_none;+ −
}+ −
settingsGetPointer()->extraDisplay = newValue;+ −
return UNSPECIFIC_RETURN;+ −
}+ −
+ −
void CustomviewDivemode_refresh()+ −
{+ −
SSettings *pSettings = settingsGetPointer();+ −
char text[MAX_PAGE_TEXTSIZE];+ −
uint8_t textPointer = 0;+ −
uint32_t id;+ −
+ −
uint8_t i;+ −
uint8_t endID = CVIEW_END;+ −
+ −
if(pcv_curchangelist == cv_changelist_BS)+ −
{+ −
endID = CVIEW_T3_END;+ −
}+ −
+ −
text[textPointer++] = '\001';+ −
text[textPointer++] = TXT_2BYTE;+ −
text[textPointer++] = TXT2BYTE_SelectCustomviews;+ −
text[textPointer++] = ' ';+ −
text[textPointer++] = '1' + customviewsSubpage;+ −
text[textPointer++] = 0;+ −
write_topline(text);+ −
+ −
+ −
for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */+ −
{+ −
textPointer = 0;+ −
id = pcv_curchangelist[customviewsSubpage * 5 + i];+ −
if(id == endID) /* last list item? */+ −
{+ −
break;+ −
}+ −
else+ −
{+ −
if(pcv_curchangelist == cv_changelist)+ −
{+ −
text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_configuration,id);+ −
text[textPointer++] = ' ';+ −
textPointer += snprintf(&text[textPointer], 60, "%c%c\n\r", TXT_2BYTE, customview_TXT2BYTE_helper(id));+ −
}+ −
else+ −
{+ −
text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_config_BigScreen,id);+ −
text[textPointer++] = ' ';+ −
textPointer += snprintf(&text[textPointer], 60, "%c%c\n\r", TXT_2BYTE, customviewBF_TXT2BYTE_helper(id));+ −
}+ −
+ −
switch(i)+ −
{+ −
case 0: write_label_var( 30, 800, ME_Y_LINE1, &FontT48, text);+ −
break;+ −
case 1: write_label_var( 30, 800, ME_Y_LINE2, &FontT48, text);+ −
break;+ −
case 2: write_label_var( 30, 800, ME_Y_LINE3, &FontT48, text);+ −
break;+ −
case 3: write_label_var( 30, 800, ME_Y_LINE4, &FontT48, text);+ −
break;+ −
case 4: write_label_var( 30, 800, ME_Y_LINE5, &FontT48, text);+ −
break;+ −
default:+ −
break;+ −
}+ −
}+ −
}+ −
if(customviewsSubpageMax != 1)+ −
{+ −
textPointer = 0;+ −
text[textPointer++] = TXT_2BYTE;+ −
text[textPointer++] = TXT2BYTE_ButtonNext;+ −
text[textPointer] = 0;+ −
write_label_var( 30, 800, ME_Y_LINE6, &FontT48, text);+ −
}+ −
write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);+ −
}+ −