From d0b7f2e584301c92679344b65cc1a368cc1ea053 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Wed, 26 Dec 2012 08:06:14 +0100 Subject: [PATCH] Move the version string to the common device structure. The version string can be shared by all three backends, which will make it easier to use the version data directly from the common code. --- src/oceanic_atom2.c | 24 +++++++++++------------- src/oceanic_common.c | 1 + src/oceanic_common.h | 1 + src/oceanic_veo250.c | 4 +--- src/oceanic_vtpro.c | 6 ++---- 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index ecb7ad0..0233259 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -45,7 +45,6 @@ typedef struct oceanic_atom2_device_t { oceanic_common_device_t base; serial_t *port; - unsigned char version[PAGESIZE]; } oceanic_atom2_device_t; static dc_status_t oceanic_atom2_device_read (dc_device_t *abstract, unsigned int address, unsigned char data[], unsigned int size); @@ -361,7 +360,6 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char // Set the default values. device->port = NULL; - memset (device->version, 0, sizeof (device->version)); // Open the device. int rc = serial_open (&device->port, context, name); @@ -397,7 +395,7 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char // Switch the device from surface mode into download mode. Before sending // this command, the device needs to be in PC mode (automatically activated // by connecting the device), or already in download mode. - dc_status_t status = oceanic_atom2_device_version ((dc_device_t *) device, device->version, sizeof (device->version)); + dc_status_t status = oceanic_atom2_device_version ((dc_device_t *) device, device->base.version, sizeof (device->base.version)); if (status != DC_STATUS_SUCCESS) { serial_close (device->port); free (device); @@ -405,27 +403,27 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char } // Override the base class values. - if (OCEANIC_COMMON_MATCH (device->version, aeris_f10_version)) { + if (OCEANIC_COMMON_MATCH (device->base.version, aeris_f10_version)) { device->base.layout = &aeris_f10_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_atom1_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom1_version)) { device->base.layout = &oceanic_atom1_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_atom2_version)) { - if (array_uint16_be (device->version + 0x09) >= 0x3349) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom2_version)) { + if (array_uint16_be (device->base.version + 0x09) >= 0x3349) { device->base.layout = &oceanic_atom2a_layout; } else { device->base.layout = &oceanic_atom2c_layout; } - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_atom2a_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom2a_version)) { device->base.layout = &oceanic_atom2a_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_atom2b_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom2b_version)) { device->base.layout = &oceanic_atom2b_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_atom2c_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom2c_version)) { device->base.layout = &oceanic_atom2c_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, tusa_zenair_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, tusa_zenair_version)) { device->base.layout = &tusa_zenair_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_oc1_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_oc1_version)) { device->base.layout = &oceanic_oc1_layout; - } else if (OCEANIC_COMMON_MATCH (device->version, oceanic_veo1_version)) { + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_veo1_version)) { device->base.layout = &oceanic_veo1_layout; } else { device->base.layout = &oceanic_default_layout; diff --git a/src/oceanic_common.c b/src/oceanic_common.c index f2a6c94..dcaa11d 100644 --- a/src/oceanic_common.c +++ b/src/oceanic_common.c @@ -125,6 +125,7 @@ oceanic_common_device_init (oceanic_common_device_t *device, dc_context_t *conte device_init (&device->base, context, backend); // Set the default values. + memset (device->version, 0, sizeof (device->version)); memset (device->fingerprint, 0, sizeof (device->fingerprint)); device->layout = NULL; device->multipage = 1; diff --git a/src/oceanic_common.h b/src/oceanic_common.h index d94ebea..0530adf 100644 --- a/src/oceanic_common.h +++ b/src/oceanic_common.h @@ -59,6 +59,7 @@ typedef struct oceanic_common_layout_t { typedef struct oceanic_common_device_t { dc_device_t base; + unsigned char version[PAGESIZE]; unsigned char fingerprint[FPMAXSIZE]; const oceanic_common_layout_t *layout; unsigned int multipage; diff --git a/src/oceanic_veo250.c b/src/oceanic_veo250.c index 43f63d4..7bb522c 100644 --- a/src/oceanic_veo250.c +++ b/src/oceanic_veo250.c @@ -46,7 +46,6 @@ typedef struct oceanic_veo250_device_t { oceanic_common_device_t base; serial_t *port; unsigned int last; - unsigned char version[PAGESIZE]; } oceanic_veo250_device_t; static dc_status_t oceanic_veo250_device_read (dc_device_t *abstract, unsigned int address, unsigned char data[], unsigned int size); @@ -249,7 +248,6 @@ oceanic_veo250_device_open (dc_device_t **out, dc_context_t *context, const char // Set the default values. device->port = NULL; device->last = 0; - memset (device->version, 0, sizeof (device->version)); // Open the device. int rc = serial_open (&device->port, context, name); @@ -305,7 +303,7 @@ oceanic_veo250_device_open (dc_device_t **out, dc_context_t *context, const char // Switch the device from surface mode into download mode. Before sending // this command, the device needs to be in PC mode (manually activated by // the user), or already in download mode. - status = oceanic_veo250_device_version ((dc_device_t *) device, device->version, sizeof (device->version)); + status = oceanic_veo250_device_version ((dc_device_t *) device, device->base.version, sizeof (device->base.version)); if (status != DC_STATUS_SUCCESS) { serial_close (device->port); free (device); diff --git a/src/oceanic_vtpro.c b/src/oceanic_vtpro.c index 4ef48a1..e5fc93c 100644 --- a/src/oceanic_vtpro.c +++ b/src/oceanic_vtpro.c @@ -46,7 +46,6 @@ typedef struct oceanic_vtpro_device_t { oceanic_common_device_t base; serial_t *port; - unsigned char version[PAGESIZE]; } oceanic_vtpro_device_t; static dc_status_t oceanic_vtpro_device_read (dc_device_t *abstract, unsigned int address, unsigned char data[], unsigned int size); @@ -278,7 +277,6 @@ oceanic_vtpro_device_open (dc_device_t **out, dc_context_t *context, const char // Set the default values. device->port = NULL; - memset (device->version, 0, sizeof (device->version)); // Open the device. int rc = serial_open (&device->port, context, name); @@ -331,7 +329,7 @@ oceanic_vtpro_device_open (dc_device_t **out, dc_context_t *context, const char // Switch the device from surface mode into download mode. Before sending // this command, the device needs to be in PC mode (manually activated by // the user), or already in download mode. - status = oceanic_vtpro_device_version ((dc_device_t *) device, device->version, sizeof (device->version)); + status = oceanic_vtpro_device_version ((dc_device_t *) device, device->base.version, sizeof (device->base.version)); if (status != DC_STATUS_SUCCESS) { serial_close (device->port); free (device); @@ -349,7 +347,7 @@ oceanic_vtpro_device_open (dc_device_t **out, dc_context_t *context, const char } // Override the base class values. - if (OCEANIC_COMMON_MATCH (device->version, oceanic_wisdom_version)) { + if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_wisdom_version)) { device->base.layout = &oceanic_wisdom_layout; } else { device->base.layout = &oceanic_vtpro_layout;