# HG changeset patch
# User Ideenmodellierer
# Date 1546541976 -3600
# Node ID 3834b6272ee560b8d18f77246eb34ebfe3b320e0
# Parent 79b19d56ab089a9d88c3d5952c7e8b419ae13b97# Parent 68181cd61f2069d061621c2cd2a6afddb7486f5e
Merge with 68181cd61f2069d061621c2cd2a6afddb7486f5e
diff -r 68181cd61f20 -r 3834b6272ee5 Common/Inc/settings.h
--- a/Common/Inc/settings.h Mon Dec 24 16:19:09 2018 +0300
+++ b/Common/Inc/settings.h Thu Jan 03 19:59:36 2019 +0100
@@ -216,6 +216,9 @@
uint8_t FactoryButtonBase;
uint8_t FactoryButtonBalance[3];
+ /* new in 0xFFFF0018 */
+ uint8_t FlipDisplay;
+
//to be continued
} SSettings;
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Inc/text_multilanguage.h
--- a/Discovery/Inc/text_multilanguage.h Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Inc/text_multilanguage.h Thu Jan 03 19:59:36 2019 +0100
@@ -322,6 +322,7 @@
TXT2BYTE_ApneaTotal,
TXT2BYTE_ApneaSurface,
/* */
+ TXT2BYTE_FLIPDISPLAY,
TXT2BYTE_END
// unused TXT2BYTE_Button1,
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/base.c
--- a/Discovery/Src/base.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/base.c Thu Jan 03 19:59:36 2019 +0100
@@ -25,176 +25,176 @@
//////////////////////////////////////////////////////////////////////////////
/**
- @verbatim
- ==============================================================================
- ##### Firmware Info #####
- ==============================================================================
- [..] In settings.c including text and magic stuff
- ==============================================================================
- ##### IRQs #####
- ==============================================================================
- [..] The IRQs are very important and most functions should only run there.
+@verbatim
+==============================================================================
+ ##### Firmware Info #####
+==============================================================================
+[..] In settings.c including text and magic stuff
+==============================================================================
+ ##### IRQs #####
+==============================================================================
+[..] The IRQs are very important and most functions should only run there.
- PreemptPriority are as follows
- (#) 2 (low) sprintf _only_ here. Don't use in maintask or anywhere else.
- Called by Buttons und Timer3
- Timer3 is 1/10 second
- (#) 1 (mid) anything that should work while in IRQ2 like HalDelay(), VSYNC
- and DMA2D Transfer Complete for housekeepingFrame();
- (#) 0 (high) _very very short_ interrupts like The HAL hardware part for
- spi, uart, i2c.
+ PreemptPriority are as follows
+ (#) 2 (low) sprintf _only_ here. Don't use in maintask or anywhere else.
+ Called by Buttons und Timer3
+ Timer3 is 1/10 second
+ (#) 1 (mid) anything that should work while in IRQ2 like HalDelay(), VSYNC
+ and DMA2D Transfer Complete for housekeepingFrame();
+ (#) 0 (high) _very very short_ interrupts like The HAL hardware part for
+ spi, uart, i2c.
- SubPriority within PreemptPriority give the order to execute.
- Introduced 30.Oct.14 as it used by several HAL examples.
- Three levelAmbients are available (2 low,1 mid,0 high)
+ SubPriority within PreemptPriority give the order to execute.
+ Introduced 30.Oct.14 as it used by several HAL examples.
+ Three levelAmbients are available (2 low,1 mid,0 high)
- The STM32F4 has 4bits for IRQ levelAmbients, divided 2/2 in this code
- with the NVIC_PRIORITYGROUP_2 setting.
+ The STM32F4 has 4bits for IRQ levelAmbients, divided 2/2 in this code
+ with the NVIC_PRIORITYGROUP_2 setting.
- ==============================================================================
- ##### MainTask #####
- ==============================================================================
- [..] For everthing slow without importance to be 'in time'.
- Like VPM and Buehlmann.
- No sprintf and probably no GFX_SetFramesTopBottom() stuff neither.
- If sprintf is called while sprintf is executed it blows up everything.
+==============================================================================
+ ##### MainTask #####
+==============================================================================
+[..] For everthing slow without importance to be 'in time'.
+ Like VPM and Buehlmann.
+ No sprintf and probably no GFX_SetFramesTopBottom() stuff neither.
+ If sprintf is called while sprintf is executed it blows up everything.
- ==============================================================================
- ##### Frames / the external SDRAM #####
- ==============================================================================
- [..] The SDRAM is handled by getFrame() and releaseFrame().
- Each frame with 800*480*2 Bytes.
- Be carefull to release every frame
- otherwise there will be a memory leakage over time.
- housekeepingFrame() in the MainTask takes care of cleaning the frames.
- All frames are filled with 0x00. This will be transparent with color of
- CLUT_Font020 (is CLUT 0) if the alpha is set for a 16bit pair.
- housekeepingFrame() delays the cleaning of frames still used as screen
- buffer to prevent flickering.
+==============================================================================
+ ##### Frames / the external SDRAM #####
+==============================================================================
+[..] The SDRAM is handled by getFrame() and releaseFrame().
+ Each frame with 800*480*2 Bytes.
+ Be carefull to release every frame
+ otherwise there will be a memory leakage over time.
+ housekeepingFrame() in the MainTask takes care of cleaning the frames.
+ All frames are filled with 0x00. This will be transparent with color of
+ CLUT_Font020 (is CLUT 0) if the alpha is set for a 16bit pair.
+ housekeepingFrame() delays the cleaning of frames still used as screen
+ buffer to prevent flickering.
- [..] use global variable frameCounter[] in gfxengine.c to control memory
- all but the last three are identical to caller_id
- for example 0x05 are the menu frames
- the last but one is a sum for higher numbers (shouldn't be any)
- the last but one are those in status RELEASED
- the last are those CLEAR (as of 151202 down to 4 in logbook mode)
+[..] use global variable frameCounter[] in gfxengine.c to control memory
+ all but the last three are identical to caller_id
+ for example 0x05 are the menu frames
+ the last but one is a sum for higher numbers (shouldn't be any)
+ the last but one are those in status RELEASED
+ the last are those CLEAR (as of 151202 down to 4 in logbook mode)
- [..] 4 pages are used for two double memories for screenshots (since Nov. 15)
+[..] 4 pages are used for two double memories for screenshots (since Nov. 15)
- ==============================================================================
- ##### Display #####
- ==============================================================================
- [..] There is a Top layer, Bottom layer and background color.
- All are perfectly alpha-blended by hardware.
+==============================================================================
+ ##### Display #####
+==============================================================================
+[..] There is a Top layer, Bottom layer and background color.
+ All are perfectly alpha-blended by hardware.
- (#) top layer has 800x480 option function calls only
- as it is not used for cursors here
- (#) bottom layer has free size and start option to be used
- for cursors (or sprites in the future ;-)
- (#) background only black in the moment.
- ToDo: Could be anything else for warnings etc.
- if needed
+ (#) top layer has 800x480 option function calls only
+ as it is not used for cursors here
+ (#) bottom layer has free size and start option to be used
+ for cursors (or sprites in the future ;-)
+ (#) background only black in the moment.
+ ToDo: Could be anything else for warnings etc.
+ if needed
- [..] Frame updates, switching and cursors is done with
+[..] Frame updates, switching and cursors is done with
- (#) GFX_SetFramesTopBottom() and the subset
- GFX_SetFrameTop() + GFX_SetFrameBottom()
- Those do not change anything on the display but give commands to..
- (#) GFX_change_LTDC() The only place that changes the pointer.
- This prevents erratic behaviour if several changes
- are made within one refresh rate of the screen.
- Is called in IRQ by PD4 and HAL_GPIO_EXTI_IRQHandler
- from VSYNC signal.
+ (#) GFX_SetFramesTopBottom() and the subset
+ GFX_SetFrameTop() + GFX_SetFrameBottom()
+ Those do not change anything on the display but give commands to..
+ (#) GFX_change_LTDC() The only place that changes the pointer.
+ This prevents erratic behaviour if several changes
+ are made within one refresh rate of the screen.
+ Is called in IRQ by PD4 and HAL_GPIO_EXTI_IRQHandler
+ from VSYNC signal.
- [..] Content
+[..] Content
- (#) Colors by LookupTable only. This could be modified by
- system settings in the future. (gfx_color.h/.c)
+ (#) Colors by LookupTable only. This could be modified by
+ system settings in the future. (gfx_color.h/.c)
- (#) Text by text_multilinguage.h/.c with one char
- necessary only starting from '\x80'
- with automatic language switch by
- selected_language in SSettings
- see openEdit_Language() in tMenuEditSystem.c
- Therefore there are differnent functions
- for example:
- write_label_fix() for single char multilanguage
- write_label_var() for strings that could include
- multilanguage as well
- see GFX_write_string() to get an overview of the controls
- as well as the command list in gfx_engine.h
- There is no clear before writing, text overlay is always on.
- Many options to have LargeFont.SmallFont for numbers etc.
+ (#) Text by text_multilinguage.h/.c with one char
+ necessary only starting from '\x80'
+ with automatic language switch by
+ selected_language in SSettings
+ see openEdit_Language() in tMenuEditSystem.c
+ Therefore there are differnent functions
+ for example:
+ write_label_fix() for single char multilanguage
+ write_label_var() for strings that could include
+ multilanguage as well
+ see GFX_write_string() to get an overview of the controls
+ as well as the command list in gfx_engine.h
+ There is no clear before writing, text overlay is always on.
+ Many options to have LargeFont.SmallFont for numbers etc.
- ==============================================================================
- ##### Update, DualBoot and build-in FLASH memory usage #####
- ==============================================================================
- [..] Boot0 pin, Boot1/PB2 pin and BFB2 software bit control the behaviour.
- PB2 should be tied to GND.
- Boot0 == VDD -> bootloader on start, otherwise boot from Bank1 or Bank2
- depending on BFB2.
- Bank2 contains the Fonts and should contain a proper test code in future
- Bank1 is the main code (Bank1 is 1 MB too, usage as of Oct. 14 is 200 KB)
- [..] Bootloader should be either UART or USB (on FS pins _only_)
- USB HS to FS like on the Eval board does not work.
- [..] Bootloader for the smaller CPU2 is implemented via the SPI used for DMA copy.
+==============================================================================
+ ##### Update, DualBoot and build-in FLASH memory usage #####
+==============================================================================
+[..] Boot0 pin, Boot1/PB2 pin and BFB2 software bit control the behaviour.
+ PB2 should be tied to GND.
+ Boot0 == VDD -> bootloader on start, otherwise boot from Bank1 or Bank2
+ depending on BFB2.
+ Bank2 contains the Fonts and should contain a proper test code in future
+ Bank1 is the main code (Bank1 is 1 MB too, usage as of Oct. 14 is 200 KB)
+[..] Bootloader should be either UART or USB (on FS pins _only_)
+ USB HS to FS like on the Eval board does not work.
+[..] Bootloader for the smaller CPU2 is implemented via the SPI used for DMA copy.
- ==============================================================================
- ##### Connection to CPU2 (STM32F411 as of Oct.14 #####
- ==============================================================================
- [..] Connected via SPI and DMA for every purpose.
- two entire arrays are transfered for data security reasons
- with respect to master (STM32F429) might interrupt internal
- data copy in CPU2 (like hi byte, low byte, etc.).
- [..] The entire life data is calculated in CPU2. Like tissues, CNS,...
- Therefore the main unit is _not_ necessarily a Real Time system.
- Simulation on the main unit can be executed without disrupting life data.
- [..] SPI is triggered and timed by calling DataEX_call() in data_exchange_main.c
- DataEX_copy_to_LifeData() does the transfer from buffer to variables used.
+==============================================================================
+ ##### Connection to CPU2 (STM32F411 as of Oct.14 #####
+==============================================================================
+[..] Connected via SPI and DMA for every purpose.
+ two entire arrays are transfered for data security reasons
+ with respect to master (STM32F429) might interrupt internal
+ data copy in CPU2 (like hi byte, low byte, etc.).
+[..] The entire life data is calculated in CPU2. Like tissues, CNS,...
+ Therefore the main unit is _not_ necessarily a Real Time system.
+ Simulation on the main unit can be executed without disrupting life data.
+[..] SPI is triggered and timed by calling DataEX_call() in data_exchange_main.c
+ DataEX_copy_to_LifeData() does the transfer from buffer to variables used.
- ==============================================================================
- ##### Menu, MenuEdit, Info #####
- ==============================================================================
- [..] tMenu.c, tMenuEdit.c and tInfo.c is the system used.
- logbook is part of Info not Menu.
- The Info Menu is accessed by button 'Back'
- The regular Menu is accessed by button 'Enter'
- [..] Menu content is kept in frame memory for fast access.
- There is no need to build pages if the 'Enter' button is pressed.
- This is in contrast to MenuEdit pages.
- [..] Button control for new pages (and pages in general) have to implemented
- in tMenu.c, tMenuEdit.c or tInfo.c
+==============================================================================
+ ##### Menu, MenuEdit, Info #####
+==============================================================================
+[..] tMenu.c, tMenuEdit.c and tInfo.c is the system used.
+ logbook is part of Info not Menu.
+ The Info Menu is accessed by button 'Back'
+ The regular Menu is accessed by button 'Enter'
+[..] Menu content is kept in frame memory for fast access.
+ There is no need to build pages if the 'Enter' button is pressed.
+ This is in contrast to MenuEdit pages.
+[..] Button control for new pages (and pages in general) have to implemented
+ in tMenu.c, tMenuEdit.c or tInfo.c
- [..] ToDo (Oct. 14) Timeout for menus via Timer3 / IRQ 2
+[..] ToDo (Oct. 14) Timeout for menus via Timer3 / IRQ 2
- ==============================================================================
- ##### settings #####
- ==============================================================================
- [..] files: settings.c, settings.h
- 1. adjust struct SSettings in settings.h
- 2. adjust const SSettings SettingsStandard in settings.c
- 3. adjust set_new_settings_missing_in_ext_flash()
- 4. adjust check_and_correct_settings() IMPORTANT as it changes values!
+==============================================================================
+ ##### settings #####
+==============================================================================
+[..] files: settings.c, settings.h
+ 1. adjust struct SSettings in settings.h
+ 2. adjust const SSettings SettingsStandard in settings.c
+ 3. adjust set_new_settings_missing_in_ext_flash()
+ 4. adjust check_and_correct_settings() IMPORTANT as it changes values!
- ==============================================================================
- ##### specials #####
- ==============================================================================
- [..] There was code for vector graphics from great demos
- (peridiummmm and jupiter) that can be fitted again
+==============================================================================
+ ##### specials #####
+==============================================================================
+[..] There was code for vector graphics from great demos
+ (peridiummmm and jupiter) that can be fitted again
- ==============================================================================
- ##### ppO2 sensors #####
- ==============================================================================
- [..] in tCCR.c is function get_ppO2SensorWeightedResult_cbar();
+==============================================================================
+ ##### ppO2 sensors #####
+==============================================================================
+[..] in tCCR.c is function get_ppO2SensorWeightedResult_cbar();
@endverbatim
- ******************************************************************************
- * @attention
- *
- *
© COPYRIGHT(c) 2014 heinrichs weikamp
- *
- ******************************************************************************
- */
+******************************************************************************
+* @attention
+*
+* © COPYRIGHT(c) 2014 heinrichs weikamp
+*
+******************************************************************************
+*/
/* Includes ------------------------------------------------------------------*/
#include "stdio.h"
@@ -242,13 +242,14 @@
//#include // for malloc and free
/** @addtogroup OSTC 4
- * @{
- */
+ * @{
+ */
/* Private typedef -----------------------------------------------------------*/
//#define NO_TIMEOUT
//#define QUICK_SLEEP
+
/* Private define ------------------------------------------------------------*/
//#define BUFFER_SIZE ((uint32_t)0x00177000)
//#define WRITE_READ_ADDR ((uint32_t)0x0000)
@@ -257,16 +258,16 @@
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
-RTC_HandleTypeDef RtcHandle; /* used to change time and date, no RTC is running on this MCU */
-TIM_HandleTypeDef TimHandle; /* used in stm32f4xx_it.c too */
-TIM_HandleTypeDef TimBacklightHandle; /* used in stm32f4xx_it.c too */
-TIM_HandleTypeDef TimDemoHandle; /* used in stm32f4xx_it.c too */
+RTC_HandleTypeDef RtcHandle; /* used to change time and date, no RTC is running on this MCU */
+TIM_HandleTypeDef TimHandle; /* used in stm32f4xx_it.c too */
+TIM_HandleTypeDef TimBacklightHandle; /* used in stm32f4xx_it.c too */
+TIM_HandleTypeDef TimDemoHandle; /* used in stm32f4xx_it.c too */
/*
- uint32_t time_before;
- uint32_t time_between;
- uint32_t time_after;
- */
+uint32_t time_before;
+uint32_t time_between;
+uint32_t time_after;
+*/
/* SDRAM handler declaration */
SDRAM_HandleTypeDef hsdram;
@@ -276,24 +277,24 @@
/* This was used for Dual Boot */
//FLASH_OBProgramInitTypeDef OBInit;
//FLASH_AdvOBProgramInitTypeDef AdvOBInit;
+
/* Private variables with external access ------------------------------------*/
uint32_t globalStateID = 0;
uint8_t globalModeID = SURFMODE;
uint32_t time_without_button_pressed_deciseconds = 0; /**< langbeschreibung (eigenes Feld) warum diese variable verwendet wird um den sleepmode zu aktivieren */
-uint8_t bootToBootloader = 0;///< set in tComm.c to install firmware updates, calls resetToFirmwareUpdate()
+uint8_t bootToBootloader = 0; ///< set in tComm.c to install firmware updates, calls resetToFirmwareUpdate()
//uint8_t dataEx_VPM_call = 0;
uint8_t returnFromCommCleanUpRequest = 0; ///< use this to exit bluetooth mode and call tComm_exit()
uint32_t base_tempLightLevel = 0;
-uint8_t updateButtonsToDefault = 0;
-uint8_t wasFirmwareUpdateCheckBattery = 0;
+uint8_t updateButtonsToDefault = 0;
+uint8_t wasFirmwareUpdateCheckBattery = 0;
/* Private function prototypes -----------------------------------------------*/
static void SystemClock_Config(void);
static void Error_Handler(void);
-static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram,
- FMC_SDRAM_CommandTypeDef *Command);
+static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command);
static void SDRAM_Config(void);
static void EXTILine_Buttons_Config(void);
static void TIM_init(void);
@@ -305,25 +306,25 @@
/* ITM Trace-------- ---------------------------------------------------------*/
/*
- #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))
- #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
- #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))
+#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))
+#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
+#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))
- #define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
- #define TRCENA 0x01000000
+#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
+#define TRCENA 0x01000000
- struct __FILE { int handle; };
- FILE __stdout;
- FILE __stdin;
+struct __FILE { int handle; };
+FILE __stdout;
+FILE __stdin;
- int fputc(int ch, FILE *f) {
- if (DEMCR & TRCENA) {
- while (ITM_Port32(0) == 0);
- ITM_Port8(0) = ch;
- }
- return(ch);
- }
- */
+int fputc(int ch, FILE *f) {
+ if (DEMCR & TRCENA) {
+ while (ITM_Port32(0) == 0);
+ ITM_Port8(0) = ch;
+ }
+ return(ch);
+}
+*/
// ===============================================================================
// main
@@ -331,172 +332,175 @@
/// for bluetooth and deco calculations
///
// ===============================================================================
-int main(void) {
- uint32_t pLayerInvisible;
- uint16_t totalDiveCounterFound;
+int main(void)
+{
+ uint32_t pLayerInvisible;
+ uint16_t totalDiveCounterFound;
- set_globalState( StBoot0);
+ set_globalState( StBoot0 );
- HAL_Init();
- HAL_NVIC_SetPriorityGrouping( NVIC_PRIORITYGROUP_2);
+ HAL_Init();
+ HAL_NVIC_SetPriorityGrouping( NVIC_PRIORITYGROUP_2 );
- SystemClock_Config();
+ SystemClock_Config();
- MX_GPIO_Init();
- // MX_SmallCPU_NO_Reset_Helper(); //161116 hw
- MX_SPI_Init();
- MX_UART_Init();
- SDRAM_Config();
- HAL_Delay(100);
- GFX_init(&pLayerInvisible);
+ MX_GPIO_Init();
+ // MX_SmallCPU_NO_Reset_Helper(); //161116 hw
+ MX_SPI_Init();
+ MX_UART_Init();
+ SDRAM_Config();
+ HAL_Delay( 100 );
+ GFX_init( &pLayerInvisible );
- TIM_init();
- TIM_BACKLIGHT_init();
+ TIM_init();
+ TIM_BACKLIGHT_init();
- /*
- GFX_helper_font_memory_list(&FontT24);
- GFX_helper_font_memory_list(&FontT42);
- GFX_helper_font_memory_list(&FontT48);
- GFX_helper_font_memory_list(&FontT54);
- GFX_helper_font_memory_list(&FontT84);
- GFX_helper_font_memory_list(&FontT105);
- GFX_helper_font_memory_list(&FontT144);
- */
+ /*
+ GFX_helper_font_memory_list(&FontT24);
+ GFX_helper_font_memory_list(&FontT42);
+ GFX_helper_font_memory_list(&FontT48);
+ GFX_helper_font_memory_list(&FontT54);
+ GFX_helper_font_memory_list(&FontT84);
+ GFX_helper_font_memory_list(&FontT105);
+ GFX_helper_font_memory_list(&FontT144);
+ */
- stateRealGetPointerWrite()->lastKnownBatteryPercentage = 0; // damit das nicht in settings kopiert wird.
- set_settings_to_Standard();
- mod_settings_for_first_start_with_empty_ext_flash();
- ext_flash_read_settings();
- if (newFirmwareVersionCheckViaSettings()) // test for old firmware version in loaded settings
- {
- wasFirmwareUpdateCheckBattery = 1;
- set_settings_button_to_standard_with_individual_buttonBalance(); // will adapt individual values
- }
- //settingsGetPointer()->bluetoothActive = 0; /* MX_Bluetooth_PowerOff(); unnecessary as part of MX_GPIO_Init() */
- //settingsGetPointer()->compassBearing = 0;
- set_new_settings_missing_in_ext_flash(); // inlcudes update of firmware version 161121
+ stateRealGetPointerWrite()->lastKnownBatteryPercentage = 0; // damit das nicht in settings kopiert wird.
+ set_settings_to_Standard();
+ mod_settings_for_first_start_with_empty_ext_flash();
+ ext_flash_read_settings();
+ if( newFirmwareVersionCheckViaSettings() ) // test for old firmware version in loaded settings
+ {
+ wasFirmwareUpdateCheckBattery = 1;
+ set_settings_button_to_standard_with_individual_buttonBalance(); // will adapt individual values
+ }
+ //settingsGetPointer()->bluetoothActive = 0; /* MX_Bluetooth_PowerOff(); unnecessary as part of MX_GPIO_Init() */
+ //settingsGetPointer()->compassBearing = 0;
+ set_new_settings_missing_in_ext_flash(); // inlcudes update of firmware version 161121
- // new 170508: bluetooth on at start
- settingsGetPointer()->bluetoothActive = 1;
- MX_Bluetooth_PowerOn();
+ // new 170508: bluetooth on at start
+ settingsGetPointer()->bluetoothActive = 1;
+ MX_Bluetooth_PowerOn();
- // Haase Geburtstag:
- // settingsGetPointer()->serialHigh = (3012 / 256);
- // settingsGetPointer()->serialLow = (3012 & 0xFF);
+ // Haase Geburtstag:
+ // settingsGetPointer()->serialHigh = (3012 / 256);
+ // settingsGetPointer()->serialLow = (3012 & 0xFF);
- // settingsGetPointer()->showDebugInfo = 1;
+ // settingsGetPointer()->showDebugInfo = 1;
- /*
- if(settingsGetPointer()->scooterControl)
- {
- settingsGetPointer()->bluetoothActive = 1;
- MX_Bluetooth_PowerOn();
- if(settingsGetPointer()->scooterDeviceAddress[0] != 0)
- bC_setConnectRequest();
- }
- */
- /*
- if( (hardwareDataGetPointer()->primarySerial == 20+18)
- || (hardwareDataGetPointer()->primarySerial == 20+25)
- || (hardwareDataGetPointer()->primarySerial == 20+27))
- {
- MX_Bluetooth_PowerOn();
- tComm_Set_Bluetooth_Name(1);
- }
- */
- errorsInSettings = check_and_correct_settings();
- createDiveSettings();
+ /*
+ if(settingsGetPointer()->scooterControl)
+ {
+ settingsGetPointer()->bluetoothActive = 1;
+ MX_Bluetooth_PowerOn();
+ if(settingsGetPointer()->scooterDeviceAddress[0] != 0)
+ bC_setConnectRequest();
+ }
+ */
+ /*
+ if( (hardwareDataGetPointer()->primarySerial == 20+18)
+ || (hardwareDataGetPointer()->primarySerial == 20+25)
+ || (hardwareDataGetPointer()->primarySerial == 20+27))
+ {
+ MX_Bluetooth_PowerOn();
+ tComm_Set_Bluetooth_Name(1);
+ }
+ */
+ errorsInSettings = check_and_correct_settings();
+ createDiveSettings();
#ifdef QUICK_SLEEP
- settingsGetPointer()->timeoutSurfacemode = 20;
+ settingsGetPointer()->timeoutSurfacemode = 20;
#else
- settingsGetPointer()->timeoutSurfacemode = 120;
+ settingsGetPointer()->timeoutSurfacemode = 120;
#endif
#ifdef DEMOMODE
- demoConfigureSettings();
- TIM_DEMO_init();
+ demoConfigureSettings();
+ TIM_DEMO_init();
#endif
// -----------------------------
- display_power_on__1_of_2__pre_RGB();
- GFX_LTDC_Init();
- GFX_LTDC_LayerDefaultInit( TOP_LAYER, pLayerInvisible);
- GFX_LTDC_LayerDefaultInit( BACKGRD_LAYER, pLayerInvisible);
- GFX_SetFramesTopBottom(pLayerInvisible, pLayerInvisible, 480);
- HAL_Delay(20);
- display_power_on__2_of_2__post_RGB();
- GFX_use_colorscheme(settingsGetPointer()->tX_colorscheme);
+ display_power_on__1_of_2__pre_RGB();
+ GFX_LTDC_Init();
+ GFX_LTDC_LayerDefaultInit( TOP_LAYER, pLayerInvisible );
+ GFX_LTDC_LayerDefaultInit( BACKGRD_LAYER, pLayerInvisible );
+ GFX_SetFramesTopBottom( pLayerInvisible, pLayerInvisible, 480 );
+ HAL_Delay( 20 );
+ display_power_on__2_of_2__post_RGB();
+ GFX_use_colorscheme( settingsGetPointer()->tX_colorscheme );
// -----------------------------
- tHome_init();
- tI_init();
- tM_init();
- tMenuEdit_init();
- tInfoLog_init();
- tComm_init();
- DataEX_init();
- setButtonResponsiveness(settingsGetPointer()->ButtonResponsiveness);
- set_globalState_tHome();
+ tHome_init();
+ tI_init();
+ tM_init();
+ tMenuEdit_init();
+ tInfoLog_init();
+ tComm_init();
+ DataEX_init();
+ setButtonResponsiveness( settingsGetPointer()->ButtonResponsiveness );
+ set_globalState_tHome();
- GFX_start_VSYNC_IRQ();
- tCCR_init();
+ GFX_start_VSYNC_IRQ();
+ tCCR_init();
+
+ GFX_logoAutoOff();
+ EXTILine_Buttons_Config();
- GFX_logoAutoOff();
- EXTILine_Buttons_Config();
+ ext_flash_repair_dive_log();
+ //ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(1);
- ext_flash_repair_dive_log();
- //ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(1);
+ totalDiveCounterFound = logbook_lastDive_diveNumber();
+ if( settingsGetPointer()->totalDiveCounter < totalDiveCounterFound )
+ settingsGetPointer()->totalDiveCounter = totalDiveCounterFound;
- totalDiveCounterFound = logbook_lastDive_diveNumber();
- if (settingsGetPointer()->totalDiveCounter < totalDiveCounterFound)
- settingsGetPointer()->totalDiveCounter = totalDiveCounterFound;
-
- if (settingsGetPointer()->debugModeOnStart) {
- settingsGetPointer()->debugModeOnStart = 0;
- ext_flash_write_settings();
- setDebugMode();
- openInfo( StIDEBUG);
- }
+ if( settingsGetPointer()->debugModeOnStart )
+ {
+ settingsGetPointer()->debugModeOnStart = 0;
+ ext_flash_write_settings();
+ setDebugMode();
+ openInfo( StIDEBUG );
+ }
- /* @brief main LOOP
- *
- * this is executed while no IRQ interrupts it
- * - deco calculation
- * - bluetooth
- * and resetToFirmwareUpdate()
- * because tComm_control() does not exit before disconnection
- */
- while (1) {
- if (bootToBootloader)
- resetToFirmwareUpdate();
+ /* @brief main LOOP
+ *
+ * this is executed while no IRQ interrupts it
+ * - deco calculation
+ * - bluetooth
+ * and resetToFirmwareUpdate()
+ * because tComm_control() does not exit before disconnection
+ */
+ while( 1 )
+ {
+ if( bootToBootloader )
+ resetToFirmwareUpdate();
- // this will allways reset after RTE reset -> no good!
+ // this will allways reset after RTE reset -> no good!
// if(DataEX_was_power_on()) // new to allow for update after RTE update
// resetToFirmwareUpdate();
- tCCR_control();
- if (tComm_control()) // will stop while loop if tComm Mode started until exit from UART
- {
- createDiveSettings();
- updateMenu();
- ext_flash_write_settings();
- }
- deco_loop();
- /*
- bonexControl();
- if(bC_getStatus() == BC_DISCONNECTED)
- {
- if(tComm_control()) // will stop while loop if tComm Mode started until exit from UART
- {
- createDiveSettings();
- updateMenu();
- ext_flash_write_settings();
- }
- }
- */
- }
+ tCCR_control();
+ if( tComm_control() )// will stop while loop if tComm Mode started until exit from UART
+ {
+ createDiveSettings();
+ updateMenu();
+ ext_flash_write_settings();
+ }
+ deco_loop();
+ /*
+ bonexControl();
+ if(bC_getStatus() == BC_DISCONNECTED)
+ {
+ if(tComm_control()) // will stop while loop if tComm Mode started until exit from UART
+ {
+ createDiveSettings();
+ updateMenu();
+ ext_flash_write_settings();
+ }
+ }
+ */
+ }
}
// ===============================================================================
@@ -514,245 +518,248 @@
/// to be called
///
// ===============================================================================
-void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
-// DataEX_call();
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
+{
#ifdef DEMOMODE
- if(htim->Instance==TIM7)
- {
- HAL_GPIO_EXTI_Callback(demoGetCommand());
- return;
- }
+ if(htim->Instance==TIM7)
+ {
+ HAL_GPIO_EXTI_Callback(demoGetCommand());
+ return;
+ }
#endif
- static uint8_t last_base;
+ static uint8_t last_base;
- SStateList status;
- uint32_t timeout_in_seconds;
- uint32_t timeout_limit_Surface_in_seconds;
+ SStateList status;
+ uint32_t timeout_in_seconds;
+ uint32_t timeout_limit_Surface_in_seconds;
- _Bool InDiveMode = 0;
- _Bool modeChange = 0; // to exit from menu and logbook
+ _Bool InDiveMode = 0;
+ _Bool modeChange = 0; // to exit from menu and logbook
- if (stateUsed->mode == MODE_DIVE)
- InDiveMode = 1;
- else
- InDiveMode = 0;
+ if(stateUsed->mode == MODE_DIVE)
+ InDiveMode = 1;
+ else
+ InDiveMode = 0;
- if (returnFromCommCleanUpRequest) {
- tComm_exit();
- returnFromCommCleanUpRequest = 0;
- }
+ if(returnFromCommCleanUpRequest)
+ {
+ tComm_exit();
+ returnFromCommCleanUpRequest = 0;
+ }
- get_globalStateList(&status);
+ get_globalStateList(&status);
- switch (status.base) {
- case BaseHome:
- case BaseMenu:
- case BaseInfo:
- updateSetpointStateUsed();
- DateEx_copy_to_dataOut();
- DataEX_call();
- DataEX_copy_to_LifeData(&modeChange);
+ switch(status.base)
+ {
+ case BaseHome:
+ case BaseMenu:
+ case BaseInfo:
+ updateSetpointStateUsed();
+ DateEx_copy_to_dataOut();
+ DataEX_call();
+ DataEX_copy_to_LifeData(&modeChange);
//foto session :-) stateRealGetPointerWrite()->lifeData.battery_charge = 99;
//foto session :-) stateSimGetPointerWrite()->lifeData.battery_charge = 99;
- DataEX_copy_to_deco();
- if (stateUsed == stateSimGetPointer())
- simulation_UpdateLifeData(1);
- check_warning();
- if (stateUsed == stateRealGetPointer())
- logbook_InitAndWrite();
- updateMiniLiveLogbook(1);
- timer_UpdateSecond(1);
- base_tempLightLevel = TIM_BACKLIGHT_adjust();
- tCCR_tick();
- tHome_tick();
- if (status.base == BaseHome)
- tMenuEdit_writeSettingsToFlash(); // takes 900 ms!!
- break;
- case BaseStop:
- DateEx_copy_to_dataOut();
- DataEX_call();
- DataEX_control_connection_while_asking_for_sleep();
- break;
- default:
- case BaseComm:
- if (get_globalState() == StUART_RTECONNECT) {
- DateEx_copy_to_dataOut();
- DataEX_call();
- DataEX_copy_to_LifeData(0);
- }
- break;
- }
+ DataEX_copy_to_deco();
+ if(stateUsed == stateSimGetPointer())
+ simulation_UpdateLifeData(1);
+ check_warning();
+ if(stateUsed == stateRealGetPointer())
+ logbook_InitAndWrite();
+ updateMiniLiveLogbook(1);
+ timer_UpdateSecond(1);
+base_tempLightLevel = TIM_BACKLIGHT_adjust();
+ tCCR_tick();
+ tHome_tick();
+ if(status.base == BaseHome)
+ tMenuEdit_writeSettingsToFlash(); // takes 900 ms!!
+ break;
+ case BaseStop:
+ DateEx_copy_to_dataOut();
+ DataEX_call();
+ DataEX_control_connection_while_asking_for_sleep();
+ break;
+ default:
+ case BaseComm:
+ if(get_globalState() == StUART_RTECONNECT)
+ {
+ DateEx_copy_to_dataOut();
+ DataEX_call();
+ DataEX_copy_to_LifeData(0);
+ }
+ break;
+ }
- /* timeout control */
- if (modeChange) ///< from RTE, set in data_exchange_main.c
- time_without_button_pressed_deciseconds =
- (settingsGetPointer()->timeoutSurfacemode / 4) * 3;
- if (status.base != last_base)
- time_without_button_pressed_deciseconds = 0;
- last_base = status.base;
- timeout_in_seconds = time_without_button_pressed_deciseconds / 10;
- time_without_button_pressed_deciseconds += 1;
- if (modeChange
- || (timeout_in_seconds
- != time_without_button_pressed_deciseconds / 10)) {
+ /* timeout control */
+ if(modeChange) ///< from RTE, set in data_exchange_main.c
+ time_without_button_pressed_deciseconds = (settingsGetPointer()->timeoutSurfacemode / 4) * 3;
+ if(status.base != last_base)
+ time_without_button_pressed_deciseconds = 0;
+ last_base = status.base;
+ timeout_in_seconds = time_without_button_pressed_deciseconds / 10;
+ time_without_button_pressed_deciseconds += 1;
+ if(modeChange || (timeout_in_seconds != time_without_button_pressed_deciseconds / 10))
+ {
#ifdef NO_TIMEOUT
- timeout_in_seconds = 0;
+ timeout_in_seconds = 0;
#else
- timeout_in_seconds += 1;
+ timeout_in_seconds += 1;
#endif
- if (InDiveMode) {
- switch (status.base) {
- case BaseHome:
- if ((status.line != 0)
- && (timeout_in_seconds
- >= settingsGetPointer()->timeoutEnterButtonSelectDive)) {
- set_globalState(StD);
- timeout_in_seconds = 0;
- }
- break;
-
- case BaseMenu:
- if ((status.line == 0)
- && ((timeout_in_seconds
- >= settingsGetPointer()->timeoutMenuDive)
- || modeChange)) {
- exitMenu();
- timeout_in_seconds = 0;
- }
- if ((status.line != 0)
- && ((timeout_in_seconds
- >= settingsGetPointer()->timeoutMenuEdit)
- || modeChange)) {
- exitMenuEdit_to_Home();
- timeout_in_seconds = 0;
- }
- break;
- /* why was this here? 160317 hw
- case BaseInfo:
- if(status.page == InfoPageLogList)
- {
- exitLog();
- }
- else
- if(status.page == InfoPageLogShow)
- {
- show_logbook_exit();
- exitLog();
- }
- else
- if(status.page != InfoPageCompass)
- {
- exitInfo();
- }
- timeout_in_seconds = 0;
- break;
- */
- default:
- break;
- }
- } else /* surface mode */
- {
- switch (status.base) {
- case BaseHome:
- // added hw 161027
- if (!(stateRealGetPointer()->warnings.lowBattery) && (stateRealGetPointer()->lifeData.battery_charge > 9)) {
- stateRealGetPointerWrite()->lastKnownBatteryPercentage =stateRealGetPointer()->lifeData.battery_charge;
- } else if ((wasFirmwareUpdateCheckBattery) && (timeout_in_seconds > 3)) {
- wasFirmwareUpdateCheckBattery = 0;
- setButtonResponsiveness(settingsGetPointer()->ButtonResponsiveness); // added 170306
- if ((settingsGetPointer()->lastKnownBatteryPercentage > 0) &&
- (settingsGetPointer()->lastKnownBatteryPercentage <= 100) &&
- (stateRealGetPointer()->warnings.lowBattery))
- {
-// If PowerOff, and battery is <=100, and lifeData.battery_charge < 10 - ALWAYS!!! set DataOutnewBatteryGaugePercentageFloat
-// Need to fix in smallCPU handled. Compeled.
- //upd.Fixed.
- setBatteryPercentage(settingsGetPointer()->lastKnownBatteryPercentage);
+ if(InDiveMode)
+ {
+ switch(status.base)
+ {
+ case BaseHome:
+ if((status.line != 0) && (timeout_in_seconds >= settingsGetPointer()->timeoutEnterButtonSelectDive))
+ {
+ set_globalState(StD);
+ timeout_in_seconds = 0;
+ }
+ break;
- }
- }
- // stuff before and new @161121 CCR-sensor limit 10 minutes
- if ((settingsGetPointer()->dive_mode == DIVEMODE_CCR)
- && (settingsGetPointer()->CCR_Mode == CCRMODE_Sensors)) {
- timeout_limit_Surface_in_seconds =
- settingsGetPointer()->timeoutSurfacemodeWithSensors;
- } else {
- timeout_limit_Surface_in_seconds =
- settingsGetPointer()->timeoutSurfacemode;
- }
- if (timeout_in_seconds >= timeout_limit_Surface_in_seconds) {
- gotoSleep();
- }
- break;
- case BaseMenu:
- if ((status.line == 0)
- && ((timeout_in_seconds
- >= settingsGetPointer()->timeoutMenuSurface)
- || modeChange)) {
- exitMenu();
- timeout_in_seconds = 0;
- }
- if ((status.line != 0)
- && ((timeout_in_seconds
- >= settingsGetPointer()->timeoutMenuEdit)
- || modeChange)) {
- if ((status.page != (uint8_t) ((StMPLAN >> 24) & 0x0F))
- || (timeout_in_seconds
- >= 10
- * (settingsGetPointer()->timeoutMenuEdit))) {
- exitMenuEdit_to_Home();
- timeout_in_seconds = 0;
- }
- }
- break;
+ case BaseMenu:
+ if((status.line == 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuDive) || modeChange))
+ {
+ exitMenu();
+ timeout_in_seconds = 0;
+ }
+ if((status.line != 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuEdit) || modeChange))
+ {
+ exitMenuEdit_to_Home();
+ timeout_in_seconds = 0;
+ }
+ break;
+/* why was this here? 160317 hw
+ case BaseInfo:
+ if(status.page == InfoPageLogList)
+ {
+ exitLog();
+ }
+ else
+ if(status.page == InfoPageLogShow)
+ {
+ show_logbook_exit();
+ exitLog();
+ }
+ else
+ if(status.page != InfoPageCompass)
+ {
+ exitInfo();
+ }
+ timeout_in_seconds = 0;
+ break;
+*/
+ default:
+ break;
+ }
+ }
+ else /* surface mode */
+ {
+ switch(status.base)
+ {
+ case BaseHome:
+ // added hw 161027
+ if(!(stateRealGetPointer()->warnings.lowBattery) && (stateRealGetPointer()->lifeData.battery_charge > 9))
+ {
+ stateRealGetPointerWrite()->lastKnownBatteryPercentage = stateRealGetPointer()->lifeData.battery_charge;
+ }
+ else if((wasFirmwareUpdateCheckBattery) && (timeout_in_seconds > 3))
+ {
+ wasFirmwareUpdateCheckBattery = 0;
+ setButtonResponsiveness(settingsGetPointer()->ButtonResponsiveness); // added 170306
+ if( (settingsGetPointer()->lastKnownBatteryPercentage > 0)
+ && (settingsGetPointer()->lastKnownBatteryPercentage <= 100)
+ && (stateRealGetPointer()->warnings.lowBattery))
+ {
+ setBatteryPercentage(settingsGetPointer()->lastKnownBatteryPercentage);
+ }
+ }
+ // stuff before and new @161121 CCR-sensor limit 10 minutes
+ if((settingsGetPointer()->dive_mode == DIVEMODE_CCR) && (settingsGetPointer()->CCR_Mode == CCRMODE_Sensors))
+ {
+ timeout_limit_Surface_in_seconds = settingsGetPointer()->timeoutSurfacemodeWithSensors;
+ }
+ else
+ {
+ timeout_limit_Surface_in_seconds = settingsGetPointer()->timeoutSurfacemode;
+ }
+ if(timeout_in_seconds >= timeout_limit_Surface_in_seconds)
+ {
+ gotoSleep();
+ }
+ break;
+ case BaseMenu:
+ if((status.line == 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuSurface) || modeChange))
+ {
+ exitMenu();
+ timeout_in_seconds = 0;
+ }
+ if((status.line != 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuEdit) || modeChange))
+ {
+ if((status.page != (uint8_t)((StMPLAN >> 24) & 0x0F)) || (timeout_in_seconds >= 10*(settingsGetPointer()->timeoutMenuEdit)))
+ {
+ exitMenuEdit_to_Home();
+ timeout_in_seconds = 0;
+ }
+ }
+ break;
- case BaseInfo:
- if ((timeout_in_seconds >= settingsGetPointer()->timeoutInfo)
- || modeChange) {
- if (status.page == InfoPageLogList) {
- exitLog();
- timeout_in_seconds = 0;
- } else if (status.page == InfoPageLogShow) {
- show_logbook_exit();
- exitLog();
- timeout_in_seconds = 0;
- } else if (status.page != InfoPageCompass) {
- exitInfo();
- timeout_in_seconds = 0;
- }
- }
- break;
- default:
- break;
- }
- }
- }
+ case BaseInfo:
+ if((timeout_in_seconds >= settingsGetPointer()->timeoutInfo) || modeChange)
+ {
+ if(status.page == InfoPageLogList)
+ {
+ exitLog();
+ timeout_in_seconds = 0;
+ }
+ else
+ if(status.page == InfoPageLogShow)
+ {
+ show_logbook_exit();
+ exitLog();
+ timeout_in_seconds = 0;
+ }
+ else
+ if(status.page != InfoPageCompass)
+ {
+ exitInfo();
+ timeout_in_seconds = 0;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
- get_globalStateList(&status);
+ get_globalStateList(&status);
- switch (status.base) {
- case BaseHome:
- tHome_refresh();
- tM_check_content();
- break;
- case BaseMenu:
- tM_refresh_live_content();
- tMenuEdit_refresh_live_content();
- break;
- case BaseInfo:
- tInfo_refresh(); ///< only compass at the moment 23.Feb.2015 hw
- break;
- case BaseComm:
- tComm_refresh();
- break;
- default:
- if (get_globalState() == StStop)
- tHome_sleepmode_fun();
- break;
- }
+ switch(status.base)
+ {
+ case BaseHome:
+ tHome_refresh();
+ tM_check_content();
+ break;
+ case BaseMenu:
+ tM_refresh_live_content();
+ tMenuEdit_refresh_live_content();
+ break;
+ case BaseInfo:
+ tInfo_refresh(); ///< only compass at the moment 23.Feb.2015 hw
+ break;
+ case BaseComm:
+ tComm_refresh();
+ break;
+ default:
+ if(get_globalState() == StStop)
+ tHome_sleepmode_fun();
+ break;
+ }
}
+
/* button and VSYNC IRQ
*
* VSYNC will switch foreground and background picture
@@ -792,6 +799,27 @@
*/
return;
}
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+ if (GPIO_Pin == VSYNC_IRQ_PIN) // rechts, unten
+ {
+ GFX_change_LTDC();
+ housekeepingFrame();
+ /*
+ #ifdef DEMOMODE
+ static uint8_t countCall = 0;
+ if(countCall++ < 10)
+ return;
+ countCall = 0;
+ uint8_t buttonAction = demoGetCommand();
+ if(buttonAction)
+ GPIO_Pin = buttonAction;
+ else
+ #endif
+ */
+ return;
+ }
#ifdef DEMOMODE
uint8_t demoMachineCall = 0;
@@ -828,11 +856,35 @@
}
}
-#ifdef BUTTON_CUSTOM_PIN
- else
- if(GPIO_Pin == BUTTON_CUSTOM_PIN) // extra
- action = ACTION_BUTTON_CUSTOM;
-#endif
+ if(GPIO_Pin == BUTTON_BACK_PIN) // links
+ {
+ if(!pSettings->FlipDisplay)
+ {
+ action = ACTION_BUTTON_BACK;
+ }
+ else
+ {
+ action = ACTION_BUTTON_NEXT;
+ }
+ }
+ else
+ {
+ if(GPIO_Pin == BUTTON_ENTER_PIN) // mitte
+ action = ACTION_BUTTON_ENTER;
+ else
+ {
+ if(GPIO_Pin == BUTTON_NEXT_PIN) // rechts
+ {
+ if(!pSettings->FlipDisplay) action = ACTION_BUTTON_NEXT;
+ else action = ACTION_BUTTON_BACK;
+ }
+ }
+ }
+ #ifdef BUTTON_CUSTOM_PIN
+ else
+ if(GPIO_Pin == BUTTON_CUSTOM_PIN) // extra
+ action = ACTION_BUTTON_CUSTOM;
+ #endif
#ifdef DEMOMODE // user pressed button ?
if((!demoMachineCall) && demoModeActive())
@@ -913,209 +965,241 @@
}
}
-void gotoSleep(void) {
- /* not at the moment of testing */
+
+void gotoSleep(void)
+{
+ /* not at the moment of testing */
// ext_flash_erase_firmware_if_not_empty();
- GFX_logoAutoOff();
- set_globalState(StStop);
+ GFX_logoAutoOff();
+ set_globalState(StStop);
}
+
// -----------------------------
-uint8_t get_globalMode(void) {
- return globalModeID;
+uint8_t get_globalMode(void)
+{
+ return globalModeID;
}
-void set_globalMode(uint8_t newMode) {
- if ((newMode != DIVEMODE) && (newMode != SURFMODE))
- return;
- globalModeID = newMode;
+void set_globalMode(uint8_t newMode)
+{
+ if((newMode != DIVEMODE) && (newMode != SURFMODE))
+ return;
+
+ globalModeID = newMode;
}
-uint32_t get_globalState(void) {
- return globalStateID;
+
+uint32_t get_globalState(void)
+{
+ return globalStateID;
}
-void get_globalStateList(SStateList *output) {
- output->base = (uint8_t) ((globalStateID >> 28) & 0x0F);
- output->page = (uint8_t) ((globalStateID >> 24) & 0x0F);
- output->line = (uint8_t) ((globalStateID >> 16) & 0xFF);
- output->field = (uint8_t) ((globalStateID >> 8) & 0xFF);
- output->mode = (uint8_t) ((globalStateID) & 0xFF);
+
+void get_globalStateList(SStateList *output)
+{
+ output->base = (uint8_t)((globalStateID >> 28) & 0x0F);
+ output->page = (uint8_t)((globalStateID >> 24) & 0x0F);
+ output->line = (uint8_t)((globalStateID >> 16) & 0xFF);
+ output->field = (uint8_t)((globalStateID >> 8) & 0xFF);
+ output->mode = (uint8_t)((globalStateID ) & 0xFF);
}
-void get_idSpecificStateList(uint32_t id, SStateList *output) {
- output->base = (uint8_t) ((id >> 28) & 0x0F);
- output->page = (uint8_t) ((id >> 24) & 0x0F);
- output->line = (uint8_t) ((id >> 16) & 0xFF);
- output->field = (uint8_t) ((id >> 8) & 0xFF);
- output->mode = (uint8_t) ((id) & 0xFF);
+
+void get_idSpecificStateList(uint32_t id, SStateList *output)
+{
+ output->base = (uint8_t)((id >> 28) & 0x0F);
+ output->page = (uint8_t)((id >> 24) & 0x0F);
+ output->line = (uint8_t)((id >> 16) & 0xFF);
+ output->field = (uint8_t)((id >> 8) & 0xFF);
+ output->mode = (uint8_t)((id ) & 0xFF);
}
-void set_globalState_Menu_Page(uint8_t page) {
- globalStateID = ((BaseMenu << 28) + (page << 24));
+
+void set_globalState_Menu_Page(uint8_t page)
+{
+ globalStateID = ((BaseMenu << 28) + (page << 24));
}
-void set_globalState_Log_Page(uint8_t pageIsLine) {
- globalStateID = StILOGLIST + (pageIsLine << 16);
+void set_globalState_Log_Page(uint8_t pageIsLine)
+{
+ globalStateID = StILOGLIST + (pageIsLine << 16);
}
-void set_globalState_Menu_Line(uint8_t line) {
- globalStateID = ((globalStateID & MaskLineFieldDigit) + (line << 16));
+
+void set_globalState_Menu_Line(uint8_t line)
+{
+ globalStateID = ((globalStateID & MaskLineFieldDigit) + (line << 16));
}
-void set_globalState(uint32_t newID) {
- globalStateID = newID;
+
+void set_globalState(uint32_t newID)
+{
+ globalStateID = newID;
}
-void set_returnFromComm(void) {
- returnFromCommCleanUpRequest = 1;
+void set_returnFromComm(void)
+{
+ returnFromCommCleanUpRequest = 1;
}
-uint8_t font_update_required(void) {
- uint8_t *fontVersionHigh;
- uint8_t *fontVersionLow;
+uint8_t font_update_required(void)
+{
+ uint8_t *fontVersionHigh;
+ uint8_t *fontVersionLow;
- fontVersionHigh = (uint8_t *) 0x08132000;
- fontVersionLow = (uint8_t *) 0x08132001;
+ fontVersionHigh = (uint8_t *)0x08132000;
+ fontVersionLow = (uint8_t *)0x08132001;
- if (FONTminimum_required_high() < *fontVersionHigh)
- return 0;
+ if(FONTminimum_required_high() < *fontVersionHigh)
+ return 0;
- if ((FONTminimum_required_high() == *fontVersionHigh)
- && (FONTminimum_required_low() <= *fontVersionLow))
- return 0;
+ if((FONTminimum_required_high() == *fontVersionHigh) && (FONTminimum_required_low() <= *fontVersionLow))
+ return 0;
- return 1;
+ return 1;
}
-void delayMicros(uint32_t micros) {
- micros = micros * (168 / 4) - 10;
- while (micros--)
- ;
+
+void delayMicros(uint32_t micros)
+{
+ micros = micros * (168/4) - 10;
+ while(micros--);
}
-void get_RTC_DateTime(RTC_DateTypeDef * sdatestructureget,
- RTC_TimeTypeDef * stimestructureget) {
- /* Get the RTC current Time */
- if (sdatestructureget)
- HAL_RTC_GetTime(&RtcHandle, stimestructureget, FORMAT_BIN);
- /* Get the RTC current Date */
- if (stimestructureget)
- HAL_RTC_GetDate(&RtcHandle, sdatestructureget, FORMAT_BIN);
+
+void get_RTC_DateTime(RTC_DateTypeDef * sdatestructureget, RTC_TimeTypeDef * stimestructureget)
+{
+ /* Get the RTC current Time */
+ if(sdatestructureget)
+ HAL_RTC_GetTime(&RtcHandle, stimestructureget, FORMAT_BIN);
+ /* Get the RTC current Date */
+ if(stimestructureget)
+ HAL_RTC_GetDate(&RtcHandle, sdatestructureget, FORMAT_BIN);
}
-void set_RTC_DateTime(RTC_DateTypeDef * sdatestructure,
- RTC_TimeTypeDef * stimestructure) {
- if (sdatestructure)
- if (HAL_RTC_SetDate(&RtcHandle, sdatestructure, FORMAT_BCD) != HAL_OK) {
- /* Initialization Error */
- Error_Handler();
- }
- if (stimestructure)
- if (HAL_RTC_SetTime(&RtcHandle, stimestructure, FORMAT_BCD) != HAL_OK) {
- /* Initialization Error */
- Error_Handler();
- }
+void set_RTC_DateTime(RTC_DateTypeDef * sdatestructure, RTC_TimeTypeDef * stimestructure)
+{
+ if(sdatestructure)
+ if(HAL_RTC_SetDate(&RtcHandle,sdatestructure,FORMAT_BCD) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
+
+ if(stimestructure)
+ if(HAL_RTC_SetTime(&RtcHandle,stimestructure,FORMAT_BCD) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
}
-static void TIM_init(void) {
- uint16_t uwPrescalerValue = 0;
+static void TIM_init(void)
+{
+ uint16_t uwPrescalerValue = 0;
- uwPrescalerValue = (uint32_t) ((SystemCoreClock / 2) / 10000) - 1;
+ uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1;
- /* Set TIMx instance */
- TimHandle.Instance = TIMx;
+ /* Set TIMx instance */
+ TimHandle.Instance = TIMx;
- /* Initialize TIM3 peripheral as follows:
- + Period = 10000 - 1
- + Prescaler = ((SystemCoreClock/2)/10000) - 1
- + ClockDivision = 0
- + Counter direction = Up
- */
- TimHandle.Init.Period = 1000 - 1;
- TimHandle.Init.Prescaler = uwPrescalerValue;
- TimHandle.Init.ClockDivision = 0;
- TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
- if (HAL_TIM_Base_Init(&TimHandle) != HAL_OK) {
- /* Initialization Error */
- Error_Handler();
- }
+ /* Initialize TIM3 peripheral as follows:
+ + Period = 10000 - 1
+ + Prescaler = ((SystemCoreClock/2)/10000) - 1
+ + ClockDivision = 0
+ + Counter direction = Up
+ */
+ TimHandle.Init.Period = 1000 - 1;
+ TimHandle.Init.Prescaler = uwPrescalerValue;
+ TimHandle.Init.ClockDivision = 0;
+ TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
+ if(HAL_TIM_Base_Init(&TimHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
- /*##-2- Start the TIM Base generation in interrupt mode ####################*/
- /* Start Channel1 */
- if (HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK) {
- /* Starting Error */
- Error_Handler();
- }
+ /*##-2- Start the TIM Base generation in interrupt mode ####################*/
+ /* Start Channel1 */
+ if(HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK)
+ {
+ /* Starting Error */
+ Error_Handler();
+ }
}
#ifdef DEMOMODE
static void TIM_DEMO_init(void)
{
- uint16_t uwPrescalerValue = 0;
+ uint16_t uwPrescalerValue = 0;
- uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1;
+ uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1;
- /* Set TIMx instance */
- TimDemoHandle.Instance = TIM7;
+ /* Set TIMx instance */
+ TimDemoHandle.Instance = TIM7;
- /* Initialize TIM3 peripheral as follows:
- + Period = 10000 - 1
- + Prescaler = ((SystemCoreClock/2)/10000) - 1
- + ClockDivision = 0
- + Counter direction = Up
- */
- TimDemoHandle.Init.Period = 1000 - 1;
- TimDemoHandle.Init.Prescaler = uwPrescalerValue;
- TimDemoHandle.Init.ClockDivision = 0;
- TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
- if(HAL_TIM_Base_Init(&TimDemoHandle) != HAL_OK)
- {
- /* Initialization Error */
- Error_Handler();
- }
+ /* Initialize TIM3 peripheral as follows:
+ + Period = 10000 - 1
+ + Prescaler = ((SystemCoreClock/2)/10000) - 1
+ + ClockDivision = 0
+ + Counter direction = Up
+ */
+ TimDemoHandle.Init.Period = 1000 - 1;
+ TimDemoHandle.Init.Prescaler = uwPrescalerValue;
+ TimDemoHandle.Init.ClockDivision = 0;
+ TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
+ if(HAL_TIM_Base_Init(&TimDemoHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
- /*##-2- Start the TIM Base generation in interrupt mode ####################*/
- /* Start Channel1 */
- if(HAL_TIM_Base_Start_IT(&TimDemoHandle) != HAL_OK)
- {
- /* Starting Error */
- Error_Handler();
- }
+ /*##-2- Start the TIM Base generation in interrupt mode ####################*/
+ /* Start Channel1 */
+ if(HAL_TIM_Base_Start_IT(&TimDemoHandle) != HAL_OK)
+ {
+ /* Starting Error */
+ Error_Handler();
+ }
}
#endif
+
+
#ifndef TIM_BACKLIGHT
static uint32_t TIM_BACKLIGHT_adjust(void)
{
- return 0;
+ return 0;
}
static void TIM_BACKLIGHT_init(void)
{
}
#else
-static uint32_t TIM_BACKLIGHT_adjust(void) {
- static uint32_t levelActual = 12000;
- static uint8_t brightnessModeLast = 0;
+static uint32_t TIM_BACKLIGHT_adjust(void)
+{
+ static uint32_t levelActual = 12000;
+ static uint8_t brightnessModeLast = 0;
// static _Bool wasLostConnection = 0;
- uint32_t levelAmbient;
- uint32_t levelMax;
- uint32_t levelMin;
- uint32_t levelUpStep_100ms = 200;
- uint32_t levelDnStep_100ms = 20;
+ uint32_t levelAmbient;
+ uint32_t levelMax;
+ uint32_t levelMin;
+ uint32_t levelUpStep_100ms = 200;
+ uint32_t levelDnStep_100ms = 20;
- TIM_OC_InitTypeDef sConfig;
- sConfig.OCMode = TIM_OCMODE_PWM1;
- sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfig.OCFastMode = TIM_OCFAST_DISABLE;
+ TIM_OC_InitTypeDef sConfig;
+ sConfig.OCMode = TIM_OCMODE_PWM1;
+ sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfig.OCFastMode = TIM_OCFAST_DISABLE;
- const SDiveState * pStateReal = stateRealGetPointer();
+ const SDiveState * pStateReal = stateRealGetPointer();
+
// if(pStateReal->data_old__lost_connection_to_slave)
// {
@@ -1127,562 +1211,582 @@
// }
// else
// {
- SSettings *pSettings = settingsGetPointer();
- /* 300 - 4000 */
- /* important levelAmbient 300 - 1200 */
- levelAmbient = 10 * pStateReal->lifeData.ambient_light_level;
+ SSettings *pSettings = settingsGetPointer();
+ /* 300 - 4000 */
+ /* important levelAmbient 300 - 1200 */
+ levelAmbient = 10 * pStateReal->lifeData.ambient_light_level;
- switch (pSettings->brightness) {
- case 0: /* Cave */
- levelMax = 3000;/* max 25 % (x2) */
- levelMin = 1500;
- break;
- case 1: /* Eco */
- levelMax = 6000;/* max 50 % (x2) */
- levelMin = 3000;
- break;
- case 2: /* Std */
- levelAmbient += 1000;
- levelMax = 9000;
- levelMin = 4500;
- levelUpStep_100ms += levelUpStep_100ms / 2; // 4500 instead of 3000
- levelDnStep_100ms += levelDnStep_100ms / 2;
- break;
- case 3: /* High */
- default:
- levelAmbient += 3000;
- levelMax = 12000; /* max 100% (x2) */
- levelMin = 6000;
- levelUpStep_100ms += levelUpStep_100ms; // 6000 instead of 3000
- levelDnStep_100ms += levelDnStep_100ms;
- break;
- case 4: /* New Max */
- levelAmbient = 12000;
- levelMax = 12000; /* max 100% (x2) */
- levelMin = 12000;
- levelUpStep_100ms += 12000;
- levelDnStep_100ms += 0;
- break;
- }
+ switch( pSettings->brightness)
+ {
+ case 0: /* Cave */
+ levelMax = 3000;/* max 25 % (x2) */
+ levelMin = 1500;
+ break;
+ case 1: /* Eco */
+ levelMax = 6000;/* max 50 % (x2) */
+ levelMin = 3000;
+ break;
+ case 2: /* Std */
+ levelAmbient += 1000;
+ levelMax = 9000;
+ levelMin = 4500;
+ levelUpStep_100ms += levelUpStep_100ms/2; // 4500 instead of 3000
+ levelDnStep_100ms += levelDnStep_100ms/2;
+ break;
+ case 3: /* High */
+ default:
+ levelAmbient += 3000;
+ levelMax = 12000; /* max 100% (x2) */
+ levelMin = 6000;
+ levelUpStep_100ms += levelUpStep_100ms; // 6000 instead of 3000
+ levelDnStep_100ms += levelDnStep_100ms;
+ break;
+ case 4: /* New Max */
+ levelAmbient = 12000;
+ levelMax = 12000; /* max 100% (x2) */
+ levelMin = 12000;
+ levelUpStep_100ms += 12000;
+ levelDnStep_100ms += 0;
+ break;
+ }
- if ((pSettings->brightness != brightnessModeLast)) // || wasLostConnection)
- {
- levelActual = levelAmbient;
- brightnessModeLast = pSettings->brightness;
+ if((pSettings->brightness != brightnessModeLast))// || wasLostConnection)
+ {
+ levelActual = levelAmbient;
+ brightnessModeLast = pSettings->brightness;
// wasLostConnection = 0;
- }
+ }
// }
- if (levelAmbient > levelActual)
- levelActual += levelUpStep_100ms;
- else if ((levelAmbient < levelActual) && (levelActual > levelMin)
- && (levelActual > levelDnStep_100ms))
- levelActual -= levelDnStep_100ms;
+ if(levelAmbient > levelActual)
+ levelActual += levelUpStep_100ms;
+ else
+ if((levelAmbient < levelActual) && (levelActual > levelMin) && (levelActual > levelDnStep_100ms))
+ levelActual -= levelDnStep_100ms;
- if (levelActual > levelMax)
- levelActual = levelMax;
- else if (levelActual < levelMin)
- levelActual = levelMin;
+ if(levelActual > levelMax)
+ levelActual = levelMax;
+ else
+ if(levelActual < levelMin)
+ levelActual = levelMin;
// sConfig.Pulse = levelActual / 20;
- sConfig.Pulse = (levelMin + ((levelMax - levelMin) / 2)) / 20; // added 170306
+ sConfig.Pulse = (levelMin + ((levelMax - levelMin)/2)) / 20; // added 170306
- /* xx - 600 */
- if (sConfig.Pulse > 600)
- sConfig.Pulse = 600;
- else if (sConfig.Pulse < 100)
- sConfig.Pulse = 100;
+ /* xx - 600 */
+ if(sConfig.Pulse > 600)
+ sConfig.Pulse = 600;
+ else
+ if(sConfig.Pulse < 100)
+ sConfig.Pulse = 100;
- HAL_TIM_PWM_ConfigChannel(&TimBacklightHandle, &sConfig,
- TIM_BACKLIGHT_CHANNEL);
- HAL_TIM_PWM_Start(&TimBacklightHandle, TIM_BACKLIGHT_CHANNEL);
+ HAL_TIM_PWM_ConfigChannel(&TimBacklightHandle, &sConfig, TIM_BACKLIGHT_CHANNEL);
+ HAL_TIM_PWM_Start(&TimBacklightHandle, TIM_BACKLIGHT_CHANNEL);
- return levelActual;
+ return levelActual;
}
-static void TIM_BACKLIGHT_init(void) {
- uint32_t uwPrescalerValue = 0;
- TIM_OC_InitTypeDef sConfig;
+static void TIM_BACKLIGHT_init(void)
+{
+ uint32_t uwPrescalerValue = 0;
+ TIM_OC_InitTypeDef sConfig;
- uwPrescalerValue = (uint32_t) ((SystemCoreClock / 2) / 18000000) - 1;
+ uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 18000000) - 1;
- TimBacklightHandle.Instance = TIM_BACKLIGHT;
+ TimBacklightHandle.Instance = TIM_BACKLIGHT;
- /* Initialize TIM3 peripheral as follows:
- 30 kHz
- */
- TimBacklightHandle.Init.Period = 600 - 1;
- TimBacklightHandle.Init.Prescaler = uwPrescalerValue;
- TimBacklightHandle.Init.ClockDivision = 0;
- TimBacklightHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
- HAL_TIM_PWM_Init(&TimBacklightHandle);
+ /* Initialize TIM3 peripheral as follows:
+ 30 kHz
+ */
+ TimBacklightHandle.Init.Period = 600 - 1;
+ TimBacklightHandle.Init.Prescaler = uwPrescalerValue;
+ TimBacklightHandle.Init.ClockDivision = 0;
+ TimBacklightHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
+ HAL_TIM_PWM_Init(&TimBacklightHandle);
- sConfig.OCMode = TIM_OCMODE_PWM1;
- sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfig.OCFastMode = TIM_OCFAST_DISABLE;
- sConfig.Pulse = 50 * 6;
+ sConfig.OCMode = TIM_OCMODE_PWM1;
+ sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfig.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfig.Pulse = 50 * 6;
- HAL_TIM_PWM_ConfigChannel(&TimBacklightHandle, &sConfig,
- TIM_BACKLIGHT_CHANNEL);
- HAL_TIM_PWM_Start(&TimBacklightHandle, TIM_BACKLIGHT_CHANNEL);
+ HAL_TIM_PWM_ConfigChannel(&TimBacklightHandle, &sConfig, TIM_BACKLIGHT_CHANNEL);
+ HAL_TIM_PWM_Start(&TimBacklightHandle, TIM_BACKLIGHT_CHANNEL);
}
#endif
-static void EXTILine_Buttons_Config(void) {
- GPIO_InitTypeDef GPIO_InitStructure;
+
+static void EXTILine_Buttons_Config(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
- BUTTON_ENTER_GPIO_ENABLE();
- BUTTON_NEXT_GPIO_ENABLE();
- BUTTON_BACK_GPIO_ENABLE();
+ BUTTON_ENTER_GPIO_ENABLE();
+ BUTTON_NEXT_GPIO_ENABLE();
+ BUTTON_BACK_GPIO_ENABLE();
- /* Configure pin as weak PULLUP input */
- /* buttons */
- GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
- GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
+ /* Configure pin as weak PULLUP input */
+ /* buttons */
+ GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
+ GPIO_InitStructure.Pull = GPIO_NOPULL;
+ GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
- GPIO_InitStructure.Pin = BUTTON_ENTER_PIN;
- HAL_GPIO_Init(BUTTON_ENTER_GPIO_PORT, &GPIO_InitStructure);
+ GPIO_InitStructure.Pin = BUTTON_ENTER_PIN;
+ HAL_GPIO_Init(BUTTON_ENTER_GPIO_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.Pin = BUTTON_NEXT_PIN;
- HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStructure);
+ GPIO_InitStructure.Pin = BUTTON_NEXT_PIN;
+ HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.Pin = BUTTON_BACK_PIN;
- HAL_GPIO_Init(BUTTON_BACK_GPIO_PORT, &GPIO_InitStructure);
+ GPIO_InitStructure.Pin = BUTTON_BACK_PIN;
+ HAL_GPIO_Init(BUTTON_BACK_GPIO_PORT, &GPIO_InitStructure);
- /* Enable and set EXTI Line0 Interrupt to the lowest priority */
- HAL_NVIC_SetPriority(BUTTON_ENTER_EXTI_IRQn, 2, 0);
- HAL_NVIC_SetPriority(BUTTON_NEXT_EXTI_IRQn, 2, 0);
- HAL_NVIC_SetPriority(BUTTON_BACK_EXTI_IRQn, 2, 0);
- HAL_NVIC_EnableIRQ(BUTTON_ENTER_EXTI_IRQn);
- HAL_NVIC_EnableIRQ(BUTTON_NEXT_EXTI_IRQn);
- HAL_NVIC_EnableIRQ(BUTTON_BACK_EXTI_IRQn);
+ /* Enable and set EXTI Line0 Interrupt to the lowest priority */
+ HAL_NVIC_SetPriority(BUTTON_ENTER_EXTI_IRQn, 2, 0);
+ HAL_NVIC_SetPriority(BUTTON_NEXT_EXTI_IRQn, 2, 0);
+ HAL_NVIC_SetPriority(BUTTON_BACK_EXTI_IRQn, 2, 0);
+ HAL_NVIC_EnableIRQ(BUTTON_ENTER_EXTI_IRQn);
+ HAL_NVIC_EnableIRQ(BUTTON_NEXT_EXTI_IRQn);
+ HAL_NVIC_EnableIRQ(BUTTON_BACK_EXTI_IRQn);
#ifdef BUTTON_CUSTOM_PIN
- BUTTON_CUSTOM_GPIO_ENABLE();
- GPIO_InitStructure.Pin = BUTTON_CUSTOM_PIN;
- HAL_GPIO_Init(BUTTON_CUSTOM_GPIO_PORT, &GPIO_InitStructure);
- HAL_NVIC_SetPriority(BUTTON_CUSTOM_EXTI_IRQn, 2, 0);
- HAL_NVIC_EnableIRQ(BUTTON_CUSTOM_EXTI_IRQn);
+ BUTTON_CUSTOM_GPIO_ENABLE();
+ GPIO_InitStructure.Pin = BUTTON_CUSTOM_PIN;
+ HAL_GPIO_Init(BUTTON_CUSTOM_GPIO_PORT, &GPIO_InitStructure);
+ HAL_NVIC_SetPriority(BUTTON_CUSTOM_EXTI_IRQn, 2, 0);
+ HAL_NVIC_EnableIRQ(BUTTON_CUSTOM_EXTI_IRQn);
#endif
}
+
+/**
+ * @brief System Clock Configuration
+ * The system Clock is configured as follow :
+ * System Clock source = PLL (HSE)
+ * SYSCLK(Hz) = 180000000
+ * HCLK(Hz) = 180000000
+ * AHB Prescaler = 1
+ * APB1 Prescaler = 4
+ * APB2 Prescaler = 2
+ * HSE Frequency(Hz) = 8000000
+ * PLL_M = 8
+ * PLL_N = 360
+ * PLL_P = 2
+ * PLL_Q = 7
+ * VDD(V) = 3.3
+ * Main regulator output voltage = Scale1 mode
+ * Flash Latency(WS) = 5
+ * The LTDC Clock is configured as follow :
+ * PLLSAIN = 192
+ * PLLSAIR = 4
+ * PLLSAIDivR = 8
+ * @param None
+ * @retval None
+ */
+static void SystemClock_Config(void)
+{
+
+ /* 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 );
+
+ /*##-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_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 */
+
+ /* 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 );
+}
+
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @param None
+ * @retval None
+ */
+static void Error_Handler(void)
+{
+ /* Turn LED3 on */
+// BSP_LED_On(LED3);
+ while(1)
+ {
+ }
+}
+
/**
- * @brief System Clock Configuration
- * The system Clock is configured as follow :
- * System Clock source = PLL (HSE)
- * SYSCLK(Hz) = 180000000
- * HCLK(Hz) = 180000000
- * AHB Prescaler = 1
- * APB1 Prescaler = 4
- * APB2 Prescaler = 2
- * HSE Frequency(Hz) = 8000000
- * PLL_M = 8
- * PLL_N = 360
- * PLL_P = 2
- * PLL_Q = 7
- * VDD(V) = 3.3
- * Main regulator output voltage = Scale1 mode
- * Flash Latency(WS) = 5
- * The LTDC Clock is configured as follow :
- * PLLSAIN = 192
- * PLLSAIR = 4
- * PLLSAIDivR = 8
- * @param None
- * @retval None
- */
-static void SystemClock_Config(void) {
+ * @brief Perform the SDRAM exernal memory inialization sequence
+ * @param hsdram: SDRAM handle
+ * @param Command: Pointer to SDRAM command structure
+ * @retval None
+ */
+static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
+{
+ __IO uint32_t tmpmrd =0;
+ /* Step 3: Configure a clock configuration enable command */
+ Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
+ Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
+ Command->AutoRefreshNumber = 1;
+ Command->ModeRegisterDefinition = 0;
- /* Enable Power Control clock */
- __PWR_CLK_ENABLE();
+ /* Send the command */
+ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
+
+ /* Step 4: Insert 100 ms delay */
+ HAL_Delay(100);
- /* 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);
+ /* Step 5: Configure a PALL (precharge all) command */
+ Command->CommandMode = FMC_SDRAM_CMD_PALL;
+ Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
+ Command->AutoRefreshNumber = 1;
+ Command->ModeRegisterDefinition = 0;
+
+ /* Send the command */
+ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
- /*##-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);
+ /* Step 6 : Configure a Auto-Refresh command */
+ Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
+ Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
+ Command->AutoRefreshNumber = 4;
+ Command->ModeRegisterDefinition = 0;
+
+ /* Send the command */
+ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
-// HAL_PWREx_ActivateOverDrive();
- 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);
+ /* Step 7: Program the external memory mode register */
+ tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2 |
+ SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
+ SDRAM_MODEREG_CAS_LATENCY_3 |
+ SDRAM_MODEREG_OPERATING_MODE_STANDARD |
+ SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
- /*##-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 */
+ Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
+ Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
+ Command->AutoRefreshNumber = 1;
+ Command->ModeRegisterDefinition = tmpmrd;
- /* 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);
+ /* Send the command */
+ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
+
+ /* Step 8: Set the refresh rate counter */
+ /* (15.62 us x Freq) - 20 */
+ /* neu: (8 us x Freq) - 20 */
+ /* Set the device refresh counter */
+ HAL_SDRAM_ProgramRefreshRate(hsdram, REFRESH_COUNT);
}
-/**
- * @brief This function is executed in case of error occurrence.
- * @param None
- * @retval None
- */
-static void Error_Handler(void) {
- /* Turn LED3 on */
-// BSP_LED_On(LED3);
- while (1) {
- }
-}
/**
- * @brief Perform the SDRAM exernal memory inialization sequence
- * @param hsdram: SDRAM handle
- * @param Command: Pointer to SDRAM command structure
- * @retval None
- */
-static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram,
- FMC_SDRAM_CommandTypeDef *Command) {
- __IO uint32_t tmpmrd = 0;
- /* Step 3: Configure a clock configuration enable command */
- Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
- Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
- Command->AutoRefreshNumber = 1;
- Command->ModeRegisterDefinition = 0;
+******************************************************************************
+******************************************************************************
+******************************************************************************
+*/
+
- /* Send the command */
- HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
-
- /* Step 4: Insert 100 ms delay */
- HAL_Delay(100);
+/**
+ * @brief DMA2D configuration.
+ * @note This function Configure tha DMA2D peripheral :
+ * 1) Configure the transfer mode : memory to memory W/ pixel format conversion
+ * 2) Configure the output color mode as ARGB4444
+ * 3) Configure the output memory address at SRAM memory
+ * 4) Configure the data size : 320x120 (pixels)
+ * 5) Configure the input color mode as ARGB8888
+ * 6) Configure the input memory address at FLASH memory
+ * @retval
+ * None
+ */
- /* Step 5: Configure a PALL (precharge all) command */
- Command->CommandMode = FMC_SDRAM_CMD_PALL;
- Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
- Command->AutoRefreshNumber = 1;
- Command->ModeRegisterDefinition = 0;
-
- /* Send the command */
- HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
+static void SDRAM_Config(void)
+{
+ /*##-1- Configure the SDRAM device #########################################*/
+ /* SDRAM device configuration */
+ hsdram.Instance = FMC_SDRAM_DEVICE;
- /* Step 6 : Configure a Auto-Refresh command */
- Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
- Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
- Command->AutoRefreshNumber = 4;
- Command->ModeRegisterDefinition = 0;
-
- /* Send the command */
- HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
+ /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz/2) */
+ /* TMRD: 2 Clock cycles */
+ SDRAM_Timing.LoadToActiveDelay = 2;
+ /* TXSR: min=70ns (6x11.90ns) */
+ SDRAM_Timing.ExitSelfRefreshDelay = 7;
+ /* TRAS: min=42ns (4x11.90ns) max=120k (ns) */
+ SDRAM_Timing.SelfRefreshTime = 4;
+ /* TRC: min=63 (6x11.90ns) */
+ SDRAM_Timing.RowCycleDelay = 7;
+ /* TWR: 2 Clock cycles */
+ SDRAM_Timing.WriteRecoveryTime = 2;
+ /* TRP: 15ns => 2x11.90ns */
+ SDRAM_Timing.RPDelay = 2;
+ /* TRCD: 15ns => 2x11.90ns */
+ SDRAM_Timing.RCDDelay = 2;
- /* Step 7: Program the external memory mode register */
- tmpmrd = (uint32_t) SDRAM_MODEREG_BURST_LENGTH_2 |
- SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
- SDRAM_MODEREG_CAS_LATENCY_3 |
- SDRAM_MODEREG_OPERATING_MODE_STANDARD |
- SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
+ hsdram.Init.SDBank = FMC_SDRAM_BANK2;
+ hsdram.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
+ hsdram.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
+ hsdram.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH;
+ hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
+ hsdram.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
+ hsdram.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
+ hsdram.Init.SDClockPeriod = SDCLOCK_PERIOD;
+ hsdram.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
+ hsdram.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
- Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
- Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
- Command->AutoRefreshNumber = 1;
- Command->ModeRegisterDefinition = tmpmrd;
+ /* Initialize the SDRAM controller */
+ if(HAL_SDRAM_Init(&hsdram, &SDRAM_Timing) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
- /* Send the command */
- HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
-
- /* Step 8: Set the refresh rate counter */
- /* (15.62 us x Freq) - 20 */
- /* neu: (8 us x Freq) - 20 */
- /* Set the device refresh counter */
- HAL_SDRAM_ProgramRefreshRate(hsdram, REFRESH_COUNT);
+ /* Program the SDRAM external device */
+ SDRAM_Initialization_Sequence(&hsdram, &command);
}
-/**
- ******************************************************************************
- ******************************************************************************
- ******************************************************************************
- */
-
-/**
- * @brief DMA2D configuration.
- * @note This function Configure tha DMA2D peripheral :
- * 1) Configure the transfer mode : memory to memory W/ pixel format conversion
- * 2) Configure the output color mode as ARGB4444
- * 3) Configure the output memory address at SRAM memory
- * 4) Configure the data size : 320x120 (pixels)
- * 5) Configure the input color mode as ARGB8888
- * 6) Configure the input memory address at FLASH memory
- * @retval
- * None
- */
-
-static void SDRAM_Config(void) {
- /*##-1- Configure the SDRAM device #########################################*/
- /* SDRAM device configuration */
- hsdram.Instance = FMC_SDRAM_DEVICE;
-
- /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz/2) */
- /* TMRD: 2 Clock cycles */
- SDRAM_Timing.LoadToActiveDelay = 2;
- /* TXSR: min=70ns (6x11.90ns) */
- SDRAM_Timing.ExitSelfRefreshDelay = 7;
- /* TRAS: min=42ns (4x11.90ns) max=120k (ns) */
- SDRAM_Timing.SelfRefreshTime = 4;
- /* TRC: min=63 (6x11.90ns) */
- SDRAM_Timing.RowCycleDelay = 7;
- /* TWR: 2 Clock cycles */
- SDRAM_Timing.WriteRecoveryTime = 2;
- /* TRP: 15ns => 2x11.90ns */
- SDRAM_Timing.RPDelay = 2;
- /* TRCD: 15ns => 2x11.90ns */
- SDRAM_Timing.RCDDelay = 2;
-
- hsdram.Init.SDBank = FMC_SDRAM_BANK2;
- hsdram.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
- hsdram.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
- hsdram.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH;
- hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
- hsdram.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
- hsdram.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
- hsdram.Init.SDClockPeriod = SDCLOCK_PERIOD;
- hsdram.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
- hsdram.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
-
- /* Initialize the SDRAM controller */
- if (HAL_SDRAM_Init(&hsdram, &SDRAM_Timing) != HAL_OK) {
- /* Initialization Error */
- Error_Handler();
- }
-
- /* Program the SDRAM external device */
- SDRAM_Initialization_Sequence(&hsdram, &command);
-}
#ifdef USE_FULL_ASSERT
/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
void assert_failed(uint8_t* file, uint32_t line)
{
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* Infinite loop */
- while (1)
- {
- }
+ /* Infinite loop */
+ while (1)
+ {
+ }
}
#endif
-void deco_loop(void) {
- typedef enum {
- CALC_VPM, CALC_VPM_FUTURE, CALC_BUEHLMANN, CALC_BUEHLMANN_FUTURE,
- } CALC_WHAT;
- static int what = -1;
- int counter = 0;
- if ((stateUsed->mode != MODE_DIVE)
- || (stateUsed->diveSettings.diveMode == DIVEMODE_Apnea)
- || (decoLock != DECO_CALC_ready))
- return;
-
- decoLock = DECO_CALC_running;
+void deco_loop(void)
+{
+ typedef enum
+ {
+ CALC_VPM,
+ CALC_VPM_FUTURE,
+ CALC_BUEHLMANN,
+ CALC_BUEHLMANN_FUTURE,
+ } CALC_WHAT;
- if (stateDeco.diveSettings.deco_type.ub.standard == GF_MODE) {
-// hw 151110 mh wants future TTS even in deco zone if((what == CALC_BUEHLMANN) && (stateDeco.lifeData.pressure_ambient_bar > stateDeco.diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero))
- if (what == CALC_BUEHLMANN) {
- //Calc future
- what = CALC_BUEHLMANN_FUTURE;
- } else
- what = CALC_BUEHLMANN;
+ static int what = -1;
+ int counter = 0;
+ if((stateUsed->mode != MODE_DIVE) || (stateUsed->diveSettings.diveMode == DIVEMODE_Apnea) || (decoLock != DECO_CALC_ready ))
+ return;
+
+ decoLock = DECO_CALC_running;
- } else {
-// hw 151110 mh wants future TTS even in deco zone if((what == CALC_VPM) && (!stateDeco.vpm.deco_zone_reached))
- if (what == CALC_VPM) {
- //Calc future
- what = CALC_VPM_FUTURE;
- } else
- what = CALC_VPM;
- }
+ if(stateDeco.diveSettings.deco_type.ub.standard == GF_MODE)
+ {
+// hw 151110 mh wants future TTS even in deco zone if((what == CALC_BUEHLMANN) && (stateDeco.lifeData.pressure_ambient_bar > stateDeco.diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero))
+ if(what == CALC_BUEHLMANN)
+ {
+ //Calc future
+ what = CALC_BUEHLMANN_FUTURE;
+ }
+ else
+ what = CALC_BUEHLMANN;
- //In one of ten calc the other option
- if (counter == 10) {
- if (what == CALC_VPM)
- what = CALC_BUEHLMANN;
- if (what == CALC_BUEHLMANN)
- what = CALC_VPM;
- counter = 0;
- }
+ }
+ else
+ {
+// hw 151110 mh wants future TTS even in deco zone if((what == CALC_VPM) && (!stateDeco.vpm.deco_zone_reached))
+ if(what == CALC_VPM)
+ {
+ //Calc future
+ what = CALC_VPM_FUTURE;
+ }
+ else
+ what = CALC_VPM;
+ }
- decom_CreateGasChangeList(&stateDeco.diveSettings, &stateDeco.lifeData);
+ //In one of ten calc the other option
+ if(counter == 10)
+ {
+ if(what == CALC_VPM)
+ what = CALC_BUEHLMANN;
+ if(what == CALC_BUEHLMANN)
+ what = CALC_VPM;
+ counter = 0;
+ }
+
+ decom_CreateGasChangeList(&stateDeco.diveSettings, &stateDeco.lifeData);
- switch (what) {
- case CALC_VPM:
- vpm_calc(&stateDeco.lifeData, &stateDeco.diveSettings, &stateDeco.vpm,
- &stateDeco.decolistVPM, DECOSTOPS);
- decoLock = DECO_CALC_FINSHED_vpm;
- return;
- case CALC_VPM_FUTURE:
- decom_tissues_exposure(stateDeco.diveSettings.future_TTS_minutes * 60,
- &stateDeco.lifeData);
- vpm_calc(&stateDeco.lifeData, &stateDeco.diveSettings, &stateDeco.vpm,
- &stateDeco.decolistFutureVPM, FUTURESTOPS);
- decoLock = DECO_CALC_FINSHED_Futurevpm;
- return;
- case CALC_BUEHLMANN:
- buehlmann_calc_deco(&stateDeco.lifeData, &stateDeco.diveSettings,
- &stateDeco.decolistBuehlmann);
- buehlmann_ceiling_calculator(&stateDeco.lifeData,
- &stateDeco.diveSettings, &stateDeco.decolistBuehlmann);
- buehlmann_relative_gradient_calculator(&stateDeco.lifeData,
- &stateDeco.diveSettings, &stateDeco.decolistBuehlmann);
- decoLock = DECO_CALC_FINSHED_Buehlmann;
- return;
- case CALC_BUEHLMANN_FUTURE:
- decom_tissues_exposure(stateDeco.diveSettings.future_TTS_minutes * 60,
- &stateDeco.lifeData);
- buehlmann_calc_deco(&stateDeco.lifeData, &stateDeco.diveSettings,
- &stateDeco.decolistFutureBuehlmann);
- //buehlmann_ceiling_calculator(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistBuehlmann);
- decoLock = DECO_CALC_FINSHED_FutureBuehlmann;
- return;
- }
- counter++;
+ switch(what)
+ {
+ case CALC_VPM:
+ vpm_calc(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.vpm,&stateDeco.decolistVPM, DECOSTOPS);
+ decoLock = DECO_CALC_FINSHED_vpm;
+ return;
+ case CALC_VPM_FUTURE:
+ decom_tissues_exposure(stateDeco.diveSettings.future_TTS_minutes * 60,&stateDeco.lifeData);
+ vpm_calc(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.vpm,&stateDeco.decolistFutureVPM, FUTURESTOPS);
+ decoLock = DECO_CALC_FINSHED_Futurevpm;
+ return;
+ case CALC_BUEHLMANN:
+ buehlmann_calc_deco(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistBuehlmann);
+ buehlmann_ceiling_calculator(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistBuehlmann);
+ buehlmann_relative_gradient_calculator(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistBuehlmann);
+ decoLock = DECO_CALC_FINSHED_Buehlmann;
+ return;
+ case CALC_BUEHLMANN_FUTURE:
+ decom_tissues_exposure(stateDeco.diveSettings.future_TTS_minutes * 60,&stateDeco.lifeData);
+ buehlmann_calc_deco(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistFutureBuehlmann);
+ //buehlmann_ceiling_calculator(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistBuehlmann);
+ decoLock = DECO_CALC_FINSHED_FutureBuehlmann;
+ return;
+ }
+ counter++;
}
-void resetToFirmwareUpdate(void) {
- __HAL_RCC_CLEAR_RESET_FLAGS();
- HAL_NVIC_SystemReset();
+void resetToFirmwareUpdate(void)
+{
+ __HAL_RCC_CLEAR_RESET_FLAGS();
+ HAL_NVIC_SystemReset();
}
// debugging by https://blog.feabhas.com/2013/02/developing-a-generic-hard-fault-handler-for-arm-cortex-m3cortex-m4/
/*
- void printErrorMsg(const char * errMsg)
- {
+void printErrorMsg(const char * errMsg)
+{
- // printf(errMsg);
- // return;
+// printf(errMsg);
+// return;
- while(*errMsg != 0){
- ITM_SendChar(*errMsg);
- ++errMsg;
- }
- }
+ while(*errMsg != 0){
+ ITM_SendChar(*errMsg);
+ ++errMsg;
+ }
+}
- enum { r0, r1, r2, r3, r12, lr, pc, psr};
+enum { r0, r1, r2, r3, r12, lr, pc, psr};
- void stackDump(uint32_t stack[])
- {
- static char msg[80];
- sprintf(msg, "r0 = 0x%08x\n", stack[r0]); printErrorMsg(msg);
- sprintf(msg, "r1 = 0x%08x\n", stack[r1]); printErrorMsg(msg);
- sprintf(msg, "r2 = 0x%08x\n", stack[r2]); printErrorMsg(msg);
- sprintf(msg, "r3 = 0x%08x\n", stack[r3]); printErrorMsg(msg);
- sprintf(msg, "r12 = 0x%08x\n", stack[r12]); printErrorMsg(msg);
- sprintf(msg, "lr = 0x%08x\n", stack[lr]); printErrorMsg(msg);
- sprintf(msg, "pc = 0x%08x\n", stack[pc]); printErrorMsg(msg);
- sprintf(msg, "psr = 0x%08x\n", stack[psr]); printErrorMsg(msg);
- }
+void stackDump(uint32_t stack[])
+{
+ static char msg[80];
+ sprintf(msg, "r0 = 0x%08x\n", stack[r0]); printErrorMsg(msg);
+ sprintf(msg, "r1 = 0x%08x\n", stack[r1]); printErrorMsg(msg);
+ sprintf(msg, "r2 = 0x%08x\n", stack[r2]); printErrorMsg(msg);
+ sprintf(msg, "r3 = 0x%08x\n", stack[r3]); printErrorMsg(msg);
+ sprintf(msg, "r12 = 0x%08x\n", stack[r12]); printErrorMsg(msg);
+ sprintf(msg, "lr = 0x%08x\n", stack[lr]); printErrorMsg(msg);
+ sprintf(msg, "pc = 0x%08x\n", stack[pc]); printErrorMsg(msg);
+ sprintf(msg, "psr = 0x%08x\n", stack[psr]); printErrorMsg(msg);
+}
- void printUsageErrorMsg(uint32_t CFSRValue)
- {
- printErrorMsg("Usage fault: ");
- CFSRValue >>= 16; // right shift to lsb
- if((CFSRValue & (1 << 9)) != 0) {
- printErrorMsg("Divide by zero\n");
- }
- }
+void printUsageErrorMsg(uint32_t CFSRValue)
+{
+ printErrorMsg("Usage fault: ");
+ CFSRValue >>= 16; // right shift to lsb
+ if((CFSRValue & (1 << 9)) != 0) {
+ printErrorMsg("Divide by zero\n");
+ }
+}
- void Hard_Fault_Handler()//uint32_t stack[])
- {
- static char msg[80];
- printErrorMsg("In Hard Fault Handler\n");
- sprintf(msg, "SCB->HFSR = 0x%08x\n", SCB->HFSR);
- printErrorMsg(msg);
- if ((SCB->HFSR & (1 << 30)) != 0) {
- printErrorMsg("Forced Hard Fault\n");
- sprintf(msg, "SCB->CFSR = 0x%08x\n", SCB->CFSR );
- printErrorMsg(msg);
- if((SCB->CFSR & 0xFFFF0000) != 0) {
- printUsageErrorMsg(SCB->CFSR);
- }
- }
- __ASM volatile("BKPT #01");
- while(1);
- }
+void Hard_Fault_Handler()//uint32_t stack[])
+ {
+ static char msg[80];
+ printErrorMsg("In Hard Fault Handler\n");
+ sprintf(msg, "SCB->HFSR = 0x%08x\n", SCB->HFSR);
+ printErrorMsg(msg);
+ if ((SCB->HFSR & (1 << 30)) != 0) {
+ printErrorMsg("Forced Hard Fault\n");
+ sprintf(msg, "SCB->CFSR = 0x%08x\n", SCB->CFSR );
+ printErrorMsg(msg);
+ if((SCB->CFSR & 0xFFFF0000) != 0) {
+ printUsageErrorMsg(SCB->CFSR);
+ }
+ }
+ __ASM volatile("BKPT #01");
+ while(1);
+}
- int my_store_of_MSP;
+int my_store_of_MSP;
- void HardFault_Handler(void)
- {
- __asm ("MRS my_store_of_MSP, MSP");
- Hard_Fault_Handler();
- }
- */
+void HardFault_Handler(void)
+{
+ __asm ("MRS my_store_of_MSP, MSP");
+ Hard_Fault_Handler();
+}
+*/
/*
- __asm void HardFault_Handler(void)
- {
- TST lr, #4 // Test for MSP or PSP
- ITE EQ
- MRSEQ r0, MSP
- MRSNE r0, PSP
- B __cpp(Hard_Fault_Handler)
- }
- */
+__asm void HardFault_Handler(void)
+{
+ TST lr, #4 // Test for MSP or PSP
+ ITE EQ
+ MRSEQ r0, MSP
+ MRSNE r0, PSP
+ B __cpp(Hard_Fault_Handler)
+}
+*/
/*
- HardFault_Handler\
+HardFault_Handler\
PROC
- EXPORT HardFault_Handler
- B .
- ENDP
- */
+ EXPORT HardFault_Handler
+ B .
+ ENDP
+*/
/*
- __asm int f(int i)
- {
- ADD i, i, #1 // error
- }
+__asm int f(int i)
+{
+ ADD i, i, #1 // error
+}
- EXPORT HardFault_Handler
- HardFault_Handler FUNCTION
- MRS r0, MSP
- B __cpp(Hard_Fault_Handler)
- ENDFUNC
- */
+EXPORT HardFault_Handler
+HardFault_Handler FUNCTION
+ MRS r0, MSP
+ B __cpp(Hard_Fault_Handler)
+ENDFUNC
+*/
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/data_exchange_main.c
--- a/Discovery/Src/data_exchange_main.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/data_exchange_main.c Thu Jan 03 19:59:36 2019 +0100
@@ -940,7 +940,15 @@
pStateReal->lifeData.counterSecondsShallowDepth = dataIn.data[dataIn.boolTimeData].counterSecondsShallowDepth;
pStateReal->lifeData.surface_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].surfacetime_seconds;
+
pStateReal->lifeData.compass_heading = dataIn.data[dataIn.boolCompassData].compass_heading;
+ if(settingsGetPointer()->FlipDisplay) /* consider that diver is targeting into the opposite direction */
+ {
+ pStateReal->lifeData.compass_heading -= 180.0;
+ if (pStateReal->lifeData.compass_heading < 0) pStateReal->lifeData.compass_heading +=360.0;
+ }
+
+
pStateReal->lifeData.compass_roll = dataIn.data[dataIn.boolCompassData].compass_roll;
pStateReal->lifeData.compass_pitch = dataIn.data[dataIn.boolCompassData].compass_pitch;
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/gfx_engine.c
--- a/Discovery/Src/gfx_engine.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/gfx_engine.c Thu Jan 03 19:59:36 2019 +0100
@@ -904,18 +904,33 @@
static inline void gfx_brush(uint8_t thickness, GFX_DrawCfgScreen *hgfx, uint16_t x0, uint16_t y0, uint8_t color)
{
- uint32_t pDestination;
+ uint16_t* pDestination;
uint8_t offset = thickness/2;
-
- pDestination = hgfx->FBStartAdress + 2*(x0 - offset)*hgfx->ImageHeight + 2*(y0-offset);
+ int16_t stepdir;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ if(pSettings->FlipDisplay)
+ {
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ pDestination += (hgfx->ImageHeight * (hgfx->ImageWidth - x0 + offset)) + (480 - y0+offset);
+ stepdir = -1;
+ }
+ else
+ {
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ pDestination += (x0 - offset)*hgfx->ImageHeight + (y0-offset);
+ stepdir = 1;
+ }
for(int x=thickness;x>0;x--)
{
for(int y=thickness;y>0;y--)
{
*(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination +=2;
+ pDestination += stepdir;
}
- pDestination += 2*(hgfx->ImageHeight - thickness);
+ pDestination += stepdir * (hgfx->ImageHeight - thickness);
}
}
@@ -968,35 +983,63 @@
void GFX_draw_line(GFX_DrawCfgScreen *hgfx, point_t start, point_t stop, uint8_t color)
{
- uint32_t pDestination;
+ uint16_t* pDestination;
uint32_t j;
-
+ int16_t stepdir;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+
+ /* horizontal line */
if(start.x == stop.x)
{
if(start.y > stop.y) gfx_flip(&start,&stop);
- pDestination = (uint32_t)hgfx->FBStartAdress;
- pDestination += start.x * hgfx->ImageHeight * 2;
- pDestination += start.y * 2;
+
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ if(pSettings->FlipDisplay)
+ {
+ pDestination += (800 - start.x) * hgfx->ImageHeight;
+ pDestination += (480 - start.y);
+ stepdir = -1;
+ }
+ else
+ {
+ pDestination += start.x * hgfx->ImageHeight;
+ pDestination += start.y;
+ stepdir = 1;
+ }
for (j = stop.y - start.y; j > 0; j--)
{
- *(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = 0xFF00 + color;
+ pDestination += stepdir;
}
}
- else
+ else /* vertical line ? */
if(start.y == stop.y)
{
if(start.x > stop.x) gfx_flip(&start,&stop);
- pDestination = (uint32_t)hgfx->FBStartAdress;
- pDestination += start.x * hgfx->ImageHeight * 2;
- pDestination += start.y * 2;
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+
+ if(pSettings->FlipDisplay)
+ {
+ pDestination += (800 - start.x) * hgfx->ImageHeight;
+ pDestination += (480 - start.y);
+ stepdir = -1;
+ }
+ else
+ {
+ pDestination += start.x * hgfx->ImageHeight;
+ pDestination += start.y;
+ stepdir = 1;
+ }
+
for (j = stop.x - start.x; j > 0; j--)
{
*(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination += hgfx->ImageHeight * 2;
+ pDestination += stepdir * hgfx->ImageHeight;
}
}
- else // diagonal
+ else /* diagonal */
{
int x0 = start.x;
int y0 = start.y;
@@ -1008,8 +1051,17 @@
for(;;)
{
- pDestination = (uint32_t)hgfx->FBStartAdress;
- pDestination += ((x0 * hgfx->ImageHeight) + y0) * 2;
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+
+ if(pSettings->FlipDisplay)
+ {
+ pDestination += (((800 - x0) * hgfx->ImageHeight) + (480 - y0));
+ }
+ else
+ {
+ pDestination += ((x0 * hgfx->ImageHeight) + y0);
+ }
+
*(__IO uint16_t*)pDestination = 0xFF00 + color;
if (x0==x1 && y0==y1) break;
e2 = err;
@@ -1022,7 +1074,53 @@
void GFX_draw_image_monochrome(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image, uint8_t color)
{
- uint32_t pDestination;
+ uint16_t* pDestination;
+ uint32_t j;
+ point_t start, stop;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ start.x = window.left;
+ start.y = (hgfx->ImageHeight - image->height - window.top);
+ stop.y = start.y + image->height;
+ stop.x = start.x + image->width;
+ j = 0;
+
+ if(pSettings->FlipDisplay)
+ {
+ for(int xx = start.x; xx < stop.x; xx++)
+ {
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ pDestination += (hgfx->ImageHeight - start.y) + (stop.x * hgfx->ImageHeight) ;
+ pDestination -= (xx - start.x) * hgfx->ImageHeight;
+
+ for(int yy = start.y; yy < stop.y; yy++)
+ {
+ *(__IO uint16_t*)pDestination-- = (image->data[j++] << 8) + color;
+ }
+ }
+ }
+ else
+ {
+ for(int xx = start.x; xx < stop.x; xx++)
+ {
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ pDestination += xx * hgfx->ImageHeight;
+ pDestination += start.y;
+ for(int yy = start.y; yy < stop.y; yy++)
+ {
+ *(__IO uint16_t*)pDestination++ = (image->data[j++] << 8) + color;
+ }
+ }
+ }
+}
+
+
+void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image)
+{
+ uint16_t* pDestination;
+
uint32_t j;
point_t start, stop;
@@ -1032,47 +1130,37 @@
stop.x = start.x + image->width;
j = 0;
- for(int xx = start.x; xx < stop.x; xx++)
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ if(pSettings->FlipDisplay)
{
- pDestination = (uint32_t)hgfx->FBStartAdress;
- pDestination += xx * hgfx->ImageHeight * 2;
- pDestination += start.y * 2;
- for(int yy = start.y; yy < stop.y; yy++)
+ for(int xx = start.x; xx < stop.x; xx++)
{
- *(__IO uint8_t*)pDestination = color;
- pDestination += 1;
- *(__IO uint8_t*)pDestination = image->data[j++];
- pDestination += 1;
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ pDestination += (hgfx->ImageHeight - start.y) + (stop.x * hgfx->ImageHeight);
+ pDestination -= (xx - start.x) * hgfx->ImageHeight;
+
+ for(int yy = start.y; yy < stop.y; yy++)
+ {
+ // *(__IO uint16_t*)pDestination-- = image->data[j++] << 8 | 0xFF;
+ *(__IO uint16_t*)pDestination-- = 0xFF << 8 | image->data[j++];
+ }
}
- }
-}
-
-
-void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image)
-{
- uint32_t pDestination;
- uint32_t j;
- point_t start, stop;
-
- start.x = window.left;
- start.y = (hgfx->ImageHeight - image->height - window.top);
- stop.y = start.y + image->height;
- stop.x = start.x + image->width;
- j = 0;
-
- for(int xx = start.x; xx < stop.x; xx++)
+ }
+ else
{
- pDestination = (uint32_t)hgfx->FBStartAdress;
- pDestination += xx * hgfx->ImageHeight * 2;
- pDestination += start.y * 2;
- for(int yy = start.y; yy < stop.y; yy++)
+ for(int xx = start.x; xx < stop.x; xx++)
{
- *(__IO uint8_t*)pDestination = image->data[j++];
- pDestination += 1;
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 1;
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ pDestination += xx * hgfx->ImageHeight;
+ pDestination += start.y;
+ for(int yy = start.y; yy < stop.y; yy++)
+ {
+ *(__IO uint16_t*)pDestination++ = 0xFF << 8 | image->data[j++];
+ }
}
- }
+ }
}
@@ -1120,15 +1208,23 @@
/* this is NOT fast nor optimized */
void GFX_draw_pixel(GFX_DrawCfgScreen *hgfx, int16_t x, int16_t y, uint8_t color)
{
- uint32_t pDestination;
-
- pDestination = (uint32_t)hgfx->FBStartAdress;
- pDestination += x * hgfx->ImageHeight * 2;
- pDestination += y * 2;
-
- *(__IO uint8_t*)pDestination = color;
- pDestination += 1;
- *(__IO uint8_t*)pDestination = 0xFF;
+ uint16_t* pDestination;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ pDestination = (uint16_t*)hgfx->FBStartAdress;
+ if(pSettings->FlipDisplay)
+ {
+ pDestination += (800 - x) * hgfx->ImageHeight;
+ pDestination += (480 - y);
+ }
+ else
+ {
+ pDestination += x * hgfx->ImageHeight;
+ pDestination += y;
+ }
+ *(__IO uint16_t*)pDestination = 0xFF << 8 | color;
}
@@ -1271,7 +1367,8 @@
{
p1.x = window.left + (int)(i * deltaline + 0.5f);
p2.x = p1.x ;
- GFX_draw_colorline(hgfx, p1,p2, color );
+ //GFX_draw_colorline(hgfx, p1,p2, color );
+ GFX_draw_line(hgfx, p1,p2, color );
}
}
if(vdeltaline > 0)
@@ -1282,7 +1379,8 @@
{
p1.x = window.left + (int)(i * vdeltaline + 0.5f);
p2.x = p1.x ;
- GFX_draw_colorline(hgfx, p1,p2, color );
+ // GFX_draw_colorline(hgfx, p1,p2, color );
+ GFX_draw_line(hgfx, p1,p2, color );
}
}
if(hlines > 0)
@@ -1294,7 +1392,8 @@
{
p1.y = 479 - window.top - (int)(i * deltaline + 0.5f);
p2.y = p1.y;
- GFX_draw_colorline(hgfx, p1,p2, color );
+ // GFX_draw_colorline(hgfx, p1,p2, color );
+ GFX_draw_line(hgfx, p1,p2, color );
}
}
}
@@ -1406,10 +1505,14 @@
// ===============================================================================
-void GFX_graph_print(GFX_DrawCfgScreen *hgfx, const SWindowGimpStyle *window, int16_t drawVeilUntil, uint8_t Xdivide, uint16_t dataMin, uint16_t dataMax, uint16_t *data, uint16_t datalength, uint8_t color, uint8_t *colour_data)
+void GFX_graph_print(GFX_DrawCfgScreen *hgfx, const SWindowGimpStyle *window, const int16_t drawVeilUntil, uint8_t Xdivide, uint16_t dataMin, uint16_t dataMax, uint16_t *data, uint16_t datalength, uint8_t color, uint8_t *colour_data)
{
- //uint32_t pDestination,pDestination_old,
- uint32_t pDestination_tmp,pDestination_end, pDestination_start, pDestination_zero_veil;
+ uint16_t* pDestination_tmp;
+ uint16_t* pDestination_start;
+ uint16_t* pDestination_end;
+ uint16_t* pDestination_zero_veil;
+
+ SSettings* pSettings;
uint32_t max = 0;
int windowheight = -1;
@@ -1429,6 +1532,9 @@
uint8_t colorDataTemp;
uint8_t colormask = 0;
+ pSettings = settingsGetPointer();
+ pDestination_zero_veil = 0;
+
if(dataMin > dataMax)
{
uint16_t dataFlip;
@@ -1441,7 +1547,8 @@
invert = 0;
colormask = color;
-
+
+ pSettings = settingsGetPointer();
if(window->bottom > 479)
return;
@@ -1522,15 +1629,32 @@
if(h_ulong > (window->bottom - window->top))
h_ulong = (window->bottom - window->top);
- if(drawVeilUntil > 0)
+ if(!pSettings->FlipDisplay)
{
- pDestination_zero_veil = hgfx->FBStartAdress + 2 * ( (479 - (drawVeilUntil - 2) ) + ( (w1 + window->left) * hgfx->ImageHeight) );
+ if(drawVeilUntil > 0)
+ {
+ pDestination_zero_veil = (uint16_t*)hgfx->FBStartAdress;
+ pDestination_zero_veil += ((479 - (drawVeilUntil - 2) ) + ((w1 + window->left) * hgfx->ImageHeight) );
+ }
+ else if(drawVeilUntil < 0 )
+ {
+ pDestination_zero_veil = (uint16_t*)hgfx->FBStartAdress;
+ pDestination_zero_veil += ((479 + (drawVeilUntil)) + ((w1 + window->left) * hgfx->ImageHeight) );
+ }
}
- else if(drawVeilUntil < 0 )
+ else
{
- pDestination_zero_veil = hgfx->FBStartAdress + 2 * ( (479 + (drawVeilUntil) ) + ( (w1 + window->left) * hgfx->ImageHeight) );
+ if(drawVeilUntil > 0)
+ {
+ pDestination_zero_veil = (uint16_t*)hgfx->FBStartAdress;
+ pDestination_zero_veil += (((drawVeilUntil) ) + ( (window->right - w1) * hgfx->ImageHeight) );
+ }
+ else if(drawVeilUntil < 0 )
+ {
+ pDestination_zero_veil = (uint16_t*)hgfx->FBStartAdress;
+ pDestination_zero_veil += 479 - drawVeilUntil + ( (window->right - w1 -1) * hgfx->ImageHeight);
+ }
}
-
if(h_ulong + window->top > max)
{
max = h_ulong + window->top;
@@ -1543,29 +1667,65 @@
//output_mask[pointer] = true;
if(w1 > 0)
{
- pDestination_start = hgfx->FBStartAdress + (2 * ((479 - (window->top)) + ((w1 + window->left) * hgfx->ImageHeight)));
- pDestination_end = pDestination_start;
- if(h_ulong >= h_ulong_old)
+ pDestination_start = (uint16_t*)hgfx->FBStartAdress;
+ if(!pSettings->FlipDisplay)
{
- pDestination_start -= 2 * h_ulong_old;
- pDestination_end -= 2 * h_ulong;
+ pDestination_start += (((479 - (window->top)) + ((w1 + window->left) * hgfx->ImageHeight)));
}
else
{
- pDestination_start -= 2 * h_ulong;
- pDestination_end -= 2 * h_ulong_old;
+ pDestination_start += (((window->top) + ((window->right - w1) * hgfx->ImageHeight)));
}
+ pDestination_end = pDestination_start;
+
+ if(!pSettings->FlipDisplay)
+ {
+ if(h_ulong >= h_ulong_old)
+ {
+ pDestination_start -= h_ulong_old;
+ pDestination_end -= h_ulong;
+ }
+ else
+ {
+ pDestination_start -= h_ulong;
+ pDestination_end -= h_ulong_old;
+ }
+ }
+ else
+ {
+ if(h_ulong < h_ulong_old)
+ {
+ pDestination_start += h_ulong_old;
+ pDestination_end += h_ulong;
+ }
+ else
+ {
+ pDestination_start += h_ulong;
+ pDestination_end += h_ulong_old;
+ }
+ }
+
// deco stops
if(drawVeilUntil < 0)
{
- pDestination_tmp = pDestination_end;
- while(pDestination_tmp <= pDestination_zero_veil)
+ if(!pSettings->FlipDisplay)
{
- *(__IO uint8_t*)pDestination_tmp = colormask;
- pDestination_tmp -= 1;
- *(__IO uint8_t*)pDestination_tmp = 0x80;
- pDestination_tmp += 3;
+ pDestination_tmp = pDestination_end;
+ while(pDestination_tmp <= pDestination_zero_veil)
+ {
+ *(__IO uint16_t*)pDestination_tmp = (0x80 << 8) | colormask;
+ pDestination_tmp++;
+ }
+ }
+ else
+ {
+ pDestination_tmp = pDestination_zero_veil;
+ while(pDestination_tmp <= pDestination_end)
+ {
+ *(__IO uint16_t*)pDestination_tmp = (0x80 << 8) | colormask;
+ pDestination_tmp++;
+ }
}
}
else
@@ -1573,20 +1733,31 @@
// regular graph with veil underneath if requested
// von oben nach unten
// von grossen pDestination Werten zu kleinen pDestination Werten
- pDestination_tmp = pDestination_start;
- while(pDestination_tmp >= pDestination_end)
+ {
+ pDestination_tmp = pDestination_start;
+ while(pDestination_tmp >= pDestination_end)
+ {
+ *(__IO uint16_t*)pDestination_tmp = (0xFF << 8) | colormask ;
+ pDestination_tmp--;
+ }
+ }
+
+ if(!pSettings->FlipDisplay)
{
- *(__IO uint8_t*)pDestination_tmp = colormask;
- pDestination_tmp += 1;
- *(__IO uint8_t*)pDestination_tmp = 0xFF;
- pDestination_tmp -= 3;
+ while((drawVeilUntil > 0) && (pDestination_tmp >= pDestination_zero_veil))
+ {
+ *(__IO uint16_t*)pDestination_tmp = (0x20 << 8) | colormask ;
+ pDestination_tmp--;
+ }
}
- while((drawVeilUntil > 0) && (pDestination_tmp >= pDestination_zero_veil))
+ else
{
- *(__IO uint8_t*)pDestination_tmp = colormask;
- pDestination_tmp += 1;
- *(__IO uint8_t*)pDestination_tmp = 0x20;
- pDestination_tmp -= 3;
+ pDestination_tmp = pDestination_start;
+ while((drawVeilUntil > 0) && (pDestination_tmp <= pDestination_zero_veil))
+ {
+ *(__IO uint16_t*)pDestination_tmp = (0x20 << 8) | colormask ;
+ pDestination_tmp++;
+ }
}
}
}
@@ -1671,11 +1842,13 @@
void GFX_draw_box(GFX_DrawCfgScreen *hgfx, point_t LeftLow, point_t WidthHeight, uint8_t Style, uint8_t color)
{
- uint32_t pDestination, pStart;
+ uint16_t* pDestination;
+ uint16_t* pStart;
uint32_t j;
uint32_t lineWidth, lineHeight;
int x, y;
uint8_t intensity;
+ int stepdir;
typedef struct {
int x;
@@ -1701,66 +1874,85 @@
{4,3,110}
};
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
lineWidth = WidthHeight.x;
lineHeight = WidthHeight.y;
-
- pStart = (uint32_t)hgfx->FBStartAdress;
- pStart += LeftLow.x * hgfx->ImageHeight * 2;
- pStart += LeftLow.y * 2;
+ pStart = (uint16_t*)hgfx->FBStartAdress;
+
+ if(!pSettings->FlipDisplay)
+ {
+ pStart += LeftLow.x * hgfx->ImageHeight;
+ pStart += LeftLow.y;
+ stepdir = 1;
+ }
+ else
+ {
+ pStart += (800 - LeftLow.x - 1) * hgfx->ImageHeight;
+ pStart += (480 - LeftLow.y);
+ stepdir = -1;
+ }
// Untere Linie
pDestination = pStart;
if(Style)
{
- pDestination += 2 * 10 * hgfx->ImageHeight;
+ pDestination += stepdir * 10 * hgfx->ImageHeight;
lineWidth -= 18;
}
for (j = lineWidth; j > 0; j--)
{
+
*(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination += hgfx->ImageHeight * 2;
+ pDestination += stepdir * hgfx->ImageHeight;
}
// Obere Linie
- pDestination = pStart + 2 * WidthHeight.y;
+
+ pDestination = pStart + stepdir * WidthHeight.y;
if(Style)
{
- pDestination += 2 * 10 * hgfx->ImageHeight;
+ pDestination += stepdir * 10 * hgfx->ImageHeight;
}
for (j = lineWidth; j > 0; j--)
{
*(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination += hgfx->ImageHeight * 2;
+ pDestination += stepdir * hgfx->ImageHeight;
}
// Linke Linie
pDestination = pStart;
+
if(Style)
{
- pDestination += 2 * 10;
+ pDestination += stepdir * 10;
lineHeight -= 18;
}
for (j = lineHeight; j > 0; j--)
{
*(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination += 2;
+ pDestination += stepdir;
}
+
// Rechte Linie
- pDestination = pStart + 2 * WidthHeight.x * hgfx->ImageHeight;
+
+ pDestination = pStart + stepdir * WidthHeight.x * hgfx->ImageHeight;
if(Style)
{
- pDestination += 2 * 10;
+ pDestination += stepdir * 10;
}
for (j = lineHeight; j > 0; j--)
{
*(__IO uint16_t*)pDestination = 0xFF00 + color;
- pDestination += 2;
+ pDestination += stepdir;
}
+
// Ecken wenn notwendig == Style
if(Style)
{
@@ -1769,60 +1961,61 @@
x = corner[0].x;
y = corner[0].y;
intensity = corner[0].intensity;
- *(__IO uint16_t*)(pDestination + 2 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+
+ *(__IO uint16_t*)(pDestination + stepdir * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
for(j = 15; j > 0; j--)
{
x = corner[j].x;
y = corner[j].y;
intensity = corner[j].intensity;
- *(__IO uint16_t*)(pDestination + 2 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
- *(__IO uint16_t*)(pDestination + 2 * (x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
}
// links oben
- pDestination = pStart + 2 * WidthHeight.y;
+ pDestination = pStart + stepdir * WidthHeight.y;
x = corner[0].x;
y = corner[0].y;
intensity = corner[0].intensity;
- *(__IO uint16_t*)(pDestination + 2 * (-y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (-y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
for(j = 15; j > 0; j--)
{
x = corner[j].x;
y = corner[j].y;
intensity = corner[j].intensity;
- *(__IO uint16_t*)(pDestination + 2 * (-y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
- *(__IO uint16_t*)(pDestination + 2 * (-x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (-y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (-x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
}
// rechts unten
- pDestination = pStart + 2 * WidthHeight.x * hgfx->ImageHeight;
+ pDestination = pStart + stepdir * WidthHeight.x * hgfx->ImageHeight;
x = corner[0].x;
y = corner[0].y;
intensity = corner[0].intensity;
- *(__IO uint16_t*)(pDestination + 2 * (y - (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (y - (x * hgfx->ImageHeight))) = (intensity << 8) + color;
for(j = 15; j > 0; j--)
{
x = corner[j].x;
y = corner[j].y;
intensity = corner[j].intensity;
- *(__IO uint16_t*)(pDestination + 2 * (y - (x * hgfx->ImageHeight))) = (intensity << 8) + color;
- *(__IO uint16_t*)(pDestination + 2 * (x - (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (y - (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * (x - (y * hgfx->ImageHeight))) = (intensity << 8) + color;
}
// rechts oben
- pDestination = pStart + 2 * WidthHeight.y + 2 * WidthHeight.x * hgfx->ImageHeight;
+ pDestination = pStart + stepdir * WidthHeight.y + stepdir * WidthHeight.x * hgfx->ImageHeight;
x = corner[0].x;
y = corner[0].y;
intensity = corner[0].intensity;
- *(__IO uint16_t*)(pDestination - 2 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * -1 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
for(j = 15; j > 0; j--)
{
x = corner[j].x;
y = corner[j].y;
intensity = corner[j].intensity;
- *(__IO uint16_t*)(pDestination - 2 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
- *(__IO uint16_t*)(pDestination - 2 * (x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * -1 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+ *(__IO uint16_t*)(pDestination + stepdir * -1 * (x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
}
}
}
@@ -1871,6 +2064,11 @@
GFX_DrawCfgWindow hgfx;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+
if(XrightGimpStyle > 799)
XrightGimpStyle = 799;
if(XleftGimpStyle >= XrightGimpStyle)
@@ -1881,14 +2079,27 @@
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
hgfx.WindowTab = 0;
- hgfx.WindowX0 = XleftGimpStyle;
- hgfx.WindowX1 = XrightGimpStyle;
- hgfx.WindowY1 = 479 - YtopGimpStyle;
- if(hgfx.WindowY1 < Font->height)
- hgfx.WindowY0 = 0;
+
+ if(!pSettings->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;
+ if(hgfx.WindowY0 + Font->height > 480)
+ hgfx.WindowY1 = 480;
+ else
+ hgfx.WindowY1 = hgfx.WindowY0 + Font->height;
+ }
GFX_write_label(Font, &hgfx, text, color);
}
@@ -2374,8 +2585,7 @@
uint32_t i, j;
uint32_t width, height;
uint32_t found;
- uint32_t pDestination;
- uint32_t pDestinationColor;
+ uint16_t* pDestination;
uint32_t pSource;
uint32_t OffsetDestination;
uint32_t width_left;
@@ -2385,7 +2595,20 @@
uint8_t fill;
uint32_t widthFont, heightFont;
uint32_t nextLine;
-
+ int32_t stepdir;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ if(pSettings->FlipDisplay)
+ {
+ stepdir = -1; /* decrement address while putting pixels */
+ }
+ else
+ {
+ stepdir = 1;
+ }
+
if(hgfx->Image->ImageWidth <= (hgfx->WindowX0 + cfg->Xdelta))
return 0x0000FFFF;
@@ -2404,23 +2627,32 @@
return cfg->Xdelta;
pSource = ((uint32_t)Font->chars[i].image->data);
- pDestination = 1 + (uint32_t)hgfx->Image->FBStartAdress;
+ pDestination = (uint16_t*)(hgfx->Image->FBStartAdress+1);
heightFont = Font->chars[i].image->height;
widthFont = Font->chars[i].image->width;
height = heightFont*2;
width = widthFont*2;
-
- OffsetDestination = 2 * (hgfx->Image->ImageHeight - height);
-
- pDestination += (hgfx->WindowX0 + cfg->Xdelta) * hgfx->Image->ImageHeight * 2;
- pDestination += (hgfx->WindowY0 + cfg->Ydelta) * 2;
- nextLine = hgfx->Image->ImageHeight * 2;
+
+
+ if(pSettings->FlipDisplay)
+ {
+ pDestination += (uint32_t)(hgfx->WindowX1 - cfg->Xdelta) * hgfx->Image->ImageHeight; /* set pointer to delta row */
+ pDestination += (hgfx->WindowY1 - cfg->Ydelta); /* set pointer to delta colum */
+ }
+ else
+ {
+ pDestination += (uint32_t)(hgfx->WindowX0 + cfg->Xdelta) * hgfx->Image->ImageHeight; /* set pointer to delta row */
+ pDestination += (hgfx->WindowY0 + cfg->Ydelta); /* set pointer to delta colum */
+ }
+ OffsetDestination = (hgfx->Image->ImageHeight - height);
+ nextLine = hgfx->Image->ImageHeight;
// -----------------------------
char_truncated_WidthFlag = 0;
width_left = hgfx->Image->ImageWidth - (hgfx->WindowX0 + cfg->Xdelta);
+
if(width_left < width)
{
char_truncated_WidthFlag = 1;
@@ -2428,6 +2660,7 @@
widthFont = width/2;
}
// -----------------------------
+
char_truncated_Height = 0;
height_left = hgfx->Image->ImageHeight - (hgfx->WindowY0 + cfg->Ydelta);
if(height_left < height)
@@ -2441,26 +2674,12 @@
height = height_left;
heightFont = height/2;
}
- OffsetDestination += 2 * char_truncated_Height;
+
+ OffsetDestination += char_truncated_Height;
// -----------------------------
if(height == 0)
return 0x0000FFFF;
// -----------------------------
-
- if((cfg->color > 0) )
- {
- pDestinationColor = pDestination - 1;
-
- for(i = width; i > 0; i--)
- {
- for (j = height; j > 0; j--)
- {
- *(__IO uint32_t*)pDestinationColor = cfg->color;
- pDestinationColor += 2;
- }
- pDestinationColor += OffsetDestination;
- }
- }
if(cfg->singleSpaceWithSizeOfNextChar)
{
@@ -2476,12 +2695,12 @@
{
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = fill;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = fill;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | fill;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | fill;
+ pDestination += stepdir;
}
- pDestination += OffsetDestination;
+ pDestination += stepdir * OffsetDestination;
}
}
else
@@ -2496,37 +2715,37 @@
{
for (j = heightFont; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
}
pSource += char_truncated_Height;
}
@@ -2535,33 +2754,33 @@
pSource++;
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 |0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 |0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
}
}
- pDestination += OffsetDestination + nextLine;
+ pDestination += (OffsetDestination + nextLine) * stepdir;
}
}
else
@@ -2573,21 +2792,21 @@
{
for (j = heightFont; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF - *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | (0xFF - *(uint8_t*)pSource);
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
}
pSource += char_truncated_Height;
}
@@ -2596,24 +2815,24 @@
pSource++;
for (j = heightFont; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- *(__IO uint8_t*)(pDestination + nextLine) = 0xFF;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ *(__IO uint16_t*)(pDestination + nextLine) = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
}
}
- pDestination += OffsetDestination + nextLine;
+ pDestination += (OffsetDestination + nextLine) * stepdir;
}
}
- }
+ } /* inverted */
else
{
if((heightFont & 3) == 0) /* unroll for perfomance, by 4 if possible, by 2 (16bit) otherwise */
@@ -2625,46 +2844,46 @@
{
for (j = heightFont; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
}
pSource += char_truncated_Height;
}
else
{
pSource++;
- pDestination += 2 * height;
+ pDestination += stepdir * height;
}
- pDestination += OffsetDestination + nextLine;
+ pDestination += stepdir * (OffsetDestination + nextLine);
}
}
else
@@ -2676,30 +2895,30 @@
{
for (j = heightFont; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
-
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- *(__IO uint8_t*)(pDestination + nextLine) = *(uint8_t*)pSource;
+
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource;
+ *(__IO uint16_t*)(pDestination + (stepdir * nextLine)) = cfg->color << 8 | *(uint8_t*)pSource;
+ pDestination += stepdir;
pSource++;
- pDestination += 2;
}
pSource += char_truncated_Height;
}
else
{
pSource++;
- pDestination += 2 * height;
+ pDestination += stepdir * height;
}
- pDestination += OffsetDestination + nextLine;
+ pDestination += stepdir * (OffsetDestination + nextLine);
}
}
}
@@ -2747,8 +2966,7 @@
uint32_t i, j;
uint32_t width, height;
uint32_t found;
- uint32_t pDestination;
- uint32_t pDestinationColor;
+ uint16_t* pDestination;
uint32_t pSource;
uint32_t OffsetDestination;
uint32_t width_left;
@@ -2756,6 +2974,19 @@
uint32_t char_truncated_WidthFlag;
uint32_t char_truncated_Height;
uint8_t fill;
+ int16_t stepdir;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ if(pSettings->FlipDisplay)
+ {
+ stepdir = -1; /* decrement address while putting pixels */
+ }
+ else
+ {
+ stepdir = 1;
+ }
if(hgfx->Image->ImageWidth <= (hgfx->WindowX0 + cfg->Xdelta))
return 0x0000FFFF;
@@ -2784,16 +3015,28 @@
pSource = ((uint32_t)Font->chars[i].image->data);
- pDestination = 1 + (uint32_t)hgfx->Image->FBStartAdress;
+ pDestination = (uint16_t*)(hgfx->Image->FBStartAdress + 1);
height = Font->chars[i].image->height;
width = Font->chars[i].image->width;
- OffsetDestination = 2 * (hgfx->Image->ImageHeight - height);
-
- pDestination += (hgfx->WindowX0 + cfg->Xdelta) * hgfx->Image->ImageHeight * 2;
- pDestination += (hgfx->WindowY0 + cfg->Ydelta) * 2;
-
+ OffsetDestination = hgfx->Image->ImageHeight - height;
+
+
+ /* Xyyyyy y= height */
+ /* Xyyyyy x= width */
+ /* Xyyyyy */
+
+ if(pSettings->FlipDisplay)
+ {
+ pDestination += (hgfx->WindowX1 - cfg->Xdelta) * hgfx->Image->ImageHeight; /* set pointer to delta row */
+ pDestination += (hgfx->WindowY1 - cfg->Ydelta); /* set pointer to delta colum */
+ }
+ else
+ {
+ pDestination += (hgfx->WindowX0 + cfg->Xdelta) * hgfx->Image->ImageHeight; /* set pointer to delta row */
+ pDestination += (hgfx->WindowY0 + cfg->Ydelta); /* set pointer to delta colum */
+ }
// -----------------------------
@@ -2817,27 +3060,12 @@
}
height = height_left;
}
- OffsetDestination += 2 * char_truncated_Height;
+ OffsetDestination += char_truncated_Height;
// -----------------------------
if(height == 0)
return 0x0000FFFF;
// -----------------------------
- if((cfg->color > 0) )//&& (cfg->color < 6))
- {
- pDestinationColor = pDestination - 1;
-
- for(i = width; i > 0; i--)
- {
- for (j = height; j > 0; j--)
- {
- *(__IO uint32_t*)pDestinationColor = cfg->color;//ColorLUT[cfg->color - 1];
- pDestinationColor += 2;
- }
- pDestinationColor += OffsetDestination;
- }
- }
-
if(cfg->singleSpaceWithSizeOfNextChar)
{
cfg->singleSpaceWithSizeOfNextChar = 0;
@@ -2852,12 +3080,12 @@
{
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = fill;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = fill;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | fill;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | fill;
+ pDestination += stepdir;
}
- pDestination += OffsetDestination;
+ pDestination += stepdir * OffsetDestination;
}
}
else
@@ -2870,39 +3098,36 @@
{
if(*(uint8_t*)pSource != 0x01)
{
+
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource++);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource++);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource++);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource++);
+ pDestination += stepdir;
}
pSource += char_truncated_Height;
}
- else
+ else /* empty line => fast fill */
{
pSource++;
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
}
}
- pDestination += OffsetDestination;
+ pDestination += stepdir * OffsetDestination;
}
}
else
@@ -2914,12 +3139,10 @@
{
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF - *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource++);
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | (0xFF - *(uint8_t*)pSource++);
+ pDestination += stepdir;
}
pSource += char_truncated_Height;
}
@@ -2928,50 +3151,49 @@
pSource++;
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = 0xFF;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | 0xFF;
+ pDestination += stepdir;
}
}
- pDestination += OffsetDestination;
+ pDestination += stepdir * OffsetDestination;
}
}
}
- else
+ else /* not inverted */
{
if((height & 3) == 0) /* unroll for perfomance, by 4 if possible, by 2 (16bit) otherwise */
{
+
height /= 4;
+
for(i = width; i > 0; i--)
{
if(*(uint8_t*)pSource != 0x01)
{
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource++;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource++;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource++;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource++;
+ pDestination += stepdir;
}
pSource += char_truncated_Height;
}
else
{
pSource++;
- pDestination += 2 * height * 4;
+ pDestination += stepdir * height * 4;
}
- pDestination += OffsetDestination;
+ pDestination += stepdir * OffsetDestination;
}
}
+
else
{
height /= 2;
@@ -2981,21 +3203,19 @@
{
for (j = height; j > 0; j--)
{
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
- *(__IO uint8_t*)pDestination = *(uint8_t*)pSource;
- pSource++;
- pDestination += 2;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource++;
+ pDestination += stepdir;
+ *(__IO uint16_t*)pDestination = cfg->color << 8 | *(uint8_t*)pSource++;
+ pDestination += stepdir;
}
pSource += char_truncated_Height;
}
else
{
pSource++;
- pDestination += 2 * height * 2;
+ pDestination += stepdir * height * 2;
}
- pDestination += OffsetDestination;
+ pDestination += stepdir * OffsetDestination;
}
}
}
@@ -3831,24 +4051,43 @@
{
GFX_DrawCfgWindow hgfx;
- if(XrightGimpStyle > 799)
- XrightGimpStyle = 799;
- if(XleftGimpStyle >= XrightGimpStyle)
- XleftGimpStyle = 0;
- if(YtopGimpStyle > 479)
- YtopGimpStyle = 479;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ if(!pSettings->FlipDisplay)
+ {
+ if(XrightGimpStyle > 799)
+ XrightGimpStyle = 799;
+ if(XleftGimpStyle >= XrightGimpStyle)
+ XleftGimpStyle = 0;
+ if(YtopGimpStyle > 479)
+ YtopGimpStyle = 479;
+ }
hgfx.Image = tMscreen;
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
hgfx.WindowTab = 0;
- hgfx.WindowX0 = XleftGimpStyle;
- hgfx.WindowX1 = XrightGimpStyle;
- hgfx.WindowY1 = 479 - YtopGimpStyle;
- if(hgfx.WindowY1 < Font->height)
- hgfx.WindowY0 = 0;
+
+ if(!pSettings->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;
+ if(hgfx.WindowY0 + Font->height >= 479)
+ hgfx.WindowY1 = 479;
+ else
+ hgfx.WindowY1 = hgfx.WindowY0 + Font->height;
+ }
GFX_write_string_color(Font, &hgfx, text, 0, color);
}
@@ -3861,14 +4100,25 @@
hgfx.Image = tMscreen;
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
hgfx.WindowTab = 0;
hgfx.WindowX0 = 20;
hgfx.WindowX1 = 779;
- hgfx.WindowY1 = 479;
- hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
-
+
+ if(!pSettings->FlipDisplay)
+ {
+ hgfx.WindowY1 = 479;
+ hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+ }
+ else
+ {
+ hgfx.WindowY0 = 0;
+ hgfx.WindowY1 = Font->height;
+ }
GFX_write_label(Font, &hgfx, text, color);
-
}
@@ -3878,16 +4128,29 @@
const tFont *Font = &FontT48;
char text[7];
uint8_t i, secondDigitPage, secondDigitTotal;
-
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
hgfx.Image = tMscreen;
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
hgfx.WindowTab = 0;
- hgfx.WindowX1 = 779;
- hgfx.WindowX0 = hgfx.WindowX1 - (25*5);
- hgfx.WindowY1 = 479;
- hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
-
+
+ if(!pSettings->FlipDisplay)
+ {
+ hgfx.WindowX1 = 779;
+ hgfx.WindowX0 = hgfx.WindowX1 - (25*5);
+ hgfx.WindowY1 = 479;
+ hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+ }
+ else
+ {
+ hgfx.WindowX1 = 25*5;
+ hgfx.WindowX0 = 0;
+ hgfx.WindowY1 = Font->height;;
+ hgfx.WindowY0 = 0;
+ }
if(page > 99)
page = 99;
if(total > 99)
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/settings.c
--- a/Discovery/Src/settings.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/settings.c Thu Jan 03 19:59:36 2019 +0100
@@ -82,7 +82,7 @@
* There might even be entries with fixed values that have no range
*/
const SSettings SettingsStandard = {
- .header = 0xFFFF0017,
+ .header = 0xFFFF0018,
.warning_blink_dsec = 8 * 2,
.lastDiveLogId = 0,
.logFlashNextSampleStartAddress = 0,
@@ -305,6 +305,7 @@
.FactoryButtonBalance[0] = 3,
.FactoryButtonBalance[1] = 3,
.FactoryButtonBalance[2] = 3,
+ .FlipDisplay = 0,
};
/* Private function prototypes -----------------------------------------------*/
@@ -442,6 +443,9 @@
pSettings->FactoryButtonBalance[1] = pStandard->FactoryButtonBalance[1];
pSettings->FactoryButtonBalance[2] = pStandard->FactoryButtonBalance[2];
// no break
+ case 0xFFFF0017:
+ pSettings->FlipDisplay = 0;
+ // no break
default:
pSettings->header = pStandard->header;
break; // no break before!!
@@ -1381,6 +1385,11 @@
corrections++;
}
+ if(Settings.FlipDisplay > 1) /* only boolean values allowed */
+ {
+ Settings.FlipDisplay = 0;
+ corrections++;
+ }
if(corrections > 255)
return 255;
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/show_logbook.c
--- a/Discovery/Src/show_logbook.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/show_logbook.c Thu Jan 03 19:59:36 2019 +0100
@@ -149,18 +149,19 @@
winsmal.right = wintemp.left -1;
winsmal.bottom = winsmal.top + 16;
- write_label_(hgfx, winsmal,&FontT24,CLUT_GasSensor1,"[m]");
- winsmal.left = wintemp.left - 48;
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_GasSensor1,"[m]");
+
+ // winsmal.left = wintemp.left - 48;
char msg[3];
float deltaline = ((float)(wintemp.bottom - wintemp.top))/5;
for(int i = 1; i<=5; i++)
{
-
winsmal.top = wintemp.top + deltaline * i - 14;
winsmal.bottom = winsmal.top + 16;
- winsmal.right = wintemp.left - 2;
+
+ // winsmal.right = wintemp.left - 2;
snprintf(msg,5,"%i",i * vstep);
- write_label_(hgfx, winsmal,&FontT24,CLUT_GasSensor1,msg);
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_GasSensor1,msg);
}
//vertical (Time) *******************************************************************
@@ -188,18 +189,17 @@
winsmal.right = winsmal.left + 60;
winsmal.bottom = winsmal.top + 16;
-
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_GasSensor1,"min");
for(int i = 1; i<=lines; i++)
{
winsmal.left= wintemp.left + vdeltaline * i - 15;
winsmal.right = winsmal.left + 30;
snprintf(msg,5,"%3i",i * timestep);
- write_label_(hgfx, winsmal,&FontT24,CLUT_GasSensor1,msg);
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_GasSensor1,msg);
}
winsmal.left = wintemp.left;// - 9;
winsmal.top = wintemp.top - 40;
winsmal.right = winsmal.left + 60;
- write_label_(hgfx, winsmal,&FontT24,CLUT_GasSensor1,"min");;
//--- print depth graph ---
//adapt window
@@ -238,21 +238,35 @@
GFX_graph_print(hgfx,&wintemp,saveTop,1,0,datamax, decostopdata,dataLength, CLUT_NiceGreen, NULL);
}
+ if(settingsGetPointer()->FlipDisplay)
+ {
+ winsmal.right = 800 - wintemp.left;
+ winsmal.left = 800 - wintemp.right;
+ winsmal.bottom = wintemp.bottom;
+ winsmal.top = wintemp.top;
+ }
+ else
+ {
+ winsmal.right = wintemp.right;
+ winsmal.left = wintemp.left;
+ winsmal.bottom = wintemp.bottom;
+ winsmal.top = wintemp.top;
+ }
+
switch(mode)
{
case 0:
- GFX_graph_print(hgfx,&wintemp,0,1,0,datamax, depthdata,dataLength,CLUT_GasSensor1, NULL);
+ GFX_graph_print(hgfx,&winsmal,0,1,0,datamax, depthdata,dataLength,CLUT_GasSensor1, NULL);
break;
case 1:
- GFX_graph_print(hgfx,&wintemp,saveBottom,1,0,datamax, depthdata,dataLength,CLUT_GasSensor0,colordata);
+ GFX_graph_print(hgfx,&winsmal,saveBottom,1,0,datamax, depthdata,dataLength,CLUT_GasSensor0,colordata);
break;
case 2:
if(*colordata)
- GFX_graph_print(hgfx,&wintemp,0,1,0,datamax, depthdata,dataLength,CLUT_GasSensor0,colordata);
+ GFX_graph_print(hgfx,&winsmal,0,1,0,datamax, depthdata,dataLength,CLUT_GasSensor0,colordata);
else
- GFX_graph_print(hgfx,&wintemp,0,1,0,datamax, depthdata,dataLength,CLUT_GasSensor1, NULL);
+ GFX_graph_print(hgfx,&winsmal,0,1,0,datamax, depthdata,dataLength,CLUT_GasSensor1, NULL);
}
-
}
@@ -452,7 +466,9 @@
uint8_t day = logbookHeader.dateDay;
char text[40];
snprintf(text, 20, "20%02i-%02i-%02i", year, month, day);
- Gfx_write_label_var(hgfx, 30, 150,10, &FontT42,CLUT_GasSensor1,text);
+
+ Gfx_write_label_var(hgfx, 30, 250,10, &FontT42,CLUT_GasSensor1,text);
+
// Print logbook number with offset
if(settingsGetPointer()->logbookOffset)
@@ -535,7 +551,7 @@
winsmal.left = 30;
winsmal.top = top -3;
winsmal.bottom = winsmal.top + FontT42.height;
- winsmal.right = winsmal.left + 50;
+
if(maxdepth < 10)
{
winsmal.left = 137;
@@ -548,7 +564,9 @@
{
winsmal.left = 147;
}
- write_label_(hgfx, winsmal,&FontT24,CLUT_GasSensor4,"max");
+ winsmal.right = winsmal.left + 50;
+
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,top, &FontT24,CLUT_GasSensor4,"max");
snprintf(text,3,"%c%c"
, unit_depth_char1()
, unit_depth_char2()
@@ -570,10 +588,12 @@
snprintf(text,20,"%i.%i",avrdepth,avrdepth_dcm);
}
Gfx_write_label_var(hgfx, 30, 250,top, &FontT42,CLUT_GasSensor1,text);
+
winsmal.left = 30;
winsmal.top = top -3;
winsmal.bottom = winsmal.top + FontT42.height;
- winsmal.right = winsmal.left + 50;
+
+/* put avg behind previous string */
if(avrdepth < 10)
{
winsmal.left = 137 ;
@@ -586,7 +606,9 @@
{
winsmal.left = 147;
}
- write_label_(hgfx, winsmal,&FontT24,CLUT_GasSensor4,"avg");
+ winsmal.right = winsmal.left + 50;
+
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_GasSensor4,"avg");
snprintf(text,3,"%c%c"
, unit_depth_char1()
, unit_depth_char2()
@@ -634,6 +656,7 @@
wintemp.left = 330;
wintemp.top = 160;
wintemp.bottom -= 40;
+
show_logbook_draw_depth_graph(hgfx, StepBackwards, &wintemp, 1, dataLength, depthdata, gasdata, NULL);
}
@@ -682,8 +705,7 @@
winsmal.right = wintemp.right + 30;
winsmal.bottom = winsmal.top + 16;
- write_label_(hgfx, winsmal,&FontT24,CLUT_LogbookTemperature,"[C]");
-
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_LogbookTemperature,"[C]");
int16_t minVal = 0;
int16_t maxVal = 0;
@@ -715,7 +737,7 @@
snprintf(msg,2,"%1i",tmp);
else
snprintf(msg,3,"%2i",tmp);
- write_label_(hgfx, winsmal,&FontT24,CLUT_LogbookTemperature,msg);
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,CLUT_LogbookTemperature,msg);
}
@@ -1017,7 +1039,7 @@
print_gas_name(gas_name,15,logbookHeader.gasordil[i].oxygen_percentage,logbookHeader.gasordil[i].helium_percentage);
snprintf(msg,15,"G%i: %s",i + 1, gas_name);
//msg[10] = 0;
- write_label_(hgfx, winsmal,&FontT24,color,msg);
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,msg);
}
}
@@ -1089,7 +1111,7 @@
winsmal.right = winsmal.left + 55;
color = CLUT_GasSensor1;//LOGBOOK_GRAPH_DEPTH;
- write_label_(hgfx, winsmal,&FontT24,color,"depth");
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,"depth");
}
winsmal.left = 799 - 67;//wintemp.right -67;
@@ -1097,12 +1119,12 @@
color = CLUT_LogbookTemperature;//LOGBOOK_GRAPH_DEPTH;
if(logbookHeader.diveMode != DIVEMODE_CCR)
- write_label_(hgfx, winsmal,&FontT24,color,"\002PP O2");
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,"\002PP O2");
else
if(logbookHeader.CCRmode != CCRMODE_Sensors)
- write_label_(hgfx, winsmal,&FontT24,color,"\002SETPOINT");
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,"\002SETPOINT");
else
- write_label_(hgfx, winsmal,&FontT24,color,"\002SENSORS");
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,"\002SENSORS");
//*** PP O2 ****************************************************
//calc lines and labels
@@ -1142,7 +1164,7 @@
//winsmal.font = ft_tiny + ft_SLIM;
color = CLUT_LogbookTemperature;// = LOGBOOK_GRAPH_TEMP;
- write_label_(hgfx, winsmal,&FontT24,color,"bar");
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,"bar");
int deltaline = (wintemp.bottom - wintemp.top)/5;
char msg[4];
@@ -1155,7 +1177,7 @@
winsmal.top = wintemp.top + deltaline * i - 8;
winsmal.bottom = winsmal.top + 16;
snprintf(msg,4,"%1.1f",oxy);
- write_label_(hgfx, winsmal,&FontT24,color,msg);
+ Gfx_write_label_var(hgfx, winsmal.left, winsmal.right,winsmal.top, &FontT24,color,msg);
//oled_write(OVERLAY, &winsmal,msg,false,true);
}
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/t3.c
--- a/Discovery/Src/t3.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/t3.c Thu Jan 03 19:59:36 2019 +0100
@@ -103,6 +103,9 @@
void t3_init(void)
{
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
if(getLicence() == LICENCEBONEX)
{
t3_customviews = t3_customviewsScooter;
@@ -119,17 +122,37 @@
t3l1.WindowNumberOfTextLines = 2;
t3l1.WindowLineSpacing = 19; // Abstand von Y0
t3l1.WindowTab = 100;
- t3l1.WindowX0 = 0;
- t3l1.WindowX1 = BigFontSeperationLeftRight - 5;
- t3l1.WindowY0 = BigFontSeperationTopBottom + 5;
- t3l1.WindowY1 = 479;
+
+ if(!pSettings->FlipDisplay)
+ {
+ t3l1.WindowX0 = 0;
+ t3l1.WindowX1 = BigFontSeperationLeftRight - 5;
+ t3l1.WindowY0 = BigFontSeperationTopBottom + 5;
+ t3l1.WindowY1 = 479;
+ }
+ else
+ {
+ t3l1.WindowX0 = 800 - BigFontSeperationLeftRight + 5;
+ t3l1.WindowX1 = 799;
+ t3l1.WindowY0 = 0;
+ t3l1.WindowY1 = 479 - BigFontSeperationTopBottom + 5 ;
+ }
t3r1.Image = &t3screen;
t3r1.WindowNumberOfTextLines = t3l1.WindowNumberOfTextLines;
t3r1.WindowLineSpacing = t3l1.WindowLineSpacing;
t3r1.WindowTab = t3l1.WindowTab;
- t3r1.WindowX0 = BigFontSeperationLeftRight + 5;
- t3r1.WindowX1 = 799;
+ if(!pSettings->FlipDisplay)
+ {
+ t3r1.WindowX0 = BigFontSeperationLeftRight + 5;
+ t3r1.WindowX1 = 799;
+ }
+ else
+ {
+ t3r1.WindowX0 = 0;
+ t3r1.WindowX1 = BigFontSeperationLeftRight - 5;
+ }
+
t3r1.WindowY0 = t3l1.WindowY0;
t3r1.WindowY1 = t3l1.WindowY1;
@@ -138,16 +161,24 @@
t3c1.WindowLineSpacing = t3l1.WindowLineSpacing;
t3c1.WindowX0 = 0;
t3c1.WindowX1 = 799;
- t3c1.WindowY0 = 0;
- t3c1.WindowY1 = BigFontSeperationTopBottom - 5;
+ if(!pSettings->FlipDisplay)
+ {
+ t3c1.WindowY0 = 0;
+ t3c1.WindowY1 = BigFontSeperationTopBottom - 5;
+ }
+ else
+ {
+ t3c1.WindowY0 = 480 - BigFontSeperationTopBottom + 5;
+ t3c1.WindowY1 = 479;
+ }
t3c2.Image = &t3screen;
t3c2.WindowNumberOfTextLines = 3;
t3c2.WindowLineSpacing = 58;
t3c2.WindowX0 = 370;
t3c2.WindowX1 = 799;
- t3c2.WindowY0 = 0;
- t3c2.WindowY1 = BigFontSeperationTopBottom - 5;
+ t3c2.WindowY0 = t3c1.WindowY0;
+ t3c2.WindowY1 = t3c1.WindowY1;
t3c2.WindowTab = 600;
}
@@ -183,6 +214,9 @@
uint8_t depthChangeAscent;
point_t start, stop, startZeroLine;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
start.x = 0;
stop.x = 799;
stop.y = start.y = BigFontSeperationTopBottom;
@@ -190,6 +224,7 @@
start.y = BigFontSeperationTopBottom;
stop.y = 479;
+
stop.x = start.x = BigFontSeperationLeftRight;
GFX_draw_line(tXscreen, start, stop, CLUT_Font020);
@@ -322,19 +357,50 @@
/* ascentrate graph -standard mode */
if(stateUsed->lifeData.ascent_rate_meter_per_min > 0)
{
- start.y = tXl1->WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = tXl1->WindowY0 - 1;
+ }
+ else
+ {
+ start.y = tXl1->WindowY1 + 1;
+ }
+
for(int i = 0; i<4;i++)
{
start.y += 5*8;
stop.y = start.y;
- start.x = tXl1->WindowX1 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ start.x = tXl1->WindowX1 - 1;
+ }
+ else
+ {
+ start.x = tXr1->WindowX1 - 1;
+ }
stop.x = start.x - 17;
GFX_draw_line(tXscreen, start, stop, 0);
}
// new thick bar design Sept. 2015
- start.x = tXl1->WindowX1 - 3 - 5;
+ if(!pSettings->FlipDisplay)
+ {
+ start.x = tXl1->WindowX1 - 3 - 5;
+ }
+ else
+ {
+ start.x = tXr1->WindowX1 - 3 - 5;
+ }
+
stop.x = start.x;
- start.y = tXl1->WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = tXl1->WindowY0 - 1;
+ }
+ else
+ {
+ start.y = tXl1->WindowY1 + 1;
+ }
+
stop.y = start.y + (uint16_t)(stateUsed->lifeData.ascent_rate_meter_per_min * 8);
stop.y -= 3; // wegen der Liniendicke von 12 anstelle von 9
if(stop.y >= 470)
@@ -600,6 +666,9 @@
char text[512];
uint16_t textpointer = 0;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
// CVIEW_T3_Decostop and CVIEW_T3_TTS
const SDecoinfo * pDecoinfo;
if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE)
@@ -632,7 +701,9 @@
uint16_t tempWinX0;
+ uint16_t tempWinX1;
uint16_t tempWinY0;
+ uint16_t tempWinY1;
uint16_t tempWinC2X0;
uint16_t tempWinC2Tab;
@@ -676,6 +747,12 @@
break;
case CVIEW_T3_StopWatch:
+
+ tempWinX0 = tXc1->WindowX0;
+ tempWinY0 = tXc1->WindowY0;
+ tempWinX1 = tXc1->WindowX1;
+ tempWinY1 = tXc1->WindowY1;
+
Stopwatch.Total = timer_Stopwatch_GetTime();
Stopwatch.Minutes = Stopwatch.Total / 60;
Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 );
@@ -687,19 +764,39 @@
snprintf(text,TEXTSIZE,"\030\003\016%01.1f",unit_depth_float(fAverageDepthAbsolute));
GFX_write_string(&FontT105,tXc1,text,0);
- tempWinX0 = tXc1->WindowX0;
- tempWinY0 = tXc1->WindowY0;
- tXc1->WindowX0 = 480;
+
+
+ if(!pSettings->FlipDisplay)
+ {
+ tXc1->WindowX0 = 480;
+ }
+ else
+ {
+ tXc1->WindowX1 = 320;
+ tXc1->WindowY0 = t3c1.WindowY0; /* select customer window */
+ }
// snprintf(text,TEXTSIZE,"\032\f%c%c - %c",TXT_2BYTE, TXT2BYTE_Clock, TXT_AvgDepth);
+
snprintf(text,TEXTSIZE,"\032\f%c", TXT_Stopwatch);
GFX_write_string(&FontT42,tXc1,text,0);
snprintf(text,TEXTSIZE,"\030\016%01.1f",unit_depth_float(fAverageDepth));
GFX_write_string(&FontT105,tXc1,text,0);
- tXc1->WindowY0 = 100;
+ if(!pSettings->FlipDisplay)
+ {
+ tXc1->WindowY0 = 100;
+ }
+ else
+ {
+ tXc1->WindowY1 -= 100; /* jump to upper of two lines */
+ }
+
snprintf(text,TEXTSIZE,"\030%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds);
GFX_write_string(&FontT105,tXc1,text,0);
+
tXc1->WindowX0 = tempWinX0;
tXc1->WindowY0 = tempWinY0;
+ tXc1->WindowX1 = tempWinX1;
+ tXc1->WindowY1 = tempWinY1;
break;
case CVIEW_T3_GasList:
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/t7.c
--- a/Discovery/Src/t7.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/t7.c Thu Jan 03 19:59:36 2019 +0100
@@ -187,15 +187,23 @@
#define CUSTOMBOX_LINE_LEFT (250)
#define CUSTOMBOX_LINE_RIGHT (549)
+#define CUSTOMBOX_LINE_TOP (0)
+#define CUSTOMBOX_LINE_MIDDLE (142)
+#define CUSTOMBOX_LINE_BOTTOM (318)
#define CUSTOMBOX_INSIDE_OFFSET (2)
#define CUSTOMBOX_OUTSIDE_OFFSET (2)
#define CUSTOMBOX_SPACE_INSIDE (CUSTOMBOX_LINE_RIGHT + 1 - (CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + CUSTOMBOX_INSIDE_OFFSET))
-
+#define TOP_LINE_HIGHT (25)
/* Exported functions --------------------------------------------------------*/
void t7_init(void)
{
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+
if(getLicence() == LICENCEBONEX)
{
customviewsDive = customviewsDiveScooter;
@@ -215,48 +223,217 @@
t7screenCompass.ImageWidth = 1600;
t7screenCompass.LayerIndex = 0;
+ if(!pSettings->FlipDisplay)
+ {
+ t7l1.Image = &t7screen;
+ t7l1.WindowNumberOfTextLines = 2;
+ t7l1.WindowLineSpacing = 19; // Abstand von Y0
+ t7l1.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster
+ t7l1.WindowX0 = 0;
+ t7l1.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET;
+ t7l1.WindowY0 = 318;
+ t7l1.WindowY1 = 479;
+
+ t7l2.Image = &t7screen;
+ t7l2.WindowNumberOfTextLines = 2;
+ t7l2.WindowLineSpacing = 22; // Abstand von Y0
+ t7l2.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster
+ t7l2.WindowX0 = 0;
+ t7l2.WindowX1 = t7l1.WindowX1;
+ t7l2.WindowY0 = 142;
+ t7l2.WindowY1 = t7l1.WindowY0 - 5;
+
+ t7l3.Image = &t7screen;
+ t7l3.WindowNumberOfTextLines = 2;
+ t7l3.WindowLineSpacing = 58; // Abstand von Y0
+ t7l3.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster
+ t7l3.WindowX0 = 0;
+ t7l3.WindowX1 = t7l1.WindowX1;
+ t7l3.WindowY0 = 0;
+ t7l3.WindowY1 = t7l2.WindowY0 - 5;
+
+ t7r1.Image = &t7screen;
+ t7r1.WindowNumberOfTextLines = 2;
+ t7r1.WindowLineSpacing = t7l1.WindowLineSpacing;
+ t7r1.WindowTab = 100;
+ t7r1.WindowX0 = 550;
+ t7r1.WindowX1 = 799;
+ t7r1.WindowY0 = t7l1.WindowY0;
+ t7r1.WindowY1 = 479;
+
+ t7r2.Image = &t7screen;
+ t7r2.WindowNumberOfTextLines = 2;
+ t7r2.WindowLineSpacing = t7l2.WindowLineSpacing;
+ t7r2.WindowTab = 100;
+ t7r2.WindowX0 = 550;
+ t7r2.WindowX1 = 799;
+ t7r2.WindowY0 = t7l2.WindowY0;
+ t7r2.WindowY1 = t7l2.WindowY1;
+
+ t7r3.Image = &t7screen;
+ t7r3.WindowNumberOfTextLines = 2;
+ t7r3.WindowLineSpacing = 0;//t7l3.WindowLineSpacing;
+ t7r3.WindowTab = 100;
+ t7r3.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET;
+ t7r3.WindowX1 = 799;
+ t7r3.WindowY0 = t7l3.WindowY0;
+ t7r3.WindowY1 = t7l3.WindowY1;
+
+ t7cC.Image = &t7screen;
+ t7cC.WindowNumberOfTextLines = 3;
+ t7cC.WindowLineSpacing = 95; // Abstand von Y0
+ t7cC.WindowTab = 100;
+ t7cC.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7cC.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
+ t7cC.WindowY0 = 90;
+ t7cC.WindowY1 = 434 - 95;
+
+ t7cH.Image = &t7screen;
+ t7cH.WindowNumberOfTextLines = 1;
+ t7cH.WindowLineSpacing = 95; // Abstand von Y0
+ t7cH.WindowTab = 100;
+ t7cH.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7cH.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
+ t7cH.WindowY0 = 434 - 94;
+ t7cH.WindowY1 = 434;
+
+ t7cW.Image = &t7screen;
+ t7cW.WindowNumberOfTextLines = 3;
+ t7cW.WindowLineSpacing = 95; // Abstand von Y0
+ t7cW.WindowTab = 100;
+ t7cW.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7cW.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
+ t7cW.WindowY0 = 90;
+ t7cW.WindowY1 = 434 - 95;
+
+
+ t7surfaceL.Image = &t7screen;
+ t7surfaceL.WindowNumberOfTextLines = 9;
+ t7surfaceL.WindowLineSpacing = 53;
+ t7surfaceL.WindowTab = 100;
+ t7surfaceL.WindowX0 = 0;
+ t7surfaceL.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET;
+ t7surfaceL.WindowY0 = 0;
+ t7surfaceL.WindowY1 = 480;
+
+ t7surfaceR.Image = &t7screen;
+ t7surfaceR.WindowNumberOfTextLines = 9;
+ t7surfaceR.WindowLineSpacing = 53;
+ t7surfaceR.WindowTab = 100;
+ t7surfaceR.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET;
+ t7surfaceR.WindowX1 = 800;
+ t7surfaceR.WindowY0 = 0;
+ t7surfaceR.WindowY1 = 480;
+
+ t7cY0free.Image = &t7screen;
+ t7cY0free.WindowNumberOfTextLines = 1;
+ t7cY0free.WindowLineSpacing = 95;
+ t7cY0free.WindowTab = 100;
+ t7cY0free.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7cY0free.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
+ t7cY0free.WindowY0 = 90;
+ t7cY0free.WindowY1 = 434 - 95;
+
+ t7batt.Image = &t7screen;
+ t7batt.WindowNumberOfTextLines = 1;
+ t7batt.WindowLineSpacing = 10;
+ t7batt.WindowTab = 100;
+ t7batt.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
+ t7batt.WindowX0 = t7batt.WindowX1 - (52+52);
+ t7batt.WindowY1 = 479;
+ t7batt.WindowY0 = t7batt.WindowY1 - 25;
+
+ t7charge.Image = &t7screen;
+ t7charge.WindowNumberOfTextLines = 1;
+ t7charge.WindowLineSpacing = 10;
+ t7charge.WindowTab = 100;
+ t7charge.WindowX1 = t7batt.WindowX1 - 18;
+ t7charge.WindowX0 = t7charge.WindowX1 - 14;
+ t7charge.WindowY1 = 479;
+ t7charge.WindowY0 = t7batt.WindowY1 - 25;
+
+ t7voltage.Image = &t7screen;
+ t7voltage.WindowNumberOfTextLines = 1;
+ t7voltage.WindowLineSpacing = 10;
+ t7voltage.WindowTab = 100;
+ t7voltage.WindowX0 = t7charge.WindowX0 - 30; //10
+ t7voltage.WindowX1 = t7voltage.WindowX0 + (18*3)+ 9;
+ t7voltage.WindowY1 = 479;
+ t7voltage.WindowY0 = t7batt.WindowY1 - 25;
+
+ t7c1.Image = &t7screen;
+ t7c1.WindowNumberOfTextLines = 1;
+ t7c1.WindowLineSpacing = 10;
+ t7c1.WindowTab = 100;
+ t7c1.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7c1.WindowX1 = t7batt.WindowX0 - 18;
+ t7c1.WindowY0 = 435;
+ t7c1.WindowY1 = 479;
+
+ t7c2.Image = &t7screen;
+ t7c2.WindowNumberOfTextLines = 1;
+ t7c2.WindowLineSpacing = 0; // Abstand von Y0
+ t7c2.WindowTab = 100;
+ t7c2.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7c2.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
+ t7c2.WindowY0 = 0;
+ t7c2.WindowY1 = 69;
+
+ t7pCompass.Image = &t7screenCompass;
+ t7pCompass.WindowNumberOfTextLines = 1;
+ t7pCompass.WindowLineSpacing = 100; // Abstand von Y0
+ t7pCompass.WindowTab = 100;
+ t7pCompass.WindowX0 = 0;
+ t7pCompass.WindowX1 = 1600-1;
+ t7pCompass.WindowY0 = 0;
+ t7pCompass.WindowY1 = 100-1;
+ }
+ else
+ {
+/* 6 segments (left / right) used to show data during dive */
+
t7l1.Image = &t7screen;
t7l1.WindowNumberOfTextLines = 2;
t7l1.WindowLineSpacing = 19; // Abstand von Y0
t7l1.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster
- t7l1.WindowX0 = 0;
- t7l1.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET;
- t7l1.WindowY0 = 318;
- t7l1.WindowY1 = 479;
+ t7l1.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET;
+ t7l1.WindowX1 = 799;
+ t7l1.WindowY0 = CUSTOMBOX_LINE_TOP;
+ t7l1.WindowY1 = 150 + TOP_LINE_HIGHT;
t7l2.Image = &t7screen;
t7l2.WindowNumberOfTextLines = 2;
t7l2.WindowLineSpacing = 22; // Abstand von Y0
t7l2.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster
- t7l2.WindowX0 = 0;
+ t7l2.WindowX0 = t7l1.WindowX0;
t7l2.WindowX1 = t7l1.WindowX1;
- t7l2.WindowY0 = 142;
- t7l2.WindowY1 = t7l1.WindowY0 - 5;
+ t7l2.WindowY0 = t7l1.WindowY1 + 5;
+ t7l2.WindowY1 = t7l2.WindowY0 + 146;
t7l3.Image = &t7screen;
t7l3.WindowNumberOfTextLines = 2;
t7l3.WindowLineSpacing = 58; // Abstand von Y0
t7l3.WindowTab = 100; // vermtl. ohne Verwendung in diesem Fenster
- t7l3.WindowX0 = 0;
- t7l3.WindowX1 = t7l1.WindowX1;
- t7l3.WindowY0 = 0;
- t7l3.WindowY1 = t7l2.WindowY0 - 5;
+ t7l3.WindowX0 = t7l1.WindowX0;
+ t7l3.WindowX1 = t7l1.WindowX1;;
+ t7l3.WindowY0 = 479 - 150;
+ t7l3.WindowY1 = 479;
t7r1.Image = &t7screen;
t7r1.WindowNumberOfTextLines = 2;
t7r1.WindowLineSpacing = t7l1.WindowLineSpacing;
t7r1.WindowTab = 100;
- t7r1.WindowX0 = 550;
- t7r1.WindowX1 = 799;
+ t7r1.WindowX0 = 0;
+ t7r1.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET;
t7r1.WindowY0 = t7l1.WindowY0;
- t7r1.WindowY1 = 479;
+ t7r1.WindowY1 = t7l1.WindowY1;
t7r2.Image = &t7screen;
t7r2.WindowNumberOfTextLines = 2;
t7r2.WindowLineSpacing = t7l2.WindowLineSpacing;
t7r2.WindowTab = 100;
- t7r2.WindowX0 = 550;
- t7r2.WindowX1 = 799;
+ t7r2.WindowX0 = t7r1.WindowX0;
+ t7r2.WindowX1 = t7r1.WindowX1;
t7r2.WindowY0 = t7l2.WindowY0;
t7r2.WindowY1 = t7l2.WindowY1;
@@ -264,118 +441,132 @@
t7r3.WindowNumberOfTextLines = 2;
t7r3.WindowLineSpacing = 0;//t7l3.WindowLineSpacing;
t7r3.WindowTab = 100;
- t7r3.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET;
- t7r3.WindowX1 = 799;
+ t7r3.WindowX0 = t7r1.WindowX0;
+ t7r3.WindowX1 = t7r1.WindowX1;
t7r3.WindowY0 = t7l3.WindowY0;
t7r3.WindowY1 = t7l3.WindowY1;
+/* screen for CustomText / serial number */
t7cC.Image = &t7screen;
t7cC.WindowNumberOfTextLines = 3;
t7cC.WindowLineSpacing = 95; // Abstand von Y0
t7cC.WindowTab = 100;
t7cC.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
t7cC.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
- t7cC.WindowY0 = 90;
- t7cC.WindowY1 = 434 - 95;
-
+ t7cC.WindowY0 = 165; //90;
+ t7cC.WindowY1 = 415;
+
+ /* used by warning message box */
t7cH.Image = &t7screen;
t7cH.WindowNumberOfTextLines = 1;
t7cH.WindowLineSpacing = 95; // Abstand von Y0
t7cH.WindowTab = 100;
t7cH.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
t7cH.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
- t7cH.WindowY0 = 434 - 94;
- t7cH.WindowY1 = 434;
-
+ t7cH.WindowY0 = 46; //480 - 434;
+ t7cH.WindowY1 = 390 - 46;// - 90; //46 + 390; //480 - (434 - 94); //434;
+
+ /* used by warning custom box */
t7cW.Image = &t7screen;
t7cW.WindowNumberOfTextLines = 3;
t7cW.WindowLineSpacing = 95; // Abstand von Y0
t7cW.WindowTab = 100;
t7cW.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
t7cW.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
- t7cW.WindowY0 = 90;
- t7cW.WindowY1 = 434 - 95;
-
+ t7cW.WindowY0 = 480 - (434 - 90);
+ t7cW.WindowY1 = 480 - 90; //434 - 95;
+
+/* time and environment */
t7surfaceL.Image = &t7screen;
t7surfaceL.WindowNumberOfTextLines = 9;
t7surfaceL.WindowLineSpacing = 53;
t7surfaceL.WindowTab = 100;
- t7surfaceL.WindowX0 = 0;
- t7surfaceL.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET;
+ t7surfaceL.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET;
+ t7surfaceL.WindowX1 = 799;
t7surfaceL.WindowY0 = 0;
- t7surfaceL.WindowY1 = 480;
+ t7surfaceL.WindowY1 = 479;
t7surfaceR.Image = &t7screen;
t7surfaceR.WindowNumberOfTextLines = 9;
t7surfaceR.WindowLineSpacing = 53;
t7surfaceR.WindowTab = 100;
- t7surfaceR.WindowX0 = CUSTOMBOX_LINE_RIGHT + CUSTOMBOX_OUTSIDE_OFFSET;
- t7surfaceR.WindowX1 = 800;
+ t7surfaceR.WindowX0 = 0;
+ t7surfaceR.WindowX1 = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET;
t7surfaceR.WindowY0 = 0;
- t7surfaceR.WindowY1 = 480;
-
+ t7surfaceR.WindowY1 = 479;
+
+/* info screen in the middle */
t7cY0free.Image = &t7screen;
t7cY0free.WindowNumberOfTextLines = 1;
t7cY0free.WindowLineSpacing = 95;
t7cY0free.WindowTab = 100;
t7cY0free.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
t7cY0free.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
- t7cY0free.WindowY0 = 90;
- t7cY0free.WindowY1 = 434 - 95;
-
+ t7cY0free.WindowY0 = 115;
+ t7cY0free.WindowY1 = 365;
+
+/* voltage value (V or %) */
+ t7voltage.Image = &t7screen;
+ t7voltage.WindowNumberOfTextLines = 1;
+ t7voltage.WindowLineSpacing = 10;
+ t7voltage.WindowTab = 100;
+ t7voltage.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7voltage.WindowX1 = t7voltage.WindowX0 + (18*3) +9;
+ t7voltage.WindowY1 = TOP_LINE_HIGHT;
+ t7voltage.WindowY0 = 0;
+
+/* battery symbol */
t7batt.Image = &t7screen;
t7batt.WindowNumberOfTextLines = 1;
t7batt.WindowLineSpacing = 10;
t7batt.WindowTab = 100;
- t7batt.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
- t7batt.WindowX0 = t7batt.WindowX1 - (52+52);
- t7batt.WindowY1 = 479;
- t7batt.WindowY0 = t7batt.WindowY1 - 25;
-
+ t7batt.WindowX0 = t7voltage.WindowX1;
+ t7batt.WindowX1 = t7batt.WindowX0 + (52);
+ t7batt.WindowY1 = TOP_LINE_HIGHT;
+ t7batt.WindowY0 = 0;
+
+/* charger symbol */
t7charge.Image = &t7screen;
t7charge.WindowNumberOfTextLines = 1;
t7charge.WindowLineSpacing = 10;
t7charge.WindowTab = 100;
- t7charge.WindowX1 = t7batt.WindowX1 - 18;
+ t7charge.WindowX1 = t7batt.WindowX0 - 18;
t7charge.WindowX0 = t7charge.WindowX1 - 14;
- t7charge.WindowY1 = 479;
- t7charge.WindowY0 = t7batt.WindowY1 - 25;
-
- t7voltage.Image = &t7screen;
- t7voltage.WindowNumberOfTextLines = 1;
- t7voltage.WindowLineSpacing = 10;
- t7voltage.WindowTab = 100;
- t7voltage.WindowX0 = t7charge.WindowX0 - 10;
- t7voltage.WindowX1 = t7voltage.WindowX0 + (18*3)+ 9;
- t7voltage.WindowY1 = 479;
- t7voltage.WindowY0 = t7batt.WindowY1 - 25;
-
+
+ t7charge.WindowY1 = TOP_LINE_HIGHT;
+ t7charge.WindowY0 = 0;
+
+/* show dive mode OC / CC */
t7c1.Image = &t7screen;
t7c1.WindowNumberOfTextLines = 1;
t7c1.WindowLineSpacing = 10;
t7c1.WindowTab = 100;
- t7c1.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
- t7c1.WindowX1 = t7batt.WindowX0 - 18;
- t7c1.WindowY0 = 435;
- t7c1.WindowY1 = 479;
-
+ t7c1.WindowX0 = t7batt.WindowX1 + 18; //CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
+ t7c1.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET; //t7batt.WindowX1 + 18;
+ t7c1.WindowY0 = 0;
+ t7c1.WindowY1 = 479 - 435;
+
+/* Gas warnings and exit Sim*/
t7c2.Image = &t7screen;
t7c2.WindowNumberOfTextLines = 1;
t7c2.WindowLineSpacing = 0; // Abstand von Y0
t7c2.WindowTab = 100;
t7c2.WindowX0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
t7c2.WindowX1 = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_INSIDE_OFFSET;
- t7c2.WindowY0 = 0;
- t7c2.WindowY1 = 69;
-
+ t7c2.WindowY0 = 480 - 69;
+ t7c2.WindowY1 = 479;
+
+/* Rotating compass */
t7pCompass.Image = &t7screenCompass;
t7pCompass.WindowNumberOfTextLines = 1;
t7pCompass.WindowLineSpacing = 100; // Abstand von Y0
t7pCompass.WindowTab = 100;
t7pCompass.WindowX0 = 0;
t7pCompass.WindowX1 = 1600-1;
- t7pCompass.WindowY0 = 0;
- t7pCompass.WindowY1 = 100-1;
+ t7pCompass.WindowY0 = 479 - 75;
+ t7pCompass.WindowY1 = 479;
+
+ }
init_t7_compass();
}
@@ -538,6 +729,10 @@
// uint16_t bottleFirstGas_bar;
point_t start, stop;//, other;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+
// update in all customview modes
if(DataEX_check_RTE_version__needs_update() || font_update_required())
updateNecessary = 1;
@@ -548,19 +743,19 @@
text[0] = TXT_2BYTE;
text[1] = TXT2BYTE_ButtonLogbook;
text[2] = 0;
- write_content_simple(&t7screen, 0, 800, 480-24, &FontT24,text,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&t7screen, 0, 799, 479-TOP_LINE_HIGHT, &FontT24,text,CLUT_ButtonSurfaceScreen);
text[0] = '\001';
text[1] = TXT_2BYTE;
text[2] = TXT2BYTE_ButtonView;
text[3] = 0;
- write_content_simple(&t7screen, 0, 800, 480-24, &FontT24,text,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&t7screen, 0, 799, 479-TOP_LINE_HIGHT, &FontT24,text,CLUT_ButtonSurfaceScreen);
text[0] = '\002';
text[1] = TXT_2BYTE;
text[2] = TXT2BYTE_ButtonMenu;
text[3] = 0;
- write_content_simple(&t7screen, 0, 800, 480-24, &FontT24,text,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&t7screen, 0, 799, 479-TOP_LINE_HIGHT, &FontT24,text,CLUT_ButtonSurfaceScreen);
/*
// scooter connected?
@@ -865,8 +1060,17 @@
// after gas name :-)
if(actualGasID > gasOffset) // security
{
- start.y = t7surfaceL.WindowY0 + (3 * t7surfaceL.WindowLineSpacing);
- start.x = t7surfaceL.WindowX0 + ((stateUsed->lifeData.actualGas.GasIdInSettings - gasOffset - 1) * 35);
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7surfaceL.WindowY0 + (3 * t7surfaceL.WindowLineSpacing);
+ start.x = t7surfaceL.WindowX0 + ((stateUsed->lifeData.actualGas.GasIdInSettings - gasOffset - 1) * 35);
+ }
+ else
+ {
+ start.y = t7surfaceR.WindowY0 + (3 * t7surfaceR.WindowLineSpacing);
+ start.x = t7surfaceR.WindowX0 + ((stateUsed->lifeData.actualGas.GasIdInSettings - gasOffset - 1) * 35);
+ }
+
stop.x = start.x + 25;
stop.y = start.y + 52;
GFX_draw_box2(&t7screen, start, stop, CLUT_Font020, 1);
@@ -921,7 +1125,7 @@
snprintf(text,16,"\004\025\f\002%u%%",(uint8_t)stateUsed->lifeData.battery_charge);
if(warning_count_high_time)
text[0] = '\a';
- GFX_write_string(&FontT24,&t7batt,text,0);
+ GFX_write_string(&FontT24,&t7voltage,text,0);
}
else
{
@@ -936,7 +1140,8 @@
if((stateUsed->lifeData.battery_charge > 0) && (stateUsed->lifeData.battery_charge < 140))
{
snprintf(text,16,"\f\002%u%%",(uint8_t)stateUsed->lifeData.battery_charge);
- GFX_write_string(&FontT24,&t7batt,text,0);
+ // GFX_write_string(&FontT24,&t7batt,text,0);
+ GFX_write_string(&FontT24,&t7voltage,text,0);
}
else
{
@@ -1403,16 +1608,6 @@
void t7_refresh_customview(void)
{
- if((selection_customview == CVIEW_Scooter) && (getLicence() != LICENCEBONEX))
- t7_change_customview();
- if((selection_customview == CVIEW_Scooter) && (!DataEX_scooterFoundAndValidLicence() && (stateRealGetPointer()->mode == MODE_DIVE)))
- t7_change_customview();
- if((selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0))
- t7_change_customview();
- if((selection_customview == CVIEW_sensors_mV) &&(stateUsed->diveSettings.ccrOption == 0))
- t7_change_customview();
- if((selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0))
- t7_change_customview();
char text[256];
uint16_t textpointer = 0;
@@ -1426,6 +1621,21 @@
uint8_t oxygen, helium; // CVIEW_Gaslist
float depth, surface, fraction_nitrogen, fraction_helium, ead, end; // CVIEW_EADTime
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+
+ if((selection_customview == CVIEW_Scooter) && (getLicence() != LICENCEBONEX))
+ t7_change_customview();
+ if((selection_customview == CVIEW_Scooter) && (!DataEX_scooterFoundAndValidLicence() && (stateRealGetPointer()->mode == MODE_DIVE)))
+ t7_change_customview();
+ if((selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0))
+ t7_change_customview();
+ if((selection_customview == CVIEW_sensors_mV) &&(stateUsed->diveSettings.ccrOption == 0))
+ t7_change_customview();
+ if((selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0))
+ t7_change_customview();
+
switch(selection_customview)
{
case CVIEW_noneOrDebug:
@@ -1547,7 +1757,15 @@
GFX_write_string(&FontT42,&t7cH,text,0);
// content
textpointer = 0;
- t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
+
+ if(!pSettings->FlipDisplay)
+ {
+ t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
+ }
+ else
+ {
+ t7cY0free.WindowY1 = 400;
+ }
t7cY0free.WindowLineSpacing = 48+9;
t7cY0free.WindowNumberOfTextLines = 5; // NUM_GASES == 5
t7cY0free.WindowTab = 420;
@@ -1588,6 +1806,10 @@
textpointer = 0;
t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
+ if(pSettings->FlipDisplay)
+ {
+ t7cY0free.WindowY1 = 400;
+ }
t7cY0free.WindowLineSpacing = 48;
t7cY0free.WindowNumberOfTextLines = 6;
@@ -1716,11 +1938,28 @@
snprintf(text,100,"\032\f\001%c%c",TXT_2BYTE, TXT2BYTE_Compass);
GFX_write_string(&FontT42,&t7cH,text,0);
t7_compass((uint16_t)stateUsed->lifeData.compass_heading, stateUsed->diveSettings.compassHeading);
- t7cY0free.WindowY0 = 230;
- t7cY0free.WindowX0 += 15;
+
+ if(!pSettings->FlipDisplay)
+ {
+ t7cY0free.WindowX0 += 15;
+ t7cY0free.WindowY0 = 230;
+ }
+ else
+ {
+ t7cY0free.WindowX0 -= 15;
+ t7cY0free.WindowY0 = 0;
+ t7cY0free.WindowY1 = 250;
+ }
snprintf(text,100,"\030\001%03i`",(uint16_t)stateUsed->lifeData.compass_heading);
GFX_write_string(&FontT54,&t7cY0free,text,0);
- t7cY0free.WindowX0 -= 15;
+ if(!pSettings->FlipDisplay)
+ {
+ t7cY0free.WindowX0 -= 15;
+ }
+ else
+ {
+ t7cY0free.WindowX0 += 15;
+ }
break;
case CVIEW_Decolist:
@@ -1765,7 +2004,16 @@
textpointer += snprintf(&text[textpointer],20,"\031\034 %2u\016\016%c%c\017\n\r",depthNext, unit_depth_char1(), unit_depth_char2());
if(textpointer > 200) break;
}
- t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
+ if(!pSettings->FlipDisplay)
+ {
+ t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
+ }
+ else
+ {
+ t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
+ t7cY0free.WindowY1 = 400;
+ }
+
t7cY0free.WindowLineSpacing = 48;
t7cY0free.WindowNumberOfTextLines = 6;
GFX_write_string(&FontT42, &t7cY0free, text, 1);
@@ -1803,6 +2051,9 @@
uint8_t customview_warnings = 0;
const SDecoinfo * pDecoinfo;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
Divetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time;
Divetime.Minutes = Divetime.Total / 60;
Divetime.Seconds = Divetime.Total - ( Divetime.Minutes * 60 );
@@ -1898,7 +2149,15 @@
/* ascentrate graph */
if(stateUsed->lifeData.ascent_rate_meter_per_min > 0)
{
- start.y = t7l1.WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7l1.WindowY0 - 1;
+ }
+ else
+ {
+ start.y = t7l3.WindowY0 - 25;
+ }
+
for(int i = 0; i<4;i++)
{
start.y += 5*6;
@@ -1913,7 +2172,14 @@
// new thick bar design Sept. 2015
start.x = CUSTOMBOX_LINE_LEFT - CUSTOMBOX_OUTSIDE_OFFSET - 3 - 5;
stop.x = start.x;
- start.y = t7l1.WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7l1.WindowY0 - 1;
+ }
+ else
+ {
+ start.y = t7l3.WindowY0 - 25;
+ }
stop.y = start.y + (uint16_t)(stateUsed->lifeData.ascent_rate_meter_per_min * 6);
stop.y -= 3; // wegen der Liniendicke von 12 anstelle von 9
if(stop.y >= 470)
@@ -2227,7 +2493,7 @@
snprintf(TextC1,16,"\004\025\f\002%u%%",(uint8_t)stateUsed->lifeData.battery_charge);
if(warning_count_high_time)
TextC1[0] = '\a';
- GFX_write_string(&FontT24,&t7batt,TextC1,0);
+ GFX_write_string(&FontT24,&t7voltage,TextC1,0);
}
}
else
@@ -2239,7 +2505,7 @@
{
snprintf(TextC1,16,"\020\f\002%u%%",(uint8_t)stateUsed->lifeData.battery_charge);
t7_colorscheme_mod(TextC1);
- GFX_write_string(&FontT24,&t7batt,TextC1,0);
+ GFX_write_string(&FontT24,&t7voltage,TextC1,0); // t7batt
}
}
@@ -2484,6 +2750,9 @@
point_t LeftLow, WidthHeight;
point_t start, stop;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
// plugin box
LeftLow.x = CUSTOMBOX_LINE_LEFT;
WidthHeight.x = CUSTOMBOX_LINE_RIGHT - CUSTOMBOX_LINE_LEFT;
@@ -2505,17 +2774,47 @@
// aufteilung links
start.x = 0;
stop.x = CUSTOMBOX_LINE_LEFT;
- stop.y = start.y = t7l1.WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ stop.y = start.y = t7l1.WindowY0 - 1;
+ }
+ else
+ {
+ stop.y = start.y = 480 - t7l1.WindowY1 - 1;
+ }
+
GFX_draw_line(&t7screen, start, stop, colorLinesOnTheSide);
- stop.y = start.y = t7l2.WindowY0 -1;
+ if(!pSettings->FlipDisplay)
+ {
+ stop.y = start.y = t7l2.WindowY0 -1;
+ }
+ else
+ {
+ stop.y = start.y = 480 - t7l2.WindowY1 -1;
+ }
GFX_draw_line(&t7screen, start, stop, colorLinesOnTheSide);
// aufteilung rechts
start.x = CUSTOMBOX_LINE_RIGHT;
stop.x = 799;
- stop.y = start.y = t7l1.WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ stop.y = start.y = t7l1.WindowY0 - 1;
+ }
+ else
+ {
+ stop.y = start.y = 480 - t7l1.WindowY1 - 1;
+ }
+
GFX_draw_line(&t7screen, start, stop, colorLinesOnTheSide);
- stop.y = start.y = t7l2.WindowY0 - 1;
+ if(!pSettings->FlipDisplay)
+ {
+ stop.y = start.y = t7l2.WindowY0 - 1;
+ }
+ else
+ {
+ stop.y = start.y = 480 - t7l2.WindowY1 - 1;
+ }
GFX_draw_line(&t7screen, start, stop, colorLinesOnTheSide);
}
}
@@ -2541,7 +2840,7 @@
static point_t r[4][360] = { 0 };
- if(r[0][0].y == 0)
+ if(r[0][0].y == 0) /* calc table at first call only */
{
for(int i=0;i<360;i++)
{
@@ -2576,10 +2875,21 @@
float partial_pressure_N2;
float partial_pressure_He;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
/* N2 */
t7cY0free.WindowLineSpacing = 28 + 48 + 14;
- t7cY0free.WindowY0 = t7cH.WindowY0 - 5 - 2 * t7cY0free.WindowLineSpacing;
+ if(!pSettings->FlipDisplay)
+ {
+ t7cY0free.WindowY0 = t7cH.WindowY0 - 5 - 2 * t7cY0free.WindowLineSpacing;
+ }
+ else
+ {
+ t7cY0free.WindowY0 = t7cH.WindowY0 + 15;
+ t7cY0free.WindowY1 = t7cY0free.WindowY0 + 250;
+ }
t7cY0free.WindowNumberOfTextLines = 3;
text[textpointer++] = '\030';
@@ -2597,7 +2907,14 @@
GFX_write_string(&FontT24, &t7cY0free, text, 1);
- start.y = t7cH.WindowY0 - 5;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7cH.WindowY0 - 5;
+ }
+ else
+ {
+ start.y = t7cH.WindowY1 - 5;
+ }
start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
stop.x = start.x + CUSTOMBOX_SPACE_INSIDE;
@@ -2694,7 +3011,15 @@
partial_pressure_He = (pState->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * percent_He;
// Nitrogen vertical bar
- start.y = t7cH.WindowY0 + 1 - 5;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7cH.WindowY0 + 1 - 5;
+ }
+ else
+ {
+ start.y = t7cH.WindowY1 - 5;
+ }
+
stop.y = start.y - (3 * 15) - 1;
if((percent_N2 > 0) && (partial_pressure_N2 > 0.8f))//(0.8f + 0.5f)))
{
@@ -2718,7 +3043,15 @@
// Helium vertical bar
- start.y = t7cH.WindowY0 + 1 - 5 - 3*16 - 28 - 14;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7cH.WindowY0 + 1 - 5 - 3*16 - 28 - 14;
+ }
+ else
+ {
+ start.y = t7cH.WindowY1 - 5 - 3*16 - 28 - 14;
+ }
+
stop.y = start.y - (3 * 15) - 1;
if((percent_He > 0) && (partial_pressure_He > 0.01f)) // 0.5f
{
@@ -2743,12 +3076,21 @@
GFX_draw_thick_line(2,&t7screen, start, stop, CLUT_EverythingOkayGreen);
// Oxygen vertical bar
- start.y = t7cH.WindowY0 + 1 - 5 - 6*16 - 2*28 - 2*14;
+ if(!pSettings->FlipDisplay)
+ {
+ start.y = t7cH.WindowY0 + 1 - 5 - 6*16 - 2*28 - 2*14;
+ }
+ else
+ {
+ start.y = t7cH.WindowY1 - 5 - 6*16 - 2*28 - 2*14;
+ }
+
stop.y = start.y - (3 * 15) - 1;
start.x = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET + cns100pixel;
stop.x = start.x;
GFX_draw_thick_line(2, &t7screen, start, stop, CLUT_WarningRed);
+
}
@@ -3367,17 +3709,22 @@
lastHeading = ActualHeading;
*/
+ uint16_t ActualHeadingRose;
uint16_t LeftBorderHeading, LineHeading;
uint32_t offsetPicture;
point_t start, stop, center;
static int32_t LastHeading = 0;
int32_t newHeading = 0;
+ int32_t FlipHeading = 0;
int32_t diff = 0;
int32_t diff2 = 0;
int32_t diffAbs = 0;
int32_t diffAbs2 = 0;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
newHeading = ActualHeading;
diff = newHeading - LastHeading;
@@ -3409,6 +3756,7 @@
LastHeading = newHeading;
ActualHeading = newHeading;
+ ActualHeadingRose = ActualHeading;
/*
if (ActualHeading < 90)
ActualHeading += 360;
@@ -3425,20 +3773,42 @@
ActualHeading = LastHeading - 1;
}
*/
- if (ActualHeading < 90)
- ActualHeading += 360;
+ if(pSettings->FlipDisplay)
+ {
+ ActualHeadingRose = 360 - ActualHeadingRose;
+ if (ActualHeadingRose < 170) ActualHeadingRose += 360;
+ }
+ else
+ {
+ if (ActualHeadingRose < 90) ActualHeadingRose += 360;
+ ActualHeading = ActualHeadingRose;
+ }
// new hw 160822
// if (ActualHeading >= 360 + 90)
// ActualHeading = 360;
- LeftBorderHeading = 2 * (ActualHeading - (CUSTOMBOX_SPACE_INSIDE/4));
+ LeftBorderHeading = 2 * (ActualHeadingRose - (CUSTOMBOX_SPACE_INSIDE/4));
+
+ if(pSettings->FlipDisplay) /* add offset caused by mirrowed drawing */
+ {
+ LeftBorderHeading += 2 * 80;
+ }
offsetPicture = LeftBorderHeading * t7screenCompass.ImageHeight * 2;
+/* the background is used to draw the rotating compass rose */
background.pointer = t7screenCompass.FBStartAdress+offsetPicture;
background.x0 = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
- background.y0 = 65;
+ if(!pSettings->FlipDisplay)
+ {
+ background.y0 = 65;
+ }
+ else
+ {
+ background.y0 = 480 - t7screenCompass.ImageHeight - 65;
+ }
+
background.width = CUSTOMBOX_SPACE_INSIDE;
background.height = t7screenCompass.ImageHeight;
@@ -3644,10 +4014,21 @@
void t7_miniLiveLogProfile(void)
{
SWindowGimpStyle wintemp;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
wintemp.left = CUSTOMBOX_LINE_LEFT + CUSTOMBOX_INSIDE_OFFSET;
wintemp.right = wintemp.left + CUSTOMBOX_SPACE_INSIDE;
- wintemp.top = 480 - t7l1.WindowY0;
- wintemp.bottom = wintemp. top + 200;
+ if(!pSettings->FlipDisplay)
+ {
+ wintemp.top = 480 - t7l1.WindowY0;
+ wintemp.bottom = wintemp. top + 200;
+ }
+ else
+ {
+ wintemp.top = t7l1.WindowY1;
+ wintemp.bottom = wintemp. top + 200;
+ }
uint16_t max_depth = (uint16_t)(stateUsed->lifeData.max_depth_meter * 10);
@@ -3657,8 +4038,19 @@
void t7_logo_OSTC(void)
{
SWindowGimpStyle windowGimp;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
/* OSTC logo */
- windowGimp.left = t7l1.WindowX1 + 32;
+ if(!pSettings->FlipDisplay)
+ {
+ windowGimp.left = t7l1.WindowX1 + 32;
+ }
+ else
+ {
+ windowGimp.left = t7r1.WindowX1 + 32;
+ }
+
windowGimp.top = 40 + 32;
GFX_draw_image_monochrome(&t7screen, windowGimp, &ImgOSTC, 0);
}
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/tInfoLog.c
--- a/Discovery/Src/tInfoLog.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/tInfoLog.c Thu Jan 03 19:59:36 2019 +0100
@@ -80,8 +80,16 @@
INFOLOGwindow.WindowTab = 400;
INFOLOGwindow.WindowX0 = 20;
INFOLOGwindow.WindowX1 = 779;
- INFOLOGwindow.WindowY0 = 4 + 25;
- INFOLOGwindow.WindowY1 = 390 + 25;
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ INFOLOGwindow.WindowY0 = 4 + 25;
+ INFOLOGwindow.WindowY1 = 390 + 25;
+ }
+ else
+ {
+ INFOLOGwindow.WindowY0 = 479 - 390;
+ INFOLOGwindow.WindowY1 = 479 - 25;
+ }
}
@@ -209,7 +217,16 @@
{
infolog.line = 0;
infolog.modeFlipPages = 1;
- GFX_SetFrameBottom(pMenuCursorDesignSolo->FBStartAdress, 0, 25, 800, 390);
+
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ GFX_SetFrameBottom(pMenuCursorDesignSolo->FBStartAdress, 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom(pMenuCursorDesignSolo->FBStartAdress, 0, 65, 800, 390);
+ }
+
}
else
exitLog();
@@ -367,7 +384,14 @@
infolog.modeFlipPages = 0;
- GFX_SetFrameBottom((pMenuCursor->FBStartAdress) + 65*2*(infolog.line - 1), 0, 25, 800, 390);
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ GFX_SetFrameBottom((pMenuCursor->FBStartAdress) + 65*2*(infolog.line - 1), 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom((pMenuCursor->FBStartAdress)+ (390 - 65 *(infolog.line)) *2, 0, 480-390-25, 800, 390);
+ }
}
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/tMenu.c
--- a/Discovery/Src/tMenu.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/tMenu.c Thu Jan 03 19:59:36 2019 +0100
@@ -49,7 +49,12 @@
#include "tMenuXtra.h"
/* Private types -------------------------------------------------------------*/
-#define MAXPAGES 10
+#define MAXPAGES 10
+#define CURSOR_HIGH 25
+#define TAB_HEADER_HIGH 25
+#define TAB_BAR_HIGH 5
+#define MENU_WDW_HIGH 390
+#define KEY_LABEL_HIGH 25 /* Height of the label used for the the user keys */
typedef struct
{
@@ -123,6 +128,9 @@
{
uint8_t i;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
tMdesignCursor.FBStartAdress = getFrame(3);
tMdesignCursor.ImageHeight = 390;
tMdesignCursor.ImageWidth = 800;
@@ -155,9 +163,17 @@
tMwindow.WindowTab = 400;
tMwindow.WindowX0 = 20;
tMwindow.WindowX1 = 779;
- tMwindow.WindowY0 = 4 + 25;
- tMwindow.WindowY1 = 390 + 25;
+ if(!pSettings->FlipDisplay)
+ {
+ tMwindow.WindowY0 = 4 + KEY_LABEL_HIGH;
+ tMwindow.WindowY1 = 390 + KEY_LABEL_HIGH;
+ }
+ else
+ {
+ tMwindow.WindowY0 = 480 - MENU_WDW_HIGH - TAB_HEADER_HIGH;// - TAB_BAR_HIGH;
+ tMwindow.WindowY1 = 480 - TAB_HEADER_HIGH - TAB_BAR_HIGH;
+ }
actual_menu_content = MENU_UNDEFINED;
}
@@ -196,8 +212,7 @@
tM_rebuild_pages();
}
-#
- void tM_check_content(void)
+void tM_check_content(void)
{
uint8_t mode = 0;
@@ -272,19 +287,19 @@
localtext[0] = TXT_2BYTE;
localtext[1] = TXT2BYTE_ButtonBack;
localtext[2] = 0;
- write_content_simple(&tMscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&tMscreen, 0, 800, 480-KEY_LABEL_HIGH, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
localtext[0] = '\001';
localtext[1] = TXT_2BYTE;
localtext[2] = TXT2BYTE_ButtonEnter;
localtext[3] = 0;
- write_content_simple(&tMscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&tMscreen, 0, 800, 480-KEY_LABEL_HIGH, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
localtext[0] = '\002';
localtext[1] = TXT_2BYTE;
localtext[2] = TXT2BYTE_ButtonNext;
localtext[3] = 0;
- write_content_simple(&tMscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&tMscreen, 0, 800, 480-KEY_LABEL_HIGH, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
// gfx_write_page_number(&tMscreen ,menu.pageCountNumber[page],menu.pageCountTotal,0);
@@ -388,19 +403,19 @@
localtext[0] = TXT_2BYTE;
localtext[1] = TXT2BYTE_ButtonBack;
localtext[2] = 0;
- write_content_simple(&tMscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&tMscreen, 0, 800, 480-KEY_LABEL_HIGH, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
localtext[0] = '\001';
localtext[1] = TXT_2BYTE;
localtext[2] = TXT2BYTE_ButtonEnter;
localtext[3] = 0;
- write_content_simple(&tMscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&tMscreen, 0, 800, 480-KEY_LABEL_HIGH, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
localtext[0] = '\002';
localtext[1] = TXT_2BYTE;
localtext[2] = TXT2BYTE_ButtonNext;
localtext[3] = 0;
- write_content_simple(&tMscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ write_content_simple(&tMscreen, 0, 800, 480-KEY_LABEL_HIGH, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
}
/*
@@ -782,6 +797,8 @@
void openMenu(uint8_t freshWithFlipPages)
{
uint8_t page, line;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
callerID = get_globalState();
@@ -818,10 +835,24 @@
GFX_SetFrameTop(menu.StartAddressForPage[page]);
/* new test for 3button design */
- if(freshWithFlipPages)
- GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 25, 800, 390);
+
+ if(!pSettings->FlipDisplay)
+ {
+ if(freshWithFlipPages)
+ GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 25, 800, 390);
+ else
+ GFX_SetFrameBottom((tMdesignCursor.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ }
else
- GFX_SetFrameBottom((tMdesignCursor.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ {
+ if(freshWithFlipPages)
+ {
+ GFX_SetFrameBottom((tMdesignSolo.FBStartAdress), 0, 480-390-KEY_LABEL_HIGH, 800, 390); //- (25 * 2 * 800), 0, 25, 800, 390);
+ }
+ else
+ GFX_SetFrameBottom((tMdesignCursor.FBStartAdress + (390 - 65 *(line)) *2), 0,480-390-KEY_LABEL_HIGH, 800, 390); //480-390-KEY_LABEL_HIGH + 65*2*(line - 1)
+ }
+
}
void block_diluent_handler(_Bool Unblock)
@@ -857,6 +888,9 @@
{
uint8_t page, line;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
menu.pageMemoryForNavigation += 1;
findValidPosition(&page, &line);
@@ -873,14 +907,23 @@
GFX_SetFrameTop(menu.StartAddressForPage[page]);
/* new test for 3button design */
- //GFX_SetFrameBottom((tMdesignCursor.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
- GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 25, 800, 390);
+ //GFX_SetFrameBottom((.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ if(!pSettings->FlipDisplay)
+ {
+ GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 65, 800, 390);
+ }
}
void nextLine(void)
{
uint8_t page, line;
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
page = menu.pageMemoryForNavigation;
menu.lineMemoryForNavigationForPage[page] += 1;
@@ -890,8 +933,14 @@
/* new test for 3button design */
menu.modeFlipPages = 0;
-
- GFX_SetFrameBottom((tMdesignCursor.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ if(!pSettings->FlipDisplay)
+ {
+ GFX_SetFrameBottom((tMdesignCursor.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom((tMdesignCursor.FBStartAdress)+ (390 - 65 *(line)) *2, 0, 480-390-KEY_LABEL_HIGH, 800, 390);
+ }
}
@@ -901,10 +950,19 @@
{
menu.lineMemoryForNavigationForPage[menu.pageMemoryForNavigation] = 0;
menu.modeFlipPages = 1;
- GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 25, 800, 390);
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom(tMdesignSolo.FBStartAdress, 0, 480-390-KEY_LABEL_HIGH, 800, 390);
+ }
}
else
+ {
exitMenu();
+ }
}
@@ -1023,6 +1081,8 @@
uint16_t al88;
};
+ uint16_t* prunning = *ppDestination;
+
union al88_u color_seperator;
union al88_u color_unselected;
int i;
@@ -1033,21 +1093,18 @@
color_seperator.al8[1] = 0xFF;
color_unselected.al8[1] = 0xFF;
- *(__IO uint16_t*)*ppDestination = color_seperator.al88;
- *ppDestination += 2;
- *(__IO uint16_t*)*ppDestination = color_seperator.al88;
- *ppDestination += 2;
+ *(__IO uint16_t*)prunning++ = color_seperator.al88;
+ *(__IO uint16_t*)prunning++ = color_seperator.al88;
for(i = 61; i > 0; i--)
{
- *(__IO uint16_t*)*ppDestination = color_unselected.al88;
- *ppDestination += 2;
+ *(__IO uint16_t*)prunning++ = color_unselected.al88;
}
- *(__IO uint16_t*)*ppDestination = color_seperator.al88;
- *ppDestination += 2;
- *(__IO uint16_t*)*ppDestination = color_seperator.al88;
- *ppDestination += 2;
+ *(__IO uint16_t*)prunning++ = color_seperator.al88;
+ *(__IO uint16_t*)prunning++ = color_seperator.al88;
+
+ *ppDestination = prunning;
}
@@ -1129,6 +1186,7 @@
draw_tMdesignSubSelected(&pDestination);
}
+/* Draw menu background boxes which are visible if nothing is selected */
pDestination = tMdesignSolo.FBStartAdress;
for(j = 801; j > 0; j--)
@@ -1151,7 +1209,7 @@
union al88_u color_top;
int i,j, k, k4text;
uint32_t pBackup;
- uint32_t pDestination;
+ uint16_t* pDestination;
uint8_t colorText;
uint16_t positionText;
uint8_t pageText;
@@ -1230,35 +1288,67 @@
if((text8max[k][0] == 0) && (menu.pageCountNumber[k-1] == 0))
write_content_simple(&tMscreen,positionText,775,0,&FontT42,text8max[k-1],colorText);
*/
- pDestination += 2 * 5 * 480;
+/* Draw color bars */
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ pDestination += 5 * 480;
- for(j = 60; j > 0; j--)
- {
- pDestination += (390 + 26)* 2;
+ for(j = 60; j > 0; j--)
+ {
+ pDestination += (390 + 26);
-// for(i = 64; i > 0; i--)
- for(i = 16; i > 0; i--)
- {
- *(__IO uint16_t*)pDestination = color_top.al88;
- pDestination += 2;
- }
- pDestination += 2 * 48;
- }
+ for(i = 16; i > 0; i--)
+ {
+ *(__IO uint16_t*)pDestination++ = color_top.al88;
+ }
+ pDestination += 48;
+ }
+
+ pDestination += 5 * 480;
+ positionText += 70;
+
+ if((k == 4) || ((k == 6) && (menu.pageCountNumber[5] == 0)))
+ {
+ pDestination += 70 * 480;
+ positionText += 70;
+ }
- pDestination += 2 * 5 * 480;
- positionText += 70;
+ if(spacing[k])
+ {
+ pDestination += 35 * 480;
+ positionText += 35;
+ }
+ }
+ else
+ {
+ pDestination += (800 - 5)* 480;
+
+ for(j = 60; j > 0; j--)
+ {
+ pDestination -= (390 + 26);
- if((k == 4) || ((k == 6) && (menu.pageCountNumber[5] == 0)))
- {
- pDestination += 2 * 70 * 480;
- positionText += 70;
- }
+ for(i = 16; i > 0; i--)
+ {
+ *(__IO uint16_t*)pDestination-- = color_top.al88;
+ }
+ pDestination -= 48;
+ }
+
+ pDestination -= (800) * 480;
+ positionText += 70;
- if(spacing[k])
- {
- pDestination += 35 * 2 * 480;
- positionText += 35;
- }
+ if((k == 4) || ((k == 6) && (menu.pageCountNumber[5] == 0)))
+ {
+ pDestination -= 70 * 480;
+ positionText += 70;
+ }
+
+ if(spacing[k])
+ {
+ pDestination -= 35 * 480;
+ positionText += 35;
+ }
+ }
}
}
tMscreen.FBStartAdress = pBackup;
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/tMenuEdit.c
--- a/Discovery/Src/tMenuEdit.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/tMenuEdit.c Thu Jan 03 19:59:36 2019 +0100
@@ -186,7 +186,14 @@
uint8_t line = 1;
// GFX_SetFramesTopBottom(tMEscreen.FBStartAdress, (tMEcursorNew.FBStartAdress) + 65*2*(line - 1),390);
GFX_SetFrameTop(tMEscreen.FBStartAdress);
- GFX_SetFrameBottom((tMEcursorNew.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ GFX_SetFrameBottom((tMEcursorNew.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom((tMEcursorNew.FBStartAdress)+ (390 - 65 *(line)) *2, 0, 480-390-25, 800, 390);
+ }
}
@@ -1592,15 +1599,29 @@
int16_t y0;
uint8_t lineMinusOne;
- y0 = (int16_t)ident[forThisIdentID].coord[2];
-
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ y0 = (int16_t)ident[forThisIdentID].coord[2];
+ }
+ else
+ {
+ y0 = 390 - (int16_t)ident[forThisIdentID].coord[2];
+ }
y0 -= ME_Y_LINE1;
y0 /= ME_Y_LINE_STEP;
if((y0 >= 0) && (y0 <=5))
lineMinusOne = y0;
else
lineMinusOne = 0;
- GFX_SetFrameBottom((tMEcursorNew.FBStartAdress) + 65*2*(lineMinusOne), 0, 25, 800, 390);
+
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ GFX_SetFrameBottom((tMEcursorNew.FBStartAdress) + 65*2*(lineMinusOne), 0, 25, 800, 390);
+ }
+ else
+ {
+ GFX_SetFrameBottom((tMEcursorNew.FBStartAdress)+ (390 - 65 *(5-lineMinusOne-1)) *2, 0, 480-390-25, 800, 390);
+ }
}
@@ -1615,16 +1636,34 @@
hgfx.WindowTab = 0;
hgfx.WindowX0 = 20;
hgfx.WindowX1 = 779;
- hgfx.WindowY1 = 479;
- hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
-
+ if(!settingsGetPointer()->FlipDisplay)
+ {
+ hgfx.WindowY1 = 479;
+ hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+ }
+ else
+ {
+ hgfx.WindowY0 = 0;
+ hgfx.WindowY1 = hgfx.WindowY0 + Font->height;
+ }
GFX_write_label(Font, &hgfx, text, menuColor);
}
void write_buttonTextline( uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode)
{
- GFX_clean_area(&tMEscreen, 0, 800, 480-24,480);
+
+ SSettings* pSettings;
+ pSettings = settingsGetPointer();
+
+ if(!pSettings->FlipDisplay)
+ {
+ GFX_clean_area(&tMEscreen, 0, 800, 480-24,480);
+ }
+ else
+ {
+ GFX_clean_area(&tMEscreen, 0, 800, 0, 24);
+ }
char localtext[32];
@@ -1633,7 +1672,14 @@
localtext[0] = TXT_2BYTE;
localtext[1] = left2ByteCode;
localtext[2] = 0;
- write_content_simple(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ if(!pSettings->FlipDisplay)
+ {
+ write_content_simple(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
+ else
+ {
+ write_content_simple(&tMEscreen, 0, 800, 0, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
}
if(middle2ByteCode)
@@ -1642,7 +1688,14 @@
localtext[1] = TXT_2BYTE;
localtext[2] = middle2ByteCode;
localtext[3] = 0;
- write_content_simple(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ if(!pSettings->FlipDisplay)
+ {
+ write_content_simple(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
+ else
+ {
+ write_content_simple(&tMEscreen, 0, 800, 0, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
}
if(right2ByteCode)
@@ -1651,7 +1704,14 @@
localtext[1] = TXT_2BYTE;
localtext[2] = right2ByteCode;
localtext[3] = 0;
- write_content_simple(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ if(!pSettings->FlipDisplay)
+ {
+ write_content_simple(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
+ else
+ {
+ write_content_simple(&tMEscreen, 0, 800, 0, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+ }
}
}
@@ -1671,14 +1731,26 @@
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
hgfx.WindowTab = 0;
- 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;
+ if(hgfx.WindowY0 < Font->height)
+ hgfx.WindowY1 = 0;
+ else
+ hgfx.WindowY1 = hgfx.WindowY0 + Font->height;
+ }
GFX_write_label(Font, &hgfx, text, 0);/*menuColor);*/
}
@@ -1697,14 +1769,27 @@
hgfx.WindowNumberOfTextLines = 1;
hgfx.WindowLineSpacing = 0;
hgfx.WindowTab = 0;
- 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;
+ if(hgfx.WindowY0 < Font->height)
+ hgfx.WindowY1 = 0;
+ else
+ hgfx.WindowY1 = hgfx.WindowY0 + Font->height;
+ }
GFX_write_label(Font, &hgfx, text, color);
}
@@ -1731,6 +1816,8 @@
if(YtopGimpStyle > 479)
YtopGimpStyle = 479;
hgfx.Image = &tMEscreen;
+ if(!settingsGetPointer()->FlipDisplay)
+ {
hgfx.WindowX0 = XleftGimpStyle;
hgfx.WindowX1 = XrightGimpStyle;
hgfx.WindowY1 = 479 - YtopGimpStyle;
@@ -1738,7 +1825,17 @@
hgfx.WindowY0 = 0;
else
hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
-
+ }
+ else
+ {
+ hgfx.WindowX0 = 800 - XrightGimpStyle;
+ hgfx.WindowX1 = 800 - XleftGimpStyle;
+ hgfx.WindowY0 = YtopGimpStyle;
+ if(hgfx.WindowY0 < Font->height)
+ hgfx.WindowY1 = 0;
+ else
+ hgfx.WindowY1 = hgfx.WindowY0 + Font->height;
+ }
GFX_clear_window_immediately(&hgfx);
}
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/tMenuEditHardware.c
--- a/Discovery/Src/tMenuEditHardware.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/tMenuEditHardware.c Thu Jan 03 19:59:36 2019 +0100
@@ -45,6 +45,7 @@
//void openEdit_Luftintegration(void);
void openEdit_ButtonSens(void);
void openEdit_ScooterControl(void);
+void openEdit_FlipDisplay(void);
/* Announced function prototypes -----------------------------------------------*/
uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -89,7 +90,14 @@
openEdit_ButtonSens();
break;
case 6:
- openEdit_ScooterControl();
+ if(getLicence() == LICENCEBONEX)
+ {
+ openEdit_ScooterControl();
+ }
+ else
+ {
+ openEdit_FlipDisplay();
+ }
break;
}
}
@@ -114,6 +122,32 @@
exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only();
}
+void openEdit_FlipDisplay(void)
+{
+/* does not work like this resetEnterPressedToStateBeforeButtonAction(); */
+
+ SSettings *pSettings = settingsGetPointer();
+
+ if(pSettings->FlipDisplay == 0)
+ {
+ pSettings->FlipDisplay = 1;
+ }
+ else
+ {
+ pSettings->FlipDisplay = 0;
+ }
+ /* reinit all views */
+ tHome_init();
+ tI_init();
+ tM_init();
+ tMenuEdit_init();
+ tInfoLog_init();
+ tM_build_pages();
+
+
+ exitEditWithUpdate();
+ exitMenuEdit_to_Home();
+}
/*
void refresh_ScooterControl(void)
{
@@ -470,7 +504,7 @@
void refresh_O2Sensors(void)
{
- char text[10];
+ char text[16];
uint16_t y_line;
text[0] = '\001';
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/tMenuHardware.c
--- a/Discovery/Src/tMenuHardware.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/tMenuHardware.c Thu Jan 03 19:59:36 2019 +0100
@@ -162,16 +162,32 @@
}
nextline(text,&textPointer);
- if((getLicence() == LICENCEBONEX) &&((line == 0) || (line == 6)))
+ if((line == 0) || (line == 6))
{
- text[textPointer++] = TXT_2BYTE;
- text[textPointer++] = TXT2BYTE_ScooterSetup;
- text[textPointer++] = '\t';
+ if(getLicence() == LICENCEBONEX)
+ {
+ text[textPointer++] = TXT_2BYTE;
+ text[textPointer++] = TXT2BYTE_ScooterSetup;
+ text[textPointer++] = '\t';
-// textPointer += snprintf(&text[textPointer],25,"D%i L%i ",settingsGetPointer()->scooterDrag, settingsGetPointer()->scooterLoad);
- textPointer += snprintf(&text[textPointer],25,"D%i L%i %i\016\016 Wh\017",settingsGetPointer()->scooterDrag, settingsGetPointer()->scooterLoad, settingsGetPointer()->scooterBattSize);
-// textPointer += bo4GetBatteryName(&text[textPointer], settingsGetPointer()->scooterBattType);
- nextline(text,&textPointer);
+ // textPointer += snprintf(&text[textPointer],25,"D%i L%i ",settingsGetPointer()->scooterDrag, settingsGetPointer()->scooterLoad);
+ textPointer += snprintf(&text[textPointer],25,"D%i L%i %i\016\016 Wh\017",settingsGetPointer()->scooterDrag, settingsGetPointer()->scooterLoad, settingsGetPointer()->scooterBattSize);
+ // textPointer += bo4GetBatteryName(&text[textPointer], settingsGetPointer()->scooterBattType);
+ nextline(text,&textPointer);
+ }
+ else
+ {
+ text[textPointer++] = TXT_2BYTE;
+ text[textPointer++] = TXT2BYTE_FLIPDISPLAY;
+ text[textPointer++] = '\t';
+ if(settingsGetPointer()->FlipDisplay)
+ text[textPointer++] = '\005';
+ else
+ text[textPointer++] = '\006';
+ text[textPointer] = 0;
+ nextline(text,&textPointer);
+ }
}
+
return StMHARD;
}
diff -r 68181cd61f20 -r 3834b6272ee5 Discovery/Src/text_multilanguage.c
--- a/Discovery/Src/text_multilanguage.c Mon Dec 24 16:19:09 2018 +0300
+++ b/Discovery/Src/text_multilanguage.c Thu Jan 03 19:59:36 2019 +0100
@@ -1651,6 +1651,12 @@
static uint8_t text_ES_Luftintegration[] = "aire integrado";
*/
+static uint8_t text_EN_FlipDisplay[] = "Flip display";
+static uint8_t text_DE_FlipDisplay[] = "Anzeige spiegeln";
+static uint8_t text_FR_FlipDisplay[] = "";
+static uint8_t text_IT_FlipDisplay[] = "";
+static uint8_t text_ES_FlipDisplay[] = "";
+
/* Lookup Table -------------------------------------------------------------*/
const tText text_array[] =
@@ -1891,6 +1897,9 @@
{(uint8_t)TXT2BYTE_ApneaTotal, {text_EN_ApneaTotal, text_DE_ApneaTotal, text_FR_ApneaTotal, text_IT_ApneaTotal, text_ES_ApneaTotal}},
{(uint8_t)TXT2BYTE_ApneaSurface, {text_EN_ApneaSurface, text_DE_ApneaSurface, text_FR_ApneaSurface, text_IT_ApneaSurface, text_ES_ApneaSurface}},
+ {(uint8_t)TXT2BYTE_FLIPDISPLAY, {text_EN_FlipDisplay, text_DE_FlipDisplay, text_FR_FlipDisplay, text_IT_FlipDisplay, text_ES_FlipDisplay}},
+
+
// {(uint8_t)TXT2BYTE_ApneaCount, {text_EN_ApneaCount, text_DE_ApneaCount, text_FR_ApneaCount, text_IT_ApneaCount, text_ES_ApneaCount}},
// unused {(uint8_t)TXT2BYTE_Button1, {text_EN_Button1, text_DE_Button1, text_FR_Button1, text_IT_Button1, text_ES_Button1}},
// unused {(uint8_t)TXT2BYTE_Button2, {text_EN_Button2, text_DE_Button2, text_FR_Button2, text_IT_Button2, text_ES_Button2}},
diff -r 68181cd61f20 -r 3834b6272ee5 ostc4pack/OSTC4_Firmware.bin
Binary file ostc4pack/OSTC4_Firmware.bin has changed
diff -r 68181cd61f20 -r 3834b6272ee5 ostc4pack/OSTC4_RTE.bin
Binary file ostc4pack/OSTC4_RTE.bin has changed
diff -r 68181cd61f20 -r 3834b6272ee5 ostc4pack/OSTC4_RTE_upload.bin
Binary file ostc4pack/OSTC4_RTE_upload.bin has changed
diff -r 68181cd61f20 -r 3834b6272ee5 ostc4pack/OSTC4_firmware_upload.bin
Binary file ostc4pack/OSTC4_firmware_upload.bin has changed