From 61f96031314a9b550ab96fa5f37cf7ec0fab0210 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Tue, 27 Apr 2010 11:33:41 +0000 Subject: [PATCH] Autodetect the Oceanic OC1 layout at runtime. --- src/oceanic_atom2.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index 9621e48..9eaa1a3 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -63,6 +63,9 @@ static const device_backend_t oceanic_atom2_device_backend = { oceanic_atom2_device_close /* close */ }; +static const unsigned char oceanic_atom2_version[] = "2M ATOM r\0\0 512K"; +static const unsigned char oceanic_oc1_version[] = "OCWATCH R\0\0 1024"; + static const oceanic_common_layout_t oceanic_atom2_layout = { 0x10000, /* memsize */ 0x0000, /* cf_devinfo */ @@ -75,6 +78,18 @@ static const oceanic_common_layout_t oceanic_atom2_layout = { 0 /* pt_mode_logbook */ }; +static const oceanic_common_layout_t oceanic_oc1_layout = { + 0x20000, /* memsize */ + 0x0000, /* cf_devinfo */ + 0x0040, /* cf_pointers */ + 0x0240, /* rb_logbook_begin */ + 0x0A40, /* rb_logbook_end */ + 0x0A40, /* rb_profile_begin */ + 0x20000, /* rb_profile_end */ + 0, /* pt_mode_global */ + 1 /* pt_mode_logbook */ +}; + static int device_is_oceanic_atom2 (device_t *abstract) @@ -234,9 +249,6 @@ oceanic_atom2_device_open (device_t **out, const char* name) // Initialize the base class. oceanic_common_device_init (&device->base, &oceanic_atom2_device_backend); - // Override the base class values. - device->base.layout = &oceanic_atom2_layout; - // Set the default values. device->port = NULL; memset (device->version, 0, sizeof (device->version)); @@ -293,6 +305,12 @@ oceanic_atom2_device_open (device_t **out, const char* name) return status; } + // Override the base class values. + if (oceanic_common_match (oceanic_oc1_version, device->version, sizeof (device->version))) + device->base.layout = &oceanic_oc1_layout; + else + device->base.layout = &oceanic_atom2_layout; + *out = (device_t*) device; return DEVICE_STATUS_SUCCESS;