view Discovery/Src/tMenuEditDecoParameter.c @ 220:e524a824d8f2 Improve_IPC_Sync

Added schedule point for functions executed once in a second SPI communication takes place every 100ms triggered by the master (main). Synchronisation is done using the SPI RX complete callback which is called ~4ms after communication was started. In the previous implementation this could happen in parallel to usage of data. To solve this potential problem the execution of functions called once a second was moved from 1000ms to 980ms giving a 20ms window for execution.
author ideenmodellierer
date Sun, 31 Mar 2019 15:49:47 +0200
parents 5f11787b4f42
children ba229a012ac7
line wrap: on
line source

///////////////////////////////////////////////////////////////////////////////
/// -*- coding: UTF-8 -*-
///
/// \file   Discovery/Src/tMenuEditDecoParameter.c
/// \brief  Main Template file for Menu Edit Deco Parameters
/// \author heinrichs weikamp gmbh
/// \date   31-July-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 "tMenuEditDecoParameter.h"

#include "gfx_fonts.h"
#include "tMenuEdit.h"
#include "unit.h" // last stop in meter and feet

#define MEDP_TAB (380)

/* Private function prototypes -----------------------------------------------*/
void openEdit_DecoAlgorithm(void);
void openEdit_DecoGF(void);
void openEdit_DecoAltGF(void);
void openEdit_DecoVPM(void);
void openEdit_DecoLastStop(void);
void openEdit_DM_SwitchAlgorithm(uint8_t line);

//void openEdit_DecoGasUsage(void);

/* Announced function prototypes -----------------------------------------------*/
uint8_t OnAction_GF				(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_VPM			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_AltGF			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_LastStop		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);

uint8_t OnAction_GasAMV			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_DefaultAMV		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_GasReserve		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);

uint8_t OnAction_DM_ActiveGF	(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_DM_ActiveVPM	(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_DM_AltActiveGF	(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
/* Exported functions --------------------------------------------------------*/

void openEdit_DecoParameter(uint8_t line)
{
    set_globalState_Menu_Line(line);
    resetMenuEdit(CLUT_MenuPageDecoParameter);

    if(actual_menu_content == MENU_SURFACE)
    {
        switch(line)
        {
        case 1:
        default:
            openEdit_DecoAlgorithm();
            break;
        case 2:
            openEdit_DecoVPM();
            break;
        case 3:
            openEdit_DecoGF();
            break;
        case 4:
            openEdit_DecoAltGF();
            break;
        case 5:
            openEdit_DecoLastStop();
            break;
        case 6:
            break;
        }
    }
    else
        openEdit_DM_SwitchAlgorithm(line);
}

/* Private functions ---------------------------------------------------------*/

void openEdit_DM_SwitchAlgorithm(uint8_t line)
{
    SDiveState * pState;

    if(actual_menu_content == MENU_DIVE_REAL)
    {
        pState = stateRealGetPointerWrite();
    }
    else
    {
        pState = stateSimGetPointerWrite();
    }

    switch(line)
    {
    case 1:
    default:
        pState->diveSettings.deco_type.ub.standard = VPM_MODE;
        break;
    case 2:

        pState->diveSettings.gf_high = settingsGetPointer()->GF_high;
        pState->diveSettings.gf_low = settingsGetPointer()->GF_low;
        pState->diveSettings.deco_type.ub.standard = GF_MODE;
        break;
    case 3:
        pState->diveSettings.gf_high = settingsGetPointer()->aGF_high;
        pState->diveSettings.gf_low = settingsGetPointer()->aGF_low;
        pState->diveSettings.deco_type.ub.standard = GF_MODE;
        break;
    }
    exitMenuEdit_to_Home_with_Menu_Update();
}


void openEdit_DecoAlgorithm(void)
{
    SSettings *pSettings = settingsGetPointer();

    if(pSettings->deco_type.ub.standard == VPM_MODE)
        pSettings->deco_type.ub.standard = GF_MODE;
    else
        pSettings->deco_type.ub.standard = VPM_MODE;

    exitEditWithUpdate();
}


void openEdit_DecoVPM(void)
{
    uint8_t vpm;
    char text[32];
    SSettings *pSettings = settingsGetPointer();

    vpm = pSettings->VPM_conservatism.ub.standard;

    text[0] = '\001';
    text[1] = TXT_Decoparameters;
    text[2] = 0;
    write_topline(text);

    write_label_var(   20, 800, ME_Y_LINE2, &FontT48, "VPM");

    write_field_udigit(StMDECOP2_VPM,	MEDP_TAB, 800, ME_Y_LINE2, &FontT48, "+#", (uint32_t)vpm, 0, 0, 0);

    write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);

    setEvent(StMDECOP2_VPM, 					(uint32_t)OnAction_VPM);
    startEdit();
}


void openEdit_DecoGF(void)
{
    uint8_t gfLow,gfHigh;
    char text[32];
    SSettings *pSettings = settingsGetPointer();

    gfLow = pSettings->GF_low;
    gfHigh = pSettings->GF_high;

    text[0] = '\001';
    text[1] = TXT_Decoparameters;
    text[2] = 0;
    write_topline(text);

    write_label_var(   20, 800, ME_Y_LINE3, &FontT48, "GF\016\016low/high\017");

    write_field_udigit(StMDECOP3_GF, MEDP_TAB, 800, ME_Y_LINE3, &FontT48, "##/##", (uint32_t)gfLow, (uint32_t)gfHigh, 0, 0);

    write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);

    setEvent(StMDECOP3_GF, 					(uint32_t)OnAction_GF);
    startEdit();
}


void openEdit_DecoAltGF(void)
{
    uint8_t aGfLow,aGfHigh;
    char text[32];
    SSettings *pSettings = settingsGetPointer();

    aGfLow = pSettings->aGF_low;
    aGfHigh = pSettings->aGF_high;

    text[0] = '\001';
    text[1] = TXT_Decoparameters;
    text[2] = 0;
    write_topline(text);

    write_label_var(   20, 800, ME_Y_LINE4, &FontT48, "aGF\016\016low/high\017");
    write_field_udigit(StMDECOP4_AltGF,		MEDP_TAB, 800, ME_Y_LINE4, &FontT48, "##/##", (uint32_t)aGfLow, (uint32_t)aGfHigh, 0, 0);

    write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);

    setEvent(StMDECOP4_AltGF, 					(uint32_t)OnAction_AltGF);
    startEdit();
}


