[PATCH v2 08/15] Add a function to erase the memory of the OSTC3

Anton Lundin glance at acc.umu.se
Wed Dec 17 14:11:05 PST 2014


This is the fist step in the firmware upgrade process.

This code is inspired by JeanDo ostc-companion.

Reviewed-by: Jef Driesen <jef at libdivecomputer.org>
Signed-off-by: Anton Lundin <glance at acc.umu.se>
---
 src/hw_ostc3.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/hw_ostc3.c b/src/hw_ostc3.c
index f777cee..71f56a1 100644
--- a/src/hw_ostc3.c
+++ b/src/hw_ostc3.c
@@ -46,10 +46,13 @@
 #define SZ_MEMORY     0x200000
 #define SZ_CONFIG     4
 #define SZ_FIRMWARE   0x01E000        // 120KB
+#define SZ_FIRMWARE_BLOCK    0x1000   //   4KB
+#define FIRMWARE_AREA      0x3E0000
 
 #define RB_LOGBOOK_SIZE  256
 #define RB_LOGBOOK_COUNT 256
 
+#define S_ERASE    0x42
 #define S_READY    0x4C
 #define READY      0x4D
 #define HEADER     0x61
@@ -873,3 +876,18 @@ hw_ostc3_device_init_service (dc_device_t *abstract)
 
 	return DC_STATUS_SUCCESS;
 }
+
+static dc_status_t
+hw_ostc3_firmware_erase (hw_ostc3_device_t *device, unsigned int addr, unsigned int size)
+{
+	dc_status_t rc = DC_STATUS_SUCCESS;
+	// Convert size to number of pages, rounded up.
+	unsigned char blocks = ((size + SZ_FIRMWARE_BLOCK - 1) / SZ_FIRMWARE_BLOCK);
+
+	// Erase just the needed pages.
+	unsigned char buffer[4];
+	array_uint24_be_set(buffer, addr);
+	buffer[3] = blocks;
+
+	return hw_ostc3_transfer (device, NULL, S_ERASE, buffer, sizeof(buffer), NULL, 0);
+}
-- 
2.1.0



More information about the devel mailing list