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;