void openEdit_DecoLastStop(void)
{
    uint8_t lastStop;
    char text[32];
    SSettings *pSettings = settingsGetPointer();

    lastStop = pSettings->last_stop_depth_meter;

    text[0] = '\001';
    text[1] = TXT_LastDecostop;
    text[2] = 0;
    write_topline(text);

    write_label_fix(   20, 800, ME_Y_LINE5, &FontT48, TXT_LastDecostop);

    if(settingsGetPointer()->nonMetricalSystem)
    {
        write_label_var(  MEDP_TAB + 40, 800, ME_Y_LINE5, &FontT48, "\016\016  ft\017");
        write_field_2digit(StMDECOP5_LASTSTOP,	MEDP_TAB, 800, ME_Y_LINE5, &FontT48, "##", (uint32_t)unit_depth_integer(lastStop), 0, 0, 0);
    }
    else
    {
        write_label_var(  MEDP_TAB + 20, 800, ME_Y_LINE5, &FontT48, "\016\016 meter\017");
        write_field_udigit(StMDECOP5_LASTSTOP,	MEDP_TAB, 800, ME_Y_LINE5, &FontT48, "#", (uint32_t)lastStop, 0, 0, 0);
    }
    write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);

    setEvent(StMDECOP5_LASTSTOP, 	(uint32_t)OnAction_LastStop);
    startEdit();
}

