Mercurial > public > ostc4
diff Discovery/Src/tMenuEditSystem.c @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children | a7683f9765da |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Discovery/Src/tMenuEditSystem.c Sat Apr 28 11:52:34 2018 +0200 @@ -0,0 +1,1572 @@ +/////////////////////////////////////////////////////////////////////////////// +/// -*- coding: UTF-8 -*- +/// +/// \file Discovery/Src/tMenuEditSystem.c +/// \brief Main Template file for Menu Edit System settings +/// \author heinrichs weikamp gmbh +/// \date 05-Aug-2014 +/// +/// \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 "tMenuEditSystem.h" + +#include "data_exchange_main.h" // for DataEX_scooterDataFound() +#include "externLogbookFlash.h" +#include "gfx_fonts.h" +#include "ostc.h" +#include "settings.h" // for getLicence() +#include "tHome.h" // for enum CUSTOMVIEWS and init_t7_compass() +#include "tMenuEdit.h" + +/* Private variables ---------------------------------------------------------*/ + +uint8_t infoPage = 0; + +/* Private function prototypes -----------------------------------------------*/ +void openEdit_DateTime(void); +void openEdit_Language(void); +void openEdit_Design(void); +void openEdit_Customview(void); +void openEdit_Information(void); +void openEdit_Reset(void); +void openEdit_CustomviewDivemode(uint8_t line); +//void openEdit_ShowDebugInfo(void); +//void openEdit_Salinity(void); + +/* Announced function prototypes -----------------------------------------------*/ +uint8_t OnAction_Date (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Time (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_DDMMYY (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_MMDDYY (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_YYMMDD (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_DST (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_English (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_German (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_French (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Italian (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Espanol (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +//uint8_t OnAction_Design_t7 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +//uint8_t OnAction_Design_t7ft (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +//uint8_t OnAction_Design_t3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); + +uint8_t OnAction_Units (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Colorscheme (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_DebugInfo (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); + +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_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_ExtraDisplay (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); + +uint8_t OnAction_Exit (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Confirm (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_RebootRTE (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_ResetDeco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_ResetAll (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_ResetLogbook (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_RebootMainCPU (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Nothing (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_LogbookOffset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_SetFactoryDefaults(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_SetBatteryCharge(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +#ifdef SCREENTEST +uint8_t OnAction_ScreenTest (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +#endif +uint8_t OnAction_Information (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +/* +uint8_t OnAction_Salinity (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_TestCLog (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +*/ + +/* Exported functions --------------------------------------------------------*/ + +void openEdit_System(uint8_t line) +{ + set_globalState_Menu_Line(line); + resetMenuEdit(CLUT_MenuPageSystem); + + if(actual_menu_content == MENU_SURFACE) + { + switch(line) + { + case 1: + default: + openEdit_DateTime(); + break; + case 2: + openEdit_Language(); + break; + case 3: + openEdit_Design(); + break; + case 4: + openEdit_Customview(); + break; + case 5: + openEdit_Information(); + break; + case 6: + openEdit_Reset(); + break; +/* + case 3: + openEdit_DecoFutureTTS(); + break; + case 4: + openEdit_DecoLastStop(); + break; +*/ + } + } + else + { + openEdit_CustomviewDivemode(line); + } + +} + +/* Private functions ---------------------------------------------------------*/ + +void openEdit_CustomviewDivemode(uint8_t line) +{ + cv_configuration ^= 1 << (cv_changelist[line-1]); + exitMenuEdit_to_Menu_with_Menu_Update(); +} + + +void openEdit_DateTime(void) +{ + RTC_DateTypeDef Sdate; + RTC_TimeTypeDef Stime; + uint8_t day,month,year,hour,minute, dateFormat, ddmmyy, mmddyy, yymmdd; + char text[32]; + SSettings *pSettings; + const SDiveState * pStateReal = stateRealGetPointer(); + + pSettings = settingsGetPointer(); + translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); + translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); + year = Sdate.Year; + month = Sdate.Month; + day = Sdate.Date; + hour = Stime.Hours; + minute= Stime.Minutes; + + if(year < 16) + year = 16; + + if(month < 1) + month = 1; + + if(day < 1) + day = 1; + +// daylightsaving = Stime.DayLightSaving; + dateFormat = pSettings->date_format; + ddmmyy = 0; + mmddyy = 0; + yymmdd = 0; + + if(dateFormat == DDMMYY) + ddmmyy = 1; + else + if(dateFormat == MMDDYY) + mmddyy = 1; + else + yymmdd = 1; + + text[0] = '\001'; + text[1] = TXT_DateAndTime; + text[2] = 0; + + write_topline(text); + + write_label_fix( 20, 340, ME_Y_LINE1, &FontT42, TXT_TimeConfig); + write_label_fix( 20, 340, ME_Y_LINE2, &FontT42, TXT_DateConfig); + write_label_var( 600, 800, ME_Y_LINE2, &FontT48, "\016\016DDMMYY\017"); + write_label_fix( 20, 790, ME_Y_LINE3, &FontT42, TXT_Format); +// write_label_fix( 350 ,580, 250, &FontT42, TXT_Daylightsaving); + + write_field_2digit(StMSYS1_Time, 320, 780, ME_Y_LINE1, &FontT48, "##:##", (uint32_t)hour, (uint32_t)minute, 0, 0); + write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE2, &FontT48, "##-##-20##", (uint32_t)day, (uint32_t)month, (uint32_t)year, 0); + write_field_on_off(StMSYS1_DDMMYY, 320, 790, ME_Y_LINE3, &FontT48, "DDMMYY", ddmmyy); + write_field_on_off(StMSYS1_MMDDYY, 320, 790, ME_Y_LINE4, &FontT48, "MMDDYY", mmddyy); + write_field_on_off(StMSYS1_YYMMDD, 320, 790, ME_Y_LINE5, &FontT48, "YYMMDD", yymmdd); +// write_field_on_off(StMSYS1_DST, 350, 580, 310, &FontT48, "Active", daylightsaving); + + setEvent(StMSYS1_Date, (uint32_t)OnAction_Date); + setEvent(StMSYS1_Time, (uint32_t)OnAction_Time); + setEvent(StMSYS1_DDMMYY, (uint32_t)OnAction_DDMMYY); + setEvent(StMSYS1_MMDDYY, (uint32_t)OnAction_MMDDYY); + setEvent(StMSYS1_YYMMDD, (uint32_t)OnAction_YYMMDD); +// setEvent(StMSYS1_DST, (uint32_t)OnAction_DST); + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + + +uint8_t OnAction_Date(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + uint8_t digitContentNew; + uint32_t newDay, newMonth, newYear; + RTC_DateTypeDef sdatestructure; + + + if(action == ACTION_BUTTON_ENTER) + { + return digitContent; + } + if(action == ACTION_BUTTON_ENTER_FINAL) + { + evaluateNewString(editId, &newDay, &newMonth, &newYear, 0); + if(newDay == 0) + newDay = 1; + if(newDay > 31) + newDay = 31; + if(newMonth == 0) + newMonth = 1; + if(newMonth > 12) + newMonth = 12; + if((newMonth == 2) && (newDay > 29)) + newDay = 29; + if((newDay > 30) && ((newMonth == 4) ||(newMonth == 6) ||(newMonth == 9) ||(newMonth == 11))) + newDay = 30; + if(newYear < 17) + newYear = 17; + if(newYear > 99) + newYear = 99; + + sdatestructure.Date = newDay; + sdatestructure.Month = newMonth; + sdatestructure.Year = newYear; + setWeekday(&sdatestructure); + + setDate(sdatestructure); + + tMenuEdit_newInput(editId, newDay, newMonth, newYear, 0); + return UNSPECIFIC_RETURN; + } + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if((blockNumber == 0) && (digitContentNew > '0' + 31)) + digitContentNew = '1'; + if((blockNumber == 1) && (digitContentNew > '0' + 12)) + digitContentNew = '1'; + // year range 2017-2018 + if((blockNumber == 2) && (digitContentNew > '0' + 18)) + digitContentNew = '0' + 17; + return digitContentNew; + } + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if((blockNumber == 0) && (digitContentNew < '1')) + digitContentNew = '0' + 31; + if((blockNumber == 1) && (digitContentNew < '1')) + digitContentNew = '0' + 12; + // year range 2016-2018 + if((blockNumber == 2) && (digitContentNew < '0' + 17)) + digitContentNew = '0' + 18; + return digitContentNew; + } +/* + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if((blockNumber == 2) && (digitNumber == 0) && (digitContentNew > '2')) + digitContentNew = '1'; + if((blockNumber == 0) && (digitNumber == 0) && (digitContentNew > '3')) + digitContentNew = '0'; + if((blockNumber == 1) && (digitNumber == 0) && (digitContentNew > '1')) + digitContentNew = '0'; + if(digitContentNew > '9') + digitContentNew = '0'; + return digitContentNew; + } + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if((blockNumber == 2) && (digitNumber == 0) && (digitContentNew < '1')) + digitContentNew = '2'; + if((blockNumber == 0) && (digitNumber == 0) && (digitContentNew < '0')) + digitContentNew = '3'; + if((blockNumber == 1) && (digitNumber == 0) && (digitContentNew < '0')) + digitContentNew = '1'; + if(digitContentNew < '0') + digitContentNew = '9'; + return digitContentNew; + } +*/ + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_Time(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + uint8_t digitContentNew; + uint32_t newHour, newMinute; + RTC_TimeTypeDef stimestructure; + + if(action == ACTION_BUTTON_ENTER) + { + return digitContent; + } + if(action == ACTION_BUTTON_ENTER_FINAL) + { + evaluateNewString(editId, &newHour, &newMinute, 0, 0); + if(newHour > 23) + newHour = 23; + if(newMinute > 59) + newMinute = 59; + + stimestructure.Hours = newHour; + stimestructure.Minutes = newMinute; + stimestructure.Seconds = 0; + + setTime(stimestructure); + + tMenuEdit_newInput(editId, newHour, newMinute, 0, 0); + return UNSPECIFIC_RETURN; + } + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if((blockNumber == 0) && (digitContentNew > '0' + 23)) + digitContentNew = '0'; + if((blockNumber == 1) && (digitContentNew > '0' + 59)) + digitContentNew = '0'; + return digitContentNew; + } + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if((blockNumber == 0) && (digitContentNew < '0')) + digitContentNew = '0' + 23; + if((blockNumber == 1) && (digitContentNew < '0')) + digitContentNew = '0' + 59; + return digitContentNew; + } +/* + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if((blockNumber == 0) && (digitNumber == 0) && (digitContentNew > '2')) + digitContentNew = '0'; + if((blockNumber == 1) && (digitNumber == 0) && (digitContentNew > '5')) + digitContentNew = '0'; + if(digitContentNew > '9') + digitContentNew = '0'; + return digitContentNew; + } + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if((blockNumber == 0) && (digitNumber == 0) && (digitContentNew < '0')) + digitContentNew = '2'; + if((blockNumber == 1) && (digitNumber == 0) && (digitContentNew < '0')) + digitContentNew = '5'; + if(digitContentNew < '0') + digitContentNew = '9'; + return digitContentNew; + } +*/ + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_DDMMYY(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings; + + pSettings = settingsGetPointer(); + pSettings->date_format = DDMMYY; + + tMenuEdit_set_on_off(editId, 1); + tMenuEdit_set_on_off(StMSYS1_MMDDYY, 0); + tMenuEdit_set_on_off(StMSYS1_YYMMDD, 0); + + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_MMDDYY(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings; + + pSettings = settingsGetPointer(); + pSettings->date_format = MMDDYY; + + tMenuEdit_set_on_off(editId, 1); + tMenuEdit_set_on_off(StMSYS1_DDMMYY, 0); + tMenuEdit_set_on_off(StMSYS1_YYMMDD, 0); + + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_YYMMDD(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings; + + pSettings = settingsGetPointer(); + pSettings->date_format = YYMMDD; + + tMenuEdit_set_on_off(editId, 1); + tMenuEdit_set_on_off(StMSYS1_MMDDYY, 0); + tMenuEdit_set_on_off(StMSYS1_DDMMYY, 0); + + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_DST(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + RTC_TimeTypeDef stimestructure; + uint8_t newDST; + + get_RTC_DateTime(0, &stimestructure); + newDST = stimestructure.DayLightSaving; + if(newDST) + newDST = 0; + else + newDST = 1; + stimestructure.DayLightSaving = newDST; + set_RTC_DateTime(0, &stimestructure); + + tMenuEdit_set_on_off(editId, newDST); + + return UNSPECIFIC_RETURN; +} + + +void openEdit_Language(void) +{ + char text[32]; + uint8_t actualLanguage, active; + SSettings *pSettings; + + pSettings = settingsGetPointer(); + actualLanguage = pSettings->selected_language; + + text[0] = '\001'; + text[1] = TXT_Language; + text[2] = 0; + write_topline(text); + + text[0] = TXT_LanguageName; + text[1] = 0; + + pSettings->selected_language = LANGUAGE_English; + if( actualLanguage == pSettings->selected_language) + active = 1; + else + active = 0; + write_field_on_off(StMSYS2_English, 30, 500, ME_Y_LINE1, &FontT48, text, active); + + pSettings->selected_language = LANGUAGE_German; + if( actualLanguage == pSettings->selected_language) + active = 1; + else + active = 0; + write_field_on_off(StMSYS2_German, 30, 800, ME_Y_LINE2, &FontT48, text, active); + + pSettings->selected_language = LANGUAGE_French; + if( actualLanguage == pSettings->selected_language) + active = 1; + else + active = 0; + write_field_on_off(StMSYS2_French, 30, 800, ME_Y_LINE3, &FontT48, text, active); +/* + + pSettings->selected_language = LANGUAGE_Italian; + if( actualLanguage == pSettings->selected_language) + active = 1; + else + active = 0; + write_field_on_off(StMSYS2_Italian, 30, 800, ME_Y_LINE4, &FontT48, text, active); + + pSettings->selected_language = LANGUAGE_Espanol; + if( actualLanguage == pSettings->selected_language) + active = 1; + else + active = 0; + write_field_on_off(StMSYS2_Espanol, 30, 800, ME_Y_LINE5, &FontT48, text, active); +*/ + pSettings->selected_language = actualLanguage; + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); + + setEvent(StMSYS2_English, (uint32_t)OnAction_English); + setEvent(StMSYS2_German, (uint32_t)OnAction_German); + setEvent(StMSYS2_French, (uint32_t)OnAction_French); + //setEvent(StMSYS2_Italian, (uint32_t)OnAction_Italian); + //setEvent(StMSYS2_Espanol, (uint32_t)OnAction_Espanol); +} + + +uint8_t OnAction_English (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + pSettings->selected_language = LANGUAGE_English; + return EXIT_TO_MENU_WITH_LOGO; +} + + +uint8_t OnAction_German (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + pSettings->selected_language = LANGUAGE_German; + return EXIT_TO_MENU_WITH_LOGO; +} + + +uint8_t OnAction_French (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + pSettings->selected_language = LANGUAGE_French; + return EXIT_TO_MENU_WITH_LOGO; +} + + +uint8_t OnAction_Italian (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + pSettings->selected_language = LANGUAGE_Italian; + return EXIT_TO_MENU_WITH_LOGO; +} + + +uint8_t OnAction_Espanol (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + pSettings->selected_language = LANGUAGE_Espanol; + return EXIT_TO_MENU_WITH_LOGO; +} + + +void openEdit_Design(void) +{ + refresh_Design(); + + write_field_button(StMSYS3_Units, 400, 700, ME_Y_LINE1, &FontT48, ""); + write_field_button(StMSYS3_Colors, 400, 700, ME_Y_LINE2, &FontT48, ""); +// write_field_button(StMSYS3_Debug, 400, 700, ME_Y_LINE3, &FontT48, ""); + setEvent(StMSYS3_Units, (uint32_t)OnAction_Units); + setEvent(StMSYS3_Colors, (uint32_t)OnAction_Colorscheme); +// setEvent(StMSYS3_Debug, (uint32_t)OnAction_DebugInfo); +} + + +void refresh_Design(void) +{ + char text[32]; + + // header + text[0] = '\001'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_Layout; + text[3] = 0; + write_topline(text); + + // units + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_Units; + text[2] = 0; + write_label_var( 30, 200, ME_Y_LINE1, &FontT48, text); + + if(settingsGetPointer()->nonMetricalSystem) + { + text[1] = TXT2BYTE_Units_feet; + } + else + { + text[1] = TXT2BYTE_Units_metric; + } + write_label_var( 400, 700, ME_Y_LINE1, &FontT48, text); + + // colorscheme + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_Farbschema; + text[2] = 0; + write_label_var( 30, 200, ME_Y_LINE2, &FontT48, text); + + text[0] = '0' + settingsGetPointer()->tX_colorscheme; + text[1] = 0; + write_label_var( 400, 700, ME_Y_LINE2, &FontT48, text); + +/* + // specials + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_ShowDebug; + text[2] = 0; + write_label_var( 30, 700, ME_Y_LINE3, &FontT48, text); + + if(settingsGetPointer()->showDebugInfo) + text[0] = '\005'; + else + text[0] = '\006'; + text[1] = 0; + write_label_var( 400, 700, ME_Y_LINE3, &FontT48, text); +*/ + + // design + text[0] = TXT_Depth; + text[1] = 0; + write_content( 30, 700, ME_Y_LINE4, &FontT24, text, CLUT_Font031); + write_content( 30, 700, ME_Y_LINE4 + 30 + 70, &FontT48, "___________", CLUT_DIVE_FieldSeperatorLines); + write_content(280, 700, ME_Y_LINE4 + 30 + 70 - 3, &FontT48, "|", CLUT_DIVE_pluginbox); + write_content(290, 700, ME_Y_LINE4 + 30 + 70 - 37, &FontT48, "_______________", CLUT_DIVE_pluginbox); + write_content( 30, 700, ME_Y_LINE4 + 30, &FontT144, "24.7", CLUT_Font027); + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + + +uint8_t OnAction_Units(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + settingsGetPointer()->nonMetricalSystem = !(settingsGetPointer()->nonMetricalSystem); + return EXIT_TO_MENU_WITH_LOGO;//UPDATE_DIVESETTINGS; +} + + +uint8_t OnAction_Colorscheme(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + uint8_t newColorscheme; + + newColorscheme = settingsGetPointer()->tX_colorscheme + 1; + + if(newColorscheme > 3) + newColorscheme = 0; + + settingsGetPointer()->tX_colorscheme = newColorscheme; + GFX_use_colorscheme(newColorscheme); + tHome_init_compass(); + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_DebugInfo(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + settingsGetPointer()->showDebugInfo = !(settingsGetPointer()->showDebugInfo); + return UPDATE_DIVESETTINGS; +} + + + + +/* +uint8_t OnAction_Design_t7ft (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + if((pSettings->design == 7) && pSettings->nonMetricalSystem) + return EXIT_TO_MENU; + pSettings->design = 7; + pSettings->nonMetricalSystem = 1; + tMenuEdit_set_on_off(StMSYS3_t7, 0); + tMenuEdit_set_on_off(StMSYS3_t7ft, 1); + tMenuEdit_set_on_off(StMSYS3_t3, 0); + return UPDATE_DIVESETTINGS; +} + + +uint8_t OnAction_Design_t7 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + if((pSettings->design == 7) && (pSettings->nonMetricalSystem == 0)) + return EXIT_TO_MENU; + pSettings->design = 7; + pSettings->nonMetricalSystem = 0; + tMenuEdit_set_on_off(StMSYS3_t7, 1); + tMenuEdit_set_on_off(StMSYS3_t7ft, 0); + tMenuEdit_set_on_off(StMSYS3_t3, 0); + return UPDATE_DIVESETTINGS; +} + + +uint8_t OnAction_Design_t3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + if(pSettings->design == 3) + return EXIT_TO_MENU; + pSettings->design = 3; + pSettings->nonMetricalSystem = 0; + tMenuEdit_set_on_off(StMSYS3_t7, 0); + tMenuEdit_set_on_off(StMSYS3_t7ft,0); + tMenuEdit_set_on_off(StMSYS3_t3, 1); + return UPDATE_DIVESETTINGS; +} +*/ + + +void openEdit_Customview(void) +{ + refresh_Customviews(); + + write_field_button(StMSYS4_CViewTimeout, 400, 700, ME_Y_LINE1, &FontT48, ""); + write_field_button(StMSYS4_CViewStandard, 400, 700, ME_Y_LINE2, &FontT48, ""); + + write_field_button(StMSYS4_CornerTimeout, 400, 700, ME_Y_LINE3, &FontT48, ""); + write_field_button(StMSYS4_CornerStandard, 400, 700, ME_Y_LINE4, &FontT48, ""); + + write_field_button(StMSYS4_ExtraDisplay, 400, 700, ME_Y_LINE5, &FontT48, ""); + + setEvent(StMSYS4_CViewTimeout, (uint32_t)OnAction_CViewTimeout); + setEvent(StMSYS4_CViewStandard, (uint32_t)OnAction_CViewStandard); + + setEvent(StMSYS4_CornerTimeout, (uint32_t)OnAction_CornerTimeout); + setEvent(StMSYS4_CornerStandard, (uint32_t)OnAction_CornerStandard); + + setEvent(StMSYS4_ExtraDisplay, (uint32_t)OnAction_ExtraDisplay); +} + + +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] = ' '; + switch(settingsGetPointer()->tX_customViewPrimary) + { + case CVIEW_Scooter: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_ScooterMonitor; + break; + case CVIEW_sensors: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_O2monitor; + break; + case CVIEW_sensors_mV: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_O2voltage; + break; + case CVIEW_Compass: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Compass; + break; + case CVIEW_Decolist: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Decolist; + break; + case CVIEW_Tissues: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Tissues; + break; + case CVIEW_Profile: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Profile; + break; + case CVIEW_Gaslist: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Gaslist; + break; + case CVIEW_EADTime: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Info; + break; + case CVIEW_SummaryOfLeftCorner: + text[4] = TXT_2BYTE; + text[5] = TXT2BYTE_Summary; + break; + case CVIEW_noneOrDebug: + text[4] = ' '; + text[5] = '-'; + break; + default: + snprintf(&text[4],3,"%02u",settingsGetPointer()->tX_customViewPrimary); + break; + } + text[6] = 0; + write_label_var( 30, 700, ME_Y_LINE2, &FontT48, text); + + + // 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_LINE3, &FontT48, text); + + // field corner primary + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_CornerStandard; + text[2] = ' '; + text[3] = ' '; + switch(settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary) + { + /* Temperature */ + case 1: + text[4] = TXT_Temperature; + break; + /* Average Depth */ + case 2: + text[4] = TXT_AvgDepth; + break; + /* ppO2 */ + case 3: + text[4] = TXT_ppO2; + break; + /* Stop Uhr */ + case 4: + text[4] = TXT_Stopwatch; + break; + /* Ceiling */ + case 5: + text[4] = TXT_Ceiling; + break; + /* Future TTS */ + case 6: + text[4] = TXT_FutureTTS; + break; + /* CNS */ + case 7: + text[4] = TXT_CNS; + break; + /* none */ + case 0: + text[4] = '-'; + break; + default: + snprintf(&text[4],2,"%u",settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary); + break; + } + text[5] = 0; + write_label_var( 30, 700, ME_Y_LINE4, &FontT48, text); + + + // extra display + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_ExtraDisplay; + text[2] = ' '; + text[3] = ' '; + text[4] = TXT_2BYTE; + switch(settingsGetPointer()->extraDisplay) + { + /* BigFont */ + case EXTRADISPLAY_BIGFONT: + text[5] = TXT2BYTE_ExtraBigFont; + break; + /* DecoGame */ + case EXTRADISPLAY_DECOGAME: + text[5] = TXT2BYTE_ExtraDecoGame; + break; + /* none */ + case EXTRADISPLAY_none: + text[5] = TXT2BYTE_ExtraNone; + break; + default: + snprintf(&text[4],2,"%u",settingsGetPointer()->extraDisplay); + break; + } + text[6] = 0; + write_label_var( 30, 700, ME_Y_LINE5, &FontT48, text); + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + + +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_Scooter: + newValue = CVIEW_sensors; + break; + 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_noneOrDebug; + break; + case CVIEW_noneOrDebug: + default: + if(getLicence() == LICENCEBONEX) + newValue = CVIEW_Scooter; + else + newValue = CVIEW_sensors; + break; + } + settingsGetPointer()->tX_customViewPrimary = newValue; + 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 > 7) + value = 0; + + settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary = value; + return UPDATE_DIVESETTINGS; +} + + +uint8_t OnAction_ExtraDisplay (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + uint8_t newValue; + switch(settingsGetPointer()->extraDisplay) + { + case EXTRADISPLAY_BIGFONT: + newValue = EXTRADISPLAY_none; + break; + case EXTRADISPLAY_DECOGAME: + newValue = EXTRADISPLAY_BIGFONT; + break; + case EXTRADISPLAY_none: + newValue = EXTRADISPLAY_BIGFONT; + break; + default: + newValue = EXTRADISPLAY_BIGFONT; + break; + } + settingsGetPointer()->extraDisplay = newValue; + return UNSPECIFIC_RETURN; +} + + +void openEdit_Information(void) +{ + char text[70]; + + infoPage = 0; + + text[0] = '\001'; + text[1] = TXT_Information; + text[2] = 0; + write_topline(text); + + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_ButtonNext; + text[2] = 0; + + write_field_button(StMSYS5_Info, 30, 800, ME_Y_LINE6, &FontT48, text); + + setEvent(StMSYS5_Info, (uint32_t)OnAction_Information); +} + + +uint8_t OnAction_Information (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + resetEnterPressedToStateBeforeButtonAction(); + + infoPage++; + if(infoPage > 3) + return EXIT_TO_MENU; + else + return UNSPECIFIC_RETURN; +} + + +void refresh_InformationPage(void) +{ + char text_header[5]; + char text_button[5]; + char text_content[256]; + uint8_t date[3], year,month,day; + + RTC_DateTypeDef Sdate, Sdate2; + float temperature1, temperature2, voltage, offsetTemperature; + + //RTC_TimeTypeDef Stime; + + /* + SDeviceLine batteryChargeCycles; + SDeviceLine batteryChargeCompleteCycles; + SDeviceLine temperatureMinimum; + SDeviceLine temperatureMaximum; + SDeviceLine depthMaximum; + SDeviceLine diveCycles; + SDeviceLine voltageMinimum; + */ + + switch(infoPage) + { + case 0: + text_header[0] = '\001'; + text_header[1] = TXT_Information; + text_header[2] = 0; + + write_label_var( 20, 800, ME_Y_LINE1, &FontT42, "Dive Computer OSTC4"); + write_label_var( 20, 800, ME_Y_LINE2, &FontT42, "Design heinrichs/weikamp"); + + Sdate.Year = firmwareDataGetPointer()->release_year; + Sdate.Month = firmwareDataGetPointer()->release_month; + Sdate.Date = firmwareDataGetPointer()->release_day; + + if(settingsGetPointer()->date_format == DDMMYY) + { + day = 0; + month = 1; + year = 2; + } + else + if(settingsGetPointer()->date_format == MMDDYY) + { + day = 1; + month = 0; + year = 2; + } + else + { + day = 2; + month = 1; + year = 0; + } + date[day] = Sdate.Date; + date[month] = Sdate.Month; + date[year] = Sdate.Year; + snprintf(text_content,40,"Firmware release date: %02d.%02d.%02d",date[0],date[1],date[2]); + write_label_var( 20, 800, ME_Y_LINE3, &FontT42, text_content); + //write_label_var( 20, 800, ME_Y_LINE3, &FontT42, "Available now: Boot 2016. Get Yours!"); + write_label_var( 20, 800, ME_Y_LINE4, &FontT42, "for more information"); + write_label_var( 20, 800, ME_Y_LINE5, &FontT42, "info@heinrihweikamp.com"); + + text_button[0] = TXT_2BYTE; + text_button[1] = TXT2BYTE_ButtonNext; + text_button[2] = 0; + break; + + case 1: + text_header[0] = '\001'; + text_header[1] = TXT_2BYTE; + text_header[2] = TXT2BYTE_Usage_Battery; + text_header[3] = 0; + + text_content[0] = TXT_2BYTE; + text_content[1] = TXT2BYTE_ChargeCycles; + text_content[2] = 0; + write_label_var( 20, 800, ME_Y_LINE1, &FontT42, text_content); + snprintf(text_content,80,"%i (%i)",stateDeviceGetPointer()->batteryChargeCycles.value_int32,stateDeviceGetPointer()->batteryChargeCompleteCycles.value_int32); + write_label_var( 20, 800, ME_Y_LINE2, &FontT42, text_content); + + translateDate(stateDeviceGetPointer()->batteryChargeCycles.date_rtc_dr, &Sdate); + translateDate(stateDeviceGetPointer()->batteryChargeCompleteCycles.date_rtc_dr, &Sdate2); + snprintf(text_content,80,"%u.%u.20%02u (%u.%u.20%02u)",Sdate.Date,Sdate.Month,Sdate.Year, Sdate2.Date,Sdate2.Month,Sdate2.Year); + write_label_var( 20, 800, ME_Y_LINE3, &FontT42, text_content); + + text_content[0] = TXT_2BYTE; + text_content[1] = TXT2BYTE_LowestVoltage; + text_content[2] = 0; + write_label_var( 20, 800, ME_Y_LINE4, &FontT42, text_content); + + voltage = ((float)stateDeviceGetPointer()->voltageMinimum.value_int32) / 1000; + snprintf(text_content,80,"%0.3fV (%u.%u.20%02u)",voltage, Sdate.Date,Sdate.Month,Sdate.Year); + write_label_var( 20, 800, ME_Y_LINE5, &FontT42, text_content); + + text_button[0] = TXT_2BYTE; + text_button[1] = TXT2BYTE_ButtonNext; + text_button[2] = 0; + break; + + case 2: + text_header[0] = '\001'; + text_header[1] = TXT_2BYTE; + text_header[2] = TXT2BYTE_Usage_Dives; + text_header[3] = 0; + + text_content[0] = TXT_2BYTE; + text_content[1] = TXT2BYTE_NumberOfDives; + text_content[2] = 0; + write_label_var( 20, 800, ME_Y_LINE1, &FontT42, text_content); + + snprintf(text_content,80,"%i (%i)",stateDeviceGetPointer()->diveCycles.value_int32,(stateDeviceGetPointer()->depthMaximum.value_int32 - 1000) / 100); + write_label_var( 20, 800, ME_Y_LINE2, &FontT42, text_content); + + translateDate(stateDeviceGetPointer()->diveCycles.date_rtc_dr, &Sdate); + translateDate(stateDeviceGetPointer()->depthMaximum.date_rtc_dr, &Sdate2); + snprintf(text_content,80,"%u.%u.20%02u (%u.%u.20%02u)",Sdate.Date,Sdate.Month,Sdate.Year, Sdate2.Date,Sdate2.Month,Sdate2.Year); + write_label_var( 20, 800, ME_Y_LINE3, &FontT42, text_content); + + text_content[0] = TXT_2BYTE; + text_content[1] = TXT2BYTE_HoursOfOperation; + text_content[2] = 0; + write_label_var( 20, 800, ME_Y_LINE4, &FontT42, text_content); + + snprintf(text_content,80,"%i",(stateDeviceGetPointer()->hoursOfOperation.value_int32)/3600); + write_label_var( 20, 800, ME_Y_LINE5, &FontT42, text_content); + + text_button[0] = TXT_2BYTE; + text_button[1] = TXT2BYTE_ButtonNext; + text_button[2] = 0; + break; + + case 3: + text_header[0] = '\001'; + text_header[1] = TXT_2BYTE; + text_header[2] = TXT2BYTE_Usage_Environment; + text_header[3] = 0; + + text_content[0] = TXT_2BYTE; + text_content[1] = TXT2BYTE_AmbientTemperature; + text_content[2] = 0; + write_label_var( 20, 800, ME_Y_LINE1, &FontT42, text_content); + + temperature1 = ((float)stateDeviceGetPointer()->temperatureMinimum.value_int32) / 100; + temperature2 = ((float)stateDeviceGetPointer()->temperatureMaximum.value_int32) / 100; + snprintf(text_content,80,"%0.2f\140C / %0.2f\140C",temperature1,temperature2); + write_label_var( 20, 800, ME_Y_LINE2, &FontT42, text_content); + + translateDate(stateDeviceGetPointer()->temperatureMinimum.date_rtc_dr, &Sdate); + translateDate(stateDeviceGetPointer()->temperatureMaximum.date_rtc_dr, &Sdate2); + snprintf(text_content,80,"(%u.%u.20%02u / %u.%u.20%02u)",Sdate.Date,Sdate.Month,Sdate.Year, Sdate2.Date,Sdate2.Month,Sdate2.Year); + write_label_var( 20, 800, ME_Y_LINE3, &FontT42, text_content); + + text_content[0] = TXT_2BYTE; + text_content[1] = TXT2BYTE_Korrekturwerte; + text_content[2] = 0; + write_label_var( 20, 800, ME_Y_LINE4, &FontT42, text_content); + + offsetTemperature = ((float)settingsGetPointer()->offsetTemperature_centigrad) / 10; + snprintf(text_content,80,"%i mbar / %0.2f\140C",settingsGetPointer()->offsetPressure_mbar, offsetTemperature); + write_label_var( 20, 800, ME_Y_LINE5, &FontT42, text_content); + + text_button[0] = TXT_2BYTE; + text_button[1] = TXT2BYTE_Exit; + text_button[2] = 0; + break; + } + + write_topline(text_header); + tMenuEdit_newButtonText(StMSYS5_Info, text_button); + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonNext,0); +} + + +void openEdit_Reset(void) +{ + char text[32]; + + text[0] = '\001'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_ResetMenu; + text[3] = 0; + write_topline(text); + + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_LogbookOffset; + text[7] = 0; + + write_label_var( 30, 400, ME_Y_LINE1, &FontT48, text); + + write_field_udigit(StMSYS6_LogbookOffset,420, 800, ME_Y_LINE1, &FontT48, "####", settingsGetPointer()->logbookOffset,0,0,0); + + text[0] = TXT_2BYTE; + text[2] = 0; + + text[1] = TXT2BYTE_ResetAll; + write_field_button(StMSYS6_ResetAll, 30, 800, ME_Y_LINE2, &FontT48, text); + + text[1] = TXT2BYTE_ResetDeco; + write_field_button(StMSYS6_ResetDeco, 30, 800, ME_Y_LINE3, &FontT48, text); + + text[1] = TXT2BYTE_Reboot; + write_field_button(StMSYS6_Reboot, 30, 800, ME_Y_LINE4, &FontT48, text); + + text[1] = TXT2BYTE_Maintenance; + write_field_button(StMSYS6_Maintenance, 30, 800, ME_Y_LINE5, &FontT48, text); + +#ifndef RESETLOGBLOCK + text[1] = TXT2BYTE_ResetLogbook; + write_field_button(StMSYS6_ResetLogbook,30, 800, ME_Y_LINE6, &FontT48, text); +#else + text[0] = '\021'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_ResetLogbook; + text[3] = 0; + write_field_button(StMSYS6_ResetLogbook,30, 800, ME_Y_LINE6, &FontT48, text); + text[0] = TXT_2BYTE; + text[2] = 0; +#endif + + setEvent(StMSYS6_LogbookOffset, (uint32_t)OnAction_LogbookOffset); + setEvent(StMSYS6_ResetAll, (uint32_t)OnAction_Confirm); + setEvent(StMSYS6_ResetDeco, (uint32_t)OnAction_Confirm); + setEvent(StMSYS6_Reboot, (uint32_t)OnAction_Confirm); + setEvent(StMSYS6_Maintenance, (uint32_t)OnAction_Confirm); +#ifndef RESETLOGBLOCK + setEvent(StMSYS6_ResetLogbook, (uint32_t)OnAction_Confirm); +#else + setEvent(StMSYS6_ResetLogbook, (uint32_t)OnAction_Nothing); +#endif + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + + +void openEdit_ResetConfirmation(uint32_t editIdOfCaller) +{ + char text[32]; + + resetMenuEdit(CLUT_MenuPageSystem); + + text[0] = '\001'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_AreYouSure; + text[3] = 0; + write_topline(text); + + text[0] = TXT_2BYTE; + text[2] = 0; + text[1] = TXT2BYTE_Abort; + + write_field_button(StMSYS6_Exit, 30, 800, ME_Y_LINE1, &FontT48, text); + + text[2] = 0; + text[3] = 0; + switch(editIdOfCaller) + { + case StMSYS6_Reboot: + case StMSYS6_RebootRTE: + case StMSYS6_RebootMainCPU: + text[1] = TXT2BYTE_RebootMainCPU; + write_field_button(StMSYS6_RebootMainCPU, 30, 800, ME_Y_LINE2, &FontT48, text); + text[1] = TXT2BYTE_RebootRTE; + write_field_button(StMSYS6_RebootRTE, 30, 800, ME_Y_LINE3, &FontT48, text); + setEvent(StMSYS6_Exit, (uint32_t)OnAction_Exit); + setEvent(StMSYS6_RebootMainCPU, (uint32_t)OnAction_RebootMainCPU); + setEvent(StMSYS6_RebootRTE, (uint32_t)OnAction_RebootRTE); + text[0] = '\025'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_DecoDataLost; + text[3] = 0; + write_label_var( 30, 800, ME_Y_LINE4, &FontT48, text); + break; + + case StMSYS6_ResetDeco: + text[1] = TXT2BYTE_ResetDeco; + write_field_button(editIdOfCaller, 30, 800, ME_Y_LINE2, &FontT48, text); + setEvent(StMSYS6_Exit, (uint32_t)OnAction_Exit); + setEvent(editIdOfCaller, (uint32_t)OnAction_ResetDeco); + text[0] = '\025'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_DecoDataLost; + text[3] = 0; + write_label_var( 30, 800, ME_Y_LINE4, &FontT48, text); + break; + + case StMSYS6_ResetAll: + text[1] = TXT2BYTE_ResetAll; + write_field_button(editIdOfCaller, 30, 800, ME_Y_LINE2, &FontT48, text); + setEvent(StMSYS6_Exit, (uint32_t)OnAction_Exit); + setEvent(editIdOfCaller, (uint32_t)OnAction_ResetAll); + break; + + case StMSYS6_ResetLogbook: + text[1] = TXT2BYTE_ResetLogbook; + write_field_button(editIdOfCaller, 30, 800, ME_Y_LINE2, &FontT48, text); + setEvent(StMSYS6_Exit, (uint32_t)OnAction_Exit); + setEvent(editIdOfCaller, (uint32_t)OnAction_ResetLogbook); + break; + + case StMSYS6_Maintenance: + case StMSYS6_SetBattCharge: + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_SetFactoryDefaults; + text[2] = 0; + write_field_button(StMSYS6_SetFactoryBC, 30, 800, ME_Y_LINE2, &FontT48, text); + + if(stateRealGetPointer()->lifeData.battery_charge == 0) + { + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_SetBatteryCharge; + text[2] = 0; + snprintf(&text[2],10,": %u%%",settingsGetPointer()->lastKnownBatteryPercentage); + write_field_button(StMSYS6_SetBattCharge, 30, 800, ME_Y_LINE3, &FontT48, text); + + setEvent(StMSYS6_Exit, (uint32_t)OnAction_Exit); + setEvent(StMSYS6_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults); + setEvent(StMSYS6_SetBattCharge, (uint32_t)OnAction_SetBatteryCharge); + } + else + { + setEvent(StMSYS6_Exit, (uint32_t)OnAction_Exit); + setEvent(StMSYS6_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults); + } +// write_field_button(StMSYS6_ScreenTest, 30, 800, ME_Y_LINE3, &FontT48, "Screen Test"); +// setEvent(StMSYS6_ScreenTest, (uint32_t)OnAction_ScreenTest); + + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_WarnBatteryLow; + text[2] = 0; + snprintf(&text[2],10,": %01.2fV",stateRealGetPointer()->lifeData.battery_voltage); + write_label_var( 30, 800, ME_Y_LINE4, &FontT42, text); + + + if(DataEX_scooterDataFound()) + { + snprintf(&text[0],30,"Ext: %01.1fV @ %01.1f \140C",stateUsed->lifeData.scooterSpannung, stateUsed->lifeData.scooterTemperature / 10.0f); + write_label_var( 30, 800, ME_Y_LINE5, &FontT42, text); + } + + snprintf(&text[0],30,"Code: %X",getLicence()); + write_label_var( 30, 800, ME_Y_LINE6, &FontT42, text); + break; + + } + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + +uint8_t OnAction_LogbookOffset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + uint8_t digitContentNew; + uint32_t newOffset; + + if(action == ACTION_BUTTON_ENTER) + return digitContent; + + if(action == ACTION_BUTTON_ENTER_FINAL) + { + evaluateNewString(editId, &newOffset, 0, 0, 0); + if(newOffset > 9000) + newOffset = 0; + tMenuEdit_newInput(editId, newOffset, 0, 0, 0); + settingsGetPointer()->logbookOffset = (uint16_t)newOffset; + return UPDATE_DIVESETTINGS; + } + + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if(digitContentNew > '9') + digitContentNew = '0'; + return digitContentNew; + } + + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if(digitContentNew < '0') + digitContentNew = '9'; + return digitContentNew; + } + return UNSPECIFIC_RETURN; +} + +uint8_t OnAction_Nothing (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + return UNSPECIFIC_RETURN; +} + +uint8_t OnAction_Exit (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + return EXIT_TO_MENU; +} +uint8_t OnAction_Confirm (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + openEdit_ResetConfirmation(editId); + return UNSPECIFIC_RETURN; +} + +uint8_t OnAction_RebootRTE (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + MX_SmallCPU_Reset_To_Standard(); + return EXIT_TO_MENU; +} + +uint8_t OnAction_ResetDeco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + clearDeco(); + return EXIT_TO_MENU; +} + +uint8_t OnAction_ResetAll (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + set_settings_to_Standard(); + check_and_correct_settings(); + + return UPDATE_AND_EXIT_TO_HOME; +} + +uint8_t OnAction_ResetLogbook (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + write_label_var( 430, 740, 350, &FontT42, "Wait"); + ext_flash_erase_logbook(); + + SSettings * pSettings = settingsGetPointer(); + pSettings->lastDiveLogId = 255; + pSettings->logFlashNextSampleStartAddress = 0; + + return EXIT_TO_MENU; +} + +uint8_t OnAction_RebootMainCPU (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + settingsGetPointer()->showDebugInfo = 0; + extern uint8_t bootToBootloader; + bootToBootloader = 1; + return UNSPECIFIC_RETURN; +} + + +uint8_t OnAction_SetFactoryDefaults(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + settingsWriteFactoryDefaults(settingsGetPointer()->ButtonResponsiveness[3], settingsGetPointer()->buttonBalance); + return EXIT_TO_MENU; +} + + +uint8_t OnAction_SetBatteryCharge(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + setBatteryPercentage(settingsGetPointer()->lastKnownBatteryPercentage); +// setBatteryPercentage(100); + return EXIT_TO_MENU; +} + +#ifdef SCREENTEST +uint8_t OnAction_ScreenTest (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + static uint8_t FrameCount = 1; // 0 is invisible frame + char text[5]; + GFX_DrawCfgScreen tTestScreen; + tTestScreen.FBStartAdress = 0; + tTestScreen.ImageHeight = 480; + tTestScreen.ImageWidth = 800; + tTestScreen.LayerIndex = 1; + + set_globalState(StMSYS6_ScreenTest); + tTestScreen.FBStartAdress = getFrameByNumber(FrameCount); + if(tTestScreen.FBStartAdress == 0) + { + extern uint8_t bootToBootloader; + bootToBootloader = 1; + } + GFX_fill_buffer(tTestScreen.FBStartAdress, 0xFF, FrameCount); + snprintf(text,5,"%u",FrameCount); + Gfx_write_label_var(&tTestScreen, 10,100,10,&FontT48,CLUT_Font027,text); + GFX_SetFramesTopBottom(tTestScreen.FBStartAdress, NULL,480); + FrameCount++; +} +#endif +/* +uint8_t OnAction_TestCLog (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + write_label_var( 430, 740, 350, &FontT42, "Wait"); + + test_log_only(20, 5); + test_log_only(30, 10); + ext_flash_write_settings(); + return EXIT_TO_MENU; +} +*/ +