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.
This commit is contained in:
Jef Driesen 2012-12-26 08:06:14 +01:00
parent 14072ff8a6
commit d0b7f2e584
5 changed files with 16 additions and 20 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;