/*
void openEdit_DecoGF_DM(void)
    {
      const SDiveSettings * pDiveSettings;
        uint8_t activeGF, activeVPM, aActiveGF;
        SSettings *pSettings = settingsGetPointer();

        if(actual_menu_content == MENU_DIVE_REAL)
        {
            const SDiveState * pState = stateRealGetPointer();
            pDiveSettings = &pState->diveSettings;
        }
        else
        {
            const SDiveState * pState = stateSimGetPointer();
            pDiveSettings = &pState->diveSettings;
        }
        if(pDiveSettings->deco_type.ub.standard == VPM_MODE)
        {
            aActiveGF = 0;
            activeGF = 0;
            activeVPM = 1;
        }
        else
        if((pDiveSettings->gf_high == pSettings->GF_high) && (pDiveSettings->gf_low == pSettings->GF_low))
        {
            aActiveGF = 0;
            activeGF = 1;
            activeVPM = 0;
        }
        else
        {
            aActiveGF = 1;
            activeGF = 0;
            activeVPM = 0;
        }

        write_label_fix(  30, 340,  90, &FontT42, TXT_ZHL16GF);
        write_label_fix(  30, 340, 140, &FontT42, TXT_low_high);
        write_label_fix( 400, 600,  90, &FontT42, TXT_VPM);
        write_label_fix( 400, 600, 140, &FontT42, TXT_Conservatism);
        write_label_fix( 660, 799,  90, &FontT42, TXT_aGF);

        write_field_on_off(StMDECOP7_ActiveGF,		 30, 170, 405, &FontT48, "Active", activeGF);

        write_field_on_off(StMDECOP8_ActiveVPM,	400, 600, 405, &FontT48, "Active", activeVPM);

        write_field_on_off(StMDECOP9_ActiveAltGF,	660, 799, 405, &FontT48, "Active", aActiveGF);


        setEvent(StMDECOP7_ActiveGF, 		(uint32_t)OnAction_DM_ActiveGF);
        setEvent(StMDECOP8_ActiveVPM,		(uint32_t)OnAction_DM_ActiveVPM);
        setEvent(StMDECOP9_ActiveAltGF, 		(uint32_t)OnAction_DM_AltActiveGF);
}
*/

uint8_t OnAction_VPM(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings;
    uint8_t digitContentNew;
    uint32_t newConservatism;

    if(action == ACTION_BUTTON_ENTER)
    {
        return digitContent;
    }
    if(action == ACTION_BUTTON_ENTER_FINAL)
    {
        evaluateNewString(editId, &newConservatism, 0, 0, 0);
        if(newConservatism > 5)
            newConservatism = 5;

        pSettings = settingsGetPointer();
        pSettings->VPM_conservatism.ub.standard = newConservatism;

        tMenuEdit_newInput(editId, newConservatism, 0, 0, 0);
        return UPDATE_AND_EXIT_TO_MENU;
    }
    if(action == ACTION_BUTTON_NEXT)
    {
        digitContentNew = digitContent + 1;
        if(digitContentNew > '5')
            digitContentNew = '0';
        return digitContentNew;
    }
    if(action == ACTION_BUTTON_BACK)
    {
        digitContentNew = digitContent - 1;
        if(digitContentNew < '0')
            digitContentNew = '5';
        return digitContentNew;
    }

    return EXIT_TO_MENU;
}


uint8_t OnAction_GF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings;
    uint8_t digitContentNew;
    uint32_t newGFlow, newGFhigh;

    if(action == ACTION_BUTTON_ENTER)
    {
        return digitContent;
    }
    if(action == ACTION_BUTTON_ENTER_FINAL)
    {
        evaluateNewString(editId, &newGFlow, &newGFhigh, 0, 0);
        if(newGFlow < 10)
            newGFlow = 10;
        if(newGFhigh < 45)
            newGFhigh = 45;
        if(newGFlow > 99)
            newGFlow = 99;
        if(newGFhigh > 99)
            newGFhigh = 99;

        pSettings = settingsGetPointer();
        pSettings->GF_low = newGFlow;
        pSettings->GF_high= newGFhigh;

        tMenuEdit_newInput(editId, newGFlow, newGFhigh, 0, 0);
        return UPDATE_AND_EXIT_TO_MENU;
    }
    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 EXIT_TO_MENU;
}

uint8_t OnAction_AltGF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings;
    uint8_t digitContentNew;
    uint32_t newGFlow, newGFhigh;

    if(action == ACTION_BUTTON_ENTER)
    {
        return digitContent;
    }
    if(action == ACTION_BUTTON_ENTER_FINAL)
    {
        evaluateNewString(editId, &newGFlow, &newGFhigh, 0, 0);
        if(newGFlow < 10)
            newGFlow = 10;
        if(newGFhigh < 45)
            newGFhigh = 45;
        if(newGFlow > 99)
            newGFlow = 99;
        if(newGFhigh > 99)
            newGFhigh = 99;

        pSettings = settingsGetPointer();
        pSettings->aGF_low = newGFlow;
        pSettings->aGF_high= newGFhigh;

        tMenuEdit_newInput(editId, newGFlow, newGFhigh, 0, 0);
        return UPDATE_AND_EXIT_TO_MENU;
    }
    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 EXIT_TO_MENU;
}


