# HG changeset patch # User Ideenmodellierer # Date 1550952651 -3600 # Node ID cc9c18075e00fd832600d4869f6a83e531a29a0a # Parent 9eda5a75c5fdb1b6957fe443e0198f72779502bd Removed no longer supported scooter code diff -r 9eda5a75c5fd -r cc9c18075e00 Common/Inc/data_central.h --- a/Common/Inc/data_central.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Common/Inc/data_central.h Sat Feb 23 21:10:51 2019 +0100 @@ -218,18 +218,6 @@ uint16_t bottle_bar_age_MilliSeconds[2 * NUM_GASES + 1]; uint16_t apnea_total_counter; - uint8_t scooterSpeed; - uint8_t scooterType; - uint16_t scooterWattstunden; - uint16_t scooterDrehzahl; - uint8_t scooterRestkapazitaet; - uint8_t scooterAmpere; - uint16_t scooterTemperature; - uint16_t scooterAgeInMilliSeconds; - float scooterSpannung; - uint8_t scooterRestkapazitaetWhBased; - uint8_t scooterRestkapazitaetVoltageBased; - /* control of DataEX_copy_to_LifeData() */ uint8_t boolResetAverageDepth; @@ -476,6 +464,4 @@ _Bool is_ambient_pressure_close_to_surface(SLifeData *lifeData); -uint8_t stateUsed_scooterRemainingBattCapacity(void); - #endif // DATA_CENTRAL_H diff -r 9eda5a75c5fd -r cc9c18075e00 Common/Inc/settings.h --- a/Common/Inc/settings.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Common/Inc/settings.h Sat Feb 23 21:10:51 2019 +0100 @@ -66,9 +66,6 @@ #define DDMMYY 1 #define YYMMDD 2 -#define LICENCEBONEX 0xFE - - /* 2015 Jan 30, hw, deco and travel added for MenuEditGas * can be used for buehlmann, vpm, etc. later but be carefull * with current implemenation */ diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/bonexConnect.h --- a/Discovery/Inc/bonexConnect.h Tue Feb 19 21:48:32 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -/// -*- coding: UTF-8 -*- -/// -/// \file Discovery/Inc/bonexConnect.h -/// \brief connect to bluetooth LTE of BonexInfoSystem -/// \author heinrichs weikamp gmbh -/// \date 29-Sept-2015 -/// -/// $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 . -////////////////////////////////////////////////////////////////////////////// - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef BONEX_CONNECT_H -#define BONEX_CONNECT_H - -#include "stm32f4xx_hal.h" - -enum -{ - BC_DISCONNECTED = 0, - BC_SEARCHING = 1, - BC_CONNECTED = 2, -}; - -enum -{ - BONEX_OK = 0, //= HAL_OK - BONEX_BUS_ERROR = (uint8_t)HAL_ERROR, - BONEX_BUS_BUSY = (uint8_t)HAL_BUSY, - BONEX_BUS_TIMEOUT = (uint8_t)HAL_TIMEOUT, - BONEX_NOTFOUND, - BONEX_TYPEMISMATCH, - BONEX_TIMEOUT, - BONEX_BUSY, - BONEX_NOCONNECT, -}; - -void bonexControl(void); -void bC_setConnectRequest(void); -uint8_t bC_getName(char *name); -uint8_t bC_getStatus(void); -uint8_t bC_getData(float *watt, float *temperature, uint16_t *drehzahl, uint8_t *residualcapacity); - -#endif // BONEX_CONNECT_H diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/bonex_mini.h --- a/Discovery/Inc/bonex_mini.h Tue Feb 19 21:48:32 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -/// -*- coding: UTF-8 -*- -/// -/// \file Discovery/Inc/bonex_mini.h -/// \brief voltage to battery percentage -/// \author heinrichs weikamp gmbh -/// \date 26-March-2017 -/// -/// $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 . -////////////////////////////////////////////////////////////////////////////// - -#ifndef BONEX_MINI_H -#define BONEX_MINI_H - -#include "stdio.h" -#include "stm32f4xx_hal.h" - - -void BONEX_calc_new_ResidualCapacity(uint8_t * residualC, uint32_t voltage_mV, int32_t current_mA, uint8_t scooterType); -uint8_t BONEX_mini_ResidualCapacityVoltageBased(float voltage_V, uint16_t ageInMilliSecondsSinceLast); - -#endif // BONEX_MINI_H diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/data_exchange_main.h --- a/Discovery/Inc/data_exchange_main.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Inc/data_exchange_main.h Sat Feb 23 21:10:51 2019 +0100 @@ -48,8 +48,7 @@ uint32_t DataEX_lost_connection_count(void); void DataEX_control_connection_while_asking_for_sleep(void); uint8_t DataEX_check_RTE_version__needs_update(void); -uint8_t DataEX_scooterFoundAndValidLicence(void); -uint8_t DataEX_scooterDataFound(void); + SDataReceiveFromMaster * dataOutGetPointer(void); diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/tHome.h --- a/Discovery/Inc/tHome.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Inc/tHome.h Sat Feb 23 21:10:51 2019 +0100 @@ -67,7 +67,6 @@ CVIEW_EADTime, CVIEW_Gaslist, CVIEW_sensors_mV, - CVIEW_Scooter, CVIEW_Hello, CVIEW_CompassDebug, CVIEW_SummaryOfLeftCorner, @@ -133,7 +132,6 @@ float t3_basics_lines_depth_and_divetime(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode); void t3_basics_battery_low_customview_extra(GFX_DrawCfgWindow* tXc1); -void t3_basics_battery_scooter_customview_extra(GFX_DrawCfgWindow* tXc1); void t3_basics_show_customview_warnings(GFX_DrawCfgWindow* tXc1); void t3_basics_refresh_customview(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode); void t3_basics_refresh_apnoeRight(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode); diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/tMenuEditHardware.h --- a/Discovery/Inc/tMenuEditHardware.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Inc/tMenuEditHardware.h Sat Feb 23 21:10:51 2019 +0100 @@ -39,6 +39,5 @@ void refresh_O2Sensors(void); void refresh_CompassEdit(void); void refresh_ButtonValuesFromPIC(void); -//void refresh_ScooterControl(void); #endif /* TMENU_EDIT_HARDWARE_H */ diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/tStructure.h --- a/Discovery/Inc/tStructure.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Inc/tStructure.h Sat Feb 23 21:10:51 2019 +0100 @@ -256,10 +256,6 @@ #define StMHARD5_ButtonBalance2 _MB(2,7,5,3,0) #define StMHARD5_ButtonBalance3 _MB(2,7,5,4,0) -#define StMHARD6_ScooterDrag _MB(2,7,6,1,0) -#define StMHARD6_ScooterLoad _MB(2,7,6,2,0) -#define StMHARD6_ScooterBatt _MB(2,7,6,3,0) - //#define StMHARD6_UpdateCPU2_No _MB(2,7,6,1,0) //#define StMHARD6_UpdateCPU2_Yes _MB(2,7,6,2,0) //#define StMHARD6_UpdateCPU2_Now _MB(2,7,6,3,0) diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Inc/text_multilanguage.h --- a/Discovery/Inc/text_multilanguage.h Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Inc/text_multilanguage.h Sat Feb 23 21:10:51 2019 +0100 @@ -260,10 +260,6 @@ TXT2BYTE_Friday, TXT2BYTE_Saturday, /* */ - TXT2BYTE_ScooterRestkapazitaet, - TXT2BYTE_ScooterTemperature, - TXT2BYTE_ScooterSpeed, - /* */ TXT2BYTE_Layout, TXT2BYTE_Units, TXT2BYTE_Units_metric, @@ -291,23 +287,8 @@ TXT2BYTE_DecoDataLost, TXT2BYTE_Info, TXT2BYTE_Korrekturwerte, - TXT2BYTE_ScooterMonitor, TXT2BYTE_SetBearing, TXT2BYTE_ResetBearing, - TXT2BYTE_ScooterSetup, - TXT2BYTE_ScooterDrag, - TXT2BYTE_ScooterLoad, - TXT2BYTE_ScooterD0Apnoe, - TXT2BYTE_ScooterD1Scuba, - TXT2BYTE_ScooterD2Tech, - TXT2BYTE_ScooterD3Heavy, - TXT2BYTE_ScooterL0None, - TXT2BYTE_ScooterL1Small, - TXT2BYTE_ScooterL2Stages, - TXT2BYTE_ScooterL3Full, - TXT2BYTE_ScooterL4Towing, - TXT2BYTE_ScooterBattTyp, - TXT2BYTE_ScooterVolt, TXT2BYTE_Sensor, TXT2BYTE_Maintenance, TXT2BYTE_SetBatteryCharge, diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/base.c --- a/Discovery/Src/base.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/base.c Sat Feb 23 21:10:51 2019 +0100 @@ -230,7 +230,6 @@ #include "timer.h" #include "logbook_miniLive.h" #include "test_vpm.h" -//#include "bonexConnect.h" #include "tDebug.h" #ifdef DEMOMODE @@ -402,15 +401,6 @@ // settingsGetPointer()->showDebugInfo = 1; /* - if(settingsGetPointer()->scooterControl) - { - settingsGetPointer()->bluetoothActive = 1; - MX_Bluetooth_PowerOn(); - if(settingsGetPointer()->scooterDeviceAddress[0] != 0) - bC_setConnectRequest(); - } - */ - /* if( (hardwareDataGetPointer()->primarySerial == 20+18) || (hardwareDataGetPointer()->primarySerial == 20+25) || (hardwareDataGetPointer()->primarySerial == 20+27)) @@ -501,18 +491,6 @@ ext_flash_write_settings(); } deco_loop(); - /* - bonexControl(); - if(bC_getStatus() == BC_DISCONNECTED) - { - if(tComm_control()) // will stop while loop if tComm Mode started until exit from UART - { - createDiveSettings(); - updateMenu(); - ext_flash_write_settings(); - } - } - */ #ifdef DEBUG_RUNTIME translateTime(stateUsed->lifeData.timeBinaryFormat, &Stime); diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/bonexConnect.c --- a/Discovery/Src/bonexConnect.c Tue Feb 19 21:48:32 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,460 +0,0 @@ -/** - ****************************************************************************** - * @copyright heinrichs weikamp gmbh - * @file bonexConnect.c - * @author heinrichs weikamp gmbh - * @date 29-Sept-2015 - * @version 0.2 - * @since 01-Okt-2015 - * @brief connect to bluetooth LTE of BonexInfoSystem - * @bug - * @warning - @verbatim - ============================================================================== - - BLE: - first of all: - AT+LEROLE=1 // set BLE role of the device to Central - it is invisible and does not accept incoming BLE connections - - then: - AT+LESCAN - AT+LENAME= request remote device name over BLE - ATD ,TIO Initiate Bluetooth Link (for outgoing connections) - - - ============================================================================== - @endverbatim - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 heinrichs weikamp

