annotate Discovery/Src/externLogbookFlash.c @ 1040:74be24428049 GasConsumption

Bugfix Fontpack update for large blocks: The update of a font pack with a size > 768000 byte was interrupted and a manuel switch to bootloader had to be performed to get the font pack flashed. Rootcause was a missing address adjustment during the block read back function which caused a false error detection. Blocks > 768000 are read in two step while only one buffer is used for comparation. To fill the correct data into this buffer a dummy read of the flash data was added to get the data pointers to the correct offset. Another bug was regardings the read back itself where only the first byte was checked. After array indexing the complete buffer is noch verified.
author Ideenmodellierer
date Mon, 13 Oct 2025 20:54:25 +0200
parents 158100a84ebd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
3 * @copyright heinrichs weikamp
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
4 * @file externLogbookFlash.c
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
5 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
6 * @date 07-Aug-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
7 * @version V0.0.4
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
8 * @since 29-Sept-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
9 * @brief Main File to access the new 1.8 Volt Spansion S25FS256S 256 Mbit (32 Mbyte)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
10 * @bug
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
11 * @warning
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
12 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
13 @verbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
14 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
15 ##### Logbook Header (TOC) #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
16 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
17 [..] Memory useage:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
18 NEW: Spansion S25FS-S256S
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
19
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
20 only 8x 4KB and 1x 32KB, remaining is 64KB or 256KB
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
21 Sector Size (kbyte) Sector Count Sector Range Address Range (Byte Address) Notes
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
22 4 8 SA00 00000000h-00000FFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
23 : :
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
24 SA07 00007000h-00007FFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
25
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
26 32 1 SA08 00008000h-0000FFFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
27
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
28 64 511 SA09 00010000h-0001FFFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
29 : :
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
30 SA519 01FF0000h-01FFFFFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
31 OLD:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
32 1kB each header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
33 with predive header at beginning
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
34 and postdive header with 0x400 HEADER2OFFSET
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
35 4kB (one erase) has two dives with 4 headers total
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
36 total of 512 kB (with 256 header ids (8 bit))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
37 Size is 280 Byte (as of 25.Nov. 2014)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
39 [..] Output to PC / UART is postdive header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
40
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
41 [..] Block Protection Lock-Down is to erase logbook only
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
42
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
43 [..] Timing (see page 137 of LOGBOOK_V3_S25FS-S_00-271247.pdf
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
44 bulk erase is 2 minutes typ., 6 minutes max.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
45
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
46 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
47 ##### DEMOMODE #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
48 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
49 151215: ext_flash_write_settings() is DISABLED!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
50
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
51 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
52 ##### bug fixes #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
53 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
54 150917: end in header and length of sample was one byte too long
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
55 as stated by Jef Driesen email 15.09.2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
56
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
57 @endverbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
58 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
59 * @attention
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
60 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
61 * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
62 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
63 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
64 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
65
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
66 /* Includes ------------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
67 #include "stm32f4xx_hal.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
68 #include "externLogbookFlash.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
69 #include "ostc.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
70 #include "settings.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
71 #include "gfx_engine.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
72
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
73 #ifndef BOOTLOADER_STANDALONE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
74 #include "logbook.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
75 #endif
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
76
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
77 /* Private types -------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
78 #define FLASHSTART 0x000000
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
79 //#define FLASHSTOP 0x01FFFFFF all 32 MB with 4byte addressing
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
80 #define FLASHSTOP 0x00FFFFFF
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
81 //#define FLASHSTOP 0x3FFFFF
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
82 #define RELEASE 1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
83 #define HOLDCS 0
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
85 #define HEADER2OFFSET 0x400
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87 typedef struct{
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 uint8_t IsBusy:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89 uint8_t IsWriteEnabled:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
90 uint8_t BlockProtect0:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
91 uint8_t BlockProtect1:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
92 uint8_t BlockProtect2:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
93 uint8_t BlockProtect3:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
94 uint8_t IsAutoAddressIncMode:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
95 uint8_t BlockProtectL:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
96 } extFlashStatusUbit8_t;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
97
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
98 typedef union{
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
99 extFlashStatusUbit8_t ub;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
100 uint8_t uw;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
101 } extFlashStatusBit8_Type;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
102
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
103
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
104 /* Exported variables --------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
105
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
106 /* Private variables ---------------------------------------------------------*/
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
107
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
108 #ifndef BOOTLOADER_STANDALONE
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
109 static uint32_t entryPoint = 0;
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
110 static uint32_t LengthLeftSampleRead = 0;
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
111 static uint32_t actualPointerDevicedata_Read = DDSTART;
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
112 #endif
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
113
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
114 static uint32_t actualAddress = 0;
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
115 static uint32_t preparedPageAddress = 0;
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
116 static uint32_t closeSectorAddress = 0;
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
117 static uint32_t actualPointerHeader = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
118 static uint32_t actualPointerSample = 0;
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
119 static uint32_t actualPointerDevicedata = DDSTART;
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
120 static uint32_t actualPointerVPM = 0;
427
b1091e183d52 Activated ringbuffer for settings:
ideenmodellierer
parents: 425
diff changeset
121 static uint32_t actualPointerSettings = SETTINGSSTART;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
122 static uint32_t actualPointerProfile = PROFILE0_START;
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
123 static uint32_t actualPointerFirmware = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
124 static uint32_t actualPointerFirmware2 = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
125
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
126 /* Private function prototypes -----------------------------------------------*/
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
127 static void chip_unselect(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
128 static void chip_select(void);
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
129 #ifndef BOOTLOADER_STANDALONE
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
130 static void error_led_on(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
131 static void error_led_off(void);
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
132 static void ext_flash_decf_address_ring(uint8_t type);
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
133 static void ext_flash_disable_protection(void);
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
134 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length);
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
135 static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type);
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
136 #endif
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
137 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
138 static uint8_t read_spi(uint8_t unselect_CS_afterwards);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
139 static void write_address(uint8_t unselect_CS_afterwards);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
140 static void Error_Handler_extflash(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
141 static void wait_chip_not_busy(void);
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
142 static void ext_flash_incf_address(uint8_t type);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
143 //void ext_flash_incf_address_ring(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
144
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
145 static void ext_flash_erase4kB(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
146 static void ext_flash_erase32kB(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
147 static void ext_flash_erase64kB(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
148 static uint8_t ext_flash_erase_if_on_page_start(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
149
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
150 static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
151
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
152 static void ext_flash_read_block(uint8_t *getByte, uint8_t type);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
153 static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
154 static void ext_flash_read_block_stop(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
155
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
156 static void ef_hw_rough_delay_us(uint32_t delayUs);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
157 static void ef_erase_64K(uint32_t blocks);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
158
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
159 #ifndef BOOTLOADER_STANDALONE
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
160 static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length);
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
161 static void ext_flash_find_start(void);
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
162 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
163
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
164
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
165
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
166 /* Exported functions --------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
167
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
168 void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1)//, uint8_t *pSample2, uint32_t length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
169 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
170 general32to8_Type lengthTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
171
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
172 lengthTransform.u32 = length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
173
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
174 actualPointerFirmware = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
175 ef_write_block(lengthTransform.u8,4, EF_FIRMWARE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
176 ef_write_block(pSample1,length1, EF_FIRMWARE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
177
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
178 // if(length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
179 // ef_write_block(pSample2,length2, EF_FIRMWARE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
180 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
181
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
182 uint8_t ext_flash_read_firmware_version(char *text)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
183 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
184 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
185 uint8_t buffer[4];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
186
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
187 // + 4 for length data, see ext_flash_write_firmware
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
188 actualAddress = FWSTART + 4 + 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
189 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
190 ext_flash_read_block(&buffer[0], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
191 ext_flash_read_block(&buffer[1], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
192 ext_flash_read_block(&buffer[2], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
193 ext_flash_read_block(&buffer[3], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
194
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
195 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
196 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
197
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
198 uint8_t ptr = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
199 text[ptr++] = 'V';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
200 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[0] & 0x3F);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
201 text[ptr++] = '.';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
202 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[1] & 0x3F);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
203 text[ptr++] = '.';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
204 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[2] & 0x3F);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
205 text[ptr++] = ' ';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
206 if(buffer[3])
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
207 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
208 text[ptr++] = 'b';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
209 text[ptr++] = 'e';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
210 text[ptr++] = 't';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
211 text[ptr++] = 'a';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
212 text[ptr++] = ' ';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
213 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
214 return ptr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
215 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
216
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
217
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
218 uint32_t ext_flash_read_firmware(uint8_t *pSample1, uint32_t max_length, uint8_t *magicByte)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
219 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
220 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
221 general32to8_Type lengthTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
222
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
223 actualAddress = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
224 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
225
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
226 ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
227 ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
228 ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
229 ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
230
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
231
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
232 if(lengthTransform.u32 == 0xFFFFFFFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
233 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
234 lengthTransform.u32 = 0xFFFFFFFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
235 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
236 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
237 if(lengthTransform.u32 > max_length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
238 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
239 lengthTransform.u32 = 0xFF000000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
240 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
241 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
242 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
243 for(uint32_t i = 0; i<lengthTransform.u32; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
244 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
245 ext_flash_read_block(&pSample1[i], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
246 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
247
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
248 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
249
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
250 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
251
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
252 if(magicByte)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
253 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
254 *magicByte = pSample1[0x10000 + 0x3E]; // 0x3E == 62
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
255 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
257 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
258 return lengthTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
260
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
262 void ext_flash_write_firmware2(uint32_t offset, uint8_t *pSample1, uint32_t length1, uint8_t *pSample2, uint32_t length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
264 general32to8_Type lengthTransform, offsetTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266 lengthTransform.u32 = length1 + length2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267 offsetTransform.u32 = offset;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
268
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269 actualPointerFirmware2 = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 ef_write_block(lengthTransform.u8,4, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271 ef_write_block(offsetTransform.u8,4, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272 ef_write_block(pSample1,length1, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273 if(length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274 ef_write_block(pSample2,length2, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
275 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278 uint32_t ext_flash_read_firmware2(uint32_t *offset, uint8_t *pSample1, uint32_t max_length1, uint8_t *pSample2, uint32_t max_length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281 uint32_t length1, length2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
282 general32to8_Type lengthTransform, offsetTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
283
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
284 actualAddress = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
285 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
286
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
287 ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
288 ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
289 ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
290 ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
291
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
292 ext_flash_read_block(&offsetTransform.u8[0], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
293 ext_flash_read_block(&offsetTransform.u8[1], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
294 ext_flash_read_block(&offsetTransform.u8[2], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
295 ext_flash_read_block(&offsetTransform.u8[3], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
296
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 *offset = offsetTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299 if(lengthTransform.u32 == 0xFFFFFFFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
301 lengthTransform.u32 = 0xFFFFFFFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 if(lengthTransform.u32 > max_length1 + max_length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 lengthTransform.u32 = 0xFF000000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 if(lengthTransform.u32 < max_length1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312 length1 = lengthTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 length2 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317 length1 = max_length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318 length2 = lengthTransform.u32 - max_length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
320
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
321 if(pSample1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
322 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 for(uint32_t i = 0; i<length1; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
324 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
325 ext_flash_read_block(&pSample1[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
326 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
327 if(pSample2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
328 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
329 for(uint32_t i = 0; i<length2; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
330 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
331 ext_flash_read_block(&pSample2[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
332 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
333 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
334 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
335 else if(pSample2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
336 {
1040
74be24428049 Bugfix Fontpack update for large blocks:
Ideenmodellierer
parents: 1027
diff changeset
337 /* actualAddress += length1; do dummy read to get EEPROM to the correct address */
74be24428049 Bugfix Fontpack update for large blocks:
Ideenmodellierer
parents: 1027
diff changeset
338 for(uint32_t i = 0; i<length1; i++)
74be24428049 Bugfix Fontpack update for large blocks:
Ideenmodellierer
parents: 1027
diff changeset
339 {
74be24428049 Bugfix Fontpack update for large blocks:
Ideenmodellierer
parents: 1027
diff changeset
340 ext_flash_read_block(&pSample2[0], EF_FIRMWARE2);
74be24428049 Bugfix Fontpack update for large blocks:
Ideenmodellierer
parents: 1027
diff changeset
341 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
342 for(uint32_t i = 0; i<length2; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
343 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
344 ext_flash_read_block(&pSample2[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
345 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
346 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
347 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
348 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
349 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
350 return lengthTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
351 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
352
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
353
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
354 void ext_flash_read_fixed_16_devicedata_blocks_formated_128byte_total(uint8_t *buffer)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
355 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
356 SDeviceLine data[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
357 uint8_t tempLengthIngnore;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
358 uint16_t count;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
359 uint8_t transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
360
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
361 RTC_DateTypeDef Sdate;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
362 RTC_TimeTypeDef Stime;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
363
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
364 actualAddress = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
365
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
366 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
367 ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
368 ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
369
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
370 ext_flash_read_block_multi((uint8_t *)data,16*3*4, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
371 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
372
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
373 count = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
374 for(int i=0;i<16;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
375 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
376 transfer = (data[i].value_int32 >> 24) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
377 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
378 transfer = (data[i].value_int32 >> 16) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
379 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
380 transfer = (data[i].value_int32 >> 8) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
381 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
382 transfer = (data[i].value_int32) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
383 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
384
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
385 translateDate(data[i].date_rtc_dr, &Sdate);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
386 translateTime(data[i].time_rtc_tr, &Stime);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
387 buffer[count++] = Sdate.Year;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
388 buffer[count++] = Sdate.Month;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
389 buffer[count++] = Sdate.Date;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
390 buffer[count++] = Stime.Hours;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
391 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
392 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
393
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
394
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
395 #ifndef BOOTLOADER_STANDALONE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
397 void ext_flash_write_devicedata(uint8_t resetRing)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
398 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400 const uint16_t length = sizeof(SDevice);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
401 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402 uint8_t dataLength[2] = { 0 };
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
403 uint32_t tmpBlockStart;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
404
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 ext_flash_disable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
406
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407 pData = (uint8_t *)stateDeviceGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
408
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
409 /* Reset the Ring to the start address if requested (e.g. because we write the default block during shutdown) */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
410 if((resetRing) || ((actualPointerDevicedata + length) >= DDSTOP))
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
411 {
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
412 actualPointerDevicedata = DDSTART;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
413 }
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
414 tmpBlockStart = actualPointerDevicedata;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
415
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
416 length_lo = (uint8_t)(length & 0xFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
417 length_hi = (uint8_t)(length >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
418 dataLength[0] = length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
419 dataLength[1] = length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
420
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
421 ef_write_block(dataLength,2, EF_DEVICEDATA, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
422 ef_write_block(pData,length, EF_DEVICEDATA, 0);
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
423
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
424 actualPointerDevicedata_Read = tmpBlockStart;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
425
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
426 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
427
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
428
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
429 uint16_t ext_flash_read_devicedata(uint8_t *buffer, uint16_t max_length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
430 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
431 uint16_t length;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
432 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
433
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
434 actualAddress = actualPointerDevicedata_Read;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
435
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
436 length = 0;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
437 length_lo = 0;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
438 length_hi = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
439 ext_flash_read_block_start();
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
440
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
441
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
442 ext_flash_read_block(&length_lo, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
443 ext_flash_read_block(&length_hi, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
444
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
445 while ((length_lo != 0xFF) && (length_hi != 0xFF))
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
446 {
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
447 length = (length_hi * 256) + length_lo;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
448
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
449 if(length > max_length)
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
450 return 0;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
451
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
452 ext_flash_read_block_multi(buffer,length,EF_DEVICEDATA);
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
453
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
454 ext_flash_read_block(&length_lo, EF_DEVICEDATA); /* check if another devicedata set is available */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
455 ext_flash_read_block(&length_hi, EF_DEVICEDATA); /* length will be 0xFFFF if a empty memory is read */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
456 }
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
457 ext_flash_decf_address_ring(EF_DEVICEDATA); /* set pointer back to empty address */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
458 ext_flash_decf_address_ring(EF_DEVICEDATA);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
459 ext_flash_read_block_stop();
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
460
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
461 if(actualAddress > actualPointerDevicedata) /* the write pointer has not yet been set up probably */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
462 {
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
463 actualPointerDevicedata = actualAddress;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
464 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
465 return length;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
466 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
467
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
468
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
469 void ext_flash_write_vpm(SVpm *vpmInput)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
470 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
471 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
472 const uint16_t length = sizeof(SVpm);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
473
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
474 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 uint8_t dataLength[2] = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
477 pData = (uint8_t *)vpmInput;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
478
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
479 actualPointerVPM = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
480
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 length_lo = (uint8_t)(length & 0xFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
482 length_hi = (uint8_t)(length >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
483 dataLength[0] = length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
484 dataLength[1] = length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
485
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
486 ef_write_block(dataLength,2, EF_VPMDATA, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
487 ef_write_block(pData,length, EF_VPMDATA, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
488 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
489
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
490
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
491 int ext_flash_read_vpm(SVpm *vpmOutput)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
492 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
493 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
494 const uint16_t length = sizeof(SVpm);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
495 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
496 int output;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
497
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
498 actualAddress = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
499
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
500 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
501 ext_flash_read_block(&length_lo, EF_VPMDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
502 ext_flash_read_block(&length_hi, EF_VPMDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
503 if((length_lo == (uint8_t)(length & 0xFF))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
504 &&(length_hi == (uint8_t)(length >> 8)))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
506 pData = (uint8_t *)vpmOutput;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
507 for(uint16_t i = 0; i < length; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
508 ext_flash_read_block(&pData[i], EF_VPMDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
509 output = length;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
510 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
511 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
512 output = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
513
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
514 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
515 return output;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
516 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
517
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
518 #ifdef DEMOMODE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
519 void ext_flash_write_settings(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
520 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
521 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
522 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
523 #else
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
524 void ext_flash_write_settings(uint8_t whichSettings, uint8_t resetRing)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
525 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
526 SSettings *pSettings;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
527 const uint16_t length = sizeof(SSettings);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
528 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
529 uint8_t dataLength[2] = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
530
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
531 pSettings = settingsGetPointer();
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
532
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
533 ext_flash_disable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
534
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
535 switch (whichSettings)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
536 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
537 default:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
538 case EF_SETTINGS: if(stateRealGetPointer()->lastKnownBatteryPercentage)
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
539 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
540 pSettings->lastKnownBatteryPercentage = stateRealGetPointer()->lastKnownBatteryPercentage;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
541 }
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
542 pSettings->backup_localtime_rtc_tr = stateRealGetPointer()->lifeData.timeBinaryFormat;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
543 pSettings->backup_localtime_rtc_dr = stateRealGetPointer()->lifeData.dateBinaryFormat;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
544 /* Reset the Ring to the start address if requested (e.g. because we write the default block during shutdown) */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
545 if((resetRing) || ((actualPointerSettings + length) >= SETTINGSSTOP))
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
546 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
547 actualPointerSettings = SETTINGSSTART;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
548 }
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
549 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
550 case EF_PROFILE0: actualPointerProfile = PROFILE0_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
551 pSettings = profileGetPointer(0);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
552 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
553 case EF_PROFILE1: actualPointerProfile = PROFILE1_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
554 pSettings = profileGetPointer(1);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
555 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
556 case EF_PROFILE2: actualPointerProfile = PROFILE2_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
557 pSettings = profileGetPointer(2);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
558 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
559 case EF_PROFILE3: actualPointerProfile = PROFILE3_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
560 pSettings = profileGetPointer(3);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
561 break;
427
b1091e183d52 Activated ringbuffer for settings:
ideenmodellierer
parents: 425
diff changeset
562 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
563
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
564 length_lo = (uint8_t)(length & 0xFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
565 length_hi = (uint8_t)(length >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
566 dataLength[0] = length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
567 dataLength[1] = length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
568
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
569 ef_write_block(dataLength,2, whichSettings, 0);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
570 ef_write_block((uint8_t*)pSettings,length, whichSettings, 0);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
571 // ext_flash_enable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
572 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
573 #endif
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
574
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
575
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
576 /* CHANGES 150929 hw
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
577 * this now allows to read old settings too
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
578 * but make sure that everything is fixed in
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
579 * set_new_settings_missing_in_ext_flash
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
580 * new settings should be fine as they are added
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
581 * and loaded before calling this function
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
582 */
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
583 uint8_t ext_flash_read_settings(uint8_t whichSettings)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
584 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
585 uint8_t returnValue = HAL_BUSY;
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
586 uint8_t exit = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
587 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
588 const uint16_t lengthStandardNow = sizeof(SSettings);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
589 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
590 uint16_t lengthOnEEPROM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
591 uint32_t header;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
592 SSettings* pSettings = settingsGetPointer();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
593
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
594 switch(whichSettings)
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
595 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
596 case EF_SETTINGS: pSettings = settingsGetPointer();
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
597 actualAddress = SETTINGSSTART;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
598 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
599 case EF_PROFILE0: pSettings = profileGetPointer(0);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
600 actualAddress = PROFILE0_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
601 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
602 case EF_PROFILE1: pSettings = profileGetPointer(1);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
603 actualAddress = PROFILE1_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
604 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
605 case EF_PROFILE2: pSettings = profileGetPointer(2);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
606 actualAddress = PROFILE2_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
607 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
608 case EF_PROFILE3: pSettings = profileGetPointer(3);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
609 actualAddress = PROFILE3_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
610 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
611 default: returnValue = HAL_ERROR;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
612 }
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
613
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
614 if(returnValue != HAL_ERROR)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
615 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
616 ext_flash_read_block_start();
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
617 ext_flash_read_block(&length_lo, whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
618 ext_flash_read_block(&length_hi, whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
619
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
620 while ((length_lo != 0xFF) && (length_hi != 0xFF) && (exit == 0)) /* get the latest stored setting block */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
621 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
622 lengthOnEEPROM = length_hi * 256;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
623 lengthOnEEPROM += length_lo;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
624 if(lengthOnEEPROM <= lengthStandardNow) /* EEPROM Header size equal or smaller => settings constant or upgraded */
427
b1091e183d52 Activated ringbuffer for settings:
ideenmodellierer
parents: 425
diff changeset
625 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
626 ext_flash_read_block_multi(&header, 4, whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
627 if((header <= pSettings->header) && (header >= pSettings->updateSettingsAllowedFromHeader)) /* check to allow update of header */
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
628 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
629 returnValue = HAL_OK;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
630 pSettings->header = header;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
631 pData = (uint8_t *)pSettings + 4; /* header */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
632 for(uint16_t i = 0; i < (lengthOnEEPROM-4); i++)
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
633 ext_flash_read_block(&pData[i], whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
634 if(header != pSettings->header) /* setting layout changed => no additional setting sets expected */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
635 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
636 exit = 1;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
637 }
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
638 }
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
639 else
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
640 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
641 returnValue = HAL_ERROR;
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
642 exit = 1;
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
643 }
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
644 }
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
645 else /* size of settings decreased => possible downgrade of firmware */
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
646 {
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
647 ext_flash_read_block_multi(&header, 4, whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
648
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
649 if(header > 0xFFFF0014) /* verify that new (old) header should be compatible (only less bytes, no change in layout) */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
650 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
651 returnValue = HAL_OK;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
652 pSettings->header = header;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
653 pData = (uint8_t *)pSettings + 4; /* header */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
654 for(uint16_t i = 0; i < (lengthStandardNow-4); i++) /* only read the data fitting into the structure */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
655 ext_flash_read_block(&pData[i], whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
656 }
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
657 else
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
658 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
659 returnValue = HAL_ERROR;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
660 }
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
661 exit = 1;
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
662 }
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
663 ext_flash_read_block(&length_lo, whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
664 ext_flash_read_block(&length_hi, whichSettings);
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
665 }
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
666 ext_flash_decf_address_ring(whichSettings); /* set pointer back to empty address */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
667 ext_flash_decf_address_ring(whichSettings);
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
668 ext_flash_read_block_stop();
538
b1eee27cd02b BugFix firmware downgrade to version with less settings:
Ideenmodellierer
parents: 466
diff changeset
669
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
670 if(actualAddress > actualPointerSettings) /* the write pointer has not yet been set up probably */
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
671 {
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
672 actualPointerSettings = actualAddress;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
673 }
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
674 ext_flash_read_block_stop();
427
b1091e183d52 Activated ringbuffer for settings:
ideenmodellierer
parents: 425
diff changeset
675 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676 return returnValue;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
678
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
682 /* ext_flash_start_new_dive_log_and_set_actualPointerSample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
683 * prepares the write sample pointer
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
684 * to be used by ext_flash_write_sample()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
685 * to be set in the * pHeaderPreDive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686 * for write with ext_flash_create_new_dive_log() and ext_flash_close_new_dive_log()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688 void ext_flash_start_new_dive_log_and_set_actualPointerSample(uint8_t *pHeaderPreDive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690 convert_Type data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693 /* new 5. Jan. 2015 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 actualPointerSample = settings->logFlashNextSampleStartAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696 if(!ext_flash_test_remaining_space_of_page_empty(actualPointerSample, 4))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697 ext_flash_set_to_begin_of_next_page(&actualPointerSample, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 if((actualPointerSample < SAMPLESTART) || (actualPointerSample > SAMPLESTOP))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700 actualPointerSample = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702 data.u32bit = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
703 pHeaderPreDive[2] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704 pHeaderPreDive[3] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 pHeaderPreDive[4] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706 /* to start sample writing and header etc. pp. */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 ext_flash_disable_protection_for_logbook();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
708 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
711 /* ext_flash_create_new_dive_log
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
712 * uses the first header without HEADER2OFFSET
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
713 * for the header it is not important to be complete
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
714 * and can be reconstructed
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
715 * ext_flash_start_new_dive_log_and_set_actualPointerSample()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
716 * has to be called before to set the actualPointerSample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
717 * in the header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
718 * the following func writes to header to the ext_flash
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
719 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
720 void ext_flash_create_new_dive_log(uint8_t *pHeaderPreDive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
721 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
722 SSettings *settings;
429
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
723 uint8_t id;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
724 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
725
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
726 settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
727 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
728
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
729 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
730 ext_flash_read_block_start();
429
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
731 ext_flash_read_block(&header1, EF_SAMPLE); /* the sample ring is increased instead of header... not sure if that is planned intention */
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
732 ext_flash_read_block(&header2, EF_SAMPLE); /* does not matter because actual address is reset in write_block call */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
733 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
734
429
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
735 /* TODO Cleanup_Ref_2: The code below should not be necessary in case of a proper shutdown and startup */
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
736 /* the implementation fixes an issue which might happen at Cleanup_Ref_1 (in case of more then 254 dives) */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
737 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
738 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
739 id += 1; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
740 if(id & 1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
742 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744 ext_flash_read_block(&header1, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745 ext_flash_read_block(&header2, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
747 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 id += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
750 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
751 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
752 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
753 id = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
754 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
755
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
756 settings->lastDiveLogId = id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
757 actualPointerHeader = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
758
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
759 if(pHeaderPreDive != 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
760 ef_write_block(pHeaderPreDive,HEADERSIZE, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
761 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
763
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
764 void ext_flash_close_new_dive_log(uint8_t *pHeaderPostDive )
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
765 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
766 SSettings * settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
767 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
768 convert_Type startAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
769 convert_Type data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
770 uint32_t backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
771
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
772 uint8_t sampleData[3];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
773 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
774 sampleData[0] = 0xFD;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
775 sampleData[1] = 0xFD;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
776 ext_flash_write_sample(sampleData, 2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
777
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
778 /* end of sample data, pointing to the last sample 0xFD
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
779 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
780 actualAddress = actualPointerSample; // change hw 17.09.2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
781 ext_flash_decf_address_ring(EF_SAMPLE); // 17.09.2015: this decf actualAddress only!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
782 actualPointerSample = actualAddress; // change hw 17.09.2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
783 data.u32bit = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
784
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
785 pHeaderPostDive[5] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
786 pHeaderPostDive[6] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
787 pHeaderPostDive[7] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
788
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
789 /* take data written before, calculate length and write
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
790 SLogbookHeader has different order: length (byte# 8,9,10) prior to profile version (byte# 11)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
791 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
792 startAddress.u8bit.byteLow = pHeaderPostDive[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
793 startAddress.u8bit.byteMidLow = pHeaderPostDive[3];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
794 startAddress.u8bit.byteMidHigh = pHeaderPostDive[4];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
795 startAddress.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
796
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
797 if(startAddress.u32bit < actualPointerSample)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
798 data.u32bit = 1 + actualPointerSample - startAddress.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
799 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
800 data.u32bit = 2 + (actualPointerSample - SAMPLESTART) + (SAMPLESTOP - startAddress.u32bit);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
801
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
802 pHeaderPostDive[8] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
803 pHeaderPostDive[9] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
804 pHeaderPostDive[10] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
805
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
806 /* set id and write post-dive-header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
807 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
808 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
809 actualPointerHeader = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
810
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
811 ef_write_block(pHeaderPostDive,HEADERSIZE, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
812
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
813 /* write length at beginning of sample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
814 and write proper beginning for next dive to actualPointerSample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
815 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
816 backup = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
817 actualPointerSample = startAddress.u32bit; // is still 0xFF
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
818 sampleData[0] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
819 sampleData[1] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
820 sampleData[2] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
821 ext_flash_overwrite_sample_without_erase(sampleData, 3);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
822
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
823 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
824 ext_flash_incf_address(EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
825 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
826 ext_flash_enable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
827 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
828
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
829
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
830 void ext_flash_write_sample(uint8_t *pSample, uint16_t length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
831 {
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
832 uint32_t actualAdressBackup = 0;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
833
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
834 ef_write_block(pSample,length, EF_SAMPLE, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
835
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
836 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
837 settings->logFlashNextSampleStartAddress = actualPointerSample;
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
838
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
839 if(0xFFFF - (actualAddress & 0x0000FFFF) < 255) /* are we close to a sector border? */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
840 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
841 if (((actualAddress & 0x0000FFFF) != 0) && (preparedPageAddress == 0)) /* only prepare if not already at start of sector */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
842 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
843 actualAdressBackup = actualAddress;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
844 actualAddress = (actualAddress & 0xFFFF0000) + 0x00010000; /* Set to start of next 64k sector */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
845 if(actualAddress >= SAMPLESTOP)
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
846 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
847 actualAddress = SAMPLESTART;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
848 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
849 preparedPageAddress = actualAddress;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
850 ext_flash_erase64kB();
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
851 actualAddress = actualAdressBackup;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
852 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
853 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
854 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
855
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
856 static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
857 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
858 ef_write_block(pSample,length, EF_SAMPLE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
859 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
860
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
861
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
862 uint8_t ext_flash_count_dive_headers(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
863 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
864 uint8_t id = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
865 uint8_t counter = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
866 uint16_t headerStartData = 0x0000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
867
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
868 id = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
869
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
870 do
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
871 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
872 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
873 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
874 ext_flash_read_block_multi((uint8_t *)&headerStartData, 2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
875 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
876 counter++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
877 id -=1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
878 } while((headerStartData == 0xFAFA) && (counter < 255));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
879 return (counter - 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
880 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
881
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
882
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
883 void ext_flash_read_dive_header(uint8_t *pHeaderToFill, uint8_t StepBackwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
884 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
885 SSettings *settings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
886 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
887 uint16_t i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
888
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
889 settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
890 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
891 id -= StepBackwards; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
892
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
893 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
894 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
895 for(i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
896 ext_flash_read_block(&pHeaderToFill[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
897 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
898
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
899 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
900
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
901 void ext_flash_read_dive_header2(uint8_t *pHeaderToFill, uint8_t id, _Bool bOffset)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
902 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
903
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
904 uint16_t i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
905 actualAddress = HEADERSTART + (0x800 * id) ;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
906
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
907 if(bOffset)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
908 actualAddress += HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
909 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
910 for(i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
911 ext_flash_read_block(&pHeaderToFill[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
912 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
913 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
914
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
915
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
916 uint32_t ext_flash_read_dive_raw_with_double_header_1K(uint8_t *data, uint32_t max_size, uint8_t StepBackwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
917 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
918 if(max_size < 0x800)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
919 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
920
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
921 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
922 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
923 uint32_t LengthAll = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
924
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
925 id = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
926 id -= StepBackwards; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
927
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
928 // clear data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
929 for(int i=0;i<0x800;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
930 data[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
931
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
932 // copy primary/pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
933 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
934 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
935 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
936 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
937 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
938
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
939 // copy main/secondary/post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
940 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
941 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
942 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
943 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
944 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
945
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
946 // data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
947
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
948 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
949 dataStart.u8bit.byteLow = data[0x402];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
950 dataStart.u8bit.byteMidLow = data[0x403];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
951 dataStart.u8bit.byteMidHigh = data[0x404];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
952
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
953 dataEnd.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
954 dataEnd.u8bit.byteLow = data[0x405];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
955 dataEnd.u8bit.byteMidLow = data[0x406];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
956 dataEnd.u8bit.byteMidHigh = data[0x407];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
957
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
958 actualPointerSample = dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
959 if(dataEnd.u32bit >= dataStart.u32bit)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
960 LengthAll = 1 + dataEnd.u32bit - dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
961 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
962 LengthAll = 2 + (dataStart.u32bit - SAMPLESTART) + (SAMPLESTOP - dataEnd.u32bit);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
963
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
964 LengthAll += 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
965
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
966 if(LengthAll > max_size)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
967 return 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
968
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
969 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
970 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
971 for(uint32_t i = 0x800; i < LengthAll; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
972 ext_flash_read_block(&data[i], EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
973 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
974 return LengthAll;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
975 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
976
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
977 void ext_flash_write_dive_raw_with_double_header_1K(uint8_t *data, uint32_t length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
978 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
979 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
980 SLogbookHeader headerTemp;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
981
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
982 // set actualPointerSample and get pointer to sample storage and disable flash write protect
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
983 ext_flash_start_new_dive_log_and_set_actualPointerSample((uint8_t *)&headerTemp);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
984
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
985 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
986 dataStart.u8bit.byteLow = headerTemp.pBeginProfileData[0];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
987 dataStart.u8bit.byteMidLow = headerTemp.pBeginProfileData[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
988 dataStart.u8bit.byteMidHigh = headerTemp.pBeginProfileData[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
989
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
990 dataEnd.u32bit = dataStart.u32bit + length - 0x801;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
991 if(dataEnd.u32bit > SAMPLESTOP)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
992 dataEnd.u32bit -= SAMPLESTOP + SAMPLESTART - 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
993
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
994 data[0x002] = data[0x402] = dataStart.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
995 data[0x003] = data[0x403] = dataStart.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
996 data[0x004] = data[0x404] = dataStart.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
997 data[0x005] = data[0x405] = dataEnd.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
998 data[0x006] = data[0x406] = dataEnd.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
999 data[0x007] = data[0x407] = dataEnd.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1000
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1001 // set actualPointerHeader to next free header and update lastDiveLogId
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1002 ext_flash_create_new_dive_log(0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1003
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1004 // copy header data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1005 ef_write_block(data,0x800,EF_HEADER, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1006
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1007 // copy sample data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1008 ef_write_block(&data[0x800], length-0x800, EF_SAMPLE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1009
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1010 // update logFlashNextSampleStartAddress
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1011 settingsGetPointer()->logFlashNextSampleStartAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1012 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1013
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1015 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1016 // ext_flash_read_header_memory
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1017 /// @brief This function returns the entire header space 1:1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1018 /// @date 04-April-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1019 ///
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1020 /// @param *data 256KB output
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1021 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1022 void ext_flash_read_header_memory(uint8_t *data)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1023 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1024 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1025 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1026 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1027 for(int i=0;i<8;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1028 ext_flash_read_block_multi(&data[0x8000 * i], 0x8000, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1029 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1030 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1031
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1032
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1033 // ===============================================================================
463
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1034 // ext_flash_write_header_memory
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1035 /// @brief This function erases and overwrites the entire logbook header block
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1036 /// @date 04-April-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1037 ///
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1038 /// @param *data 256KB input of header memory 1:1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1039 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1040 void ext_flash_write_header_memory(uint8_t *data)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1041 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1042 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1043 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1044 ef_write_block(data, 0x40000, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1045 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1046
463
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1047 void ext_flash_read_sample_memory(uint8_t *data,uint16_t blockId)
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1048 {
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1049 actualAddress = SAMPLESTART;
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1050 actualAddress += blockId * 0x8000; /* add 32k Block offset */
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1051 actualPointerSample = actualAddress;
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1052 ext_flash_read_block_start();
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1053 ext_flash_read_block_multi(data, 0x8000, EF_SAMPLE);
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1054 ext_flash_read_block_stop();
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1055 }
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1056
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1057 void ext_flash_write_sample_memory(uint8_t *data,uint16_t blockId)
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1058 {
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1059 actualAddress = SAMPLESTART;
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1060 actualAddress += blockId * 0x8000; /* add 32k Block offset */
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1061 actualPointerSample = actualAddress;
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1062 ef_write_block(data, 0x8000, EF_SAMPLE,0);
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1063 }
e4f6afd9c96b Added function to transfer sample buffer:
ideenmodellierer
parents: 460
diff changeset
1064
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1065
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1066 void ext_flash_open_read_sample(uint8_t StepBackwards, uint32_t *totalNumberOfBytes)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1067 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1068 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1069 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1070 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1071 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1072
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1073 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1074 id -= StepBackwards; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1075 #
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1076 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1077 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1078
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1079 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1080 /* little endian */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1081 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1082 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1083 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1084 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1085 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1086 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1087 dataEnd.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1088 ext_flash_read_block(&dataEnd.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1089 ext_flash_read_block(&dataEnd.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1090 ext_flash_read_block(&dataEnd.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1091 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1092
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1093 actualPointerSample = dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1094 if(dataEnd.u32bit >= dataStart.u32bit)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1095 LengthLeftSampleRead = 1 + dataEnd.u32bit - dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1096 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1097 LengthLeftSampleRead = 2 + (dataStart.u32bit - SAMPLESTART) + (SAMPLESTOP - dataEnd.u32bit);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1098 *totalNumberOfBytes = LengthLeftSampleRead;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1099
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1100 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1101 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1102 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1103
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1104
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1105 void ext_flash_read_next_sample_part(uint8_t *pSample, uint8_t length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1106 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1107 for(uint16_t i = 0; i < length; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1108 ext_flash_read_block(&pSample[i], EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1109 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1110
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1111
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1112 void ext_flash_close_read_sample(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1113 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1114 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1115 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1116 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1117
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1118
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1119 void ext_flash_set_entry_point(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1120 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1121 entryPoint = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1122 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1123
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1124
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1125 void ext_flash_reopen_read_sample_at_entry_point(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1126 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1127 error_led_on();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1128 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1129 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1130
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1131 actualAddress = entryPoint;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1132 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1133 error_led_off();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1134 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1135
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1136 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1137 uint8_t ext_flash_point_to_64k_block_in_headerSpace(uint8_t logId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1138 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1139 uint32_t pointerToData = logId * 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1140
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1141 return pointerToData / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1142 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1143 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1144
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1145
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1146 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1147 // ext_flash_repair_dive_numbers_starting_count_helper
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1148 /// @brief
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1149 /// @date 22-June-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1150
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1151 // ===============================================================================
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1152 static uint16_t ext_flash_repair_dive_numbers_starting_count_helper(uint8_t *data, uint8_t *change64k, uint16_t startNumber, uint8_t lastLogId)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1153 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1154 const uint32_t headerStep = 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1155 uint8_t actualLogId = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1156 uint16_t oldNumber = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1157 uint16_t actualNumber = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1158 SLogbookHeader *ptrLogbookHeader = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1159
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1160 if(startNumber == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1161 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1162
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1163 actualNumber = startNumber - 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1164
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1165 // where is the oldest dive (Which is now getting startNumber)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1166 // use first header for ease (without HEADER2OFFSET for end of dive header)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1167 // compare for lastLogId to prevent endless loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1168
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1169 if(*(uint16_t*)&data[lastLogId * headerStep] != 0xFAFA)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1170 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1171
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1172 actualLogId = lastLogId - 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1173 while((*(uint16_t*)&data[actualLogId * headerStep] == 0xFAFA) && (actualLogId != lastLogId))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1174 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1175 actualLogId--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1176 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1177
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1178 // now pointing to one behind the last
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1179 while(actualLogId != lastLogId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1180 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1181 actualLogId++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1182 actualNumber++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1183 ptrLogbookHeader = (SLogbookHeader *)&data[actualLogId * headerStep];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1184
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1185 oldNumber = ptrLogbookHeader->diveNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1186 if(oldNumber != actualNumber)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1187 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1188 // change64k[ext_flash_point_to_64k_block_in_headerSpace(actualLogId )] = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1189 change64k[(actualLogId * 0x800)/0x10000] = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1190 ptrLogbookHeader->diveNumber = actualNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1191 ptrLogbookHeader = (SLogbookHeader *)(&data[actualLogId * headerStep] + HEADER2OFFSET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1192 ptrLogbookHeader->diveNumber = actualNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1193 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1194 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1195
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1196 return actualNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1197 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1198
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1199 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1200 // ext_flash_repair_SPECIAL_dive_numbers_starting_count_with
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1201 /// @brief This function
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1202 /// @date 04-April-2016
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1203 /// problem (160621): 64K blocks (32 dives) in the new flash memory chip
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1204 /// This block needs to be deleted
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1205 /// these where only 4KB block before
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1206 /// @output endCount, last diveNumber
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1207
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1208 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1209 uint16_t ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(uint16_t startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1210 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1211 uint32_t logCopyDataPtr = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1212 uint8_t *data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1213 uint16_t lastCount;
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1214 uint8_t listOfChanged64kBlocks[8]; // 32 dives each 64K
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1215
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1216 logCopyDataPtr = getFrame(97);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1217 data = (uint8_t *)logCopyDataPtr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1218
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1219 for(int i=0;i<8;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1220 listOfChanged64kBlocks[i] = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1221
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1222 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1223 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1224 ext_flash_read_block_multi(data,0x100000,EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1225 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1226
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1227 lastCount = ext_flash_repair_dive_numbers_starting_count_helper(data, listOfChanged64kBlocks, startCount, settingsGetPointer()->lastDiveLogId);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1228
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1229 for(int i=0;i<8;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1230 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1231 if(listOfChanged64kBlocks[i] != 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1232 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1233 actualPointerHeader = HEADERSTART + (i * 0x10000);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1234 ef_write_block(&data[i * 0x10000], 0x10000, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1235 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1236 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1237
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1238 releaseFrame(97,logCopyDataPtr);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1239 if(settingsGetPointer()->totalDiveCounter < lastCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1240 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1241 settingsGetPointer()->totalDiveCounter = lastCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1242 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1243 return lastCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1244 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1245
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1246 /*
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1247 void OLD_ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(uint16_t startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1248 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1249 uint16_t counterStorage[256];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1250 uint8_t start = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1251 uint32_t logCopyDataPtr = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1252 uint8_t *data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1253 uint8_t startAbsolute = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1254 int16_t count = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1255 _Bool repair = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1256 uint8_t startBackup = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1257
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1258 SLogbookHeader tempLogbookHeader;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1259 SLogbookHeader *ptrHeaderInData1a;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1260 SLogbookHeader *ptrHeaderInData1b;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1261 SLogbookHeader *ptrHeaderInData2a;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1262 SLogbookHeader *ptrHeaderInData2b;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1263
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1264 logCopyDataPtr = getFrame(97);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1265 data = (uint8_t *)logCopyDataPtr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1266 ptrHeaderInData1a = (SLogbookHeader *)logCopyDataPtr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1267 ptrHeaderInData1b = (SLogbookHeader *)(logCopyDataPtr + HEADER2OFFSET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1268 ptrHeaderInData2a = (SLogbookHeader *)(logCopyDataPtr + 0x800);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1269 ptrHeaderInData2b = (SLogbookHeader *)(logCopyDataPtr + 0x800 + HEADER2OFFSET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1270
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1271 // get data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1272 for(int StepBackwards = 0; StepBackwards < 255; StepBackwards++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1273 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1274 logbook_getHeader(StepBackwards, &tempLogbookHeader);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1275 counterStorage[StepBackwards+1] = tempLogbookHeader.diveNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1276 if(tempLogbookHeader.diveHeaderStart == 0xFAFA)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1277 start = StepBackwards;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1278 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1279 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1280 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1281
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1282 if(start == 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1283 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1284
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1285 count = start + 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1286 startAbsolute = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1287
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1288
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1289
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1290 if(start%2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1291 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1292 if(counterStorage[start] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1293 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1294 // clear data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1295 for(int i=0;i<0x800*2;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1296 data[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1297
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1298 uint8_t id = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1299 id -= start; // 0-255, auto rollover
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1300
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1301 // copy primary/pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1302 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1303 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1304 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1305 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1306 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1307
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1308 // copy main/secondary/post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1309 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1310 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1311 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1312 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1313 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1314
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1315 // repair
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1316 ptrHeaderInData2a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1317 ptrHeaderInData2b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1318 startCount++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1319
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1320 // write
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1321 actualAddress = HEADERSTART + (0x800 * (id-1));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1322 ef_write_block(data,0x800*2,EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1323 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1324 start--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1325 }
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1326
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1327 // for(int count = start; count > -1; count -= 2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1328
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1329 while(count > 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1330 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1331 // clear data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1332 for(int i=0;i<0x1000;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1333 data[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1334
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1335 repair = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1336
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1337 startBackup = startAbsolute;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1338
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1339 if(startAbsolute%2) // 0x800 to 0x1000
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1340 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1341 // copy second pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1342 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1343 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1344 for(int i = 0x800; i < HEADERSIZE+0x800; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1345 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1346 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1347
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1348 // copy second post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1349 actualAddress = HEADERSTART + HEADER2OFFSET + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1350 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1351 for(int i = 0xC00; i < HEADERSIZE+0xC00; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1352 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1353 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1354
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1355 if(counterStorage[count] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1356 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1357 ptrHeaderInData2a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1358 ptrHeaderInData2b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1359 repair = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1360 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1361 startCount += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1362
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1363 startAbsolute -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1364 count -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1365
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1366 if(count > 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1367 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1368 // copy first pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1369 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1370 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1371 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1372 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1373 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1374
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1375 // copy first post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1376 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1377 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1378 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1379 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1380 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1381
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1382 if(counterStorage[count] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1383 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1384 ptrHeaderInData1a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1385 ptrHeaderInData1b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1386 repair = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1387 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1388 startCount += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1389
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1390 startAbsolute -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1391 count -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1392 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1393 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1394 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1395 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1396 // copy first pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1397 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1398 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1399 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1400 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1401 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1402
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1403 // copy first post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1404 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1405 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1406 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1407 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1408 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1409
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1410 if(counterStorage[count] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1411 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1412 ptrHeaderInData1a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1413 ptrHeaderInData1b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1414 repair = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1415 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1416 startCount += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1417
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1418 startAbsolute -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1419 count -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1420 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1421
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1422 // write
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1423 if(repair)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1424 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1425 actualPointerHeader = HEADERSTART + (0x1000 * startBackup%2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1426 ef_write_block(data,0x1000,EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1427 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1428 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1429 releaseFrame(97,logCopyDataPtr);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1430 settingsGetPointer()->totalDiveCounter = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1431 }
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1432 */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1433
452
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1434 uint8_t ext_dive_log_consistent(void)
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1435 {
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1436 uint8_t ret = 0;
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1437 uint8_t header1, header2;
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1438 uint8_t id;
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1439 convert_Type dataStart;
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1440 convert_Type dataEnd;
452
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1441
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1442 SSettings *settings = settingsGetPointer();
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1443 id = settings->lastDiveLogId;
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1444
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1445 if(settings->lastDiveLogId != 0) /* not trust LogID 0 which might be reset by a settings problem */
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1446 { /* ==> Find function will be called restoring the Id belonging to the latest sample */
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1447 actualAddress = HEADERSTART + (0x800 * id);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1448 ext_flash_read_block_start();
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1449 ext_flash_read_block(&header1, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1450 ext_flash_read_block(&header2, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1451 ext_flash_read_block_stop();
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1452 if((header1 == 0xFA) && (header2 == 0xFA)) /* Header is indicating the start of a dive */
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1453 {
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1454 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1455 ext_flash_read_block_start();
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1456 ext_flash_read_block(&header1, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1457 ext_flash_read_block(&header2, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1458 dataStart.u8bit.byteHigh = 0;
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1459 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1460 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1461 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1462 dataEnd.u8bit.byteHigh = 0;
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1463 ext_flash_read_block(&dataEnd.u8bit.byteLow, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1464 ext_flash_read_block(&dataEnd.u8bit.byteMidLow, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1465 ext_flash_read_block(&dataEnd.u8bit.byteMidHigh, EF_HEADER);
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1466 ext_flash_read_block_stop();
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1467
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1468 if((header1 == 0xFA) && (header2 == 0xFA)) /* Secondary header was written at the end of a dive */
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1469 {
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1470 if(dataStart.u32bit < dataEnd.u32bit)
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1471 {
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1472 ret = 1; /* => lastDiveLogID points to a valid dive entry */
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1473 }
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1474 else /* check if address wrap is valid */
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1475 {
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1476 if(ext_flash_SampleOverrunValid())
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1477 {
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1478 ret = 1;
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1479 }
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1480 }
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1481 }
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1482 }
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
1483 }
452
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1484 return ret;
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1485 }
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1486
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1487 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1488 // ext_flash_repair_dive_log
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1489 /// @brief This function
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1490 /// does set
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1491 /// logFlashNextSampleStartAddress
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1492 /// and
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1493 /// lastDiveLogId
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1494 ///
452
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
1495
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1496 void ext_flash_repair_dive_log(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1497 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1498 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1499 convert_Type dataStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1500
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1501 for(int id = 0; id < 255;id++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1502 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1503 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1504 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1505 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1506 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1507 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1508 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1509 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1510 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1511 ext_flash_read_block_stop();
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
1512 if((header1 == 0xFA) && (header2 == 0xFA)) /* Header is indicating the start of a dive */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1513 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1514 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1515 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1516 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1517 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1518 ext_flash_read_block_stop();
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
1519 if((header1 != 0xFA) || (header2 != 0xFA)) /* Secondary header was not written at the end of a dive */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1520 {
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
1521 actualPointerSample = dataStart.u32bit; /* Set datapointer to position stored in header written at beginning of dive */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1522 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1523 logbook_recover_brokenlog(id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1524 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1525 settings->logFlashNextSampleStartAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1526 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1527 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1528 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1529 ext_flash_find_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1530 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1531
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1532
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1533 static void ext_flash_find_start(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1534 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1535 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1536 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1537 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1538
429
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
1539 /* TODO Cleanup_Ref_1: cleanup logFlashNextSampleStartAddress and lastDiveLogId */
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
1540 /* The implementation below would cause problems in case more then 254 dives would be done. */
7f351c25608a Marked possible code improvment for future activities:
ideenmodellierer
parents: 427
diff changeset
1541 /* This is avoided by Cleanup_Ref2 */
441
9a9e4908ce2e fix potential issue with >255 dives in the logbook
heinrichsweikamp
parents: 429
diff changeset
1542 for(id = 0; id <= 255;id++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1543 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1544 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1545 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1546 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1547 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1548 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1549 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1550 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1551 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1552 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1553 if((header1 == 0xFF) && (header2 == 0xFF))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1554 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1555 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1556 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1557 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1558 id--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1559 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1560 settings->lastDiveLogId = id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1561
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1562 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1563 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1564
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1565 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1566
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1567 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1568 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1569 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1570 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1571 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1572 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1573 dataEnd.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1574 ext_flash_read_block(&dataEnd.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1575 ext_flash_read_block(&dataEnd.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1576 ext_flash_read_block(&dataEnd.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1577 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1578
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1579 //Find free space
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1580 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1581 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1582 uint8_t uiRead = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1583 int countFF = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1584 //End of last complete dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1585 actualPointerSample = dataEnd.u32bit ;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1586 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1587 //Check if there are samples of dives with less than half a minute
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1588 while(true)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1589 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1590 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1591 ext_flash_read_block(&uiRead, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1592 if(uiRead == 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1593 countFF++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1594 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1595 countFF = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1596
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1597
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1598
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1599 if(countFF == 10)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1600 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1601 actualAddress -= 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1602 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1603 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1604
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1605 //New page: clear
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1606 if(ext_flash_erase_if_on_page_start())
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1607 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1608 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1609 // Set new start address
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1610 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1611 settings->logFlashNextSampleStartAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1612 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1613 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1614 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1615 settings->logFlashNextSampleStartAddress = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1616 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1617 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1618
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1619
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
1620
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1621
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1622 static void ext_flash_disable_protection(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1623 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1624 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1625 extFlashStatusBit8_Type status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1626
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1627 status.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1628
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1629 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1630 write_spi(0x50,RELEASE); // EWSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1631 write_spi(0x01,HOLDCS); // WRSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1632 write_spi(status.uw,RELEASE); // new status
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1633 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1634 }
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
1635 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1636
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1637 void ext_flash_disable_protection_for_logbook(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1638 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1639 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1640 extFlashStatusBit8_Type status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1641
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1642 status.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1643 status.ub.BlockProtect0 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1644 status.ub.BlockProtect1 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1645 status.ub.BlockProtect2 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1646 status.ub.BlockProtect3 = 0; // not set in OSTC3. Why?
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1647
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1648 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1649 write_spi(0x50,RELEASE); // EWSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1650 write_spi(0x01,HOLDCS); // WRSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1651 write_spi(status.uw,RELEASE); // new status
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1652 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1653 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1654
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1655
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1656 void ext_flash_enable_protection(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1657 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1658 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1659 extFlashStatusBit8_Type status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1660
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1661 status.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1662 status.ub.BlockProtect0 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1663 status.ub.BlockProtect1 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1664 status.ub.BlockProtect2 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1665 status.ub.BlockProtect3 = 1; // not set in OSTC3. Why?
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1666
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1667 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1668 write_spi(0x50,RELEASE); // EWSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1669 write_spi(0x01,HOLDCS); // WRSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1670 write_spi(status.uw,RELEASE); // new status
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1671 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1672 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1673
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1674
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1675 /*void ext_flash_erase_chip(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1676 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1677 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1678 write_spi(0x06,RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1679 write_spi(0x60,RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1680 wait_chip_not_busy();
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1681 }*/
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1682
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1683 void ext_flash_erase_firmware(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1684 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1685 uint32_t size, blocks_64k;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1686
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1687 actualAddress = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1688 size = 1 + FWSTOP - FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1689 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1690 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1691 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1692
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1693 void ext_flash_erase_firmware2(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1694 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1695 uint32_t size, blocks_64k;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1696
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1697 actualAddress = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1698 size = 1 + FWSTOP2 - FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1699 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1700 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1701 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1702
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1703
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1704
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1705 void ext_flash_erase_logbook(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1706 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1707 uint32_t size, blocks_64k;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1708
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1709 ext_flash_disable_protection_for_logbook();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1710
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1711 actualAddress = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1712 size = 1 + SAMPLESTOP - SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1713 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1714 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1715
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1716 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1717 size = 1 + HEADERSTOP - HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1718 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1719 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1720
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1721 ext_flash_enable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1722 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1723
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1724
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1725 static void ext_flash_erase4kB(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1726 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1727 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1728 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1729 write_spi(0x20,HOLDCS);/* sector erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1730 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1731 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1732
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1733 /* be careful - might not work with entire family and other products
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1734 * see page 14 of LOGBOOK_V3_S25FS-S_00-271247.pdf
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1735 */
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1736 static void ext_flash_erase32kB(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1737 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1738 uint32_t actualAddress_backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1739
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1740 actualAddress_backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1741 actualAddress = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1742 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1743 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1744 write_spi(0xD8,HOLDCS);/* sector erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1745 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1746 actualAddress = actualAddress_backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1747 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1748
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1749
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1750 static void ext_flash_erase64kB(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1751 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1752 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1753 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1754 write_spi(0xD8,HOLDCS);/* sector erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1755 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1756 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1757
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1758
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1759 void ext_flash_read_block_start(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1760 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1761 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1762 write_spi(0x03,HOLDCS); /* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1763 write_address(HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1764 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1765
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1766 /* 4KB, 32KB, 64 KB, not the upper 16 MB with 4 Byte address at the moment */
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1767 static uint8_t ext_flash_erase_if_on_page_start(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1768 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1769 if(actualAddress < 0x00008000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1770 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1771 /* 4K Byte is 0x1000 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1772 if((actualAddress & 0xFFF) == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1773 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1774 ext_flash_erase4kB();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1775 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1776 }
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1777 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1778 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1779 if(actualAddress < 0x00010000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1780 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1781 /* 32K Byte is only one page */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1782 if(actualAddress == 0x00010000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1783 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1784 ext_flash_erase32kB();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1785 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1786 }
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1787 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1788 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1789 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1790 /* 64K Byte is 0x10000 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1791 if((actualAddress & 0xFFFF) == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1792 {
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1793 if(preparedPageAddress == actualAddress) /* has page already been prepared before? (at the moment for samples only) */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1794 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1795 preparedPageAddress = 0;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1796
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1797 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1798 else
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1799 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1800 ext_flash_erase64kB();
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1801 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1802 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1803 }
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1804 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1805
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1806 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1807 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1808
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1809
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1810 static void ext_flash_read_block(uint8_t *getByte, uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1811 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1812 *getByte = read_spi(HOLDCS);/* read data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1813 ext_flash_incf_address(type);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1814 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1815
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1816
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1817 static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1818 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1819 uint8_t *data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1820 data = getByte;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1821
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1822 for(uint32_t i=0;i<size;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1823 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1824 data[i] = read_spi(HOLDCS);/* read data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1825 ext_flash_incf_address(type);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1826 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1827 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1828
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1829
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1830 static void ext_flash_read_block_stop(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1831 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1832 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1833 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1834
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1835
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1836 /* Private functions ---------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1837
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1838 static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1839 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1840 uint32_t remaining_page_size, remaining_length, remaining_space_to_ring_end;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1841 uint32_t i=0;
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1842
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1843 if(!length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1844 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1845
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1846 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1847
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1848 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1849 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1850 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1851 actualAddress = actualPointerHeader;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1852 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1853 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1854 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1855 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1856 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1857 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1858 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1859 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1860 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1861 actualAddress = actualPointerDevicedata;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1862 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1863 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1864 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1865 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1866 actualAddress = actualPointerVPM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1867 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1868 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1869 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1870 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1871 actualAddress = actualPointerSettings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1872 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1873 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1874 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1875 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1876 actualAddress = actualPointerFirmware;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1877 ringStart = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1878 ringStop = FWSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1879 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1880 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1881 actualAddress = actualPointerFirmware2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1882 ringStart = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1883 ringStop = FWSTOP2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1884 break;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1885 case EF_PROFILE0:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1886 case EF_PROFILE1:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1887 case EF_PROFILE2:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1888 case EF_PROFILE3: actualAddress = actualPointerProfile;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1889 ringStart = PROFILE0_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1890 ringStop = PROFILE3_STOP;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1891 break;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1892 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1893 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1894 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1895 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1896 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1897 /* safety */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1898 if(actualAddress < ringStart)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1899 actualAddress = ringStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1900
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1901 if(do_not_erase == 0)
459
7ac0e76dbd6a Activated reset of sample information within header data at time of sector erasing:
ideenmodellierer
parents: 452
diff changeset
1902 {
466
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
1903 ext_flash_erase_if_on_page_start();
459
7ac0e76dbd6a Activated reset of sample information within header data at time of sector erasing:
ideenmodellierer
parents: 452
diff changeset
1904 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1905
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1906 while( i<length)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1907 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1908 ef_hw_rough_delay_us(5);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1909 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1910 write_spi(0x06,RELEASE); /* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1911 write_spi(0x02,HOLDCS); /* write cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1912 write_address(HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1913
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1914 remaining_length = length - i;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1915 remaining_page_size = 0xFF - (uint8_t)(actualAddress & 0xFF) +1;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1916 remaining_space_to_ring_end = ringStop - actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1917
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1918 if(remaining_length >= 256)
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1919 {
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1920 remaining_length = 255; /* up to 256 bytes may be written in one burst. Last byte is written with release */
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1921 }
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1922 else
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1923 {
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1924 remaining_length--; /* last byte needed for release */
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1925 }
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1926 if(remaining_length >= (remaining_page_size) ) /* use 256 byte page and calculate number of bytes left */
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1927 {
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1928 remaining_length = remaining_page_size - 1;
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1929 }
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1930 if( (remaining_space_to_ring_end >= 256))
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1931 {
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1932 for(int j=0; j<remaining_length; j++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1933 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1934 write_spi(sendByte[i],HOLDCS);/* write data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1935 actualAddress++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1936 i++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1937 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1938 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1939 /* byte with RELEASE */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1940 write_spi(sendByte[i],RELEASE);/* write data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1941 actualAddress++;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1942 i++;
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1943
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1944 if(actualAddress > ringStop)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1945 actualAddress = ringStart;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1946
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1947 if(do_not_erase == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1948 ext_flash_erase_if_on_page_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1949 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1950 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1951 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1952 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1953 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1954 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1955 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1956 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1957 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1958 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1959 actualPointerDevicedata = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1960 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1961 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1962 actualPointerVPM = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1963 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1964 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1965 actualPointerSettings = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1966 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1967 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1968 actualPointerFirmware = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1969 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1970 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1971 actualPointerFirmware2 = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1972 break;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1973 case EF_PROFILE0:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1974 case EF_PROFILE1:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1975 case EF_PROFILE2:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1976 case EF_PROFILE3: actualPointerProfile = actualAddress;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
1977 break;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1978 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1979 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1980 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1981 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1982
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
1983 #ifndef BOOTLOADER_STANDALONE
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1984 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1985 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1986 if((pointer & 0xFFF) == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1987 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1988
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1989 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1990 uint8_t data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1991 uint32_t size_to_page_end;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1992
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1993 size_to_page_end = 0x1000 - (pointer & 0xFFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1994 if(length > size_to_page_end)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1995 length = size_to_page_end;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1996
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1997 actualAddress = pointer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1998 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1999
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2000 for(uint16_t i = 0; i<length; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2001 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2002 ext_flash_read_block(&data, 255); // 255 = ENTIRE FLASH
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2003 if(data != 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2004 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2005 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2006 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2007 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2008 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2009 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2010 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2011 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2012 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2013 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2015
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2016 static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2017 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2018 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2019
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2020 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2021 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2022 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2023 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2024 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2025 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2026 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2027 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2028 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2029 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2030 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2031 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2032 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2033 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2034 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2035 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2036 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2037 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2038 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2039 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2040 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2041 break;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2042 case EF_PROFILE0:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2043 case EF_PROFILE1:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2044 case EF_PROFILE2:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2045 case EF_PROFILE3: ringStart = PROFILE0_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2046 ringStop = PROFILE3_STOP;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2047 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2048
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2049 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2050 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2051 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2052 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2053 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2054
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2055 *pointer = (*pointer & 0xFFF) + 0x1000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2056
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2057 if((*pointer < ringStart) || (*pointer >= ringStop))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2058 *pointer = ringStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2059 }
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2060 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2061
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2062 static void ef_erase_64K(uint32_t blocks)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2063 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2064 for(uint32_t i = 0; i < blocks; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2065 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2066 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2067 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2068 write_spi(0xD8,HOLDCS);/* 64k erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2069 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2070 actualAddress += 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2071 HAL_Delay(25);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2072 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2073 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2074
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2075
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2076 static void chip_unselect(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2077 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2078 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_SET); // chip select
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2079 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2080
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2081 static void chip_select(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2082 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2083 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2084 }
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2085 #ifndef BOOTLOADER_STANDALONE
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2086 static void error_led_on(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2087 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2088 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2089 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2090
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2091 static void error_led_off(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2092 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2093 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2094 }
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2095 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2096
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2097 static uint8_t read_spi(uint8_t unselect_CS_afterwards)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2098 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2099 uint8_t byte;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2100
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2101 chip_select();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2102
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2103 if(HAL_SPI_Receive(&hspiDisplay, &byte, 1, 10000) != HAL_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2104 Error_Handler_extflash();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2105
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2106 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2107 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2108 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2109 if(unselect_CS_afterwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2110 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2111
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2112 return byte;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2113 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2114
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2115
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2116 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2117 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2118 chip_select();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2119
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2120 if(HAL_SPI_Transmit(&hspiDisplay, &data, 1, 10000) != HAL_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2121 Error_Handler_extflash();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2122
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2123 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2124 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2125 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2126 if(unselect_CS_afterwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2127 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2128 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2129
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2130
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2131 static void write_address(uint8_t unselect_CS_afterwards)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2132 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2133 uint8_t hi, med ,lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2134
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2135 hi = (actualAddress >> 16) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2136 med = (actualAddress >> 8) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2137 lo = actualAddress & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2138
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2139 write_spi(hi, HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2140 write_spi(med, HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2141 write_spi(lo, unselect_CS_afterwards);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2142 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2143
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2144
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2145 static void wait_chip_not_busy(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2146 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2147 uint8_t status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2148
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2149 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2150
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2151 write_spi(0x05,HOLDCS); /* RDSR */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2152 status = read_spi(HOLDCS);/* read status */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2153 while(status & 0x01)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2154 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2155 HAL_Delay(1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2156 status = read_spi(HOLDCS);/* read status */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2157 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2158 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2159 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2160
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2161
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2162 static void ext_flash_incf_address(uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2163 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2164 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2165
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2166 actualAddress += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2167
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2168 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2169 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2170 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2171 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2172 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2173 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2174 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2175 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2176 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2177 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2178 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2179 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2180 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2181 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2182 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2183 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2184 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2185 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2186 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2187 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2188 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2189 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2190 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2191 ringStart = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2192 ringStop = FWSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2193 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2194 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2195 ringStart = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2196 ringStop = FWSTOP2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2197 break;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2198 case EF_PROFILE0:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2199 case EF_PROFILE1:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2200 case EF_PROFILE2:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2201 case EF_PROFILE3: ringStart = PROFILE0_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2202 ringStop = PROFILE3_STOP;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2203 break;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2204 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2205 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2206 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2207 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2208 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2209
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2210 if((actualAddress < ringStart) || (actualAddress > ringStop))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2211 actualAddress = ringStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2212 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2213
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2214 #ifndef BOOTLOADER_STANDALONE
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2215 static void ext_flash_decf_address_ring(uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2216 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2217 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2218
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2219 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2220 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2221 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2222 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2223 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2224 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2225 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2226 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2227 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2228 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2229 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2230 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2231 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2232 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2233 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2234 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2235 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2236 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2237 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2238 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2239 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2240 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2241 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2242 ringStart = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2243 ringStop = FWSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2244 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2245 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2246 ringStart = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2247 ringStop = FWSTOP2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2248 break;
1027
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2249 case EF_PROFILE0:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2250 case EF_PROFILE1:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2251 case EF_PROFILE2:
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2252 case EF_PROFILE3: ringStart = PROFILE0_START;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2253 ringStop = PROFILE3_STOP;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2254 break;
158100a84ebd New profile feature:
Ideenmodellierer
parents: 870
diff changeset
2255
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2256 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2257 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2258 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2259 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2260 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2261
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2262 if((actualAddress <= ringStart) || (actualAddress > ringStop))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2263 actualAddress = ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2264 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2265 actualAddress -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2266 }
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2267 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2268
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2269 static void ef_hw_rough_delay_us(uint32_t delayUs)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2270 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2271 if(!delayUs)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2272 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2273 delayUs*= 12;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2274 while(delayUs--);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2275 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2276 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2277
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2278 static void Error_Handler_extflash(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2279 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2280 while(1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2281 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2282 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2283 }
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2284
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2285 void ext_flash_CloseSector(void)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2286 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2287 uint32_t actualAddressBackup = actualAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2288 int i=0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2289
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2290 if(closeSectorAddress != 0)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2291 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2292 /* write some dummy bytes to the sector which is currently used for storing samples. This is done to "hide" problem if function is calles again */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2293 actualAddress = closeSectorAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2294
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2295 wait_chip_not_busy();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2296 write_spi(0x06,RELEASE); /* WREN */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2297 write_spi(0x02,HOLDCS); /* write cmd */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2298 write_address(HOLDCS);
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2299 for(i = 0; i<8; i++)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2300 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2301 write_spi(0xA5,HOLDCS);/* write data */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2302 actualAddress++;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2303 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2304 /* byte with RELEASE */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2305 write_spi(0xA5,RELEASE);/* write data */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2306 actualAddress = actualAddressBackup;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2307 closeSectorAddress = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2308 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2309 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2310
466
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2311 /* This function validates a potential jump of sample address by checking the last sector for empty memory cells */
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2312 uint8_t ext_flash_SampleOverrunValid(void)
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2313 {
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2314 uint8_t jumpvalid = 1;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2315 uint32_t curAddress, actualaddrbackup;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2316 uint8_t tmpBuffer;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2317 uint8_t emptyCellCnt = 0;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2318
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2319 actualaddrbackup = actualAddress;
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
2320 curAddress = SAMPLESTOP - 20; /* check the last 20 bytes of the last sample sector */
466
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2321 actualAddress = curAddress;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2322 ext_flash_read_block_start();
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2323 while(actualAddress < SAMPLESTOP)
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2324 {
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2325 tmpBuffer = read_spi(HOLDCS);/* read data */
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2326 if(tmpBuffer == 0xFF)
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2327 {
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2328 emptyCellCnt++;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2329 }
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2330 actualAddress++;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2331 }
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2332 ext_flash_read_block_stop();
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2333
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2334 if(emptyCellCnt == 20)
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2335 {
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2336 jumpvalid = 0;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2337 }
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2338 actualAddress = actualaddrbackup;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2339 return jumpvalid;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2340 }
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2341
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
2342 uint32_t ext_flash_AnalyseSampleBuffer()
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2343 {
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
2344 uint8_t sectorState[192]; /* samples are stored in 192 sector / 64k each */
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2345 uint32_t curAddress = SAMPLESTART;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2346 uint8_t curSector = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2347 uint8_t samplebuffer[10];
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2348 uint32_t actualAddressBackup = actualAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2349 uint8_t emptyCellCnt = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2350 uint32_t i = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2351 uint8_t startedSectors = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2352 uint8_t lastSectorInuse = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2353
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2354 /* check if a sector is used till its end */
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
2355 for(curSector = 0; curSector < 192; curSector++)
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2356 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2357 sectorState[curSector] = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2358 emptyCellCnt = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2359 curAddress = SAMPLESTART + (curSector * 0x10000); /* set address to begin of sector and check if it is used */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2360 actualAddress = curAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2361 ext_flash_read_block_start();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2362 for(uint32_t i=0;i<10;i++)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2363 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2364 samplebuffer[i] = read_spi(HOLDCS);/* read data */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2365 if(samplebuffer[i] == 0xFF)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2366 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2367 emptyCellCnt++;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2368 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2369 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2370 ext_flash_read_block_stop();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2371 if(emptyCellCnt == 10)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2372 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2373 sectorState[curSector] = SECTOR_NOTUSED;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2374 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2375 emptyCellCnt = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2376 curAddress = SAMPLESTART + (curSector * 0x10000) + 0xFFF5; /* set address to end of sector and check if it is used */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2377 actualAddress = curAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2378 ext_flash_read_block_start();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2379 for(i=0;i<10;i++)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2380 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2381 samplebuffer[i] = read_spi(HOLDCS);/* read data */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2382 if(samplebuffer[i] == 0xFF)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2383 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2384 emptyCellCnt++;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2385 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2386 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2387 ext_flash_read_block_stop();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2388 if(emptyCellCnt == 10)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2389 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2390 sectorState[curSector] |= SECTOR_INUSE; /* will become SECTOR_EMPTY if start is NOTUSED */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2391 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2392 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2393
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
2394 for(i=0;i<192;i++)
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2395 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2396 if( sectorState[i] == SECTOR_INUSE)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2397 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2398 startedSectors++;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2399 lastSectorInuse = i;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2400 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2401 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2402
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2403 if(startedSectors > 1) /* more than one sector is in used => ring buffer corrupted */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2404 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2405 if(startedSectors == 2) /* only fix issue if only two sectors are in used. Otherwise fixing will cause more worries than help */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2406 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2407 /* the logic behind healing of the problem is that the larger address is the oldest one => restore the largest address */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2408 curAddress = SAMPLESTART + (lastSectorInuse * 0x10000);
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2409 emptyCellCnt = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2410 actualAddress = curAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2411 ext_flash_read_block_start();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2412 while((emptyCellCnt < 10) && (actualAddress < curAddress + 0x10000))
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2413 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2414 samplebuffer[0] = read_spi(HOLDCS);/* read data */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2415 if(samplebuffer[0] == 0xFF)
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2416 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2417 emptyCellCnt++;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2418 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2419 else
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2420 {
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2421 emptyCellCnt = 0;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2422 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2423 actualAddress++;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2424 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2425 ext_flash_read_block_stop();
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2426 actualAddress -= 10; /* step 10 bytes back to the start of free bytes */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2427 actualPointerSample = actualAddress;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2428
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2429 closeSectorAddress = settingsGetPointer()->logFlashNextSampleStartAddress & 0xFFFF0000;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2430 closeSectorAddress += 0xFFF5; /* to be used once next time a dive is logged. Needed because NextSampleID is derived at every startup */
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2431 settingsGetPointer()->logFlashNextSampleStartAddress = actualPointerSample; /* store new position to be used for next dive */
557
2702bfa7b177 Stabilityfix: Do not trust lastDiveLogID == 0 at startup:
Ideenmodellierer
parents: 538
diff changeset
2432 ext_flash_CloseSector();
425
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2433 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2434 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2435 actualAddress = actualAddressBackup;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2436 return startedSectors;
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2437 }
86fcac4cc43a Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents: 423
diff changeset
2438
466
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2439 uint32_t ext_flash_read_profilelength_small_header(uint32_t smallHeaderAddr)
452
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
2440 {
466
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2441 uint32_t profileLength = 0;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2442 actualPointerSample = smallHeaderAddr;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2443 actualAddress = actualPointerSample;
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2444 ext_flash_read_block_start();
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2445 ext_flash_read_next_sample_part((uint8_t*)&profileLength, 3);
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2446 ext_flash_close_read_sample();
538eb1c976e9 Removed invalidate header function because it is no lonnger needed
ideenmodellierer
parents: 463
diff changeset
2447 return profileLength;
452
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
2448 }
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
2449
b90ddf57f7f1 Added compile variant enabling the reset of profile sample information:
ideenmodellierer
parents: 429
diff changeset
2450
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2451
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2452 uint8_t ext_flash_erase_firmware_if_not_empty(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2453 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2454 const uint8_t TESTSIZE_FW = 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2455
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2456 uint8_t data[TESTSIZE_FW];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2457 uint8_t notEmpty = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2458
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2459 actualAddress = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2460 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2461 for(int i = 0; i < TESTSIZE_FW; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2462 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2463 ext_flash_read_block(&data[i], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2464 if(data[i] != 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2465 notEmpty = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2466 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2467 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2468
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2469 if(notEmpty)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2470 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2471 ext_flash_erase_firmware();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2472 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2473 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2474 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2475 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2476 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2477
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2478 uint8_t ext_flash_erase_firmware2_if_not_empty(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2479 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2480 const uint8_t TESTSIZE_FW = 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2481
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2482 uint8_t data[TESTSIZE_FW];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2483 uint8_t notEmpty = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2484
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2485 actualAddress = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2486 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2487 for(int i = 0; i < TESTSIZE_FW; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2488 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2489 ext_flash_read_block(&data[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2490 if(data[i] != 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2491 notEmpty = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2492 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2493 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2494
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2495 if(notEmpty)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2496 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2497 ext_flash_erase_firmware2();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2498 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2499 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2500 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2501 return 0;
870
bc6c90e20d9e Instrument code for Bootloader:
Ideenmodellierer
parents: 557
diff changeset
2502 }