uint8_t OnAction_LastStop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings;
    uint8_t digitContentNew;
    uint32_t lastStop;

    if(action == ACTION_BUTTON_ENTER)
    {
        return digitContent;
    }
    if(action == ACTION_BUTTON_ENTER_FINAL)
    {
        evaluateNewString(editId, &lastStop, 0, 0, 0);

        if(settingsGetPointer()->nonMetricalSystem != 0) // new hw 170718
        {
            lastStop += 2; // f�r rundung
            lastStop = (lastStop * 3) / 10;
        }

        pSettings = settingsGetPointer();

        pSettings->last_stop_depth_meter = lastStop;

        tMenuEdit_newInput(editId, lastStop, 0, 0, 0);
        return UPDATE_AND_EXIT_TO_MENU;
    }

    if(settingsGetPointer()->nonMetricalSystem)
    {
        // 10, 13, 17, 20
        if(action == ACTION_BUTTON_NEXT)
        {
            if(digitContent < 13 + '0')
                digitContentNew = 13 + '0';
            else if(digitContent < 16 + '0')
                digitContentNew = 16 + '0';
            else if(digitContent < 20 + '0')
                digitContentNew = 20 + '0';
            else
                digitContentNew = 10 + '0';


            return digitContentNew;
        }
        if(action == ACTION_BUTTON_BACK)
        {
            if(digitContent >= 20 + '0')
                digitContentNew = 16 + '0';
            else if(digitContent >= 16 + '0')
                digitContentNew = 13 + '0';
            else if(digitContent >= 13 + '0')
                digitContentNew = 10 + '0';
            else
                digitContentNew = 20 + '0';

            return digitContentNew;
        }
    }
    else
    {
        if(action == ACTION_BUTTON_NEXT)
        {
            digitContentNew = digitContent + 1;
            if(digitContentNew > '6')
                digitContentNew = '3';
            return digitContentNew;
        }
        if(action == ACTION_BUTTON_BACK)
        {
            digitContentNew = digitContent - 1;
            if(digitContentNew < '3')
                digitContentNew = '6';
            return digitContentNew;
        }
    }

    return EXIT_TO_MENU;
}


uint8_t OnAction_ActiveGF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings;
    pSettings = settingsGetPointer();

    if(pSettings->deco_type.ub.standard == GF_MODE)
        return 255;

    pSettings->deco_type.ub.standard = GF_MODE;
    tMenuEdit_set_on_off(editId, 1);
    tMenuEdit_set_on_off(StMDECOP8_ActiveVPM, 0);

    return UPDATE_DIVESETTINGS;
}


uint8_t OnAction_ActiveVPM(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings;
    pSettings = settingsGetPointer();

    if(pSettings->deco_type.ub.standard == VPM_MODE)
        return 255;

    pSettings->deco_type.ub.standard = VPM_MODE;
    tMenuEdit_set_on_off(editId, 1);
    tMenuEdit_set_on_off(StMDECOP7_ActiveGF, 0);

    return UPDATE_DIVESETTINGS;
}


uint8_t OnAction_DM_ActiveVPM(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SDiveSettings * pDiveSettings;
    if(actual_menu_content == MENU_DIVE_REAL)
    {
        SDiveState * pState = stateRealGetPointerWrite();
        pDiveSettings = &pState->diveSettings;
    }
    else
    {
        SDiveState * pState = stateSimGetPointerWrite();
        pDiveSettings = &pState->diveSettings;
    }
    pDiveSettings->deco_type.ub.standard = VPM_MODE;
    return EXIT_TO_HOME;
}


uint8_t OnAction_DM_ActiveGF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings = settingsGetPointer();
    SDiveSettings * pDiveSettings;
    if(actual_menu_content == MENU_DIVE_REAL)
    {
        SDiveState * pState = stateRealGetPointerWrite();
        pDiveSettings = &pState->diveSettings;
    }
    else
    {
        SDiveState * pState = stateSimGetPointerWrite();
        pDiveSettings = &pState->diveSettings;
    }
    pDiveSettings->gf_high = pSettings->GF_high;
    pDiveSettings->gf_low = pSettings->GF_low;
    pDiveSettings->deco_type.ub.standard = GF_MODE;
    return EXIT_TO_HOME;
}


