# HG changeset patch
# User heinrichsweikamp
# Date 1723646686 -7200
# Node ID e373e90a48dbc88a81663a4237d3327d2d35cbdf
# Parent 5e027b0f7475976942986a785709de5d769588ff# Parent f7318457df4d5ddf4621c40c89ade4a41cee8ab6
merge new screen stuff
diff -r f7318457df4d -r e373e90a48db BootLoader/CPU1-F429_boot.ld
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/CPU1-F429_boot.ld Wed Aug 14 16:44:46 2024 +0200
@@ -0,0 +1,597 @@
+/*****************************************************************************
+ * -*- coding: UTF-8 -*-
+ *
+ * \file Common/CPU1-F429.ld
+ * \brief Linker Script for CPU1 alias Discovery
+ * \author Ac6 workbench, Heinrichs Weikamp, and JD Gascuel
+ * \date 2018
+ *
+ * \details
+ * Linker script for STM32F429IIT6 Device from STM32F4 series
+ * - 192Kbytes RAM
+ * - 2048Kbytes ROM
+ *
+ * Set heap size, stack size and stack location according
+ * to application requirements.
+ *
+ * Set memory bank area and size if external memory is used.
+ *
+ * $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 .
+ *****************************************************************************
+ * HISTORY
+ * 2017-12-18 jDG: Mix between std AC6 file and chw stm32f429zi_flash.ld settings.
+ */
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+SEARCH_DIR(.)
+
+/****************************************************************************/
+/***************************** Memory Definition ****************************/
+MEMORY
+{
+ ROM_BOOT (rx) : ORIGIN = 0x08000000, LENGTH = 0x00040000 /* 256K */
+ ROM (rx) : ORIGIN = 0x08040000, LENGTH = 0x00090000 /* 576K */
+ UPPER(rx) : ORIGIN = 0x08132000, LENGTH = 0xAE270 /* 713K */
+ RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 192K
+ CCRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
+}
+
+/* Linker file shall be shared between Bootloader, Font and Firmware projects. Not used memory areas to be cut during bin generation */
+
+/* Make sure ROM and UPPER are contiguous, and map 2MB */
+/* TODO: At the moment the size of the defined memory will be directly reflected into the file size of resultion bin => Keep small until not used memory may be excluded from build */
+/*ASSERT( ORIGIN(UPPER) - ORIGIN(ROM) == LENGTH(ROM), "ROM lower and upper region shall be continuous" )
+/*ASSERT( LENGTH(ROM) + LENGTH(UPPER) == 2048K, "ROM lower + upper regions = 2MB" ) */
+
+/* Highest address of the user mode stack */
+/*_estack = ORIGIN(RAM) + LENGTH(RAM);*/
+
+
+_Min_Heap_Size = 0; /* no required heap (malloc'ed space) */
+_Min_Stack_Size = 0x08000; /* required 32K of stack */
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be defined in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * _sbss
+ * __bss_start__
+ * _ebss
+ * __bss_end__
+ * _edata
+ * end
+ * _end
+ * _estack
+ */
+
+/****************************************************************************/
+/*************************** Code and Data Sections *************************/
+SECTIONS
+{
+ /******************* NVIC reset and interupt vectors **********************/
+
+ .isr_vector 0x08000000 :
+ {
+ . = ALIGN(4);
+ KEEP( *(.isr_vector) )
+ KEEP(*(.init))
+ } >ROM_BOOT
+
+
+ .StdLibs 0x08000200:
+ {
+ . = ALIGN(4);
+ *libm.a:*(*)
+ } >ROM_BOOT
+
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+ /********************** Constant data into ROM memory *********************/
+
+
+ .ARM.extab : {
+ . = ALIGN(4);
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+ .ARM : {
+ . = ALIGN(4);
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+ .preinit_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN( __preinit_array_start = . );
+ KEEP( *(.preinit_array*) )
+ PROVIDE_HIDDEN( __preinit_array_end = . );
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+ .init_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN( __init_array_start = . );
+ KEEP( *(SORT(.init_array.*)) )
+ KEEP( *(.init_array*) )
+ PROVIDE_HIDDEN( __init_array_end = . );
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+ .fini_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN( __fini_array_start = . );
+ KEEP( *(SORT(.fini_array.*)) )
+ KEEP( *(.fini_array*) )
+ PROVIDE_HIDDEN( __fini_array_end = . );
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+ /************* The program code and other data into ROM memory ************/
+
+/*
+ .firmware_FirmwareData 0x08050000 : {
+ KEEP( *(.firmware_firmware_data) )
+ } >ROM
+
+ .font_firmware_data 0x08132000 : {
+ KEEP( *(.font_firmware_data) )
+
+ } >UPPER
+ */
+
+ /************* Data and Structures at absolute address in ROM *************/
+
+ /* FIXME: this sets the SFirmwareData structure, not the code ... */
+ .bootloader_firmware_data 0x0800A000 : {
+ PROVIDE( bootloader_FirmwareData = . );
+ KEEP( *(.bootloader_firmware_data) )
+ } > ROM_BOOT
+
+
+
+ .text 0x08001000 :
+ {
+ . = ALIGN(4);
+ *(.text.HAL*)
+ . = ALIGN(4);
+ } >ROM_BOOT
+
+
+ .text2 0x0800A100 :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >ROM_BOOT
+
+
+
+ /* Define Known Address for Each Font */
+ /* Flash Sector 23 is protected (bootloader font + image) => use end of sector 22 */
+
+.lower_fonts 0x08016000 : {
+ *(.lower_fonts.image_data_*)
+ *(.lower_fonts.*)
+ *(.upper_fonts.image_data_FontT48*)
+ *(.upper_fonts.FontT48*)
+ *(.upper_fonts.image_data_FontT24*)
+ *(.upper_fonts.FontT24*)
+} > ROM_BOOT
+
+.lower_directory 0x08004000 : {
+ *(.lower_font_directory*)
+ *(.upper_font_directory.FontT48*)
+ *(.upper_font_directory.FontT24*)
+} > ROM_BOOT
+
+
+.lower_image 0x08009000 : {
+ *(.lower_image*)
+
+} > ROM_BOOT
+
+.lower_directory 0x08009500 : {
+ *(.lower_image_directory*)
+} > ROM_BOOT
+
+ .upper_fonts 0x08132040 : {
+ __upper_font_data = .;
+ . = 0x13E;
+ *(.upper_fonts.image_data_FontT144_0x0030)
+ . = 0x02515;
+ *(.upper_fonts.image_data_FontT144_0x0031)
+ . = 0x03469;
+ *(.upper_fonts.image_data_FontT144_0x0032)
+ . = 0x4FDC;
+ *(.upper_fonts.image_data_FontT144_0x0033)
+ . = 0x6862;
+ *(.upper_fonts.image_data_FontT144_0x0034)
+ . = 0x86C2;
+ *(.upper_fonts.image_data_FontT144_0x0035)
+ . = 0x9FB3;
+ *(.upper_fonts.image_data_FontT144_0x0036)
+ . = 0xBB26;
+ *(.upper_fonts.image_data_FontT144_0x0037)
+ . = 0xD845;
+ *(.upper_fonts.image_data_FontT144_0x0038)
+ . = 0xF34D;
+ *(.upper_fonts.image_data_FontT144_0x0039)
+ . = 0x10EC0;
+ *(.upper_fonts.image_data_FontT24_0x0020)
+ *(.upper_fonts.image_data_FontT24_0x0021)
+ *(.upper_fonts.image_data_FontT24_0x0022)
+ *(.upper_fonts.image_data_FontT24_0x0023)
+ *(.upper_fonts.image_data_FontT24_0x0024)
+ *(.upper_fonts.image_data_FontT24_0x0025)
+ *(.upper_fonts.image_data_FontT24_0x0026)
+ *(.upper_fonts.image_data_FontT24_0x0027)
+ *(.upper_fonts.image_data_FontT24_0x0028)
+ *(.upper_fonts.image_data_FontT24_0x0029)
+ *(.upper_fonts.image_data_FontT24_0x002a)
+ *(.upper_fonts.image_data_FontT24_0x003f)
+ *(.upper_fonts.image_data_FontT24_0x002c)
+ *(.upper_fonts.image_data_FontT24_0x002d)
+ *(.upper_fonts.image_data_FontT24_0x002e)
+ *(.upper_fonts.image_data_FontT24_0x002f)
+ *(.upper_fonts.image_data_FontT24_0x0030)
+ *(.upper_fonts.image_data_FontT24_0x0031)
+ *(.upper_fonts.image_data_FontT24_0x0032)
+ *(.upper_fonts.image_data_FontT24_0x0033)
+ *(.upper_fonts.image_data_FontT24_0x0034)
+ *(.upper_fonts.image_data_FontT24_0x0035)
+ *(.upper_fonts.image_data_FontT24_0x0036)
+ *(.upper_fonts.image_data_FontT24_0x0037)
+ *(.upper_fonts.image_data_FontT24_0x0038)
+ *(.upper_fonts.image_data_FontT24_0x0039)
+ *(.upper_fonts.image_data_FontT24_0x003a)
+ *(.upper_fonts.image_data_FontT24_0x003b)
+ *(.upper_fonts.image_data_FontT24_0x003c)
+ *(.upper_fonts.image_data_FontT24_0x003d)
+ *(.upper_fonts.image_data_FontT24_0x003e)
+ . = . + 0x8c;
+ *(.upper_fonts.image_data_FontT24_0x0040)
+ *(.upper_fonts.image_data_FontT24_0x0041)
+ *(.upper_fonts.image_data_FontT24_0x0042)
+ *(.upper_fonts.image_data_FontT24_0x0043)
+ *(.upper_fonts.image_data_FontT24_0x0044)
+ *(.upper_fonts.image_data_FontT24_0x0045)
+ *(.upper_fonts.image_data_FontT24_0x0046)
+ *(.upper_fonts.image_data_FontT24_0x0047)
+ *(.upper_fonts.image_data_FontT24_0x0048)
+ *(.upper_fonts.image_data_FontT24_0x0049)
+ *(.upper_fonts.image_data_FontT24_0x004a)
+ *(.upper_fonts.image_data_FontT24_0x004b)
+ *(.upper_fonts.image_data_FontT24_0x004c)
+ *(.upper_fonts.image_data_FontT24_0x004d)
+ *(.upper_fonts.image_data_FontT24_0x004e)
+ *(.upper_fonts.image_data_FontT24_0x004f)
+ *(.upper_fonts.image_data_FontT24_0x0050)
+ *(.upper_fonts.image_data_FontT24_0x0051)
+ *(.upper_fonts.image_data_FontT24_0x0052)
+ *(.upper_fonts.image_data_FontT24_0x0053)
+ *(.upper_fonts.image_data_FontT24_0x0054)
+ *(.upper_fonts.image_data_FontT24_0x0055)
+ *(.upper_fonts.image_data_FontT24_0x0056)
+ *(.upper_fonts.image_data_FontT24_0x0057)
+ *(.upper_fonts.image_data_FontT24_0x0058)
+ *(.upper_fonts.image_data_FontT24_0x0059)
+ *(.upper_fonts.image_data_FontT24_0x005a)
+ *(.upper_fonts.image_data_FontT24_0x005b)
+ *(.upper_fonts.image_data_FontT24_0x005c)
+ *(.upper_fonts.image_data_FontT24_0x005d)
+ *(.upper_fonts.image_data_FontT24_0x005e)
+ *(.upper_fonts.image_data_FontT24_0x005f)
+ *(.upper_fonts.image_data_FontT24_0x0060)
+ *(.upper_fonts.image_data_FontT24_0x0061)
+ *(.upper_fonts.image_data_FontT24_0x0062)
+ *(.upper_fonts.image_data_FontT24_0x0063)
+ . = . + 0x1c;
+ *(.upper_fonts.image_data_FontT24_0x0064)
+ *(.upper_fonts.image_data_FontT24_0x0065)
+ *(.upper_fonts.image_data_FontT24_0x0066)
+ *(.upper_fonts.image_data_FontT24_0x0067)
+ *(.upper_fonts.image_data_FontT24_0x0068)
+ *(.upper_fonts.image_data_FontT24_0x0069)
+ *(.upper_fonts.image_data_FontT24_0x006a)
+ *(.upper_fonts.image_data_FontT24_0x006b)
+ *(.upper_fonts.image_data_FontT24_0x006c)
+ *(.upper_fonts.image_data_FontT24_0x006d)
+ *(.upper_fonts.image_data_FontT24_0x006e)
+ *(.upper_fonts.image_data_FontT24_0x006f)
+ *(.upper_fonts.image_data_FontT24_0x0070)
+ *(.upper_fonts.image_data_FontT24_0x0071)
+ *(.upper_fonts.image_data_FontT24_0x0072)
+ *(.upper_fonts.image_data_FontT24_0x0073)
+ *(.upper_fonts.image_data_FontT24_0x0074)
+ *(.upper_fonts.image_data_FontT24_0x0075)
+ *(.upper_fonts.image_data_FontT24_0x0076)
+ *(.upper_fonts.image_data_FontT24_0x0077)
+ *(.upper_fonts.image_data_FontT24_0x0078)
+ *(.upper_fonts.image_data_FontT24_0x0079)
+ *(.upper_fonts.image_data_FontT24_0x007a)
+ *(.upper_fonts.image_data_FontT24_0x007b)
+ *(.upper_fonts.image_data_FontT24_0x007c)
+ . = . + 0x1c;
+ *(.upper_fonts.image_data_FontT24_0x007d)
+ *(.upper_fonts.image_data_FontT24_0x007e)
+ *(.upper_fonts.image_data_FontT24_0x00a1)
+ *(.upper_fonts.image_data_FontT24_0x00bf)
+ *(.upper_fonts.image_data_FontT24_0x00c1)
+ *(.upper_fonts.image_data_FontT24_0x00c4)
+ *(.upper_fonts.image_data_FontT24_0x00c6)
+ *(.upper_fonts.image_data_FontT24_0x00c7)
+ *(.upper_fonts.image_data_FontT24_0x00c9)
+ *(.upper_fonts.image_data_FontT24_0x00cd)
+ *(.upper_fonts.image_data_FontT24_0x00d1)
+ *(.upper_fonts.image_data_FontT24_0x00d3)
+ *(.upper_fonts.image_data_FontT24_0x00d6)
+ *(.upper_fonts.image_data_FontT24_0x00da)
+ *(.upper_fonts.image_data_FontT24_0x00dc)
+ *(.upper_fonts.image_data_FontT24_0x00df)
+ *(.upper_fonts.image_data_FontT24_0x00e0)
+ *(.upper_fonts.image_data_FontT24_0x00e1)
+ *(.upper_fonts.image_data_FontT24_0x00e2)
+ *(.upper_fonts.image_data_FontT24_0x00e4)
+ *(.upper_fonts.image_data_FontT24_0x00e6)
+ *(.upper_fonts.image_data_FontT24_0x00e7)
+ *(.upper_fonts.image_data_FontT24_0x00e8)
+ *(.upper_fonts.image_data_FontT24_0x00e9)
+ *(.upper_fonts.image_data_FontT24_0x00ec)
+ *(.upper_fonts.image_data_FontT24_0x00ed)
+ *(.upper_fonts.image_data_FontT24_0x00f0)
+ *(.upper_fonts.image_data_FontT24_0x00f1)
+ *(.upper_fonts.image_data_FontT24_0x00f2)
+ *(.upper_fonts.image_data_FontT24_0x00f3)
+ *(.upper_fonts.image_data_FontT24_0x00f6)
+ *(.upper_fonts.image_data_FontT24_0x00f9)
+ *(.upper_fonts.image_data_FontT24_0x00fa)
+ *(.upper_fonts.image_data_FontT24_0x00fc)
+ *(.upper_fonts.image_data_FontT24_0x00ff)
+ *(.upper_fonts.image_data_FontT24_0x0152)
+ *(.upper_fonts.image_data_FontT24_0x0153)
+ *(.upper_fonts.image_data_FontT24_0x0178)
+ *(.upper_fonts.image_data_FontT24_0x002b)
+ . = . + 0x1d642;
+ *(.upper_images.image_data_ostc_fuer_Tauchcomputer_240px)
+ *(.upper_fonts.image_data_FontT84_0x002e)
+ . = . + 0x9f;
+ *(.upper_fonts.image_data_FontT84_0x0030)
+ . = . + 0x0d;
+ *(.upper_fonts.image_data_FontT84_0x0031)
+ . = . + 0xaa;
+ *(.upper_fonts.image_data_FontT84_0x0032)
+ . = . + 0x7b;
+ *(.upper_fonts.image_data_FontT84_0x0033)
+ . = . + 0x38;
+ *(.upper_fonts.image_data_FontT84_0x0034)
+ . = . + 0x7f;
+ *(.upper_fonts.image_data_FontT84_0x0035)
+ . = . + 0x77;
+ *(.upper_fonts.image_data_FontT84_0x0036)
+ . = . + 0x7b;
+ *(.upper_fonts.image_data_FontT84_0x0037)
+ . = . + 0x0d;
+ *(.upper_fonts.image_data_FontT84_0x0038)
+ . = . + 0x2b;
+ *(.upper_fonts.image_data_FontT84_0x0039)
+ . = . + 0xe8;
+ *(.upper_fonts.image_data_FontT54_0x0022)
+ *(.upper_fonts.image_data_FontT54_0x0025)
+ . = . + 0x112;
+ *(.upper_fonts.image_data_FontT54_0x0027)
+ . = . + 0xd8;
+ *(.upper_fonts.image_data_FontT54_0x002a)
+ . = . + 0x133;
+ *(.upper_fonts.image_data_FontT54_0x002d)
+ . = . + 0x1d7;
+ *(.upper_fonts.image_data_FontT54_0x002e)
+ . = . + 0x17b;
+ *(.upper_fonts.image_data_FontT54_0x002f)
+ . = . + 0x02;
+ *(.upper_fonts.image_data_FontT54_0x0030)
+ . = . + 0x0ba;
+ *(.upper_fonts.image_data_FontT54_0x0031)
+ . = . + 0x27d;
+ *(.upper_fonts.image_data_FontT54_0x0032)
+ . = . + 0xe3;
+ *(.upper_fonts.image_data_FontT54_0x0033)
+ . = . + 0x35;
+ *(.upper_fonts.image_data_FontT54_0x0034)
+ . = . + 0x68;
+ *(.upper_fonts.image_data_FontT54_0x0035)
+ . = . + 0x35;
+ *(.upper_fonts.image_data_FontT54_0x0036)
+ . = . + 0xba;
+ *(.upper_fonts.image_data_FontT54_0x0037)
+ . = . + 0x191;
+ *(.upper_fonts.image_data_FontT54_0x0038)
+ . = . + 0xe3;
+ *(.upper_fonts.image_data_FontT54_0x0039)
+ . = . + 0xe3;
+ *(.upper_fonts.image_data_FontT54_0x003a)
+ . = . + 0x7b;
+ *(.upper_fonts.image_data_FontT54_0x0043)
+ . = . + 0x3b;
+ *(.upper_fonts.image_data_FontT54_0x006c)
+ . = . + 0x2d;
+ *(.upper_fonts.image_data_FontT54_0x006d)
+ . = . + 0x94;
+ *(.upper_fonts.image_data_FontT54_0x00ba)
+ . = . + 0x0a;
+
+ *(.upper_fonts.image_data_FontT105_0x002*)
+ *(.upper_fonts.image_data_FontT105_0x003*)
+ *(.upper_fonts.image_data_FontT105_0x0043)
+ . = . + 0x17c8;
+ *(.upper_fonts.image_data_FontT105_0x007c)
+ *(.upper_fonts.image_data_FontT105_0x00ba)
+ *(.upper_fonts.image_data_FontT105_54_0x006d)
+
+ *(.upper_fonts.image_data_FontT54_0x0068)
+ . = . + 0x1195;
+
+ *(.upper_fonts.image_data_FontT42_0x00b0)
+ *(.upper_fonts.image_data_FontT42_0x0020)
+ . = . + 0x23;
+ *(.upper_fonts.image_data_FontT42_0x002*)
+ *(.upper_fonts.image_data_FontT42_0x003*)
+ *(.upper_fonts.image_data_FontT42_0x004*)
+ *(.upper_fonts.image_data_FontT42_0x005*)
+ . = . + 0x420;
+ *(.upper_fonts.image_data_FontT42_0x006*)
+ *(.upper_fonts.image_data_FontT42_0x0070)
+ *(.upper_fonts.image_data_FontT42_0x0071)
+ *(.upper_fonts.image_data_FontT42_0x0072)
+ *(.upper_fonts.image_data_FontT42_0x0073)
+ *(.upper_fonts.image_data_FontT42_0x0074)
+ *(.upper_fonts.image_data_FontT42_0x0075)
+ *(.upper_fonts.image_data_FontT42_0x0076)
+ *(.upper_fonts.image_data_FontT42_0x0077)
+ *(.upper_fonts.image_data_FontT42_0x0078)
+ *(.upper_fonts.image_data_FontT42_0x0079)
+ . = . + 0x12c0;
+ *(.upper_fonts.image_data_FontT42_*)
+ *(.upper_fonts.image_data_T54addon_0x002b_PLUS*)
+ *(.upper_fonts.image_data_T54addon_0x0040_AT*)
+ *(.upper_fonts.image_data_FontT48addon*)
+ *(.upper_fonts.image_data_FontT24plus_0x00fb*)
+ *(.upper_fonts.image_data_FontT24plus_0x00fd*)
+ *(.upper_fonts.image_data_FontT48_*)
+ *(.upper_fonts.image_data_awe48_*)
+
+/* moving of fonts from lower to upper */
+
+ *(.upper_fonts.*)
+
+ __upper_font_data_end = .;
+ } >UPPER
+
+
+
+ .upper_directory 0x081DEF00 : {
+ __font_directory = .;
+ *(.upper_font_directory.Awe48)
+ *(.upper_font_directory.FontT24)
+ *(.upper_font_directory.FontT42)
+ *(.upper_font_directory.FontT48)
+ *(.upper_font_directory.FontT54)
+ *(.upper_font_directory.FontT84)
+ *(.upper_font_directory.FontT105)
+ *(.upper_font_directory.FontT144)
+ *(.upper_font_directory.Batt24*)
+
+ __font_directory_end = .;
+ LONG( -1 ); /* Magic End Marker */
+
+ } >UPPER
+
+
+
+
+
+ /* Used by the startup to initialize data */
+_sidata = LOADADDR(.data);
+
+ /************ Initialized Data Sections into RAM & ROM Memory **************/
+ .data :
+ {
+ . = ALIGN(4);
+
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(vtable)
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+ } >RAM AT>ROM_BOOT
+
+
+
+ /*************** Uninitialized Data Section into RAM Memory ****************/
+ .bss :
+ {
+ . = ALIGN(4);
+
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /********************** User_heap_stack section ****************************/
+ /* just to check that there is enough RAM left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ PROVIDE ( __end__ = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ _estack = .;
+ } >RAM
+
+ /* Remove information from the compiler libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff -r f7318457df4d -r e373e90a48db BootLoader/Inc/base_bootloader.h
--- a/BootLoader/Inc/base_bootloader.h Tue Aug 13 13:24:54 2024 +0200
+++ b/BootLoader/Inc/base_bootloader.h Wed Aug 14 16:44:46 2024 +0200
@@ -59,9 +59,6 @@
#define BASE_BOOTLOADER_H
/* Includes ------------------------------------------------------------------*/
-
-#define STM32F429xx
-
#include "stm32f4xx_hal.h"
#include "tStructure.h"
diff -r f7318457df4d -r e373e90a48db BootLoader/Src/base_bootlader.c
--- a/BootLoader/Src/base_bootlader.c Tue Aug 13 13:24:54 2024 +0200
+++ b/BootLoader/Src/base_bootlader.c Wed Aug 14 16:44:46 2024 +0200
@@ -223,6 +223,19 @@
#include "stm32f4xx_hal_flash_ex.h"
#include "stm32f4xx_hal_wwdg.h"
+#ifdef BOOTLOADER_STANDALONE
+#include "Fonts/Font_T144_plus.h"
+#include "Fonts/Font_T84.h"
+#include "Fonts/Font_T105.h"
+#include "Fonts/Font_T54.h"
+#include "Fonts/Font_T48_plus.h"
+#include "Fonts/Font_T24.h"
+#include "Fonts/Font_T42.h"
+#include "Fonts/image_battery.h"
+#include "Fonts/image_heinrichs_weikamp.h"
+#include "Fonts/image_ostc.h"
+#endif
+
// From Discovery/Inc (shall be shared...)
#include "data_exchange_main.h"
#include "display.h"
@@ -269,7 +282,7 @@
.magic[3] = FIRMWARE_MAGIC_END
};
-
+#if 0
const SHardwareData HardwareData __attribute__((at(HARDWAREDATA_ADDRESS))) = {
// first 52 bytes
@@ -297,7 +310,7 @@
.secondary_bluetooth_name_set = 0xFF,
.secondary_info = {0xFF,0xFF,0xFF,0xFF}
};
-
+#endif
RTC_HandleTypeDef RtcHandle;
TIM_HandleTypeDef TimHandle; /* used in stm32f4xx_it.c too */
@@ -418,10 +431,15 @@
uint8_t ptr;
uint32_t pOffset;
+ const SHardwareData* HardwareData = hardwareDataGetPointer();
+
set_globalState(StBoot0);
HAL_Init();
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);
+ SystemClock_Config();
+
+ MX_GPIO_Init();
/* feedback for the user
* aber sehr unsch�n beim Warmstart
@@ -442,8 +460,8 @@
}
else
if( (firmware_MainCodeIsProgammed() == 0)
- || (hardwareDataGetPointer()->primarySerial == 0xFFFF)
- || (hardwareDataGetPointer()->production_bluetooth_name_set == 0xFF))
+ || (HardwareData->primarySerial == 0xFFFF)
+ || (HardwareData->production_bluetooth_name_set == 0xFF))
{
i = 1;
}
@@ -495,10 +513,6 @@
if((i == 0) && (callForUpdate == 0))
firmware_JumpTo_Application();
- SystemClock_Config();
-
- MX_GPIO_Init();
- MX_Bluetooth_PowerOn();
MX_SPI_Init();
SDRAM_Config();
HAL_Delay(100);
@@ -663,7 +677,7 @@
textVersion[ptr++] = 'a';
textVersion[ptr++] = 'l';
textVersion[ptr++] = ' ';
- if(HardwareData.primarySerial == 0xFFFF)
+ if(HardwareData->primarySerial == 0xFFFF)
{
textVersion[ptr++] = 'n';
textVersion[ptr++] = 'o';
@@ -673,36 +687,44 @@
textVersion[ptr++] = 'e';
textVersion[ptr++] = 't';
}
- else if(HardwareData.secondarySerial == 0xFFFF)
+ else if(HardwareData->secondarySerial == 0xFFFF)
{
textVersion[ptr++] = '#';
- ptr += gfx_number_to_string(5,1,&textVersion[ptr],HardwareData.primarySerial);
+ ptr += gfx_number_to_string(5,1,&textVersion[ptr],HardwareData->primarySerial);
}
else
{
textVersion[ptr++] = '#';
- ptr += gfx_number_to_string(5,1,&textVersion[ptr],HardwareData.secondarySerial);
+ ptr += gfx_number_to_string(5,1,&textVersion[ptr],HardwareData->secondarySerial);
textVersion[ptr++] = ' ';
textVersion[ptr++] = '(';
- ptr += gfx_number_to_string(5,1,&textVersion[ptr],HardwareData.primarySerial);
+ ptr += gfx_number_to_string(5,1,&textVersion[ptr],HardwareData->primarySerial);
textVersion[ptr++] = ')';
}
textVersion[ptr++] = '\020';
textVersion[ptr] = 0;
+ TIM_init();
+ MX_UART_Init();
+ MX_Bluetooth_PowerOn();
+ tComm_init();
+
tInfo_button_text("Exit","","Sleep");
- tInfo_newpage("Bootloader 160602");
+ tInfo_newpage("Bootloader 240812");
tInfo_write("start bluetooth");
tInfo_write("");
tInfo_write(textVersion);
- tInfo_write("");
+ if(tComm_Set_Bluetooth_Name(0) == 0xFF)
+ {
+ tInfo_write("Init bluetooth");
+ tComm_StartBlueModBaseInit();
+ }
+ else
+ {
+ tInfo_write("");
+ tComm_StartBlueModConfig();
+ }
- TIM_init();
- MX_UART_Init();
- MX_Bluetooth_PowerOn();
- tComm_Set_Bluetooth_Name(0);
-
- tComm_init();
set_globalState_Base();
GFX_start_VSYNC_IRQ();
@@ -1153,54 +1175,65 @@
*/
static void SystemClock_Config(void)
{
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_OscInitTypeDef RCC_OscInitStruct;
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
+ /* Enable Power Control clock */
+ __PWR_CLK_ENABLE();
- /* Enable Power Control clock */
- __PWR_CLK_ENABLE();
-
- /* The voltage scaling allows optimizing the power consumption when the device is
- clocked below the maximum system frequency, to update the voltage scaling value
- regarding system frequency refer to product datasheet. */
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+ /* The voltage scaling allows optimizing the power consumption when the device is
+ clocked below the maximum system frequency, to update the voltage scaling value
+ regarding system frequency refer to product datasheet. */
+ __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );
- /*##-1- System Clock Configuration #########################################*/
- /* Enable HSE Oscillator and activate PLL with HSE as source */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = 8;
- RCC_OscInitStruct.PLL.PLLN = 336;//360;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
- RCC_OscInitStruct.PLL.PLLQ = 7;
- HAL_RCC_OscConfig(&RCC_OscInitStruct);
+ /*##-1- System Clock Configuration #########################################*/
+ /* Enable HighSpeed Oscillator and activate PLL with HSE/HSI as source */
+ RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };
+#ifdef DISC1_BOARD
+ // Use High Speed Internal (HSI) oscillator, running at 16MHz.
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ RCC_OscInitStruct.HSICalibrationValue = 0x10;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
+ RCC_OscInitStruct.PLL.PLLM = 16; // HSI/16 is 1Mhz.
+#else
+ // Use High Speed External oscillator, running at 8MHz
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = 8; // HSE/8 is 1Mhz.
+#endif
+ // System clock = PLL (1MHz) * N/p = 180 MHz.
+ RCC_OscInitStruct.PLL.PLLN = 360;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = 7;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ HAL_RCC_OscConfig( &RCC_OscInitStruct );
// HAL_PWREx_ActivateOverDrive();
-HAL_PWREx_DeactivateOverDrive();
- /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
- clocks dividers */
- RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
- HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_8);//FLASH_LATENCY_5);
+ HAL_PWREx_DeactivateOverDrive();
+
+ /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
+ | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
+ HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_8 ); //FLASH_LATENCY_5);
- /*##-2- LTDC Clock Configuration ###########################################*/
- /* LCD clock configuration */
- /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
- /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */
- /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */
- /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDIVR_8 = 48/8 = 6 Mhz */
+ /*##-2- LTDC Clock Configuration ###########################################*/
+ /* LCD clock configuration */
+ /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
+ /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */
+ /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */
+ /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDIVR_8 = 48/8 = 6 Mhz */
- /* neu: 8MHz/8*300/5/8 = 7,5 MHz = 19,5 Hz bei 800 x 480 */
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
- PeriphClkInitStruct.PLLSAI.PLLSAIN = 300;//192;
- PeriphClkInitStruct.PLLSAI.PLLSAIR = 5;//4;
- PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8;//RCC_PLLSAIDIVR_4;// RCC_PLLSAIDIVR_2; // RCC_PLLSAIDIVR_8
- HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
+ /* neu: 8MHz/8*300/5/8 = 7,5 MHz = 19,5 Hz bei 800 x 480 */
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
+ PeriphClkInitStruct.PLLSAI.PLLSAIN = 300; //192;
+ PeriphClkInitStruct.PLLSAI.PLLSAIR = 5; //4;
+ PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8;//RCC_PLLSAIDIVR_4;// RCC_PLLSAIDIVR_2; // RCC_PLLSAIDIVR_8
+ HAL_RCCEx_PeriphCLKConfig( &PeriphClkInitStruct );
}
@@ -1503,7 +1536,7 @@
WwdgHandle.Init.Counter = 127;
HAL_WWDG_Init(&WwdgHandle);
- HAL_WWDG_Start(&WwdgHandle);
+/* HAL_WWDG_Start(&WwdgHandle); has been removed from HAL library starting_V120 */
while(1);
}
diff -r f7318457df4d -r e373e90a48db Common/Drivers/STM32F4xx/Include/system_stm32f4xx.h
--- a/Common/Drivers/STM32F4xx/Include/system_stm32f4xx.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Drivers/STM32F4xx/Include/system_stm32f4xx.h Wed Aug 14 16:44:46 2024 +0200
@@ -73,7 +73,6 @@
*/
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
-extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */
extern const uint8_t APBPrescTable[8]; /*!< APB prescalers table values */
/**
diff -r f7318457df4d -r e373e90a48db Common/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h
--- a/Common/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h Wed Aug 14 16:44:46 2024 +0200
@@ -44,6 +44,9 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
+
+extern __IO const uint8_t AHBPrescTable[16];
+
/** @addtogroup STM32F4xx_LL_Driver
* @{
*/
diff -r f7318457df4d -r e373e90a48db Common/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
--- a/Common/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c Wed Aug 14 16:44:46 2024 +0200
@@ -93,6 +93,8 @@
* @{
*/
+
+extern __IO const uint8_t AHBPrescTable[16];
#ifdef HAL_RCC_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
diff -r f7318457df4d -r e373e90a48db Common/Inc/configuration.h
--- a/Common/Inc/configuration.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Inc/configuration.h Wed Aug 14 16:44:46 2024 +0200
@@ -48,6 +48,9 @@
/* Enable to have access to the debug view options (turn on / off via menu instead of compile switch) */
/* #define HAVE_DEBUG_VIEW */
+/* Enable to have event based warnings being displayed as warning messages when the occure */
+#define HAVE_DEBUG_WARNINGS
+
/* Enable to have access to the motion control selection menu */
/* #define ENABLE_MOTION_CONTROL */
diff -r f7318457df4d -r e373e90a48db Common/Inc/data_central.h
--- a/Common/Inc/data_central.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Inc/data_central.h Wed Aug 14 16:44:46 2024 +0200
@@ -276,6 +276,9 @@
#ifdef ENABLE_BOTTLE_SENSOR
int8_t newPressure;
#endif
+#ifdef HAVE_DEBUG_WARNINGS
+ int8_t debug;
+#endif
} SWarnings;
@@ -351,6 +354,8 @@
uint8_t pscr_o2_drop;
uint8_t pscr_lung_ratio;
+
+ uint32_t activeAFViews;
} SDiveSettings;
enum CHARGE_STATUS{
@@ -446,6 +451,7 @@
SENSOR_DIGO2,
SENSOR_DIGO2M,
SENSOR_SENTINEL,
+ SENSOR_SENTINELM,
SENSOR_TYPE_O2_END,
SENSOR_CO2,
SENSOR_CO2M,
@@ -525,4 +531,7 @@
const SDecoinfo *getDecoInfo(void);
void disableTimer(void);
+
+uint8_t drawingColor_from_ascentspeed(float speed);
+
#endif // DATA_CENTRAL_H
diff -r f7318457df4d -r e373e90a48db Common/Inc/data_exchange.h
--- a/Common/Inc/data_exchange.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Inc/data_exchange.h Wed Aug 14 16:44:46 2024 +0200
@@ -38,10 +38,6 @@
/* 4th nibble command channel */
#define EXT_INTERFACE_33V_ON (0x8000u) /* Bit set to enable 3.3V power interface */
#define EXT_INTERFACE_ADC_ON (0x4000u) /* Bit set to enable ADC conversion */
-#define EXT_INTERFACE_UART_MASK (0x0700u) /* Reserve 3 bits for UART protocol selection */
-#define EXT_INTERFACE_UART_CO2 (0x0100u) /* Activate protocol for CO2 sensor */
-#define EXT_INTERFACE_UART_SENTINEL (0x0200u) /* Activate Sentinel Backup monitor protocol */
-#define EXT_INTERFACE_UART_O2 (0x0400u) /* Activate digital o2 sensor protocol (DiveO2) */
/* Command subset */
#define EXT_INTERFACE_AUTODETECT (0x0001u) /* Start auto detection of connected sensors */
diff -r f7318457df4d -r e373e90a48db Common/Inc/settings.h
--- a/Common/Inc/settings.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Inc/settings.h Wed Aug 14 16:44:46 2024 +0200
@@ -120,7 +120,8 @@
uint8_t deco:1;
uint8_t travel:1;
uint8_t off:1;
-uint8_t spare:3;
+uint8_t decocalc:1;
+uint8_t spare:2;
} gasubit8_t;
typedef union{
@@ -311,6 +312,7 @@
uint16_t scrubTimerCur_Obsolete; /* have been replaced with new scrubber data format */
uint8_t scrubTimerMode;
uint8_t ext_sensor_map[8]; /* redefined in 0xFFFF0027 */
+ uint8_t cvAutofocus;
} SSettings;
typedef struct
diff -r f7318457df4d -r e373e90a48db Common/Src/decom.c
--- a/Common/Src/decom.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Common/Src/decom.c Wed Aug 14 16:44:46 2024 +0200
@@ -37,10 +37,11 @@
#include "decom.h"
#include
+#include
#include "settings.h"
#include "calc_crush.h"
-# define FRACTION_N2_AIR 0.7902
+#define FRACTION_N2_AIR 0.7902
const float helium_time_constant[16] = {
3.68695308808482E-001,
@@ -577,99 +578,100 @@
}
+void insertGasIntoList(SGasLine* pGas, SGasLine** pGasList, uint8_t gasInSettings, uint8_t* pGasInSettingsList, uint8_t GasListLength)
+{
+ uint8_t localGasIndex = GasListLength;
+ if(pGas != 0)
+ {
+ while(localGasIndex != 0) /* first entry */
+ {
+ if(pGasList[localGasIndex-1]->depth_meter > pGas->depth_meter) /* switch depth of existing gas is deeper then new one => move down */
+ {
+ pGasList[localGasIndex] = pGasList[localGasIndex-1];
+ pGasInSettingsList[localGasIndex] = pGasInSettingsList[localGasIndex - 1];
+ localGasIndex--;
+ }
+ else
+ {
+ break;
+ }
+ }
+ pGasList[localGasIndex] = pGas;
+ pGasInSettingsList[localGasIndex] = gasInSettings;
+ }
+}
void decom_CreateGasChangeList(SDiveSettings* pInput, const SLifeData* pLifeData)
{
- int i=0, j = 0;
- int count = 0;
- for(i=0;i< 5;i++)
- {
- //FirstGas
+ SGasLine localPSCRFirst;
+ SGasLine *pLocalGasList[5] = {0,0,0,0,0};
+ uint8_t localGasInSettingsList[5] = {0,0,0,0,0};
+
+ uint8_t gasStart = 1;
+ uint8_t gasIndex = 0;
+ uint8_t gasEntryCnt = 0;
- pInput->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero = 0;
- pInput->decogaslist[i].GasIdInSettings = 255;
- pInput->decogaslist[i].setPoint_cbar = 0;
- pInput->decogaslist[i].helium_percentage = 0;
- pInput->decogaslist[i].nitrogen_percentage = 0;
+ int i=0;
+ for(i=0;i< 5;i++) /* reset list */
+ {
+ pInput->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero = 0;
+ pInput->decogaslist[i].GasIdInSettings = 255;
+ pInput->decogaslist[i].setPoint_cbar = 0;
+ pInput->decogaslist[i].helium_percentage = 0;
+ pInput->decogaslist[i].nitrogen_percentage = 0;
+ }
+ /* FirstGas
+ * 0 = special gas, 1 to 5 is OC gas, 6 to 10 is diluent
+ */
+ pInput->decogaslist[0] = pLifeData->actualGas;
+ /* Add Deco Gases
+ * special (gasId == 0) is never a deco/travel gas but actual gas only
+ */
+
+ if(pInput->diveMode != DIVEMODE_OC)
+ {
+ gasStart = 6; /* CCR or PSCR => CC gaslist */
+ }
+
+ if(pInput->diveMode == DIVEMODE_PSCR) /* Handle first gas as deco gas */
+ {
+ for(gasIndex = gasStart; gasIndex < gasStart + 5; gasIndex++)
+ {
+ if(pInput->gas[gasIndex].note.ub.first)
+ {
+ if (pLifeData->actualGas.GasIdInSettings != gasIndex)
+ {
+ memcpy(&localPSCRFirst, &pInput->gas[gasIndex], sizeof(SGasLine));
+ localPSCRFirst.depth_meter = calc_MOD(gasIndex);
+ insertGasIntoList(&localPSCRFirst, pLocalGasList, gasIndex, localGasInSettingsList, gasEntryCnt);
+ gasEntryCnt++;
+ break;
}
- //pInput->liveData.dive_time_seconds = 0;
-
- /* FirstGas
- * 0 = special gas, 1 to 5 ist OC gas, 6 to 10 is diluent
- */
-
+ }
+ }
+ }
- pInput->decogaslist[0] = pLifeData->actualGas;
-
- /* Add Deco Gases
- * special (gasId == 0) is never a deco/travel gas but actual gas only
- */
- if(pInput->diveMode == DIVEMODE_OC)
- {
-
- for(i=1;i<= 5;i++)
- {
- if(pInput->gas[i].note.ub.active && pInput->gas[i].depth_meter
- && (pLifeData->actualGas.GasIdInSettings != i)
- &&(pInput->gas[i].depth_meter < pLifeData->depth_meter ) )
- {
- count = 1;
- for(j=1;j<= 5;j++)
- {
- if( (pInput->gas[j].note.ub.active && pInput->gas[j].depth_meter > 0)
- && (pLifeData->actualGas.GasIdInSettings != j) // new hw 160905
- && (pInput->gas[j].depth_meter > pInput->gas[i].depth_meter))
- count++;
- }
- pInput->decogaslist[count].change_during_ascent_depth_meter_otherwise_zero = pInput->gas[i].depth_meter;
- pInput->decogaslist[count].nitrogen_percentage = 100;
- pInput->decogaslist[count].nitrogen_percentage -= pInput->gas[i].oxygen_percentage;
- pInput->decogaslist[count].nitrogen_percentage -= pInput->gas[i].helium_percentage;
- pInput->decogaslist[count].helium_percentage = pInput->gas[i].helium_percentage;
- pInput->decogaslist[count].GasIdInSettings = i;
- pInput->decogaslist[count].AppliedDiveMode = DIVEMODE_OC;
- }
- }
- }
- else
+ for(gasIndex = gasStart; gasIndex < gasStart + 5; gasIndex++)
+ {
+ if(((pInput->gas[gasIndex].note.ub.active) && (pInput->gas[gasIndex].depth_meter)) /* ready for deco calculation */
+ && (pLifeData->actualGas.GasIdInSettings != gasIndex) /* not the actual gas */
+ && (pInput->gas[gasIndex].depth_meter < pLifeData->depth_meter )) /* a gas which is on the way to surface */
{
- //divmode CCR or PSCR
- for(i=6; i <= 10; i++)
- {
- if((pInput->gas[i].note.ub.active) && (pInput->gas[i].depth_meter)
- && (pLifeData->actualGas.GasIdInSettings != i)
- && (pInput->gas[i].depth_meter < pLifeData->depth_meter ))
- {
- count = 1;
- for(j=6;j<= 10;j++)
- {
-// if(pInput->gas[j].note.ub.active && pInput->gas[j].depth_meter > 0 &&pInput->gas[j].depth_meter > pInput->gas[i].depth_meter)
- if(((pInput->gas[j].note.ub.active) && (pInput->gas[j].depth_meter > 0))
- && (pLifeData->actualGas.GasIdInSettings != j) // new hw 160905
- && (pInput->gas[j].depth_meter > pInput->gas[i].depth_meter))
- count++;
- }
- pInput->decogaslist[count].change_during_ascent_depth_meter_otherwise_zero = pInput->gas[i].depth_meter;
- pInput->decogaslist[count].nitrogen_percentage = 100;
- if(pInput->diveMode == DIVEMODE_PSCR)
- {
- pInput->decogaslist[count].AppliedDiveMode = DIVEMODE_PSCR;
- pInput->decogaslist[count].setPoint_cbar = decom_calc_SimppO2_O2based((float)(pInput->gas[i].depth_meter / 10.0 + 1.0), pInput->gas[i].oxygen_percentage, pInput->decogaslist[count].pscr_factor ) * 100;
- pInput->decogaslist[count].nitrogen_percentage -= pInput->gas[i].oxygen_percentage;
- }
- else
- {
- pInput->decogaslist[count].nitrogen_percentage -= pInput->gas[i].oxygen_percentage;
- pInput->decogaslist[count].AppliedDiveMode = DIVEMODE_CCR;
- pInput->decogaslist[count].setPoint_cbar = pInput->decogaslist[0].setPoint_cbar; /* assume that current setpoint is kept till end of the dive */
- }
- pInput->decogaslist[count].nitrogen_percentage -= pInput->gas[i].helium_percentage;
- pInput->decogaslist[count].helium_percentage = pInput->gas[i].helium_percentage;
- pInput->decogaslist[count].GasIdInSettings = i;
- }
- }
+ insertGasIntoList(&pInput->gas[gasIndex], pLocalGasList, gasIndex, localGasInSettingsList, gasEntryCnt);
+ gasEntryCnt++;
}
+ }
+ for(gasIndex = 1; gasIndex < gasEntryCnt+1; gasIndex++) /* move gasLine Information into deco List */
+ {
+ pInput->decogaslist[gasIndex].change_during_ascent_depth_meter_otherwise_zero = pLocalGasList[gasIndex-1]->depth_meter;
+ pInput->decogaslist[gasIndex].nitrogen_percentage = 100;
+ pInput->decogaslist[gasIndex].nitrogen_percentage -= pLocalGasList[gasIndex-1]->oxygen_percentage;
+ pInput->decogaslist[gasIndex].nitrogen_percentage -= pLocalGasList[gasIndex-1]->helium_percentage;
+ pInput->decogaslist[gasIndex].helium_percentage = pLocalGasList[gasIndex-1]->helium_percentage;
+ pInput->decogaslist[gasIndex].GasIdInSettings = localGasInSettingsList[gasIndex-1];
+ pInput->decogaslist[gasIndex].AppliedDiveMode = pInput->diveMode;
+ }
}
void test_decom_CreateGasChangeList(void)
{
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/gfx_engine.h
--- a/Discovery/Inc/gfx_engine.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/gfx_engine.h Wed Aug 14 16:44:46 2024 +0200
@@ -113,6 +113,7 @@
/* Exported functions --------------------------------------------------------*/
void GFX_init(uint32_t * pDestinationOut);
+void GFX_init1_no_DMA(uint32_t * pDestinationOut, uint8_t blockFrames);
void GFX_helper_font_memory_list(const tFont *Font);
@@ -199,4 +200,5 @@
tFont* GFX_Check_Extra_Font(uint8_t character, tFont *Font);
uint32_t GFX_Character_Width(uint8_t character, tFont *Font);
+void Gfx_colorsscheme_mod(char *text, uint8_t alternativeColor);
#endif // GFX_ENGINE_H
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/gfx_fonts.h
--- a/Discovery/Inc/gfx_fonts.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/gfx_fonts.h Wed Aug 14 16:44:46 2024 +0200
@@ -52,6 +52,7 @@
// Actual data is stored between __upper_font_data and __upper_font_data_end,
// and uses 0x081b9a3a - 0x08132040 = 879FA = 542 KB.
//
+
extern const tFont Awe48;
extern const tFont FontT24;
extern const tFont FontT42;
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/ostc_hw2.h
--- a/Discovery/Inc/ostc_hw2.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/ostc_hw2.h Wed Aug 14 16:44:46 2024 +0200
@@ -197,4 +197,11 @@
#define RESET_LOGIC_ALLES_OK_GPIO_PORT GPIOB
#define RESET_LOGIC_ALLES_OK_GPIO_ENABLE() __GPIOB_CLK_ENABLE()
+/* new OSTC5 */
+#define BLE_UBLOX_DSR_PIN GPIO_PIN_12
+#define BLE_UBLOX_DSR_GPIO_PORT GPIOC
+#define BLE_UBLOX_DSR_GPIO_ENABLE() __GPIOC_CLK_ENABLE()
+
+
+
#endif // OSTC_HW2_H
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/stm32f4xx_hal_conf.h
--- a/Discovery/Inc/stm32f4xx_hal_conf.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/stm32f4xx_hal_conf.h Wed Aug 14 16:44:46 2024 +0200
@@ -83,7 +83,9 @@
//#define HAL_USART_MODULE_ENABLED
//#define HAL_IRDA_MODULE_ENABLED
//#define HAL_SMARTCARD_MODULE_ENABLED
-//#define HAL_WWDG_MODULE_ENABLED
+#ifdef BOOTLOADER_STANDALONE
+#define HAL_WWDG_MODULE_ENABLED
+#endif
//#define HAL_PCD_MODULE_ENABLED
//#define HAL_HCD_MODULE_ENABLED
#define HAL_SDRAM_MODULE_ENABLED
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/t3.h
--- a/Discovery/Inc/t3.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/t3.h Wed Aug 14 16:44:46 2024 +0200
@@ -42,6 +42,7 @@
uint8_t t3_getCustomView(void);
void t3_set_customview_to_primary(void);
uint8_t t3_customview_disabled(uint8_t view);
+void t3_handleAutofocus(void);
int printScrubberText(char *text, size_t size, SSettings *settings);
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tComm.h
--- a/Discovery/Inc/tComm.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tComm.h Wed Aug 14 16:44:46 2024 +0200
@@ -42,7 +42,22 @@
BM_CONFIG_BAUD,
BM_CONFIG_SILENCE,
BM_CONFIG_DONE,
- BM_CONFIG_RETRY
+ BM_CONFIG_RETRY,
+#ifdef BOOTLOADER_STANDALONE
+ BM_INIT_TRIGGER_ON = 100,
+ BM_INIT_TRIGGER_OFF,
+ BM_INIT_FACTORY,
+ BM_INIT_MODE,
+ BM_INIT_BLE,
+ BM_INIT_NAME,
+ BM_INIT_SSP_IDO_OFF,
+ BM_INIT_SSP_IDO_ON,
+ BM_INIT_SSP_ID1_OFF,
+ BM_INIT_SSP_ID1_ON,
+ BM_INIT_STORE,
+ BM_INIT_RESTART,
+ BM_INIT_DONE
+#endif
} BlueModTmpConfig_t;
/* Exported functions --------------------------------------------------------*/
@@ -53,6 +68,7 @@
void tComm_exit(void);
void tComm_verlauf(uint8_t percentage_complete);
uint8_t tComm_Set_Bluetooth_Name(uint8_t force);
+void tComm_StartBlueModBaseInit(void);
void tComm_StartBlueModConfig(void);
void tComm_RequestBluetoothStrength(void);
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tHome.h
--- a/Discovery/Inc/tHome.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tHome.h Wed Aug 14 16:44:46 2024 +0200
@@ -80,7 +80,7 @@
CVIEW_Charger,
CVIEW_CcrSummary,
CVIEW_Timer,
- CVIEW_END = 31 /* The ID is used in shift operation => 31 is the max number of supported views */
+ CVIEW_END /* The ID is used in shift operation => 31 is the max number of supported views */
};
enum CUSTOMVIEWS_BF
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tInfo.h
--- a/Discovery/Inc/tInfo.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tInfo.h Wed Aug 14 16:44:46 2024 +0200
@@ -58,6 +58,7 @@
void tInfo_write_field_on_off(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t int1);
void tInfo_write_buttonTextline(GFX_DrawCfgScreen *screenPtr, uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode);
+void tInfo_write_buttonTextline_simple(uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode);
void tInfo_setEvent(uint32_t inputEventID, uint32_t inputFunctionCall);
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tInfoPreDive.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Discovery/Inc/tInfoPreDive.h Wed Aug 14 16:44:46 2024 +0200
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file Discovery/Inc/tInfoSensor.h
+/// \brief Infopage content for connected smart sensors
+/// \author heinrichs weikamp gmbh
+/// \date 17-11-2022
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2022 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 TINFO_PREDIVE_H
+#define TINFO_PREDIVE_H
+
+/* Exported functions --------------------------------------------------------*/
+void openInfo_PreDive();
+void refreshInfo_PreDive(GFX_DrawCfgScreen s);
+void sendActionToInfoPreDive(uint8_t sendAction);
+
+
+#endif /* TINFO_COMPASS_H */
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tMenu.h
--- a/Discovery/Inc/tMenu.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tMenu.h Wed Aug 14 16:44:46 2024 +0200
@@ -87,6 +87,7 @@
void selectPage(uint32_t selection);
+uint8_t getLineMask(uint32_t lineId);
void resetLineMask(uint32_t lineId);
void disableLine(uint32_t lineId);
void enableLine(uint32_t lineId);
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tMenuEdit.h
--- a/Discovery/Inc/tMenuEdit.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tMenuEdit.h Wed Aug 14 16:44:46 2024 +0200
@@ -40,6 +40,7 @@
#define ME_Y_LINE5 (ME_Y_LINE1 + (4 * ME_Y_LINE_STEP))
#define ME_Y_LINE6 (ME_Y_LINE1 + (5 * ME_Y_LINE_STEP))
+#define EXIT_TO_INFO_PREDIVE (245)
#define EXIT_TO_NEXT_MENU (246)
#define EXIT_TO_INFO_SENSOR (247)
#define EXIT_TO_INFO_COMPASS (248)
@@ -59,6 +60,8 @@
void sendActionToMenuEdit(uint8_t sendAction);
void tMenuEdit_init(void);
+void resetMenuContentStructure();
+void resetMenuStructure(uint8_t color);
void resetMenuEdit(uint8_t color);
void tMenuEdit_refresh_live_content(void);
void tMenuEdit_refresh_field(uint32_t editID);
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tMenuEditCustom.h
--- a/Discovery/Inc/tMenuEditCustom.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tMenuEditCustom.h Wed Aug 14 16:44:46 2024 +0200
@@ -34,10 +34,19 @@
#include "settings.h"
#include "data_central.h"
+enum afDetectionState
+{
+ AF_VIEW_NOCHANGE = 0,
+ AF_VIEW_ACTIVATED,
+ AF_VIEW_DEACTIVATED
+};
+
+
void openEdit_Custom(uint8_t line);
void openEdit_CustomviewDivemode(const uint8_t* pcv_changelist);
void openEdit_CustomviewDivemodeMenu(uint8_t line);
void CustomviewDivemode_refresh();
void refresh_ViewPort(void);
+uint8_t HandleAFCompass(void);
#endif /* TMENU_EDIT_CUSTOM_H */
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tMenuEditXtra.h
--- a/Discovery/Inc/tMenuEditXtra.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tMenuEditXtra.h Wed Aug 14 16:44:46 2024 +0200
@@ -33,6 +33,5 @@
void openEdit_Xtra(uint8_t line);
void refresh_CompassHeading(void);
-void refresh_CO2Data(void);
#endif /* TMENU_EDIT_XTRA_H */
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tMenuSystem.h
--- a/Discovery/Inc/tMenuSystem.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tMenuSystem.h Wed Aug 14 16:44:46 2024 +0200
@@ -44,5 +44,6 @@
/* Exported functions --------------------------------------------------------*/
uint32_t tMSystem_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext);
+void tMSystem_checkLineStatus(void);
#endif /* TMENU_SYSTEM_H */
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tMenuXtra.h
--- a/Discovery/Inc/tMenuXtra.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tMenuXtra.h Wed Aug 14 16:44:46 2024 +0200
@@ -45,7 +45,7 @@
/* Exported functions --------------------------------------------------------*/
uint32_t tMXtra_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext);
-
+void tMXtra_checkLineStatus(void);
#ifdef __cplusplus
}
#endif
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/tStructure.h
--- a/Discovery/Inc/tStructure.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/tStructure.h Wed Aug 14 16:44:46 2024 +0200
@@ -65,6 +65,7 @@
#define InfoPageLogShow 3
#define InfoPageCompass 6
#define InfoPageSensor 8
+#define InfoPagePreDive 9
#define StI _MB(0,1,0,0,0)
#define StILOGLIST _MB(0,2,0,0,0)
@@ -74,6 +75,7 @@
#define StICOMPASS _MB(0,6,0,0,0)
#define StIDEBUG _MB(0,7,0,0,0)
#define StISENINFO _MB(0,8,0,0,0)
+#define StIPREDIVE _MB(0,9,0,0,0)
#define StI_GoToLogbook _MB(0,1,1,0,0)
#define StI_GoToPlanner _MB(0,1,2,0,0)
@@ -129,7 +131,8 @@
#define StMOG_GasType _MB(2,1,255,2,0)
#define StMOG_ChangeDepth _MB(2,1,255,3,0)
#define StMOG_SetToMOD _MB(2,1,255,4,0)
-#define StMOG_Bottle _MB(2,1,255,5,0)
+#define StMOG_CalcDeco _MB(2,1,255,5,0)
+/* #define StMOG_Bottle _MB(2,1,255,5,0) */
#define StMOG_MOD _MB(2,1,255,9,0)
@@ -212,11 +215,10 @@
#define StMXTRA_ScrubTimer_Max _MB(2,4,3,2,0)
#define StMXTRA_ScrubTimer_Reset _MB(2,4,3,3,0)
#define StMXTRA_ScrubTimer_OP_Mode _MB(2,4,3,5,0)
-
#define StMXTRA_PSCR_O2_Drop _MB(2,4,4,1,0)
#define StMXTRA_PSCR_LUNG_RATIO _MB(2,4,4,2,0)
-#define StMXTRA_CO2_Sensor _MB(2,4,5,1,0)
-#define StMXTRA_CO2_Sensor_Calib _MB(2,4,5,2,0)
+#define StMXTRA_Predive_Check _MB(2,4,5,1,0)
+
@@ -267,6 +269,7 @@
#define StMHARD1_Bluetooth _MB(2,7,1,1,0)
+#define StMHARD2_Compass _MB(2,7,2,0,0)
#define StMHARD2_Compass_SetCourse _MB(2,7,2,2,0)
#define StMHARD2_Compass_ResetCourse _MB(2,7,2,3,0)
#define StMHARD2_Compass_Calibrate _MB(2,7,2,4,0)
@@ -339,6 +342,7 @@
#define StMSYS5_SetFactoryBC _MB(2,8,6,11,0)
#define StMSYS5_ResetBluetooth _MB(2,8,6,12,0)
#define StMSYS5_SetSampleIndx _MB(2,8,6,13,0)
+#define StMSYS5_AdjustSurfPres _MB(2,8,6,14,0)
#define StMSYS_Custom0 _MB(2,8,1,0,0)
#define StMSYS_Custom1 _MB(2,8,2,0,0)
@@ -357,8 +361,9 @@
#define StMCustom1_CViewTimeout _MB(2,9,1,1,0)
#define StMCustom1_CViewStandard _MB(2,9,1,2,0)
#define StMCustom1_CViewStandardBF _MB(2,9,1,3,0)
-#define StMCustom1_CornerTimeout _MB(2,9,1,4,0)
-#define StMCustom1_CornerStandard _MB(2,9,1,5,0)
+#define StMCustom1_CViewAutoFocusBF _MB(2,9,1,4,0)
+#define StMCustom1_CornerTimeout _MB(2,9,1,5,0)
+#define StMCustom1_CornerStandard _MB(2,9,1,6,0)
#define StMCustom2_BFSelection _MB(2,9,2,1,0)
diff -r f7318457df4d -r e373e90a48db Discovery/Inc/text_multilanguage.h
--- a/Discovery/Inc/text_multilanguage.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Inc/text_multilanguage.h Wed Aug 14 16:44:46 2024 +0200
@@ -121,6 +121,7 @@
TXT_Apnoe,
TXT_Gauge,
TXT_PSClosedCircuit,
+ TXT_PreDive,
TXT_Sensor,
TXT_FixedSP,
TXT_Decoparameters,
@@ -212,6 +213,7 @@
TXT2BYTE_CompassCalib,
TXT2BYTE_CompassInertia,
TXT2BYTE_CompassDeclination,
+ TXT2BYTE_Autofocus,
TXT2BYTE_UseSensor,
TXT2BYTE_AutomaticSP,
/* */
@@ -319,6 +321,7 @@
TXT2BYTE_Sensor,
TXT2BYTE_Maintenance,
TXT2BYTE_SetBatteryCharge,
+ TXT2BYTE_AdjustAmbPressure,
TXT2BYTE_SetFactoryDefaults,
TXT2BYTE_ResetBluetooth,
TXT2BYTE_SetSampleIndex,
@@ -370,6 +373,9 @@
TXT2BYTE_Clear,
TXT2BYTE_Reset,
+ TXT2BYTE_CounterLung,
+ TXT2BYTE_Pressure,
+
TXT2BYTE_Timer,
TXT2BYTE_Starting,
TXT2BYTE_Finished,
diff -r f7318457df4d -r e373e90a48db Discovery/Src/base.c
--- a/Discovery/Src/base.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/base.c Wed Aug 14 16:44:46 2024 +0200
@@ -213,6 +213,7 @@
#include "tInfo.h"
#include "tInfoLog.h"
#include "tInfoSensor.h"
+#include "tInfoPreDive.h"
#include "tMenu.h"
#include "tMenuEdit.h"
#include "tMenuEditGasOC.h"
@@ -544,7 +545,11 @@
HandleMotionDetection();
}
#endif
-
+ /* Autofocus for T3 view */
+ if((settingsGetPointer()->cvAutofocus) && (settingsGetPointer()->design == 3) && (get_globalState() == StD) && (stateUsed->mode == MODE_DIVE))
+ {
+ t3_handleAutofocus();
+ }
#ifdef SIM_WRITES_LOGBOOK
if(stateUsed == stateSimGetPointer())
logbook_InitAndWrite(stateUsed);
@@ -894,6 +899,8 @@
break;
case InfoPageSensor: sendActionToInfoSensor(action);
break;
+ case InfoPagePreDive: sendActionToInfoPreDive(action);
+ break;
default: sendActionToInfo(action);
break;
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/buehlmann.c
--- a/Discovery/Src/buehlmann.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/buehlmann.c Wed Aug 14 16:44:46 2024 +0200
@@ -258,8 +258,11 @@
gStop.depth = next_depth;
for(i = gGas_id + 1; i < BUEHLMANN_STRUCT_MAX_GASES; i++)
{
- if(pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ if((pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ || (pDiveSettings->gas[pDiveSettings->decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
+ {
break;
+ }
float pressureChange = ((float)pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero) / 10;
if(gStop.depth <= pressureChange + 0.00001f)
{
@@ -458,8 +461,11 @@
pressureTop_tmp = pressureTop;
for(i = gGas_id + 1; i < BUEHLMANN_STRUCT_MAX_GASES; i++)
{
- if(pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ if((pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ || (pDiveSettings->gas[pDiveSettings->decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
+ {
break;
+ }
pressureChange = gSurface_pressure_bar + ((float)pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero) / 10;
if(pressureBottom <= pressureChange)
{
@@ -473,8 +479,12 @@
}
for(i = gGas_id + 1; i < BUEHLMANN_STRUCT_MAX_GASES; i++)
{
- if(pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ if((pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ || (pDiveSettings->gas[pDiveSettings->decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
+ {
break;
+ }
+
pressureChange = gSurface_pressure_bar + ((float)pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero)/ 10;
if((pressureChange < pressureBottom) && (pressureChange > pressureTop))
{
diff -r f7318457df4d -r e373e90a48db Discovery/Src/check_warning.c
--- a/Discovery/Src/check_warning.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/check_warning.c Wed Aug 14 16:44:46 2024 +0200
@@ -72,6 +72,10 @@
static int8_t check_co2(SDiveState * pDiveState);
#endif
static int8_t check_helper_same_oxygen_and_helium_content(SGasLine * gas1, SGasLine * gas2);
+#ifdef HAVE_DEBUG_WARNINGS
+static int8_t check_debug(SDiveState * pDiveState);
+#endif
+
/* Exported functions --------------------------------------------------------*/
@@ -101,6 +105,9 @@
#ifdef ENABLE_CO2_SUPPORT
pDiveState->warnings.numWarnings += check_co2(pDiveState);
#endif
+#ifdef HAVE_DEBUG_WARNINGS
+ pDiveState->warnings.numWarnings += check_debug(pDiveState);
+#endif
}
@@ -220,9 +227,10 @@
static uint8_t getBetterGasId(bool getDiluent, uint8_t startingGasId, SDiveState *diveState)
{
SDiveSettings diveSettings = diveState->diveSettings;
-
+ SGasLine localGas;
uint8_t betterGasIdLocal = startingGasId;
uint8_t bestGasDepth = 255;
+ uint8_t i;
uint8_t gasIdOffset;
if (getDiluent) {
@@ -231,30 +239,29 @@
gasIdOffset = 0;
}
- if (betterGasIdLocal == NO_GAS_ID) {
- for (unsigned i = gasIdOffset + 1; i <= gasIdOffset + 5; i++) {
- if (diveSettings.gas[i].note.ub.active && diveSettings.gas[i].note.ub.first) {
- betterGasIdLocal = i;
- }
- }
- }
-
/* life data is float, gas data is uint8 */
if (actualLeftMaxDepth(diveState)) { /* deco gases */
- for (int i=1+gasIdOffset; i<= 5+gasIdOffset; i++) {
- if ((diveSettings.gas[i].note.ub.active)
- && (diveSettings.gas[i].note.ub.deco)
- && (diveSettings.gas[i].depth_meter)
- && (diveSettings.gas[i].depth_meter >= (diveState->lifeData.depth_meter - 0.01f ))
- && (diveSettings.gas[i].depth_meter <= bestGasDepth)) {
+ for (i=1+gasIdOffset; i<= 5+gasIdOffset; i++) {
+ memcpy(&localGas,&diveSettings.gas[i],sizeof(SGasLine));
+ if((localGas.note.ub.first) && (diveSettings.diveMode == DIVEMODE_PSCR)) /* handle first gas as if it would be a deco gas set to MOD */
+ {
+ localGas.note.ub.active = 1;
+ localGas.note.ub.deco = 1;
+ localGas.depth_meter = calc_MOD(i);
+ }
+ if ((localGas.note.ub.active)
+ && (localGas.note.ub.deco)
+ && (localGas.depth_meter)
+ && (localGas.depth_meter >= (diveState->lifeData.depth_meter - 0.01f ))
+ && (localGas.depth_meter <= bestGasDepth)) {
betterGasIdLocal = i;
bestGasDepth = diveSettings.gas[i].depth_meter;
}
}
} else { /* travel gases */
bestGasDepth = 0;
- //check for travelgas
- for (int i = 1 + gasIdOffset; i <= 5 + gasIdOffset; i++) {
+ //check for travalgas
+ for (i = 1 + gasIdOffset; i <= 5 + gasIdOffset; i++) {
if ((diveSettings.gas[i].note.ub.active)
&& (diveSettings.gas[i].note.ub.travel)
&& (diveSettings.gas[i].depth_meter_travel)
@@ -265,6 +272,18 @@
}
}
}
+ if((!getDiluent) && (betterGasIdLocal > NUM_OFFSET_DILUENT)) /* an OC gas was requested but Id is pointing to a diluent => return first OC */
+ {
+ for (i = 1 ; i <= NUM_OFFSET_DILUENT; i++)
+ {
+ if(diveSettings.gas[i].note.ub.first)
+ {
+ betterGasIdLocal = i;
+ break;
+ }
+ }
+ }
+
return betterGasIdLocal;
}
@@ -285,7 +304,7 @@
if (isLoopMode(diveSettings.diveMode)) {
betterGasId = getBetterGasId(true, lifeData.actualGas.GasIdInSettings, diveState);
- betterBailoutGasId = getBetterGasId(false, NO_GAS_ID, diveState);
+ betterBailoutGasId = getBetterGasId(false, lifeData.lastDiluent_GasIdInSettings, diveState);
} else {
betterGasId = getBetterGasId(false, lifeData.actualGas.GasIdInSettings, diveState);
}
@@ -566,7 +585,7 @@
#ifdef ENABLE_CO2_SUPPORT
static int8_t check_co2(SDiveState * pDiveState)
{
- if(pDiveState->mode != MODE_DIVE)
+ if((pDiveState->mode != MODE_DIVE) || (settingsGetPointer()->co2_sensor_active == 0))
{
pDiveState->warnings.co2High = 0;
}
@@ -585,6 +604,27 @@
}
#endif
+#ifdef HAVE_DEBUG_WARNINGS
+static int8_t check_debug(SDiveState * pDiveState)
+{
+ uint8_t index = 0;
+
+ pDiveState->warnings.debug = 0;
+
+ if((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG))
+ {
+ for(index=0; index<3; index++)
+ {
+ if(((pDiveState->lifeData.extIf_sensor_map[index] == SENSOR_DIGO2M) && (((SSensorDataDiveO2*)(stateUsed->lifeData.extIf_sensor_data[index]))->status & DVO2_FATAL_ERROR)))
+ {
+ pDiveState->warnings.debug = 1;
+ }
+ }
+ }
+ return pDiveState->warnings.debug;
+}
+#endif
+
uint8_t debounce_warning_fallback(uint16_t debounceStepms)
{
uint8_t retVal = 0;
diff -r f7318457df4d -r e373e90a48db Discovery/Src/data_central.c
--- a/Discovery/Src/data_central.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/data_central.c Wed Aug 14 16:44:46 2024 +0200
@@ -72,6 +72,8 @@
#include "tCCR.h"
#include "crcmodel.h"
#include "configuration.h"
+#include "tHome.h"
+#include "t3.h"
static SDiveState stateReal = { 0 };
SDiveState stateSim = { 0 };
@@ -375,6 +377,20 @@
break;
}
}
+ /* generate Bitfield of active T3 views */
+ stateReal.diveSettings.activeAFViews = 0;
+ if(t3_customview_disabled(CVIEW_T3_Navigation) == 0)
+ {
+ stateReal.diveSettings.activeAFViews |= (1 << CVIEW_T3_Navigation);
+ }
+ if(t3_customview_disabled(CVIEW_T3_GasList) == 0)
+ {
+ stateReal.diveSettings.activeAFViews |= (1 << CVIEW_T3_GasList);
+ }
+ if(t3_customview_disabled(CVIEW_T3_DecoTTS) == 0)
+ {
+ stateReal.diveSettings.activeAFViews |= (1 << CVIEW_T3_DecoTTS);
+ }
}
@@ -902,3 +918,28 @@
{
stateUsedWrite->timerState = TIMER_STATE_OFF;
}
+
+#define SPEED_SLOW (5.0f)
+#define SPEED_MEDIUM (10.0f)
+#define SPEED_HIGH (15.0f)
+
+uint8_t drawingColor_from_ascentspeed(float speed)
+{
+ uint8_t color = CLUT_Font020;
+
+ if(speed >= SPEED_HIGH)
+ {
+ color = CLUT_WarningRed;
+ }
+ else if(speed >= SPEED_MEDIUM)
+ {
+ color = CLUT_WarningYellow;
+ }
+ else if(speed >= SPEED_SLOW)
+ {
+ color = CLUT_NiceGreen;
+ }
+ return color;
+}
+
+
diff -r f7318457df4d -r e373e90a48db Discovery/Src/data_exchange_main.c
--- a/Discovery/Src/data_exchange_main.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/data_exchange_main.c Wed Aug 14 16:44:46 2024 +0200
@@ -423,19 +423,15 @@
{
externalInterface_Cmd |= EXT_INTERFACE_ADC_ON | EXT_INTERFACE_33V_ON;
}
- if(SensorActive[SENSOR_DIGO2])
+ if((SensorActive[SENSOR_DIGO2]) || (SensorActive[SENSOR_CO2]))
{
- externalInterface_Cmd |= EXT_INTERFACE_33V_ON | EXT_INTERFACE_UART_O2;
- }
- else if(SensorActive[SENSOR_CO2]) /* TODO: at the moment only one serial sensor is supported => else condition. to be changed once multiplexing is available */
- {
- externalInterface_Cmd |= EXT_INTERFACE_33V_ON | EXT_INTERFACE_UART_CO2; /* CO2 sensor has to be activated via auto detection */
+ externalInterface_Cmd |= EXT_INTERFACE_33V_ON;
}
#ifdef ENABLE_SENTINEL_MODE
if(SensorActive[SENSOR_SENTINEL])
{
- externalInterface_Cmd |= EXT_INTERFACE_33V_ON | EXT_INTERFACE_UART_SENTINEL;
+ externalInterface_Cmd |= EXT_INTERFACE_33V_ON;
externalInterface_Cmd &= (~EXT_INTERFACE_ADC_ON);
}
#endif
@@ -1159,7 +1155,7 @@
pStateReal->sensorErrorsRTE = dataIn.sensorErrors;
/* data from CO2 sensor */
- pStateReal->lifeData.CO2_data.CO2_ppm = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_CO2)].CO2_ppm * 10; /* Scale factor depends on sensor */
+ pStateReal->lifeData.CO2_data.CO2_ppm = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_CO2)].CO2_ppm;
pStateReal->lifeData.CO2_data.signalStrength = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_CO2)].CO2_signalStrength;
#ifdef ENABLE_EXTERNAL_PRESSURE
diff -r f7318457df4d -r e373e90a48db Discovery/Src/display.c
--- a/Discovery/Src/display.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/display.c Wed Aug 14 16:44:46 2024 +0200
@@ -68,6 +68,14 @@
{
hardwareDisplay=1;
}
+ else
+ { // re-reset the screen to be sure the 0x71 command did nothing
+ HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_RESET);
+ HAL_Delay(10);
+ HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_SET);
+ HAL_Delay(25);
+
+ }
/* RGB signals should be now for 2 frames or more (datasheet) */
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/externLogbookFlash.c
--- a/Discovery/Src/externLogbookFlash.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/externLogbookFlash.c Wed Aug 14 16:44:46 2024 +0200
@@ -115,16 +115,19 @@
/* Exported variables --------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
+
+#ifndef BOOTLOADER_STANDALONE
+static uint32_t entryPoint = 0;
+static uint32_t LengthLeftSampleRead = 0;
+static uint32_t actualPointerDevicedata_Read = DDSTART;
+#endif
+
static uint32_t actualAddress = 0;
static uint32_t preparedPageAddress = 0;
static uint32_t closeSectorAddress = 0;
-static uint32_t entryPoint = 0;
-
static uint32_t actualPointerHeader = 0;
static uint32_t actualPointerSample = 0;
-static uint32_t LengthLeftSampleRead = 0;
static uint32_t actualPointerDevicedata = DDSTART;
-static uint32_t actualPointerDevicedata_Read = DDSTART;
static uint32_t actualPointerVPM = 0;
static uint32_t actualPointerSettings = SETTINGSSTART;
static uint32_t actualPointerFirmware = 0;
@@ -133,9 +136,14 @@
/* Private function prototypes -----------------------------------------------*/
static void chip_unselect(void);
static void chip_select(void);
+#ifndef BOOTLOADER_STANDALONE
static void error_led_on(void);
static void error_led_off(void);
-
+static void ext_flash_decf_address_ring(uint8_t type);
+static void ext_flash_disable_protection(void);
+static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length);
+static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type);
+#endif
static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards);
static uint8_t read_spi(uint8_t unselect_CS_afterwards);
static void write_address(uint8_t unselect_CS_afterwards);
@@ -143,7 +151,6 @@
static void wait_chip_not_busy(void);
static void ext_flash_incf_address(uint8_t type);
//void ext_flash_incf_address_ring(void);
-static void ext_flash_decf_address_ring(uint8_t type);
static void ext_flash_erase4kB(void);
static void ext_flash_erase32kB(void);
@@ -159,13 +166,11 @@
static void ef_hw_rough_delay_us(uint32_t delayUs);
static void ef_erase_64K(uint32_t blocks);
+#ifndef BOOTLOADER_STANDALONE
static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length);
-
-static void ext_flash_disable_protection(void);
+static void ext_flash_find_start(void);
+#endif
-static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length);
-static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type);
-static void ext_flash_find_start(void);
/* Exported functions --------------------------------------------------------*/
@@ -1581,7 +1586,7 @@
}
-#endif
+
static void ext_flash_disable_protection(void)
{
@@ -1596,7 +1601,7 @@
write_spi(status.uw,RELEASE); // new status
*/
}
-
+#endif
void ext_flash_disable_protection_for_logbook(void)
{
@@ -1932,7 +1937,7 @@
}
}
-
+#ifndef BOOTLOADER_STANDALONE
static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length)
{
if((pointer & 0xFFF) == 0)
@@ -2002,7 +2007,7 @@
if((*pointer < ringStart) || (*pointer >= ringStop))
*pointer = ringStart;
}
-
+#endif
static void ef_erase_64K(uint32_t blocks)
{
@@ -2027,7 +2032,7 @@
{
HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select
}
-
+#ifndef BOOTLOADER_STANDALONE
static void error_led_on(void)
{
HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET);
@@ -2037,7 +2042,7 @@
{
HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET);
}
-
+#endif
static uint8_t read_spi(uint8_t unselect_CS_afterwards)
{
@@ -2150,7 +2155,7 @@
actualAddress = ringStart;
}
-
+#ifndef BOOTLOADER_STANDALONE
static void ext_flash_decf_address_ring(uint8_t type)
{
uint32_t ringStart, ringStop;
@@ -2196,7 +2201,7 @@
else
actualAddress -= 1;
}
-
+#endif
static void ef_hw_rough_delay_us(uint32_t delayUs)
{
@@ -2380,7 +2385,7 @@
}
-/*
+
uint8_t ext_flash_erase_firmware_if_not_empty(void)
{
const uint8_t TESTSIZE_FW = 4;
@@ -2431,4 +2436,4 @@
}
else
return 0;
-}*/
+}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/gfx_engine.c
--- a/Discovery/Src/gfx_engine.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/gfx_engine.c Wed Aug 14 16:44:46 2024 +0200
@@ -36,7 +36,8 @@
/* Private types -------------------------------------------------------------*/
-#define RING_BUF_SIZE (5u)
+#define RING_BUF_SIZE (5u)
+#define MAX_COLOR_STRING_LENGTH (100u)
typedef struct
{
@@ -251,7 +252,6 @@
backgroundHwStatus = LOGOSTOP;
}
-
void GFX_build_hw_background_frame(void)
{
GFX_DrawCfgScreen tLogoTemp;
@@ -319,7 +319,6 @@
*/
}
-
void GFX_init(uint32_t * pDestinationOut)
{
frame[0].StartAddress = FBGlobalStart;
@@ -361,6 +360,57 @@
DMA2D_at_work = 255;
}
+void GFX_init1_no_DMA(uint32_t * pDestinationOut, uint8_t blockFrames)
+{
+ frame[0].StartAddress = FBGlobalStart;
+ GFX_clear_frame_immediately(frame[0].StartAddress);
+ frame[0].status = CLEAR;
+ frame[0].caller = 0;
+
+ for(int i=1;i= '\020') && (*pText <= '\032') && !minimal)
settings.color = *pText - '\020';
else
@@ -2190,15 +2244,13 @@
uint32_t found;
uint32_t pText;
uint16_t decodeUTF8;
- uint8_t gfx_selected_language;
#ifndef BOOTLOADER_STANDALONE
+ uint8_t gfx_selected_language = 0;
SSettings *pSettings;
pSettings = settingsGetPointer();
gfx_selected_language = pSettings->selected_language;
- if(gfx_selected_language >= LANGUAGE_END)
+ if(gfx_selected_language >= LANGUAGE_END) gfx_selected_language = 0;
#endif
- gfx_selected_language = 0;
-
// -----------------------------
if(textId != (uint8_t)TXT_2BYTE)
@@ -2207,23 +2259,27 @@
j = 0;
for(i=(uint8_t)TXT_Language;i<(uint8_t)TXT_END;i++)
{
+#ifndef BOOTLOADER_STANDALONE
if(text_array[j].code == textId)
{
found = 1;
break;
}
+#endif
j++;
}
if(!found)
return cfg->Xdelta;
// -----------------------------
+#ifndef BOOTLOADER_STANDALONE
pText = (uint32_t)text_array[j].text[gfx_selected_language];
if(!pText)
pText = (uint32_t)text_array[j].text[0];
else
if(*(char*)pText == 0)
pText = (uint32_t)text_array[j].text[0];
+#endif
}
// -----------------------------
else
@@ -2234,14 +2290,17 @@
found = 0;
for(j=0;j<(uint8_t)TXT2BYTE_END-(uint8_t)TXT2BYTE_START;j++)
{
+#ifndef BOOTLOADER_STANDALONE
if((uint8_t)text_array2[j].code == (uint8_t)nextCharFor2Byte)
{
found = 1;
break;
}
+#endif
}
if(!found)
return cfg->Xdelta;
+#ifndef BOOTLOADER_STANDALONE
// -----------------------------
pText = (uint32_t)text_array2[j].text[gfx_selected_language];
if(!pText)
@@ -2249,6 +2308,7 @@
else
if(*(char*)pText == 0)
pText = (uint32_t)text_array2[j].text[0];
+#endif
}
// -----------------------------
@@ -2687,7 +2747,10 @@
static uint32_t GFX_write_char(GFX_DrawCfgWindow* hgfx, GFX_CfgWriteString* cfg, uint8_t character, tFont *Font)
{
+
+#ifndef BOOTLOADER_STANDALONE
Font = GFX_Check_Extra_Font(character, Font);
+#endif
if(cfg->doubleSize)
{
return GFX_write_char_doubleSize(hgfx, cfg, character, Font);
@@ -3008,6 +3071,7 @@
return cfg->Xdelta + width;
}
+#ifndef BOOTLOADER_STANDALONE
/**
******************************************************************************
@@ -3107,7 +3171,7 @@
return counter;
}
-
+#endif
/**
******************************************************************************
* @brief GFX write Modify Ydelta for align. / calc Ydelta for start
@@ -3128,23 +3192,22 @@
uint32_t result;
uint32_t Xsum;
uint32_t j;
- uint8_t gfx_selected_language;
uint32_t pText;
uint16_t decodeUTF8;
uint8_t tinyState = 0; /* used to identify the usage of tiny font */
tFont* ptargetFont;
#ifndef BOOTLOADER_STANDALONE
+ uint8_t gfx_selected_language = 0;
SSettings *pSettings;
pSettings = settingsGetPointer();
gfx_selected_language = pSettings->selected_language;
if(gfx_selected_language >= LANGUAGE_END)
#endif
- gfx_selected_language = 0;
// -----------------------------
-
+#ifndef BOOTLOADER_STANDALONE
GFX_write__Modify_helper(cText,pTextInput,gfx_selected_language);
-
+#endif
pText = (uint32_t)&cText[0];
Xsum = 0;
j = 0;
@@ -3221,28 +3284,29 @@
static uint32_t GFX_write__Modify_Xdelta__RightAlign(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput)
{
- char cText[101];
uint32_t result;
uint32_t Xsum;
uint32_t j;
tFont *font;
- uint8_t gfx_selected_language;
+ char cText[101];
uint32_t pText;
uint16_t decodeUTF8;
uint8_t tinyState = 0; /* used to identify the usage of tiny font */
#ifndef BOOTLOADER_STANDALONE
+ uint8_t gfx_selected_language = 0;
SSettings *pSettings;
pSettings = settingsGetPointer();
gfx_selected_language = pSettings->selected_language;
if(gfx_selected_language >= LANGUAGE_END)
+#else
+ cText[0] = 0;
#endif
- gfx_selected_language = 0;
// -----------------------------
-
+#ifndef BOOTLOADER_STANDALONE
GFX_write__Modify_helper(cText,pTextInput,gfx_selected_language);
+#endif
pText = (uint32_t)&cText[0];
-
// -----------------------------
font = (tFont *)cfg->font;
@@ -3339,34 +3403,34 @@
{
/* Timing configuration */
-#define ActiveH 800
-#define ActiveW 480
-
-#define Hsync 10
-#define HFP 8
-#define HBP 10
-
-#define Vsync 2
-#define VFP 2
-#define VBP 2
+#define ActiveH_d0 800
+#define ActiveW_d0 480
+
+#define Hsync_d0 10
+#define HFP_d0 8
+#define HBP_d0 10
+
+#define Vsync_d0 2
+#define VFP_d0 2
+#define VBP_d0 2
/* Horizontal synchronization width = Hsync - 1 */
- LtdcHandle.Init.HorizontalSync = Hsync - 1;
+ LtdcHandle.Init.HorizontalSync = Hsync_d0 - 1;
/* Vertical synchronization height = Vsync - 1 */
- LtdcHandle.Init.VerticalSync = Vsync -1;
+ LtdcHandle.Init.VerticalSync = Vsync_d0 - 1;
/* Accumulated horizontal back porch = Hsync + HBP - 1 */
- LtdcHandle.Init.AccumulatedHBP = Hsync + HBP - 1;
+ LtdcHandle.Init.AccumulatedHBP = Hsync_d0 + HBP_d0 - 1;
/* Accumulated vertical back porch = Vsync + VBP - 1 */
- LtdcHandle.Init.AccumulatedVBP = Vsync + VBP - 1;
+ LtdcHandle.Init.AccumulatedVBP = Vsync_d0 + VBP_d0 - 1;
/* Accumulated active width = Hsync + HBP + Active Width - 1 */
- LtdcHandle.Init.AccumulatedActiveW = Hsync + HBP + ActiveW- 1;
+ LtdcHandle.Init.AccumulatedActiveW = Hsync_d0 + HBP_d0 + ActiveW_d0 - 1;
/* Accumulated active height = Vsync + VBP + Active Heigh - 1 */
- LtdcHandle.Init.AccumulatedActiveH = Vsync + VBP + ActiveH - 1;
+ LtdcHandle.Init.AccumulatedActiveH = Vsync_d0 + VBP_d0 + ActiveH_d0 - 1;
/* Total width = Hsync + HBP + Active Width + HFP - 1 */
- LtdcHandle.Init.TotalWidth = Hsync + HBP + ActiveW + HFP - 1;
+ LtdcHandle.Init.TotalWidth = Hsync_d0 + HBP_d0 + ActiveW_d0 + HFP_d0 - 1;
/* Total height = Vsync + VBP + Active Heigh + VFP - 1 */
- LtdcHandle.Init.TotalHeigh = Vsync + VBP + ActiveH + VFP - 1;
+ LtdcHandle.Init.TotalHeigh = Vsync_d0 + VBP_d0 + ActiveH_d0 + VFP_d0 - 1;
/* Configure R,G,B component values for LCD background color */
LtdcHandle.Init.Backcolor.Red= 0;
@@ -4000,6 +4064,7 @@
*/
}
+#ifndef BOOTLOADER_STANDALONE
tFont* GFX_Check_Extra_Font(uint8_t character, tFont *Font)
{
uint32_t i;
@@ -4029,11 +4094,13 @@
return Font;
}
-
+#endif
uint32_t GFX_Character_Width(uint8_t character, tFont *Font)
{
uint32_t i;
+#ifndef BOOTLOADER_STANDALONE
uint32_t found;
+#endif
for(i=0;ilength;i++)
{
@@ -4043,6 +4110,7 @@
}
}
+#ifndef BOOTLOADER_STANDALONE
found = 0;
if (Font == &FontT54)
{
@@ -4070,6 +4138,30 @@
}
}
}
-
+#endif
return 0;
}
+
+void Gfx_colorsscheme_mod(char *text, uint8_t alternativeColor)
+{
+ char *p = text;
+ uint8_t index = 0;
+
+ while ((*p) && (index < MAX_COLOR_STRING_LENGTH))
+ {
+ if (*p == '\020')
+ {
+ if(!GFX_is_colorschemeDiveStandard())
+ {
+ *p = '\027';
+ }
+ else if(alternativeColor != 0)
+ {
+ *p += alternativeColor;
+ }
+ }
+ p++;
+ index++;
+ }
+}
+
diff -r f7318457df4d -r e373e90a48db Discovery/Src/ostc.c
--- a/Discovery/Src/ostc.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/ostc.c Wed Aug 14 16:44:46 2024 +0200
@@ -46,6 +46,7 @@
UART_HandleTypeDef UartIR_HUD_Handle;
__IO ITStatus UartReady = RESET;
+__IO ITStatus UartReadyHUD = RESET;
/* Private types -------------------------------------------------------------*/
@@ -91,6 +92,42 @@
HAL_SPI_Init(&cpu2DmaSpi);
}
+
+void MX_GPIO_Backlight_max_static_only_Init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStruct;
+ TIM_BACKLIGHT_GPIO_ENABLE();
+
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
+ GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+ GPIO_InitStruct.Pin = TIM_BACKLIGHT_PIN;
+ HAL_GPIO_Init(TIM_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
+
+ HAL_GPIO_WritePin(TIM_BACKLIGHT_GPIO_PORT,TIM_BACKLIGHT_PIN,GPIO_PIN_SET);
+}
+
+
+void MX_GPIO_One_Button_only_Init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStruct;
+ BUTTON_NEXT_GPIO_ENABLE();
+
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
+ GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+ GPIO_InitStruct.Pin = BUTTON_NEXT_PIN;
+ HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStruct);
+}
+
+
+GPIO_PinState MX_GPIO_Read_The_One_Button(void)
+{
+ return HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN);
+}
+
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
@@ -228,6 +265,26 @@
#endif
}
+
+void MX_SmallCPU_NO_Reset_Helper(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+ SMALLCPU_NRESET_GPIO_ENABLE();
+ HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+ HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_SET);
+// HAL_Delay(100);
+// GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+// HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
+
+
void MX_SmallCPU_Reset_To_Standard(void)
{
#ifdef SMALLCPU_NRESET_PIN
@@ -248,6 +305,23 @@
#endif
}
+
+uint8_t MX_UART_ButtonAdjust(uint8_t *array)
+{
+#ifdef USART_PIEZO
+ uint8_t answer[4];
+ HAL_UART_Transmit(&UartPiezoTxHandle,array,4,1000);
+ HAL_UART_Receive(&UartPiezoTxHandle,answer,4,2000);
+ if( (answer[0] == array[0])
+ &&(answer[1] == array[1])
+ &&(answer[2] == array[2])
+ &&(answer[3] == array[3]))
+ return 1;
+#endif
+ return 0;
+}
+
+
void MX_UART_Init(void)
{
/*##-1- Configure the UART peripheral ######################################*/
@@ -311,7 +385,10 @@
else
if(huart == &UartIR_HUD_Handle)
{
+#ifndef BOOTLOADER_STANDALONE
tCCR_SetRXIndication();
+#endif
+ UartReadyHUD = SET;
}
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/settings.c
--- a/Discovery/Src/settings.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/settings.c Wed Aug 14 16:44:46 2024 +0200
@@ -43,7 +43,7 @@
SSettings Settings;
const uint8_t RTErequiredHigh = 3;
-const uint8_t RTErequiredLow = 2;
+const uint8_t RTErequiredLow = 3;
const uint8_t FONTrequiredHigh = 1;
const uint8_t FONTrequiredLow = 0;
@@ -62,8 +62,8 @@
{
.versionFirst = 1,
.versionSecond = 6,
- .versionThird = 5,
- .versionBeta = 0,
+ .versionThird = 7,
+ .versionBeta = 1,
/* 4 bytes with trailing 0 */
.signature = "mh",
@@ -89,7 +89,7 @@
* There might even be entries with fixed values that have no range
*/
const SSettings SettingsStandard = {
- .header = 0xFFFF0028,
+ .header = 0xFFFF002A,
.warning_blink_dsec = 8 * 2,
.lastDiveLogId = 0,
.logFlashNextSampleStartAddress = SAMPLESTART,
@@ -339,6 +339,7 @@
.compassDeclinationDeg = 0,
.delaySetpointLow = false,
.timerDurationS = 180,
+ .cvAutofocus = 0,
};
/* Private function prototypes -----------------------------------------------*/
@@ -581,7 +582,22 @@
pSettings->cv_config_BigScreen = pSettings->cv_config_BigScreen >> (LEGACY_T3_START_ID_PRE_TIMER - 3);
pSettings->cv_config_BigScreen &= ~0x00000007; /* just to be sure: clear lower three bits */
pSettings->cv_config_BigScreen |= tmp;
-
+ // no break;
+ case 0xFFFF0028: /* In previous version deco gases were automatically used for deco calculation */
+ for(tmp=1; tmp<=2*NUM_GASES; tmp++) /* This is now handled by an additional parameter. Set it to true to maintain same behavior as before */
+ {
+ if(Settings.gas[tmp].note.ub.deco)
+ {
+ Settings.gas[tmp].note.ub.decocalc = 1;
+ }
+ else
+ {
+ Settings.gas[tmp].note.ub.decocalc = 0;
+ }
+ }
+ // no break;
+ case 0xFFFF0029:
+ Settings.cvAutofocus = 0;
// no break;
default:
pSettings->header = pStandard->header;
@@ -1821,6 +1837,12 @@
setFirstCorrection(parameterId);
}
parameterId++;
+ if(Settings.cvAutofocus > 1)
+ {
+ corrections++;
+ Settings.cvAutofocus = 0;
+ }
+ parameterId++;
if(corrections)
{
settingsWarning = 1;
@@ -1836,7 +1858,7 @@
return (uint8_t)corrections;
}
-
+#ifndef BOOTLOADER_STANDALONE
/* always at 0x8080000, do not move -> bootloader access */
const SFirmwareData* firmwareDataGetPointer(void)
{
@@ -1850,7 +1872,7 @@
return (SHardwareData *)HARDWAREDATA_ADDRESS;
}
#endif
-
+#endif
const SSettings* settingsGetPointerStandard(void)
{
return &SettingsStandard;
@@ -2989,7 +3011,7 @@
RTEactualLow = low;
}
-
+#ifndef BOOTLOADER_STANDALONE
void getActualRTEandFONTversion(uint8_t *RTEhigh, uint8_t *RTElow, uint8_t *FONThigh, uint8_t *FONTlow)
{
if(RTEhigh && RTElow)
@@ -3009,7 +3031,7 @@
{
return hardwareDataGetPointer()->primaryLicence;
}
-
+#endif
void firmwareGetDate(RTC_DateTypeDef *SdateOutput)
{
diff -r f7318457df4d -r e373e90a48db Discovery/Src/simulation.c
--- a/Discovery/Src/simulation.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/simulation.c Wed Aug 14 16:44:46 2024 +0200
@@ -466,7 +466,8 @@
// ascend (deco) gases
for(int i=1; i<=5;i++)
{
- if(pDiveState->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ if((pDiveState->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ || (pDiveState->diveSettings.gas[pDiveState->diveSettings.decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
break;
gasChangeListDepthGas20x2[ptrGasChangeList++] = pDiveState->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero;
gasChangeListDepthGas20x2[ptrGasChangeList++] = pDiveState->diveSettings.decogaslist[i].GasIdInSettings;
diff -r f7318457df4d -r e373e90a48db Discovery/Src/t3.c
--- a/Discovery/Src/t3.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/t3.c Wed Aug 14 16:44:46 2024 +0200
@@ -28,6 +28,7 @@
/* Includes ------------------------------------------------------------------*/
#include
+#include
#include "t3.h"
@@ -40,6 +41,8 @@
#include "unit.h"
#include "motion.h"
#include "logbook_miniLive.h"
+#include "tMenuEditCustom.h"
+#include "gfx_engine.h"
#define CV_PROFILE_WIDTH (600U)
@@ -61,31 +64,19 @@
uint8_t t3_selection_customview = CVIEW_noneOrDebug;
+static uint8_t AF_lastDecoDepth = 0;
+static uint16_t AF_lastTTS = 0;
+
+
/* TEM HAS TO MOVE TO GLOBAL--------------------------------------------------*/
/* Private types -------------------------------------------------------------*/
#define TEXTSIZE 16
-#define NUMBER_OF_VIEWS 7 /* number of views defined in the array below */
-const uint8_t t3_customviewsStandard[] =
-{
- CVIEW_T3_Decostop,
- CVIEW_sensors,
- CVIEW_Compass,
- CVIEW_T3_MaxDepth,
- CVIEW_T3_StopWatch,
- CVIEW_T3_TTS,
- CVIEW_T3_ppO2andGas,
- CVIEW_T3_GasList,
- CVIEW_T3_Navigation,
- CVIEW_T3_DepthData,
- CVIEW_noneOrDebug,
- CVIEW_T3_DecoTTS,
-#ifdef ENABLE_T3_PROFILE_VIEW
- CVIEW_T3_Profile,
-#endif
- CVIEW_T3_END
-};
+/* defines for autofocus of compass */
+#define AF_COMPASS_ACTIVATION_ANGLE (10.0f) /* angle for pitch and roll. Compass gets activated in case the value is smaller (OSTC4 hold in horitontal position */
+#define AF_COMPASS_DEBOUNCE (10u) /* debouncing value to avoid compass activation during normal movement */
+
/* Private function prototypes -----------------------------------------------*/
void t3_refresh_divemode(void);
@@ -93,6 +84,7 @@
uint8_t t3_test_customview_warnings(void);
void t3_refresh_customview(float depth);
void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, point_t center, uint16_t ActualHeading, uint16_t UserSetHeading);
+uint8_t t3_EvaluateAFCondition(uint8_t T3CView);
/* Exported functions --------------------------------------------------------*/
@@ -101,7 +93,7 @@
SSettings* pSettings;
pSettings = settingsGetPointer();
- t3_selection_customview = t3_customviewsStandard[0];
+ t3_selection_customview = cv_changelist_BS[0];
t3screen.FBStartAdress = 0;
t3screen.ImageHeight = 480;
@@ -172,6 +164,8 @@
t3c2.WindowY0 = t3c1.WindowY0;
t3c2.WindowY1 = t3c1.WindowY1;
t3c2.WindowTab = 600;
+
+ t3_EvaluateAFCondition(CVIEW_T3_END); /* reset debounce counters */
}
void t3_select_customview(uint8_t selectedCustomview)
@@ -417,7 +411,6 @@
GFX_draw_line(tXscreen, start, stop, CLUT_Font020);
}
-
start.y = BigFontSeperationTopBottom;
stop.y = 479;
@@ -432,6 +425,7 @@
}
/* depth */
+ color = drawingColor_from_ascentspeed(stateUsed->lifeData.ascent_rate_meter_per_min);
float depth = unit_depth_float(stateUsed->lifeData.depth_meter);
if(depth <= 0.3f)
@@ -460,7 +454,7 @@
else
snprintf(text,TEXTSIZE,"\020\003\016%01.0f",depth);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,color);
GFX_write_string(&FontT105,tXl1,text,1);
@@ -655,7 +649,7 @@
else
snprintf(text,TEXTSIZE,"\020\003\002\016%u'",Divetime.Minutes);
}
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXr1,text,1);
}
else
@@ -726,7 +720,7 @@
else
snprintf(text,TEXTSIZE,"\020\003\002\016%u'",Divetime.Minutes);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXr1,text,1);
break;
}
@@ -831,7 +825,7 @@
else
text[textpointer++] = 'F';
text[textpointer++] = 0;
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,1);
break;
@@ -858,7 +852,7 @@
}
snprintf(text,TEXTSIZE,"\020\016%u:%02u",LastDivetime.Minutes, LastDivetime.Seconds);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
if(pSettings->FlipDisplay)
@@ -880,7 +874,7 @@
}
snprintf(text,TEXTSIZE,"\020\016%u:%02u",TotalDivetime.Minutes, TotalDivetime.Seconds);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaTotal);
@@ -902,7 +896,7 @@
void t3_basics_refresh_customview(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode)
{
- static uint8_t last_customview = CVIEW_END;
+ static uint8_t last_customview = CVIEW_T3_END;
char text[30];
uint16_t textpointer = 0;
@@ -971,7 +965,7 @@
{
heading = (uint16_t)stateUsed->lifeData.compass_heading;
}
- if(last_customview != tX_selection_customview) /* check if current selection is disabled and should be skipped */
+ if((last_customview != tX_selection_customview) && (settingsGetPointer()->design == 3)) /* check if current selection is disabled and should be skipped */
{
if(t3_customview_disabled(tX_selection_customview))
{
@@ -997,7 +991,7 @@
}
snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_last_max_depth_meter));
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
if(!pSettings->FlipDisplay)
{
@@ -1012,7 +1006,7 @@
snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_total_max_depth_meter));
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
if(!pSettings->FlipDisplay)
{
GFX_write_string(&FontT105,tXc1,text,0);
@@ -1202,7 +1196,7 @@
, unit_depth_char1_T105()
, unit_depth_char2_T105()
, (nextstopLengthSeconds+59)/60);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
}
else if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit()))
@@ -1213,7 +1207,7 @@
textpointer = 0;
snprintf(&text[textpointer],TEXTSIZE,"\020\003\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
}
else if(pDecoinfo->output_ndl_seconds) // NDL
@@ -1224,7 +1218,7 @@
snprintf(text,TEXTSIZE,"\020\003%i'",pDecoinfo->output_ndl_seconds/60);
else
snprintf(text,TEXTSIZE,"\020\003%ih",pDecoinfo->output_ndl_seconds/3600);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
}
@@ -1240,7 +1234,7 @@
snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60);
else
snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
}
}
@@ -1249,13 +1243,13 @@
snprintf(text,TEXTSIZE,"\002\032\f%c",TXT_ActualGradient);
GFX_write_string(&FontT42,tXc1,text,0);
snprintf(text,TEXTSIZE,"\020\003\002%.0f\016\016%%\017",100 * pDecoinfo->super_saturation);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
}
}
break;
- case CVIEW_sensors:
+ case CVIEW_T3_sensors:
snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_O2monitor);
GFX_write_string(&FontT42,tXc1,text,0);
@@ -1295,6 +1289,26 @@
}
GFX_write_string(&FontT105,tXc1,text,0);
+ if((pSettings->co2_sensor_active) && isLoopMode(pSettings->dive_mode))
+ {
+ snprintf(text,TEXTSIZE,"\032\001\f%c",TXT_CO2Sensor);
+ GFX_write_string(&FontT42,tXc1,text,0);
+ textpointer = 0;
+ if(stateUsed->lifeData.CO2_data.CO2_ppm < CO2_WARNING_LEVEL_PPM)
+ {
+ text[textpointer++] = '\020';
+ }
+ else if(stateUsed->lifeData.CO2_data.CO2_ppm < CO2_ALARM_LEVEL_PPM)
+ {
+ text[textpointer++] = '\024'; /* yellow */
+ }
+ else
+ {
+ text[textpointer++] = '\025'; /* red */
+ }
+ snprintf(&text[textpointer],TEXTSIZE,"\001%5ld",stateUsed->lifeData.CO2_data.CO2_ppm);
+ GFX_write_string(&FontT105,tXc1,text,1);
+ }
if((pSettings->scrubTimerMode != SCRUB_TIMER_OFF) && isLoopMode(pSettings->dive_mode))
{
@@ -1327,7 +1341,7 @@
GFX_write_string(&FontT42,tXc1,text,0);
}
snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter));
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
if(pSettings->FlipDisplay)
{
if(mode == DIVEMODE_Apnea)
@@ -1354,7 +1368,7 @@
snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60);
else
snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
}
break;
@@ -1363,7 +1377,7 @@
snprintf(text,TEXTSIZE,"\032\f%c",TXT_ppO2);
GFX_write_string(&FontT42,tXc1,text,0);
snprintf(text,TEXTSIZE,"\020\003%01.2f",stateUsed->lifeData.ppO2);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,tXc1,text,0);
textpointer = 0;
@@ -1375,7 +1389,7 @@
text[textpointer++] = '\002';
tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&text[textpointer]);
//textpointer = snprintf(&text[textpointer],TEXTSIZE,"\020\002%02u/%02u",oxygen_percentage, stateUsed->lifeData.actualGas.helium_percentage);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT48,tXc1,text,0);
break;
@@ -1441,7 +1455,7 @@
GFX_write_string(&FontT42,tXc1,text,0);
}
snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter));
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
if(pSettings->FlipDisplay)
{
if(mode == DIVEMODE_Apnea)
@@ -1501,6 +1515,7 @@
{
char text[256], textMain[256];
uint8_t textpointer, textpointerMain, lineFree, more;
+ uint8_t index = 0;
snprintf(text,TEXTSIZE,"\025\f%c",TXT_Warning);
GFX_write_string(&FontT42,&t3c1,text,0);
@@ -1622,7 +1637,19 @@
more++;
}
}
-
+#ifdef HAVE_DEBUG_WARNINGS
+ if(lineFree && stateUsed->warnings.debug)
+ {
+ for(index=0; index<3; index++)
+ {
+ if(((stateUsed->lifeData.extIf_sensor_map[index] == SENSOR_DIGO2M) && (((SSensorDataDiveO2*)(stateUsed->lifeData.extIf_sensor_data[index]))->status & DVO2_FATAL_ERROR)))
+ {
+ textpointer += snprintf(&text[textpointer],32,"\001Debug: %lx\n",((SSensorDataDiveO2*)(stateUsed->lifeData.extIf_sensor_data[index]))->status);
+ }
+ }
+ lineFree--;
+ }
+#endif
text[textpointer] = 0;
textMain[textpointerMain] = 0;
@@ -1655,7 +1682,7 @@
i++;
}
- if (((view == CVIEW_sensors) || (view == CVIEW_sensors_mV)) &&
+ if ((view == CVIEW_T3_sensors) &&
((stateUsed->diveSettings.ppo2sensors_deactivated == 0x07) || (stateUsed->diveSettings.ccrOption == 0) || stateUsed->warnings.fallback))
{
cv_disabled = 1;
@@ -1667,7 +1694,7 @@
uint8_t t3_change_customview(uint8_t action)
{
- t3_basics_change_customview(&t3_selection_customview, t3_customviewsStandard, action);
+ t3_basics_change_customview(&t3_selection_customview, cv_changelist_BS, action);
return t3_selection_customview;
}
@@ -1688,6 +1715,7 @@
if (tX_customviews[index] == *tX_selection_customview)
{
curViewIdx = index;
+ break;
}
index++;
}
@@ -1731,7 +1759,7 @@
break;
}
- if(t3_customview_disabled(tX_customviews[index]))
+ if((tX_customviews == cv_changelist_BS) && (t3_customview_disabled(tX_customviews[index])))
{
iterate = 1;
if(*tX_selection_customview == tX_customviews[index])
@@ -1788,16 +1816,6 @@
}
}
-
-void t3_basics_colorscheme_mod(char *text)
-{
- if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard())
- {
- text[0] = '\027';
- }
-}
-
-
point_t t3_compass_circle(uint8_t id, uint16_t degree, point_t center)
{
float fCos, fSin;
@@ -1931,7 +1949,7 @@
uint8_t increment = 1;
uint8_t enabledViewCnt = 0;
- pViews = (uint8_t*)t3_customviewsStandard;
+ pViews = (uint8_t*)cv_changelist_BS;
while((*pViews != CVIEW_T3_END))
{
increment = 1;
@@ -1967,3 +1985,143 @@
return snprintf(text, size, "%c%u\016\016%%\017", colour, currentTimerMinutes * 100 / settingsGetPointer()->scrubberData[settings->scubberActiveId].TimerMax);
}
}
+
+void t3_AF_updateBorderConditions()
+{
+ uint16_t nextstopLengthSeconds = 0;
+ uint8_t nextstopDepthMeter = 0;
+
+ tHome_findNextStop(getDecoInfo()->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds);
+ AF_lastDecoDepth = nextstopDepthMeter;
+ AF_lastTTS = (getDecoInfo()->output_time_to_surface_seconds / 60) / 10;
+}
+
+uint8_t t3_CheckAfCondition(uint8_t T3CView)
+{
+ uint8_t retVal = 0;
+
+ float pitch = stateRealGetPointer()->lifeData.compass_pitch;
+ float roll = stateRealGetPointer()->lifeData.compass_roll;
+
+ uint16_t nextstopLengthSeconds = 0;
+ uint8_t nextstopDepthMeter = 0;
+
+ switch (T3CView)
+ {
+ case CVIEW_T3_GasList: retVal = (stateUsed->warnings.betterGas) /* switch if better gas is available or depending on ppo2 if in OC mode */
+ || ((stateUsed->diveSettings.diveMode == DIVEMODE_OC) && ((stateUsed->warnings.ppO2Low) || (stateUsed->warnings.ppO2High)));
+
+ break;
+ case CVIEW_T3_Navigation: retVal = (pitch > -AF_COMPASS_ACTIVATION_ANGLE) && (pitch < AF_COMPASS_ACTIVATION_ANGLE)
+ && (roll > -AF_COMPASS_ACTIVATION_ANGLE) && (roll < AF_COMPASS_ACTIVATION_ANGLE);
+
+ break;
+ case CVIEW_T3_DecoTTS: tHome_findNextStop(getDecoInfo()->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds);
+ /* A new deco step is added to the plan */
+ if(nextstopDepthMeter > AF_lastDecoDepth)
+ {
+ retVal = 1;
+ }
+
+ /* Close to the next deco step or missed deco step */
+ if((abs(stateUsed->lifeData.depth_meter - nextstopDepthMeter) < 2) || (stateUsed->warnings.decoMissed))
+ {
+ retVal = 1;
+ }
+ /* Another 10 minutes to surface */
+ if((getDecoInfo()->output_time_to_surface_seconds) && ((uint16_t)((getDecoInfo()->output_time_to_surface_seconds / 60) / 10) > AF_lastTTS))
+ {
+ retVal = 1;
+ }
+ break;
+ default: break;
+ }
+
+ return retVal;
+}
+
+uint8_t t3_EvaluateAFCondition(uint8_t T3CView)
+{
+ static uint8_t debounce[CVIEW_T3_END];
+ static uint8_t lastState[CVIEW_T3_END];
+ uint8_t detectionState = AF_VIEW_NOCHANGE;
+ uint8_t cnt = 0;
+
+ if(T3CView <= CVIEW_T3_END)
+ {
+ if(T3CView == CVIEW_T3_END)
+ {
+ for(cnt = 0; cnt < CVIEW_T3_END; cnt++)
+ {
+ debounce[cnt] = 0;
+ lastState[cnt] = AF_VIEW_NOCHANGE;
+ }
+ }
+ if(t3_CheckAfCondition(T3CView))
+ {
+ if(debounce[T3CView] < 10)
+ {
+ debounce[T3CView]++;
+ }
+ else
+ {
+ detectionState = AF_VIEW_ACTIVATED;
+ }
+ }
+ else
+ {
+ if(debounce[T3CView] > 0)
+ {
+ debounce[T3CView]--;
+ }
+ else
+ {
+ detectionState = AF_VIEW_DEACTIVATED;
+ }
+ }
+ if(detectionState) /* no state change => return 0 */
+ {
+ if((detectionState == lastState[T3CView]))
+ {
+ detectionState = AF_VIEW_NOCHANGE;
+ }
+ else
+ {
+ lastState[T3CView] = detectionState;
+ }
+ }
+ }
+ return detectionState;
+}
+
+void t3_handleAutofocus(void)
+{
+ static uint8_t returnView = CVIEW_T3_END;
+
+ uint8_t runningT3CView = 0;
+
+ for (runningT3CView = 0; runningT3CView < CVIEW_T3_END; runningT3CView++)
+ {
+ if(stateUsed->diveSettings.activeAFViews & (1 << runningT3CView))
+ {
+ switch(t3_EvaluateAFCondition(runningT3CView))
+ {
+ case AF_VIEW_ACTIVATED: returnView = t3_selection_customview;
+ t3_select_customview(runningT3CView);
+ t3_AF_updateBorderConditions();
+ break;
+ case AF_VIEW_DEACTIVATED: if((returnView != CVIEW_T3_END) && (t3_selection_customview == runningT3CView))
+ {
+ if(runningT3CView != CVIEW_T3_DecoTTS) /* some view does not switch back */
+ {
+ t3_select_customview(returnView);
+ }
+ returnView = CVIEW_T3_END;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/t4_tetris.c
--- a/Discovery/Src/t4_tetris.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/t4_tetris.c Wed Aug 14 16:44:46 2024 +0200
@@ -36,6 +36,7 @@
#include "tHome.h"
#include "timer.h"
#include "unit.h"
+#include "gfx_engine.h"
/* Exported variables --------------------------------------------------------*/
@@ -152,7 +153,7 @@
else
snprintf(text,TEXTSIZE,"\020%01.0f",depth);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT144,&t4l1,text,1);
// divetime
@@ -186,7 +187,7 @@
snprintf(text,TEXTSIZE,"\020\016%u:%02u",Divetime.Minutes, Divetime.Seconds);
else
snprintf(text,TEXTSIZE,"\020\016%u'",Divetime.Minutes);
- t3_basics_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text,0);
GFX_write_string(&FontT105,&t4l2,text,1);
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/t5_gauge.c
--- a/Discovery/Src/t5_gauge.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/t5_gauge.c Wed Aug 14 16:44:46 2024 +0200
@@ -63,8 +63,8 @@
const uint8_t t5_customviewsStandard[] =
{
- CVIEW_sensors,
- CVIEW_Compass,
+ CVIEW_T3_sensors,
+ CVIEW_T3_Compass,
CVIEW_T3_MaxDepth,
CVIEW_T3_StopWatch,
CVIEW_T3_Temperature,
diff -r f7318457df4d -r e373e90a48db Discovery/Src/t6_apnea.c
--- a/Discovery/Src/t6_apnea.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/t6_apnea.c Wed Aug 14 16:44:46 2024 +0200
@@ -46,7 +46,7 @@
GFX_DrawCfgWindow t6c2;
GFX_DrawCfgWindow t6c3; // for menu text
-uint8_t t6_selection_customview = 0;
+uint8_t t6_selection_customview = CVIEW_T3_noneOrDebug;
/* Imported function prototypes ---------------------------------------------*/
@@ -61,7 +61,7 @@
const uint8_t t6_customviewsStandard[] =
{
- CVIEW_noneOrDebug,
+ CVIEW_T3_noneOrDebug,
CVIEW_T3_Temperature,
CVIEW_T3_END
};
diff -r f7318457df4d -r e373e90a48db Discovery/Src/t7.c
--- a/Discovery/Src/t7.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/t7.c Wed Aug 14 16:44:46 2024 +0200
@@ -33,6 +33,7 @@
#include "t3.h"
#include "settings.h"
#include "data_exchange_main.h"
+#include "data_central.h"
#include "decom.h"
#include "gfx_fonts.h"
#include "logbook_miniLive.h"
@@ -69,7 +70,6 @@
void t7_miniLiveLogProfile(void);
void t7_logo_OSTC(void);
void t7_ChargerView(void);
-static void t7_colorscheme_mod(char *text);
uint8_t t7_test_customview_warnings(void);
void t7_show_customview_warnings(void);
@@ -120,22 +120,6 @@
/* Private types -------------------------------------------------------------*/
-const uint8_t customviewsDiveStandard[] =
-{
- CVIEW_sensors,
- CVIEW_Compass,
- CVIEW_Decolist,
- CVIEW_Tissues,
- CVIEW_Profile,
- CVIEW_Gaslist,
- CVIEW_sensors_mV,
- CVIEW_EADTime,
- CVIEW_SummaryOfLeftCorner,
- CVIEW_Timer,
- CVIEW_noneOrDebug,
- CVIEW_END,
- CVIEW_END
-};
const uint8_t customviewsSurfaceStandard[] =
{
@@ -155,7 +139,7 @@
static uint8_t selection_custom_field = LLC_Temperature;
-const uint8_t *customviewsDive = customviewsDiveStandard;
+const uint8_t *customviewsDive = cv_changelist;
const uint8_t *customviewsSurface = customviewsSurfaceStandard;
#define TEXTSIZE 30
@@ -580,42 +564,7 @@
if(stateUsed->mode == MODE_DIVE)
{
- if(last_mode != MODE_DIVE)
- {
- last_mode = MODE_DIVE;
- /* lower left corner primary */
- selection_custom_field = settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary;
- /* custom view primary OR debug if automatic return is off | T7 is default dive view => also initialize big font view */
- if((settingsGetPointer()->tX_customViewTimeout == 0) && (settingsGetPointer()->showDebugInfo))
- {
- selection_customview = CVIEW_noneOrDebug;
- t3_select_customview(CVIEW_noneOrDebug);
- }
- else
- {
- selection_customview = settingsGetPointer()->tX_customViewPrimary;
- t3_set_customview_to_primary();
- }
- t7_change_customview(ACTION_END);
-
- if((settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF))
- {
- InitMotionDetection();
- }
-
- if(settingsGetPointer()->extraDisplay == EXTRADISPLAY_BFACTIVE)
- {
- settingsGetPointer()->design = 3;
- releaseAllFramesExcept(22,t7screen.FBStartAdress);
- releaseFrame(22,t7screen.FBStartAdress);
- set_globalState(StD);
- return;
- }
- }
-
- if(status.page == PageSurface)
- set_globalState(StD);
-
+ /* T7 refresh is usally called at start of dive. Based on divesettings the design will be changed and T7 no longer called */
if(stateUsed->diveSettings.diveMode == DIVEMODE_Gauge)
{
settingsGetPointer()->design = 5;
@@ -632,8 +581,44 @@
}
else
{
- t7_refresh_divemode();
- }
+ if(last_mode != MODE_DIVE)
+ {
+ last_mode = MODE_DIVE;
+ /* lower left corner primary */
+ selection_custom_field = settingsGetPointer()->tX_userselectedLeftLowerCornerPrimary;
+ /* custom view primary OR debug if automatic return is off | T7 is default dive view => also initialize big font view */
+ if((settingsGetPointer()->tX_customViewTimeout == 0) && (settingsGetPointer()->showDebugInfo))
+ {
+ selection_customview = CVIEW_noneOrDebug;
+ t3_select_customview(CVIEW_noneOrDebug);
+ }
+ else
+ {
+ selection_customview = settingsGetPointer()->tX_customViewPrimary;
+ }
+ t7_change_customview(ACTION_END);
+
+ if((settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF))
+ {
+ InitMotionDetection();
+ }
+
+ if((settingsGetPointer()->extraDisplay == EXTRADISPLAY_BFACTIVE) && ( settingsGetPointer()->design == 7))
+ {
+ settingsGetPointer()->design = 3;
+ t3_set_customview_to_primary();
+ releaseAllFramesExcept(22,t7screen.FBStartAdress);
+ releaseFrame(22,t7screen.FBStartAdress);
+ set_globalState(StD);
+ return;
+ }
+ }
+
+ if(status.page == PageSurface)
+ set_globalState(StD);
+
+ t7_refresh_divemode();
+ }
}
else // from if(stateUsed->mode == MODE_DIVE)
{
@@ -1434,6 +1419,9 @@
count++;
}
#endif
+#ifdef HAVE_DEBUG_WARNINGS
+ count += stateUsed->warnings.debug;
+#endif
return count;
}
@@ -1505,6 +1493,7 @@
{
char text[256];
uint8_t textpointer, lineFree;
+ uint8_t index = 0;
text[0] = '\025';
text[1] = '\f';
@@ -1591,6 +1580,19 @@
lineFree--;
}
#endif
+#ifdef HAVE_DEBUG_WARNINGS
+ if(lineFree && stateUsed->warnings.debug)
+ {
+ for(index=0; index<3; index++)
+ {
+ if(((stateUsed->lifeData.extIf_sensor_map[index] == SENSOR_DIGO2M) && (((SSensorDataDiveO2*)(stateUsed->lifeData.extIf_sensor_data[index]))->status & DVO2_FATAL_ERROR)))
+ {
+ textpointer += snprintf(&text[textpointer],32,"\001Debug: %lx\n",((SSensorDataDiveO2*)(stateUsed->lifeData.extIf_sensor_data[index]))->status);
+ }
+ }
+ lineFree--;
+ }
+#endif
/*
if(lineFree && stateUsed->warnings.lowBattery)
{
@@ -1977,7 +1979,7 @@
t7cY0free.WindowX1 += 10;
}
- t7_colorscheme_mod(data);
+ Gfx_colorsscheme_mod(data, 0);
GFX_write_string(&FontT42, &t7cY0free, data, 1);
}
@@ -2131,11 +2133,11 @@
t7cY0free.WindowX1 += 10;
}
- t7_colorscheme_mod(data);
+ Gfx_colorsscheme_mod(data, 0);
GFX_write_string(&FontT42, &t7cY0free, data, 1);
- t7_colorscheme_mod(timer);
+ Gfx_colorsscheme_mod(timer, 0);
GFX_write_string(&FontT105, &t7cY0free, timer, 4);
}
@@ -2760,6 +2762,10 @@
snprintf(TextL1,TEXTSIZE,"\032\f[feet]");
else
snprintf(TextL1,TEXTSIZE,"\032\f%c",TXT_Depth);
+
+ color = drawingColor_from_ascentspeed(stateUsed->lifeData.ascent_rate_meter_per_min);
+
+
GFX_write_string(&FontT24,&t7l1,TextL1,0);
if((stateUsed->lifeData.ascent_rate_meter_per_min > 8) || (stateUsed->lifeData.ascent_rate_meter_per_min < -10))
@@ -2777,8 +2783,11 @@
else
snprintf(TextL1,TEXTSIZE,"\020%01.0f",depth);
- t7_colorscheme_mod(TextL1);
- GFX_write_string(&FontT144,&t7l1,TextL1,1);
+ Gfx_colorsscheme_mod(TextL1, color);
+
+
+
+ GFX_write_string(&FontT144,&t7l1,TextL1,0);
/* max depth */
snprintf(TextL2,TEXTSIZE,"\032\f%c",TXT_MaxDepth);
@@ -2789,7 +2798,7 @@
else
snprintf(TextL2,TEXTSIZE,"\020%01.0f",unit_depth_float(stateUsed->lifeData.max_depth_meter));
- t7_colorscheme_mod(TextL2);
+ Gfx_colorsscheme_mod(TextL2, 0);
GFX_write_string(&FontT105,&t7l2,TextL2,1);
/* ascent rate graph */
@@ -2831,13 +2840,10 @@
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;
+ if(color == 0)
+ {
+ color = CLUT_EverythingOkayGreen; /* do not use white color for drawing graph */
+ }
GFX_draw_thick_line(12,&t7screen, start, stop, color);
}
@@ -2859,7 +2865,7 @@
snprintf(TextR1,TEXTSIZE,"\020\002\016%u:%02u",Divetime.Minutes, Divetime.Seconds);
else
snprintf(TextR1,TEXTSIZE,"\020\002\016%u'",Divetime.Minutes);
- t7_colorscheme_mod(TextR1);
+ Gfx_colorsscheme_mod(TextR1, 0);
GFX_write_string(&FontT105,&t7r1,TextR1,1);
/* next deco stop */
@@ -2872,7 +2878,7 @@
, unit_depth_char1_T105()
, unit_depth_char2_T105()
, (nextstopLengthSeconds+59)/60);
- t7_colorscheme_mod(TextR2);
+ Gfx_colorsscheme_mod(TextR2, 0);
if(time_elapsed_ms(pDecoinfo->tickstamp, HAL_GetTick()) > MAX_AGE_DECOINFO_MS)
TextR2[0] = '\031';
if(textlength <= 9)
@@ -2887,7 +2893,7 @@
snprintf(TextR2,TEXTSIZE,"\032\f\002%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2);
GFX_write_string(&FontT42,&t7r2,TextR2,0);
snprintf(TextR2,TEXTSIZE,"\020\002\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds);
- t7_colorscheme_mod(TextR2);
+ Gfx_colorsscheme_mod(TextR2, 0);
GFX_write_string(&FontT105,&t7r2,TextR2,1);
}
@@ -2902,7 +2908,7 @@
snprintf(TextR3,TEXTSIZE,"\020\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60);
else
snprintf(TextR3,TEXTSIZE,"\020\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600);
- t7_colorscheme_mod(TextR3);
+ Gfx_colorsscheme_mod(TextR3, 0);
if(time_elapsed_ms(pDecoinfo->tickstamp, HAL_GetTick()) > MAX_AGE_DECOINFO_MS)
TextR2[0] = '\031';
GFX_write_string(&FontT105,&t7r3,TextR3,1);
@@ -2915,7 +2921,7 @@
snprintf(TextR3,TEXTSIZE,"\020\002%i'",pDecoinfo->output_ndl_seconds/60);
else
snprintf(TextR3,TEXTSIZE,"\020\002%ih",pDecoinfo->output_ndl_seconds/3600);
- t7_colorscheme_mod(TextR3);
+ Gfx_colorsscheme_mod(TextR3, 0);
if(time_elapsed_ms(pDecoinfo->tickstamp, HAL_GetTick()) > MAX_AGE_DECOINFO_MS)
TextR2[0] = '\031';
GFX_write_string(&FontT105,&t7r3,TextR3,1);
@@ -3061,7 +3067,7 @@
}
else
{
- t7_colorscheme_mod(TextC2);
+ Gfx_colorsscheme_mod(TextC2, 0);
GFX_write_string(&FontT48,&t7c2,TextC2,0); // T54 has only numbers
}
@@ -3078,7 +3084,7 @@
}
else
{
- t7_colorscheme_mod(TextC2);
+ Gfx_colorsscheme_mod(TextC2, 0);
GFX_write_string(&FontT48,&t7c2,TextC2,0);
}
}
@@ -3086,7 +3092,7 @@
else if(settingsGetPointer()->alwaysShowPPO2)
{
snprintf(TextC2,TEXTSIZE,"\020%01.2f",stateUsed->lifeData.ppO2);
- t7_colorscheme_mod(TextC2);
+ Gfx_colorsscheme_mod(TextC2, 0);
GFX_write_string(&FontT48,&t7c2,TextC2,0);
}
}
@@ -3173,13 +3179,13 @@
}
else
{
- t7_colorscheme_mod(TextC1);
+ Gfx_colorsscheme_mod(TextC1, 0);
GFX_write_string(&Batt24,&t7batt,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);
- t7_colorscheme_mod(TextC1);
+ Gfx_colorsscheme_mod(TextC1, 0);
GFX_write_string(&FontT24,&t7voltage,TextC1,0); // t7batt
}
}
@@ -3227,6 +3233,14 @@
selection_custom_field++;
}
#endif
+#ifdef ENABLE_CO2_SUPPORT
+ if((selection_custom_field == LCC_CO2) && (settingsGetPointer()->co2_sensor_active == 0))
+ {
+ selection_custom_field++;
+ }
+
+#endif
+
if(selection_custom_field >= LLC_END)
{
selection_custom_field = LLC_Empty;
@@ -3483,7 +3497,7 @@
else
GFX_write_string(&FontT42,&t7l3,headerText,0);
- t7_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text, 0);
#ifndef ENABLE_BOTTLE_SENSOR
#ifdef ENABLE_CO2_SUPPORT
if(selection_custom_field != LCC_CO2)
@@ -3606,15 +3620,6 @@
return lineCount;
}
-static void t7_colorscheme_mod(char *text) {
- char *p = text;
- while (*p) {
- if ((*p == '\020') && !GFX_is_colorschemeDiveStandard())
- *p = '\027';
- p++;
- }
-}
-
void draw_frame(_Bool PluginBoxHeader, _Bool LinesOnTheSides, uint8_t colorBox, uint8_t colorLinesOnTheSide)
{
point_t LeftLow, WidthHeight;
@@ -4113,7 +4118,7 @@
textpointer += printScrubberText(&text[textpointer], 10, pSettings);
}
text[textpointer++] = 0;
- t7_colorscheme_mod(text);
+ Gfx_colorsscheme_mod(text, 0);
GFX_write_string(&FontT42, &t7cY0free, text, 1);
}
@@ -4495,6 +4500,10 @@
{
level = 10;
}
+ if(curIndex > 1)
+ {
+ level = (level + ChargerLog[curIndex - 1]) / 2; /* smooth small jumps */
+ }
if(curIndex < 59)
{
ChargerLog[curIndex++] = level;
@@ -4504,7 +4513,7 @@
memcpy (&ChargerLog[0],&ChargerLog[1],sizeof(ChargerLog) - 1);
ChargerLog[curIndex] = level;
}
- if(curIndex > 1)
+ if(curIndex > 1) /* estimate time til charging is complete */
{
averageSpeed = ((averageSpeed * (curIndex-1)) + charge) / curIndex;
completeSec = (100.0 - stateUsed->lifeData.battery_charge) / averageSpeed;
@@ -4561,30 +4570,28 @@
if(stateUsed->chargeStatus != CHARGER_off)
{
- if(lastCharge != localCharge)
- {
- curTick = HAL_GetTick();
- deltatime = (curTick - lastTick);
- lastTick = curTick;
- if(lastCharge < localCharge)
+ curTick = HAL_GetTick();
+ deltatime = (curTick - lastTick);
+
+ if((deltatime > 3000) || (lastCharge != localCharge)) /* Charge value update is expected every 2 second. */
+ { /* Added timeout to keep graph moving in case charger is temporary idle */
+ if(lastCharge != localCharge)
{
- speed = (localCharge - lastCharge) * 1000.0 / deltatime;
+ if(lastCharge < localCharge)
+ {
+ speed = (localCharge - lastCharge) * 1000.0 / deltatime;
+ }
+
+ if(localCharge > 100.0)
+ {
+ localCharge = 100.0;
+ }
+ lastCharge = localCharge;
}
-
- if(localCharge > 100.0)
- {
- localCharge = 100.0;
- }
-
- lastCharge = localCharge;
- }
-
-
- if(deltatime > 1000)
- {
deltatime = 0;
remainingSec = LogDeltaCharge(speed);
speed = 0;
+ lastTick = curTick;
}
}
textpointer += snprintf(&text[textpointer],50,"\n\r");
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tComm.c
--- a/Discovery/Src/tComm.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tComm.c Wed Aug 14 16:44:46 2024 +0200
@@ -79,6 +79,7 @@
#else
# include "base_bootloader.h"
# include "firmwareEraseProgram.h"
+# include "text_multilanguage.h"
#endif
#ifdef SPECIALPROGRAMM
@@ -110,7 +111,7 @@
#define UART_TIMEOUT_SECONDS (120u) /* Timeout for keeping connection open and waiting for data */
#define UART_TIMEOUT_LARGE_BLOCK (6000u) /* Timeout (ms) for reception of an 16K data block (typical RX time ~4,5seconds) */
-#define UART_CMD_BUF_SIZE (20u) /* size of buffer for command exchange */
+#define UART_CMD_BUF_SIZE (30u) /* size of buffer for command exchange */
const uint8_t id_Region1_firmware = 0xFF;
const uint8_t id_RTE = 0xFE;
@@ -119,9 +120,11 @@
static BlueModTmpConfig_t BmTmpConfig = BM_CONFIG_OFF; /* Config BlueMod without storing the changes */
static uint8_t EvaluateBluetoothSignalStrength = 0;
+#ifndef BOOTLOADER_STANDALONE
static uint8_t RequestDisconnection = 0; /* Disconnection from remote device requested */
+static void tComm_Disconnect(void);
+#endif
/* Private function prototypes -----------------------------------------------*/
-static void tComm_Disconnect(void);
static void tComm_Error_Handler(void);
static uint8_t select_mode(uint8_t aRxByte);
static uint8_t tComm_CheckAnswerOK(void);
@@ -367,6 +370,13 @@
hardware_programmPrimaryBluetoothNameSet();
#endif
}
+ else /* no serial set at all => do default configuration of the module */
+ {
+#define NINAB22103B00
+#ifdef NINAB22103B00
+ answer = 0xFF;
+#endif
+ }
return answer;
}
@@ -436,7 +446,7 @@
answer = HAL_OK;
return answer;
}
-
+#ifndef BOOTLOADER_STANDALONE
void tComm_Disconnect()
{
uint8_t answer;
@@ -482,7 +492,7 @@
MX_Bluetooth_PowerOff();
}
}
-
+#endif
uint8_t openComm(uint8_t aRxByte)
{
@@ -586,6 +596,8 @@
SSettings* pSettings = settingsGetPointer();
RTC_DateTypeDef sdatestructure;
RTC_TimeTypeDef stimestructure;
+ uint16_t index;
+ uint32_t header_profileLength, OSTC3_profileLength;
#else
uint8_t dummyForBootloader[256] = {0};
#endif
@@ -593,8 +605,6 @@
uint8_t aTxBuffer[128];
uint8_t aRxBuffer[68];
uint8_t answer;
- uint16_t index;
- uint32_t header_profileLength, OSTC3_profileLength;
aTxBuffer[0] = type;
aTxBuffer[1] = prompt4D4C(receiveStartByteUart);
uint8_t tempHigh, tempLow;
@@ -1451,9 +1461,9 @@
{
return 0;
}
- uint32_t checksum = 256 * 256 * 256 *(uint32_t)sBuffer[0] + 256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+ checksum = 256 * 256 * 256 *(uint32_t)sBuffer[0] + 256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
// uint32_t checksumCalc = crc32c_checksum(pBuffer, length,0,0);
- uint32_t checksumCalc = CRC_CalcBlockCRC((uint32_t*)pBuffer, length/4);
+ checksumCalc = CRC_CalcBlockCRC((uint32_t*)pBuffer, length/4);
if(checksum != checksumCalc)
{
@@ -2138,6 +2148,13 @@
}
}
+#ifdef BOOTLOADER_STANDALONE
+void tComm_StartBlueModBaseInit()
+{
+ BmTmpConfig = BM_INIT_TRIGGER_ON;
+}
+#endif
+
void tComm_StartBlueModConfig()
{
uint8_t answer = HAL_OK;
@@ -2189,6 +2206,39 @@
ConfigRetryCnt = 0;
RestartModule = 1;
break;
+#ifdef BOOTLOADER_STANDALONE
+ case BM_INIT_TRIGGER_ON: HAL_Delay(2000);
+ HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_RESET);
+ BmTmpConfig++;
+ break;
+ case BM_INIT_TRIGGER_OFF: HAL_Delay(1);
+ HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_SET);
+ HAL_Delay(2000);
+ BmTmpConfig++;
+ break;
+ case BM_INIT_FACTORY: sprintf(TxBuffer,"AT+UFACTORY\r"); /*Set to factory defined configuration */
+ break;
+ case BM_INIT_MODE: sprintf(TxBuffer,"AT+UMSM=1\r"); /* start in Data mode */
+ break;
+ case BM_INIT_BLE: sprintf(TxBuffer,"AT+UBTLE=2\r"); /* Bluetooth low energy Peripheral */
+ break;
+ case BM_INIT_NAME: sprintf(TxBuffer,"AT+UBTLN=OSTC4-12345\r"); /* Bluetooth name */
+ break;
+ case BM_INIT_SSP_IDO_OFF: sprintf(TxBuffer,"AT+UDSC=0,0\r"); /* Disable SPP Server on ID0 */
+ break;
+ case BM_INIT_SSP_IDO_ON: sprintf(TxBuffer,"AT+UDSC=0,3\r"); /* SPP Server on ID0 */
+ break;
+ case BM_INIT_SSP_ID1_OFF: sprintf(TxBuffer,"AT+UDSC=1,0\r"); /* Disable SPS Server on ID1 */
+ break;
+ case BM_INIT_SSP_ID1_ON: sprintf(TxBuffer,"AT+UDSC=1,6\r"); /* SPS Server on ID1 */
+ break;
+ case BM_INIT_STORE: sprintf(TxBuffer,"AT&W\r"); /* write settings into eeprom */
+ break;
+ case BM_INIT_RESTART: sprintf(TxBuffer,"AT+CPWROFF\r"); /* reboot module */
+ break;
+ case BM_INIT_DONE: BmTmpConfig = BM_CONFIG_ECHO;
+ break;
+#endif
default:
break;
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tHome.c
--- a/Discovery/Src/tHome.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tHome.c Wed Aug 14 16:44:46 2024 +0200
@@ -65,6 +65,7 @@
#ifdef ENABLE_T3_PROFILE_VIEW
CVIEW_T3_Profile,
#endif
+ CVIEW_T3_Temperature,
CVIEW_T3_END};
/* Private function prototypes -----------------------------------------------*/
@@ -78,10 +79,6 @@
{
if(stateUsed->mode == MODE_DIVE)
{
- if(settingsGetPointer()->extraDisplay == EXTRADISPLAY_BFACTIVE)
- {
- settingsGetPointer()->design = 3;
- }
set_globalState(StD);
}
else
@@ -236,6 +233,10 @@
{
set_globalState(StDMGAS);
}
+ else
+ {
+ set_globalState(StDMENU);
+ }
break;
#ifdef ENABLE_T3_PPO_SIM
case CVIEW_sensors: if(is_stateUsedSetToSim())
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tInfo.c
--- a/Discovery/Src/tInfo.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tInfo.c Wed Aug 14 16:44:46 2024 +0200
@@ -37,6 +37,7 @@
//#include "tInfoSurface.h"
#include "tInfoCompass.h"
#include "tInfoSensor.h"
+#include "tInfoPreDive.h"
#include "tMenu.h"
#include "tMenuEdit.h"
@@ -222,6 +223,11 @@
infoColor = CLUT_MenuPageHardware;
refreshInfo_Sensor(tIscreen);
break;
+ case StIPREDIVE: tIscreen.FBStartAdress = getFrame(14);
+ infoColor = CLUT_MenuPageGasCC;
+ refreshInfo_PreDive(tIscreen);
+ break;
+
default:
break;
}
@@ -306,13 +312,25 @@
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
hgfx.WindowTab = 400;
- hgfx.WindowX0 = XleftGimpStyle;
- hgfx.WindowX1 = XrightGimpStyle;
- hgfx.WindowY1 = 479 - YtopGimpStyle;
- if(hgfx.WindowY1 < Font->height)
- hgfx.WindowY0 = 0;
+
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ hgfx.WindowX0 = XleftGimpStyle;
+ hgfx.WindowX1 = XrightGimpStyle;
+
+ hgfx.WindowY1 = 479 - YtopGimpStyle;
+ if(hgfx.WindowY1 < Font->height)
+ hgfx.WindowY0 = 0;
+ else
+ hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+ }
else
- hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+ {
+ hgfx.WindowX0 = 800 - XrightGimpStyle;
+ hgfx.WindowX1 = 800 - XleftGimpStyle;
+ hgfx.WindowY0 = YtopGimpStyle;
+ hgfx.WindowY1 = YtopGimpStyle + Font->height;
+ }
GFX_write_string_color(Font, &hgfx, text, 0, color);
}
@@ -808,3 +826,33 @@
write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
}
}
+void tInfo_write_buttonTextline_simple(uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode)
+{
+ char localtext[32];
+
+ if(left2ByteCode)
+ {
+ localtext[0] = TXT_2BYTE;
+ localtext[1] = left2ByteCode;
+ localtext[2] = 0;
+ tInfo_write_content_simple(0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
+
+ if(middle2ByteCode)
+ {
+ localtext[0] = '\001';
+ localtext[1] = TXT_2BYTE;
+ localtext[2] = middle2ByteCode;
+ localtext[3] = 0;
+ tInfo_write_content_simple(0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
+
+ if(right2ByteCode)
+ {
+ localtext[0] = '\002';
+ localtext[1] = TXT_2BYTE;
+ localtext[2] = right2ByteCode;
+ localtext[3] = 0;
+ tInfo_write_content_simple(0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
+}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tInfoPreDive.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Discovery/Src/tInfoPreDive.c Wed Aug 14 16:44:46 2024 +0200
@@ -0,0 +1,245 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file Discovery/Src/tInfoPredive.c
+/// \brief Show information which might be of interest during predive checks
+/// \author heinrichs weikamp gmbh
+/// \date 23-Feb-2015
+///
+/// \details
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+///
+/// This program is free software: you can redistribute it and/or modify
+/// it under the terms of the GNU General Public License as published by
+/// the Free Software Foundation, either version 3 of the License, or
+/// (at your option) any later version.
+///
+/// This program is distributed in the hope that it will be useful,
+/// but WITHOUT ANY WARRANTY; without even the implied warranty of
+/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+/// GNU General Public License for more details.
+///
+/// You should have received a copy of the GNU General Public License
+/// along with this program. If not, see .
+//////////////////////////////////////////////////////////////////////////////
+
+/* Includes ------------------------------------------------------------------*/
+
+#include "gfx_engine.h"
+#include "gfx_fonts.h"
+#include "tHome.h"
+#include "tInfo.h"
+#include "tInfoPreDive.h"
+#include "tMenuEdit.h"
+#include "data_exchange_main.h"
+
+#include
+#include
+
+#define MEASURE_INTERVALL (10u) /* refresh function should be called every 100ms => one second interval */
+#define HISTORY_BUF_SIZE (240u) /* store 240 entries a one second */
+#define INVALID_PRESSURE_VALUE (0xFFFF)
+#define DELTA_SHIFT (50) /* the graph printers do not support negative values => shift data into positiv area (assumes pressure range +- 300mBar) */
+
+/* Private variables ---------------------------------------------------------*/
+static uint16_t surfacePressureStart = INVALID_PRESSURE_VALUE;
+static uint16_t surfaceTemperatureStart = 0;
+static uint16_t pressureHistory[HISTORY_BUF_SIZE];
+static uint8_t pressureHistoryIndex = 0;
+static uint16_t temperatureHistory[HISTORY_BUF_SIZE];
+static uint8_t temperatureHistoryIndex = 0;
+static uint8_t measureCnt = MEASURE_INTERVALL;
+static uint8_t referenceSensor = 0xff;
+
+/* Exported functions --------------------------------------------------------*/
+
+
+
+static void storePressureValue(int16_t deltapressure_mBar)
+{
+ uint16_t newValue = DELTA_SHIFT - deltapressure_mBar; /* invert value because graph is drawing larger values to bottom direction */
+ if(pressureHistoryIndex + 2 < HISTORY_BUF_SIZE)
+ {
+ pressureHistoryIndex++;
+ pressureHistory[pressureHistoryIndex] = newValue;
+ pressureHistoryIndex++;
+ pressureHistory[pressureHistoryIndex] = newValue;
+ }
+ else
+ {
+ memcpy (&pressureHistory[0],&pressureHistory[2],sizeof(pressureHistory) - 2);
+ pressureHistory[pressureHistoryIndex] = newValue;
+ }
+}
+
+static void storeTemperatureValue(uint16_t temperature)
+{
+ uint16_t newValue = temperature; /* todo: consider negativ temperature */
+ if(temperatureHistoryIndex + 2 < HISTORY_BUF_SIZE)
+ {
+ temperatureHistoryIndex++;
+ temperatureHistory[temperatureHistoryIndex] = newValue;
+ temperatureHistoryIndex++;
+ temperatureHistory[temperatureHistoryIndex] = newValue;
+ }
+ else
+ {
+ memcpy (&temperatureHistory[0],&temperatureHistory[2],sizeof(temperatureHistory) - 2);
+ temperatureHistory[temperatureHistoryIndex] = newValue;
+ }
+}
+
+void openInfo_PreDive()
+{
+ const SDiveState *pStateReal = stateRealGetPointer();
+ uint8_t index = 0;
+ SSensorDataDiveO2* pDiveO2Data = NULL;
+ SSettings *pSettings = settingsGetPointer();
+ set_globalState(StIPREDIVE);
+
+ surfacePressureStart = 0;
+ pressureHistoryIndex = 0;
+ referenceSensor = 0xff;
+
+ for(index = 0; index < EXT_INTERFACE_MUX_OFFSET; index++)
+ {
+ if((pSettings->ext_sensor_map[index] == SENSOR_DIGO2M) && pStateReal->lifeData.ppO2Sensor_bar[index] != 0)
+ {
+ referenceSensor = index;
+ pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[index];
+ if(pDiveO2Data->pressure != 0)
+ {
+ surfacePressureStart = pDiveO2Data->pressure / 1000;
+ surfaceTemperatureStart = pDiveO2Data->temperature;
+ }
+ break;
+ }
+ }
+ for(index = 0; index < HISTORY_BUF_SIZE; index++)
+ {
+ pressureHistory[index] = DELTA_SHIFT;
+ temperatureHistory[index] = 0;
+ }
+}
+
+void refreshInfo_PreDive(GFX_DrawCfgScreen s)
+{
+ const SDiveState *pStateReal = stateRealGetPointer();
+ static int16_t deltaPressure = 0;
+ static uint16_t temperature = 0;
+ SSettings *pSettings = settingsGetPointer();
+ uint8_t index = 0;
+ char text[31];
+ SSensorDataDiveO2* pDiveO2Data = NULL;
+ point_t start, stop;
+
+ SWindowGimpStyle wintempppO2;
+ SWindowGimpStyle wintemptemp;
+
+ if(--measureCnt == 0)
+ {
+ measureCnt = MEASURE_INTERVALL;
+ pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[referenceSensor];
+ if(pDiveO2Data->pressure != 0)
+ {
+ if(surfacePressureStart == 0)
+ {
+ surfacePressureStart = pDiveO2Data->pressure / 1000;
+ surfaceTemperatureStart = pDiveO2Data->temperature;
+ }
+ deltaPressure = (pDiveO2Data->pressure / 1000) - surfacePressureStart;
+ storePressureValue(deltaPressure);
+ temperature = pDiveO2Data->temperature;
+ storeTemperatureValue(temperature);
+ }
+ }
+
+ text[0] = '\001';
+ text[1] = TXT_PreDive;
+ text[2] = 0;
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware);
+
+ for(index = 0; index < EXT_INTERFACE_MUX_OFFSET; index++)
+ {
+ if((pSettings->ext_sensor_map[index] == SENSOR_DIGO2M) || (pSettings->ext_sensor_map[index] == SENSOR_ANALOG))
+ {
+ snprintf(text,32,"%c%c%d: %01.2f", TXT_2BYTE, TXT2BYTE_Sensor, index, pStateReal->lifeData.ppO2Sensor_bar[index]);
+ tInfo_write_content_simple( 5, 780, ME_Y_LINE1 + (index * ME_Y_LINE_STEP), &FontT48, text, CLUT_Font020);
+ }
+ else if(pSettings->ext_sensor_map[index] == SENSOR_CO2M)
+ {
+ snprintf(text,32,"CO2: %4ld", pStateReal->lifeData.CO2_data.CO2_ppm);
+ tInfo_write_content_simple( 5, 780, ME_Y_LINE5, &FontT48, text, CLUT_Font020);
+ }
+ }
+
+ wintempppO2.left = 350;
+ wintempppO2.right = 590;
+
+ wintemptemp.left = 350;
+ wintemptemp.right = 590;
+
+ wintempppO2.top = ME_Y_LINE3;
+ wintempppO2.bottom = wintempppO2.top + DELTA_SHIFT * 2;
+ wintemptemp.top = ME_Y_LINE5;
+ wintemptemp.bottom = wintemptemp.top + DELTA_SHIFT * 2;
+
+ start.x = wintempppO2.left - 5;
+ start.y = 480 - wintemptemp.bottom - 5;
+ stop.x = wintempppO2.right- start.x + 5;
+ stop.y = DELTA_SHIFT * 2 + 10;
+ GFX_draw_box(&s, start, stop,1, CLUT_Font020);
+
+ start.y = 480 - wintempppO2.bottom - 5;
+ GFX_draw_box(&s, start, stop,1, CLUT_Font020);
+
+ if(pSettings->FlipDisplay)
+ {
+ wintempppO2.left = 800 - 590;
+ wintempppO2.right = 800 - 350;
+ wintemptemp.left = 800 - 590;
+ wintemptemp.right = 800 - 350;
+ }
+ GFX_graph_print(&s, &wintempppO2, 1,1,0, DELTA_SHIFT * 2, pressureHistory, HISTORY_BUF_SIZE, CLUT_Font030, NULL);
+
+ GFX_graph_print(&s, &wintemptemp, 1,1, surfaceTemperatureStart - 2000, surfaceTemperatureStart + 10000, temperatureHistory, HISTORY_BUF_SIZE, CLUT_Font030, NULL);
+
+/* Graph labeling */
+ snprintf(text,32,"%c%c", TXT_2BYTE, TXT2BYTE_CounterLung);
+ tInfo_write_content_simple( 350, 795, ME_Y_LINE2, &FontT48, text, CLUT_Font020);
+
+ snprintf(text,32,"\002\016\016%c%c", TXT_2BYTE, TXT2BYTE_Pressure);
+ tInfo_write_content_simple( 500, 795, ME_Y_LINE3, &FontT48, text, CLUT_Font020);
+ snprintf(text,32,"\002%d",deltaPressure);
+ tInfo_write_content_simple( 500, 795, ME_Y_LINE4, &FontT48, text, CLUT_Font020);
+ snprintf(text,32,"\002\016\016%c",TXT_Temperature);
+ tInfo_write_content_simple( 300, 795, ME_Y_LINE5, &FontT48, text, CLUT_Font020);
+ snprintf(text,32,"\002%2.2f",(temperature / 1000.0));
+ tInfo_write_content_simple( 300, 795, ME_Y_LINE6, &FontT48, text, CLUT_Font020);
+}
+
+void sendActionToInfoPreDive(uint8_t sendAction)
+{
+ switch(sendAction)
+ {
+ case ACTION_BUTTON_BACK:
+ // exitInfo();
+ exitMenuEdit_to_Menu_with_Menu_Update();
+ break;
+
+ case ACTION_BUTTON_ENTER:
+ break;
+ case ACTION_BUTTON_NEXT:
+ break;
+ case ACTION_TIMEOUT:
+ case ACTION_MODE_CHANGE:
+ case ACTION_IDLE_TICK:
+ case ACTION_IDLE_SECOND:
+ default:
+ break;
+ }
+}
+
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tInfoSensor.c
--- a/Discovery/Src/tInfoSensor.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tInfoSensor.c Wed Aug 14 16:44:46 2024 +0200
@@ -34,6 +34,7 @@
#include "tInfo.h"
#include "tInfoSensor.h"
#include "tMenuEdit.h"
+#include "data_exchange_main.h"
#include
#include
@@ -108,39 +109,8 @@
strcpy(pbuf,&tmpBuf[index+1]);
}
-void tInfo_write_buttonTextline_simple(uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode)
-{
- char localtext[32];
- if(left2ByteCode)
- {
- localtext[0] = TXT_2BYTE;
- localtext[1] = left2ByteCode;
- localtext[2] = 0;
- tInfo_write_content_simple(0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
- }
-
- if(middle2ByteCode)
- {
- localtext[0] = '\001';
- localtext[1] = TXT_2BYTE;
- localtext[2] = middle2ByteCode;
- localtext[3] = 0;
- tInfo_write_content_simple(0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
- }
-
- if(right2ByteCode)
- {
- localtext[0] = '\002';
- localtext[1] = TXT_2BYTE;
- localtext[2] = right2ByteCode;
- localtext[3] = 0;
- tInfo_write_content_simple(0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
- }
-}
-
-// ===============================================================================
-void refreshInfo_Sensor(GFX_DrawCfgScreen s)
+static void refreshInfo_SensorO2(GFX_DrawCfgScreen s)
{
const SDiveState *pStateReal = stateRealGetPointer();
SSensorDataDiveO2* pDiveO2Data;
@@ -150,6 +120,98 @@
float pressure = 0.0;
+ pDiveO2Data = (SSensorDataDiveO2*)pStateReal->lifeData.extIf_sensor_data[activeSensorId];
+ strIndex = snprintf(text,32,"ID: ");
+ if(pDiveO2Data->sensorId != 0)
+ {
+ uint64ToString(pDiveO2Data->sensorId,&text[strIndex]);
+ }
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020);
+ snprintf(text,32,"%c: %02.1f",TXT_Temperature , (float)pDiveO2Data->temperature / 1000.0);
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE2, &FontT48, text, CLUT_Font020);
+
+#ifdef ENABLE_EXTERNAL_PRESSURE
+ pressure = (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[2]);
+#else
+ pressure = (float)pDiveO2Data->pressure / 1000.0;
+#endif
+ snprintf(text,32,"Druck: %02.1f (%02.1f)", (float)pDiveO2Data->pressure / 1000.0, pressure *1000.0);
+
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE3, &FontT48, text, CLUT_Font020);
+ snprintf(text,32,"Feuchtigkeit: %02.1f", (float)pDiveO2Data->humidity / 1000.0);
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE4, &FontT48, text, CLUT_Font020);
+ snprintf(text,32,"Status: 0x%lx", pDiveO2Data->status);
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE5, &FontT48, text, CLUT_Font020);
+#ifdef ENABLE_EXTERNAL_PRESSURE
+ snprintf(text,32,"Norm ppO2: %02.3f (%02.1f)", (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0] / (pressure / 1000.0)),(float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0]));
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020);
+#endif
+
+ if(sensorActive)
+ {
+ *textPointer++ = '\005';
+ }
+ else
+ {
+ *textPointer++ = '\006';
+ }
+ *textPointer++ = ' ';
+ *textPointer++ = TXT_2BYTE;
+ *textPointer++ = TXT2BYTE_Sensor;
+ *textPointer++ = ' ';
+ *textPointer++ = TXT_2BYTE;
+ *textPointer++ = TXT2BYTE_O2IFDigital;
+ *textPointer++ = '1' + activeSensorId;
+
+ snprintf(textPointer, 20,": %01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[activeSensorId], pStateReal->lifeData.sensorVoltage_mV[activeSensorId]);
+
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020);
+
+ tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,0);
+}
+
+static void refreshInfo_SensorCo2(GFX_DrawCfgScreen s)
+{
+ const SDiveState *pStateReal = stateRealGetPointer();
+ char text[31];
+ char *textPointer = text;
+
+ snprintf(text,32,"CO2: %ld ppm",pStateReal->lifeData.CO2_data.CO2_ppm);
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020);
+
+
+ snprintf(text,32,"Signal: %d",pStateReal->lifeData.CO2_data.signalStrength);
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE2, &FontT48, text, CLUT_Font020);
+
+ if(sensorActive)
+ {
+ *textPointer++ = '\005';
+ }
+ else
+ {
+ *textPointer++ = '\006';
+ }
+ *textPointer++ = ' ';
+ *textPointer++ = TXT_2BYTE;
+ *textPointer++ = TXT2BYTE_Sensor;
+ *textPointer++ = ' ';
+ *textPointer++ = 'C';
+ *textPointer++ = 'o';
+ *textPointer++ = '1' + activeSensorId;
+
+ snprintf(textPointer, 20,": %ld ppm", pStateReal->lifeData.CO2_data.CO2_ppm);
+
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020);
+
+ tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_O2Calib);
+}
+// ===============================================================================
+void refreshInfo_Sensor(GFX_DrawCfgScreen s)
+{
+ const SDiveState *pStateReal = stateRealGetPointer();
+
+ char text[31];
+
text[0] = '\001';
text[1] = TXT_Sensor;
text[2] = ' ';
@@ -157,57 +219,16 @@
text[4] = ' ';
text[5] = '1' + activeSensorId;
text[6] = 0;
- tInfo_write_content_simple( 30, 340, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware);
-
- pDiveO2Data = (SSensorDataDiveO2*)&stateRealGetPointer()->lifeData.extIf_sensor_data[activeSensorId];
-
- strIndex = snprintf(text,32,"ID: ");
- if(pDiveO2Data->sensorId != 0)
- {
- uint64ToString(pDiveO2Data->sensorId,&text[strIndex]);
- }
- tInfo_write_content_simple( 30, 340, ME_Y_LINE1, &FontT48, text, CLUT_Font020);
- snprintf(text,32,"%c: %02.1f",TXT_Temperature , (float)pDiveO2Data->temperature / 1000.0);
- tInfo_write_content_simple( 30, 340, ME_Y_LINE2, &FontT48, text, CLUT_Font020);
-
-#ifdef ENABLE_EXTERNAL_PRESSURE
- pressure = (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[2]);
-#else
- pressure = (float)pDiveO2Data->pressure / 1000.0;
-#endif
- snprintf(text,32,"Druck: %02.1f (%02.1f)", (float)pDiveO2Data->pressure / 1000.0, pressure *1000.0);
+ tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware);
- tInfo_write_content_simple( 30, 340, ME_Y_LINE3, &FontT48, text, CLUT_Font020);
- snprintf(text,32,"Feuchtigkeit: %02.1f", (float)pDiveO2Data->humidity / 1000.0);
- tInfo_write_content_simple( 30, 340, ME_Y_LINE4, &FontT48, text, CLUT_Font020);
- snprintf(text,32,"Status: 0x%lx", pDiveO2Data->status);
- tInfo_write_content_simple( 30, 340, ME_Y_LINE5, &FontT48, text, CLUT_Font020);
-#ifdef ENABLE_EXTERNAL_PRESSURE
- snprintf(text,32,"Norm ppO2: %02.3f (%02.1f)", (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0] / (pressure / 1000.0)),(float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0]));
- tInfo_write_content_simple( 30, 340, ME_Y_LINE6, &FontT48, text, CLUT_Font020);
-#endif
-
- if(sensorActive)
- {
- *textPointer++ = '\005';
- }
- else
- {
- *textPointer++ = '\006';
- }
- *textPointer++ = ' ';
- *textPointer++ = TXT_2BYTE;
- *textPointer++ = TXT2BYTE_Sensor;
- *textPointer++ = ' ';
- *textPointer++ = TXT_2BYTE;
- *textPointer++ = TXT2BYTE_O2IFDigital;
- *textPointer++ = '1' + activeSensorId;
-
- snprintf(textPointer, 20,": %01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[activeSensorId], pStateReal->lifeData.sensorVoltage_mV[activeSensorId]);
-
- tInfo_write_content_simple( 30, 340, ME_Y_LINE6, &FontT48, text, CLUT_Font020);
-
- tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,0);
+ switch(pStateReal->lifeData.extIf_sensor_map[activeSensorId])
+ {
+ default:
+ case SENSOR_DIGO2M: refreshInfo_SensorO2(s);
+ break;
+ case SENSOR_CO2M: refreshInfo_SensorCo2(s);
+ break;
+ }
}
void sendActionToInfoSensor(uint8_t sendAction)
@@ -220,16 +241,28 @@
case ACTION_BUTTON_ENTER: if(settingsGetPointer()->ppo2sensors_deactivated & (1 << (activeSensorId)))
{
+ if(stateRealGetPointer()->lifeData.extIf_sensor_map[activeSensorId] == SENSOR_CO2M)
+ {
+ settingsGetPointer()->co2_sensor_active = 1;
+ }
settingsGetPointer()->ppo2sensors_deactivated &= ~(uint8_t)(1 << (activeSensorId));
sensorActive = 1;
}
else
{
+ if(stateRealGetPointer()->lifeData.extIf_sensor_map[activeSensorId] == SENSOR_CO2M)
+ {
+ settingsGetPointer()->co2_sensor_active = 0;
+ }
settingsGetPointer()->ppo2sensors_deactivated |= (uint8_t)(1 << (activeSensorId));
sensorActive = 0;
}
break;
- case ACTION_BUTTON_NEXT:
+ case ACTION_BUTTON_NEXT: if(stateRealGetPointer()->lifeData.extIf_sensor_map[activeSensorId] == SENSOR_CO2M)
+ {
+ DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB);
+ }
+ break;
case ACTION_TIMEOUT:
case ACTION_MODE_CHANGE:
case ACTION_IDLE_TICK:
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenu.c
--- a/Discovery/Src/tMenu.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenu.c Wed Aug 14 16:44:46 2024 +0200
@@ -261,6 +261,13 @@
}
}
+uint8_t getLineMask(uint32_t lineId)
+{
+ SStateList idList;
+ get_idSpecificStateList(lineId, &idList);
+ return(menu.disableLineMask[idList.page]);
+}
+
void resetLineMask(uint32_t lineId)
{
SStateList idList;
@@ -591,7 +598,10 @@
if((isLoopMode(pSettings->dive_mode)) || (stateUsed->diveSettings.ccrOption == 1))
{
tM_add(StMCG);
- tM_add(StMSP);
+ if((stateUsed->diveSettings.diveMode != DIVEMODE_PSCR) || (actual_menu_content != MENU_SURFACE))
+ {
+ tM_add(StMSP);
+ }
if (actual_menu_content == MENU_SURFACE) /* StMOG is now accessed using StMCG in CCR mode*/
{
tM_add(StMXTRA);
@@ -931,6 +941,18 @@
block_diluent_handler(1);
}
+static void checkLineStatus()
+{
+ switch(get_globalState())
+ {
+ case StMSYS: tMSystem_checkLineStatus();
+ break;
+ case StMXTRA: tMXtra_checkLineStatus();
+ break;
+ default:
+ break;
+ }
+}
static void nextPage(void)
{
@@ -950,6 +972,8 @@
set_globalState_Menu_Page(page);
+ checkLineStatus(); /* some lines may be enabled / disabled depending on condition occuring outside the page scope => check if update is necessary */
+
change_CLUT_entry(CLUT_MenuLineSelectedSides, (CLUT_MenuPageGasOC + page - 1));
change_CLUT_entry(CLUT_MenuLineSelectedSeperator, (CLUT_MenuPageGasOC + page - 1));
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEdit.c
--- a/Discovery/Src/tMenuEdit.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEdit.c Wed Aug 14 16:44:46 2024 +0200
@@ -36,6 +36,7 @@
#include "tHome.h"
#include "tInfoCompass.h"
#include "tInfoSensor.h"
+#include "tInfoPreDive.h"
#include "tMenuEditHardware.h"
#include "tMenuEditPlanner.h"
#include "tMenuEditSystem.h"
@@ -96,11 +97,13 @@
static uint8_t menuColor;
static int8_t id = 0;
+static int8_t actualId = 0;
static int8_t idLast = -1;
static SEditIdent ident[10];
static int8_t tME_stop = 0;
static int8_t evid = 0;
+static int8_t actualevid = 0;
static int8_t evidLast = -1;
static SEventHandler event[10];
@@ -115,6 +118,10 @@
static _Bool WriteSettings = 0;
/* Private function prototypes -----------------------------------------------*/
+static void create_newText_for_Id(int8_t localId);
+void clean_content_of_Id(int8_t localId);
+static void write_content_of_Id(int8_t localId);
+
void draw_tMEdesign(void);
void set_cursorNew(uint8_t forThisIdentID);
void startMenuEditFieldSelect(void);
@@ -155,12 +162,22 @@
tME_stop = 1;
}
-void resetMenuEdit(uint8_t color)
+void resetMenuContentStructure()
{
id = 0;
idLast = -1;
evid = 0;
evidLast = -1;
+}
+
+void resetMenuEdit(uint8_t color)
+{
+ id = 0;
+ actualId = 0;
+ idLast = -1;
+ evid = 0;
+ actualevid = 0;
+ evidLast = -1;
tME_stop = 0;
EnterPressed = 0;
EnterPressedBeforeButtonAction = 0;
@@ -184,10 +201,8 @@
menuColor = color;
-// draw_tMEdesign();
-// GFX_SetFramesTopBottom(tMEscreen.FBStartAdress, tMEcursor.FBStartAdress,480);
+ /* set cursor to first line */
uint8_t line = 1;
-// GFX_SetFramesTopBottom(tMEscreen.FBStartAdress, (tMEcursorNew.FBStartAdress) + 65*2*(line - 1),390);
GFX_SetFrameTop(tMEscreen.FBStartAdress);
if(!settingsGetPointer()->FlipDisplay)
{
@@ -214,22 +229,12 @@
case (StMHARD3_Sensor_Detect):
case (StMHARD3_Sensor_Info): refreshFct = refresh_O2Sensors;
break;
- case (StMHARD2_Compass_SetCourse & MaskFieldDigit):
+ case (StMHARD2_Compass & MaskFieldDigit):
refreshFct = refresh_CompassEdit;
-
break;
case (StMXTRA_CompassHeading & MaskFieldDigit):
refreshFct = refresh_CompassHeading;
-
break;
- case (StMXTRA_PSCR_O2_Drop & MaskFieldDigit):
- if (settingsGetPointer()->dive_mode != DIVEMODE_PSCR) { /* workaround because PSCR mode is set dynamic */
- refreshFct = refresh_CO2Data;
- }
-
- break;
- case (StMXTRA_CO2_Sensor & MaskFieldDigit): refreshFct = refresh_CO2Data;
- break;
case (StMSYS4_Info & MaskFieldDigit): refreshFct = &refresh_InformationPage;
break;
case (StMPLAN5_ExitResult & MaskFieldDigit): refreshFct = refresh_PlanResult;
@@ -394,20 +399,20 @@
void startMenuEditFieldSelect(void)
{
- id = 0;
- helperGotoMenuEditField(id);
+ actualId = 0;
+ helperGotoMenuEditField(actualId);
}
void nextMenuEditField(void)
{
- helperLeaveMenuEditField(id);
+ helperLeaveMenuEditField(actualId);
- if(id < idLast)
- id++;
+ if(actualId < idLast)
+ actualId++;
else
- id = 0;
- helperGotoMenuEditField(id);
+ actualId = 0;
+ helperGotoMenuEditField(actualId);
}
/*
@@ -424,16 +429,16 @@
_Bool inc_subBlock_or_block_of_actual_id(void)
{
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return 0;
- if((ident[id].subtype != FIELD_3DIGIT) && (ident[id].subtype != FIELD_2DIGIT) && ((subBlockPosition + 1) < ident[id].size[block]))
+ if((ident[actualId].subtype != FIELD_3DIGIT) && (ident[actualId].subtype != FIELD_2DIGIT) && ((subBlockPosition + 1) < ident[actualId].size[block]))
{
subBlockPosition++;
return 1;
}
- if(((block + 1) < 4) && (ident[id].size[block+1] > 0))
+ if(((block + 1) < 4) && (ident[actualId].size[block+1] > 0))
{
block++;
subBlockPosition = 0;
@@ -449,33 +454,33 @@
uint8_t (*onActionFunc)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t);
uint8_t content;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return 0;
- onActionFunc = (uint8_t (*)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t))(event[evid].pEventFunction);
+ onActionFunc = (uint8_t (*)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t))(event[actualevid].pEventFunction);
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_3DIGIT))
{
- content = 100 * ( ident[id].newText[ident[id].begin[block] + 0] - '0');
- content += 10 * ( ident[id].newText[ident[id].begin[block] + 1] - '0');
- content += ident[id].newText[ident[id].begin[block] + 2];
+ content = 100 * ( ident[actualId].newText[ident[actualId].begin[block] + 0] - '0');
+ content += 10 * ( ident[actualId].newText[ident[actualId].begin[block] + 1] - '0');
+ content += ident[actualId].newText[ident[actualId].begin[block] + 2];
}
else
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_2DIGIT))
{
- content = 10 * (ident[id].newText[ident[id].begin[block] + 0] - '0');
- content += ident[id].newText[ident[id].begin[block] + 1];
+ content = 10 * (ident[actualId].newText[ident[actualId].begin[block] + 0] - '0');
+ content += ident[actualId].newText[ident[actualId].begin[block] + 1];
}
else
- if(ident[id].maintype == FIELD_NUMBERS)
- content = ident[id].newText[ident[id].begin[block] + subBlockPosition];
+ if(ident[actualId].maintype == FIELD_NUMBERS)
+ content = ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition];
else
- if((ident[id].maintype == FIELD_ON_OFF) || (ident[id].maintype == FIELD_TOGGLE))
- content = ident[id].input[block];
+ if((ident[actualId].maintype == FIELD_ON_OFF) || (ident[actualId].maintype == FIELD_TOGGLE))
+ content = ident[actualId].input[block];
else
content = 0; /* just a default for protection */
- return onActionFunc(ident[id].callerID, block, subBlockPosition, content, action);
+ return onActionFunc(ident[actualId].callerID, block, subBlockPosition, content, action);
}
void mark_digit_of_actual_id_with_this_block_and_subBlock(int8_t oldblock, int8_t oldsubblockpos)
@@ -483,15 +488,15 @@
char oneCharText[2];
uint16_t positionOffset;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
- if(ident[id].maintype == FIELD_NUMBERS)
+ if(ident[actualId].maintype == FIELD_NUMBERS)
{
- oneCharText[0] = ident[id].newText[ident[id].begin[oldblock] + oldsubblockpos];
+ oneCharText[0] = ident[actualId].newText[ident[actualId].begin[oldblock] + oldsubblockpos];
oneCharText[1] = 0;
- positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[oldblock] + oldsubblockpos);
- write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditFieldSelected);
+ positionOffset = GFX_return_offset(ident[actualId].fontUsed, ident[actualId].newText, ident[actualId].begin[oldblock] + oldsubblockpos);
+ write_content( ident[actualId].coord[0] + positionOffset, ident[actualId].coord[1], ident[actualId].coord[2], ident[actualId].fontUsed, oneCharText, CLUT_MenuEditFieldSelected);
}
}
@@ -501,16 +506,16 @@
char oneCharText[3];
uint16_t positionOffset;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
- if(ident[id].maintype == FIELD_NUMBERS)
+ if(ident[actualId].maintype == FIELD_NUMBERS)
{
- oneCharText[0] = ident[id].newText[ident[id].begin[block] + 0];
- oneCharText[1] = ident[id].newText[ident[id].begin[block] + 1];
+ oneCharText[0] = ident[actualId].newText[ident[actualId].begin[block] + 0];
+ oneCharText[1] = ident[actualId].newText[ident[actualId].begin[block] + 1];
oneCharText[2] = 0;
- positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[block] + 0);
- write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditDigit);
+ positionOffset = GFX_return_offset(ident[actualId].fontUsed, ident[actualId].newText, ident[actualId].begin[block] + 0);
+ write_content( ident[actualId].coord[0] + positionOffset, ident[actualId].coord[1], ident[actualId].coord[2], ident[actualId].fontUsed, oneCharText, CLUT_MenuEditDigit);
}
}
@@ -520,17 +525,17 @@
char oneCharText[4];
uint16_t positionOffset;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
- if(ident[id].maintype == FIELD_NUMBERS)
+ if(ident[actualId].maintype == FIELD_NUMBERS)
{
- oneCharText[0] = ident[id].newText[ident[id].begin[block] + 0];
- oneCharText[1] = ident[id].newText[ident[id].begin[block] + 1];
- oneCharText[2] = ident[id].newText[ident[id].begin[block] + 2];
+ oneCharText[0] = ident[actualId].newText[ident[actualId].begin[block] + 0];
+ oneCharText[1] = ident[actualId].newText[ident[actualId].begin[block] + 1];
+ oneCharText[2] = ident[actualId].newText[ident[actualId].begin[block] + 2];
oneCharText[3] = 0;
- positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[block] + 0);
- write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditDigit);
+ positionOffset = GFX_return_offset(ident[actualId].fontUsed, ident[actualId].newText, ident[actualId].begin[block] + 0);
+ write_content( ident[actualId].coord[0] + positionOffset, ident[actualId].coord[1], ident[actualId].coord[2], ident[actualId].fontUsed, oneCharText, CLUT_MenuEditDigit);
}
}
@@ -540,15 +545,15 @@
char oneCharText[2];
uint16_t positionOffset;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
- if(ident[id].maintype == FIELD_NUMBERS)
+ if(ident[actualId].maintype == FIELD_NUMBERS)
{
- oneCharText[0] = ident[id].newText[ident[id].begin[block] + subBlockPosition];
+ oneCharText[0] = ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition];
oneCharText[1] = 0;
- positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[block] + subBlockPosition);
- write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditDigit);
+ positionOffset = GFX_return_offset(ident[actualId].fontUsed, ident[actualId].newText, ident[actualId].begin[block] + subBlockPosition);
+ write_content( ident[actualId].coord[0] + positionOffset, ident[actualId].coord[1], ident[actualId].coord[2], ident[actualId].fontUsed, oneCharText, CLUT_MenuEditDigit);
}
}
@@ -560,27 +565,27 @@
uint8_t digit10;
uint8_t digit1;
- evid = 0;
- while((evid < evidLast) && (event[evid].callerID != ident[id].callerID))
+ actualevid = 0;
+ while((actualevid < evidLast) && (event[actualevid].callerID != ident[actualId].callerID))
{
- evid++;
+ actualevid++;
}
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
- set_globalState(event[evid].callerID);
+ set_globalState(event[actualevid].callerID);
block = 0;
subBlockPosition = 0;
- if(ident[id].maintype == FIELD_NUMBERS)
+ if(ident[actualId].maintype == FIELD_NUMBERS)
{
change_CLUT_entry(CLUT_MenuEditLineSelected, CLUT_MenuEditCursor);
// old stuff? hw 150916, reactivated 150923, this shows which digit will be changed now as it marks the other grey/black
// now fixed for button settings with newContent <= '0'+99 condition
- change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldSelected);
+ change_CLUT_entry((CLUT_MenuEditField0 + actualId), CLUT_MenuEditFieldSelected);
}
- if(ident[id].maintype == FIELD_TOGGLE)
+ if(ident[actualId].maintype == FIELD_TOGGLE)
{
change_CLUT_entry(CLUT_MenuEditLineSelected, CLUT_MenuEditCursor);
}
@@ -623,15 +628,15 @@
return;
}
- switch(ident[id].maintype)
+ switch(ident[actualId].maintype)
{
case FIELD_NUMBERS:
write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);
- switch (ident[id].subtype) {
+ switch (ident[actualId].subtype) {
case FIELD_UDIGIT:
if((newContent >= '0') && (newContent <= '9'))
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
mark_new_digit_of_actual_id_block_and_subBlock();
@@ -640,9 +645,9 @@
if((newContent >= '0') && (newContent <= '0'+200))
{
split_Content_to_Digit_helper( newContent, &digit100, &digit10, &digit1);
- ident[id].newText[ident[id].begin[block] + 0] = '0' + digit100;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + digit10;
- ident[id].newText[ident[id].begin[block] + 2] = '0' + digit1;
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + digit100;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + digit10;
+ ident[actualId].newText[ident[actualId].begin[block] + 2] = '0' + digit1;
mark_new_3digit_of_actual_id_block();
}
@@ -650,15 +655,15 @@
case FIELD_2DIGIT:
if((newContent >= '0') && (newContent <= '0'+99))
{
- ident[id].newText[ident[id].begin[block]] = '0' + (newContent - '0')/10;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+ ident[actualId].newText[ident[actualId].begin[block]] = '0' + (newContent - '0')/10;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
mark_new_2digit_of_actual_id_block();
}
break;
case FIELD_SDIGIT:
if ((subBlockPosition == 0 && (newContent == '+' || newContent == '-')) || (subBlockPosition > 0 && newContent >= '0' && newContent <= '9')) {
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
}
mark_new_digit_of_actual_id_block_and_subBlock();
@@ -672,10 +677,10 @@
break;
case FIELD_SYMBOL:
- ident[id].input[0] += 1;
- if(ident[id].input[0] >= ident[id].input[1])
- ident[id].input[0] = 0;
- ident[id].newText[0] = ident[id].orgText[ident[id].input[0]];
+ ident[actualId].input[0] += 1;
+ if(ident[actualId].input[0] >= ident[actualId].input[1])
+ ident[actualId].input[0] = 0;
+ ident[actualId].newText[0] = ident[actualId].orgText[ident[actualId].input[0]];
write_content_of_actual_Id();
set_globalState(menuID);
break;
@@ -693,7 +698,7 @@
set_globalState(menuID);
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_TIMEOUT);
@@ -744,7 +749,7 @@
int8_t blockOld = 0;
int8_t subBlockPositionOld = 0;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
blockOld = block;
@@ -787,29 +792,29 @@
}
}
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT) && (action == ACTION_BUTTON_ENTER) &&(newContent >= '0') && (newContent <= '0' + 99))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_3DIGIT) && (action == ACTION_BUTTON_ENTER) &&(newContent >= '0') && (newContent <= '0' + 99))
{
- ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/100;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + (newContent - '0')/10;
- ident[id].newText[ident[id].begin[block] + 2] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + (newContent - '0')/100;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + (newContent - '0')/10;
+ ident[actualId].newText[ident[actualId].begin[block] + 2] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
}
else
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT) && (action == ACTION_BUTTON_ENTER) &&(newContent >= '0') && (newContent <= '0' + 99))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_2DIGIT) && (action == ACTION_BUTTON_ENTER) &&(newContent >= '0') && (newContent <= '0' + 99))
{
- ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/10;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
- } else if (ident[id].maintype == FIELD_NUMBERS && ident[id].subtype == FIELD_SDIGIT && action == ACTION_BUTTON_ENTER && subBlockPosition == 0) {
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + (newContent - '0')/10;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+ } else if (ident[actualId].maintype == FIELD_NUMBERS && ident[actualId].subtype == FIELD_SDIGIT && action == ACTION_BUTTON_ENTER && subBlockPosition == 0) {
if (newContent == '+' || newContent == '-') {
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
}
}
else
- if((ident[id].maintype == FIELD_NUMBERS) && (action == ACTION_BUTTON_ENTER) && (newContent >= '0') && (newContent <= '9'))
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (action == ACTION_BUTTON_ENTER) && (newContent >= '0') && (newContent <= '9'))
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
if(action == ACTION_BUTTON_ENTER)
{
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_3DIGIT))
{
mark_new_3digit_of_actual_id_block();
mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,0);
@@ -817,7 +822,7 @@
mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,2);
}
else
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_2DIGIT))
{
mark_new_2digit_of_actual_id_block();
mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,0);
@@ -861,7 +866,7 @@
static void checkUpdateSDigit(uint8_t newContent)
{
if ((subBlockPosition == 0 && (newContent == '+' || newContent == '-')) || (subBlockPosition > 0 && newContent >= '0' && newContent <= '9')) {
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
}
}
@@ -873,33 +878,33 @@
uint8_t digit10;
uint8_t digit1;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_NEXT);
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT) &&(newContent >= '0') && (newContent <= '0' + 200))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_3DIGIT) &&(newContent >= '0') && (newContent <= '0' + 200))
{
split_Content_to_Digit_helper( newContent, &digit100, &digit10, &digit1);
- ident[id].newText[ident[id].begin[block] + 0] = '0' + digit100;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + digit10;
- ident[id].newText[ident[id].begin[block] + 2] = '0' + digit1;
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + digit100;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + digit10;
+ ident[actualId].newText[ident[actualId].begin[block] + 2] = '0' + digit1;
mark_new_3digit_of_actual_id_block();
return;
}
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT) &&(newContent >= '0') && (newContent <= '0' + 99))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_2DIGIT) &&(newContent >= '0') && (newContent <= '0' + 99))
{
- ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/10;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + (newContent - '0')/10;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
mark_new_2digit_of_actual_id_block();
return;
}
- if (ident[id].maintype == FIELD_NUMBERS && ident[id].subtype == FIELD_SDIGIT) {
+ if (ident[actualId].maintype == FIELD_NUMBERS && ident[actualId].subtype == FIELD_SDIGIT) {
checkUpdateSDigit(newContent);
- } else if (ident[id].maintype == FIELD_NUMBERS && newContent >= '0' && newContent <= '9') {
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ } else if (ident[actualId].maintype == FIELD_NUMBERS && newContent >= '0' && newContent <= '9') {
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
}
mark_new_digit_of_actual_id_block_and_subBlock();
@@ -913,33 +918,33 @@
uint8_t digit10;
uint8_t digit1;
- if(event[evid].callerID != ident[id].callerID)
+ if(event[actualevid].callerID != ident[actualId].callerID)
return;
newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_BACK);
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT) &&(newContent >= '0') && (newContent <= '0' + 200))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_3DIGIT) &&(newContent >= '0') && (newContent <= '0' + 200))
{
split_Content_to_Digit_helper( newContent, &digit100, &digit10, &digit1);
- ident[id].newText[ident[id].begin[block] + 0] = '0' + digit100;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + digit10;
- ident[id].newText[ident[id].begin[block] + 2] = '0' + digit1;
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + digit100;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + digit10;
+ ident[actualId].newText[ident[actualId].begin[block] + 2] = '0' + digit1;
mark_new_3digit_of_actual_id_block();
return;
}
- if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT) &&(newContent >= '0') && (newContent <= '0' + 99))
+ if((ident[actualId].maintype == FIELD_NUMBERS) && (ident[actualId].subtype == FIELD_2DIGIT) &&(newContent >= '0') && (newContent <= '0' + 99))
{
- ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/10;
- ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+ ident[actualId].newText[ident[actualId].begin[block] + 0] = '0' + (newContent - '0')/10;
+ ident[actualId].newText[ident[actualId].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
mark_new_2digit_of_actual_id_block();
return;
}
- if (ident[id].maintype == FIELD_NUMBERS && ident[id].subtype == FIELD_SDIGIT) {
+ if (ident[actualId].maintype == FIELD_NUMBERS && ident[actualId].subtype == FIELD_SDIGIT) {
checkUpdateSDigit(newContent);
- } else if (ident[id].maintype == FIELD_NUMBERS && newContent >= '0' && newContent <= '9') {
- ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+ } else if (ident[actualId].maintype == FIELD_NUMBERS && newContent >= '0' && newContent <= '9') {
+ ident[actualId].newText[ident[actualId].begin[block] + subBlockPosition] = newContent;
}
mark_new_digit_of_actual_id_block_and_subBlock();
@@ -948,10 +953,10 @@
void evaluateNewString(uint32_t editID, uint32_t *pNewValue1, uint32_t *pNewValue2, uint32_t *pNewValue3, uint32_t *pNewValue4)
{
- if(editID != ident[id].callerID)
+ if(editID != ident[actualId].callerID)
return;
- bool isSigned = ident[id].maintype == FIELD_NUMBERS && ident[id].subtype == FIELD_SDIGIT;
+ bool isSigned = ident[actualId].maintype == FIELD_NUMBERS && ident[actualId].subtype == FIELD_SDIGIT;
uint8_t i, digitCount, digit;
uint32_t sum[4], multiplier;
@@ -960,16 +965,16 @@
sum[i] = 0;
i = 0;
- while( ident[id].size[i] && (i < 4))
+ while( ident[actualId].size[i] && (i < 4))
{
multiplier = 1;
- for(digitCount = 1; digitCount < ident[id].size[i]; digitCount++)
+ for(digitCount = 1; digitCount < ident[actualId].size[i]; digitCount++)
multiplier *= 10;
bool isNegative = false;
- for(digitCount = 0; digitCount < ident[id].size[i]; digitCount++)
+ for(digitCount = 0; digitCount < ident[actualId].size[i]; digitCount++)
{
- digit = ident[id].newText[ident[id].begin[i] + digitCount];
+ digit = ident[actualId].newText[ident[actualId].begin[i] + digitCount];
if (isSigned && digitCount == 0) {
if (digit == '-') {
@@ -1015,8 +1020,8 @@
{
uint8_t temp_id;
- if(editID == ident[id].callerID)
- return id;
+ if(editID == ident[actualId].callerID)
+ return actualId;
else
{
temp_id = 0;
@@ -1043,8 +1048,8 @@
strncpy(ident[id].newText, text, 32);
ident[id].newText[31] = 0;
- clean_content_of_actual_Id();
- write_content_of_actual_Id();
+ clean_content_of_Id(id);
+ write_content_of_Id(id);
id = backup_id;
}
@@ -1068,8 +1073,8 @@
else
ident[id].newText[0] = '\006';
- clean_content_of_actual_Id();
- write_content_of_actual_Id();
+ clean_content_of_Id(id);
+ write_content_of_Id(id);
id = backup_id;
}
@@ -1081,8 +1086,8 @@
if(id_local <= idLast)
{
- id = id_local;
- set_cursorNew(id);
+ actualId = id_local;
+ set_cursorNew(id_local);
}
}
@@ -1140,10 +1145,10 @@
ident[id].input[2] = int3;
ident[id].input[3] = int4;
- create_newText_for_actual_Id();
+ create_newText_for_Id(id);
if(id <= idLast)
change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
- write_content_of_actual_Id();
+ write_content_of_Id(id);
id = backup_id;
}
@@ -1185,7 +1190,7 @@
}
}
else
- if(get_globalState() == event[evid].callerID)
+ if(get_globalState() == event[actualevid].callerID)
{
switch(sendAction)
{
@@ -1233,70 +1238,79 @@
}
-void create_newText_for_actual_Id_and_field_select(void)
+void create_newText_for_Id_and_field_select(int8_t localId)
{
uint8_t i;
i = 0;
- while( ident[id].size[i] && (i < 4))
+ while( ident[localId].size[i] && (i < 4))
{
- if(ident[id].input[i])
- ident[id].newText[ident[id].begin[i]] = '\005';
+ if(ident[localId].input[i])
+ ident[localId].newText[ident[localId].begin[i]] = '\005';
else
- ident[id].newText[ident[id].begin[i]] = '\006';
+ ident[localId].newText[ident[localId].begin[i]] = '\006';
i++;
}
}
+void create_newText_for_actual_Id_and_field_select(void)
+{
+ create_newText_for_Id_and_field_select(actualId);
+}
-void create_newText_for_actual_Id(void)
+void create_newText_for_Id(int8_t localId)
{
- if( ident[id].maintype == FIELD_SELECT)
+ bool isSigned = ident[localId].maintype == FIELD_NUMBERS && ident[localId].subtype == FIELD_SDIGIT;
+
+ uint8_t i, digitCount;
+ uint32_t remainder, digit, divider;
+ i = 0;
+
+ if( ident[localId].maintype == FIELD_SELECT)
{
- create_newText_for_actual_Id_and_field_select();
+ create_newText_for_Id_and_field_select(localId);
return;
}
- bool isSigned = ident[id].maintype == FIELD_NUMBERS && ident[id].subtype == FIELD_SDIGIT;
-
- uint8_t i, digitCount;
- uint32_t remainder, digit, divider;
+ while( ident[localId].size[i] && (i < 4))
+ {
+ bool isNegative = false;
+ if (isSigned) {
+ int32_t value = ((input_u)ident[localId].input[i]).int32;
+ if (value < 0) {
+ isNegative = true;
+ }
+ remainder = abs(value);
+ } else {
+ remainder = ident[localId].input[i];
+ }
+ divider = 1;
- i = 0;
- while( ident[id].size[i] && (i < 4))
- {
- bool isNegative = false;
- if (isSigned) {
- int32_t value = ((input_u)ident[id].input[i]).int32;
- if (value < 0) {
- isNegative = true;
- }
- remainder = abs(value);
- } else {
- remainder = ident[id].input[i];
- }
- divider = 1;
+ for(digitCount = 1; digitCount < ident[localId].size[i]; digitCount++)
+ divider *= 10;
- for(digitCount = 1; digitCount < ident[id].size[i]; digitCount++)
- divider *= 10;
+ for(digitCount = 0; digitCount < ident[localId].size[i]; digitCount++)
+ {
+ if (isSigned && digitCount == 0) {
+ ident[localId].newText[ident[localId].begin[i] + digitCount] = isNegative ? '-' : '+';
+ } else {
+ digit = remainder / divider;
+ remainder -= digit * divider;
+ if(digit < 10)
+ ident[localId].newText[ident[localId].begin[i] + digitCount] = digit + '0';
+ else
+ ident[localId].newText[ident[localId].begin[i] + digitCount] = 'x';
+ }
- for(digitCount = 0; digitCount < ident[id].size[i]; digitCount++)
- {
- if (isSigned && digitCount == 0) {
- ident[id].newText[ident[id].begin[i] + digitCount] = isNegative ? '-' : '+';
- } else {
- digit = remainder / divider;
- remainder -= digit * divider;
- if(digit < 10)
- ident[id].newText[ident[id].begin[i] + digitCount] = digit + '0';
- else
- ident[id].newText[ident[id].begin[i] + digitCount] = 'x';
- }
+ divider /= 10;
+ }
+ i++;
+ }
+}
- divider /= 10;
- }
- i++;
- }
+void create_newText_for_actual_Id(void)
+{
+ create_newText_for_Id(actualId);
}
@@ -1306,18 +1320,25 @@
}
+void write_content_of_Id(int8_t localId)
+{
+ write_content( ident[localId].coord[0], ident[localId].coord[1], ident[localId].coord[2], ident[localId].fontUsed, ident[localId].newText, (CLUT_MenuEditField0 + localId));
+}
void write_content_of_actual_Id(void)
{
- write_content( ident[id].coord[0], ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, ident[id].newText, (CLUT_MenuEditField0 + id));
+ write_content_of_Id(actualId);
}
+void clean_content_of_Id(int8_t localId)
+{
+ clean_content( ident[localId].coord[0], ident[localId].coord[1], ident[localId].coord[2], ident[localId].fontUsed);
+}
void clean_content_of_actual_Id(void)
{
- clean_content( ident[id].coord[0], ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed);
+ clean_content_of_Id(actualId);
}
-
void write_field_udigit_and_2digit(uint8_t subtype, uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint32_t int1, uint32_t int2, uint32_t int3, uint32_t int4)
{
if(id >= 9)
@@ -1375,13 +1396,13 @@
else
change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditInfo);
- create_newText_for_actual_Id();
+ create_newText_for_Id(id);
if(editID == 0)
- write_content_without_Id();
+ write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop)
idLast = id;
id++;
@@ -1458,13 +1479,13 @@
change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
- create_newText_for_actual_Id();
+ create_newText_for_Id(id);
if(editID == 0)
- write_content_without_Id();
+ write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop)
idLast = id;
id++;
@@ -1496,7 +1517,7 @@
write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop)
idLast = id;
id++;
@@ -1534,7 +1555,7 @@
write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop)
idLast = id;
id++;
@@ -1560,7 +1581,7 @@
if(editID == 0) write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop) idLast = id;
id++;
}
@@ -1619,7 +1640,7 @@
write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop)
idLast = id;
id++;
@@ -1652,7 +1673,7 @@
write_content_without_Id();
else
{
- write_content_of_actual_Id();
+ write_content_of_Id(id);
if(!tME_stop)
idLast = id;
id++;
@@ -1673,12 +1694,13 @@
if(evidLast >= 9)
return;
+#if 0
/* set cursor to first field */
if(evidLast < 0)
{
startMenuEditFieldSelect();
}
-
+#endif
event[evid].callerID = inputEventID;
event[evid].pEventFunction = inputFunctionCall;
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEditCustom.c
--- a/Discovery/Src/tMenuEditCustom.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEditCustom.c Wed Aug 14 16:44:46 2024 +0200
@@ -57,12 +57,14 @@
void openEdit_MotionCtrl(void);
void openEdit_ViewPort(void);
void refresh_Customviews(void);
+void setMenuContentStructure();
char customview_TXT2BYTE_helper(uint8_t customViewId);
char customviewBF_TXT2BYTE_helper(uint8_t customViewId);
/* Announced function prototypes -----------------------------------------------*/
uint8_t OnAction_CViewTimeout (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_CViewStandard (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_CViewStandardBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
+uint8_t OnAction_CViewAutofocusBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_CornerTimeout (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_CornerStandard(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_CViewPortCalib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -115,6 +117,16 @@
text[6] = 0;
write_label_var( 30, 700, ME_Y_LINE3, &FontT48, text);
+ /* Bigfont autofocus selector */
+ textpointer = 0;
+ text[textpointer++] = TXT_2BYTE;
+ text[textpointer++] = TXT2BYTE_ExtraDisplay;
+ textpointer += snprintf(&text[textpointer],20," %c%c",TXT_2BYTE, TXT2BYTE_Autofocus);
+ write_label_var( 30, 700, ME_Y_LINE4, &FontT48, text);
+
+ tMenuEdit_refresh_field(StMCustom1_CViewAutoFocusBF);
+
+
// field corner return
textpointer = 0;
text[textpointer++] = TXT_2BYTE;
@@ -377,14 +389,14 @@
write_field_button(StMCustom1_CViewTimeout, 400, 700, ME_Y_LINE1, &FontT48, "");
write_field_button(StMCustom1_CViewStandard, 400, 700, ME_Y_LINE2, &FontT48, "");
write_field_button(StMCustom1_CViewStandardBF, 400, 700, ME_Y_LINE3, &FontT48, "");
-
+ write_field_on_off(StMCustom1_CViewAutoFocusBF, 650, 700, ME_Y_LINE4, &FontT48, "", settingsGetPointer()->cvAutofocus);
write_field_button(StMCustom1_CornerTimeout, 400, 700, ME_Y_LINE5, &FontT48, "");
write_field_button(StMCustom1_CornerStandard, 400, 700, ME_Y_LINE6, &FontT48, "");
setEvent(StMCustom1_CViewTimeout, (uint32_t)OnAction_CViewTimeout);
setEvent(StMCustom1_CViewStandard, (uint32_t)OnAction_CViewStandard);
setEvent(StMCustom1_CViewStandardBF, (uint32_t)OnAction_CViewStandardBF);
-
+ setEvent(StMCustom1_CViewAutoFocusBF, (uint32_t)OnAction_CViewAutofocusBF);
setEvent(StMCustom1_CornerTimeout, (uint32_t)OnAction_CornerTimeout);
setEvent(StMCustom1_CornerStandard, (uint32_t)OnAction_CornerStandard);
}
@@ -522,6 +534,9 @@
text = TXT2BYTE_Profile;
break;
#endif
+ case CVIEW_T3_Temperature:
+ text = TXT2BYTE_AmbientTemperature;
+ break;
case CVIEW_T3_GasList:
text = TXT2BYTE_Gaslist;
break;
@@ -646,6 +661,20 @@
return UPDATE_DIVESETTINGS;
}
+uint8_t OnAction_CViewAutofocusBF(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+{
+ SSettings *pSettings = settingsGetPointer();
+ if(pSettings->cvAutofocus)
+ {
+ pSettings->cvAutofocus = 0;
+ }
+ else
+ {
+ pSettings->cvAutofocus = 1;
+ }
+ tMenuEdit_set_on_off(editId, pSettings->cvAutofocus);
+ return UPDATE_DIVESETTINGS;
+}
uint8_t OnAction_CornerTimeout(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
@@ -733,11 +762,20 @@
uint8_t OnAction_Customview_NextPage(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
+ resetMenuContentStructure();
customviewsSubpage++;
+
if(customviewsSubpage == customviewsSubpageMax)
{
customviewsSubpage = 0;
+ setMenuContentStructure();
+ tMenuEdit_select(StMCustom3_CViewSelection6);
}
+ else
+ {
+ setMenuContentStructure();
+ }
+
CustomviewDivemode_refresh();
return UPDATE_DIVESETTINGS;
}
@@ -828,45 +866,39 @@
return UPDATE_DIVESETTINGS;
}
-void openEdit_CustomviewDivemode(const uint8_t* pcv_changelist)
+void setMenuContentStructure()
{
-
- SSettings *pSettings = settingsGetPointer();
char text[MAX_PAGE_TEXTSIZE];
uint8_t textPointer = 0;
uint32_t id;
uint8_t i;
-
- resetMenuEdit(CLUT_MenuPageCustomView);
- customviewsSubpageMax = (tHome_getNumberOfAvailableCVs(pcv_changelist) / CV_PER_PAGE) + 1;
+ uint8_t endID = CVIEW_END;
+ SSettings *pSettings = settingsGetPointer();
- if(pcv_curchangelist != pcv_changelist) /* new selection base? => reset page index */
- {
- customviewsSubpage = 0;
- }
- pcv_curchangelist = pcv_changelist;
-
- CustomviewDivemode_refresh(pcv_changelist);
+ if(pcv_curchangelist == cv_changelist_BS)
+ {
+ endID = CVIEW_T3_END;
+ }
- for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */
- {
- textPointer = 0;
- id = pcv_changelist[customviewsSubpage * 5 + i];
- if((id == CVIEW_END) || (id == CVIEW_T3_END)) /* last list item? */
- {
- break;
- }
- else
- {
- if(pcv_changelist == cv_changelist)
- {
- text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_configuration,id);
- }
- else
- {
- text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_config_BigScreen,id);
- }
+ for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */
+ {
+ textPointer = 0;
+ id = pcv_curchangelist[customviewsSubpage * 5 + i];
+ if(id == endID) /* last list item? */
+ {
+ break;
+ }
+ else
+ {
+ if(pcv_curchangelist == cv_changelist)
+ {
+ text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_configuration,id);
+ }
+ else
+ {
+ text[textPointer++] = '\006' - CHECK_BIT_THOME(pSettings->cv_config_BigScreen,id);
+ }
text[textPointer++] = ' ';
textPointer += snprintf(&text[textPointer], 60, "%c%c\n\r", TXT_2BYTE, customview_TXT2BYTE_helper(id));
@@ -885,45 +917,46 @@
default:
break;
}
- }
- }
- for(;i<5;i++) /* clear empty lines in case menu shows less than 5 entries */
- {
- switch(i)
- {
- case 0: write_label_var( 30, 800, ME_Y_LINE1, &FontT48, "");
- break;
- case 1: write_label_var( 30, 800, ME_Y_LINE2, &FontT48, "");
- break;
- case 2: write_label_var( 30, 800, ME_Y_LINE3, &FontT48, "");
- break;
- case 3: write_label_var( 30, 800, ME_Y_LINE4, &FontT48, "");
- break;
- case 4: write_label_var( 30, 800, ME_Y_LINE5, &FontT48, "");
- break;
- default:
- break;
- };
- }
- if(customviewsSubpageMax != 1)
- {
- textPointer = 0;
- text[textPointer++] = TXT_2BYTE;
- text[textPointer++] = TXT2BYTE_ButtonNext;
- text[textPointer] = 0;
- write_field_button(StMCustom3_CViewSelection6, 30, 800, ME_Y_LINE6, &FontT48, text);
- }
+ }
+ }
+ for(;i<5;i++) /* clear empty lines in case menu shows less than 5 entries */
+ {
+ switch(i)
+ {
+ case 0: write_label_var( 30, 800, ME_Y_LINE1, &FontT48, "");
+ break;
+ case 1: write_label_var( 30, 800, ME_Y_LINE2, &FontT48, "");
+ break;
+ case 2: write_label_var( 30, 800, ME_Y_LINE3, &FontT48, "");
+ break;
+ case 3: write_label_var( 30, 800, ME_Y_LINE4, &FontT48, "");
+ break;
+ case 4: write_label_var( 30, 800, ME_Y_LINE5, &FontT48, "");
+ break;
+ default:
+ break;
+ };
+ }
- /* because of the ID handling inside of the functions, all buttons needs to be assigned before the events may be set => have the same loop twice */
- for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */
- {
- id = pcv_changelist[customviewsSubpage * 5 + i];
- if((id == CVIEW_END) || (id == CVIEW_T3_END)) /* last list item? */
- {
- break;
- }
- else
- {
+ if(customviewsSubpageMax != 1)
+ {
+ textPointer = 0;
+ text[textPointer++] = TXT_2BYTE;
+ text[textPointer++] = TXT2BYTE_ButtonNext;
+ text[textPointer] = 0;
+ write_field_button(StMCustom3_CViewSelection6, 30, 800, ME_Y_LINE6, &FontT48, text);
+ }
+
+ /* because of the ID handling inside of the functions, all buttons needs to be assigned before the events may be set => have the same loop twice */
+ for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */
+ {
+ id = pcv_curchangelist[customviewsSubpage * 5 + i];
+ if(id == endID) /* last list item? */
+ {
+ break;
+ }
+ else
+ {
switch(i)
{
case 0: setEvent(StMCustom3_CViewSelection1, (uint32_t)OnAction_Customview_Toggle);
@@ -941,14 +974,27 @@
break;
}
- }
- }
- if(customviewsSubpageMax != 1)
- {
- setEvent(StMCustom3_CViewSelection6,(uint32_t)OnAction_Customview_NextPage);
- }
+ }
+ }
+ if(customviewsSubpageMax != 1)
+ {
+ setEvent(StMCustom3_CViewSelection6,(uint32_t)OnAction_Customview_NextPage);
+ }
+}
+void openEdit_CustomviewDivemode(const uint8_t* pcv_changelist)
+{
+ resetMenuEdit(CLUT_MenuPageCustomView);
+ customviewsSubpageMax = (tHome_getNumberOfAvailableCVs(pcv_changelist) / CV_PER_PAGE) + 1;
- write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
+ if(pcv_curchangelist != pcv_changelist) /* new selection base? => reset page index */
+ {
+ customviewsSubpage = 0;
+ }
+ pcv_curchangelist = pcv_changelist;
+
+ setMenuContentStructure();
+
+ write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
}
void openEdit_CustomviewDivemodeMenu(uint8_t line)
@@ -1004,6 +1050,12 @@
uint32_t id;
uint8_t i;
+ uint8_t endID = CVIEW_END;
+
+ if(pcv_curchangelist == cv_changelist_BS)
+ {
+ endID = CVIEW_T3_END;
+ }
text[textPointer++] = '\001';
text[textPointer++] = TXT_2BYTE;
@@ -1018,7 +1070,7 @@
{
textPointer = 0;
id = pcv_curchangelist[customviewsSubpage * 5 + i];
- if((id == CVIEW_END) || (id == CVIEW_T3_END)) /* last list item? */
+ if(id == endID) /* last list item? */
{
break;
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEditGasOC.c
--- a/Discovery/Src/tMenuEditGasOC.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEditGasOC.c Wed Aug 14 16:44:46 2024 +0200
@@ -66,6 +66,7 @@
uint8_t OnAction_GasType (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_ChangeDepth (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_SetToMOD (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
+uint8_t OnAction_CalcDeco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_BottleSize (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_First (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -204,11 +205,8 @@
return;
}
#endif
- for(int i=0;i<(1+ (2*NUM_GASES));i++)
- editGasPage.pGasLine[i].note.ub.first = 0;
editGasPage.pGasLine[editGasPage.gasID].note.ub.active = 1;
- editGasPage.pGasLine[editGasPage.gasID].note.ub.first = 1;
setActualGas_DM(&stateUsedWrite->lifeData,editGasPage.gasID,setpoint);
}
@@ -385,7 +383,7 @@
/* surface mode */
void openEdit_Gas(uint8_t line, uint8_t ccr)
{
- uint8_t gasID, oxygen, helium, depthDeco, active, first, depthMOD, deco, travel, inactive, off;//, bottleSizeLiter;
+ uint8_t gasID, oxygen, helium, depthDeco, active, first, depthMOD, deco, travel, inactive, off, decocalc;//, bottleSizeLiter;
char text[32];
char textMOD[32];
@@ -424,6 +422,7 @@
deco = editGasPage.pGasLine[gasID].note.ub.deco;
travel = editGasPage.pGasLine[gasID].note.ub.travel;
off = editGasPage.pGasLine[gasID].note.ub.off;
+ decocalc = editGasPage.pGasLine[gasID].note.ub.decocalc;
//bottleSizeLiter = editGasPage.pGasLine[gasID].bottle_size_liter;
if(active)
@@ -480,11 +479,19 @@
write_field_button(StMOG_GasType, 20, 710, ME_Y_LINE2, &FontT48, text);
- if(deco)
+ if((deco) || (travel && ccr))
{
text[0] = TXT_ChangeDepth;
text[1] = ' ';
- text[2] = TXT_Deco;
+
+ if(deco)
+ {
+ text[2] = TXT_Deco;
+ }
+ else
+ {
+ text[2] = TXT_Travel;
+ }
text[3] = 0;
write_label_var( 20 ,800, ME_Y_LINE3, &FontT48, text);
@@ -501,6 +508,16 @@
text[txtptr++] = TXT2BYTE_SetToMOD;
text[txtptr++] = 0;
write_field_button(StMOG_SetToMOD, 20, 710, ME_Y_LINE4, &FontT48,text);
+
+ if(deco)
+ {
+ txtptr = 0;
+ text[txtptr++] = TXT_2BYTE;
+ text[txtptr++] = TXT2BYTE_CalculateDeco;
+ text[txtptr++] = 0;
+
+ write_field_on_off(StMOG_CalcDeco, 20, 710, ME_Y_LINE5, &FontT48, text, decocalc);
+ }
}
else
{
@@ -547,11 +564,15 @@
setEvent(StMOG_Mix, (uint32_t)OnAction_Mix);
setEvent(StMOG_GasType, (uint32_t)OnAction_GasType);
- if(deco)
+ if((deco) || (travel && ccr))
{
setEvent(StMOG_ChangeDepth, (uint32_t)OnAction_ChangeDepth);
setEvent(StMOG_SetToMOD, (uint32_t)OnAction_SetToMOD);
}
+ if(deco)
+ {
+ setEvent(StMOG_CalcDeco, (uint32_t)OnAction_CalcDeco);
+ }
/*
setEvent(StMOG_Bottle, (uint32_t)OnAction_BottleSize);
*/
@@ -1091,12 +1112,33 @@
{
uint8_t newChangeDepth = editGasPage.mod;
- editGasPage.pGasLine[editGasPage.gasID].depth_meter = newChangeDepth;
+ if(editGasPage.pGasLine[editGasPage.gasID].note.ub.travel)
+ {
+ editGasPage.pGasLine[editGasPage.gasID].depth_meter_travel= newChangeDepth;
+ }
+ else
+ {
+ editGasPage.pGasLine[editGasPage.gasID].depth_meter = newChangeDepth;
+ }
tMenuEdit_newInput(StMOG_ChangeDepth, unit_depth_integer(newChangeDepth), 0, 0, 0);
return UPDATE_DIVESETTINGS;
}
+uint8_t OnAction_CalcDeco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+{
+ if(editGasPage.pGasLine[editGasPage.gasID].note.ub.decocalc)
+ {
+ editGasPage.pGasLine[editGasPage.gasID].note.ub.decocalc = 0;
+ }
+ else
+ {
+ editGasPage.pGasLine[editGasPage.gasID].note.ub.decocalc = 1;
+ }
+ tMenuEdit_set_on_off(editId, editGasPage.pGasLine[editGasPage.gasID].note.ub.decocalc);
+
+ return UPDATE_DIVESETTINGS;
+}
uint8_t OnAction_ChangeDepth(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
@@ -1117,7 +1159,15 @@
}
if(newDepth > 255)
newDepth = 255;
- editGasPage.pGasLine[editGasPage.gasID].depth_meter = newDepth;
+
+ if(editGasPage.pGasLine[editGasPage.gasID].note.ub.travel)
+ {
+ editGasPage.pGasLine[editGasPage.gasID].depth_meter_travel = newDepth;
+ }
+ else
+ {
+ editGasPage.pGasLine[editGasPage.gasID].depth_meter = newDepth;
+ }
tMenuEdit_newInput(editId, unit_depth_integer(newDepth), 0, 0, 0);
return UPDATE_DIVESETTINGS;
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEditHardware.c
--- a/Discovery/Src/tMenuEditHardware.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEditHardware.c Wed Aug 14 16:44:46 2024 +0200
@@ -285,6 +285,10 @@
char text[10];
uint8_t textIndex = 0;
+
+ set_globalState(StMHARD2_Compass);
+ resetMenuEdit(CLUT_MenuPageHardware);
+
text[textIndex++] = '\001';
text[textIndex++] = TXT_2BYTE;
text[textIndex++] = TXT2BYTE_Compass;
@@ -320,6 +324,8 @@
setEvent(StMHARD2_Compass_Inertia, (uint32_t)OnAction_InertiaLevel);
setEvent(StMHARD2_Compass_Declination, (uint32_t)OnAction_CompassDeclination);
+ tMenuEdit_select(StMHARD2_Compass_SetCourse);
+
write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
}
@@ -389,9 +395,9 @@
{
memcpy(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT);
pSettings->ppo2sensors_deactivated = 0x0; /* deactivation will be done by openEditO2Sensor if need */
-
+ pSettings->co2_sensor_active = 0;
pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC;
- for(index = 0; index < 3; index++)
+ for(index = 0; index < EXT_INTERFACE_SENSOR_CNT - 1; index++)
{
switch(pSettings->ext_sensor_map[index])
{
@@ -415,8 +421,12 @@
pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_DIGITAL;
}
break;
+ case SENSOR_CO2:
+ case SENSOR_CO2M: pSettings->co2_sensor_active = 1;
+ break;
#ifdef ENABLE_SENTINEL_MODE
- case SENSOR_SENTINEL: pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_SENTINEL;
+ case SENSOR_SENTINEL:
+ case SENSOR_SENTINELM: pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_SENTINEL;
break;
#endif
default:
@@ -462,7 +472,8 @@
case SENSOR_CO2M: strSensorId[3] = 'C';
strSensorId[4] = 'O';
break;
- case SENSOR_SENTINEL: strSensorId[3] = 'S';
+ case SENSOR_SENTINEL:
+ case SENSOR_SENTINELM: strSensorId[3] = 'S';
strSensorId[4] = 'e';
break;
default:
@@ -524,15 +535,15 @@
write_label_var( 30, 340, ME_Y_LINE6, &FontT48, strSensorId);
}
- if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_TYPE_O2_END))
+ if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX))
{
tMenuEdit_refresh_field(StMHARD3_O2_Sensor1);
}
- if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_TYPE_O2_END))
+ if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX))
{
tMenuEdit_refresh_field(StMHARD3_O2_Sensor2);
}
- if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_TYPE_O2_END))
+ if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX))
{
tMenuEdit_refresh_field(StMHARD3_O2_Sensor3);
}
@@ -570,7 +581,7 @@
}
}
- if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END)))
+ if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_MUX)))
{
pSettings->ppo2sensors_deactivated |= 1;
}
@@ -578,7 +589,7 @@
{
write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]);
}
- if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END)))
+ if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_MUX)))
{
pSettings->ppo2sensors_deactivated |= 2;
}
@@ -586,7 +597,7 @@
{
write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]);
}
- if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END)))
+ if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_MUX)))
{
pSettings->ppo2sensors_deactivated |= 4;
}
@@ -627,15 +638,15 @@
write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text);
}
- if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_TYPE_O2_END))
+ if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX))
{
setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1);
}
- if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_TYPE_O2_END))
+ if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX))
{
setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2);
}
- if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_TYPE_O2_END))
+ if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX))
{
setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3);
}
@@ -661,7 +672,7 @@
{
const SDiveState *pStateReal = stateRealGetPointer();
- if(pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_DIGO2M)
+ if((pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_CO2M))
{
return EXIT_TO_INFO_SENSOR;
}
@@ -687,7 +698,7 @@
{
const SDiveState *pStateReal = stateRealGetPointer();
- if(pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_DIGO2M)
+ if((pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_CO2M))
{
return EXIT_TO_INFO_SENSOR;
}
@@ -712,7 +723,7 @@
{
const SDiveState *pStateReal = stateRealGetPointer();
- if(pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_DIGO2M)
+ if((pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_CO2M))
{
return EXIT_TO_INFO_SENSOR;
}
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEditPlanner.c
--- a/Discovery/Src/tMenuEditPlanner.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEditPlanner.c Wed Aug 14 16:44:46 2024 +0200
@@ -449,7 +449,8 @@
for(int i = 1; i < BUEHLMANN_STRUCT_MAX_GASES; i++)
{
- if(stateSimGetPointer()->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ if((stateSimGetPointer()->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ || (stateSimGetPointer()->diveSettings.gas[stateSimGetPointer()->diveSettings.decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
break;
depthChange = stateSimGetPointer()->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero;
if(depthPrev <= depthChange)
@@ -464,7 +465,8 @@
for(int i = GasIdPrev + 1; i < BUEHLMANN_STRUCT_MAX_GASES; i++)
{
- if(stateSimGetPointer()->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ if((stateSimGetPointer()->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero == 0)
+ || (stateSimGetPointer()->diveSettings.gas[stateSimGetPointer()->diveSettings.decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
break;
depthChange = stateSimGetPointer()->diveSettings.decogaslist[i].change_during_ascent_depth_meter_otherwise_zero;
if((depthChange < depthPrev) && (depthChange >= depthNext))
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEditSystem.c
--- a/Discovery/Src/tMenuEditSystem.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEditSystem.c Wed Aug 14 16:44:46 2024 +0200
@@ -52,6 +52,7 @@
void openEdit_Design(void);
void openEdit_Information(void);
void openEdit_Reset(void);
+void openEdit_Maintenance(void);
//void openEdit_ShowDebugInfo(void);
//void openEdit_Salinity(void);
@@ -78,6 +79,7 @@
uint8_t OnAction_Exit (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_Confirm (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
+uint8_t OnAction_Maintenance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_RebootRTE (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_ResetDeco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_ResetAll (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -87,6 +89,7 @@
uint8_t OnAction_LogbookOffset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_SetFactoryDefaults(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
uint8_t OnAction_SetBatteryCharge(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
+uint8_t OnAction_AdjustSurfacePressure (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
#ifdef ENABLE_ANALYSE_SAMPLES
uint8_t OnAction_RecoverSampleIdx(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
#endif
@@ -835,6 +838,7 @@
write_field_button(StMSYS4_Info, 30, 800, ME_Y_LINE6, &FontT48, text);
setEvent(StMSYS4_Info, (uint32_t)OnAction_Information);
+ tMenuEdit_select(StMSYS4_Info);
}
@@ -1075,7 +1079,7 @@
setEvent(StMSYS5_ResetAll, (uint32_t)OnAction_Confirm);
setEvent(StMSYS5_ResetDeco, (uint32_t)OnAction_Confirm);
setEvent(StMSYS5_Reboot, (uint32_t)OnAction_Confirm);
- setEvent(StMSYS5_Maintenance, (uint32_t)OnAction_Confirm);
+ setEvent(StMSYS5_Maintenance, (uint32_t)OnAction_Maintenance);
#ifndef RESETLOGBLOCK
setEvent(StMSYS5_ResetLogbook, (uint32_t)OnAction_Confirm);
#else
@@ -1150,64 +1154,92 @@
setEvent(StMSYS5_Exit, (uint32_t)OnAction_Exit);
setEvent(editIdOfCaller, (uint32_t)OnAction_ResetLogbook);
break;
+ }
- case StMSYS5_Maintenance:
- case StMSYS5_SetBattCharge:
- case StMSYS5_SetSampleIndx:
+ write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
+}
+
+void openEdit_Maintenance(void)
+{
+ char text[32];
+ unsigned char index = 0;
+ SSettings *pSettings = settingsGetPointer();
+ SSensorDataDiveO2* pDiveO2Data = NULL;
+
+ resetMenuEdit(CLUT_MenuPageSystem);
+
+ text[0] = '\001';
+ text[1] = TXT_2BYTE;
+ text[2] = TXT2BYTE_Maintenance;
+ text[3] = 0;
+ write_topline(text);
+
+ text[0] = TXT_2BYTE;
+ text[1] = TXT2BYTE_SetFactoryDefaults;
+ text[2] = 0;
+ write_field_button(StMSYS5_SetFactoryBC, 30, 800, ME_Y_LINE1, &FontT48, text);
+
+
+ if(stateRealGetPointer()->lifeData.battery_charge <= 0)
+ {
text[0] = TXT_2BYTE;
- text[1] = TXT2BYTE_SetFactoryDefaults;
+ text[1] = TXT2BYTE_SetBatteryCharge;
text[2] = 0;
- write_field_button(StMSYS5_SetFactoryBC, 30, 800, ME_Y_LINE2, &FontT48, text);
+ snprintf(&text[2],10,": %u%%",pSettings->lastKnownBatteryPercentage);
+ write_field_button(StMSYS5_SetBattCharge, 30, 800, ME_Y_LINE2, &FontT48, text);
+ }
+
+ if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL))
+ {
+ for (index = 0; index < 3; index++)
+ {
+ if(pSettings->ext_sensor_map[index] == SENSOR_DIGO2M)
+ {
+ pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[index];
+ if(pDiveO2Data->pressure != 0)
+ {
+ snprintf(text,32,"%c%c (%1.3lf => %1.3f)\016\016Bar",TXT_2BYTE,TXT2BYTE_AdjustAmbPressure,(float)(pDiveO2Data->pressure/1000000.0),
+ stateRealGetPointer()->lifeData.pressure_surface_bar);
+
+ write_field_button(StMSYS5_AdjustSurfPres, 30, 800, ME_Y_LINE4, &FontT48, text);
+ }
+ break;
+ }
+ }
+ }
#ifdef ENABLE_ANALYSE_SAMPLES
- text[0] = TXT_2BYTE;
- text[1] = TXT2BYTE_SetSampleIndex;
- text[2] = 0;
- write_field_button(StMSYS5_SetSampleIndx, 30, 800, ME_Y_LINE3, &FontT48, text);
+ text[0] = TXT_2BYTE;
+ text[1] = TXT2BYTE_SetSampleIndex;
+ text[2] = 0;
+ write_field_button(StMSYS5_SetSampleIndx, 30, 800, ME_Y_LINE4, &FontT48, text);
+#endif
+
+ setEvent(StMSYS5_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults);
+ if(stateRealGetPointer()->lifeData.battery_charge <= 0)
+ {
+ setEvent(StMSYS5_SetBattCharge, (uint32_t)OnAction_SetBatteryCharge);
+ }
+ if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL))
+ {
+ if(pDiveO2Data != NULL)
+ {
+ setEvent(StMSYS5_AdjustSurfPres, (uint32_t)OnAction_AdjustSurfacePressure);
+ }
+ }
+#ifdef ENABLE_ANALYSE_SAMPLES
+ setEvent(StMSYS5_SetSampleIndx, (uint32_t)OnAction_RecoverSampleIdx);
#endif
- if(stateRealGetPointer()->lifeData.battery_charge <= 0)
- {
- text[0] = TXT_2BYTE;
- text[1] = TXT2BYTE_SetBatteryCharge;
- text[2] = 0;
- snprintf(&text[2],10,": %u%%",settingsGetPointer()->lastKnownBatteryPercentage);
-#ifdef ENABLE_ANALYSE_SAMPLES
- write_field_button(StMSYS5_SetBattCharge, 30, 800, ME_Y_LINE4, &FontT48, text);
-#else
- write_field_button(StMSYS5_SetBattCharge, 30, 800, ME_Y_LINE3, &FontT48, text);
-#endif
+ text[0] = TXT_2BYTE;
+ text[1] = TXT2BYTE_WarnBatteryLow;
+ text[2] = 0;
+ snprintf(&text[2],10,": %01.2fV",stateRealGetPointer()->lifeData.battery_voltage);
+ write_label_var( 30, 800, ME_Y_LINE5, &FontT42, text);
- setEvent(StMSYS5_Exit, (uint32_t)OnAction_Exit);
- setEvent(StMSYS5_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults);
-#ifdef ENABLE_ANALYSE_SAMPLES
- setEvent(StMSYS5_SetSampleIndx, (uint32_t)OnAction_RecoverSampleIdx);
-#endif
- setEvent(StMSYS5_SetBattCharge, (uint32_t)OnAction_SetBatteryCharge);
- }
- else
- {
- setEvent(StMSYS5_Exit, (uint32_t)OnAction_Exit);
- setEvent(StMSYS5_SetFactoryBC, (uint32_t)OnAction_SetFactoryDefaults);
-#ifdef ENABLE_ANALYSE_SAMPLES
- setEvent(StMSYS5_SetSampleIndx, (uint32_t)OnAction_RecoverSampleIdx);
-#endif
- }
-// write_field_button(StMSYS5_ScreenTest, 30, 800, ME_Y_LINE3, &FontT48, "Screen Test");
-// setEvent(StMSYS5_ScreenTest, (uint32_t)OnAction_ScreenTest);
-
- text[0] = TXT_2BYTE;
- text[1] = TXT2BYTE_WarnBatteryLow;
- text[2] = 0;
- snprintf(&text[2],10,": %01.2fV",stateRealGetPointer()->lifeData.battery_voltage);
- write_label_var( 30, 800, ME_Y_LINE5, &FontT42, text);
-
- snprintf(&text[0],30,"Code: %X",getLicence());
- write_label_var( 30, 800, ME_Y_LINE6, &FontT42, text);
- break;
-
- }
+ snprintf(&text[0],30,"Code: %X",getLicence());
+ write_label_var( 30, 800, ME_Y_LINE6, &FontT42, text);
write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
}
@@ -1263,6 +1295,12 @@
return UNSPECIFIC_RETURN;
}
+uint8_t OnAction_Maintenance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+{
+ openEdit_Maintenance();
+ return UNSPECIFIC_RETURN;
+}
+
uint8_t OnAction_RebootRTE (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
MX_SmallCPU_Reset_To_Standard();
@@ -1335,6 +1373,43 @@
return EXIT_TO_MENU;
}
+uint8_t OnAction_AdjustSurfacePressure (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+{
+ SSensorDataDiveO2* pDiveO2Data;
+ const SDiveState* pDiveState = stateRealGetPointer();
+ SSettings* pSettings = settingsGetPointer();
+ uint8_t index = 0;
+ int8_t newOffset = 0;
+
+ char text[32];
+
+ float orgpressure_surface;
+
+ for (index = 0; index < 3; index++)
+ {
+ if(settingsGetPointer()->ext_sensor_map[index] == SENSOR_DIGO2M)
+ {
+ pDiveO2Data = (SSensorDataDiveO2*)stateRealGetPointer()->lifeData.extIf_sensor_data[index];
+ orgpressure_surface = pDiveState->lifeData.pressure_surface_bar - (settingsGetPointer()->offsetPressure_mbar / 1000.0);
+ newOffset = ((pDiveO2Data->pressure/1000) - (orgpressure_surface * 1000));
+
+ if((pDiveState->lifeData.pressure_surface_bar * 1000 + newOffset) != (pDiveO2Data->pressure/1000)) /* there might be a rounding difference => compensate */
+ {
+ newOffset += (pDiveO2Data->pressure/1000) - (pDiveState->lifeData.pressure_surface_bar * 1000 + newOffset);
+ }
+
+ pSettings->offsetPressure_mbar = newOffset;
+ snprintf(text,32,"%c%c (%1.3lf => %1.3f)\016\016Bar",TXT_2BYTE,TXT2BYTE_AdjustAmbPressure,(float)(pDiveO2Data->pressure/1000000.0),
+ pDiveState->lifeData.pressure_surface_bar + pSettings->offsetPressure_mbar / 1000.0);
+ tMenuEdit_newButtonText(StMSYS5_AdjustSurfPres,text);
+ break;
+ }
+ }
+
+ return UNSPECIFIC_RETURN;
+}
+
+
#ifdef SCREENTEST
uint8_t OnAction_ScreenTest (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuEditXtra.c
--- a/Discovery/Src/tMenuEditXtra.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuEditXtra.c Wed Aug 14 16:44:46 2024 +0200
@@ -38,6 +38,7 @@
#include "data_exchange_main.h"
#include "motion.h"
#include "configuration.h"
+#include "tInfoPreDive.h"
/* Private function prototypes -----------------------------------------------*/
@@ -54,9 +55,6 @@
#ifdef ENABLE_PSCR_MODE
static void openEdit_PSCR(void);
#endif
-#ifdef ENABLE_CO2_SUPPORT
-static void openEdit_CO2Sensor(void);
-#endif
/* Announced function prototypes -----------------------------------------------*/
uint8_t OnAction_CompassHeading (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -69,11 +67,6 @@
static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
#endif
-#ifdef ENABLE_CO2_SUPPORT
-static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
-static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
-#endif
-
/* Exported functions --------------------------------------------------------*/
@@ -115,11 +108,6 @@
}
else /* surface mode */
{
- if((settingsGetPointer()->dive_mode != DIVEMODE_PSCR) && (line > 3)) /* PSCR items are only optional */
- {
- line = 6;
- }
-
switch(line)
{
case 1: openEdit_CCRModeSensorOrFixedSP();
@@ -132,10 +120,8 @@
case 4: openEdit_PSCR();
break;
#endif
-#ifdef ENABLE_CO2_SUPPORT
- case 6: openEdit_CO2Sensor();
+ case 5: openInfo_PreDive();
break;
-#endif
default:
break;
}
@@ -321,42 +307,6 @@
}
-#ifdef ENABLE_CO2_SUPPORT
-static void openEdit_CO2Sensor()
-{
- char text[32];
-
- resetMenuEdit(CLUT_MenuPageXtra);
-
- snprintf(text,32,"\001%c",TXT_CO2Sensor);
- write_topline(text);
-
- refresh_CO2Data();
- if(settingsGetPointer()->co2_sensor_active)
- {
- text[0] = '\005';
- }
- else
- {
- text[0] = '\006';
- }
- text[0] = TXT_CO2Sensor;
- text[1] = 0;
-
- write_field_on_off(StMXTRA_CO2_Sensor, 30, 95, ME_Y_LINE3, &FontT48, text, settingsGetPointer()->co2_sensor_active);
-
- text[0] = TXT_2BYTE;
- text[1] = TXT2BYTE_O2Calib;
- text[2] = 0;
- write_field_button(StMXTRA_CO2_Sensor_Calib,30, 800, ME_Y_LINE4, &FontT48, text);
-
- setEvent(StMXTRA_CO2_Sensor, (uint32_t)OnAction_CO2OnOff);
- setEvent(StMXTRA_CO2_Sensor_Calib, (uint32_t)OnAction_CO2Calib);
-
- write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
-}
-#endif
-
static uint8_t OnAction_CompassHeadingClear(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
{
@@ -443,23 +393,6 @@
}
-void refresh_CO2Data(void)
-{
- char text[32];
-
- snprintf(text,32,"\001%c",TXT_CO2Sensor);
- write_topline(text);
-
- snprintf(text,32,"CO2: %ld ppm",stateUsed->lifeData.CO2_data.CO2_ppm);
- write_label_var( 30, 800, ME_Y_LINE1, &FontT48, text);
-
- snprintf(text,32,"Signal: %d",stateUsed->lifeData.CO2_data.signalStrength);
- write_label_var( 30, 800, ME_Y_LINE2, &FontT48, text);
-
- tMenuEdit_refresh_field(StMXTRA_CO2_Sensor);
- tMenuEdit_refresh_field(StMXTRA_CO2_Sensor_Calib);
-}
-
void openEdit_CompassHeading(void)
{
drawCompassHeadingMenu(false);
@@ -684,26 +617,4 @@
}
#endif
-#ifdef ENABLE_CO2_SUPPORT
-static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
-{
- SSettings *pSettings = settingsGetPointer();
- if(pSettings->co2_sensor_active)
- {
- pSettings->co2_sensor_active = 0;
- tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,0);
- }
- else
- {
- pSettings->co2_sensor_active = 1;
- tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,1);
- }
- return UPDATE_DIVESETTINGS;
-}
-static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
-{
- DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB);
- return UPDATE_DIVESETTINGS;
-}
-#endif
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuHardware.c
--- a/Discovery/Src/tMenuHardware.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuHardware.c Wed Aug 14 16:44:46 2024 +0200
@@ -102,15 +102,14 @@
sensorStatusColor[0] = '\020';
sensorStatusColor[1] = '\020';
sensorStatusColor[2] = '\020';
- if(stateUsed->diveSettings.ppo2sensors_deactivated)
- {
- if(stateUsed->diveSettings.ppo2sensors_deactivated & 1)
+
+ if((stateUsed->diveSettings.ppo2sensors_deactivated & 1) || (data->ext_sensor_map[0] > SENSOR_DIGO2M))
sensorStatusColor[0] = '\031';
- if(stateUsed->diveSettings.ppo2sensors_deactivated & 2)
+ if((stateUsed->diveSettings.ppo2sensors_deactivated & 2) || (data->ext_sensor_map[1] > SENSOR_DIGO2M))
sensorStatusColor[1] = '\031';
- if(stateUsed->diveSettings.ppo2sensors_deactivated & 4)
+ if((stateUsed->diveSettings.ppo2sensors_deactivated & 4) || (data->ext_sensor_map[1] > SENSOR_DIGO2M))
sensorStatusColor[2] = '\031';
- }
+
textPointer += snprintf(&text[textPointer],20,"%c%01.1f %c%01.1f %c%01.1f\020"
,sensorStatusColor[0], stateUsed->lifeData.ppO2Sensor_bar[0]
,sensorStatusColor[1], stateUsed->lifeData.ppO2Sensor_bar[1]
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuSystem.c
--- a/Discovery/Src/tMenuSystem.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuSystem.c Wed Aug 14 16:44:46 2024 +0200
@@ -30,6 +30,7 @@
#include "tMenu.h"
#include "tMenuSystem.h"
#include "tHome.h" // for enum CUSTOMVIEWS and init_t7_compass()
+#include "t7.h"
static uint8_t customviewsSubpage = 0;
@@ -183,9 +184,21 @@
textPointer += 2;
}
- if (line == 0 || line == 2) {
- textPointer += snprintf(&text[textPointer], 21, "%c%c\t%u:%02u \016\016[m:ss]\017\n\r", TXT_2BYTE, TXT2BYTE_Timer, data->timerDurationS / 60, data->timerDurationS % 60);
- } else {
+ if (line == 0 || line == 2)
+ {
+ if(t7_customview_disabled(CVIEW_Timer))
+ {
+ text[textPointer++] = '\031'; /* change text color */
+ textPointer += snprintf(&text[textPointer], 21, "%c%c\t%u:%02u \016\016[m:ss]\017\n\r", TXT_2BYTE, TXT2BYTE_Timer, data->timerDurationS / 60, data->timerDurationS % 60);
+ disableLine(StMSYS_Timer);
+ text[textPointer++] = '\020'; /* restore text color */
+ }
+ else
+ {
+ textPointer += snprintf(&text[textPointer], 21, "%c%c\t%u:%02u \016\016[m:ss]\017\n\r", TXT_2BYTE, TXT2BYTE_Timer, data->timerDurationS / 60, data->timerDurationS % 60);
+ }
+ } else
+ {
textPointer += snprintf(&text[textPointer], 3, "\n\r");
}
@@ -303,6 +316,19 @@
return StMSYS;
}
+void tMSystem_checkLineStatus(void)
+{
+ uint8_t localLineMask = 0;
+ uint8_t lineMask = getLineMask(StMSYS);
+ if(t7_customview_disabled(CVIEW_Timer))
+ {
+ localLineMask |= 1 << 2;
+ }
+ if(lineMask != localLineMask)
+ {
+ updateMenu();
+ }
+}
/* Private functions ---------------------------------------------------------*/
diff -r f7318457df4d -r e373e90a48db Discovery/Src/tMenuXtra.c
--- a/Discovery/Src/tMenuXtra.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/tMenuXtra.c Wed Aug 14 16:44:46 2024 +0200
@@ -38,6 +38,7 @@
#include "simulation.h"
#include "configuration.h"
+
/* Exported functions --------------------------------------------------------*/
uint32_t tMXtra_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext)
@@ -51,6 +52,8 @@
SSettings *pSettings = settingsGetPointer();
+ resetLineMask(StMXTRA);
+
/* DIVE MODE */
if(actual_menu_content != MENU_SURFACE)
{
@@ -168,10 +171,12 @@
else
text[textPointer++] = '\006';
- if (!canDoFallback) {
+ if (!canDoFallback)
+ {
text[textPointer++] = '\020';
disableLine(StMXTRA_O2_Fallback);
- } else {
+ } else
+ {
enableLine(StMXTRA_O2_Fallback);
}
strcpy(&text[textPointer],"\n\r");
@@ -190,23 +195,66 @@
}
#ifdef ENABLE_PSCR_MODE
- if(pSettings->dive_mode == DIVEMODE_PSCR)
- {
- if((line == 0) || (line == 4))
- {
- textPointer += snprintf(&text[textPointer], 60,\
- "%c"
- ,TXT_PSClosedCircuit);
- }
- }
-#endif
-#ifdef ENABLE_CO2_SUPPORT
if((line == 0) || (line == 4))
{
- textPointer += snprintf(&text[textPointer], 60, "%c", TXT_CO2Sensor);
+ if(pSettings->dive_mode == DIVEMODE_PSCR)
+ {
+ textPointer += snprintf(&text[textPointer], 60, "%c",TXT_PSClosedCircuit);
+ enableLine(StMXTRA_PSCR_O2_Drop);
+ }
+ else
+ {
+ text[textPointer++] = '\031'; /* change text color */
+ textPointer += snprintf(&text[textPointer], 60,"%c",TXT_PSClosedCircuit);
+ text[textPointer++] = '\020'; /* restore text color */
+ disableLine(StMXTRA_PSCR_O2_Drop);
+ }
+ strcpy(&text[textPointer],"\n\r");
+ textPointer += 2;
}
#endif
+ if((line == 0) || (line == 5))
+ {
+ if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL))
+ {
+ textPointer += snprintf(&text[textPointer], 60,"%c",TXT_PreDive);
+ }
+ else
+ {
+ text[textPointer++] = '\031'; /* change text color */
+ textPointer += snprintf(&text[textPointer], 60,"%c",TXT_PreDive);
+ text[textPointer++] = '\020'; /* restore text color */
+ disableLine(StMXTRA_Predive_Check);
+ }
+ strcpy(&text[textPointer],"\n\r");
+ textPointer += 2;
+ }
}
return StMXTRA;
}
+void tMXtra_checkLineStatus(void)
+{
+ uint8_t localLineMask = 0;
+ uint8_t lineMask = getLineMask(StMXTRA);
+ SSettings *pSettings = settingsGetPointer();
+
+ if(pSettings->CCR_Mode != CCRMODE_Sensors)
+ {
+ localLineMask |= 1 << 2;
+ }
+ if(pSettings->dive_mode != DIVEMODE_PSCR)
+ {
+ localLineMask |= 1 << 4;
+ }
+ if((pSettings->ppo2sensors_source != O2_SENSOR_SOURCE_ANADIG) && (pSettings->ppo2sensors_source != O2_SENSOR_SOURCE_DIGITAL))
+ {
+ localLineMask |= 1 << 5;
+ }
+
+ if(lineMask != localLineMask)
+ {
+ updateMenu();
+ }
+}
+
diff -r f7318457df4d -r e373e90a48db Discovery/Src/text_multilanguage.c
--- a/Discovery/Src/text_multilanguage.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/text_multilanguage.c Wed Aug 14 16:44:46 2024 +0200
@@ -188,6 +188,11 @@
static uint8_t text_IT_CompassDeclination[] = "Ddeclinazione";
static uint8_t text_ES_CompassDeclination[] = "Declinación";
+static uint8_t text_EN_Autofocus[] = "Autofocus";
+static uint8_t text_DE_Autofocus[] = "Automatik";
+static uint8_t text_FR_Autofocus[] = "";
+static uint8_t text_IT_Autofocus[] = "";
+static uint8_t text_ES_Autofocus[] = "";
// Menu SYS1 and Customview header
static uint8_t text_EN_Compass[] = "Compass";
@@ -465,6 +470,12 @@
static uint8_t text_IT_PSClosedCircuit[] = "PSC circuit";
static uint8_t text_ES_PSClosedCircuit[] = "PSC circuit";
+static uint8_t text_EN_PreDive[] = "PreDive Check";
+static uint8_t text_DE_PreDive[] = "";
+static uint8_t text_FR_PreDive[] = "";
+static uint8_t text_IT_PreDive[] = "";
+static uint8_t text_ES_PreDive[] = "";
+
static uint8_t text_EN_ChargeHour[] = "Hour(s) till 100%";
static uint8_t text_DE_ChargeHour[] = "Stunde(n) bis 100%";
static uint8_t text_FR_ChargeHour[] = "";
@@ -637,6 +648,13 @@
static uint8_t text_ES_SetBatteryCharge[] = "Recalibrar nivel carga";
// Menu SYS2 sub
+static uint8_t text_EN_AdjustAmbPressure[] = "Adjust pressure";
+static uint8_t text_DE_AdjustAmbPressure[] = "Druckanpassung";
+static uint8_t text_FR_AdjustAmbPressure[] = "";
+static uint8_t text_IT_AdjustAmbPressure[] = "";
+static uint8_t text_ES_AdjustAmbPressure[] = "";
+
+// Menu SYS2 sub
static uint8_t text_EN_SetFactoryDefaults[] = "Store button factory defaults";
static uint8_t text_DE_SetFactoryDefaults[] = "Taster zurücksetzen";
static uint8_t text_FR_SetFactoryDefaults[] = "";
@@ -803,6 +821,19 @@
static uint8_t text_IT_Reset[] = "Ripristina";
static uint8_t text_ES_Reset[] = "Restaurar";
+static uint8_t text_EN_CounterLung[] = "Counterlung";
+static uint8_t text_DE_CounterLung[] = "Gegenlunge";
+static uint8_t text_FR_CounterLung[] = "";
+static uint8_t text_IT_CounterLung[] = "";
+static uint8_t text_ES_CounterLung[] = "";
+
+static uint8_t text_EN_Pressure[] = "Pressure";
+static uint8_t text_DE_Pressure[] = "Druck";
+static uint8_t text_FR_Pressure[] = "";
+static uint8_t text_IT_Pressure[] = "";
+static uint8_t text_ES_Pressure[] = "";
+
+
// Menu SIM
static uint8_t text_EN_Simulator[] = "Simulator";
static uint8_t text_DE_Simulator[] = "";
@@ -1975,6 +2006,7 @@
{(uint8_t)TXT_Apnoe, {text_EN_Apnoe, text_DE_Apnoe, text_FR_Apnoe, text_IT_Apnoe, text_ES_Apnoe}},
{(uint8_t)TXT_Gauge, {text_EN_Gauge, text_DE_Gauge, text_FR_Gauge, text_IT_Gauge, text_ES_Gauge}},
{(uint8_t)TXT_PSClosedCircuit, {text_EN_PSClosedCircuit, text_DE_PSClosedCircuit, text_FR_PSClosedCircuit, text_IT_PSClosedCircuit, text_ES_PSClosedCircuit}},
+ {(uint8_t)TXT_PreDive, {text_EN_PreDive, text_DE_PreDive, text_FR_PreDive, text_IT_PreDive, text_ES_PreDive}},
{(uint8_t)TXT_Sensor, {text_EN_Sensor, text_DE_Sensor, text_FR_Sensor, text_IT_Sensor, text_ES_Sensor}},
{(uint8_t)TXT_FixedSP, {text_EN_FixedSP, text_DE_FixedSP, text_FR_FixedSP, text_IT_FixedSP, text_ES_FixedSP}},
{(uint8_t)TXT_Decoparameters, {text_EN_Decoparameters, text_DE_Decoparameters, text_FR_Decoparameters, text_IT_Decoparameters, text_ES_Decoparameters}},
@@ -2049,6 +2081,7 @@
{(uint8_t)TXT2BYTE_CompassCalib, {text_EN_CompassCalib, text_DE_CompassCalib, text_FR_CompassCalib, text_IT_CompassCalib, text_ES_CompassCalib}},
{(uint8_t)TXT2BYTE_CompassInertia, {text_EN_CompassInertia, text_DE_CompassInertia, text_FR_CompassInertia, text_IT_CompassInertia, text_ES_CompassInertia}},
{(uint8_t)TXT2BYTE_CompassDeclination, {text_EN_CompassDeclination, text_DE_CompassDeclination, text_FR_CompassDeclination, text_IT_CompassDeclination, text_ES_CompassDeclination}},
+ {(uint8_t)TXT2BYTE_Autofocus , {text_EN_Autofocus, text_DE_Autofocus, text_FR_Autofocus, text_IT_Autofocus, text_ES_Autofocus}},
{(uint8_t)TXT2BYTE_UseSensor, {text_EN_UseSensor, text_DE_UseSensor, text_FR_UseSensor, text_IT_UseSensor, text_ES_UseSensor}},
{(uint8_t)TXT2BYTE_AutomaticSP, {text_EN_AutomaticSP, text_DE_AutomaticSP, text_FR_AutomaticSP, text_IT_AutomaticSP, text_ES_AutomaticSP}},
{(uint8_t)TXT2BYTE_WarnDecoMissed, {text_EN_WarnDecoMissed, text_DE_WarnDecoMissed, text_FR_WarnDecoMissed, text_IT_WarnDecoMissed, text_ES_WarnDecoMissed}},
@@ -2141,6 +2174,7 @@
{(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}},
+ {(uint8_t)TXT2BYTE_AdjustAmbPressure,{text_EN_AdjustAmbPressure, text_DE_AdjustAmbPressure, text_FR_AdjustAmbPressure, text_IT_AdjustAmbPressure, text_ES_AdjustAmbPressure}},
{(uint8_t)TXT2BYTE_SetFactoryDefaults,{text_EN_SetFactoryDefaults, text_DE_SetFactoryDefaults, text_FR_SetFactoryDefaults, text_IT_SetFactoryDefaults, text_ES_SetFactoryDefaults}},
{(uint8_t)TXT2BYTE_SetSampleIndex, {text_EN_SetSampleIndex, text_DE_SetSampleIndex, text_FR_SetSampleIndex, text_IT_SetSampleIndex, text_ES_SetSampleIndex}},
@@ -2192,6 +2226,9 @@
{(uint8_t)TXT2BYTE_Clear, {text_EN_Clear, text_DE_Clear, text_FR_Clear, text_IT_Clear, text_ES_Clear}},
{(uint8_t)TXT2BYTE_Reset, {text_EN_Reset, text_DE_Reset, text_FR_Reset, text_IT_Reset, text_ES_Reset}},
+ {(uint8_t)TXT2BYTE_CounterLung, {text_EN_CounterLung, text_DE_CounterLung, text_FR_CounterLung, text_IT_CounterLung, text_ES_CounterLung}},
+ {(uint8_t)TXT2BYTE_Pressure, {text_EN_Pressure, text_DE_Pressure, text_FR_Pressure, text_IT_Pressure, text_ES_Pressure}},
+
{(uint8_t)TXT2BYTE_Timer, {text_EN_Timer, text_DE_Timer, text_FR_Timer, text_IT_Timer, text_ES_Timer}},
{(uint8_t)TXT2BYTE_Starting, {text_EN_Starting, text_DE_Starting, text_FR_Starting, text_IT_Starting, text_ES_Starting}},
{(uint8_t)TXT2BYTE_Finished, {text_EN_Finished, text_DE_Finished, text_FR_Finished, text_IT_Finished, text_ES_Finished}},
diff -r f7318457df4d -r e373e90a48db Discovery/Src/vpm.c
--- a/Discovery/Src/vpm.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Discovery/Src/vpm.c Wed Aug 14 16:44:46 2024 +0200
@@ -165,7 +165,7 @@
static float r_int(float *x)
{
- return( (*x>0) ? floorf(*x) : -floorf(- *x) );
+ return( (*x>0.0) ? floorf(*x) : -floorf(- *x) );
}
/** private functions
@@ -460,10 +460,12 @@
for (i = 1; i < BUEHLMANN_STRUCT_MAX_GASES; i++)
{
- if(pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero >= depth_change[0] + 1)
+ if((pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero >= depth_change[0] + 1)
+ && (pDiveSettings->gas[pDiveSettings->decogaslist[i].GasIdInSettings].note.ub.decocalc))
continue;
- if(pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero <= 0)
+ if((pDiveSettings->decogaslist[i].change_during_ascent_depth_meter_otherwise_zero <= 0)
+ || (pDiveSettings->gas[pDiveSettings->decogaslist[i].GasIdInSettings].note.ub.decocalc == 0))
break;
j++;
@@ -636,8 +638,8 @@
{
for (i = 0; i < 16; i++)
{
- tissue_He_saturation[i] = helium_pressure[i] / 10;
- tissue_N2_saturation[i] = nitrogen_pressure[i] / 10;
+ tissue_He_saturation[i] = helium_pressure[i] / 10.0;
+ tissue_N2_saturation[i] = nitrogen_pressure[i] / 10.0;
}
if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_stop_depth / 10.0f) + pInput->pressure_surface_bar))
@@ -645,7 +647,7 @@
vpm_violates_buehlmann = true;
do {
- deco_stop_depth += 3;
+ deco_stop_depth += 3.0;
} while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_stop_depth / 10.0f) + pInput->pressure_surface_bar));
}
}
@@ -702,7 +704,7 @@
/* ASSIGN VARIABLES FOR ASCENT FROM START OF DECO ZONE TO FIRST STOP. SAVE */
/* FIRST STOP DEPTH FOR LATER USE WHEN COMPUTING THE FINAL ASCENT PROFILE */
/* =============================================================================== */
- deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10);
+ deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10.0);
starting_depth = depth_start_of_deco_calc;
first_stop_depth = deco_stop_depth;
first_stop = true;
@@ -753,12 +755,12 @@
decompression_stop(&deco_stop_depth, &step_size, false);
starting_depth = deco_stop_depth;
- if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10)
+ if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10.0)
deco_stop_depth = 0;
else
{
deco_stop_depth = deco_stop_depth - step_size;
- deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10);
+ deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10.0);
}
count++;
@@ -895,7 +897,7 @@
// _Bool first_stop = false;
float tissue_He_saturation[16];
float tissue_N2_saturation[16];
- float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40);
+ float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40.0);
//max_first_stop_depth = fmaxf(first_stop_depth,max_first_stop_depth);
/** CALC DECO Ceiling ******************************************************************/
@@ -923,13 +925,12 @@
{
for (i = 0; i < 16; i++)
{
- tissue_He_saturation[i] = helium_pressure[i] / 10;
- tissue_N2_saturation[i] = nitrogen_pressure[i] / 10;
+ tissue_He_saturation[i] = helium_pressure[i] / 10.0;
+ tissue_N2_saturation[i] = nitrogen_pressure[i] / 10.0;
}
if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar))
{
-
vpm_violates_buehlmann = true;
do {
deco_ceiling_depth += 0.1f;
@@ -961,13 +962,12 @@
{
for (i = 0; i < 16; i++)
{
- tissue_He_saturation[i] = helium_pressure[i] / 10;
- tissue_N2_saturation[i] = nitrogen_pressure[i] / 10;
+ tissue_He_saturation[i] = helium_pressure[i] / 10.0;
+ tissue_N2_saturation[i] = nitrogen_pressure[i] / 10.0;
}
if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar))
{
-
vpm_violates_buehlmann = true;
do {
deco_ceiling_depth += 0.1f;
@@ -981,12 +981,12 @@
}
else
{
- pDecoInfo->output_ceiling_meter = 0;
+ pDecoInfo->output_ceiling_meter = 0.0;
}
// fix hw 160627
- if(pDecoInfo->output_ceiling_meter < 0)
- pDecoInfo->output_ceiling_meter = 0;
+ if(pDecoInfo->output_ceiling_meter < 0.0)
+ pDecoInfo->output_ceiling_meter = 0.0;
/*** End CALC ceiling ***************************************************/
}
@@ -1005,6 +1005,9 @@
static int dp_max;
static float surfacetime;
_Bool first_stop = false;
+
+ short stop_time_seconds;
+
max_first_stop_depth = fmaxf(first_stop_depth,max_first_stop_depth);
if(begin)
{
@@ -1103,16 +1106,21 @@
}
else
{
- dp = 1 + (int)((deco_stop_depth - (pDiveSettings->input_second_to_last_stop_depth_bar * 10)) / step_size);
+ dp = 1 + (unsigned short)((deco_stop_depth - (pDiveSettings->input_second_to_last_stop_depth_bar * 10.0)) / step_size);
}
- dp_max = (int)fmaxf(dp_max,dp);
+
+ //dp_max = (int)fmaxf(dp_max,dp);
+ if(dp > dp_max)
+ {
+ dp_max = dp;
+ }
if(dp < DECOINFO_STRUCT_MAX_STOPS)
{
- int stop_time_seconds = fminf((999 * 60), (int)(stop_time *60));
+ stop_time_seconds = (short) fminf((999.9 * 60.0), (stop_time *60.0));
//
//if(vpm_calc_what == DECOSTOPS)
- pDecoInfo->output_stop_length_seconds[dp] = (unsigned short)stop_time_seconds;
+ pDecoInfo->output_stop_length_seconds[dp] = stop_time_seconds;
//else
//decostop_bailout[dp] = (unsigned short)stop_time_seconds;
}
@@ -1131,12 +1139,12 @@
/* =============================================================================== */
starting_depth = deco_stop_depth;
- if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10)
- deco_stop_depth = 0;
+ if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10.0)
+ deco_stop_depth = 0.0;
else
{
deco_stop_depth = deco_stop_depth - step_size;
- deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10);
+ deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10.0);
}
last_run_time = run_time;
@@ -1156,7 +1164,7 @@
//decostop_bailout[dp] = 0;
}
}
- pDecoInfo->output_time_to_surface_seconds = (int)(surfacetime * 60);
+ pDecoInfo->output_time_to_surface_seconds = (int)(surfacetime * 60.0);
pDecoInfo->output_ndl_seconds = 0;
vpm_calc_deco_ceiling();
@@ -1407,8 +1415,8 @@
/* the vacuum of outer space! */
/* =============================================================================== */
- if (tolerated_ambient_pressure < 0) {
- tolerated_ambient_pressure = 0;
+ if (tolerated_ambient_pressure < 0.0) {
+ tolerated_ambient_pressure = 0.0;
}
compartment_deco_ceiling[i - 1] =
tolerated_ambient_pressure - barometric_pressure;
@@ -1736,8 +1744,8 @@
ending_ambient_pressure = starting_ambient_pressure/2;
time_test = (ending_ambient_pressure - starting_ambient_pressure) / *rate;
- decom_get_inert_gases(starting_ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin );
- decom_get_inert_gases(ending_ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_end, &fraction_helium_end );
+ decom_get_inert_gases(starting_ambient_pressure / 10.0, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin );
+ decom_get_inert_gases(ending_ambient_pressure / 10.0, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_end, &fraction_helium_end );
initial_inspired_he_pressure = (starting_ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin;
initial_inspired_n2_pressure = (starting_ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_nitrogen_begin;
helium_rate = ((ending_ambient_pressure - WATER_VAPOR_PRESSURE)* fraction_helium_end - initial_inspired_he_pressure)/time_test;
@@ -1768,7 +1776,7 @@
/* and high bound function values. */
/* =============================================================================== */
- low_bound = 0.;
+ low_bound = 0.0;
high_bound = starting_ambient_pressure / *rate * -1.0f;
for (i = 1; i <= 16; ++i)
{
@@ -1983,7 +1991,7 @@
_Bool buehlmann_wait = false;
float tissue_He_saturation[16];
float tissue_N2_saturation[16];
- float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40);
+ float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40.0);
/* loop */
/* =============================================================================== */
/* CALCULATIONS */
@@ -1995,12 +2003,12 @@
//ending_ambient_pressure = ambient_pressure;
decom_get_inert_gases(ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin );
- if(*deco_stop_depth == (float)(pDiveSettings->last_stop_depth_bar * 10))
+ if(*deco_stop_depth == (pDiveSettings->last_stop_depth_bar * 10.0))
next_stop = 0;
else
{
next_stop = *deco_stop_depth - *step_size;
- next_stop = fmaxf(next_stop,(float)pDiveSettings->last_stop_depth_bar * 10);
+ next_stop = fmaxf(next_stop, pDiveSettings->last_stop_depth_bar * 10.0);
}
inspired_helium_pressure =
@@ -2020,17 +2028,17 @@
}
else
{
- deco_ceiling_depth = next_stop + 1;
+ deco_ceiling_depth = next_stop + 1.0;
}
if(deco_ceiling_depth > next_stop)
{
while (deco_ceiling_depth > next_stop)
{
- segment_time += 60;
- if(segment_time >= 999 )
+ segment_time += 60.0;
+ if(segment_time >= 999.0 )
{
- segment_time = 999 ;
+ segment_time = 999.0 ;
run_time += segment_time;
return;
}
@@ -2048,7 +2056,7 @@
}
if(deco_ceiling_depth < next_stop)
{
- segment_time -= 60;
+ segment_time -= 60.0;
gCNS_VPM = initial_CNS;
for (i = 0; i < 16; i++)
{
@@ -2088,17 +2096,17 @@
while (buehlmann_wait || (deco_ceiling_depth > next_stop))
{
//time_counter = temp_segment_time;
- segment_time += 1;
+ segment_time += 1.0;
- if(segment_time >= 999 )
+ if(segment_time >= 999.0 )
{
- segment_time = 999 ;
+ segment_time = 999.0 ;
run_time += segment_time;
return;
}
//goto L700;
initial_CNS = gCNS_VPM;
- decom_oxygen_calculate_cns_exposure(60*1,&pDiveSettings->decogaslist[mix_number],ambient_pressure/10,&gCNS_VPM);
+ decom_oxygen_calculate_cns_exposure(60*1,&pDiveSettings->decogaslist[mix_number],ambient_pressure/10.0, &gCNS_VPM);
for (i = 0; i < 16; i++)
{
initial_helium_pressure[i] = helium_pressure[i];
@@ -2300,14 +2308,14 @@
for(i = 0; i < 16;i++)
{
- future_helium_pressure[i] = pInput->tissue_helium_bar[i] * 10;//tissue_He_saturation[st_dive][i] * 10;
- future_nitrogen_pressure[i] = pInput->tissue_nitrogen_bar[i] * 10;
+ future_helium_pressure[i] = pInput->tissue_helium_bar[i] * 10.0;//tissue_He_saturation[st_dive][i] * 10;
+ future_nitrogen_pressure[i] = pInput->tissue_nitrogen_bar[i] * 10.0;
}
temp_segment_time = 0;
mix_number = 0;
- ambient_pressure = pInput->pressure_ambient_bar * 10;
- decom_get_inert_gases( ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]) , &fraction_nitrogen_begin, &fraction_helium_begin );
+ ambient_pressure = pInput->pressure_ambient_bar * 10.0;
+ decom_get_inert_gases( ambient_pressure / 10.0, (&pDiveSettings->decogaslist[mix_number]) , &fraction_nitrogen_begin, &fraction_helium_begin );
inspired_helium_pressure =(ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin;
inspired_nitrogen_pressure =(ambient_pressure - WATER_VAPOR_PRESSURE) *fraction_nitrogen_begin;
diff -r f7318457df4d -r e373e90a48db OtherSources/system_stm32f4xx.c
--- a/OtherSources/system_stm32f4xx.c Tue Aug 13 13:24:54 2024 +0200
+++ b/OtherSources/system_stm32f4xx.c Wed Aug 14 16:44:46 2024 +0200
@@ -74,6 +74,8 @@
#define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
+
+const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
/**
* @}
*/
diff -r f7318457df4d -r e373e90a48db RefPrj/Firmware/.cproject
--- a/RefPrj/Firmware/.cproject Tue Aug 13 13:24:54 2024 +0200
+++ b/RefPrj/Firmware/.cproject Wed Aug 14 16:44:46 2024 +0200
@@ -50,7 +50,7 @@
-
+
@@ -101,6 +101,9 @@
+
+
+
@@ -148,7 +151,7 @@
-
+
diff -r f7318457df4d -r e373e90a48db Small_CPU/Inc/batteryCharger.h
--- a/Small_CPU/Inc/batteryCharger.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Inc/batteryCharger.h Wed Aug 14 16:44:46 2024 +0200
@@ -51,7 +51,6 @@
} chargerState_t;
-uint8_t get_charge_status(void);
void init_battery_charger_status(void);
void set_charge_state(chargerState_t newState);
uint8_t get_charge_state(void);
diff -r f7318457df4d -r e373e90a48db Small_CPU/Inc/externalInterface.h
--- a/Small_CPU/Inc/externalInterface.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Inc/externalInterface.h Wed Aug 14 16:44:46 2024 +0200
@@ -43,6 +43,16 @@
#define COMMON_SENSOR_STATE_INIT (0x0u) /* All individual state definitions shall start with a INIT state = 0 */
#define COMMON_SENSOR_STATE_INVALID (0xFFu) /* All individual state definitions shall not use 0xFF for operation control */
+
+enum /* Definitions for supported UART protocols */
+{
+ EXT_INTERFACE_UART_OFF = 0,
+ EXT_INTERFACE_UART_CO2,
+ EXT_INTERFACE_UART_SENTINEL,
+ EXT_INTERFACE_UART_O2
+};
+
+
typedef enum
{
DETECTION_OFF = 0, /* no detection requested */
diff -r f7318457df4d -r e373e90a48db Small_CPU/Inc/uart.h
--- a/Small_CPU/Inc/uart.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Inc/uart.h Wed Aug 14 16:44:46 2024 +0200
@@ -48,6 +48,7 @@
void UART_ReadData(uint8_t sensorType);
void UART_FlushRxBuffer(void);
void UART_ChangeBaudrate(uint32_t newBaudrate);
+uint8_t UART_isComActive(uint8_t sensorId);
void StringToInt(char *pstr, uint32_t *puInt32);
void StringToUInt64(char *pstr, uint64_t *puint64);
diff -r f7318457df4d -r e373e90a48db Small_CPU/Inc/uartProtocol_Co2.h
--- a/Small_CPU/Inc/uartProtocol_Co2.h Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Inc/uartProtocol_Co2.h Wed Aug 14 16:44:46 2024 +0200
@@ -43,24 +43,24 @@
typedef enum
{
- RX_Ready= 0, /* Initial state */
- RX_DetectStart, /* validate start byte */
- RX_SelectData, /* Data contained in this frame */
- RX_Data0, /* Process incoming data */
- RX_Data1,
- RX_Data2,
- RX_Data3,
- RX_Data4,
- RX_Data5,
- RX_Data6,
- RX_Data7,
- RX_Data8,
- RX_Data9,
- RX_Data10,
- RX_Data11,
- RX_Data12,
- RX_DataComplete
- } receiveState_t;
+ CO2RX_Ready= 0, /* Initial state */
+ CO2RX_DetectStart, /* validate start byte */
+ CO2RX_SelectData, /* Data contained in this frame */
+ CO2RX_Data0, /* Process incoming data */
+ CO2RX_Data1,
+ CO2RX_Data2,
+ CO2RX_Data3,
+ CO2RX_Data4,
+ CO2RX_Data5,
+ CO2RX_Data6,
+ CO2RX_Data7,
+ CO2RX_Data8,
+ CO2RX_Data9,
+ CO2RX_Data10,
+ CO2RX_Data11,
+ CO2RX_Data12,
+ CO2RX_DataComplete
+ } receiveStateCO2_t;
typedef enum
diff -r f7318457df4d -r e373e90a48db Small_CPU/Inc/uartProtocol_Sentinel.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Small_CPU/Inc/uartProtocol_Sentinel.h Wed Aug 14 16:44:46 2024 +0200
@@ -0,0 +1,68 @@
+/**
+ ******************************************************************************
+ * @file uartProtocol_Sentinel.h
+ * @author heinrichs weikamp gmbh
+ * @version V0.0.1
+ * @date 15-Jan-2024
+ * @brief Interface functionality read data from Sentinel rebreather
+ *
+ @verbatim
+ ==============================================================================
+ ##### How to use #####
+ ==============================================================================
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 heinrichs weikamp
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef UART_PROTOCOL_SENTINEL_H
+#define UART_PROTOCOL_SENTINEL_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "configuration.h"
+#include "stm32f4xx_hal.h"
+
+ typedef enum
+ {
+ UART_SENTINEL_INIT = 0, /* Default Status for every sensor type */
+ UART_SENTINEL_IDLE, /* sensor detected and no communication pending */
+ UART_SENTINEL_ERROR,
+ UART_SENTINEL_OPERATING, /* normal operation */
+ } uartSentinelStatus_t;
+
+ typedef enum
+ {
+ SENTRX_Ready= 0, /* Initial state */
+ SENTRX_DetectStart, /* validate start byte */
+ SENTRX_SelectData, /* Data contained in this frame */
+ SENTRX_Data0, /* Process incoming data */
+ SENTRX_Data1,
+ SENTRX_Data2,
+ SENTRX_Data3,
+ SENTRX_Data4,
+ SENTRX_Data5,
+ SENTRX_Data6,
+ SENTRX_Data7,
+ SENTRX_Data8,
+ SENTRX_Data9,
+ SENTRX_Data10,
+ SENTRX_Data11,
+ SENTRX_Data12,
+ SENTRX_DataComplete
+ } receiveStateSentinel_t;
+
+
+void uartSentinel_Control(void);
+void uartSentinel_ProcessData(uint8_t data);
+uint8_t uartSentinel_isSensorConnected();
+
+#endif /* UART_PROTOCOL_SENTINEL_H */
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/baseCPU2.c
--- a/Small_CPU/Src/baseCPU2.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/baseCPU2.c Wed Aug 14 16:44:46 2024 +0200
@@ -166,9 +166,9 @@
// See CPU2-RTE.ld
const SFirmwareData cpu2_FirmwareData __attribute__(( section(".firmware_data") ))= {
.versionFirst = 3,
- .versionSecond = 2,
+ .versionSecond = 3,
.versionThird = 0,
- .versionBeta = 0,
+ .versionBeta = 1,
/* 4 bytes with trailing 0 */
.signature = "mh",
@@ -494,7 +494,7 @@
*/
EXTI_Test_Button_DeInit();
- externalInterface_SwitchUART(0);
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF);
externalInterface_SwitchPower33(false);
if (hasExternalClock())
SystemClock_Config_HSI();
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/batteryCharger.c
--- a/Small_CPU/Src/batteryCharger.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/batteryCharger.c Wed Aug 14 16:44:46 2024 +0200
@@ -34,36 +34,17 @@
#include "scheduler.h"
-/* Use This compile switch to select the new charger status control implementation */
-#define ENABLE_CHARGER_STATUS_V2
-
#define CHARGER_DEBOUNCE_SECONDS (6u) /* 6 seconds used to avoid problems with charger interrupts / disconnections */
-static uint8_t battery_i_charge_status = 0;
static uint16_t battery_charger_counter = 0;
-
-#ifdef ENABLE_CHARGER_STATUS_V2
static chargerState_t batteryChargerState = Charger_NotConnected;
-#endif
-
-/* can be 0, 1 or 255
- * 0 is disconnected
- * 1 is charging
- * 255 is full
- */
-uint8_t get_charge_status(void)
-{
- return battery_i_charge_status;
-}
void set_charge_state(uint8_t newState)
{
-#ifdef ENABLE_CHARGER_STATUS_V2
if(newState < Charger_END)
{
batteryChargerState = newState;
}
-#endif
}
uint8_t get_charge_state(void)
@@ -124,36 +105,20 @@
HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure);
}
-/* static counter is used to avoid multiple counts of charge startings
- and after that it is used, starting at 127 to count for the charge full signal
-
- there a short disconnections with the QI charger
- therefore the battery_charger_counter has a countdown instead of = 0.
-
- battery_gas_gauge_set_charge_full and scheduleUpdateDeviceDataChargerFull are
- set after disconnection as the charging process continues as long as not disconnected
- to prevent the short disconnections the battery_charger_counter is used too including
- upcounting again while battery_i_charge_status == 255 and the connection is established
-
- */
-
void battery_charger_get_status_and_contral_battery_gas_gauge(uint8_t cycleTimeBase)
{
-#ifdef ENABLE_CHARGER_STATUS_V2
static uint8_t notifyChargeComplete = 0;
-#endif
#ifdef OSTC_ON_DISCOVERY_HARDWARE
return;
#endif
-#ifdef ENABLE_CHARGER_STATUS_V2
-
if(batteryChargerState == Charger_ColdStart) /* wait for the first valid voltage meassurement */
{
- if((global.lifeData.battery_voltage != BATTERY_DEFAULT_VOLTAGE) && (global.lifeData.battery_voltage < BATTERY_CHARGER_CONNECTED_VOLTAGE))
+ if(global.lifeData.battery_voltage != BATTERY_DEFAULT_VOLTAGE) /* wait for first valid voltage value */
{
- if(global.lifeData.battery_voltage > BATTERY_ENDOF_CHARGE_VOLTAGE) /* Voltage close to full state => maybe new battery inserted */
+ if((global.lifeData.battery_voltage < BATTERY_CHARGER_CONNECTED_VOLTAGE)
+ && (global.lifeData.battery_voltage > BATTERY_ENDOF_CHARGE_VOLTAGE)) /* Voltage close to full state => maybe new battery inserted */
{
battery_gas_gauge_set_charge_full();
}
@@ -179,7 +144,13 @@
battery_charger_counter = CHARGER_DEBOUNCE_SECONDS;
}
break;
- case Charger_Finished: battery_charger_counter = 0;
+ case Charger_Finished: if((get_voltage() >= BATTERY_ENDOF_CHARGE_VOLTAGE) && (get_voltage() < BATTERY_CHARGER_CONNECTED_VOLTAGE)) /* stopping does not necessarily mean battery is full */
+ {
+ global.dataSendToMaster.chargeStatus = CHARGER_complete;
+ global.deviceDataSendToMaster.chargeStatus = CHARGER_complete;
+ notifyChargeComplete = 1;
+ }
+ battery_charger_counter = 10;
batteryChargerState = Charger_LostConnection;
/* no break */
case Charger_LostConnection: /* the charger stops charging when charge current is 1/10 */
@@ -188,10 +159,6 @@
{
notifyChargeComplete = 1;
}
- else
- {
- notifyChargeComplete = 0;
- }
if(battery_charger_counter >= cycleTimeBase)
{
battery_charger_counter -= cycleTimeBase;
@@ -199,7 +166,7 @@
else
{
battery_charger_counter = 0;
- battery_i_charge_status = 0;
+
global.dataSendToMaster.chargeStatus = CHARGER_off;
global.deviceDataSendToMaster.chargeStatus = CHARGER_off;
@@ -207,12 +174,13 @@
{
battery_gas_gauge_set_charge_full();
scheduleUpdateDeviceDataChargerFull();
- notifyChargeComplete = 0;
}
+ notifyChargeComplete = 0;
batteryChargerState = Charger_NotConnected;
}
break;
- default: break;
+ default: batteryChargerState = Charger_NotConnected; /* unexpected state => reinitialize state machine */
+ break;
}
}
else
@@ -221,8 +189,7 @@
/* wait for disconnection to write and reset */
switch(batteryChargerState)
{
- case Charger_NotConnected: battery_i_charge_status = 1;
- battery_charger_counter = 0;
+ case Charger_NotConnected: battery_charger_counter = 0;
batteryChargerState = Charger_WarmUp;
break;
case Charger_LostConnection: batteryChargerState = Charger_Active;
@@ -230,7 +197,6 @@
case Charger_WarmUp: battery_charger_counter += cycleTimeBase;
if(battery_charger_counter >= CHARGER_DEBOUNCE_SECONDS )
{
- battery_i_charge_status = 2;
scheduleUpdateDeviceDataChargerCharging();
batteryChargerState = Charger_Active;
}
@@ -251,11 +217,8 @@
if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN)) /* high => charger stopped charging */
{
+ battery_charger_counter = 30;
batteryChargerState = Charger_Finished;
- global.dataSendToMaster.chargeStatus = CHARGER_complete;
- global.deviceDataSendToMaster.chargeStatus = CHARGER_complete;
- battery_charger_counter = 30;
- notifyChargeComplete = 1;
}
else
{
@@ -279,117 +242,11 @@
HAL_Delay(1);
break;
- default: /* wait for disconnection */
+ default: batteryChargerState = Charger_NotConnected; /* unexpected state => reinitialize state machine */
break;
}
}
}
-#else
- /* on disconnection or while disconnected */
- if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN))
- {
- if(battery_charger_counter)
- {
- battery_charger_counter--;
- global.dataSendToMaster.chargeStatus = CHARGER_lostConnection;
- global.deviceDataSendToMaster.chargeStatus = CHARGER_lostConnection;
- }
- /* max count down to 127+5 or 127+20 */
- if((battery_i_charge_status == 255) && battery_charger_counter < 127)
- {
-// battery_gas_gauge_set_charge_full();
-// scheduleUpdateDeviceDataChargerFull();
- battery_charger_counter = 0;
- }
-
- if(battery_charger_counter == 0)
- {
- battery_i_charge_status = 0;
- global.dataSendToMaster.chargeStatus = CHARGER_off;
- global.deviceDataSendToMaster.chargeStatus = CHARGER_off;
-
- }
- return;
- }
-
- /* connected */
-
- /* wait for disconnection to write and reset */
- if(battery_i_charge_status == 255)
- {
- global.dataSendToMaster.chargeStatus = CHARGER_complete;
- global.deviceDataSendToMaster.chargeStatus = CHARGER_complete;
-
- if(((cycleTimeBase > 1) && (battery_charger_counter < 127+5)) || (battery_charger_counter < 127+20))
- battery_charger_counter++;
- return;
- }
-
- if(battery_charger_counter == 0)
- battery_i_charge_status = 1;
-
- /* charger is connected and didn't signal full yet */
- global.dataSendToMaster.chargeStatus = CHARGER_running;
- global.deviceDataSendToMaster.chargeStatus = CHARGER_running;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.Pin = CHARGE_OUT_PIN;
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
- GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
- HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure);
- HAL_GPIO_WritePin(CHARGE_OUT_GPIO_PORT, CHARGE_OUT_PIN,GPIO_PIN_SET);
- HAL_Delay(1);
-
-
- if(battery_charger_counter < 120)
- {
- if(cycleTimeBase == 1)
- battery_charger_counter++;
- else
- {
- battery_charger_counter += 30;
- if(battery_charger_counter >= 127)
- battery_charger_counter = 126;
- }
- }
- else
- if(battery_charger_counter < 127)
- {
- battery_charger_counter = 127;
- if(battery_i_charge_status < 2)
- {
- battery_i_charge_status = 2;
- scheduleUpdateDeviceDataChargerCharging();
- }
- }
-
- if(battery_charger_counter >= 127)
- {
- if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN) || (get_voltage() >= 4.1f))
- {
- battery_charger_counter++;
- if(((cycleTimeBase > 1) && (battery_charger_counter > 127+5)) || (battery_charger_counter > 127+20))
- {
- battery_charger_counter = 127;
- if(get_voltage() >= 4.1f)
- {
- battery_i_charge_status = 255;
- battery_gas_gauge_set_charge_full();
- scheduleUpdateDeviceDataChargerFull();
- }
- }
- }
- else
- battery_charger_counter = 127;
- }
-
- GPIO_InitStructure.Pin = CHARGE_OUT_PIN;
- GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
- GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
- HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure);
-#endif
}
/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/externalInterface.c
--- a/Small_CPU/Src/externalInterface.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/externalInterface.c Wed Aug 14 16:44:46 2024 +0200
@@ -34,6 +34,7 @@
#include "pressure.h"
#include "uartProtocol_O2.h"
#include "uartProtocol_Co2.h"
+#include "uartProtocol_Sentinel.h"
extern SGlobal global;
extern UART_HandleTypeDef huart1;
@@ -67,6 +68,7 @@
static uint8_t recBuf[ADC_ANSWER_LENGTH];
static uint8_t timeoutCnt = 0;
static uint8_t externalInterfacePresent = 0;
+static uint8_t delayAdcConversion = 0;
float externalChannel_mV[MAX_ADC_CHANNEL];
static uint8_t externalV33_On = 0;
@@ -103,6 +105,7 @@
activeChannel = 0;
timeoutCnt = 0;
externalInterfacePresent = 0;
+ delayAdcConversion = 0;
if(externalInterface_StartConversion(activeChannel) == HAL_OK)
{
externalInterfacePresent = 1;
@@ -170,7 +173,15 @@
if(externalADC_On)
{
- if(I2C_Master_Receive(DEVICE_EXTERNAL_ADC, recBuf, ADC_ANSWER_LENGTH) == HAL_OK)
+ if(delayAdcConversion)
+ {
+ if(UART_isComActive(activeUartChannel) == 0)
+ {
+ externalInterface_StartConversion(activeChannel);
+ delayAdcConversion = 0;
+ }
+ }
+ else if(I2C_Master_Receive(DEVICE_EXTERNAL_ADC, recBuf, ADC_ANSWER_LENGTH) == HAL_OK)
{
if((recBuf[ANSWER_CONFBYTE_INDEX] & ADC_START_CONVERSION) == 0) /* !ready set => received data contains new value */
{
@@ -194,25 +205,23 @@
}
activeChannel = nextChannel;
- externalInterface_StartConversion(activeChannel);
- timeoutCnt = 0;
- }
- else
- {
- if(timeoutCnt++ >= ADC_TIMEOUT)
+ if(UART_isComActive(activeUartChannel) == 0)
{
externalInterface_StartConversion(activeChannel);
- timeoutCnt = 0;
}
- }
- }
- else /* take also i2c bus disturb into account */
- {
- if(timeoutCnt++ >= ADC_TIMEOUT)
- {
- externalInterface_StartConversion(activeChannel);
+ else
+ {
+ delayAdcConversion = 1;
+ }
timeoutCnt = 0;
}
+
+ }
+ if(timeoutCnt++ >= ADC_TIMEOUT)
+ {
+ externalInterface_StartConversion(activeChannel);
+ delayAdcConversion = 0;
+ timeoutCnt = 0;
}
}
return retval;
@@ -368,18 +377,18 @@
{
switch(protocol)
{
- case 0:
- case (EXT_INTERFACE_UART_CO2 >> 8):
- case (EXT_INTERFACE_UART_O2 >> 8):
- case (EXT_INTERFACE_UART_SENTINEL >> 8):
+ case EXT_INTERFACE_UART_OFF:
+ case EXT_INTERFACE_UART_CO2:
+ case EXT_INTERFACE_UART_O2:
+ case EXT_INTERFACE_UART_SENTINEL:
if((externalAutoDetect <= DETECTION_START)
- || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect >= DETECTION_UARTMUX) && (externalAutoDetect <= DETECTION_DIGO2_3))
+ || ((protocol == EXT_INTERFACE_UART_O2) && (externalAutoDetect >= DETECTION_UARTMUX) && (externalAutoDetect <= DETECTION_DIGO2_3))
#ifdef ENABLE_CO2_SUPPORT
|| ((externalAutoDetect >= DETECTION_CO2_0) && (externalAutoDetect <= DETECTION_CO2_3))
#endif
#ifdef ENABLE_SENTINEL_MODE
- || ((protocol == EXT_INTERFACE_UART_SENTINEL >> 8) && (externalAutoDetect == DETECTION_SENTINEL))
+ || ((protocol == EXT_INTERFACE_UART_SENTINEL) && (externalAutoDetect == DETECTION_SENTINEL))
#endif
)
{
@@ -599,6 +608,16 @@
}
}
}
+#ifdef ENABLE_SENTINEL_MODE
+ if(pMap[EXT_INTERFACE_MUX_OFFSET] == SENSOR_SENTINEL)
+ {
+ for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++)
+ {
+ pMap[index2] = SENSOR_SENTINELM; /* store a mirror instance needed for visualization */
+ Mux2ADCMap[index2] = index2 + EXT_INTERFACE_MUX_OFFSET;
+ }
+ }
+#endif
}
uint8_t* externalInterface_GetSensorMapPointer(uint8_t finalMap)
@@ -651,7 +670,7 @@
if(externalInterfacePresent)
{
externalInterface_SwitchPower33(0);
- externalInterface_SwitchUART(0);
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF);
for(index = 0; index < MAX_ADC_CHANNEL; index++)
{
externalChannel_mV[index] = 0;
@@ -686,7 +705,7 @@
}
externalInterfaceMuxReqIntervall = 1100;
externalAutoDetect = DETECTION_UARTMUX;
- externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8);
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_O2);
UART_MUX_SelectAddress(MAX_MUX_CHANNEL);
uartO2_SetChannel(MAX_MUX_CHANNEL);
activeUartChannel = MAX_MUX_CHANNEL;
@@ -707,7 +726,7 @@
activeUartChannel = 0;
tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_DIGO2;
externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT;
- externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8);
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_O2);
if(foundSensorMap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX)
{
UART_MUX_SelectAddress(0);
@@ -724,7 +743,7 @@
tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE;
if(uartMuxChannel)
{
- externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8);
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_O2);
UART_MUX_SelectAddress(uartMuxChannel);
externalInterface_SensorState[uartMuxChannel + EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT;
uartO2_SetChannel(uartMuxChannel);
@@ -789,32 +808,40 @@
}
else
{
+#ifdef ENABLE_SENTINEL_MODE
+ externalAutoDetect = DETECTION_SENTINEL;
+#else
externalAutoDetect = DETECTION_DONE;
+#endif
}
#endif
#ifdef ENABLE_SENTINEL_MODE
if(externalAutoDetect == DETECTION_SENTINEL)
{
- externalInterface_SwitchUART(EXT_INTERFACE_UART_SENTINEL >> 8);
+ externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT;
+ uartO2_SetChannel(0);
+ activeUartChannel = 0;
+ tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_SENTINEL;
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_SENTINEL);
+ externalInterface_CheckBaudrate(SENSOR_SENTINEL);
UART_StartDMA_Receiption();
}
break;
case DETECTION_SENTINEL:
case DETECTION_SENTINEL2:
- if(UART_isSentinelConnected())
+ if(uartSentinel_isSensorConnected())
{
- for(index = 0; index < 3; index++) /* Sentinel is occupiing all sensor slots */
+ for(index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_MUX_OFFSET+3; index++)
{
- tmpSensorMap[index] = SENSOR_SENTINEL;
+ foundSensorMap[index] = SENSOR_SENTINEL;
}
- sensorIndex = 3;
}
externalAutoDetect++;
#endif
break;
case DETECTION_DONE: externalAutoDetect = DETECTION_OFF;
- externalInterface_SwitchUART(0);
+ externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF);
activeUartChannel = 0xFF;
cntSensor = 0;
cntUARTSensor = 0;
@@ -829,6 +856,14 @@
{
cntUARTSensor++;
}
+#ifdef ENABLE_SENTINEL_MODE
+ if(foundSensorMap[index] == SENSOR_SENTINEL) /* The Sentinel has a fixed setup */
+ {
+ cntSensor = 3;
+ cntUARTSensor = 1;
+ break;
+ }
+#endif
}
externalInface_MapUartToLegacyADC(foundSensorMap);
externalInterfaceMuxReqIntervall = 0xFFFF;
@@ -941,6 +976,7 @@
switch(sensorType)
{
+ case SENSOR_SENTINEL:
case SENSOR_CO2: newBaudrate = 9600;
break;
case SENSOR_DIGO2:
@@ -976,6 +1012,8 @@
switch(pmap[activeUartChannel + EXT_INTERFACE_MUX_OFFSET])
{
+ case SENSOR_SENTINEL: externalInterface_CheckBaudrate(SENSOR_SENTINEL);
+ break;
case SENSOR_CO2: externalInterface_CheckBaudrate(SENSOR_CO2);
break;
default:
@@ -1067,6 +1105,10 @@
case SENSOR_CO2: uartCo2_Control();
break;
#endif
+#ifdef ENABLE_SENTINEL_MODE
+ case SENSOR_SENTINEL: uartSentinel_Control();
+ break;
+#endif
default:
break;
}
@@ -1077,7 +1119,7 @@
#if 0
#ifdef ENABLE_SENTINEL_MODE
- if(externalInterface_GetUARTProtocol() & (EXT_INTERFACE_UART_SENTINEL >> 8))
+ if(externalInterface_GetUARTProtocol() & (EXT_INTERFACE_UART_SENTINEL))
{
UART_HandleSentinelData();
}
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/pressure.c
--- a/Small_CPU/Src/pressure.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/pressure.c Wed Aug 14 16:44:46 2024 +0200
@@ -130,6 +130,7 @@
for(int i=0; i 1000) /* one second passed since last tick */
+ if(time_elapsed_ms(secondtick,lasttick) >= (1000 / SECDIV)) /* one second passed since last tick */
{
+ if(time_elapsed_ms(lastsecondtick,lasttick) > 1000)
+ {
+ passedSecond++;
+ lastsecondtick = lasttick;
+ }
secondtick = lasttick;
- passedSecond++;
+#define DIVE_AT_SPEED 1
#ifdef DIVE_AFTER_LANDING
if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
else if(passedSecond < 300) pressure_sim_mbar -= 1.0; /* decrease pressure in 5 minutes target 770mbar => delta 330 */
@@ -563,6 +575,26 @@
else if(passedSecond < 2300) pressure_sim_mbar += 0.0; /* stay on depth */
else if(passedSecond < 2500) pressure_sim_mbar -= 10.0; /* return to surface */
else pressure_sim_mbar = 1000.0; /* final state */
+#endif
+#ifdef DIVE_AT_SPEED
+ if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
+ else if(passedSecond < 20) delta_mbar = 200.0 / SECDIV; /* Start dive */
+ else if(passedSecond < 30) delta_mbar = 0.0; /*stay on depth*/
+ else if(passedSecond < 45) delta_mbar -= 0.2 / SECDIV; /* return to surface */
+ else if(passedSecond < 40) delta_mbar -= 0.4 / SECDIV; /* stay */
+ else if(passedSecond < 50) delta_mbar += 0.3 / SECDIV; /* get ready for second dive */
+ else if(passedSecond < 60) delta_mbar -= 0.4; /*stay on depth*/
+ else if(passedSecond < 70) delta_mbar = 0.2;
+ else if(passedSecond < 1060) pressure_sim_mbar -= 10.0/ SECDIV; /* return to surface */
+ else if(passedSecond < 1200) pressure_sim_mbar += 0.0; /* stay */
+ else { pressure_sim_mbar = 1000.0; delta_mbar = 0.0;} /* final state */
+
+ pressure_sim_mbar += delta_mbar;
+ if(pressure_sim_mbar < surface_pressure_mbar)
+ {
+ pressure_sim_mbar = surface_pressure_mbar;
+ }
+
#else /* short dive */
if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
else if(passedSecond < 180) pressure_sim_mbar += 10.0; /* Start dive */
@@ -685,7 +717,7 @@
if(ambient_pressure_mbar < PRESSURE_MINIMUM)
{
- ambient_pressure_mbar = 1000.0;
+ ambient_pressure_mbar = 1000.0 + pressure_offset;
}
}
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/scheduler.c
--- a/Small_CPU/Src/scheduler.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/scheduler.c Wed Aug 14 16:44:46 2024 +0200
@@ -142,7 +142,7 @@
global.dataSendToMaster.RTE_VERSION_high = firmwareVersionHigh();//RTE_VERSION_HIGH;;
global.dataSendToMaster.RTE_VERSION_low = firmwareVersionLow();//RTE_VERSION_LOW;;
- global.dataSendToMaster.chargeStatus = 0;
+ global.dataSendToMaster.chargeStatus = CHARGER_off;
global.dataSendToMaster.power_on_reset = 0;
global.dataSendToMaster.header.checkCode[0] = 0xA1;
@@ -160,7 +160,7 @@
global.deviceDataSendToMaster.RTE_VERSION_high = firmwareVersionHigh();//RTE_VERSION_HIGH;
global.deviceDataSendToMaster.RTE_VERSION_low = firmwareVersionLow();//RTE_VERSION_LOW;
- global.deviceDataSendToMaster.chargeStatus = 0;
+ global.deviceDataSendToMaster.chargeStatus = CHARGER_off;
global.deviceDataSendToMaster.power_on_reset = 0;
global.deviceDataSendToMaster.header.checkCode[0] = 0xDF;
@@ -480,6 +480,8 @@
{
uint32_t ticksdiff = 0;
uint32_t lasttick = 0;
+ uint32_t lastPressureTick = 0;
+ uint32_t tickPressureDiff = 0;
uint8_t extAdcChannel = 0;
uint8_t counterAscentRate = 0;
float lastPressure_bar = 0.0f;
@@ -552,18 +554,21 @@
global.lifeData.counterSecondsShallowDepth = (global.settings.timeoutDiveReachedZeroDepth - 10);
}
#endif
-
- //Calc ascentrate every two second (20 * 100 ms)
+
counterAscentRate++;
- if(counterAscentRate == 20)
+ if(counterAscentRate == 4)
{
- global.lifeData.pressure_ambient_bar = get_pressure_mbar() / 1000.0f;
- if(lastPressure_bar >= 0)
+ tickPressureDiff = time_elapsed_ms(lastPressureTick,lasttick); /* Calculate ascent rate every 400ms use timer to take care for small time shifts */
+ if(tickPressureDiff != 0)
{
- //2 seconds * 30 == 1 minute, bar * 10 = meter
- global.lifeData.ascent_rate_meter_per_min = (lastPressure_bar - global.lifeData.pressure_ambient_bar) * 30 * 10;
+ global.lifeData.pressure_ambient_bar = get_pressure_mbar() / 1000.0f;
+ if(lastPressure_bar >= 0)
+ {
+ global.lifeData.ascent_rate_meter_per_min = (lastPressure_bar - global.lifeData.pressure_ambient_bar) * (60000.0 / tickPressureDiff) * 10; /* bar * 10 = meter */
+ }
}
lastPressure_bar = global.lifeData.pressure_ambient_bar;
+ lastPressureTick = lasttick;
counterAscentRate = 0;
}
copyPressureData();
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/uart.c
--- a/Small_CPU/Src/uart.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/uart.c Wed Aug 14 16:44:46 2024 +0200
@@ -22,6 +22,7 @@
#include "uart.h"
#include "uartProtocol_O2.h"
#include "uartProtocol_Co2.h"
+#include "uartProtocol_Sentinel.h"
#include "externalInterface.h"
#include "data_exchange.h"
#include /* memset */
@@ -44,9 +45,6 @@
static uint8_t dmaActive; /* Indicator if DMA reception needs to be started */
-static uint8_t SentinelConnected = 0; /* Binary indicator if a sensor is connected or not */
-
-
/* Exported functions --------------------------------------------------------*/
@@ -72,9 +70,6 @@
lastCmdIndex = 0;
rxWriteIndex = 0;
dmaActive = 0;
-
- SentinelConnected = 0;
-
}
void MX_USART1_UART_DeInit(void)
@@ -166,28 +161,6 @@
}
*puint64 = result;
}
-void ConvertByteToHexString(uint8_t byte, char* str)
-{
- uint8_t worker = 0;
- uint8_t digit = 0;
- uint8_t digitCnt = 1;
-
- worker = byte;
- while((worker!=0) && (digitCnt != 255))
- {
- digit = worker % 16;
- if( digit < 10)
- {
- digit += '0';
- }
- else
- {
- digit += 'A' - 10;
- }
- str[digitCnt--]= digit;
- worker = worker / 16;
- }
-}
void UART_StartDMA_Receiption()
{
@@ -223,164 +196,6 @@
}
}
-#ifdef ENABLE_SENTINEL_MODE
-void UART_HandleSentinelData(void)
-{
- uint8_t localRX = rxReadIndex;
- static uint8_t dataType = 0;
- static uint32_t dataValue[3];
- static uint8_t dataValueIdx = 0;
- static receiveState_t rxState = RX_Ready;
- static uint32_t lastReceiveTick = 0;
- static uint8_t lastAlive = 0;
- static uint8_t curAlive = 0;
- static uint8_t checksum = 0;
- static char checksum_str[]="00";
-
- while((rxBuffer[localRX]!=0))
- {
- lastReceiveTick = HAL_GetTick();
-
- switch(rxState)
- {
- case RX_Ready: if((rxBuffer[localRX] >= 'a') && (rxBuffer[localRX] <= 'z'))
- {
- rxState = RX_DetectStart;
- curAlive = rxBuffer[localRX];
- checksum = 0;
- }
- break;
-
- case RX_DetectStart: checksum += rxBuffer[localRX];
- if(rxBuffer[localRX] == '1')
- {
- rxState = RX_SelectData;
- dataType = 0xFF;
-
- }
- else
- {
- rxState = RX_Ready;
- }
- break;
-
- case RX_SelectData: checksum += rxBuffer[localRX];
- switch(rxBuffer[localRX])
- {
- case 'T': dataType = rxBuffer[localRX];
- break;
- case '0': if(dataType != 0xff)
- {
- rxState = RX_Data0;
- dataValueIdx = 0;
- dataValue[0] = 0;
-
- }
- else
- {
- rxState = RX_Ready;
- }
- break;
- default: rxState = RX_Ready;
- }
- break;
-
- case RX_Data0:
- case RX_Data1:
- case RX_Data2:
- case RX_Data4:
- case RX_Data5:
- case RX_Data6:
- case RX_Data8:
- case RX_Data9:
- case RX_Data10: checksum += rxBuffer[localRX];
- if((rxBuffer[localRX] >= '0') && (rxBuffer[localRX] <= '9'))
- {
- dataValue[dataValueIdx] = dataValue[dataValueIdx] * 10 + (rxBuffer[localRX] - '0');
- rxState++;
- }
- else
- {
- rxState = RX_Ready;
- }
- break;
-
- case RX_Data3:
- case RX_Data7: checksum += rxBuffer[localRX];
- if(rxBuffer[localRX] == '0')
- {
- rxState++;
- dataValueIdx++;
- dataValue[dataValueIdx] = 0;
- }
- else
- {
- rxState = RX_Ready;
- }
- break;
- case RX_Data11: rxState = RX_DataComplete;
- ConvertByteToHexString(checksum,checksum_str);
- if(rxBuffer[localRX] == checksum_str[0])
- {
- rxState = RX_DataComplete;
- }
- else
- {
- rxState = RX_Ready;
- }
-
- break;
-
- case RX_DataComplete: if(rxBuffer[localRX] == checksum_str[1])
- {
- setExternalInterfaceChannel(0,(float)(dataValue[0] / 10.0));
- setExternalInterfaceChannel(1,(float)(dataValue[1] / 10.0));
- setExternalInterfaceChannel(2,(float)(dataValue[2] / 10.0));
- SentinelConnected = 1;
- }
- rxState = RX_Ready;
- break;
-
-
- default: rxState = RX_Ready;
- break;
-
- }
- localRX++;
- rxReadIndex++;
- if(rxReadIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER)
- {
- localRX = 0;
- rxReadIndex = 0;
- }
- }
-
- if(time_elapsed_ms(lastReceiveTick,HAL_GetTick()) > 4000) /* check for communication timeout */
- {
- if(curAlive == lastAlive)
- {
- setExternalInterfaceChannel(0,0.0);
- setExternalInterfaceChannel(1,0.0);
- setExternalInterfaceChannel(2,0.0);
- SentinelConnected = 0;
- }
- lastAlive = curAlive;
- }
-
- if((dmaActive == 0) && (externalInterface_isEnabledPower33())) /* Should never happen in normal operation => restart in case of communication error */
- {
- UART_StartDMA_Receiption();
- }
-}
-#endif
-
-
-
-uint8_t UART_isSentinelConnected()
-{
- return SentinelConnected;
-}
-
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart1)
@@ -413,6 +228,10 @@
case SENSOR_CO2: uartCo2_ProcessData(rxBuffer[localRX]);
break;
#endif
+#ifdef ENABLE_SENTINEL_MODE
+ case SENSOR_SENTINEL: uartSentinel_ProcessData(rxBuffer[localRX]);
+ break;
+#endif
default:
break;
}
@@ -441,6 +260,17 @@
}
}
+uint8_t UART_isComActive(uint8_t sensorId)
+{
+ uint8_t active = 1;
+ uint8_t ComState = externalInterface_GetSensorState(sensorId + EXT_INTERFACE_MUX_OFFSET);
+
+ if((ComState == UART_COMMON_INIT) || (ComState == UART_COMMON_IDLE) || (ComState == UART_COMMON_ERROR))
+ {
+ active = 0;
+ }
+ return active;
+}
/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/uartProtocol_Co2.c
--- a/Small_CPU/Src/uartProtocol_Co2.c Tue Aug 13 13:24:54 2024 +0200
+++ b/Small_CPU/Src/uartProtocol_Co2.c Wed Aug 14 16:44:46 2024 +0200
@@ -27,7 +27,7 @@
#ifdef ENABLE_CO2_SUPPORT
static uint8_t CO2Connected = 0; /* Binary indicator if a sensor is connected or not */
-static receiveState_t rxState = RX_Ready;
+static receiveStateCO2_t rxState = CO2RX_Ready;
@@ -137,7 +137,7 @@
uint8_t activeSensor = externalInterface_GetActiveUartSensor();
uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
- if(rxState == RX_Ready) /* identify data content */
+ if(rxState == CO2RX_Ready) /* identify data content */
{
switch(data)
{
@@ -146,7 +146,7 @@
case 'D':
case 'Z':
case '.': dataType = data;
- rxState = RX_Data0;
+ rxState = CO2RX_Data0;
dataValue = 0;
break;
case '?': localComState = UART_CO2_ERROR;
@@ -157,26 +157,26 @@
}
else if((data >= '0') && (data <= '9'))
{
- if((rxState >= RX_Data0) && (rxState <= RX_Data4))
+ if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data4))
{
dataValue = dataValue * 10 + (data - '0');
rxState++;
- if(rxState == RX_Data5)
+ if(rxState == CO2RX_Data5)
{
- rxState = RX_DataComplete;
+ rxState = CO2RX_DataComplete;
}
}
else /* protocol error data has max 5 digits */
{
- if(rxState != RX_DataComplete) /* commands will not answer with number values */
+ if(rxState != CO2RX_DataComplete) /* commands will not answer with number values */
{
- rxState = RX_Ready;
+ rxState = CO2RX_Ready;
}
}
}
if((data == ' ') || (data == '\n')) /* Abort data detection */
{
- if(rxState == RX_DataComplete)
+ if(rxState == CO2RX_DataComplete)
{
CO2Connected = 1;
if(localComState == UART_CO2_SETUP)
@@ -204,13 +204,13 @@
break;
case '.': externalInterface_SetCO2Scale(dataValue);
break;
- default: rxState = RX_Ready;
+ default: rxState = CO2RX_Ready;
break;
}
}
- if(rxState != RX_Data0) /* reset state machine because message in wrong format */
+ if(rxState != CO2RX_Data0) /* reset state machine because message in wrong format */
{
- rxState = RX_Ready;
+ rxState = CO2RX_Ready;
}
}
externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
diff -r f7318457df4d -r e373e90a48db Small_CPU/Src/uartProtocol_Sentinel.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Small_CPU/Src/uartProtocol_Sentinel.c Wed Aug 14 16:44:46 2024 +0200
@@ -0,0 +1,195 @@
+/**
+ ******************************************************************************
+ * @file uartProtocol_Co2.c
+ * @author heinrichs weikamp gmbh
+ * @version V0.0.1
+ * @date 15-Jan-2024
+ * @brief Interface functionality to read data from Sentinel rebreather
+ *
+ @verbatim
+
+
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2024 heinrichs weikamp
+ *
+ ******************************************************************************
+ */
+/* Includes ------------------------------------------------------------------*/
+
+#include
+#include
+#include "uart.h"
+#include "externalInterface.h"
+
+
+#ifdef ENABLE_SENTINEL_MODE
+static uint8_t SentinelConnected = 0; /* Binary indicator if a sensor is connected or not */
+static receiveStateSentinel_t rxState = SENTRX_Ready;
+
+void ConvertByteToHexString(uint8_t byte, char* str)
+{
+ uint8_t worker = 0;
+ uint8_t digit = 0;
+ uint8_t digitCnt = 1;
+
+ worker = byte;
+ while((worker!=0) && (digitCnt != 255))
+ {
+ digit = worker % 16;
+ if( digit < 10)
+ {
+ digit += '0';
+ }
+ else
+ {
+ digit += 'A' - 10;
+ }
+ str[digitCnt--]= digit;
+ worker = worker / 16;
+ }
+}
+
+void uartSentinel_Control(void)
+{
+ uint8_t activeSensor = externalInterface_GetActiveUartSensor();
+ uartSentinelStatus_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
+
+ if(localComState == UART_SENTINEL_INIT)
+ {
+ SentinelConnected = 0;
+ UART_StartDMA_Receiption();
+ localComState = UART_SENTINEL_IDLE;
+ }
+ externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
+}
+
+void uartSentinel_ProcessData(uint8_t data)
+{
+ static uint8_t dataType = 0;
+ static uint32_t dataValue[3];
+ static uint8_t dataValueIdx = 0;
+
+ static uint8_t checksum = 0;
+ static char checksum_str[]="00";
+
+ uint8_t activeSensor = externalInterface_GetActiveUartSensor();
+ uartSentinelStatus_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
+
+ switch(rxState)
+ {
+ case SENTRX_Ready: if((data >= 'a') && (data <= 'z'))
+ {
+ rxState = SENTRX_DetectStart;
+ checksum = 0;
+ }
+ break;
+
+ case SENTRX_DetectStart: checksum += data;
+ if(data == '1')
+ {
+ rxState = SENTRX_SelectData;
+ dataType = 0xFF;
+
+ }
+ else
+ {
+ rxState = SENTRX_Ready;
+ }
+ break;
+
+ case SENTRX_SelectData: checksum += data;
+ switch(data)
+ {
+ case 'T': dataType = data;
+ break;
+ case '0': if(dataType != 0xff)
+ {
+ rxState = SENTRX_Data0;
+ dataValueIdx = 0;
+ dataValue[0] = 0;
+
+ }
+ else
+ {
+ rxState = SENTRX_Ready;
+ }
+ break;
+ default: rxState = SENTRX_Ready;
+ }
+ break;
+
+ case SENTRX_Data0:
+ case SENTRX_Data1:
+ case SENTRX_Data2:
+ case SENTRX_Data4:
+ case SENTRX_Data5:
+ case SENTRX_Data6:
+ case SENTRX_Data8:
+ case SENTRX_Data9:
+ case SENTRX_Data10: checksum += data;
+ if((data >= '0') && (data <= '9'))
+ {
+ dataValue[dataValueIdx] = dataValue[dataValueIdx] * 10 + (data - '0');
+ rxState++;
+ }
+ else
+ {
+ rxState = SENTRX_Ready;
+ }
+ break;
+
+ case SENTRX_Data3:
+ case SENTRX_Data7: checksum += data;
+ if(data == '0')
+ {
+ rxState++;
+ dataValueIdx++;
+ dataValue[dataValueIdx] = 0;
+ }
+ else
+ {
+ rxState = SENTRX_Ready;
+ }
+ break;
+ case SENTRX_Data11: rxState = SENTRX_DataComplete;
+ ConvertByteToHexString(checksum,checksum_str);
+ if(data == checksum_str[0])
+ {
+ rxState = SENTRX_DataComplete;
+ }
+ else
+ {
+ rxState = SENTRX_Ready;
+ }
+
+ break;
+
+ case SENTRX_DataComplete: if(data == checksum_str[1])
+ {
+ setExternalInterfaceChannel(0,(float)(dataValue[0] / 10.0));
+ setExternalInterfaceChannel(1,(float)(dataValue[1] / 10.0));
+ setExternalInterfaceChannel(2,(float)(dataValue[2] / 10.0));
+ SentinelConnected = 1;
+ localComState = UART_SENTINEL_OPERATING;
+ }
+ rxState = SENTRX_Ready;
+ break;
+
+
+ default: rxState = SENTRX_Ready;
+ break;
+
+ }
+ externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
+}
+
+uint8_t uartSentinel_isSensorConnected()
+{
+ return SentinelConnected;
+}
+
+#endif
+