Mercurial > public > ostc4
diff Discovery/Src/tMenuEditSystem.c @ 981:c6c781a2e85b default
Merge into default
| author | heinrichsweikamp |
|---|---|
| date | Tue, 11 Feb 2025 18:12:00 +0100 |
| parents | 5d5fa0a3b409 |
| children | d9290c76b840 |
line wrap: on
line diff
--- a/Discovery/Src/tMenuEditSystem.c Tue Aug 13 13:24:54 2024 +0200 +++ b/Discovery/Src/tMenuEditSystem.c Tue Feb 11 18:12:00 2025 +0100 @@ -41,6 +41,7 @@ #include "tMenuEditCustom.h" #include "motion.h" #include "t7.h" +#include "math.h" /*#define HAVE_DEBUG_VIEW */ @@ -48,10 +49,12 @@ /* Private function prototypes -----------------------------------------------*/ void openEdit_DateTime(void); +void openEdit_DateFormat(void); void openEdit_Language(void); void openEdit_Design(void); void openEdit_Information(void); void openEdit_Reset(void); +void openEdit_Maintenance(void); //void openEdit_ShowDebugInfo(void); //void openEdit_Salinity(void); @@ -59,10 +62,13 @@ 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_12HR (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_Format (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_UTC (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_SetGnss (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); @@ -78,6 +84,7 @@ 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_Maintenance (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); @@ -87,6 +94,7 @@ 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); +uint8_t OnAction_AdjustSurfacePressure (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); #ifdef ENABLE_ANALYSE_SAMPLES uint8_t OnAction_RecoverSampleIdx(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); #endif @@ -230,18 +238,24 @@ /* Private functions ---------------------------------------------------------*/ -void openEdit_DateTime(void) +void refresh_DateTime() { RTC_DateTypeDef Sdate; RTC_TimeTypeDef Stime; - uint8_t day,month,year,hour,minute, dateFormat, ddmmyy, mmddyy, yymmdd; + uint8_t day,month,year,hour,minute; char text[32]; + char formatStr[20]; SSettings *pSettings; const SFirmwareData *pFirmwareInfo; +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + uint8_t localHours = 0; + uint8_t localMinutes = 0; +#endif pFirmwareInfo = firmwareDataGetPointer(); const SDiveState * pStateReal = stateRealGetPointer(); pSettings = settingsGetPointer(); + translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); year = Sdate.Year; @@ -259,19 +273,7 @@ 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; + getStringOfFormat_DDMMYY(formatStr, 20); text[0] = '\001'; text[1] = TXT_DateAndTime; @@ -282,26 +284,131 @@ write_label_fix( 20, 340, ME_Y_LINE1, &FontT42, TXT_TimeConfig); write_label_fix( 20, 340, ME_Y_LINE2, &FontT42, TXT_Format); write_label_fix( 20, 340, ME_Y_LINE3, &FontT42, TXT_DateConfig); - write_label_var( 600, 800, ME_Y_LINE4, &FontT48, "\016\016DDMMYY\017"); - write_label_fix( 20, 790, ME_Y_LINE5, &FontT42, TXT_Format); -// write_label_fix( 350 ,580, 250, &FontT42, TXT_Daylightsaving); + write_label_fix( 20, 790, ME_Y_LINE4, &FontT42, TXT_Format); +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + write_label_var( 20, 340, ME_Y_LINE5, &FontT42, "GNSS"); + snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_TIMEZONE); + write_label_var( 20, 340, ME_Y_LINE6, &FontT42, text); +#endif + + + tMenuEdit_newInput(StMSYS1_Time, hour, minute, 0, 0); + tMenuEdit_set_on_off(StMSYS1_12HR, pSettings->amPMTime); + + switch(pSettings->date_format) + { + default: + case DDMMYY: tMenuEdit_newInput(StMSYS1_Date, day, month, year, 0); + break; + case MMDDYY: tMenuEdit_newInput(StMSYS1_Date, month, day, year, 0); + break; + case YYMMDD: tMenuEdit_newInput(StMSYS1_Date, year, month, day, 0); + break; + } + tMenuEdit_newButtonText(StMSYS1_FORMAT, formatStr); + +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + if(pStateReal->lifeData.gnssData.alive & GNSS_ALIVE_STATE_TIME) + { + convertUTCToLocal(pStateReal->lifeData.gnssData.DateTime.hour, pStateReal->lifeData.gnssData.DateTime.min, &localHours, &localMinutes); + convertStringOfDate_DDMMYY(formatStr, 20, pStateReal->lifeData.gnssData.DateTime.day + , pStateReal->lifeData.gnssData.DateTime.month + , pStateReal->lifeData.gnssData.DateTime.year); + snprintf(text, 32, "%02d:%02d - %s", localHours, localMinutes, formatStr); + tMenuEdit_newButtonText(StMSYS1_GNSSDT, text); + } + else + { + snprintf(text, 32, "--:--"); + write_label_var( 320, 790, ME_Y_LINE5, &FontT42, text); + } + tMenuEdit_newInput(StMSYS1_ZONE, pSettings->timeZone.hours, pSettings->timeZone.minutes, 0, 0); +#endif + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} +void openEdit_DateTime(void) +{ + RTC_DateTypeDef Sdate; + RTC_TimeTypeDef Stime; + uint8_t day,month,year,hour,minute; + char text[32]; + char formatStr[20]; + SSettings *pSettings; + const SFirmwareData *pFirmwareInfo; + + pFirmwareInfo = firmwareDataGetPointer(); + const SDiveState * pStateReal = stateRealGetPointer(); + + pSettings = settingsGetPointer(); + + set_globalState(StMSYS1_DateTime); + resetMenuEdit(CLUT_MenuPageSystem); + + 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 < pFirmwareInfo->release_year) + year = pFirmwareInfo->release_year; + + if(month < 1) + month = 1; + + if(day < 1) + day = 1; + + getStringOfFormat_DDMMYY(formatStr, 20); + + 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_Format); + write_label_fix( 20, 340, ME_Y_LINE3, &FontT42, TXT_DateConfig); + write_label_fix( 20, 790, ME_Y_LINE4, &FontT42, TXT_Format); +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + write_label_var( 20, 340, ME_Y_LINE5, &FontT42, "GNSS"); + snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_TIMEZONE); + write_label_var( 20, 340, ME_Y_LINE6, &FontT42, text); +#endif write_field_2digit(StMSYS1_Time, 320, 780, ME_Y_LINE1, &FontT48, "##:##", (uint32_t)hour, (uint32_t)minute, 0, 0); - write_field_on_off(StMSYS1_12HR, 320, 790, ME_Y_LINE2, &FontT48, "12 HR", pSettings->amPMTime); - write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "##-##-20##", (uint32_t)day, (uint32_t)month, (uint32_t)year, 0); - write_field_on_off(StMSYS1_DDMMYY, 320, 790, ME_Y_LINE4, &FontT48, "DDMMYY", ddmmyy); - write_field_on_off(StMSYS1_MMDDYY, 320, 790, ME_Y_LINE5, &FontT48, "MMDDYY", mmddyy); - write_field_on_off(StMSYS1_YYMMDD, 320, 790, ME_Y_LINE6, &FontT48, "YYMMDD", yymmdd); -// write_field_on_off(StMSYS1_DST, 350, 580, 310, &FontT48, "Active", daylightsaving); + write_field_on_off(StMSYS1_12HR, 320, 790, ME_Y_LINE2, &FontT48, "12 HR", pSettings->amPMTime); + + switch(pSettings->date_format) + { + default: + case DDMMYY: write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "##-##-20##", (uint32_t)day, (uint32_t)month, (uint32_t)year, 0); + break; + case MMDDYY: write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "##-##-20##", (uint32_t)month, (uint32_t)day, (uint32_t)year, 0); + break; + case YYMMDD: write_field_2digit(StMSYS1_Date, 320, 780, ME_Y_LINE3, &FontT48, "20##-##-##", (uint32_t)year, (uint32_t)month, (uint32_t)day, 0); + break; + } + + write_field_button(StMSYS1_FORMAT, 320, 790, ME_Y_LINE4, &FontT48, formatStr); + +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + snprintf(text, 32, "--:--"); + write_field_button(StMSYS1_GNSSDT, 320, 790, ME_Y_LINE5, &FontT48, text); + write_field_sdigit(StMSYS1_ZONE, 320, 780, ME_Y_LINE6, &FontT48, "UTC: ###:###", pSettings->timeZone.hours, pSettings->timeZone.minutes,0,0); +#endif setEvent(StMSYS1_Date, (uint32_t)OnAction_Date); setEvent(StMSYS1_Time, (uint32_t)OnAction_Time); setEvent(StMSYS1_12HR, (uint32_t)OnAction_12HR); - 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); - + setEvent(StMSYS1_FORMAT, (uint32_t)OnAction_Format); +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + setEvent(StMSYS1_GNSSDT, (uint32_t)OnAction_SetGnss); + setEvent(StMSYS1_ZONE, (uint32_t)OnAction_UTC); +#endif write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); } @@ -315,13 +422,41 @@ const SFirmwareData *pFirmwareInfo; pFirmwareInfo = firmwareDataGetPointer(); + uint8_t mapDMY[3]; + switch(settingsGetPointer()->date_format) + { + default: + case DDMMYY: mapDMY[0] = 0; + mapDMY[1] = 1; + mapDMY[2] = 2; + break; + case MMDDYY: mapDMY[0] = 1; + mapDMY[1] = 0; + mapDMY[2] = 2; + break; + case YYMMDD: mapDMY[0] = 2; + mapDMY[1] = 1; + mapDMY[2] = 0; + break; + } + if(action == ACTION_BUTTON_ENTER) { return digitContent; } if(action == ACTION_BUTTON_ENTER_FINAL) { - evaluateNewString(editId, &newDay, &newMonth, &newYear, 0); + switch(settingsGetPointer()->date_format) + { + default: + case DDMMYY: evaluateNewString(editId, &newDay, &newMonth, &newYear, 0); + break; + case MMDDYY: evaluateNewString(editId, &newMonth, &newDay, &newYear, 0); + break; + case YYMMDD: evaluateNewString(editId, &newYear, &newMonth, &newDay, 0); + break; + } + if(newDay == 0) newDay = 1; if(newDay > 31) @@ -346,29 +481,52 @@ setDate(sdatestructure); - tMenuEdit_newInput(editId, newDay, newMonth, newYear, 0); + switch(settingsGetPointer()->date_format) + { + default: + case DDMMYY: tMenuEdit_newInput(editId, newDay, newMonth, newYear, 0); + break; + case MMDDYY: tMenuEdit_newInput(editId, newMonth, newDay, newYear, 0); + break; + case YYMMDD: tMenuEdit_newInput(editId, newYear, newMonth, newDay, 0); + break; + } + return UNSPECIFIC_RETURN; } if(action == ACTION_BUTTON_NEXT) /* clip values to a specific range e.g. 12 months */ { digitContentNew = digitContent + 1; - if((blockNumber == 0) && (digitContentNew > '0' + 31)) + + if((blockNumber == mapDMY[0]) && (digitContentNew > '0' + 31)) + { digitContentNew = '1'; - if((blockNumber == 1) && (digitContentNew > '0' + 12)) + } + if((blockNumber == mapDMY[1]) && (digitContentNew > '0' + 12)) + { digitContentNew = '1'; - if((blockNumber == 2) && (digitContentNew > '0' + pFirmwareInfo->release_year + 10)) + } + if((blockNumber == mapDMY[2]) && (digitContentNew > '0' + pFirmwareInfo->release_year + 10)) + { digitContentNew = '0' + pFirmwareInfo->release_year; + } return digitContentNew; } if(action == ACTION_BUTTON_BACK) /* clip values to a specific range e.g. 12 months */ { digitContentNew = digitContent - 1; - if((blockNumber == 0) && (digitContentNew < '1')) + if((blockNumber == mapDMY[0]) && (digitContentNew < '1')) + { digitContentNew = '0' + 31; - if((blockNumber == 1) && (digitContentNew < '1')) + } + if((blockNumber == mapDMY[1]) && (digitContentNew < '1')) + { digitContentNew = '0' + 12; - if((blockNumber == 2) && (digitContentNew < '0' + pFirmwareInfo->release_year)) + } + if((blockNumber == mapDMY[2]) && (digitContentNew < '0' + pFirmwareInfo->release_year)) + { digitContentNew = '0' + pFirmwareInfo->release_year + 10; + } return digitContentNew; } /* @@ -487,6 +645,85 @@ return UNSPECIFIC_RETURN; } +uint8_t OnAction_SetGnss(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + RTC_DateTypeDef sdatestructure; + RTC_TimeTypeDef stimestructure; + uint8_t localHours = 0; + uint8_t localMinutes = 0; + + const SDiveState * pStateReal = stateRealGetPointer(); + + if(pStateReal->lifeData.gnssData.alive & GNSS_ALIVE_STATE_TIME) + { + convertUTCToLocal(pStateReal->lifeData.gnssData.DateTime.hour, pStateReal->lifeData.gnssData.DateTime.min, &localHours, &localMinutes); + stimestructure.Hours = localHours; + stimestructure.Minutes = localMinutes; + stimestructure.Seconds = 0; + setTime(stimestructure); + + sdatestructure.Date = pStateReal->lifeData.gnssData.DateTime.day; + sdatestructure.Month = pStateReal->lifeData.gnssData.DateTime.month; + sdatestructure.Year = pStateReal->lifeData.gnssData.DateTime.year; + setWeekday(&sdatestructure); + setDate(sdatestructure); + } + return UNSPECIFIC_RETURN; +} + +void openEdit_DateFormat(void) +{ + char text[32]; + SSettings *pSettings; + + uint8_t ddmmyy = 0; + uint8_t mmddyy= 0; + uint8_t yymmdd = 0; + + pSettings = settingsGetPointer(); + + + set_globalState(StMSYS1_FORMAT); + resetMenuEdit(CLUT_MenuPageSystem); + setBackMenu((uint32_t)openEdit_DateTime,0,4); + + switch(pSettings->date_format) + { + default: + case DDMMYY: ddmmyy = 1; + break; + case MMDDYY: mmddyy = 1; + break; + case YYMMDD: yymmdd = 1; + break; + }; + + text[0] = '\001'; + text[1] = TXT_Format; + text[2] = 0; + + write_topline(text); + + write_label_fix( 20, 790, ME_Y_LINE2, &FontT42, TXT_Format); + + write_field_on_off(StMSYS1_DDMMYY, 320, 790, ME_Y_LINE1, &FontT48, "DDMMYY", ddmmyy); + write_field_on_off(StMSYS1_MMDDYY, 320, 790, ME_Y_LINE2, &FontT48, "MMDDYY", mmddyy); + write_field_on_off(StMSYS1_YYMMDD, 320, 790, ME_Y_LINE3, &FontT48, "YYMMDD", yymmdd); + + setEvent(StMSYS1_DDMMYY, (uint32_t)OnAction_DDMMYY); + setEvent(StMSYS1_MMDDYY, (uint32_t)OnAction_MMDDYY); + setEvent(StMSYS1_YYMMDD, (uint32_t)OnAction_YYMMDD); + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + +uint8_t OnAction_Format(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + openEdit_DateFormat(); + + return UNSPECIFIC_RETURN; +} + uint8_t OnAction_DDMMYY(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) { SSettings *pSettings; @@ -531,6 +768,81 @@ return UNSPECIFIC_RETURN; } +uint8_t OnAction_UTC(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *settings = settingsGetPointer(); + const SDiveState * pStateReal = stateRealGetPointer(); + int32_t utcHour; + uint32_t utcMinutes; + uint8_t digitContentNew; + uint8_t localHours = 0; + uint8_t localMinutes = 0; + char text[32]; + char timeStr[20]; + + switch (action) { + case ACTION_BUTTON_ENTER: + + return digitContent; + case ACTION_BUTTON_ENTER_FINAL: + { + + evaluateNewString(editId, (uint32_t *)&utcHour, &utcMinutes, NULL, NULL); + + if (utcHour > 14) { + utcHour = 14; + } else if (utcHour < -12) { + utcHour = -12; + } + + if (utcMinutes % 15 != 0) + { + utcMinutes = (utcMinutes / 15) * 15; + } + if(utcMinutes > 45) + { + utcMinutes = 45; + } else if (utcMinutes < 0) { + utcMinutes = 0; + } + settings->timeZone.hours = utcHour; + settings->timeZone.minutes = utcMinutes; + + tMenuEdit_newInput(editId, ((input_u)utcHour).uint32, utcMinutes, 0, 0); + convertUTCToLocal(pStateReal->lifeData.gnssData.DateTime.hour, pStateReal->lifeData.gnssData.DateTime.min, &localHours, &localMinutes); + convertStringOfDate_DDMMYY(timeStr, 20, pStateReal->lifeData.gnssData.DateTime.day + , pStateReal->lifeData.gnssData.DateTime.month + , pStateReal->lifeData.gnssData.DateTime.year); + snprintf(text, 32, "%2d:%2d - %s", localHours, localMinutes, timeStr); + tMenuEdit_newButtonText(StMSYS1_GNSSDT, text); + } + + break; + case ACTION_BUTTON_NEXT: + if ((blockNumber == 0) && (digitNumber == 0)) { + digitContentNew = togglePlusMinus(digitContent); + } else { + digitContentNew = digitContent + 1; + if (digitContentNew > '9') { + digitContentNew = '0'; + } + } + + return digitContentNew; + case ACTION_BUTTON_BACK: + if ((blockNumber == 0) && (digitNumber == 0)) { + digitContentNew = togglePlusMinus(digitContent); + } else { + digitContentNew = digitContent - 1; + if (digitContentNew < '0') { + digitContentNew = '9'; + } + } + return digitContentNew; + } + return UNSPECIFIC_RETURN; +} + uint8_t OnAction_DST(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) { @@ -734,7 +1046,7 @@ 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_content( 30, 700, ME_Y_LINE4 + 42, &FontT144, "24.7", CLUT_Font027); write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); } @@ -835,6 +1147,7 @@ write_field_button(StMSYS4_Info, 30, 800, ME_Y_LINE6, &FontT48, text); setEvent(StMSYS4_Info, (uint32_t)OnAction_Information); + tMenuEdit_select(StMSYS4_Info); } @@ -1075,7 +1388,7 @@ setEvent(StMSYS5_ResetAll, (uint32_t)OnAction_Confirm); setEvent(StMSYS5_ResetDeco, (uint32_t)OnAction_Confirm); setEvent(StMSYS5_Reboot, (uint32_t)OnAction_Confirm); - setEvent(StMSYS5_Maintenance, (uint32_t)OnAction_Confirm); + setEvent(StMSYS5_Maintenance, (uint32_t)OnAction_Maintenance); #ifndef RESETLOGBLOCK setEvent(StMSYS5_ResetLogbook, (uint32_t)OnAction_Confirm); #else @@ -1150,64 +1463,92 @@ setEvent(StMSYS5_Exit, (uint32_t)OnAction_Exit); setEvent(editIdOfCaller, (uint32_t)OnAction_ResetLogbook); break; + } - case StMSYS5_Maintenance: - case StMSYS5_SetBattCharge: - case StMSYS5_SetSampleIndx: + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} + +void openEdit_Maintenance(void) +{ + char text[32]; + unsigned char index = 0; + SSettings *pSettings = settingsGetPointer(); + SSensorDataDiveO2* pDiveO2Data = NULL; + + resetMenuEdit(CLUT_MenuPageSystem); + + text[0] = '\001'; + text[1] = TXT_2BYTE; + text[2] = TXT2BYTE_Maintenance; + text[3] = 0; + write_topline(text); + + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_SetFactoryDefaults; + text[2] = 0; + write_field_button(StMSYS5_SetFactoryBC, 30, 800, ME_Y_LINE1, &FontT48, text); + + + if(stateRealGetPointer()->lifeData.battery_charge <= 0) + { text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_SetFactoryDefaults; + text[1] = TXT2BYTE_SetBatteryCharge; text[2] = 0; - write_field_button(StMSYS5_SetFactoryBC, 30, 800, ME_Y_LINE2, &FontT48, text); + snprintf(&text[2],10,": %u%%",pSettings->lastKnownBatteryPercentage); + write_field_button(StMSYS5_SetBattCharge, 30, 800, ME_Y_LINE2, &FontT48, text); + } + + if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL)) + { + for (index = 0; index < 3; index++) + { + if(pSettings->ext_sensor_map[index] == SENSOR_DIGO2M) + { + pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[index]; + if(pDiveO2Data->pressure != 0) + { + snprintf(text,32,"%c%c (%1.3lf => %1.3f)\016\016Bar",TXT_2BYTE,TXT2BYTE_AdjustAmbPressure,(float)(pDiveO2Data->pressure/1000000.0), + stateRealGetPointer()->lifeData.pressure_surface_bar); + + write_field_button(StMSYS5_AdjustSurfPres, 30, 800, ME_Y_LINE4, &FontT48, text); + } + break; + } + } + } #ifdef ENABLE_ANALYSE_SAMPLES - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_SetSampleIndex; - text[2] = 0; - write_field_button(StMSYS5_SetSampleIndx, 30, 800, ME_Y_LINE3, &FontT48, text); + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_SetSampleIndex; + text[2] = 0; + write_field_button(StMSYS5_SetSampleIndx, 30, 800, ME_Y_LINE4, &FontT48, text); +#endif + + setEvent(StMSYS5_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults); + if(stateRealGetPointer()->lifeData.battery_charge <= 0) + { + setEvent(StMSYS5_SetBattCharge, (uint32_t)OnAction_SetBatteryCharge); + } + if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL)) + { + if(pDiveO2Data != NULL) + { + setEvent(StMSYS5_AdjustSurfPres, (uint32_t)OnAction_AdjustSurfacePressure); + } + } +#ifdef ENABLE_ANALYSE_SAMPLES + setEvent(StMSYS5_SetSampleIndx, (uint32_t)OnAction_RecoverSampleIdx); #endif - if(stateRealGetPointer()->lifeData.battery_charge <= 0) - { - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_SetBatteryCharge; - text[2] = 0; - snprintf(&text[2],10,": %u%%",settingsGetPointer()->lastKnownBatteryPercentage); -#ifdef ENABLE_ANALYSE_SAMPLES - write_field_button(StMSYS5_SetBattCharge, 30, 800, ME_Y_LINE4, &FontT48, text); -#else - write_field_button(StMSYS5_SetBattCharge, 30, 800, ME_Y_LINE3, &FontT48, text); -#endif + 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_LINE5, &FontT42, text); - setEvent(StMSYS5_Exit, (uint32_t)OnAction_Exit); - setEvent(StMSYS5_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults); -#ifdef ENABLE_ANALYSE_SAMPLES - setEvent(StMSYS5_SetSampleIndx, (uint32_t)OnAction_RecoverSampleIdx); -#endif - setEvent(StMSYS5_SetBattCharge, (uint32_t)OnAction_SetBatteryCharge); - } - else - { - setEvent(StMSYS5_Exit, (uint32_t)OnAction_Exit); - setEvent(StMSYS5_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults); -#ifdef ENABLE_ANALYSE_SAMPLES - setEvent(StMSYS5_SetSampleIndx, (uint32_t)OnAction_RecoverSampleIdx); -#endif - } -// write_field_button(StMSYS5_ScreenTest, 30, 800, ME_Y_LINE3, &FontT48, "Screen Test"); -// setEvent(StMSYS5_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_LINE5, &FontT42, text); - - snprintf(&text[0],30,"Code: %X",getLicence()); - write_label_var( 30, 800, ME_Y_LINE6, &FontT42, text); - break; - - } + snprintf(&text[0],30,"Code: %X",getLicence()); + write_label_var( 30, 800, ME_Y_LINE6, &FontT42, text); write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); } @@ -1263,6 +1604,12 @@ return UNSPECIFIC_RETURN; } +uint8_t OnAction_Maintenance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + openEdit_Maintenance(); + 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(); @@ -1335,6 +1682,54 @@ return EXIT_TO_MENU; } +uint8_t OnAction_AdjustSurfacePressure (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSensorDataDiveO2* pDiveO2Data; + const SDiveState* pDiveState = stateRealGetPointer(); + SSettings* pSettings = settingsGetPointer(); + uint8_t index = 0; + float orgpressure_surface_mbar; + float DiveO2_mbar; + int8_t newOffset_mbar = 0; + + + char text[32]; + + + + for (index = 0; index < 3; index++) + { + if(settingsGetPointer()->ext_sensor_map[index] == SENSOR_DIGO2M) + { + pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[index]; + DiveO2_mbar = (pDiveO2Data->pressure/1000.0); + + orgpressure_surface_mbar = (pDiveState->lifeData.pressure_surface_bar * 1000) - (settingsGetPointer()->offsetPressure_mbar); + newOffset_mbar = DiveO2_mbar - orgpressure_surface_mbar; + + if(fabs(orgpressure_surface_mbar + ((float)newOffset_mbar) - DiveO2_mbar) > 0.5) /* there might be a rounding difference => compensate */ + { + if((orgpressure_surface_mbar + ((float)newOffset_mbar)) - (pDiveO2Data->pressure/1000.0) > 0.0) + { + newOffset_mbar -=1; + } + else + { + newOffset_mbar +=1; + } + } + + pSettings->offsetPressure_mbar = newOffset_mbar; + snprintf(text,32,"%c%c (%1.3lf => %1.3f)\016\016Bar",TXT_2BYTE,TXT2BYTE_AdjustAmbPressure,(float)(pDiveO2Data->pressure/1000000.0), (orgpressure_surface_mbar + pSettings->offsetPressure_mbar) / 1000.0); + tMenuEdit_newButtonText(StMSYS5_AdjustSurfPres,text); + break; + } + } + + return UNSPECIFIC_RETURN; +} + + #ifdef SCREENTEST uint8_t OnAction_ScreenTest (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) {