- * - ****************************************************************************** - */ - -#include "bonexConnect.h" - -#ifndef BONEXBLUETOOTH -void bonexControl(void) -{ - return; -} -void bC_setConnectRequest(void) -{ - return; -} -uint8_t bC_getStatus(void) -{ - return BC_DISCONNECTED; -} -uint8_t bC_getName(char *name) -{ - *name = 0; - return 0; -} -uint8_t bC_getData(float *watt, float *temperature, uint16_t *drehzahl, uint8_t *residualcapacity) -{ - *watt = 0; - *temperature = 0; - *drehzahl = 0; - *residualcapacity = 0; - - return BC_DISCONNECTED; -} - -#else - - -/* Includes ------------------------------------------------------------------*/ -#include "settings.h" -#include "ostc.h" -#include "string.h" -#include "data_central.h" - - - - union tempFloat16{ - uint16_t u16; - uint8_t u8[2]; - } temp; - -/* Private function prototypes -----------------------------------------------*/ -void bC_connect(void); -uint8_t bC_connect_sub_Search(void); -uint8_t bC_connect_sub_Connect(void); -void bC_call(void); -void bC_evaluateData(void); - - -/* Private variables with external access ------------------------------------*/ -uint8_t status = 0; -uint8_t searchrequest = 0; -char nameOfScooter[20]; -uint8_t dataBuffer[9]; -uint8_t StartListeningToUARTscooter = 1; - -float scooterWattstunden = 0; -float scooterTemperature = 0; -uint8_t scooterRestkapazitaet = 0; -uint16_t scooterDrehzahl = 0; - -/* Exported functions --------------------------------------------------------*/ - -uint8_t bC_evaluateData(void) -{ - for - pStateReal->lifeData.wireless_data[i].data[j] - -} - - -uint8_t bC_getData(float *watt, float *temperature, uint16_t *drehzahl, uint8_t *residualcapacity) -{ - if(watt) - *watt = scooterWattstunden; - if(temperature) - *temperature = scooterTemperature; - if(drehzahl) - *drehzahl = scooterDrehzahl; - if(residualcapacity) - *residualcapacity = scooterRestkapazitaet; - return status; -} - -uint8_t bC_getStatus(void) -{ - return status; -} - - -void bC_setConnectRequest(void) -{ - searchrequest = 1; -} - - -uint8_t bC_getName(char *name) -{ - if(status != BC_CONNECTED) - *name = 0; - - strncpy(name,nameOfScooter,20); - name[19] = 0; - return strlen(name); -} - -/* -void bonexControl(void) -{ - static uint32_t time = 0; - - if(settingsGetPointer()->scooterControl == 0) - { - status = BC_DISCONNECTED; - time = 0; - return; - } - - if(settingsGetPointer()->bluetoothActive == 0) - { - status = BC_DISCONNECTED; - time = 0; - return; - } - - if(searchrequest) - { - searchrequest = 0; - // maybe we have to disconnect first? - bC_connect(); - StartListeningToUARTscooter = 1; - time = 0; - return; - } - - if(status != BC_CONNECTED) - { - time = 0; - return; - } - - if(UartReady == SET) - { - UartReady = RESET; - StartListeningToUARTscooter = 1; - bC_evaluateData(); - return; - } - - if(time_elapsed_ms(time, HAL_GetTick()) < 1000) - { - return; - } -*/ -// test -/* -const char request[4] = {0xA3, 5, 0, 0xA6}; -HAL_UART_Transmit(&UartHandle, (uint8_t*)request, 4, 1000); -time = HAL_GetTick(); -return; -*/ - if((UartReady == RESET) && StartListeningToUARTscooter) - { - bC_call(); - time = HAL_GetTick(); - } -} - - -/* Private functions ---------------------------------------------------------*/ - -void BONEX_to_16bit(uint16_t *dataOutUint16, int16_t *dataOutInt16, uint8_t *dataIn) -{ - union tempU16{ - int16_t i16; - uint16_t u16; - uint8_t u8[2]; - } temp; - - temp.u8[0] = dataIn[0]; - temp.u8[1] = dataIn[1]; - - if(dataOutUint16) - *dataOutUint16 = temp.u16; - - if(dataOutInt16) - *dataOutInt16 = temp.i16; -} - -void bC_evaluateData(void) -{ - uint8_t crc = dataBuffer[0]; - for(int i=1;i<=8;i++) - crc ^= dataBuffer[i]; - - if(crc != 0) - return; - - uint16_t watt; - int16_t temperatureL; - - BONEX_to_16bit(&watt,0, &dataBuffer[1]); - BONEX_to_16bit(0,&temperatureL, &dataBuffer[4]); - BONEX_to_16bit(&scooterDrehzahl,0, &dataBuffer[6]); - -// scooterWattstunden = ((float)(dataBuffer[3]))/100; -// scooterWattstunden += watt; - scooterWattstunden = watt; // neu ohne milliWattSekunden hw 160113 - scooterRestkapazitaet = dataBuffer[3]; - scooterTemperature = ((float)(temperatureL))/10; - -/* - aTxBuffer[0] = uartSendNext; // 0 UINT8_T - BONEX_16to8(&aTxBuffer[1],&WattStunden); // 1+2 LSB first UINT16_T - alt: aTxBuffer[3] = (uint8_t)(milliWattSekunden/36000);// 3 UINT8_T - neu: aTxBuffer[3] = (uint8_t)(RestKapazitaet); // 3 UINT8_T - BONEX_16to8(&aTxBuffer[4],&TemperaturLStufe); // 4+5 LSB first INT16_T - BONEX_16to8(&aTxBuffer[6],&DrehzahlNeu); // 6+7 LSB first UINT16_T - crc UINT8_T -*/ -} - -void bC_call(void) -{ - const char request[4] = {0xA3, 1, 0, 0xA2}; - uint8_t answer = BONEX_OK; - - answer = HAL_UART_Transmit(&UartHandle, (uint8_t*)request, 4, 1000); - if(answer != HAL_OK) - return; - - StartListeningToUARTscooter = 0; - answer = HAL_UART_Receive_IT(&UartHandle, dataBuffer, 9); -} - - -void bC_connect(void) -{ - status = BC_SEARCHING; - uint8_t answer = BONEX_OK; - - answer = BONEX_OK; - if(settingsGetPointer()->scooterDeviceAddress[0] == 0) - { - answer = bC_connect_sub_Search(); - } - - if(answer == BONEX_OK) - { - answer = bC_connect_sub_Connect(); - } - - if(answer == BONEX_OK) - status = BC_CONNECTED; - else - status = BC_DISCONNECTED; -} - - -uint8_t bC_connect_sub_Search(void) -{ - uint8_t answer = BONEX_OK; - char buffer[256]; - uint8_t bufferPtr = 0; - uint8_t length; - uint32_t time; - char *startOfBONEXString; - char *startOfRemoteDeviceAddress; - uint8_t okayNotSend; - - - strncpy(buffer,"AT+BINQ\r",256); - length = strlen(buffer); - answer = HAL_UART_Transmit(&UartHandle, (uint8_t*)buffer, length, 1000); - time = HAL_GetTick(); - bufferPtr = 0; - okayNotSend = 6; - while((time_elapsed_ms(time, HAL_GetTick()) < 20000) && (bufferPtr < 255) && (okayNotSend)) - { - answer = HAL_UART_Receive(&UartHandle, (uint8_t*)&buffer[bufferPtr], 1, 1000); - if(answer == HAL_OK) - { - switch(okayNotSend) - { - case 1: - if(buffer[bufferPtr] == '\n') - { - okayNotSend = 0; - break; - } - case 2: - if(buffer[bufferPtr] == '\r') - { - okayNotSend = 1; - break; - } - case 3: - if(buffer[bufferPtr] == 'K') - { - okayNotSend = 2; - break; - } - case 4: - if(buffer[bufferPtr] == 'O') - { - okayNotSend = 3; - break; - } - case 5: - if(buffer[bufferPtr] == '\n') - { - okayNotSend = 4; - break; - } - case 6: - if(buffer[bufferPtr] == '\r') - { - okayNotSend = 5; - break; - } - default: - okayNotSend = 6; - break; - } - bufferPtr++; - } - } - - buffer[bufferPtr] = 0; // just for safety of search routines - length = bufferPtr; - - if(length < 1) - return BONEX_NOTFOUND; - - startOfBONEXString = strstr(buffer,"BONEX"); - - if(!startOfBONEXString) - return BONEX_NOTFOUND; - - - // copy to scooterDeviceAddress - startOfRemoteDeviceAddress = startOfBONEXString - 1; - while(startOfRemoteDeviceAddress >= buffer) - { - if(*startOfRemoteDeviceAddress == '\r') - break; - startOfRemoteDeviceAddress--; - } -/* - startOfBONEXString = 0; // for strrchr - - startOfRemoteDeviceAddress = strrchr(buffer, '\r'); -*/ - // first in list? - if(!startOfRemoteDeviceAddress) - startOfRemoteDeviceAddress = buffer; - else - { - startOfRemoteDeviceAddress += 1; - if(*startOfRemoteDeviceAddress == '\n') - startOfRemoteDeviceAddress += 1; - } - strncpy(settingsGetPointer()->scooterDeviceAddress, startOfRemoteDeviceAddress, 12); - - for(int i=0;i<19;i++) - { - if((startOfBONEXString[i] == 0) || (startOfBONEXString[i] == '\r')) - { - settingsGetPointer()->scooterDeviceName[i] = 0; - break; - } - else - settingsGetPointer()->scooterDeviceName[i] = startOfBONEXString[i]; - } - return BONEX_OK; -} - - -uint8_t bC_connect_sub_Connect(void) -{ - uint8_t answer = BONEX_OK; - char buffer2[256]; - uint8_t bufferPtr = 0; - uint8_t length; - uint32_t time; - - strncpy(buffer2,"ATD ",256); - length = strlen(buffer2); - strncpy(&buffer2[length], settingsGetPointer()->scooterDeviceAddress, 12); - length += 12; - buffer2[length++] = '\r'; - buffer2[length++] = 0; - answer = HAL_UART_Transmit(&UartHandle, (uint8_t*)buffer2, length, 1000); - - time = HAL_GetTick(); - bufferPtr = 0; - while((time_elapsed_ms(time, HAL_GetTick()) < 5000) && (bufferPtr < 255)) - { - answer = HAL_UART_Receive(&UartHandle, (uint8_t*)&buffer2[bufferPtr], 1, 1000); - if(answer == HAL_OK) - bufferPtr++; - } - - if(bufferPtr < 7) - return BONEX_NOTFOUND; - - if(strstr(buffer2,"CONNECT")) - { - strncpy(nameOfScooter, settingsGetPointer()->scooterDeviceName, 19); - nameOfScooter[19] = 0; - return BONEX_OK; - } - else - return BONEX_NOCONNECT; -} - -#endif // BONEXBLUETOOTH - - -/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/bonex_mini.c --- a/Discovery/Src/bonex_mini.c Tue Feb 19 21:48:32 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,347 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -/// -*- coding: UTF-8 -*- -/// -/// \file Discovery/Src/bonex_mini.c -/// \brief voltage to battery percentage based on bonex.c for BIS PCB -/// \author Heinrichs Weikamp gmbh -/// \date 26-March-2017 -/// -/// \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 . -////////////////////////////////////////////////////////////////////////////// -/* - ============================================================================== - ##### CAN data ##### - ============================================================================== - [..] is stored static in BONEX_CAN_Config - see example CAN_Networking for STM32303C_EVAL - - */ - -/* Includes ------------------------------------------------------------------*/ -#include "bonex_mini.h" - -/* Private variables ---------------------------------------------------------*/ - -enum -{ - TYPE_ECOS = 0, - TYPE_RS = 1, - TYPE_MAX -}; - -const uint16_t loadVoltageInverted[TYPE_MAX][21] = -{ - { // ECOS - 0 - }, - { // RS - 38000, // 0% >= index *5 ist Ergebnis Kapazit�t - 38875, // 5% - 39750, // 10% - 40625, - 41500, - 42050, - 42600, - 43150, - 43700, - 44250, - 44800, - 45350, - 45900, - 46450, - 47000, // 70% - 47550, // 75% - 48100, - 48450, // 85% - 48800, - 49150, - 49500, //100% , index = 20 - } -}; - - -uint8_t BONEX_mini_ResidualCapacityVoltageBased(float voltage_V, uint16_t ageInMilliSecondsSinceLast) -{ - static uint8_t capacityStorage = 0; - static uint32_t voltage_mV_storage_32bit = 0; - static uint16_t storageCounter = 0; - - uint16_t voltage_mV = (uint16_t)(1000 * voltage_V); - - uint8_t calcNow = 0; - - if(ageInMilliSecondsSinceLast < 2000) - { - voltage_mV_storage_32bit += voltage_mV; - storageCounter++; - } - else - { - storageCounter = 0; - voltage_mV_storage_32bit = 0; - } - - - if(storageCounter >= 600) - { - voltage_mV_storage_32bit /= storageCounter; - voltage_mV = (uint16_t)voltage_mV_storage_32bit; - storageCounter = 1; - voltage_mV_storage_32bit = voltage_mV; - calcNow = 1; - } - else if(storageCounter == 1) // value immediately but not called after 600 counter ;-) - { - voltage_mV = (uint16_t)voltage_mV_storage_32bit; - calcNow = 1; - } - - if(calcNow) - { - for(int i = 20; i>=0; i--) - { - if(voltage_mV >= loadVoltageInverted[1][i]) - { - capacityStorage = i*5; - break; - } - } - } - - return capacityStorage; -} - -/* - -uint8_t BONEX_mini_ResidualCapacityVoltageBased(float voltage_V, uint16_t ageInMilliSecondsSinceLast) -{ - static uint8_t capacityStorage = 0; - static uint16_t voltage_mV_storage[5] = {0,0,0,0,0}; // number six is used directly from voltage_mV - - uint32_t voltage_mV = (uint32_t)(1000 * voltage_V); - - - // if necessary reset container and return actual voltage_V as capacity - if(ageInMilliSecondsSinceLast > 2000) - { - capacityStorage = 0; - for(int i = 0; i<5; i++) - { - voltage_mV_storage[i] = 0; - } - } - - // find storage container or, if full, use it as number six and recalc voltage_mV based on those six values - int ptr = -1; - do - { - ptr++; - } while ((ptr < 5) && voltage_mV_storage[ptr] != 0); - - if(ptr == 5) - { - for(int i = 0; i<5; i++) - { - voltage_mV += voltage_mV_storage[i]; - voltage_mV_storage[i] = 0; - } - voltage_mV += 3; - voltage_mV /= 6; - capacityStorage = 0; - } - else - { - voltage_mV_storage[ptr] = voltage_mV; - } - - // calc result if update necessary - if(capacityStorage == 0) - { - for(int i = 20; i>=0; i--) - { - if(voltage_mV >= loadVoltageInverted[1][i]) - { - capacityStorage = i*5; - break; - } - } - } - return capacityStorage; -} - -#define ECOS_VMAX 290 -#define ECOS_VMIN 195 -#define ECOS_STEP 5 - -#define RS_VMAX 500 -#define RS_VMIN 360 -#define RS_STEP 5 - -#define ECOS_LENGTH (((ECOS_VMAX - ECOS_VMIN) / ECOS_STEP) + 1) -#define RS_LENGTH (((RS_VMAX - RS_VMIN) / RS_STEP) + 1) -#define MAX_LENGTH (ECOS_LENGTH>RS_LENGTH? ECOS_LENGTH:RS_LENGTH) - - -typedef struct -{ - uint8_t load[3]; -} load; - - -const int32_t currentMaxLoad[TYPE_MAX] = { 17000,14000}; -const int32_t currentPartialLoad[TYPE_MAX] = { 1000, 1000}; -const uint16_t voltageCharged[TYPE_MAX] = { 280, 480}; -const uint16_t voltageMax[TYPE_MAX] = { ECOS_VMAX, RS_VMAX}; -const uint16_t voltageMin[TYPE_MAX] = { ECOS_VMIN, RS_VMIN}; -const uint8_t voltageSteps[TYPE_MAX] = { ECOS_STEP, RS_STEP}; -const uint8_t length[TYPE_MAX] = { ECOS_LENGTH, RS_LENGTH}; - - - - - -const uint8_t loadVoltage[TYPE_MAX][MAX_LENGTH][3] = -{ - { - // ECOS - // no,teil,voll - { 0, 5, 0}, // voltageMin 19.5 - { 0, 5, 0}, // voltageMin + 0.5V - { 0, 5, 0}, // 20.5 - { 5, 5, 5}, // 21 - { 5, 5, 5}, // 21.5 - { 5, 10, 10}, // 22 - { 5, 10, 15}, // 22.5 - { 10, 15, 30}, // 23 - { 20, 30, 45}, // 23.5 - { 30, 40, 60}, // 24 - { 40, 50, 65}, // 24.5 - { 50, 60, 75}, // 25 - { 60, 70, 80}, // 25.5 - { 70, 80, 85}, // 26 - { 80, 90, 85}, // 26.5 - { 85, 90, 90}, // 27 - { 90, 95, 90}, // 27.5 - { 95, 95, 95}, // 28 - {100,100,100}, // 28.5 - {100,100,100}, // voltageMax 29 - }, - { - // RS - // no,teil,voll - { 0, 0, 0}, // voltageMin 36 V - { 2, 0, 2}, // voltageMin + 0.5V - { 5, 0, 5}, // 37 - { 5, 2, 5}, // - { 5, 5, 5}, // 38 - { 5, 5, 10}, // - { 5, 5, 15}, // 39 - { 7, 7, 17}, // - { 10, 10, 20}, // 40 - { 15, 12, 27}, // - { 20, 15, 35}, // 41 - { 27, 22, 42}, // - { 35, 30, 50}, // 42 - { 42, 37, 55}, // - { 50, 45, 60}, // 43 - { 55, 50, 67}, // - { 60, 55, 75}, // 44 - { 67, 57, 80}, // - { 75, 60, 85}, // 45 - { 77, 65, 87}, // - { 80, 70, 90}, // 46 - { 85, 75, 90}, // - { 90, 80, 90}, // 47 - { 92, 85, 92}, // - { 95, 90, 95}, // 48 - { 95, 92, 97}, // - { 95, 95,100}, // 49 - { 97, 97,100}, // - {100,100,100} // 50 - } -}; - - -void BONEX_calc_new_ResidualCapacity(uint8_t *residualC, uint32_t voltage_mV, int32_t current_mA, uint8_t scooterType) // as in BIS -{ - uint8_t actualLoad = 0; - uint8_t remainder = 0; - uint32_t voltagePointer = 0; - - if(voltage_mV == 0) - return; - - if(scooterType >= TYPE_MAX) - return; - - if(voltage_mV < (voltageMin[scooterType] * 100)) - { - *residualC = 0; - return; - } - else - if(voltage_mV >= (voltageMax[scooterType] * 100)) - { - *residualC = 100; - return; - } - else // check if charged and reset residualC for further calculation - if(voltage_mV >= (voltageCharged[scooterType] * 100)) - { - *residualC = 100; - return; - } - - // define the line we are working - if(current_mA >= currentMaxLoad[scooterType]) - actualLoad = 2; - else - if(current_mA >= currentPartialLoad[scooterType]) - actualLoad = 1; - else - actualLoad = 0; - - voltagePointer = (voltage_mV - ((uint32_t)(voltageMin[scooterType])) * 100) / (voltageSteps[scooterType] * 100); - - // should be checked with if(... >= voltageMax) but for safety - if(voltagePointer >= length[scooterType]) - { - *residualC = 100; - return; - } - - if(loadVoltage[scooterType][voltagePointer][actualLoad] < *residualC) - *residualC = loadVoltage[scooterType][voltagePointer][actualLoad]; - else if(loadVoltage[scooterType][voltagePointer][actualLoad] >= (*residualC + 20)) - *residualC = loadVoltage[scooterType][voltagePointer][actualLoad]; - - // steps of 5 - remainder = (*residualC)%5; - if(remainder) - *residualC += (5 - remainder); - - // safety - if(*residualC > 100) - *residualC = 100; - - return; -} -*/ - diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/data_central.c --- a/Discovery/Src/data_central.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/data_central.c Sat Feb 23 21:10:51 2019 +0100 @@ -964,21 +964,3 @@ else return false; } - -uint8_t stateUsed_scooterRemainingBattCapacity(void) -{ - const uint8_t useCapacityValue = 1; // 2 is the new one, 1 = scooterRestkapazitaetWhBased is the official used - - switch(useCapacityValue) - { - case 0: - default: - return stateUsed->lifeData.scooterRestkapazitaet; - - case 1: - return stateUsed->lifeData.scooterRestkapazitaetWhBased; - - case 2: - return stateUsed->lifeData.scooterRestkapazitaetVoltageBased; - } -} diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/data_exchange_main.c --- a/Discovery/Src/data_exchange_main.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/data_exchange_main.c Sat Feb 23 21:10:51 2019 +0100 @@ -71,14 +71,12 @@ #include "timer.h" #include "buehlmann.h" #include "externLogbookFlash.h" -#include "bonex_mini.h" // for voltage to battery percentage /* Expoted variables --------------------------------------------------------*/ uint8_t wasPowerOn = 0; confirmbit8_Type requestNecessary = { .uw = 0 }; uint8_t wasUpdateNotPowerOn = 0; -uint8_t scooterFoundThisPowerOnCylce = 0; /* Private variables with external access ------------------------------------*/ @@ -196,18 +194,6 @@ dataOut.footer.checkCode[1] = 0xF3; dataOut.footer.checkCode[2] = 0xF2; dataOut.footer.checkCode[3] = 0xF1; - - - pStateReal->lifeData.scooterType = 0xFF; - pStateReal->lifeData.scooterWattstunden = 0; - pStateReal->lifeData.scooterRestkapazitaet = 0; - pStateReal->lifeData.scooterDrehzahl = 0; - pStateReal->lifeData.scooterSpannung = 0; - pStateReal->lifeData.scooterTemperature = 0; - pStateReal->lifeData.scooterAmpere = 0; - pStateReal->lifeData.scooterRestkapazitaetWhBased = 0; - pStateReal->lifeData.scooterRestkapazitaetVoltageBased = 0; - pStateReal->lifeData.scooterAgeInMilliSeconds = 0; systick_last = HAL_GetTick() - 100; } @@ -1245,86 +1231,7 @@ } } */ - // new: Bonex - float scooterSpeedFloat; - int32_t scooterRemainingBattCapacity; - for(int i=0;i<4;i++) - { - if((wirelessData[i][0]))// && (wirelessData[i][2]) && (wirelessData[i][2] < 60000)) - { - pStateReal->lifeData.scooterType = (pStateReal->lifeData.wireless_data[i].data[0] >> 4) & 0x07; - pStateReal->lifeData.scooterWattstunden = ((uint16_t)((((uint16_t)(pStateReal->lifeData.wireless_data[i].data[0] & 0x0F) << 8) | (pStateReal->lifeData.wireless_data[i].data[1])))); -// pStateReal->lifeData.scooterWattstunden = pStateReal->lifeData.wireless_data[i].data[0] & 0x0F; -// pStateReal->lifeData.scooterWattstunden *= 256; -// pStateReal->lifeData.scooterWattstunden += pStateReal->lifeData.wireless_data[i].data[1]; - pStateReal->lifeData.scooterRestkapazitaet = pStateReal->lifeData.wireless_data[i].data[2]; - pStateReal->lifeData.scooterDrehzahl = ((uint16_t)( (int16_t)((pStateReal->lifeData.wireless_data[i].data[4] << 8) | (pStateReal->lifeData.wireless_data[i].data[3])))); - pStateReal->lifeData.scooterSpannung = ((float)(pStateReal->lifeData.wireless_data[i].data[5])) / 5.0f; - pStateReal->lifeData.scooterTemperature = ((uint16_t)( (int16_t)((pStateReal->lifeData.wireless_data[i].data[7] << 8) | (pStateReal->lifeData.wireless_data[i].data[6])))); - pStateReal->lifeData.scooterAmpere = pStateReal->lifeData.wireless_data[i].data[9] >> 1; - pStateReal->lifeData.scooterAgeInMilliSeconds = pStateReal->lifeData.wireless_data[i].ageInMilliSeconds; - - if(pStateReal->lifeData.scooterWattstunden > 0) - scooterRemainingBattCapacity = settingsGetPointer()->scooterBattSize / pStateReal->lifeData.scooterWattstunden; - else - scooterRemainingBattCapacity = 100; - - - if(scooterRemainingBattCapacity < 0) - scooterRemainingBattCapacity = 0; - if(scooterRemainingBattCapacity > 100) - scooterRemainingBattCapacity = 100; - pStateReal->lifeData.scooterRestkapazitaetWhBased = scooterRemainingBattCapacity; - -// BONEX_calc_new_ResidualCapacity(&pStateReal->lifeData.scooterRestkapazitaetVoltageBased, (uint32_t)(1000 * pStateReal->lifeData.scooterSpannung),1000,1); - pStateReal->lifeData.scooterRestkapazitaetVoltageBased = BONEX_mini_ResidualCapacityVoltageBased(pStateReal->lifeData.scooterSpannung, pStateReal->lifeData.scooterAgeInMilliSeconds); - - scooterSpeedFloat = (float)pStateReal->lifeData.scooterDrehzahl; - scooterSpeedFloat /= (37.0f / 1.1f); // 3700 rpm = 110 m/min - switch(settingsGetPointer()->scooterDrag) - { - case 1: - scooterSpeedFloat *= 0.95f; - break; - case 2: - scooterSpeedFloat *= 0.85f; - break; - case 3: - scooterSpeedFloat *= 0.75f; - break; - default: - break; - } - switch(settingsGetPointer()->scooterLoad) - { - case 1: - scooterSpeedFloat *= 0.90f; - break; - case 2: - scooterSpeedFloat *= 0.80f; - break; - case 3: - scooterSpeedFloat *= 0.70f; - break; - case 4: - scooterSpeedFloat *= 0.60f; - break; - default: - break; - } - if(scooterSpeedFloat < 0) - pStateReal->lifeData.scooterSpeed = 0; - else - if(scooterSpeedFloat > 255) - pStateReal->lifeData.scooterSpeed = 255; - else - pStateReal->lifeData.scooterSpeed = (uint16_t)scooterSpeedFloat; - - if(!scooterFoundThisPowerOnCylce && (pStateReal->lifeData.scooterAgeInMilliSeconds > 0)) - scooterFoundThisPowerOnCylce = 1; - } - } /* PIC data */ @@ -1369,22 +1276,6 @@ } -uint8_t DataEX_scooterDataFound(void) -{ - return scooterFoundThisPowerOnCylce; -} - - -uint8_t DataEX_scooterFoundAndValidLicence(void) -{ - if(getLicence() != LICENCEBONEX) - return 0; - else - return scooterFoundThisPowerOnCylce; -//return 0xFF; -//return LICENCEBONEX; -} - /* Private functions ---------------------------------------------------------*/ /* Check if there is an empty frame providec by RTE (all 0) or even no data provided by RTE (all 0xFF) diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/settings.c --- a/Discovery/Src/settings.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/settings.c Sat Feb 23 21:10:51 2019 +0100 @@ -55,7 +55,7 @@ { .versionFirst = 1, .versionSecond = 4, - .versionThird = 4, + .versionThird = 5, .versionBeta = 1, /* 4 bytes with trailing 0 */ @@ -1133,20 +1133,6 @@ /* uint32_t updateSettingsAllowedFromHeader; */ -/* uint8_t scooterControl; - */ - if(Settings.scooterControl > 1) - { - Settings.scooterControl = 1; - corrections++; - } - -/* char scooterDeviceAddress[12]; - */ - -/* char scooterDeviceName[19]; -*/ - /* uint8_t ppo2sensors_deactivated; */ if(Settings.ppo2sensors_deactivated > (1+2+4)) @@ -1327,39 +1313,6 @@ corrections++; } -/* uint8_t scooterDrag; - */ - if(Settings.scooterDrag > 3) - { - Settings.scooterDrag = 3; - corrections++; - } - -/* uint8_t scooterLoad; - */ - if(Settings.scooterLoad > 4) - { - Settings.scooterLoad = 4; - corrections++; - } - -/* uint8_t scooterNumberOfBatteries; - */ - if(Settings.scooterNumberOfBatteries > 3) - { - Settings.scooterNumberOfBatteries = 3; - corrections++; - } - -/* uint16_t scooterBattSize; - */ - if((Settings.scooterBattSize < 300) || - (Settings.scooterBattSize > 5000)) - { - Settings.scooterBattSize = 700; - corrections++; - } - /* uint8_t lastKnownBatteryPercentage; */ @@ -2568,8 +2521,6 @@ uint8_t getLicence(void) { - //return 0xFF; - //return LICENCEBONEX; return hardwareDataGetPointer()->primaryLicence; } diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/simulation.c --- a/Discovery/Src/simulation.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/simulation.c Sat Feb 23 21:10:51 2019 +0100 @@ -148,21 +148,6 @@ else if(pDiveState->lifeData.depth_meter <= (float)(decom_get_actual_deco_stop(pDiveState) + 0.001)) sim_reduce_deco_time_one_second(pDiveState); - if(getLicence() == LICENCEBONEX) - { - pDiveState->lifeData.scooterType = stateRealGetPointer()->lifeData.scooterType; - pDiveState->lifeData.scooterTemperature = stateRealGetPointer()->lifeData.scooterTemperature; - pDiveState->lifeData.scooterAgeInMilliSeconds = stateRealGetPointer()->lifeData.scooterAgeInMilliSeconds; - pDiveState->lifeData.scooterDrehzahl = stateRealGetPointer()->lifeData.scooterDrehzahl; - pDiveState->lifeData.scooterRestkapazitaet = stateRealGetPointer()->lifeData.scooterRestkapazitaet; - pDiveState->lifeData.scooterWattstunden = stateRealGetPointer()->lifeData.scooterWattstunden; - pDiveState->lifeData.scooterAmpere = stateRealGetPointer()->lifeData.scooterAmpere; - pDiveState->lifeData.scooterSpannung = stateRealGetPointer()->lifeData.scooterSpannung; - pDiveState->lifeData.scooterSpeed = stateRealGetPointer()->lifeData.scooterSpeed; - pDiveState->lifeData.scooterRestkapazitaetWhBased = stateRealGetPointer()->lifeData.scooterRestkapazitaetWhBased; - pDiveState->lifeData.scooterRestkapazitaetVoltageBased = stateRealGetPointer()->lifeData.scooterRestkapazitaetVoltageBased; - } - pDiveState->lifeData.ppO2Sensor_bar[0] = stateRealGetPointer()->lifeData.ppO2Sensor_bar[0]; pDiveState->lifeData.ppO2Sensor_bar[1] = stateRealGetPointer()->lifeData.ppO2Sensor_bar[1]; pDiveState->lifeData.ppO2Sensor_bar[2] = stateRealGetPointer()->lifeData.ppO2Sensor_bar[2]; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/t3.c --- a/Discovery/Src/t3.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/t3.c Sat Feb 23 21:10:51 2019 +0100 @@ -76,19 +76,6 @@ CVIEW_T3_END }; -const uint8_t t3_customviewsScooter[] = -{ - CVIEW_Scooter, - CVIEW_Compass, - - CVIEW_T3_Decostop, - CVIEW_T3_MaxDepth, - CVIEW_T3_StopWatch, - CVIEW_T3_TTS, - CVIEW_T3_ppO2andGas, - - CVIEW_T3_END -}; const uint8_t *t3_customviews = t3_customviewsStandard; @@ -106,11 +93,6 @@ SSettings* pSettings; pSettings = settingsGetPointer(); - if(getLicence() == LICENCEBONEX) - { - t3_customviews = t3_customviewsScooter; - } - t3_selection_customview = t3_customviews[0]; t3screen.FBStartAdress = 0; @@ -524,45 +506,6 @@ } -void t3_basics_battery_scooter_customview_extra(GFX_DrawCfgWindow* tXc1) -{ - char TextC1[256]; - - TextC1[0] = '\001'; - TextC1[1] = '\f'; - TextC1[2] = '\032'; - TextC1[3] = '3'; - TextC1[4] = '1'; - TextC1[5] = '1'; - TextC1[6] = '1'; - TextC1[7] = '1'; - TextC1[8] = '1'; - TextC1[9] = '1'; - TextC1[10] = '1'; - TextC1[11] = '1'; - TextC1[12] = '1'; - TextC1[13] = '1'; - TextC1[14] = '0'; - TextC1[15] = 0; - - for(int i=1;i<=10;i++) - { - if( stateUsed_scooterRemainingBattCapacity() > (9 * i)) - TextC1[i+3] += 1; - } - - if(stateUsed_scooterRemainingBattCapacity() < 10) - TextC1[2] = '\025'; - - if(!warning_count_high_time) - TextC1[4] = '2'; - - if(stateUsed->lifeData.scooterAgeInMilliSeconds > 1500) - TextC1[2] = '\031'; - - GFX_write_string(&Batt24,tXc1,TextC1,0); -} - void t3_refresh_customview(float depth) { @@ -683,7 +626,6 @@ // CVIEW_T3_ppO2andGas uint8_t oxygen_percentage = 0; - float scooterSpeed; // CVIEW_T3_Temperature float temperatureThisCall; @@ -714,21 +656,6 @@ switch(tX_selection_customview) { - case CVIEW_Scooter: - snprintf(text,TEXTSIZE,"\032\fScooter"); - GFX_write_string(&FontT42,tXc1,text,0); - - t3_basics_battery_scooter_customview_extra(tXc1); - - scooterSpeed = stateUsed->lifeData.scooterDrehzahl * 80 / 3300; - - snprintf(text,100,"\030\003%.1f",scooterSpeed); - if(stateUsed->lifeData.scooterAgeInMilliSeconds > 1500) - text[0] = '\031'; - GFX_write_string(&FontT105,tXc1,text,0); - break; - - case CVIEW_T3_ApnoeSurfaceInfo: snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); GFX_write_string(&FontT42,tXc1,text,0); diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/t5_gauge.c --- a/Discovery/Src/t5_gauge.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/t5_gauge.c Sat Feb 23 21:10:51 2019 +0100 @@ -78,14 +78,6 @@ CVIEW_T3_END }; -const uint8_t t5_customviewsScooter[] = -{ - CVIEW_Scooter, - CVIEW_Compass, - CVIEW_T3_MaxDepth, - CVIEW_T3_StopWatch, - CVIEW_T3_END -}; const uint8_t *t5_customviews = t5_customviewsStandard; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/t6_apnea.c --- a/Discovery/Src/t6_apnea.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/t6_apnea.c Sat Feb 23 21:10:51 2019 +0100 @@ -308,45 +308,6 @@ } -void t6_battery_scooter_customview_extra(void) -{ - char TextC1[256]; - - TextC1[0] = '\001'; - TextC1[1] = '\f'; - TextC1[2] = '\032'; - TextC1[3] = '3'; - TextC1[4] = '1'; - TextC1[5] = '1'; - TextC1[6] = '1'; - TextC1[7] = '1'; - TextC1[8] = '1'; - TextC1[9] = '1'; - TextC1[10] = '1'; - TextC1[11] = '1'; - TextC1[12] = '1'; - TextC1[13] = '1'; - TextC1[14] = '0'; - TextC1[15] = 0; - - for(int i=1;i<=10;i++) - { - if( stateUsed_scooterRemainingBattCapacity() > (9 * i)) - TextC1[i+3] += 1; - } - - if(stateUsed_scooterRemainingBattCapacity() < 10) - TextC1[2] = '\025'; - - if(!warning_count_high_time) - TextC1[4] = '2'; - - if(stateUsed->lifeData.scooterAgeInMilliSeconds > 1500) - TextC1[2] = '\031'; - - GFX_write_string(&Batt24,&t6c1,TextC1,0); -} - void t6_change_customview(void) { diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/t7.c --- a/Discovery/Src/t7.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/t7.c Sat Feb 23 21:10:51 2019 +0100 @@ -29,7 +29,6 @@ /* Includes ------------------------------------------------------------------*/ #include "t7.h" -//#include "bonexConnect.h" #include "data_exchange_main.h" #include "decom.h" #include "gfx_fonts.h" @@ -53,7 +52,6 @@ void t7_tissues(const SDiveState * pState); void t7_compass(uint16_t ActualHeading, uint16_t UserSetHeading); -void t7_scooter(void); void t7_SummaryOfLeftCorner(void); void t7_debug(void); @@ -144,36 +142,6 @@ CVIEW_END }; -const uint8_t customviewsDiveScooter[] = -{ - CVIEW_Scooter, - CVIEW_sensors, - CVIEW_Compass, - CVIEW_Decolist, - CVIEW_Tissues, - CVIEW_Profile, - CVIEW_Gaslist, - CVIEW_sensors_mV, - CVIEW_EADTime, - CVIEW_SummaryOfLeftCorner, - CVIEW_noneOrDebug, - CVIEW_END, - CVIEW_END -}; - -const uint8_t customviewsSurfaceScooter[] = -{ -// CVIEW_CompassDebug, - CVIEW_Scooter, - CVIEW_Hello, - CVIEW_sensors, - CVIEW_Compass, - CVIEW_Tissues, - CVIEW_sensors_mV, - CVIEW_END, - CVIEW_END -}; - const uint8_t *customviewsDive = customviewsDiveStandard; const uint8_t *customviewsSurface = customviewsSurfaceStandard; @@ -203,13 +171,6 @@ SSettings* pSettings; pSettings = settingsGetPointer(); - - if(getLicence() == LICENCEBONEX) - { - customviewsDive = customviewsDiveScooter; - customviewsSurface = customviewsSurfaceScooter; - } - selection_custom_field = 1; selection_customview = customviewsSurface[0]; @@ -632,13 +593,6 @@ releaseFrame(22,t7screen.FBStartAdress); return; } - else if(DataEX_scooterFoundAndValidLicence()) // new for t9 hw 160711 - { - settingsGetPointer()->design = 9; - releaseAllFramesExcept(22,t7screen.FBStartAdress); - releaseFrame(22,t7screen.FBStartAdress); - return; - } else { t7_refresh_divemode(); @@ -757,18 +711,6 @@ text[3] = 0; write_content_simple(&t7screen, 0, 799, 479-TOP_LINE_HIGHT, &FontT24,text,CLUT_ButtonSurfaceScreen); -/* - // scooter connected? - if(bC_getData(0,0,0,0) == BC_CONNECTED) - { - text[0] = '\f'; - text[1] = '\002'; - memcpy(&text[2],&settingsGetPointer()->scooterDeviceName,19); - text[21] = 0; - GFX_write_string_color(&FontT24,&t7r1,text,0,CLUT_NiceGreen); - } -*/ - /* was power on reset */ //..... /* removed hw 160802 in V1.1.1 @@ -1587,11 +1529,6 @@ } } while(cv_disabled); } - - -// if((*pViews == CVIEW_Scooter) && (getLicence() != LICENCEBONEX)) -// pViews++; - selection_customview = *pViews; } @@ -1624,11 +1561,6 @@ SSettings* pSettings; pSettings = settingsGetPointer(); - - if((selection_customview == CVIEW_Scooter) && (getLicence() != LICENCEBONEX)) - t7_change_customview(); - if((selection_customview == CVIEW_Scooter) && (!DataEX_scooterFoundAndValidLicence() && (stateRealGetPointer()->mode == MODE_DIVE))) - t7_change_customview(); if((selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0)) t7_change_customview(); if((selection_customview == CVIEW_sensors_mV) &&(stateUsed->diveSettings.ccrOption == 0)) @@ -1744,12 +1676,6 @@ } break; - case CVIEW_Scooter: - snprintf(text,100,"\032\f\001Scooter"); - GFX_write_string(&FontT42,&t7cH,text,0); - t7_scooter(); - break; - case CVIEW_Gaslist: // a lot of code taken from tMenuGas.c // header @@ -3205,305 +3131,6 @@ } -void t7_scooter(void) -{ - float scooterTemperatureLocal; - uint16_t scooterSpeedLocal; -// uint16_t scooterDrehzhl; - uint8_t scooterResidualCapacity; -// float scooterVoltage; -// uint8_t scooterCurrent; - //uint16_t scooterWattHours; -// uint16_t bkpX0, bkpX1; - uint16_t ageInMilliSeconds; - - uint8_t textSize; - - scooterTemperatureLocal = unit_temperature_float(((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f); - scooterSpeedLocal = unit_speed_integer(stateUsed->lifeData.scooterSpeed); - scooterResidualCapacity = stateUsed_scooterRemainingBattCapacity(); - -// scooterDrehzhl = stateUsed->lifeData.scooterDrehzahl; -// scooterVoltage = stateUsed->lifeData.scooterSpannung; -// scooterCurrent = stateUsed->lifeData.scooterAmpere; -// scooterWattHours = stateUsed->lifeData.scooterWattstunden; - - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - - char text[256+60]; - uint8_t textpointer = 0; - - t7cY0free.WindowLineSpacing = 28 + 48 + 14; - t7cY0free.WindowY0 = t7cH.WindowY0 - 5 - 2 * t7cY0free.WindowLineSpacing; - t7cY0free.WindowNumberOfTextLines = 3; - - // header -// text[textpointer++] = '\032'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterRestkapazitaet; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterTemperature; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterSpeed; - text[textpointer++] = 0; - GFX_write_string(&FontT24, &t7cY0free, text, 1); - -/* - snprintf(text,60, - "\032" - "%0u" "\016\016 Wh used\017" - ,stateUsed->lifeData.scooterWattstunden); -*/ - - GFX_write_string(&FontT24, &t7cY0free, text, 1); - -/* - snprintf(text,60, - "\030" - "\n\r" - "\n\r" - "%0u" "\022\016\016 rpm\017\030" - ,stateUsed->lifeData.scooterDrehzahl); - GFX_write_string(&FontT24, &t7cY0free, text, 1); -*/ - // data - t7cY0free.WindowY0 -= 52; - if(settingsGetPointer()->nonMetricalSystem == 0) - { - textSize = snprintf(text,60, - "\030" - "%0u" "\022\016\016 %%\017\030" - "\n\r" - "%0.0f\140" "\022\016\016 C\017\030" - "\n\r" - "%u" "\022\016\016 m/min\017\030" - ,scooterResidualCapacity,scooterTemperatureLocal,scooterSpeedLocal); - } - else - { - textSize = snprintf(text,60, - "\030" - "%0u" "\022\016\016 %%\017\030" - "\n\r" - "%0.0f\140" "\022\016\016 Fht\017\030" - "\n\r" - "%u" "\022\016\016 ft/min\017\030" - ,scooterResidualCapacity,scooterTemperatureLocal,scooterSpeedLocal); - } - // connection active - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < textSize -2; i++) - { - if(text[i] == '\030') - text[i] = '\031'; - } - } - // write data - GFX_write_string(&FontT42, &t7cY0free, text, 1); - - // age stamp - if(ageInMilliSeconds < 9999) - { - t7cY0free.WindowY0 -= 30; - snprintf(text,60, - "\021\001%u" - ,ageInMilliSeconds); - GFX_write_string(&FontT24, &t7cY0free, text, 0); - } -} - - -void t7_scooter_May2016_01(void) -{ - float scooterTemperature; - uint16_t scooterDrehzhl; - uint8_t scooterResidualCapacity; - float scooterSpeed; - float scooterVoltage; - uint8_t scooterCurrent; -// uint16_t scooterWattHours; - uint16_t bkpX0, bkpX1; - - uint16_t ageInMilliSeconds; - uint8_t textSize; -// old scooterStatus = bC_getData(0,&scooterTemperature,&scooterDrehzhl,&scooterResidualCapacity); - - scooterDrehzhl = stateUsed->lifeData.scooterDrehzahl; - scooterTemperature = ((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f; - scooterResidualCapacity = stateUsed_scooterRemainingBattCapacity(); - - scooterVoltage = stateUsed->lifeData.scooterSpannung; - scooterCurrent = stateUsed->lifeData.scooterAmpere; -// scooterWattHours = stateUsed->lifeData.scooterWattstunden; - - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - - scooterSpeed = scooterDrehzhl * 80 / 3300; - - char text[256+60]; - - t7cY0free.WindowLineSpacing = (28 + 48 + 14)/2; - t7cY0free.WindowY0 = t7cH.WindowY0 - 5 - 5 * t7cY0free.WindowLineSpacing; - t7cY0free.WindowNumberOfTextLines = 6; - - t7cY0free.WindowY0 -= 7; - - bkpX0 = t7cY0free.WindowX0; - bkpX1 = t7cY0free.WindowX1; - t7cY0free.WindowX0 = 430; - - textSize = snprintf(text,120, - "\022\016\016" - "%%" - "\n\r" - "celsius" - "\n\r" - "rpm" - "\n\r" - "m/min" - "\n\r" - "Ampere" - "\n\r" - "Volt" -// "\n\r" -// "Wh" - ); - GFX_write_string(&FontT42, &t7cY0free, text, 1); - - t7cY0free.WindowX0 = bkpX0; - t7cY0free.WindowX1 = 420; - - textSize = snprintf(text,120, - "\030" - "\002" - "%0u" - "\n\r" - "\002" - "%0.0f" - "\n\r" - "\002" - "%0u" - "\n\r" - "\002" - "%0.0f" - "\n\r" - "\002" - "%0u" - "\n\r" - "\002" - "%0.1f" -// "\n\r" -// "%0u" "\022\016\016 Wh\017\030" - ,scooterResidualCapacity,scooterTemperature,scooterDrehzhl,scooterSpeed - ,scooterCurrent,scooterVoltage);//,scooterWattHours); - - if((ageInMilliSeconds > 1500) || (stateUsed->lifeData.scooterType == 0xFF)) - { - for(int i=0; i < textSize -2; i++) - { - if(text[i] == '\030') - text[i] = '\031'; - } - } - GFX_write_string(&FontT42, &t7cY0free, text, 1); - - t7cY0free.WindowX0 = bkpX0; - t7cY0free.WindowX1 = bkpX1; - - t7cY0free.WindowY0 -= 30; - snprintf(text,60, - "\021\001%u" - ,ageInMilliSeconds); - GFX_write_string(&FontT24, &t7cY0free, text, 0); - -} - -void t7_scooter_alt(void) -{ - float scooterTemperature; - uint16_t scooterDrehzhl; - uint8_t scooterStatus; - uint8_t scooterResidualCapacity; - float scooterSpeed; - uint16_t ageInMilliSeconds; - uint8_t textSize; -// old scooterStatus = bC_getData(0,&scooterTemperature,&scooterDrehzhl,&scooterResidualCapacity); - - scooterStatus = 2;//BC_CONNECTED; - scooterDrehzhl = stateUsed->lifeData.scooterDrehzahl; - scooterTemperature = ((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f; - scooterResidualCapacity = stateUsed_scooterRemainingBattCapacity(); - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - - scooterSpeed = scooterDrehzhl * 80 / 3300; - - char text[256+60]; - uint8_t textpointer = 0; - - //float percent_N2; - //float percent_He; - //float partial_pressure_N2; - //float partial_pressure_He; - - t7cY0free.WindowLineSpacing = 28 + 48 + 14; - t7cY0free.WindowY0 = t7cH.WindowY0 - 5 - 2 * t7cY0free.WindowLineSpacing; - t7cY0free.WindowNumberOfTextLines = 3; - - text[textpointer++] = '\032'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterRestkapazitaet; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterTemperature; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterSpeed; - text[textpointer++] = 0; - - GFX_write_string(&FontT24, &t7cY0free, text, 1); - - if(scooterStatus == 2)//BC_CONNECTED) - { - t7cY0free.WindowY0 -= 52; - textSize = snprintf(text,60, - "\030" - "%0u" "\022\016\016 %%\017\030" - "\n\r" - "%0.0f\140" "\022\016\016 celsius\017\030" - "\n\r" - "%0.0f" "\022\016\016 m/min\017\030" - ,scooterResidualCapacity,scooterTemperature,scooterSpeed); - - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < textSize -2; i++) - { - if(text[i] == '\030') - text[i] = '\031'; - } - } -// snprintf(text,60,"\031%0.2f\n\r%0.2f\n\r%u",scooterWatt,scooterTemperature,scooterDrehzhl); - GFX_write_string(&FontT42, &t7cY0free, text, 1); - - t7cY0free.WindowY0 -= 30; - snprintf(text,60, - "\021\001%u" - ,ageInMilliSeconds); - GFX_write_string(&FontT24, &t7cY0free, text, 0); - - } -} /* diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/t9.c --- a/Discovery/Src/t9.c Tue Feb 19 21:48:32 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2508 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -/// -*- coding: UTF-8 -*- -/// -/// \file Discovery/Src/t9.c -/// \brief Template for screen with 4+1+4 screen layout with plugin -/// \author Heinrichs Weikamp gmbh -/// \date 23-April-2014 -/// -/// \details -/// Bonex t9 -> sp�ter auch andere Pro Anzeigen -/// Nur Tauchmodus, sonst Umschaltung t7 -/// frames used 26 for compass laufband und 23 f�r t9screen -/// -/// $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 . -////////////////////////////////////////////////////////////////////////////// - -/* Includes ------------------------------------------------------------------*/ -#include "t9.h" - -#include "data_exchange_main.h" -#include "decom.h" -#include "gfx_fonts.h" -#include "logbook_miniLive.h" -#include "math.h" -#include "tHome.h" -#include "simulation.h" -#include "timer.h" -#include "unit.h" - -/* Private function prototypes -----------------------------------------------*/ - -void t9_refresh_divemode(void); -void t9_refresh_divemode_userselected_left_lower_corner(void); -void t9_refresh_customview(void); - -void t9_draw_frame(_Bool PluginBoxHeader, _Bool LinesOnTheSides, uint8_t colorBox, uint8_t colorLinesOnTheSide); - -void t9_tissues(const SDiveState * pState); -void t9_compass(uint16_t ActualHeading, uint16_t UserSetHeading); -void t9_scooter(void); -void t9_debug(void); -void t9_SummaryOfLeftCorner(void); - -void t9_miniLiveLogProfile(void); -void t9_colorscheme_mod(char *text); - -uint8_t t9_test_customview_warnings(void); -void t9_show_customview_warnings(void); - -void t9_show_customview_warnings_surface_mode(void); - -uint8_t t9_customtextPrepare(char * text); - -/* Importend function prototypes ---------------------------------------------*/ -extern uint8_t write_gas(char *text, uint8_t oxygen, uint8_t helium); - -/* Exported variables --------------------------------------------------------*/ - -/* Private variables ---------------------------------------------------------*/ -float t9_depthLastCall[9] = { 0,0,0,0,0,0,0,0,0}; -uint8_t idt9_depthLastCall = 0; -float t9_temperatureLastCall[3] = { 0,0,0}; -uint8_t idt9_temperatureLastCall = 0; - -GFX_DrawCfgScreen t9screen; -GFX_DrawCfgScreen t9screenCompass; - -/* left 3 fields - * right 3 fields - * centered one field on top of customview, one below - * customview header + customview + warning - */ -GFX_DrawCfgWindow t9l1, t9l2, t9l3, t9l4; -GFX_DrawCfgWindow t9r1, t9r2, t9r3, t9r4; -GFX_DrawCfgWindow t9c1, t9batt, t9c2, t9charge; -GFX_DrawCfgWindow t9cH, t9cC, t9cW, t9cY0free; -GFX_DrawCfgWindow t9pCompass; -GFX_DrawCfgWindow t9surfaceL, t9surfaceR; - -uint8_t t9_selection_custom_field = 0; -uint8_t t9_selection_customview = 1; - -typedef struct{ - uint32_t pointer; - uint32_t x0; - uint32_t y0; - uint32_t width; - uint32_t height; -} S9Background; - -S9Background t9_background = -{ - .pointer = 0, -}; - -/* Private types -------------------------------------------------------------*/ -const uint8_t t9_customviewsDiveStandard[] = -{ - CVIEW_sensors, - CVIEW_Compass, - CVIEW_Decolist, - CVIEW_Tissues, - CVIEW_Profile, - CVIEW_Gaslist, - CVIEW_sensors_mV, - CVIEW_EADTime, -// CVIEW_SummaryOfLeftCorner, da hier der scooter drin ist - CVIEW_noneOrDebug, - CVIEW_END, - CVIEW_END -}; - -const uint8_t t9_customviewsDiveScooter[] = -{ - CVIEW_Scooter, - CVIEW_sensors, - CVIEW_Compass, - CVIEW_Decolist, - CVIEW_Tissues, - CVIEW_Profile, - CVIEW_Gaslist, - CVIEW_sensors_mV, - CVIEW_EADTime, - CVIEW_SummaryOfLeftCorner, - CVIEW_noneOrDebug, - CVIEW_END, - CVIEW_END -}; - - -const uint8_t *t9_customviewsDive = t9_customviewsDiveStandard; - -#define TEXTSIZE 16 -/* offset includes line: 2 = line +1 - * box (line) is 300 px - * inside is 296 px - * left of box are 249 px ( 0..248) - * right of box are 249 px (551 .. 799) - */ - -#define CUSTOMBOX_LINE_LEFT (250) -#define CUSTOMBOX_LINE_RIGHT (549) -#define CUSTOMBOX_INSIDE_OFFSET (2) -#define CUSTOMBOX_OUTSIDE_OFFSET (2) -#define CUSTOMBOX_SPACE_INSIDE (CUSTOMBOX_LINE_RIGHT + 1 - (CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + CUSTOMBOX_INSIDE_OFFSET)) - - -/* Exported functions --------------------------------------------------------*/ - -void t9_init(void) -{ - if(getLicence() == LICENCEBONEX) - { - t9_customviewsDive = t9_customviewsDiveScooter; - } - - t9_selection_custom_field = 0; // 0 is the new scooter temperature - t9_selection_customview = t9_customviewsDive[0]; - - t9screen.FBStartAdress = 0; - t9screen.ImageHeight = 480; - t9screen.ImageWidth = 800; - t9screen.LayerIndex = 1; - - t9screenCompass.FBStartAdress = 0; - t9screenCompass.ImageHeight = 240; - t9screenCompass.ImageWidth = 1600; - t9screenCompass.LayerIndex = 0; - - t9l1.Image = &t9screen; - t9l1.WindowNumberOfTextLines = 2; - t9l1.WindowLineSpacing = 5; // Abstand von Y0 - t9l1.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster - t9l1.WindowX0 = 0; - t9l1.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET; - t9l1.WindowY1 = 479; - t9l1.WindowY0 = t9l1.WindowY1 - 119; - - t9l2.Image = &t9screen; - t9l2.WindowNumberOfTextLines = 2; - t9l2.WindowLineSpacing = 5; // Abstand von Y0 - t9l2.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster - t9l2.WindowX0 = 0; - t9l2.WindowX1 = t9l1.WindowX1; - t9l2.WindowY1 = t9l1.WindowY0 - 4; - t9l2.WindowY0 = t9l2.WindowY1 - 119; - - t9l3.Image = &t9screen; - t9l3.WindowNumberOfTextLines = 2; - t9l3.WindowLineSpacing = 5; // Abstand von Y0 - t9l3.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster - t9l3.WindowX0 = 0; - t9l3.WindowX1 = t9l1.WindowX1; - t9l3.WindowY1 = t9l2.WindowY0 - 4; - t9l3.WindowY0 = t9l3.WindowY1 - 119; - - t9l4.Image = &t9screen; - t9l4.WindowNumberOfTextLines = 2; - t9l4.WindowLineSpacing = 50; // Abstand von Y0 - t9l4.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster - t9l4.WindowX0 = 0; - t9l4.WindowX1 = t9l1.WindowX1; - t9l4.WindowY1 = t9l3.WindowY0 - 4; - t9l4.WindowY0 = 0; - - t9r1.Image = &t9screen; - t9r1.WindowNumberOfTextLines = 2; - t9r1.WindowLineSpacing = t9l1.WindowLineSpacing; - t9r1.WindowTab = 100; - t9r1.WindowX0 = 550; - t9r1.WindowX1 = 799; - t9r1.WindowY0 = t9l1.WindowY0; - t9r1.WindowY1 = 479; - - t9r2.Image = &t9screen; - t9r2.WindowNumberOfTextLines = 2; - t9r2.WindowLineSpacing = t9l2.WindowLineSpacing; - t9r2.WindowTab = 100; - t9r2.WindowX0 = 550; - t9r2.WindowX1 = 799; - t9r2.WindowY0 = t9l2.WindowY0; - t9r2.WindowY1 = t9l2.WindowY1; - - t9r3.Image = &t9screen; - t9r3.WindowNumberOfTextLines = 2; - t9r3.WindowLineSpacing = t9l3.WindowLineSpacing; - t9r3.WindowTab = 100; - t9r3.WindowX0 = 550; - t9r3.WindowX1 = 799; - t9r3.WindowY0 = t9l3.WindowY0; - t9r3.WindowY1 = t9l3.WindowY1; - - t9r4.Image = &t9screen; - t9r4.WindowNumberOfTextLines = 2; - t9r4.WindowLineSpacing = t9l4.WindowLineSpacing; - t9r4.WindowTab = 100; - t9r4.WindowX0 = 550; - t9r4.WindowX1 = 799; - t9r4.WindowY0 = t9l4.WindowY0; - t9r4.WindowY1 = t9l4.WindowY1; - - -/* - t9r3.Image = &t9screen; - t9r3.WindowNumberOfTextLines = 2; - t9r3.WindowLineSpacing = 0;//t9l3.WindowLineSpacing; - t9r3.WindowTab = 100; - t9r3.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET; - t9r3.WindowX1 = 799; - t9r3.WindowY0 = t9l3.WindowY0; - t9r3.WindowY1 = t9l3.WindowY1; -*/ - t9cC.Image = &t9screen; - t9cC.WindowNumberOfTextLines = 3; - t9cC.WindowLineSpacing = 95; // Abstand von Y0 - t9cC.WindowTab = 100; - t9cC.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9cC.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; - t9cC.WindowY0 = 90; - t9cC.WindowY1 = 434 - 95; - - t9cH.Image = &t9screen; - t9cH.WindowNumberOfTextLines = 1; - t9cH.WindowLineSpacing = 95; // Abstand von Y0 - t9cH.WindowTab = 100; - t9cH.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9cH.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; - t9cH.WindowY0 = 434 - 94; - t9cH.WindowY1 = 434; - - t9cW.Image = &t9screen; - t9cW.WindowNumberOfTextLines = 3; - t9cW.WindowLineSpacing = 95; // Abstand von Y0 - t9cW.WindowTab = 100; - t9cW.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9cW.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; - t9cW.WindowY0 = 90; - t9cW.WindowY1 = 434 - 95; - - t9cY0free.Image = &t9screen; - t9cY0free.WindowNumberOfTextLines = 1; - t9cY0free.WindowLineSpacing = 95; - t9cY0free.WindowTab = 100; - t9cY0free.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9cY0free.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; - t9cY0free.WindowY0 = 90; - t9cY0free.WindowY1 = 434 - 95; - - t9batt.Image = &t9screen; - t9batt.WindowNumberOfTextLines = 1; - t9batt.WindowLineSpacing = 10; - t9batt.WindowTab = 100; - t9batt.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; - t9batt.WindowX0 = t9batt.WindowX1 - (52+52); - t9batt.WindowY1 = 479; - t9batt.WindowY0 = t9batt.WindowY1 - 25; - - t9charge.Image = &t9screen; - t9charge.WindowNumberOfTextLines = 1; - t9charge.WindowLineSpacing = 10; - t9charge.WindowTab = 100; - t9charge.WindowX1 = t9batt.WindowX1 - 18; - t9charge.WindowX0 = t9charge.WindowX1 - 14; - t9charge.WindowY1 = 479; - t9charge.WindowY0 = t9batt.WindowY1 - 25; - - t9c1.Image = &t9screen; - t9c1.WindowNumberOfTextLines = 1; - t9c1.WindowLineSpacing = 10; - t9c1.WindowTab = 100; - t9c1.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9c1.WindowX1 = t9batt.WindowX0 - 18; - t9c1.WindowY0 = 435; - t9c1.WindowY1 = 479; - - t9c2.Image = &t9screen; - t9c2.WindowNumberOfTextLines = 1; - t9c2.WindowLineSpacing = 0; // Abstand von Y0 - t9c2.WindowTab = 100; - t9c2.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9c2.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; - t9c2.WindowY0 = 0; - t9c2.WindowY1 = 69; - - t9pCompass.Image = &t9screenCompass; - t9pCompass.WindowNumberOfTextLines = 1; - t9pCompass.WindowLineSpacing = 100; // Abstand von Y0 - t9pCompass.WindowTab = 100; - t9pCompass.WindowX0 = 0; - t9pCompass.WindowX1 = 1600-1; - t9pCompass.WindowY0 = 0; - t9pCompass.WindowY1 = 100-1; - - init_t9_compass(); -} - -uint8_t t9_test_customview_warnings(void) -{ - uint8_t count = 0; - - count = 0; - count += stateUsed->warnings.decoMissed; - count += stateUsed->warnings.ppO2Low; - count += stateUsed->warnings.ppO2High; - //count += stateUsed->warnings.lowBattery; - count += stateUsed->warnings.sensorLinkLost; - count += stateUsed->warnings.fallback; - return count; -} - -void t9_refresh(void) -{ - static uint8_t last_mode = MODE_SURFACE; - - SStateList status; - get_globalStateList(&status); - - if(stateUsed->mode != MODE_DIVE) - { - last_mode = MODE_SURFACE; - settingsGetPointer()->design = 7; - if(t9screen.FBStartAdress) - { - releaseFrame(23,t9screen.FBStartAdress); - t9screen.FBStartAdress = 0; - } - return; - } - - if(status.base != BaseHome) - return; - - t9screen.FBStartAdress = getFrame(23); - t9_background.pointer = 0; - - if(stateUsed->mode == MODE_DIVE) - { - if(last_mode != MODE_DIVE) - { - last_mode = MODE_DIVE; - /* lower left corner primary */ -// t9_selection_custom_field = settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary; - t9_selection_custom_field = 0; - /* custom view primary OR debug if automatic return is off */ - if((settingsGetPointer()->tX_customViewTimeout == 0) && (settingsGetPointer()->showDebugInfo)) - t9_selection_customview = CVIEW_noneOrDebug; - else - t9_selection_customview = settingsGetPointer()->tX_customViewPrimary; - } - - if(status.page == PageSurface) - set_globalState(StD); - - t9_refresh_divemode(); - } - - if(t9_background.pointer) - { - GFX_SetFrameTop(t9screen.FBStartAdress); - GFX_SetFrameBottom(t9_background.pointer,t9_background.x0 , t9_background.y0, t9_background.width, t9_background.height); - } - else - GFX_SetFramesTopBottom(t9screen.FBStartAdress, NULL,480); - - releaseAllFramesExcept(23,t9screen.FBStartAdress); -} - - -void original_t9_refresh(void) -{ - static uint8_t last_mode = MODE_SURFACE; - -// uint32_t oldScreen;//, oldPlugin; - SStateList status; - get_globalStateList(&status); - - - if(stateUsed->mode == MODE_DIVE) - { - if(last_mode != MODE_DIVE) - { - last_mode = MODE_DIVE; - /* lower left corner primary */ - t9_selection_custom_field = settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary; - /* custom view primary OR debug if automatic return is off */ - if((settingsGetPointer()->tX_customViewTimeout == 0) && (settingsGetPointer()->showDebugInfo)) - t9_selection_customview = CVIEW_noneOrDebug; - else - t9_selection_customview = settingsGetPointer()->tX_customViewPrimary; - } - if(status.page == PageSurface) - set_globalState(StD); - - t9_refresh_divemode(); - } - else - { - if(last_mode != MODE_SURFACE) - { - last_mode = MODE_SURFACE; -// CHANGE HERE - } - if(status.page == PageDive) - set_globalState(StS); - } - - if(status.base == BaseHome) - { - if(t9_background.pointer) - { - GFX_SetFrameTop(t9screen.FBStartAdress); - GFX_SetFrameBottom(t9_background.pointer,t9_background.x0 , t9_background.y0, t9_background.width, t9_background.height); - } - else - GFX_SetFramesTopBottom(t9screen.FBStartAdress, NULL,480); - } - - releaseAllFramesExcept(23,t9screen.FBStartAdress); -} - -/* Private functions ---------------------------------------------------------*/ - - -void t9_show_customview_warnings(void) -{ - char text[256]; - uint8_t textpointer, lineFree; - - text[0] = '\025'; - text[1] = '\f'; - text[2] = '\001'; - text[3] = TXT_Warning; - text[4] = 0; - GFX_write_string(&FontT42,&t9cH,text,0); - - textpointer = 0; - lineFree = 5; - - if(lineFree && stateUsed->warnings.decoMissed) - { - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_WarnDecoMissed; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer] = 0; - lineFree--; - } - - if(lineFree && stateUsed->warnings.fallback) - { - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_WarnFallback; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer] = 0; - lineFree--; - } - - if(lineFree && stateUsed->warnings.ppO2Low) - { - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_WarnPPO2Low; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer] = 0; - lineFree--; - } - - if(lineFree && stateUsed->warnings.ppO2High) - { - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_WarnPPO2High; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer] = 0; - lineFree--; - } - - if(lineFree && stateUsed->warnings.sensorLinkLost) - { - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_WarnSensorLinkLost; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer] = 0; - lineFree--; - } -/* - if(lineFree && stateUsed->warnings.lowBattery) - { - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_WarnBatteryLow; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer] = 0; - lineFree--; - } -*/ - GFX_write_string(&FontT48,&t9cW,text,1); -} - - -void t9_set_customview_to_primary(void) -{ - if(stateUsed->mode == MODE_DIVE) - t9_selection_customview = settingsGetPointer()->tX_customViewPrimary; -} - - -void t9_change_customview(void) -{ - const uint8_t *pViews; - - if(stateUsed->mode == MODE_DIVE) - { - pViews = t9_customviewsDive; - while((*pViews != CVIEW_END) && (*pViews != t9_selection_customview)) - {pViews++;} - - if(*pViews < CVIEW_END) - pViews++; - else - { - if(stateUsed->mode == MODE_DIVE) - pViews = t9_customviewsDive; - } - t9_selection_customview = *pViews; - } - else - { - t9_selection_customview = 0; - } -// if((*pViews == CVIEW_Scooter) && (getLicence() != LICENCEBONEX)) -// pViews++; - - -} - - -uint8_t t9_get_length_of_customtext(void) -{ - uint8_t i = 0; - settingsGetPointer()->customtext[60-1] = 0; - while(settingsGetPointer()->customtext[i] > 0) - i++; - return i; -} - - -void t9_refresh_customview(void) -{ - if((t9_selection_customview == CVIEW_Scooter) && (getLicence() != LICENCEBONEX)) - t9_change_customview(); - if((t9_selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0)) - t9_change_customview(); - if((t9_selection_customview == CVIEW_sensors_mV) &&(stateUsed->diveSettings.ccrOption == 0)) - t9_change_customview(); - if((t9_selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0)) - t9_change_customview(); - - char text[256]; - uint16_t textpointer = 0; - int16_t start; -// int16_t shiftWindowY0; - RTC_DateTypeDef Sdate; - RTC_TimeTypeDef Stime; - float fPpO2limitHigh, fPpO2limitLow, fPpO2ofGasAtThisDepth; // CVIEW_Gaslist - const SGasLine * pGasLine; // CVIEW_Gaslist - uint8_t oxygen, helium; // CVIEW_Gaslist - float depth, surface, fraction_nitrogen, fraction_helium, ead, end; // CVIEW_EADTime - - switch(t9_selection_customview) - { - case CVIEW_noneOrDebug: - if(settingsGetPointer()->showDebugInfo) - { - // header - strcpy(text,"\032\f\001Debug"); - GFX_write_string(&FontT42,&t9cH,text,0); - // content - t9_debug(); - } - break; - case CVIEW_SummaryOfLeftCorner: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_Summary); - GFX_write_string(&FontT42,&t9cH,text,0); - // content - t9_SummaryOfLeftCorner(); - break; - case CVIEW_Scooter: - snprintf(text,100,"\032\f\001Scooter"); - GFX_write_string(&FontT42,&t9cH,text,0); - t9_scooter(); - break; - case CVIEW_Gaslist: - // a lot of code taken from tMenuGas.c - // header - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_Gaslist); - GFX_write_string(&FontT42,&t9cH,text,0); - // content - textpointer = 0; - t9cY0free.WindowY0 = t9cC.WindowY0 - 10; - t9cY0free.WindowLineSpacing = 48+9; - t9cY0free.WindowNumberOfTextLines = 5; // NUM_GASES == 5 - t9cY0free.WindowTab = 420; - - pGasLine = settingsGetPointer()->gas; - if(actualLeftMaxDepth(stateUsed)) - fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_deco) / 100; - else - fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_std) / 100; - fPpO2limitLow = (float)(settingsGetPointer()->ppO2_min) / 100; - for(int gasId=1;gasId<=NUM_GASES;gasId++) - { - textpointer = 0; - fPpO2ofGasAtThisDepth = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * pGasLine[gasId].oxygen_percentage / 100; - if(pGasLine[gasId].note.ub.active == 0) - strcpy(&text[textpointer++],"\021"); - else if((fPpO2ofGasAtThisDepth > fPpO2limitHigh) || (fPpO2ofGasAtThisDepth < fPpO2limitLow)) - strcpy(&text[textpointer++],"\025"); - else - strcpy(&text[textpointer++],"\030"); - - text[textpointer++] = ' '; - oxygen = pGasLine[gasId].oxygen_percentage; - helium = pGasLine[gasId].helium_percentage; - textpointer += write_gas(&text[textpointer], oxygen, helium); - // Wechseltiefe - if(pGasLine[gasId].depth_meter) - { - - } - GFX_write_string(&FontT42, &t9cY0free, text, gasId); - } - break; - case CVIEW_EADTime: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_Info ); - GFX_write_string(&FontT42,&t9cH,text,0); - textpointer = 0; - - t9cY0free.WindowY0 = t9cC.WindowY0 - 10; - t9cY0free.WindowLineSpacing = 48; - t9cY0free.WindowNumberOfTextLines = 6; - - // time - snprintf(text,100,"\032\001%c%c",TXT_2BYTE,TXT2BYTE_Clock ); - GFX_write_string(&FontT42, &t9cY0free, text, 1); - - translateDate(stateRealGetPointer()->lifeData.dateBinaryFormat, &Sdate); - translateTime(stateRealGetPointer()->lifeData.timeBinaryFormat, &Stime); - if(Stime.Seconds % 2) - textpointer += snprintf(&text[textpointer],100,"\030\001%02d:%02d",Stime.Hours,Stime.Minutes); - else - textpointer += snprintf(&text[textpointer],100,"\030\001%02d\031:\030%02d",Stime.Hours,Stime.Minutes); - GFX_write_string(&FontT42, &t9cY0free, text, 2); - - // EAD / END - // The equivalent air depth can be calculated for depths in metres as follows: - // EAD = (Depth + 10) � Fraction of N2 / 0.79 - 10 (wikipedia) - // The equivalent narcotic depth can be calculated for depths in metres as follows: - // END = (Depth + 10) � (1 - Fraction of helium) - 10 (wikipedia) - decom_get_inert_gases((float)stateUsed->lifeData.pressure_ambient_bar,&(stateUsed->lifeData.actualGas),&fraction_nitrogen,&fraction_helium); - depth = stateUsed->lifeData.pressure_ambient_bar; - surface = stateUsed->lifeData.pressure_surface_bar; - ead = 10.f * ((depth * fraction_nitrogen/0.79f) - surface); - end = 10.0f * ((depth * (1.f - fraction_helium)) - surface); - if(ead < 0) - ead = 0; - if(end < 0) - end = 0; - - snprintf(text,100,"\032\001EAD"); - GFX_write_string(&FontT42, &t9cY0free, text, 3); - snprintf(text,100,"\030\001%01.1fm", ead); - GFX_write_string(&FontT42, &t9cY0free, text, 4); - - snprintf(text,100,"\032\001END"); - GFX_write_string(&FontT42, &t9cY0free, text, 5); - snprintf(text,100,"\030\001%01.1fm", end); - GFX_write_string(&FontT42, &t9cY0free, text, 6); - break; - case CVIEW_Profile: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_Profile); - GFX_write_string(&FontT42,&t9cH,text,0); - textpointer = 0; - t9_miniLiveLogProfile(); - break; - case CVIEW_Tissues: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_Tissues); - GFX_write_string(&FontT42,&t9cH,text,0); - textpointer = 0; - t9_tissues(stateUsed); - break; - case CVIEW_sensors: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_O2monitor); - GFX_write_string(&FontT42,&t9cH,text,0); - textpointer = 0; - text[textpointer++] = '\030'; // main color - for(int i=0;i<3;i++) - { - if(stateUsed->diveSettings.ppo2sensors_deactivated & (1<warnings.sensorOutOfBounds[i]) - text[textpointer++] = '\025'; // Warning Red - textpointer += snprintf(&text[textpointer],100,"\001%01.2f\n\r\030",stateUsed->lifeData.ppO2Sensor_bar[i]); - } - } - t9cC.WindowLineSpacing = 95; - t9cC.WindowNumberOfTextLines = 3; - text[textpointer] = 0; - GFX_write_string(&FontT105,&t9cC,text,1); - break; - case CVIEW_sensors_mV: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE,TXT2BYTE_O2voltage); - GFX_write_string(&FontT42,&t9cH,text,0); - textpointer = 0; - text[textpointer++] = '\030'; - for(int i=0;i<3;i++) - { - if(stateUsed->diveSettings.ppo2sensors_deactivated & (1<warnings.sensorOutOfBounds[i]) - text[textpointer++] = '\025'; - textpointer += snprintf(&text[textpointer],100,"\001%01.1f mV\n\r\030",(stateUsed->lifeData.sensorVoltage_mV[i])); - } - } - t9cC.WindowLineSpacing = 95; - t9cC.WindowNumberOfTextLines = 3; - text[textpointer] = 0; - GFX_write_string(&FontT48,&t9cC,text,1); - break; - case CVIEW_Compass: - default: - snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE, TXT2BYTE_Compass); - GFX_write_string(&FontT42,&t9cH,text,0); - t9_compass((uint16_t)stateUsed->lifeData.compass_heading, stateUsed->diveSettings.compassHeading); - t9cY0free.WindowY0 = 230; - t9cY0free.WindowX0 += 15; - snprintf(text,100,"\030\001%03i`",(uint16_t)stateUsed->lifeData.compass_heading); - GFX_write_string(&FontT54,&t9cY0free,text,0); - t9cY0free.WindowX0 -= 15; - break; - case CVIEW_Decolist: - snprintf(text,100,"\032\f\001%c%c", TXT_2BYTE, TXT2BYTE_Decolist); - GFX_write_string(&FontT42,&t9cH,text,0); - - const SDecoinfo * pDecoinfo; - uint8_t depthNext, depthLast, depthSecond, depthInc; - - if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) - pDecoinfo = &stateUsed->decolistBuehlmann; - else - pDecoinfo = &stateUsed->decolistVPM; - - depthLast = (uint8_t)(stateUsed->diveSettings.last_stop_depth_bar * 10); - depthSecond = (uint8_t)(stateUsed->diveSettings.input_second_to_last_stop_depth_bar * 10); - depthInc = (uint8_t)(stateUsed->diveSettings.input_next_stop_increment_depth_bar * 10); - - for(start=DECOINFO_STRUCT_MAX_STOPS-1; start>0; start--) - if(pDecoinfo->output_stop_length_seconds[start]) break; - start -= 6; - if(start < 0) start = 0; - - textpointer = 0; - for(int i=start;i<6+start;i++) - { - if(i == 0) - depthNext = depthLast; - else - depthNext = depthSecond + (( i - 1 )* depthInc); - - if(pDecoinfo->output_stop_length_seconds[i]) - textpointer += snprintf(&text[textpointer],20,"\030\034 %2u\016\016m\017%3i'\n\r",depthNext, (pDecoinfo->output_stop_length_seconds[i]+59)/60); - else - textpointer += snprintf(&text[textpointer],20,"\031\034 %2u\016\016m\017\n\r",depthNext); - if(textpointer > 200) break; - } - t9cY0free.WindowY0 = t9cC.WindowY0 - 10; - t9cY0free.WindowLineSpacing = 48; - t9cY0free.WindowNumberOfTextLines = 6; - GFX_write_string(&FontT42, &t9cY0free, text, 1); - break; - } -} - -/* DIVE MODE - */ -void t9_refresh_divemode(void) -{ - char TextL1[TEXTSIZE]; - char TextL2[TEXTSIZE]; - - char TextR1[TEXTSIZE]; - char TextR2[TEXTSIZE]; - char TextR3[TEXTSIZE]; - - char TextC1[2*TEXTSIZE]; - char TextC2[TEXTSIZE]; - uint8_t textPointer; - - point_t start, stop; - uint8_t color; - int textlength; - - uint16_t nextstopLengthSeconds = 0; - uint8_t nextstopDepthMeter = 0; - uint8_t oxygen_percentage = 0; - SDivetime Divetime = {0,0,0, 0}; - SDivetime SafetyStopTime = {0,0,0,0}; - SDivetime TimeoutTime = {0,0,0,0}; - uint8_t customview_warnings = 0; - const SDecoinfo * pDecoinfo; - - Divetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; - Divetime.Minutes = Divetime.Total / 60; - Divetime.Seconds = Divetime.Total - ( Divetime.Minutes * 60 ); - - SafetyStopTime.Total = timer_Safetystop_GetCountDown(); - SafetyStopTime.Minutes = SafetyStopTime.Total / 60; - SafetyStopTime.Seconds = SafetyStopTime.Total - (SafetyStopTime.Minutes * 60); - - TimeoutTime.Total = settingsGetPointer()->timeoutDiveReachedZeroDepth - stateUsed->lifeData.counterSecondsShallowDepth; - if(TimeoutTime.Total > settingsGetPointer()->timeoutDiveReachedZeroDepth) - { - TimeoutTime.Total = 0; - } - TimeoutTime.Minutes = TimeoutTime.Total / 60; - TimeoutTime.Seconds = TimeoutTime.Total - (TimeoutTime.Minutes * 60); - - if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) - pDecoinfo = &stateUsed->decolistBuehlmann; - else - pDecoinfo = &stateUsed->decolistVPM; - - if(pDecoinfo->output_time_to_surface_seconds) - { - tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); - } - else - { - nextstopDepthMeter = 0; - nextstopLengthSeconds = 0; - } - - /* depth */ - float depth = 0; - float depthThisCall = unit_depth_float(stateUsed->lifeData.depth_meter); - if(is_stateUsedSetToSim()) - { - depth = (depthThisCall + t9_depthLastCall[0] + t9_depthLastCall[1] + t9_depthLastCall[2] + t9_depthLastCall[3] + t9_depthLastCall[4] + t9_depthLastCall[5] + t9_depthLastCall[6] + t9_depthLastCall[7] + t9_depthLastCall[8]) / 10.0f; - - idt9_depthLastCall++; - if(idt9_depthLastCall >= 9) - idt9_depthLastCall = 0; - t9_depthLastCall[idt9_depthLastCall] = depthThisCall; - } - else - { - depth = (depthThisCall + t9_depthLastCall[0] + t9_depthLastCall[1] + t9_depthLastCall[2]) / 4.0f; - - idt9_depthLastCall++; - if(idt9_depthLastCall >= 3) - idt9_depthLastCall = 0; - t9_depthLastCall[idt9_depthLastCall] = depthThisCall; - } - - if(depth <= 0.3f) - depth = 0; - - snprintf(TextL1,TEXTSIZE,"\032\f%c",TXT_Depth); - GFX_write_string(&FontT24,&t9l2,TextL1,0); - - if( depth < 100) - snprintf(TextL1,TEXTSIZE,"\020%01.1f",depth); - else - snprintf(TextL1,TEXTSIZE,"\020%01.0f",depth); - - t9_colorscheme_mod(TextL1); - GFX_write_string(&FontT105,&t9l2,TextL1,1); - - /* max depth */ - snprintf(TextL2,TEXTSIZE,"\032\f%c",TXT_MaxDepth); - GFX_write_string(&FontT24,&t9l3,TextL2,0); - - if(unit_depth_float(stateUsed->lifeData.max_depth_meter) < 100) - snprintf(TextL2,TEXTSIZE,"\020%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); - else - snprintf(TextL2,TEXTSIZE,"\020%01.0f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); - - t9_colorscheme_mod(TextL2); - GFX_write_string(&FontT105,&t9l3,TextL2,1); - - /* ascentrate graph */ - if(stateUsed->lifeData.ascent_rate_meter_per_min > 0) - { - start.y = t9l1.WindowY0 - 1; - for(int i = 0; i<4;i++) - { - start.y += 5*6; - stop.y = start.y; - start.x = CUSTOMBOX_LINE_LEFT - 1; - stop.x = start.x - 17; - GFX_draw_line(&t9screen, start, stop, 0); -// start.x = CUSTOMBOX_LINE_RIGHT + 2; old right too -// stop.x = start.x + 17; -// GFX_draw_line(&t9screen, start, stop, 0); - } - // new thick bar design Sept. 2015 - start.x = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET - 3 - 5; - stop.x = start.x; - start.y = t9l1.WindowY0 - 1; - stop.y = start.y + (uint16_t)(stateUsed->lifeData.ascent_rate_meter_per_min * 6); - stop.y -= 3; // wegen der Liniendicke von 12 anstelle von 9 - if(stop.y >= 470) - stop.y = 470; - start.y += 7; // starte etwas weiter oben - if(stateUsed->lifeData.ascent_rate_meter_per_min <= 10) - color = CLUT_EverythingOkayGreen; - else - if(stateUsed->lifeData.ascent_rate_meter_per_min <= 15) - color = CLUT_WarningYellow; - else - color = CLUT_WarningRed; - - GFX_draw_thick_line(12,&t9screen, start, stop, color); - } - snprintf(TextL2,TEXTSIZE,"\f%.1f m/min",stateUsed->lifeData.ascent_rate_meter_per_min); - - /* divetime */ - if(stateUsed->lifeData.counterSecondsShallowDepth) - { - snprintf(TextR1,TEXTSIZE,"\f\002\136 %u:%02u",TimeoutTime.Minutes, TimeoutTime.Seconds); - GFX_write_string(&FontT24,&t9r2,TextR1,0); - } - else - { - snprintf(TextR1,TEXTSIZE,"\032\f\002%c",TXT_Divetime); - GFX_write_string(&FontT24,&t9r2,TextR1,0); - } - - if(Divetime.Minutes < 1000) - snprintf(TextR1,TEXTSIZE,"\020\016\002%u:%02u",Divetime.Minutes, Divetime.Seconds); - else - snprintf(TextR1,TEXTSIZE,"\020\016\002%u'",Divetime.Minutes); - t9_colorscheme_mod(TextR1); - GFX_write_string(&FontT105,&t9r2,TextR1,1); - - /* next deco stop */ - if(nextstopDepthMeter) - { - snprintf(TextR2,TEXTSIZE,"\032\f\002%c",TXT_Decostop); - GFX_write_string(&FontT24,&t9r3,TextR2,0); - textlength = snprintf(TextR2,TEXTSIZE,"\020\002%um %u'",nextstopDepthMeter,(nextstopLengthSeconds+59)/60); - t9_colorscheme_mod(TextR2); - if(time_elapsed_ms(pDecoinfo->tickstamp, HAL_GetTick()) > MAX_AGE_DECOINFO_MS) - TextR2[0] = '\021'; - if(textlength <= 8) - GFX_write_string(&FontT105,&t9r3,TextR2,1); - else - GFX_write_string(&FontT54,&t9r3,TextR2,1); - } - else - if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit())) - { - snprintf(TextR2,TEXTSIZE,"\032\f\002%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2); - GFX_write_string(&FontT24,&t9r3,TextR2,0); - snprintf(TextR2,TEXTSIZE,"\020\016\002%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds); - t9_colorscheme_mod(TextR2); - GFX_write_string(&FontT105,&t9r3,TextR2,1); - } - - /* tts - option 1 - * ndl - option 2 - * empty - option 3 */ - if(pDecoinfo->output_time_to_surface_seconds) - { - snprintf(TextR3,TEXTSIZE,"\032\f\002%c",TXT_TTS); - GFX_write_string(&FontT24,&t9r4,TextR3,0); - if(pDecoinfo->output_time_to_surface_seconds < 1000 * 60) - snprintf(TextR3,TEXTSIZE,"\020\002%i'",(pDecoinfo->output_time_to_surface_seconds + 30)/ 60); - else - snprintf(TextR3,TEXTSIZE,"\020\002%ih",pDecoinfo->output_time_to_surface_seconds / 3600); - t9_colorscheme_mod(TextR3); - if(time_elapsed_ms(pDecoinfo->tickstamp, HAL_GetTick()) > MAX_AGE_DECOINFO_MS) - TextR2[0] = '\021'; - GFX_write_string(&FontT105,&t9r4,TextR3,0); - } - else - if(pDecoinfo->output_ndl_seconds) - { - snprintf(TextR3,TEXTSIZE,"\032\f\002%c",TXT_Nullzeit); - GFX_write_string(&FontT24,&t9r4,TextR3,0); - if(pDecoinfo->output_ndl_seconds < 1000 * 60) - snprintf(TextR3,TEXTSIZE,"\020\002%i'",pDecoinfo->output_ndl_seconds/60); - else - snprintf(TextR3,TEXTSIZE,"\020\002%ih",pDecoinfo->output_ndl_seconds/3600); - t9_colorscheme_mod(TextR3); - if(time_elapsed_ms(pDecoinfo->tickstamp, HAL_GetTick()) > MAX_AGE_DECOINFO_MS) - TextR2[0] = '\021'; - GFX_write_string(&FontT105,&t9r4,TextR3,0); - } - - uint16_t scooterSpeedLocal; - uint8_t scooterResidualCapacity; - - scooterSpeedLocal = unit_speed_integer(stateUsed->lifeData.scooterSpeed); - scooterResidualCapacity = stateUsed_scooterRemainingBattCapacity(); - - /* scooter global for both */ - uint16_t ageInMilliSeconds; - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - - /* scooter battery */ - snprintf(TextR1,TEXTSIZE,"\032\f\002%c%c",TXT_2BYTE, TXT2BYTE_ScooterRestkapazitaet); - GFX_write_string(&FontT24,&t9r1,TextR1,0); - snprintf(TextR3,TEXTSIZE,"\020\002%u\016\016%%\017",scooterResidualCapacity); - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < TEXTSIZE -2; i++) - { - if(TextR3[i] == '\020') - TextR3[i] = '\031'; - } - } - else - t9_colorscheme_mod(TextR3); - GFX_write_string(&FontT105,&t9r1,TextR3,1); - - /* scooter speed */ - textlength = snprintf(TextR3,TEXTSIZE-7,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_ScooterSpeed); - if(settingsGetPointer()->nonMetricalSystem == 0) - { - snprintf(&TextR3[textlength],8," m/min"); - } - else - { - snprintf(&TextR3[textlength],8," ft/min"); - } - GFX_write_string(&FontT24,&t9l1,TextR3,0); - snprintf(TextR3,TEXTSIZE,"\020%u",scooterSpeedLocal); - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < TEXTSIZE -2; i++) - { - if(TextR3[i] == '\020') - TextR3[i] = '\031'; - } - } - else - t9_colorscheme_mod(TextR3); - GFX_write_string(&FontT105,&t9l1,TextR3,1); - - - - /* Menu Selection (and gas mix) */ - if(get_globalState() == StDMGAS) - { - textPointer = 0; - TextR1[textPointer++] = '\a'; -// TextR1[textPointer++] = '\f'; - TextR1[textPointer++] = '\001'; - TextR1[textPointer++] = ' '; - textPointer += tHome_gas_writer(stateUsed->diveSettings.gas[actualBetterGasId()].oxygen_percentage,stateUsed->diveSettings.gas[actualBetterGasId()].helium_percentage,&TextR1[textPointer]); - TextR1[textPointer++] = '?'; - TextR1[textPointer++] = ' '; - TextR1[textPointer++] = 0; - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - } - else - if(get_globalState() == StDMSPT) - { - textPointer = 0; - TextR1[textPointer++] = '\a'; - TextR1[textPointer++] = '\001'; - TextR1[textPointer++] = ' '; - textPointer += snprintf(&TextR1[textPointer],5,"%f01.2",((float)(stateUsed->diveSettings.setpoint[actualBetterSetpointId()].setpoint_cbar))/100); - TextR1[textPointer++] = '?'; - TextR1[textPointer++] = ' '; - TextR1[textPointer++] = 0; - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - } - else - if(get_globalState() == StDMENU) - { - snprintf(TextR1,TEXTSIZE,"\a\001%c%c", TXT_2BYTE, TXT2BYTE_DiveMenuQ); - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - } - else - if(get_globalState() == StDSIM1) - { - snprintf(TextR1,TEXTSIZE,"\a\001%c%c", TXT_2BYTE, TXT2BYTE_DiveQuitQ); - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - } - else - if(get_globalState() == StDSIM2) - { - snprintf(TextR1,TEXTSIZE,"\a\001" " Sim:-1m "); - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - snprintf(TextR1,TEXTSIZE,"\a\f %u m",simulation_get_aim_depth()); - GFX_write_string_color(&FontT42,&t9l1,TextR1,0,CLUT_WarningYellow); - - } - else - if(get_globalState() == StDSIM3) - { - snprintf(TextR1,TEXTSIZE,"\a\001" " Sim:+1m "); - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - snprintf(TextR1,TEXTSIZE,"\a\f %u m",simulation_get_aim_depth()); - GFX_write_string_color(&FontT42,&t9l1,TextR1,0,CLUT_WarningYellow); - } - else - if(get_globalState() == StDSIM4) - { - snprintf(TextR1,TEXTSIZE,"\a\001" " Sim:+5' "); - GFX_write_string_color(&FontT48,&t9c2,TextR1,0,CLUT_WarningYellow); - snprintf(TextR1,TEXTSIZE,"\a\f %u m",simulation_get_aim_depth()); - GFX_write_string_color(&FontT42,&t9l1,TextR1,0,CLUT_WarningYellow); - } - else - { - /* gas mix */ - oxygen_percentage = 100; - oxygen_percentage -= stateUsed->lifeData.actualGas.nitrogen_percentage; - oxygen_percentage -= stateUsed->lifeData.actualGas.helium_percentage; - - textPointer = 0; - TextC2[textPointer++] = '\020'; - if(stateUsed->warnings.betterGas && warning_count_high_time) - { - TextC2[textPointer++] = '\a'; - } - else - { - float fPpO2limitHigh, fPpO2now; - - if(actualLeftMaxDepth(stateUsed)) - fPpO2limitHigh = settingsGetPointer()->ppO2_max_deco; - else - fPpO2limitHigh = settingsGetPointer()->ppO2_max_std; - - fPpO2now = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * oxygen_percentage; - - if((fPpO2now > fPpO2limitHigh) || (fPpO2now < (float)(settingsGetPointer()->ppO2_min))) - TextC2[textPointer++] = '\025'; - } - TextC2[textPointer++] = '\002'; - textPointer += tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&TextC2[textPointer]); - - if(stateUsed->warnings.betterGas && warning_count_high_time) - { - if(TextC2[0] == '\020') - { - TextC2[0] = '\004'; // NOP - } - GFX_write_string_color(&FontT48,&t9c2,TextC2,0,CLUT_WarningYellow); - } - else - { - t9_colorscheme_mod(TextC2); - GFX_write_string(&FontT48,&t9c2,TextC2,0); // T54 has only numbers - } - - if(stateUsed->diveSettings.ccrOption) - { - if(stateUsed->diveSettings.diveMode == DIVEMODE_CCR) - { - snprintf(TextC2,TEXTSIZE,"\020%01.2f",stateUsed->lifeData.ppO2); - if(stateUsed->warnings.betterSetpoint && warning_count_high_time && (stateUsed->diveSettings.diveMode == DIVEMODE_CCR)) - { - TextC2[0] = '\a'; // inverse instead of color \020 - GFX_write_string_color(&FontT48,&t9c2,TextC2,0,CLUT_WarningYellow); - } - else - { - t9_colorscheme_mod(TextC2); - GFX_write_string(&FontT48,&t9c2,TextC2,0); - } - } - } - else if(settingsGetPointer()->alwaysShowPPO2) - { - snprintf(TextC2,TEXTSIZE,"\020%01.2f",stateUsed->lifeData.ppO2); - t9_colorscheme_mod(TextC2); - GFX_write_string(&FontT48,&t9c2,TextC2,0); - } - } - - /* algorithm, ccr, bailout and battery */ - /* and permanent warnings (CNS) */ - - if((stateUsed->warnings.cnsHigh) && display_count_high_time) - { - TextC2[0] = '\f'; - TextC2[1] = TXT_2BYTE; - TextC2[2] = TXT2BYTE_WarnCnsHigh; - TextC2[3] = 0; - GFX_write_string_color(&FontT48,&t9c1,TextC2,0,CLUT_WarningRed); - } - else - { - if(stateUsed->warnings.aGf) - { - GFX_write_string_color(&FontT48,&t9c1,"\f" "aGF",0,CLUT_WarningYellow); - } - else if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) - { - GFX_write_string(&FontT48,&t9c1,"\027\f" "GF",0); - } - else - { - GFX_write_string(&FontT48,&t9c1,"\027\f" "VPM",0); - } - - if(stateUsed->diveSettings.diveMode == DIVEMODE_CCR) - GFX_write_string(&FontT24,&t9c1,"\027\f\002" "CCR",0); - // GFX_write_string(&FontT24,&t9c1,"\f\177\177\x80" "CCR",0); - else - if(stateUsed->diveSettings.ccrOption) - GFX_write_string(&FontT24,&t9c1,"\f\002\024" "Bailout",0); - // GFX_write_string(&FontT24,&t9c1,"\f\177\177\x80\024" "Bailout",0); - } - TextC1[0] = '\020'; - TextC1[1] = '3'; - TextC1[2] = '1'; - TextC1[3] = '1'; - TextC1[4] = '1'; - TextC1[5] = '1'; - TextC1[6] = '1'; - TextC1[7] = '1'; - TextC1[8] = '1'; - TextC1[9] = '1'; - TextC1[10] = '1'; - TextC1[11] = '1'; - TextC1[12] = '0'; - TextC1[13] = 0; - - for(int i=1;i<=10;i++) - { - if( stateUsed->lifeData.battery_charge > (9 * i)) - TextC1[i+1] += 1; - } - - if(stateUsed->warnings.lowBattery) - { - TextC1[0] = '\025'; - if(warning_count_high_time) - { - for(int i=2;i<=11;i++) - TextC1[i] = '1'; - } - else - { - TextC1[2] = '2'; - } - GFX_write_string(&Batt24,&t9batt,TextC1,0); - - if((stateUsed->lifeData.battery_charge > 0) && (stateUsed->lifeData.battery_charge < 140)) - { - snprintf(TextC1,16,"\004\025\f\002%u%%",(uint8_t)stateUsed->lifeData.battery_charge); - if(warning_count_high_time) - TextC1[0] = '\a'; - GFX_write_string(&FontT24,&t9batt,TextC1,0); - } - } - else - { - t9_colorscheme_mod(TextC1); - GFX_write_string(&Batt24,&t9batt,TextC1,0); - - if((stateUsed->lifeData.battery_charge > 0) && (stateUsed->lifeData.battery_charge < 140)) - { - snprintf(TextC1,16,"\020\f\002%u%%",(uint8_t)stateUsed->lifeData.battery_charge); - t9_colorscheme_mod(TextC1); - GFX_write_string(&FontT24,&t9batt,TextC1,0); - } - } - - /* customizable left lower corner */ - t9_refresh_divemode_userselected_left_lower_corner(); - - - /* customview - option 1 - * warning - option 2 */ - if(stateUsed->warnings.numWarnings) - customview_warnings = t9_test_customview_warnings(); - - t9_background.pointer = NULL; - if(customview_warnings && warning_count_high_time) - t9_show_customview_warnings(); - else - t9_refresh_customview(); - - - /* the frame */ - t9_draw_frame(1,1, CLUT_DIVE_pluginbox, CLUT_DIVE_FieldSeperatorLines); -} - - -void t9_set_field_to_primary(void) -{ - if(stateUsed->mode == MODE_DIVE) - t9_selection_custom_field = settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary; -} - - -void t9_change_field(void) -{ - const uint8_t minVal = 0; - const uint8_t maxVal = 7; - - t9_selection_custom_field++; - if(t9_selection_custom_field > maxVal) - t9_selection_custom_field = minVal; -} - - -void t9_refresh_divemode_userselected_left_lower_corner(void) -{ - // zero is scooter temperature :-) - - char headerText[10]; - char text[TEXTSIZE]; - uint8_t textpointer = 0; - _Bool tinyHeaderFont = 0; - uint8_t line = 0; - - SDivetime Stopwatch = {0,0,0,0}; - float fAverageDepth, fAverageDepthAbsolute; - const SDecoinfo * pDecoinfoStandard; - const SDecoinfo * pDecoinfoFuture; - float fCNS; - - float temperatureThisCall; - float temperature; - - float scooterTemperatureLocal; - uint16_t ageInMilliSeconds; - - if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) - { - pDecoinfoStandard = &stateUsed->decolistBuehlmann; - pDecoinfoFuture = &stateUsed->decolistFutureBuehlmann; - } - else - { - pDecoinfoStandard = &stateUsed->decolistVPM; - pDecoinfoFuture = &stateUsed->decolistFutureVPM; - } - - Stopwatch.Total = timer_Stopwatch_GetTime(); - Stopwatch.Minutes = Stopwatch.Total / 60; - Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); - fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); - fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; - - headerText[0] = '\032'; - headerText[1] = '\f'; - - switch(t9_selection_custom_field) - { - /* scooter temp. */ - case 0: - scooterTemperatureLocal = unit_temperature_float(((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f); - headerText[2] = TXT_2BYTE; - headerText[3] = TXT2BYTE_ScooterTemperature; - textpointer = snprintf(text,TEXTSIZE,"\020\016%01.1f \140",scooterTemperatureLocal); // "\016\016%01.1f `" + C or F - if(settingsGetPointer()->nonMetricalSystem == 0) - text[textpointer++] = 'C'; - else - text[textpointer++] = 'F'; - text[textpointer++] = 0; - tinyHeaderFont = 0; - // connection active - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < TEXTSIZE -2; i++) - { - if(text[i] == '\020') - text[i] = '\031'; - } - } - break; - - /* Temperature */ - case 1: - default: - // mean value - temperatureThisCall = unit_temperature_float(stateUsed->lifeData.temperature_celsius); - temperature = (temperatureThisCall + t9_temperatureLastCall[0] + t9_temperatureLastCall[1] + t9_temperatureLastCall[2]) / 4.0f; - idt9_temperatureLastCall++; - if(idt9_temperatureLastCall >= 3) - idt9_temperatureLastCall = 0; - t9_temperatureLastCall[idt9_temperatureLastCall] = temperatureThisCall; - // output - headerText[2] = TXT_Temperature; - textpointer = snprintf(text,TEXTSIZE,"\020\016%01.1f \140",temperature); // "\016\016%01.1f `" + C or F - if(settingsGetPointer()->nonMetricalSystem == 0) - text[textpointer++] = 'C'; - else - text[textpointer++] = 'F'; - text[textpointer++] = 0; - tinyHeaderFont = 0; - break; - - /* Average Depth */ - case 2: - headerText[2] = TXT_AvgDepth; - snprintf(text,TEXTSIZE,"\020%01.1f",fAverageDepthAbsolute); - break; - - /* ppO2 */ - case 3: - headerText[2] = TXT_ppO2; - snprintf(text,TEXTSIZE,"\020%01.2f",stateUsed->lifeData.ppO2); - break; - - /* Stop Uhr */ - case 4: - headerText[2] = TXT_Stopwatch; - snprintf(text,TEXTSIZE,"\020\016\016%u:%02u\n\r%01.1f",Stopwatch.Minutes, Stopwatch.Seconds,fAverageDepth); - tinyHeaderFont = 1; - line = 1; - break; - - /* Ceiling */ - case 5: - headerText[2] = TXT_Ceiling; - if(pDecoinfoStandard->output_ceiling_meter <= 99.9f) - snprintf(text,TEXTSIZE,"\020%01.1f",pDecoinfoStandard->output_ceiling_meter); - else - snprintf(text,TEXTSIZE,"\020%01.0f",pDecoinfoStandard->output_ceiling_meter); - break; - - /* Future TTS */ - case 6: - headerText[2] = TXT_FutureTTS; - snprintf(text,TEXTSIZE,"\020\016\016@+%u'\n\r" "%i' TTS",settingsGetPointer()->future_TTS, pDecoinfoFuture->output_time_to_surface_seconds / 60); - tinyHeaderFont = 1; - line = 1; - break; - - /* CNS */ - case 7: - headerText[2] = TXT_CNS; - fCNS = stateUsed->lifeData .cns; - if(fCNS > 999) - fCNS = 999; - snprintf(text,TEXTSIZE,"\020%.0f\016\016%%\017",fCNS); - break; - - /* scooter voltage*/ - case 77: // used as 7: alternative for Bonex - headerText[2] = TXT_2BYTE; - headerText[3] = TXT2BYTE_ScooterVolt; - if(stateUsed->lifeData.scooterSpannung < 99) - { - snprintf(text,TEXTSIZE,"\020\016%01.2f",stateUsed->lifeData.scooterSpannung); - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < TEXTSIZE -2; i++) - { - if(text[i] == '\020') - text[i] = '\031'; - } - } - } - else - { - text[0] = 0; - } - break; - - } - if(headerText[2] == TXT_2BYTE) - headerText[4] = 0; - else - headerText[3] = 0; - - if(!tinyHeaderFont) - GFX_write_string(&FontT24,&t9l4,headerText,0); - - t9_colorscheme_mod(text); - GFX_write_string(&FontT105,&t9l4,text,line); -} - -/* Private functions ---------------------------------------------------------*/ - -uint8_t t9_customtextPrepare(char * text) -{ - uint8_t i, j, textptr, lineCount; - char nextChar; - - textptr = 0; - lineCount = 0; - - text[textptr++] = TXT_MINIMAL; - - j = 0; - i = 0; - do - { - j += i; - i = 0; - do - { - nextChar = settingsGetPointer()->customtext[i+j]; - i++; - if((!nextChar) || (nextChar =='\n') || (nextChar =='\r')) - break; - text[textptr++] = nextChar; - } while (i < 12); - - if(!nextChar) - break; - - if(lineCount < 3) - { - text[textptr++] = '\n'; - text[textptr++] = '\r'; - } - lineCount++; - for(uint8_t k=0;k<2;k++) - { - nextChar = settingsGetPointer()->customtext[i+j+k]; - if((nextChar =='\n') || (nextChar =='\r')) - i++; - else - break; - } - - } while (lineCount < 4); - - text[textptr] = 0; - return lineCount; -} - -/* could be extended to search for \020 inside - */ -void t9_colorscheme_mod(char *text) -{ - if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard()) - { - text[0] = '\027'; - } -} - -void t9_draw_frame(_Bool PluginBoxHeader, _Bool LinesOnTheSides, uint8_t colorBox, uint8_t colorLinesOnTheSide) -{ - point_t LeftLow, WidthHeight; - point_t start, stop; - - // plugin box - LeftLow.x = CUSTOMBOX_LINE_LEFT; - WidthHeight.x = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_LINE_LEFT; - LeftLow.y = 60; - WidthHeight.y = 440 - LeftLow.y; - GFX_draw_box(&t9screen, LeftLow, WidthHeight, 1, colorBox); - - if(PluginBoxHeader) - { - // plugin box - header - start.x = CUSTOMBOX_LINE_LEFT; - stop.x = CUSTOMBOX_LINE_RIGHT; - stop.y = start.y = 440 - 60; - GFX_draw_line(&t9screen, start, stop, colorBox); - } - - if(LinesOnTheSides) - { - // aufteilung links - start.x = 0; - stop.x = CUSTOMBOX_LINE_LEFT; - stop.y = start.y = t9l1.WindowY0 - 1; - GFX_draw_line(&t9screen, start, stop, colorLinesOnTheSide); - stop.y = start.y = t9l2.WindowY0 -1; - GFX_draw_line(&t9screen, start, stop, colorLinesOnTheSide); - stop.y = start.y = t9l3.WindowY0 -1; - GFX_draw_line(&t9screen, start, stop, colorLinesOnTheSide); - - // aufteilung rechts - start.x = CUSTOMBOX_LINE_RIGHT; - stop.x = 799; - stop.y = start.y = t9l1.WindowY0 - 1; - GFX_draw_line(&t9screen, start, stop, colorLinesOnTheSide); - stop.y = start.y = t9l2.WindowY0 - 1; - GFX_draw_line(&t9screen, start, stop, colorLinesOnTheSide); - stop.y = start.y = t9l3.WindowY0 - 1; - GFX_draw_line(&t9screen, start, stop, colorLinesOnTheSide); - } -} - - -/* Compass like TCOS shellfish - * input is 0 to 359 - * 2 px / 1 degree - * Range is 148 degree with CUSTOMBOX_SPACE_INSIDE = 296 - * one side is 74 degree (less than 90 degree) - * internal 360 + 180 degree of freedom - * use positive values only, shift by 360 below 90 mid position - */ - - -point_t t9_compass_circle(uint8_t id, uint16_t degree) -{ - float fCos, fSin; - const float piMult = ((2 * 3.14159) / 360); -// const int radius[4] = {95,105,115,60}; - const int radius[4] = {95,105,115,100}; - const point_t offset = {.x = 400, .y = 250}; - - static point_t r[4][360] = { 0 }; - - if(r[0][0].y == 0) - { - for(int i=0;i<360;i++) - { - fCos = cos(i * piMult); - fSin = sin(i * piMult); - for(int j=0;j<4;j++) - { - r[j][i].x = offset.x + (int)(fSin * radius[j]); - r[j][i].y = offset.y + (int)(fCos * radius[j]); - } - } - } - if(id > 3) id = 0; - if(degree > 359) degree = 0; - return r[id][degree]; -} - -/* range should be 0 to 30 bar if 300 meter with 100% of nitrogen or helium - * T24 is 28 high -*/ -void t9_tissues(const SDiveState * pState) -{ - point_t start, change, stop; - float value; - uint16_t front, cns100pixel; - char text[256]; - uint8_t textpointer = 0; - uint8_t color; - - float percent_N2; - float percent_He; - float partial_pressure_N2; - float partial_pressure_He; - - - /* N2 */ - t9cY0free.WindowLineSpacing = 28 + 48 + 14; - t9cY0free.WindowY0 = t9cH.WindowY0 - 5 - 2 * t9cY0free.WindowLineSpacing; - t9cY0free.WindowNumberOfTextLines = 3; - - text[textpointer++] = '\030'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_Nitrogen; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_Helium; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_CNS; - text[textpointer++] = 0; - - GFX_write_string(&FontT24, &t9cY0free, text, 1); - - start.y = t9cH.WindowY0 - 5; - start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - stop.x = start.x + CUSTOMBOX_SPACE_INSIDE; - - for(int i=0;i<16;i++) - { - stop.y = start.y; - change.y = start.y; - - value = pState->lifeData.tissue_nitrogen_bar[i] - 0.7512f; - value *= 80;//20 - - if(value < 0) - front = 0; - else if(value > CUSTOMBOX_SPACE_INSIDE) - front = CUSTOMBOX_SPACE_INSIDE; - else - front = (uint16_t)value; - - change.x = start.x + front; - if(change.x != start.x) - GFX_draw_thick_line(1,&t9screen, start, change, CLUT_Font030); - if(change.x != stop.x) - GFX_draw_thick_line(1,&t9screen, change, stop, CLUT_Font031); - - start.y -= 3; - } - - /* He */ - start.y -= 28 + 14; - for(int i=0;i<16;i++) - { - stop.y = start.y; - change.y = start.y; - - value = pState->lifeData.tissue_helium_bar[i]; - value *= 80;//20 - - if(value < 0) - front = 0; - else if(value > CUSTOMBOX_SPACE_INSIDE) - front = CUSTOMBOX_SPACE_INSIDE; - else - front = (uint16_t)value; - - change.x = start.x + front; - if(change.x != start.x) - GFX_draw_thick_line(1,&t9screen, start, change, CLUT_Font030); - if(change.x != stop.x) - GFX_draw_thick_line(1,&t9screen, change, stop, CLUT_Font031); - - start.y -= 3; - } - - /* CNS == Oxygen */ - start.y -= 28 + 14; - - cns100pixel = (8 * CUSTOMBOX_SPACE_INSIDE) / 10; - value = pState->lifeData.cns; - value *= cns100pixel; - value /= 100; - - if(value < 0) - front = 0; - else if(value > CUSTOMBOX_SPACE_INSIDE) - front = CUSTOMBOX_SPACE_INSIDE; - else - front = (uint16_t)value; - - if(pState->lifeData.cns < 95) - color = CLUT_Font030; - else if(pState->lifeData.cns < 100) - color = CLUT_WarningYellow; - else - color = CLUT_WarningRed; - - for(int i=0;i<16;i++) - { - stop.y = start.y; - change.y = start.y; - - change.x = start.x + front; - if(change.x != start.x) - GFX_draw_thick_line(1,&t9screen, start, change, color); - if(change.x != stop.x) - GFX_draw_thick_line(1,&t9screen, change, stop, CLUT_Font031); - - start.y -= 3; - } - - /* where is the onload/offload limit for N2 and He */ - decom_get_inert_gases(pState->lifeData.pressure_ambient_bar, &pState->lifeData.actualGas, &percent_N2, &percent_He); - partial_pressure_N2 = (pState->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * percent_N2; - partial_pressure_He = (pState->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * percent_He; - - // Nitrogen vertical bar - start.y = t9cH.WindowY0 + 1 - 5; - stop.y = start.y - (3 * 15) - 1; - if((percent_N2 > 0) && (partial_pressure_N2 > 0.8f))//(0.8f + 0.5f))) - { - value = partial_pressure_N2; - value *= 80;//20 - - if(value < 0) - front = 3; - else if(value + 5 > CUSTOMBOX_SPACE_INSIDE) - front = CUSTOMBOX_SPACE_INSIDE - 3; - else - front = (uint16_t)value; - } - else - { - front = 1; - } - start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + front; - stop.x = start.x; - GFX_draw_thick_line(2,&t9screen, start, stop, CLUT_EverythingOkayGreen); - - - // Helium vertical bar - start.y = t9cH.WindowY0 + 1 - 5 - 3*16 - 28 - 14; - stop.y = start.y - (3 * 15) - 1; - if((percent_He > 0) && (partial_pressure_He > 0.01f)) // 0.5f - { - - value = partial_pressure_He; - value *= 80;//20 - - if(value < 0) - front = 3; - else if(value + 5 > CUSTOMBOX_SPACE_INSIDE) - front = CUSTOMBOX_SPACE_INSIDE - 3; - else - front = (uint16_t)value; - } - else - { - front = 1; - } - - start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + front; - stop.x = start.x; - GFX_draw_thick_line(2,&t9screen, start, stop, CLUT_EverythingOkayGreen); - - // Oxygen vertical bar - start.y = t9cH.WindowY0 + 1 - 5 - 6*16 - 2*28 - 2*14; - stop.y = start.y - (3 * 15) - 1; - - start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + cns100pixel; - stop.x = start.x; - GFX_draw_thick_line(2, &t9screen, start, stop, CLUT_WarningRed); -} - - -void t9_debug(void) -{ - char text[256+50]; - uint8_t textpointer = 0; - - t9cY0free.WindowLineSpacing = 28 + 48 + 14; - t9cY0free.WindowY0 = t9cH.WindowY0 - 5 - 2 * t9cY0free.WindowLineSpacing; - t9cY0free.WindowNumberOfTextLines = 3; - - textpointer += snprintf(&text[textpointer],50,"Ambient [bar]\n\r"); - textpointer += snprintf(&text[textpointer],50,"Surface [bar] + salt\n\r"); -// textpointer += snprintf(&text[textpointer],50,"Difference [mbar]\n\r"); - textpointer += snprintf(&text[textpointer],50,"ShallowCounter [s]\n\r"); - GFX_write_string(&FontT24, &t9cY0free, text, 1); - - t9cY0free.WindowY0 -= 52; -// snprintf(text,60,"%0.2f\n\r%0.2f %u%%\n\r%0.0f",stateUsed->lifeData.pressure_ambient_bar, stateUsed->lifeData.pressure_surface_bar, settingsGetPointer()->salinity, 1000 * (stateUsed->lifeData.pressure_ambient_bar-stateUsed->lifeData.pressure_surface_bar)); - snprintf(text,60, - "%0.2f\n\r" - "%0.2f %u%%\n\r" - "%u" - ,stateUsed->lifeData.pressure_ambient_bar - ,stateUsed->lifeData.pressure_surface_bar - ,settingsGetPointer()->salinity - ,stateUsed->lifeData.counterSecondsShallowDepth); - GFX_write_string(&FontT42, &t9cY0free, text, 1); -} - - -void t9_SummaryOfLeftCorner(void) -{ - char text[256+60]; - uint8_t textpointer = 0; - - const SDecoinfo * pDecoinfoStandard; - const SDecoinfo * pDecoinfoFuture; - float fCNS; - - if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) - { - pDecoinfoStandard = &stateUsed->decolistBuehlmann; - pDecoinfoFuture = &stateUsed->decolistFutureBuehlmann; - } - else - { - pDecoinfoStandard = &stateUsed->decolistVPM; - pDecoinfoFuture = &stateUsed->decolistFutureVPM; - } - - fCNS = stateUsed->lifeData .cns; - if(fCNS > 999) - fCNS = 999; - - t9cY0free.WindowY0 = t9cC.WindowY0 - 10; - t9cY0free.WindowLineSpacing = 48; - t9cY0free.WindowNumberOfTextLines = 6; - t9cY0free.WindowTab = 420; - - // header - textpointer = 0; - text[textpointer++] = '\032'; - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = TXT_ppO2; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_Ceiling; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_ActualGradient; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_CNS; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_FutureTTS; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterTemperature; - text[textpointer++] = '\017'; - text[textpointer++] = 0; - t9cY0free.WindowX0 += 10; - t9cY0free.WindowY0 += 10; - GFX_write_string(&FontT24, &t9cY0free, text, 1); - t9cY0free.WindowX0 -= 10; - t9cY0free.WindowY0 -= 10; - - textpointer = 0; - text[textpointer++] = '\t'; - textpointer += snprintf(&text[textpointer],10,"\020%01.2f", stateUsed->lifeData.ppO2); - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = '\t'; - if(pDecoinfoStandard->output_ceiling_meter <= 99.9f) - textpointer += snprintf(&text[textpointer],10,"\020%01.1f",pDecoinfoStandard->output_ceiling_meter); - else - textpointer += snprintf(&text[textpointer],10,"\020%01.0f",pDecoinfoStandard->output_ceiling_meter); - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = '\t'; - textpointer += snprintf(&text[textpointer],10,"\020%.0f", 100 * pDecoinfoStandard->output_relative_gradient); - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = '\t'; - textpointer += snprintf(&text[textpointer],10,"\020%.0f\016\016%%\017",fCNS); - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = '\t'; - textpointer += snprintf(&text[textpointer],10,"\020%i'", pDecoinfoFuture->output_time_to_surface_seconds / 60); - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = '\t'; - textpointer += snprintf(&text[textpointer],15,"\020\016%01.0f \140",unit_temperature_float(((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f)); // "\016\016%01.1f `" + C or F - if(settingsGetPointer()->nonMetricalSystem == 0) - text[textpointer++] = 'C'; - else - text[textpointer++] = 'F'; - text[textpointer++] = 0; - text[textpointer++] = 0; - GFX_write_string(&FontT42, &t9cY0free, text, 1); -} - - -void t9_scooter(void) -{ - float scooterTemperatureLocal; - uint16_t scooterSpeedLocal; -// uint16_t scooterDrehzhl; - uint8_t scooterResidualCapacity; -// float scooterVoltage; -// uint8_t scooterCurrent; - //uint16_t scooterWattHours; -// uint16_t bkpX0, bkpX1; - - uint16_t ageInMilliSeconds; - uint8_t textSize; - - scooterTemperatureLocal = unit_temperature_float(((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f); - scooterSpeedLocal = unit_speed_integer(stateUsed->lifeData.scooterSpeed); - scooterResidualCapacity = stateUsed_scooterRemainingBattCapacity(); - -// scooterDrehzhl = stateUsed->lifeData.scooterDrehzahl; -// scooterVoltage = stateUsed->lifeData.scooterSpannung; -// scooterCurrent = stateUsed->lifeData.scooterAmpere; -// scooterWattHours = stateUsed->lifeData.scooterWattstunden; - - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - - char text[256+60]; - uint8_t textpointer = 0; - - t9cY0free.WindowLineSpacing = 28 + 48 + 14; - t9cY0free.WindowY0 = t9cH.WindowY0 - 5 - 2 * t9cY0free.WindowLineSpacing; - t9cY0free.WindowNumberOfTextLines = 3; - - // header - text[textpointer++] = '\032'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterRestkapazitaet; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterTemperature; - text[textpointer++] = '\n'; - text[textpointer++] = '\r'; - text[textpointer++] = TXT_2BYTE; - text[textpointer++] = TXT2BYTE_ScooterSpeed; - text[textpointer++] = 0; - GFX_write_string(&FontT24, &t9cY0free, text, 1); - -/* -snprintf(text,60, - "\032" - "%0u" "\016\016 Wh used\017" - ,stateUsed->lifeData.scooterWattstunden); -*/ -if(ageInMilliSeconds > 1500) - text[0] = '\031'; -GFX_write_string(&FontT24, &t9cY0free, text, 1); - -/* -snprintf(text,60, - "\030" - "\n\r" - "\n\r" - "%0u" "\022\016\016 rpm\017\030" - ,stateUsed->lifeData.scooterDrehzahl); -GFX_write_string(&FontT24, &t9cY0free, text, 1); -*/ - // data - t9cY0free.WindowY0 -= 52; - if(settingsGetPointer()->nonMetricalSystem == 0) - { - textSize = snprintf(text,60, - "\030" - "%0u" "\022\016\016 %%\017\030" - "\n\r" - "%0.0f\140" "\022\016\016 C\017\030" - "\n\r" - "%u" "\022\016\016 m/min\017\030" - ,scooterResidualCapacity,scooterTemperatureLocal,scooterSpeedLocal); - } - else - { - textSize = snprintf(text,60, - "\030" - "%0u" "\022\016\016 %%\017\030" - "\n\r" - "%0.0f\140" "\022\016\016 Fht\017\030" - "\n\r" - "%u" "\022\016\016 ft/min\017\030" - ,scooterResidualCapacity,scooterTemperatureLocal,scooterSpeedLocal); - } - // connection active - if(ageInMilliSeconds > 1500) - { - for(int i=0; i < textSize -2; i++) - { - if(text[i] == '\030') - text[i] = '\031'; - } - } - // write data - GFX_write_string(&FontT42, &t9cY0free, text, 1); - - // age stamp - if(ageInMilliSeconds < 9999) - { - t9cY0free.WindowY0 -= 30; - snprintf(text,60, - "\021\001%u" - ,ageInMilliSeconds); - GFX_write_string(&FontT24, &t9cY0free, text, 0); - } -} - - -void t9_scooter_May2016_01(void) -{ - float scooterTemperature; - uint16_t scooterDrehzhl; - uint8_t scooterResidualCapacity; - float scooterSpeed; - float scooterVoltage; - uint8_t scooterCurrent; -// uint16_t scooterWattHours; - uint16_t bkpX0, bkpX1; - - uint16_t ageInMilliSeconds; - uint8_t textSize; -// old scooterStatus = bC_getData(0,&scooterTemperature,&scooterDrehzhl,&scooterResidualCapacity); - - scooterDrehzhl = stateUsed->lifeData.scooterDrehzahl; - scooterTemperature = ((float)(stateUsed->lifeData.scooterTemperature)) / 10.0f; - scooterResidualCapacity = stateUsed_scooterRemainingBattCapacity(); - - scooterVoltage = stateUsed->lifeData.scooterSpannung; - scooterCurrent = stateUsed->lifeData.scooterAmpere; -// scooterWattHours = stateUsed->lifeData.scooterWattstunden; - - ageInMilliSeconds = stateUsed->lifeData.scooterAgeInMilliSeconds; - if(!ageInMilliSeconds) - ageInMilliSeconds = 9999; - - scooterSpeed = scooterDrehzhl * 80 / 3300; - - char text[256+60]; - - t9cY0free.WindowLineSpacing = (28 + 48 + 14)/2; - t9cY0free.WindowY0 = t9cH.WindowY0 - 5 - 5 * t9cY0free.WindowLineSpacing; - t9cY0free.WindowNumberOfTextLines = 6; - - t9cY0free.WindowY0 -= 7; - - bkpX0 = t9cY0free.WindowX0; - bkpX1 = t9cY0free.WindowX1; - t9cY0free.WindowX0 = 430; - - textSize = snprintf(text,120, - "\022\016\016" - "%%" - "\n\r" - "celsius" - "\n\r" - "rpm" - "\n\r" - "m/min" - "\n\r" - "Ampere" - "\n\r" - "Volt" -// "\n\r" -// "Wh" - ); - GFX_write_string(&FontT42, &t9cY0free, text, 1); - - t9cY0free.WindowX0 = bkpX0; - t9cY0free.WindowX1 = 420; - - textSize = snprintf(text,120, - "\030" - "\002" - "%0u" - "\n\r" - "\002" - "%0.0f" - "\n\r" - "\002" - "%0u" - "\n\r" - "\002" - "%0.0f" - "\n\r" - "\002" - "%0u" - "\n\r" - "\002" - "%0.1f" -// "\n\r" -// "%0u" "\022\016\016 Wh\017\030" - ,scooterResidualCapacity,scooterTemperature,scooterDrehzhl,scooterSpeed - ,scooterCurrent,scooterVoltage);//,scooterWattHours); - - if((ageInMilliSeconds > 1500) || (stateUsed->lifeData.scooterType == 0xFF)) - { - for(int i=0; i < textSize -2; i++) - { - if(text[i] == '\030') - text[i] = '\031'; - } - } - GFX_write_string(&FontT42, &t9cY0free, text, 1); - - t9cY0free.WindowX0 = bkpX0; - t9cY0free.WindowX1 = bkpX1; - - t9cY0free.WindowY0 -= 30; - snprintf(text,60, - "\021\001%u" - ,ageInMilliSeconds); - GFX_write_string(&FontT24, &t9cY0free, text, 0); - -} - - -void t9_compass(uint16_t ActualHeading, uint16_t UserSetHeading) -{ - uint16_t LeftBorderHeading, LineHeading; - uint32_t offsetPicture; - point_t start, stop, center; - static int32_t LastHeading = 0; - int32_t newHeading = 0; - int32_t diff = 0; - int32_t diff2 = 0; - - int32_t diffAbs = 0; - int32_t diffAbs2 = 0; - - newHeading = ActualHeading; - - diff = newHeading - LastHeading; - - if(newHeading < LastHeading) - diff2 = newHeading + 360 - LastHeading; - else - diff2 = newHeading - 360 - LastHeading; - - diffAbs = diff; - if(diffAbs < 0) - diffAbs *= -1; - - diffAbs2 = diff2; - if(diffAbs2 < 0) - diffAbs2 *= -1; - - - if(diffAbs <= diffAbs2) - newHeading = LastHeading + (diff / 2); - else - newHeading = LastHeading + (diff2 / 2); - - if(newHeading < 0) - newHeading += 360; - else - if(newHeading >= 360) - newHeading -= 360; - - LastHeading = newHeading; - ActualHeading = newHeading; - - if (ActualHeading < 90) - ActualHeading += 360; - - LeftBorderHeading = 2 * (ActualHeading - (CUSTOMBOX_SPACE_INSIDE/4)); - - offsetPicture = LeftBorderHeading * t9screenCompass.ImageHeight * 2; - - t9_background.pointer = t9screenCompass.FBStartAdress+offsetPicture; - t9_background.x0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - t9_background.y0 = 65; - t9_background.width = CUSTOMBOX_SPACE_INSIDE; - t9_background.height = t9screenCompass.ImageHeight; - - start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + (CUSTOMBOX_SPACE_INSIDE/2); - stop.x = start.x; - start.y = 65; - stop.y = start.y + 55; - GFX_draw_line(&t9screen, start, stop, CLUT_Font030); - - - center.x = start.x; - center.y = 300; - - stop.x = center.x + 44; - stop.y = center.y + 24; - - - while(ActualHeading > 359) ActualHeading -= 360; - LineHeading = 360 - ActualHeading; - GFX_draw_thick_line(9,&t9screen, t9_compass_circle(0,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font030); // North - LineHeading += 90; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(9,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); // Maintick - LineHeading += 90; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(9,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 90; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(9,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - - LineHeading = 360 - ActualHeading; - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(5,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); // Subtick - LineHeading += 90; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(5,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 90; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(5,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 90; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(5,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - - LineHeading = 360 - ActualHeading; - LineHeading += 22; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); // Subtick - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); // Subtick - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - LineHeading += 45; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(3,&t9screen, t9_compass_circle(1,LineHeading), t9_compass_circle(2,LineHeading), CLUT_Font031); - - if(UserSetHeading) - { - LineHeading = UserSetHeading + 360 - ActualHeading; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(9,&t9screen, t9_compass_circle(3,LineHeading), t9_compass_circle(2,LineHeading), CLUT_CompassUserHeadingTick); - - // R�ckpeilung, User Back Heading - LineHeading = UserSetHeading + 360 + 180 - ActualHeading; - if(LineHeading > 359) LineHeading -= 360; - if(LineHeading > 359) LineHeading -= 360; - GFX_draw_thick_line(9,&t9screen, t9_compass_circle(3,LineHeading), t9_compass_circle(2,LineHeading), CLUT_CompassUserBackHeadingTick); - } - - center.x = start.x; - center.y = 250; - GFX_draw_circle(&t9screen, center, 116, CLUT_Font030); - GFX_draw_circle(&t9screen, center, 118, CLUT_Font030); - GFX_draw_circle(&t9screen, center, 117, CLUT_Font030); -} - - -void init_t9_compass(void) -{ - t9screenCompass.FBStartAdress = getFrame(26); - - char text[256]; - uint8_t textpointer = 0; - - text[textpointer++] = '\030'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 76; // 90 - 14 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'N'; - text[textpointer++] = 'E'; // 96 + 28 = 124 total - text[textpointer++] = '\017'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 64; // 90 - 14 - 12 - text[textpointer++] = 'E'; // 124 + 74 + 23 = 221 total - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 66; // 90 - 11 - 13 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'S'; - text[textpointer++] = 'E'; - text[textpointer++] = '\017'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 68; // 90 - 12 - 10 - text[textpointer++] = 'S'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 64; // 90 - 10 - 16 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'S'; - text[textpointer++] = 'W'; - text[textpointer++] = '\017'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 56; // 90 - 16 - 18 - text[textpointer++] = 'W'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 54; // 90 - 18 - 18 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'N'; - text[textpointer++] = 'W'; - text[textpointer++] = '\017'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 59; // 90 - 17 - 14 - text[textpointer++] = 'N'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 63; // 90 - 13 - 14 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'N'; - text[textpointer++] = 'E'; - text[textpointer++] = '\017'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 64; // 90 - 14 - 12 - text[textpointer++] = 'E'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 66; // 90 - 11 - 13 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'S'; - text[textpointer++] = 'E'; - text[textpointer++] = '\017'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 68; // 90 - 12 - 10 - text[textpointer++] = 'S'; - text[textpointer++] = '\177'; - text[textpointer++] = '\177'; - text[textpointer++] = 64; // 90 - 10 - 16 - text[textpointer++] = '\016'; - text[textpointer++] = '\016'; - text[textpointer++] = 'S'; - text[textpointer++] = 'W'; - text[textpointer++] = '\017'; - text[textpointer++] = 0; // end - - GFX_write_string(&FontT42,&t9pCompass,text,1); - - releaseAllFramesExcept(26,t9screenCompass.FBStartAdress); -} - - -void t9_miniLiveLogProfile(void) -{ - SWindowGimpStyle wintemp; - wintemp.left = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET; - wintemp.right = wintemp.left + CUSTOMBOX_SPACE_INSIDE; - wintemp.top = 480 - t9l1.WindowY0; - wintemp.bottom = wintemp. top + 200; - - uint16_t max_depth = (uint16_t)(stateUsed->lifeData.max_depth_meter * 10); - - GFX_graph_print(&t9screen, &wintemp, 0,1,0, max_depth, getMiniLiveLogbookPointerToData(), getMiniLiveLogbookActualDataLength(), CLUT_Font030, NULL); -} - diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tComm.c --- a/Discovery/Src/tComm.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tComm.c Sat Feb 23 21:10:51 2019 +0100 @@ -340,7 +340,6 @@ char aTxBufferEscapeSequence[50] = "+++"; // limit is 19 chars, with 7 chars shown in BLE advertising mode - //char aTxBufferName[50] = "AT+BNAME=BONEX-HW%4a\r"; //________________________123456789012345678901 char aTxBufferName[50] = "AT+BNAME=OSTC4-12345\r"; char answerOkay[6] = "\r\nOKr\n"; @@ -908,10 +907,7 @@ aTxBuffer[count++] = 0x00; // hardware descriptor HIGH byte aTxBuffer[count++] = 0x3B; // hardware descriptor LOW byte // 0x3B is OSTC4 // 0x1A is OTSC3 aTxBuffer[count++] = 0x00; // feature descriptor HIGH byte - if(getLicence() == LICENCEBONEX) - aTxBuffer[count++] = 0x01; // feature descriptor LOW byte - else - aTxBuffer[count++] = 0x00; // feature descriptor LOW byte + aTxBuffer[count++] = 0x00; // feature descriptor LOW byte aTxBuffer[count++] = 0x43; // model id aTxBuffer[count++] = prompt4D4C(receiveStartByteUart); break; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tHome.c --- a/Discovery/Src/tHome.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tHome.c Sat Feb 23 21:10:51 2019 +0100 @@ -92,14 +92,12 @@ t4_init(); // game t5_init(); // gauge t6_init(); // apnea - t9_init(); // bonex } void tHome_init_compass(void) { init_t7_compass(); - init_t9_compass(); } @@ -142,9 +140,6 @@ if(pSettings->design == 7) t7_refresh(); else - if(pSettings->design == 9) - t9_refresh(); - else { pSettings->design = 7; t7_refresh(); @@ -349,8 +344,6 @@ tHome_tick_count_field = 0; if(settingsGetPointer()->design == 7) t7_change_field(); - if(settingsGetPointer()->design == 9) - t9_change_field(); } @@ -360,9 +353,6 @@ if(settingsGetPointer()->design == 7) t7_change_customview(); else - if(settingsGetPointer()->design == 9) - t9_change_customview(); - else if(settingsGetPointer()->design == 3) t3_change_customview(); else diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tMenuEdit.c --- a/Discovery/Src/tMenuEdit.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tMenuEdit.c Sat Feb 23 21:10:51 2019 +0100 @@ -250,16 +250,6 @@ GFX_SetFrameTop(tMEscreen.FBStartAdress); releaseFrame(9,rememberPage); } -/* - else if(get_globalState() == (StMHARD6_ScooterDrag & MaskFieldDigit)) - { - uint32_t rememberPage = tMEscreen.FBStartAdress; - tMEscreen.FBStartAdress = getFrame(9); - refresh_ScooterControl(); - GFX_SetFrameTop(tMEscreen.FBStartAdress); - releaseFrame(9,rememberPage); - } -*/ else if(get_globalState() == (StMSYS3_Units & MaskFieldDigit)) { uint32_t rememberPage = tMEscreen.FBStartAdress; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tMenuEditHardware.c --- a/Discovery/Src/tMenuEditHardware.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tMenuEditHardware.c Sat Feb 23 21:10:51 2019 +0100 @@ -29,7 +29,6 @@ /* Includes ------------------------------------------------------------------*/ #include "tMenuEditHardware.h" -//#include "bonex4.h" #include "externCPU2bootloader.h" #include "gfx_fonts.h" #include "ostc.h" @@ -48,7 +47,6 @@ void openEdit_Brightness(void); //void openEdit_Luftintegration(void); void openEdit_ButtonSens(void); -void openEdit_ScooterControl(void); void openEdit_FlipDisplay(void); /* Announced function prototypes -----------------------------------------------*/ @@ -62,11 +60,7 @@ uint8_t OnAction_O2_Fallback (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_Button (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_ButtonBalance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); -uint8_t OnAction_ScooterDrag (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); -uint8_t OnAction_ScooterLoad (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); -uint8_t OnAction_ScooterBatt (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); // nicht notwending uint8_t OnAction_Bluetooth (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); -// nicht notwending uint8_t OnAction_ScooterControl (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); /* Exported functions --------------------------------------------------------*/ @@ -94,14 +88,7 @@ openEdit_ButtonSens(); break; case 6: - if(getLicence() == LICENCEBONEX) - { - openEdit_ScooterControl(); - } - else - { - openEdit_FlipDisplay(); - } + openEdit_FlipDisplay(); break; } } @@ -152,277 +139,6 @@ exitEditWithUpdate(); exitMenuEdit_to_Home(); } -/* -void refresh_ScooterControl(void) -{ - char text[256]; - - text[0] = '\001'; - text[1] = TXT_2BYTE; - text[2] = TXT2BYTE_ScooterSetup; - text[3] = 0; - write_topline(text); - - // drag - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_ScooterDrag; - text[2] = 0; - write_label_var( 30, 180, ME_Y_LINE1, &FontT48, text); - // load - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_ScooterLoad; - text[2] = 0; - write_label_var( 30, 180, ME_Y_LINE2, &FontT48, text); - // batt type - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_ScooterBattTyp; - text[2] = 0; - write_label_var( 30, 180, ME_Y_LINE3, &FontT48, text); - - // drag - text[0] = TXT_2BYTE; - text[1] = 0; - text[2] = 0; - switch(settingsGetPointer()->scooterDrag) - { - case 0: - text[1] = TXT2BYTE_ScooterD0Apnoe; - break; - case 1: - text[1] = TXT2BYTE_ScooterD1Scuba; - break; - case 2: - text[1] = TXT2BYTE_ScooterD2Tech; - break; - case 3: - text[1] = TXT2BYTE_ScooterD3Heavy; - break; - default: - snprintf(&text[4],3,"%02u",settingsGetPointer()->scooterDrag); - break; - } - write_label_var( 200, 700, ME_Y_LINE1, &FontT48, text); - - // load - text[0] = TXT_2BYTE; - text[1] = 0; - text[2] = 0; - switch(settingsGetPointer()->scooterLoad) - { - case 0: - text[1] = TXT2BYTE_ScooterL0None; - break; - case 1: - text[1] = TXT2BYTE_ScooterL1Small; - break; - case 2: - text[1] = TXT2BYTE_ScooterL2Stages; - break; - case 3: - text[1] = TXT2BYTE_ScooterL3Full; - break; - case 4: - text[1] = TXT2BYTE_ScooterL4Towing; - break; - default: - snprintf(&text[4],3,"%02u",settingsGetPointer()->scooterLoad); - break; - } - write_label_var( 200, 700, ME_Y_LINE2, &FontT48, text); - - //batt type - -// txtptr = 0; -// txtptr += bo4GetBatteryName(text,settingsGetPointer()->scooterBattType); -// txtptr += snprintf(&text[txtptr],10," (%0.1f V)",bo4GetBatteryVoltage(settingsGetPointer()->scooterBattType)); -// write_label_var( 200, 700, ME_Y_LINE3, &FontT48, text); -} -*/ - -void getButtonText_ScooterControl(char *text, uint8_t * pointer) -{ - - if((pointer != &settingsGetPointer()->scooterLoad) && (pointer != &settingsGetPointer()->scooterDrag)) - return; - - text[0] = TXT_2BYTE; - text[1] = 0; - text[2] = 0; - - // drag - if(pointer == &settingsGetPointer()->scooterDrag) - { - switch(settingsGetPointer()->scooterDrag) - { - case 0: - text[1] = TXT2BYTE_ScooterD0Apnoe; - break; - case 1: - text[1] = TXT2BYTE_ScooterD1Scuba; - break; - case 2: - text[1] = TXT2BYTE_ScooterD2Tech; - break; - case 3: - text[1] = TXT2BYTE_ScooterD3Heavy; - break; - default: - snprintf(&text[4],3,"%02u",settingsGetPointer()->scooterDrag); - break; - } - } - else // load - if(pointer == &settingsGetPointer()->scooterLoad) - { - - switch(settingsGetPointer()->scooterLoad) - { - case 0: - text[1] = TXT2BYTE_ScooterL0None; - break; - case 1: - text[1] = TXT2BYTE_ScooterL1Small; - break; - case 2: - text[1] = TXT2BYTE_ScooterL2Stages; - break; - case 3: - text[1] = TXT2BYTE_ScooterL3Full; - break; - case 4: - text[1] = TXT2BYTE_ScooterL4Towing; - break; - default: - snprintf(&text[4],3,"%02u",settingsGetPointer()->scooterLoad); - break; - } - } -} - - -void openEdit_ScooterControl(void) -{ - char text[256]; - uint16_t battWh; - - text[0] = '\001'; - text[1] = TXT_2BYTE; - text[2] = TXT2BYTE_ScooterSetup; - text[3] = 0; - write_topline(text); - - // drag - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_ScooterDrag; - text[2] = 0; - write_label_var( 30, 180, ME_Y_LINE1, &FontT48, text); - // load - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_ScooterLoad; - text[2] = 0; - write_label_var( 30, 180, ME_Y_LINE2, &FontT48, text); - // batt type - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_ScooterBattTyp; - text[2] = 0; - write_label_var( 30, 180, ME_Y_LINE3, &FontT48, text); - - getButtonText_ScooterControl(text,&settingsGetPointer()->scooterDrag); - write_field_button(StMHARD6_ScooterDrag, 200, 770, ME_Y_LINE1, &FontT48, text); - - getButtonText_ScooterControl(text,&settingsGetPointer()->scooterLoad); - write_field_button(StMHARD6_ScooterLoad, 200, 770, ME_Y_LINE2, &FontT48, text); - - battWh = settingsGetPointer()->scooterBattSize; - write_field_udigit(StMHARD6_ScooterBatt, 200, 770, ME_Y_LINE3, &FontT48, "####\016\016 Wh\017", battWh, 0, 0, 0); - - setEvent(StMHARD6_ScooterDrag, (uint32_t)OnAction_ScooterDrag); - setEvent(StMHARD6_ScooterLoad, (uint32_t)OnAction_ScooterLoad); - setEvent(StMHARD6_ScooterBatt, (uint32_t)OnAction_ScooterBatt); - - write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); -} - - -uint8_t OnAction_ScooterDrag(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) -{ - char text[256]; - - settingsGetPointer()->scooterDrag = settingsGetPointer()->scooterDrag + 1; - if(settingsGetPointer()->scooterDrag > 3) - settingsGetPointer()->scooterDrag = 0; - - getButtonText_ScooterControl(text,&settingsGetPointer()->scooterDrag); - tMenuEdit_newButtonText(editId, text); - - return UPDATE_DIVESETTINGS; -} - - -uint8_t OnAction_ScooterLoad(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) -{ - char text[256]; - - settingsGetPointer()->scooterLoad = settingsGetPointer()->scooterLoad + 1; - if(settingsGetPointer()->scooterLoad > 4) - settingsGetPointer()->scooterLoad = 0; - - getButtonText_ScooterControl(text,&settingsGetPointer()->scooterLoad); - tMenuEdit_newButtonText(editId, text); - - return UPDATE_DIVESETTINGS; -} - - -uint8_t OnAction_ScooterBatt(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) -{ - uint8_t digitContentNew; - uint32_t newWh; - - if(action == ACTION_BUTTON_ENTER) - { - return digitContent; - } - if(action == ACTION_BUTTON_ENTER_FINAL) - { - evaluateNewString(editId, &newWh, 0, 0, 0); - - if(newWh < 300) - newWh = 300; - if(newWh > 5000) - newWh = 5000; - - tMenuEdit_newInput(editId, newWh, 0, 0, 0); - settingsGetPointer()->scooterBattSize = newWh; - return UPDATE_DIVESETTINGS; - } - if(action == ACTION_BUTTON_NEXT) - { - digitContentNew = digitContent + 1; - if(digitNumber == 0) - { - if(digitContentNew > '5') - digitContentNew = '0'; - } - else if(digitContentNew > '9') - digitContentNew = '0'; - return digitContentNew; - } - if(action == ACTION_BUTTON_BACK) - { - digitContentNew = digitContent - 1; - if(digitNumber == 0) - { - if(digitContentNew < '0') - digitContentNew = '5'; - } - else if(digitContentNew < '0') - digitContentNew = '9'; - return digitContentNew; - } - return UNSPECIFIC_RETURN; -} - void refresh_CompassEdit(void) { diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tMenuEditSystem.c --- a/Discovery/Src/tMenuEditSystem.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tMenuEditSystem.c Sat Feb 23 21:10:51 2019 +0100 @@ -29,7 +29,7 @@ /* Includes ------------------------------------------------------------------*/ #include "tMenuEditSystem.h" -#include "data_exchange_main.h" // for DataEX_scooterDataFound() +#include "data_exchange_main.h" #include "externLogbookFlash.h" #include "gfx_fonts.h" #include "ostc.h" @@ -768,10 +768,6 @@ 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; @@ -937,9 +933,6 @@ uint8_t newValue; switch(settingsGetPointer()->tX_customViewPrimary) { - case CVIEW_Scooter: - newValue = CVIEW_sensors; - break; case CVIEW_sensors: newValue = CVIEW_sensors_mV; break; @@ -969,10 +962,7 @@ break; case CVIEW_noneOrDebug: default: - if(getLicence() == LICENCEBONEX) - newValue = CVIEW_Scooter; - else - newValue = CVIEW_sensors; + newValue = CVIEW_sensors; break; } settingsGetPointer()->tX_customViewPrimary = newValue; @@ -1411,13 +1401,6 @@ 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; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tMenuHardware.c --- a/Discovery/Src/tMenuHardware.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tMenuHardware.c Sat Feb 23 21:10:51 2019 +0100 @@ -29,7 +29,6 @@ /* Includes ------------------------------------------------------------------*/ #include "tMenu.h" #include "tMenuHardware.h" -//#include "bonex4.h" //#define NEXTLINE(text, textPointer) {text[(textPointer)++] = '\n'; text[textPointer++] = '\r'; text[textPointer] = 0;} // NEXTLINE(text,textPointer); @@ -164,19 +163,6 @@ if((line == 0) || (line == 6)) { - if(getLicence() == LICENCEBONEX) - { - text[textPointer++] = TXT_2BYTE; - text[textPointer++] = TXT2BYTE_ScooterSetup; - text[textPointer++] = '\t'; - - // textPointer += snprintf(&text[textPointer],25,"D%i L%i ",settingsGetPointer()->scooterDrag, settingsGetPointer()->scooterLoad); - textPointer += snprintf(&text[textPointer],25,"D%i L%i %i\016\016 Wh\017",settingsGetPointer()->scooterDrag, settingsGetPointer()->scooterLoad, settingsGetPointer()->scooterBattSize); - // textPointer += bo4GetBatteryName(&text[textPointer], settingsGetPointer()->scooterBattType); - nextline(text,&textPointer); - } - else - { text[textPointer++] = TXT_2BYTE; text[textPointer++] = TXT2BYTE_FLIPDISPLAY; text[textPointer++] = '\t'; @@ -186,7 +172,6 @@ text[textPointer++] = '\006'; text[textPointer] = 0; nextline(text,&textPointer); - } } return StMHARD; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/tMenuSystem.c --- a/Discovery/Src/tMenuSystem.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/tMenuSystem.c Sat Feb 23 21:10:51 2019 +0100 @@ -274,9 +274,6 @@ switch(customViewId) { - case CVIEW_Scooter: - text = TXT2BYTE_ScooterMonitor; - break; case CVIEW_sensors: text = TXT2BYTE_O2monitor; break; diff -r 9eda5a75c5fd -r cc9c18075e00 Discovery/Src/text_multilanguage.c --- a/Discovery/Src/text_multilanguage.c Tue Feb 19 21:48:32 2019 +0100 +++ b/Discovery/Src/text_multilanguage.c Sat Feb 23 21:10:51 2019 +0100 @@ -1079,13 +1079,6 @@ static uint8_t text_IT_Warning[] = "Pericolo"; static uint8_t text_ES_Warning[] = "Peligro"; -// Customview Header (Bonex Computer) -static uint8_t text_EN_ScooterMonitor[] = "bonex"; -static uint8_t text_DE_ScooterMonitor[] = ""; -static uint8_t text_FR_ScooterMonitor[] = ""; -static uint8_t text_IT_ScooterMonitor[] = "Bonex DPV"; -static uint8_t text_ES_ScooterMonitor[] = "bonex"; - // Menu SYS2 sub Information static uint8_t text_EN_Usage_Battery[] = "Battery life"; static uint8_t text_DE_Usage_Battery[] = "Batterie-Nutzung"; @@ -1199,125 +1192,6 @@ static uint8_t text_IT_Saturday[] = "Sabato"; static uint8_t text_ES_Saturday[] = "Sábado"; -// Dive Mode und Customview Content (Bonex Computer) -static uint8_t text_EN_ScooterRestkapazitaet[] = "Battery Capacity"; -static uint8_t text_DE_ScooterRestkapazitaet[] = "Batterie Kapazität"; -static uint8_t text_FR_ScooterRestkapazitaet[] = "Charge Batterie"; // Ok for "... = 35%" -static uint8_t text_IT_ScooterRestkapazitaet[] = "Carica Batteria"; -static uint8_t text_ES_ScooterRestkapazitaet[] = "Capacidad carga"; - -// Dive Mode und Customview Content (Bonex Computer) -static uint8_t text_EN_ScooterTemperature[] = "Motor Temp."; -static uint8_t text_DE_ScooterTemperature[] = ""; -static uint8_t text_FR_ScooterTemperature[] = "Temp. moteur"; // "Température moteur"; -static uint8_t text_IT_ScooterTemperature[] = "Temp. Motore"; -static uint8_t text_ES_ScooterTemperature[] = "Temp. del motor"; - -// Dive Mode und Customview Content (Bonex Computer) -static uint8_t text_EN_ScooterSpeed[] = "Speed"; -static uint8_t text_DE_ScooterSpeed[] = "Geschwindigkeit"; -static uint8_t text_FR_ScooterSpeed[] = "Vitesse"; -static uint8_t text_IT_ScooterSpeed[] = "Velocita"; -static uint8_t text_ES_ScooterSpeed[] = "Velocidad"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterSetup[] = "Bonex Setup"; -static uint8_t text_DE_ScooterSetup[] = ""; -static uint8_t text_FR_ScooterSetup[] = "Config. Bonex"; // "Configuration Bonex"; -static uint8_t text_IT_ScooterSetup[] = "Settaggio DPV"; -static uint8_t text_ES_ScooterSetup[] = "Configuración Bonex"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterDrag[] = "Drag"; -static uint8_t text_DE_ScooterDrag[] = ""; -static uint8_t text_FR_ScooterDrag[] = "";// "Traction"; // ?? No!! The traction force ? inhibition hw -static uint8_t text_IT_ScooterDrag[] = "Spinta"; -static uint8_t text_ES_ScooterDrag[] = "Arrastre"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterLoad[] = "Load"; -static uint8_t text_DE_ScooterLoad[] = ""; -static uint8_t text_FR_ScooterLoad[] = ""; // "Charge"; // ?? Kg -static uint8_t text_IT_ScooterLoad[] = "Caricamento"; -static uint8_t text_ES_ScooterLoad[] = "Carga"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterVolt[] = "Voltage"; -static uint8_t text_DE_ScooterVolt[] = "Spannung"; -static uint8_t text_FR_ScooterVolt[] = ""; -static uint8_t text_IT_ScooterVolt[] = "Voltaggio"; -static uint8_t text_ES_ScooterVolt[] = "Voltaje"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterD0Apnoe[] = "Apnea"; -static uint8_t text_DE_ScooterD0Apnoe[] = "Apnoe"; -static uint8_t text_FR_ScooterD0Apnoe[] = "Apnée"; -static uint8_t text_IT_ScooterD0Apnoe[] = "Apnea"; -static uint8_t text_ES_ScooterD0Apnoe[] = "Apnea"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterD1Scuba[] = "Scuba"; -static uint8_t text_DE_ScooterD1Scuba[] = ""; -static uint8_t text_FR_ScooterD1Scuba[] = "Plongée"; -static uint8_t text_IT_ScooterD1Scuba[] = "Immersione"; -static uint8_t text_ES_ScooterD1Scuba[] = "Buceo"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterD2Tech[] = "Tech"; -static uint8_t text_DE_ScooterD2Tech[] = ""; -static uint8_t text_FR_ScooterD2Tech[] = ""; // Technique -static uint8_t text_IT_ScooterD2Tech[] = "Immersione tecnica"; -static uint8_t text_ES_ScooterD2Tech[] = "Técnico"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterD3Heavy[] = "Heavy Tech"; -static uint8_t text_DE_ScooterD3Heavy[] = ""; -static uint8_t text_FR_ScooterD3Heavy[] = "";// Technique engagée -static uint8_t text_IT_ScooterD3Heavy[] = "Immersione profonda"; -static uint8_t text_ES_ScooterD3Heavy[] = "Técnico intenso"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterL0None[] = "none gear"; -static uint8_t text_DE_ScooterL0None[] = ""; -static uint8_t text_FR_ScooterL0None[] = "sans"; -static uint8_t text_IT_ScooterL0None[] = "in Folle"; -static uint8_t text_ES_ScooterL0None[] = "Punto muerto"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterL1Small[] = "Monotank / small double"; -static uint8_t text_DE_ScooterL1Small[] = ""; -static uint8_t text_FR_ScooterL1Small[] = "Mono / petit bi"; -static uint8_t text_IT_ScooterL1Small[] = "Mono / Bibo"; -static uint8_t text_ES_ScooterL1Small[] = "Monobotella / Bibotella"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterL2Stages[] = "Rebreather & Stages"; -static uint8_t text_DE_ScooterL2Stages[] = ""; -static uint8_t text_FR_ScooterL2Stages[] = "Recycleur"; -static uint8_t text_IT_ScooterL2Stages[] = "Rebreather & Stage"; -static uint8_t text_ES_ScooterL2Stages[] = "Rebreather y estapa"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterL3Full[] = "Multistage & Backup"; -static uint8_t text_DE_ScooterL3Full[] = ""; -static uint8_t text_FR_ScooterL3Full[] = "Multi-blocs & backup"; -static uint8_t text_IT_ScooterL3Full[] = "Immersione multigas"; -static uint8_t text_ES_ScooterL3Full[] = "Multi etapa"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterL4Towing[] = "Towing"; -static uint8_t text_DE_ScooterL4Towing[] = ""; -static uint8_t text_FR_ScooterL4Towing[] = "Remorquage"; -static uint8_t text_IT_ScooterL4Towing[] = "Traino"; -static uint8_t text_ES_ScooterL4Towing[] = "Remolque"; - -// Menu SYS1 (Bonex Computer) -static uint8_t text_EN_ScooterBattTyp[] = "Accu"; -static uint8_t text_DE_ScooterBattTyp[] = ""; -static uint8_t text_FR_ScooterBattTyp[] = ""; -static uint8_t text_IT_ScooterBattTyp[] = ""; -static uint8_t text_ES_ScooterBattTyp[] = ""; - // Menu SYS1 sub (Sensors) static uint8_t text_EN_HUDBattery[] = "HUD battery"; static uint8_t text_DE_HUDBattery[] = "HUD-Batterie"; @@ -1838,9 +1712,6 @@ {(uint8_t)TXT2BYTE_Thursday, {text_EN_Thursday, text_DE_Thursday, text_FR_Thursday, text_IT_Thursday, text_ES_Thursday}}, {(uint8_t)TXT2BYTE_Friday, {text_EN_Friday, text_DE_Friday, text_FR_Friday, text_IT_Friday, text_ES_Friday}}, {(uint8_t)TXT2BYTE_Saturday, {text_EN_Saturday, text_DE_Saturday, text_FR_Saturday, text_IT_Saturday, text_ES_Saturday}}, - {(uint8_t)TXT2BYTE_ScooterRestkapazitaet,{text_EN_ScooterRestkapazitaet, text_DE_ScooterRestkapazitaet, text_FR_ScooterRestkapazitaet, text_IT_ScooterRestkapazitaet, text_ES_ScooterRestkapazitaet}}, - {(uint8_t)TXT2BYTE_ScooterTemperature,{text_EN_ScooterTemperature, text_DE_ScooterTemperature, text_FR_ScooterTemperature, text_IT_ScooterTemperature, text_ES_ScooterTemperature}}, - {(uint8_t)TXT2BYTE_ScooterSpeed, {text_EN_ScooterSpeed, text_DE_ScooterSpeed, text_FR_ScooterSpeed, text_IT_ScooterSpeed, text_ES_ScooterSpeed}}, {(uint8_t)TXT2BYTE_Layout, {text_EN_Design, text_DE_Design, text_FR_Design, text_IT_Design, text_ES_Design}}, {(uint8_t)TXT2BYTE_Units, {text_EN_Units, text_DE_Units, text_FR_Units, text_IT_Units, text_ES_Units}}, {(uint8_t)TXT2BYTE_Units_metric, {text_EN_Design_t7_metric, text_DE_Design_t7_metric, text_FR_Design_t7_metric, text_IT_Design_t7_metric, text_ES_Design_t7_metric}}, @@ -1865,23 +1736,8 @@ {(uint8_t)TXT2BYTE_DecoDataLost, {text_EN_DecoDataLost, text_DE_DecoDataLost, text_FR_DecoDataLost, text_IT_DecoDataLost, text_ES_DecoDataLost}}, {(uint8_t)TXT2BYTE_Info, {text_EN_Info, text_DE_Info, text_FR_Info, text_IT_Info, text_ES_Info}}, {(uint8_t)TXT2BYTE_Korrekturwerte, {text_EN_Korrekturwerte, text_DE_Korrekturwerte, text_FR_Korrekturwerte, text_IT_Korrekturwerte, text_ES_Korrekturwerte}}, - {(uint8_t)TXT2BYTE_ScooterMonitor, {text_EN_ScooterMonitor, text_DE_ScooterMonitor, text_FR_ScooterMonitor, text_IT_ScooterMonitor, text_ES_ScooterMonitor}}, {(uint8_t)TXT2BYTE_SetBearing, {text_EN_SetBearing, text_DE_SetBearing, text_FR_SetBearing, text_IT_SetBearing, text_ES_SetBearing}}, {(uint8_t)TXT2BYTE_ResetBearing, {text_EN_ResetBearing, text_DE_ResetBearing, text_FR_ResetBearing, text_IT_ResetBearing, text_ES_ResetBearing}}, - {(uint8_t)TXT2BYTE_ScooterSetup, {text_EN_ScooterSetup, text_DE_ScooterSetup, text_FR_ScooterSetup, text_IT_ScooterSetup, text_ES_ScooterSetup}}, - {(uint8_t)TXT2BYTE_ScooterDrag, {text_EN_ScooterDrag, text_DE_ScooterDrag, text_FR_ScooterDrag, text_IT_ScooterDrag, text_ES_ScooterDrag}}, - {(uint8_t)TXT2BYTE_ScooterLoad, {text_EN_ScooterLoad, text_DE_ScooterLoad, text_FR_ScooterLoad, text_IT_ScooterLoad, text_ES_ScooterLoad}}, - {(uint8_t)TXT2BYTE_ScooterD0Apnoe, {text_EN_ScooterD0Apnoe, text_DE_ScooterD0Apnoe, text_FR_ScooterD0Apnoe, text_IT_ScooterD0Apnoe, text_ES_ScooterD0Apnoe}}, - {(uint8_t)TXT2BYTE_ScooterD1Scuba, {text_EN_ScooterD1Scuba, text_DE_ScooterD1Scuba, text_FR_ScooterD1Scuba, text_IT_ScooterD1Scuba, text_ES_ScooterD1Scuba}}, - {(uint8_t)TXT2BYTE_ScooterD2Tech, {text_EN_ScooterD2Tech, text_DE_ScooterD2Tech, text_FR_ScooterD2Tech, text_IT_ScooterD2Tech, text_ES_ScooterD2Tech}}, - {(uint8_t)TXT2BYTE_ScooterD3Heavy, {text_EN_ScooterD3Heavy, text_DE_ScooterD3Heavy, text_FR_ScooterD3Heavy, text_IT_ScooterD3Heavy, text_ES_ScooterD3Heavy}}, - {(uint8_t)TXT2BYTE_ScooterL0None, {text_EN_ScooterL0None, text_DE_ScooterL0None, text_FR_ScooterL0None, text_IT_ScooterL0None, text_ES_ScooterL0None}}, - {(uint8_t)TXT2BYTE_ScooterL1Small, {text_EN_ScooterL1Small, text_DE_ScooterL1Small, text_FR_ScooterL1Small, text_IT_ScooterL1Small, text_ES_ScooterL1Small}}, - {(uint8_t)TXT2BYTE_ScooterL2Stages, {text_EN_ScooterL2Stages, text_DE_ScooterL2Stages, text_FR_ScooterL2Stages, text_IT_ScooterL2Stages, text_ES_ScooterL2Stages}}, - {(uint8_t)TXT2BYTE_ScooterL3Full, {text_EN_ScooterL3Full, text_DE_ScooterL3Full, text_FR_ScooterL3Full, text_IT_ScooterL3Full, text_ES_ScooterL3Full}}, - {(uint8_t)TXT2BYTE_ScooterL4Towing, {text_EN_ScooterL4Towing, text_DE_ScooterL4Towing, text_FR_ScooterL4Towing, text_IT_ScooterL4Towing, text_ES_ScooterL4Towing}}, - {(uint8_t)TXT2BYTE_ScooterBattTyp, {text_EN_ScooterBattTyp, text_DE_ScooterBattTyp, text_FR_ScooterBattTyp, text_IT_ScooterBattTyp, text_ES_ScooterBattTyp}}, - {(uint8_t)TXT2BYTE_ScooterVolt, {text_EN_ScooterVolt, text_DE_ScooterVolt, text_FR_ScooterVolt, text_IT_ScooterVolt, text_ES_ScooterVolt}}, {(uint8_t)TXT2BYTE_Sensor, {text_EN_SensorList, text_DE_SensorList, text_FR_SensorList, text_IT_SensorList, text_ES_SensorList}}, {(uint8_t)TXT2BYTE_Maintenance, {text_EN_Maintenance, text_DE_Maintenance, text_FR_Maintenance, text_IT_Maintenance, text_ES_Maintenance}}, {(uint8_t)TXT2BYTE_SetBatteryCharge,{text_EN_SetBatteryCharge, text_DE_SetBatteryCharge, text_FR_SetBatteryCharge, text_IT_SetBatteryCharge, text_ES_SetBatteryCharge}},