uint8_t OnAction_DM_AltActiveGF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    SSettings *pSettings = settingsGetPointer();
    SDiveSettings * pDiveSettings;
    if(actual_menu_content == MENU_DIVE_REAL)
    {
        SDiveState * pState = stateRealGetPointerWrite();
        pDiveSettings = &pState->diveSettings;
    }
    else
    {
        SDiveState * pState = stateSimGetPointerWrite();
        pDiveSettings = &pState->diveSettings;
    }
    pDiveSettings->gf_high = pSettings->aGF_high;
    pDiveSettings->gf_low = pSettings->aGF_low;
    pDiveSettings->deco_type.ub.standard = GF_MODE;
    return EXIT_TO_HOME;
}


/*
void openEdit_DecoGasUsage(void)
{
    uint8_t amv, reserve;
    char text[32];
    SSettings *pSettings;

    pSettings = settingsGetPointer();

    amv = pSettings->AtemMinutenVolumenLiter;
    reserve = pSettings->ReserveFractionDenominator;

    text[0] = '\a';
    text[1] = TXT_AtemGasVorrat;
    text[2] = 0;

    write_topline(text);

    write_label_fix(  30, 340,  90, &FontT42, TXT_LiterproMinute);
    write_label_fix(  30, 340, 250, &FontT42, TXT_Default);
    write_label_fix( 430, 740,  90, &FontT42, TXT_Reserve);

    strcpy(text, "1/0");
    text[2] += reserve;
    write_field_udigit(StMDECOP5_AMV,				 30, 320, 150, &FontT105, "###", (uint32_t)amv, 0, 0, 0);
    write_field_button(StMDECOP5_DefaultAMV,	 30, 170, 290,  &FontT48, "25");
    write_field_button(StMDECOP5_RESERVE,		430, 640, 150, &FontT105, text);

    setEvent(StMDECOP5_AMV, 				(uint32_t)OnAction_GasAMV);
    setEvent(StMDECOP5_DefaultAMV, (uint32_t)OnAction_DefaultAMV);
    setEvent(StMDECOP5_RESERVE, 		(uint32_t)OnAction_GasReserve);
}


uint8_t OnAction_GasAMV				(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    uint8_t digitContentNew;
    uint32_t newAMV;
    SSettings *pSettings;

    if(action == ACTION_BUTTON_ENTER)
    {
        return digitContent;
    }
    if(action == ACTION_BUTTON_ENTER_FINAL)
    {
        evaluateNewString(editId, &newAMV, 0, 0, 0);

        if(newAMV < 5)
            newAMV = 5;
        if(newAMV > 190)
            newAMV = 190;

        pSettings = settingsGetPointer();
        pSettings->AtemMinutenVolumenLiter = newAMV;

        tMenuEdit_newInput(editId, newAMV, 0, 0, 0);

        return 255;
    }
    if(action == ACTION_BUTTON_NEXT)
    {
        if((digitNumber == 0) && (digitContentNew >= '1'))
            digitContentNew = '0';
        else
            digitContentNew = digitContent + 1;
        if(digitContentNew > '9')
            digitContentNew = '0';
        return digitContentNew;
    }
    if(action == ACTION_BUTTON_BACK)
    {
        if((digitNumber == 0) && (digitContentNew == '0'))
            digitContentNew = '1';
        else
            digitContentNew = digitContent - 1;
        if(digitContentNew < '0')
            digitContentNew = '9';
        return digitContentNew;
    }

    return UNSPECIFIC_RETURN;
}


uint8_t OnAction_DefaultAMV		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    uint32_t newAMV;
    SSettings *pSettings;

    newAMV = 25;

    pSettings = settingsGetPointer();
    pSettings->AtemMinutenVolumenLiter = newAMV;
    tMenuEdit_newInput(StMDECOP5_AMV, newAMV, 0, 0, 0);

    return UNSPECIFIC_RETURN;
}


uint8_t OnAction_GasReserve		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
    uint32_t reserve;
    SSettings *pSettings;
    char text[32];

    pSettings = settingsGetPointer();
    reserve = pSettings->ReserveFractionDenominator;
    if(reserve <= 3)
        reserve = 4;
    else
        reserve = 3;

    pSettings->ReserveFractionDenominator = reserve;

    strcpy(text, "1/0");
    text[2] += reserve;
    tMenuEdit_newButtonText(editId, text);

    return UNSPECIFIC_RETURN;
}
*/