Add the model number to the version table
With the model number in the version table, the version string can be mapped to the corresponding model number. This allows to implement some model specific behaviour already before being able to read the model number. In most cases, there is a simple one to one relationship between the version string and the model number, but there are also a few exceptions: * For the Sherwood Wisdom 2 and 3, and the Beuchat Mundial 2 and 3, each variant has a different model number, but the first part of the version string is identical. The difference is in the firmware version part. Handling this correctly requires two entries in the table. * For the Oceanic OC1 there are 3 different model numbers, and only 2 different version strings. That means there is no correct mapping possible.
This commit is contained in:
parent
f59cbf0fe5
commit
d0857c49ec
@ -402,101 +402,103 @@ static const oceanic_common_layout_t aqualung_i450t_layout = {
|
||||
};
|
||||
|
||||
static const oceanic_common_version_t versions[] = {
|
||||
{"OCEVEO10 \0\0 8K", 0, &oceanic_veo1_layout},
|
||||
{"AERIS XR1 NX R\0\0", 0, &oceanic_veo1_layout},
|
||||
{"OCEVEO10 \0\0 8K", 0, VEO10, &oceanic_veo1_layout},
|
||||
{"AERIS XR1 NX R\0\0", 0, XR1NX, &oceanic_veo1_layout},
|
||||
|
||||
{"ATOM rev\0\0 256K", 0, &oceanic_atom1_layout},
|
||||
{"ATOM rev\0\0 256K", 0, ATOM1, &oceanic_atom1_layout},
|
||||
|
||||
{"MANTA R\0\0 512K", 0x3242, &oceanic_atom2a_layout},
|
||||
{"MANTA R\0\0 512K", 0, &oceanic_atom2c_layout},
|
||||
{"2M ATOM r\0\0 512K", 0x3349, &oceanic_atom2a_layout},
|
||||
{"2M ATOM r\0\0 512K", 0, &oceanic_atom2c_layout},
|
||||
{"MANTA R\0\0 512K", 0x3242, MANTA, &oceanic_atom2a_layout},
|
||||
{"MANTA R\0\0 512K", 0, MANTA, &oceanic_atom2c_layout},
|
||||
{"2M ATOM r\0\0 512K", 0x3349, ATOM2, &oceanic_atom2a_layout},
|
||||
{"2M ATOM r\0\0 512K", 0, ATOM2, &oceanic_atom2c_layout},
|
||||
|
||||
{"INSIGHT2 \0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"OCEVEO30 \0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"ATMOSAI R\0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"PROPLUS2 \0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"OCEGEO20 \0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"OCE GEO R\0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"AQUAI200 \0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"AQUA200C \0\0 512K", 0, &oceanic_atom2a_layout},
|
||||
{"INSIGHT2 \0\0 512K", 0, INSIGHT2, &oceanic_atom2a_layout},
|
||||
{"OCEVEO30 \0\0 512K", 0, VEO30, &oceanic_atom2a_layout},
|
||||
{"ATMOSAI R\0\0 512K", 0, ATMOSAI2, &oceanic_atom2a_layout},
|
||||
{"PROPLUS2 \0\0 512K", 0, PROPLUS21, &oceanic_atom2a_layout},
|
||||
{"OCEGEO20 \0\0 512K", 0, GEO20, &oceanic_atom2a_layout},
|
||||
{"OCE GEO R\0\0 512K", 0, GEO, &oceanic_atom2a_layout},
|
||||
{"AQUAI200 \0\0 512K", 0, I200, &oceanic_atom2a_layout},
|
||||
{"AQUA200C \0\0 512K", 0, I200C, &oceanic_atom2a_layout},
|
||||
|
||||
{"ELEMENT2 \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"OCEVEO20 \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"TUSAZEN \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"AQUAI300 \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"HOLLDG03 \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"AQUAI100 \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"AQUA300C \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"OCEGEO40 \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"VEOSMART \0\0 512K", 0, &oceanic_atom2b_layout},
|
||||
{"ELEMENT2 \0\0 512K", 0, ELEMENT2, &oceanic_atom2b_layout},
|
||||
{"OCEVEO20 \0\0 512K", 0, VEO20, &oceanic_atom2b_layout},
|
||||
{"TUSAZEN \0\0 512K", 0, ZEN, &oceanic_atom2b_layout},
|
||||
{"AQUAI300 \0\0 512K", 0, I300, &oceanic_atom2b_layout},
|
||||
{"HOLLDG03 \0\0 512K", 0, DG03, &oceanic_atom2b_layout},
|
||||
{"AQUAI100 \0\0 512K", 0, I100, &oceanic_atom2b_layout},
|
||||
{"AQUA300C \0\0 512K", 0, I300C, &oceanic_atom2b_layout},
|
||||
{"OCEGEO40 \0\0 512K", 0, GEO40, &oceanic_atom2b_layout},
|
||||
{"VEOSMART \0\0 512K", 0, VEO40, &oceanic_atom2b_layout},
|
||||
|
||||
{"2M EPIC r\0\0 512K", 0, &oceanic_atom2c_layout},
|
||||
{"EPIC1 R\0\0 512K", 0, &oceanic_atom2c_layout},
|
||||
{"AERIA300 \0\0 512K", 0, &oceanic_atom2c_layout},
|
||||
{"2M EPIC r\0\0 512K", 0, EPICA, &oceanic_atom2c_layout},
|
||||
{"EPIC1 R\0\0 512K", 0, EPICB, &oceanic_atom2c_layout},
|
||||
{"AERIA300 \0\0 512K", 0, A300, &oceanic_atom2c_layout},
|
||||
|
||||
{"OCE VT3 R\0\0 512K", 0, &oceanic_default_layout},
|
||||
{"ELITET3 R\0\0 512K", 0, &oceanic_default_layout},
|
||||
{"ELITET31 \0\0 512K", 0, &oceanic_default_layout},
|
||||
{"DATAMASK \0\0 512K", 0, &oceanic_default_layout},
|
||||
{"COMPMASK \0\0 512K", 0, &oceanic_default_layout},
|
||||
{"OCE VT3 R\0\0 512K", 0, VT3, &oceanic_default_layout},
|
||||
{"ELITET3 R\0\0 512K", 0, T3A, &oceanic_default_layout},
|
||||
{"ELITET31 \0\0 512K", 0, T3B, &oceanic_default_layout},
|
||||
{"DATAMASK \0\0 512K", 0, DATAMASK, &oceanic_default_layout},
|
||||
{"COMPMASK \0\0 512K", 0, COMPUMASK, &oceanic_default_layout},
|
||||
|
||||
{"WISDOM R\0\0 512K", 0, &sherwood_wisdom_layout},
|
||||
{"WISDOM R\0\0 512K", 0x3342, WISDOM3, &sherwood_wisdom_layout},
|
||||
{"WISDOM R\0\0 512K", 0, WISDOM2, &sherwood_wisdom_layout},
|
||||
|
||||
{"PROPLUS3 \0\0 512K", 0, &oceanic_proplus3_layout},
|
||||
{"PROPLUS4 \0\0 512K", 0, &oceanic_proplus3_layout},
|
||||
{"PROPLUS3 \0\0 512K", 0, PROPLUS3, &oceanic_proplus3_layout},
|
||||
{"PROPLUS4 \0\0 512K", 0, PROPLUS4, &oceanic_proplus3_layout},
|
||||
|
||||
{"TUZENAIR \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"AMPHOSSW \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"AMPHOAIR \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"VOYAGE2G \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"TUSTALIS \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"AMPHOS20 \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"AMPAIR20 \0\0 512K", 0, &tusa_zenair_layout},
|
||||
{"TUZENAIR \0\0 512K", 0, ZENAIR, &tusa_zenair_layout},
|
||||
{"AMPHOSSW \0\0 512K", 0, AMPHOS, &tusa_zenair_layout},
|
||||
{"AMPHOAIR \0\0 512K", 0, AMPHOSAIR, &tusa_zenair_layout},
|
||||
{"VOYAGE2G \0\0 512K", 0, VOYAGER2G, &tusa_zenair_layout},
|
||||
{"TUSTALIS \0\0 512K", 0, TALIS, &tusa_zenair_layout},
|
||||
{"AMPHOS20 \0\0 512K", 0, AMPHOS2, &tusa_zenair_layout},
|
||||
{"AMPAIR20 \0\0 512K", 0, AMPHOSAIR2, &tusa_zenair_layout},
|
||||
|
||||
{"REACPRO2 \0\0 512K", 0, &oceanic_reactpro_layout},
|
||||
{"REACPRO2 \0\0 512K", 0, REACTPROWHITE, &oceanic_reactpro_layout},
|
||||
|
||||
{"FREEWAER \0\0 512K", 0, &aeris_f10_layout},
|
||||
{"OCEANF10 \0\0 512K", 0, &aeris_f10_layout},
|
||||
{"MUNDIAL R\0\0 512K", 0, &aeris_f10_layout},
|
||||
{"FREEWAER \0\0 512K", 0, F10A, &aeris_f10_layout},
|
||||
{"OCEANF10 \0\0 512K", 0, F10B, &aeris_f10_layout},
|
||||
{"MUNDIAL R\0\0 512K", 0x3300, MUNDIAL3, &aeris_f10_layout},
|
||||
{"MUNDIAL R\0\0 512K", 0, MUNDIAL2, &aeris_f10_layout},
|
||||
|
||||
{"AERISF11 \0\0 1024", 0, &aeris_f11_layout},
|
||||
{"OCEANF11 \0\0 1024", 0, &aeris_f11_layout},
|
||||
{"AERISF11 \0\0 1024", 0, F11A, &aeris_f11_layout},
|
||||
{"OCEANF11 \0\0 1024", 0, F11B, &aeris_f11_layout},
|
||||
|
||||
{"OCWATCH R\0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"OC1WATCH \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"OCSWATCH \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"AQUAI550 \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"AQUA550C \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"WISDOM04 \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"AQUA470C \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"AQUA200C \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"GEOAIR \0\0 1024", 0, &oceanic_oc1_layout},
|
||||
{"OCWATCH R\0\0 1024", 0, OC1A, &oceanic_oc1_layout},
|
||||
{"OC1WATCH \0\0 1024", 0, OC1B, &oceanic_oc1_layout},
|
||||
{"OCSWATCH \0\0 1024", 0, OCS, &oceanic_oc1_layout},
|
||||
{"AQUAI550 \0\0 1024", 0, I550, &oceanic_oc1_layout},
|
||||
{"AQUA550C \0\0 1024", 0, I550C, &oceanic_oc1_layout},
|
||||
{"WISDOM04 \0\0 1024", 0, WISDOM4, &oceanic_oc1_layout},
|
||||
{"AQUA470C \0\0 1024", 0, I470TC, &oceanic_oc1_layout},
|
||||
{"AQUA200C \0\0 1024", 0, I200CV2, &oceanic_oc1_layout},
|
||||
{"GEOAIR \0\0 1024", 0, GEOAIR, &oceanic_oc1_layout},
|
||||
|
||||
{"OCEANOCI \0\0 1024", 0, &oceanic_oci_layout},
|
||||
{"OCEANOCI \0\0 1024", 0, OCI, &oceanic_oci_layout},
|
||||
|
||||
{"OCEATOM3 \0\0 1024", 0, &oceanic_atom3_layout},
|
||||
{"ATOM31 \0\0 1024", 0, &oceanic_atom3_layout},
|
||||
{"OCEATOM3 \0\0 1024", 0, ATOM3, &oceanic_atom3_layout},
|
||||
{"ATOM31 \0\0 1024", 0, ATOM31, &oceanic_atom3_layout},
|
||||
|
||||
{"OCEANVT4 \0\0 1024", 0, &oceanic_vt4_layout},
|
||||
{"OCEAVT41 \0\0 1024", 0, &oceanic_vt4_layout},
|
||||
{"AERISAIR \0\0 1024", 0, &oceanic_vt4_layout},
|
||||
{"SWVISION \0\0 1024", 0, &oceanic_vt4_layout},
|
||||
{"XPSUBAIR \0\0 1024", 0, &oceanic_vt4_layout},
|
||||
{"OCEANVT4 \0\0 1024", 0, VT4, &oceanic_vt4_layout},
|
||||
{"OCEAVT41 \0\0 1024", 0, VT41, &oceanic_vt4_layout},
|
||||
{"AERISAIR \0\0 1024", 0, A300AI, &oceanic_vt4_layout},
|
||||
{"SWVISION \0\0 1024", 0, VISION, &oceanic_vt4_layout},
|
||||
{"XPSUBAIR \0\0 1024", 0, XPAIR, &oceanic_vt4_layout},
|
||||
|
||||
{"HOLLDG04 \0\0 2048", 0, &hollis_tx1_layout},
|
||||
{"HOLLDG04 \0\0 2048", 0, TX1, &hollis_tx1_layout},
|
||||
|
||||
{"AER300CS \0\0 2048", 0, &aeris_a300cs_layout},
|
||||
{"OCEANVTX \0\0 2048", 0, &aeris_a300cs_layout},
|
||||
{"AQUAI750 \0\0 2048", 0, &aeris_a300cs_layout},
|
||||
{"SWDRAGON \0\0 2048", 0, &aeris_a300cs_layout},
|
||||
{"SWBEACON \0\0 2048", 0, &aeris_a300cs_layout},
|
||||
{"AER300CS \0\0 2048", 0, A300CS, &aeris_a300cs_layout},
|
||||
{"OCEANVTX \0\0 2048", 0, VTX, &aeris_a300cs_layout},
|
||||
{"AQUAI750 \0\0 2048", 0, I750TC, &aeris_a300cs_layout},
|
||||
{"SWDRAGON \0\0 2048", 0, SAGE, &aeris_a300cs_layout},
|
||||
{"SWBEACON \0\0 2048", 0, BEACON, &aeris_a300cs_layout},
|
||||
|
||||
{"AQUAI450 \0\0 2048", 0, &aqualung_i450t_layout},
|
||||
{"AQUAI450 \0\0 2048", 0, I450T, &aqualung_i450t_layout},
|
||||
|
||||
{"OCEANOCX \0\0 \0\0\0\0", 0, &oceanic_proplusx_layout},
|
||||
{"OCEANOCX \0\0 \0\0\0\0", 0, PROPLUSX, &oceanic_proplusx_layout},
|
||||
|
||||
{"AQUA770R \0\0 \0\0\0\0", 0, &aqualung_i770r_layout},
|
||||
{"AQUA770R \0\0 \0\0\0\0", 0, I770R, &aqualung_i770r_layout},
|
||||
};
|
||||
|
||||
/*
|
||||
@ -925,8 +927,8 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, dc_iostream
|
||||
}
|
||||
|
||||
// Detect the memory layout.
|
||||
device->base.layout = OCEANIC_COMMON_MATCH(device->base.version, versions, &device->base.firmware);
|
||||
if (device->base.layout == NULL) {
|
||||
const oceanic_common_version_t *version = OCEANIC_COMMON_MATCH(device->base.version, versions, &device->base.firmware);
|
||||
if (version == NULL) {
|
||||
WARNING (context, "Unsupported device detected!");
|
||||
if (memcmp(device->base.version + 12, "256K", 4) == 0) {
|
||||
device->base.layout = &oceanic_atom1_layout;
|
||||
@ -939,6 +941,10 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, dc_iostream
|
||||
} else {
|
||||
device->base.layout = &oceanic_default_layout;
|
||||
}
|
||||
device->base.model = 0;
|
||||
} else {
|
||||
device->base.layout = version->layout;
|
||||
device->base.model = version->model;
|
||||
}
|
||||
|
||||
// Set the big page support.
|
||||
|
||||
@ -132,7 +132,7 @@ oceanic_common_match_pattern (const unsigned char *string, const unsigned char *
|
||||
return 1;
|
||||
}
|
||||
|
||||
const oceanic_common_layout_t *
|
||||
const oceanic_common_version_t *
|
||||
oceanic_common_match (const unsigned char *version, const oceanic_common_version_t patterns[], size_t n, unsigned int *firmware)
|
||||
{
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
@ -143,7 +143,7 @@ oceanic_common_match (const unsigned char *version, const oceanic_common_version
|
||||
if (firmware) {
|
||||
*firmware = fw;
|
||||
}
|
||||
return patterns[i].layout;
|
||||
return patterns + i;
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,6 +160,7 @@ oceanic_common_device_init (oceanic_common_device_t *device)
|
||||
device->firmware = 0;
|
||||
memset (device->version, 0, sizeof (device->version));
|
||||
memset (device->fingerprint, 0, sizeof (device->fingerprint));
|
||||
device->model = 0;
|
||||
device->layout = NULL;
|
||||
device->multipage = 1;
|
||||
}
|
||||
|
||||
@ -161,6 +161,7 @@ typedef struct oceanic_common_device_t {
|
||||
unsigned int firmware;
|
||||
unsigned char version[PAGESIZE];
|
||||
unsigned char fingerprint[FPMAXSIZE];
|
||||
unsigned int model;
|
||||
const oceanic_common_layout_t *layout;
|
||||
unsigned int multipage;
|
||||
} oceanic_common_device_t;
|
||||
@ -174,10 +175,11 @@ typedef struct oceanic_common_device_vtable_t {
|
||||
typedef struct oceanic_common_version_t {
|
||||
unsigned char pattern[PAGESIZE + 1];
|
||||
unsigned int firmware;
|
||||
unsigned int model;
|
||||
const oceanic_common_layout_t *layout;
|
||||
} oceanic_common_version_t;
|
||||
|
||||
const oceanic_common_layout_t *
|
||||
const oceanic_common_version_t *
|
||||
oceanic_common_match (const unsigned char *version, const oceanic_common_version_t patterns[], size_t n, unsigned int *firmware);
|
||||
|
||||
void
|
||||
|
||||
@ -78,14 +78,14 @@ static const oceanic_common_layout_t oceanic_veo250_layout = {
|
||||
};
|
||||
|
||||
static const oceanic_common_version_t versions[] = {
|
||||
{"GENREACT \0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"VEO 200 R\0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"VEO 250 R\0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"SEEMANN R\0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"VEO 180 R\0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"AERISXR2 \0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"INSIGHT R\0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"HO DGO2 R\0\0 256K", 0, &oceanic_veo250_layout},
|
||||
{"GENREACT \0\0 256K", 0, REACTPRO, &oceanic_veo250_layout},
|
||||
{"VEO 200 R\0\0 256K", 0, VEO200, &oceanic_veo250_layout},
|
||||
{"VEO 250 R\0\0 256K", 0, VEO250, &oceanic_veo250_layout},
|
||||
{"SEEMANN R\0\0 256K", 0, XP5, &oceanic_veo250_layout},
|
||||
{"VEO 180 R\0\0 256K", 0, VEO180, &oceanic_veo250_layout},
|
||||
{"AERISXR2 \0\0 256K", 0, XR2, &oceanic_veo250_layout},
|
||||
{"INSIGHT R\0\0 256K", 0, INSIGHT, &oceanic_veo250_layout},
|
||||
{"HO DGO2 R\0\0 256K", 0, DG02, &oceanic_veo250_layout},
|
||||
};
|
||||
|
||||
static dc_status_t
|
||||
@ -316,10 +316,14 @@ oceanic_veo250_device_open (dc_device_t **out, dc_context_t *context, dc_iostrea
|
||||
}
|
||||
|
||||
// Detect the memory layout.
|
||||
device->base.layout = OCEANIC_COMMON_MATCH(device->base.version, versions, &device->base.firmware);
|
||||
if (device->base.layout == NULL) {
|
||||
const oceanic_common_version_t *version = OCEANIC_COMMON_MATCH(device->base.version, versions, &device->base.firmware);
|
||||
if (version == NULL) {
|
||||
WARNING (context, "Unsupported device detected!");
|
||||
device->base.layout = &oceanic_veo250_layout;
|
||||
device->base.model = 0;
|
||||
} else {
|
||||
device->base.layout = version->layout;
|
||||
device->base.model = version->model;
|
||||
}
|
||||
|
||||
*out = (dc_device_t*) device;
|
||||
|
||||
@ -118,14 +118,14 @@ static const oceanic_common_layout_t aeris_500ai_layout = {
|
||||
};
|
||||
|
||||
static const oceanic_common_version_t versions[] = {
|
||||
{"VERSAPRO \0\0 256K", 0, &oceanic_vtpro_layout},
|
||||
{"ATMOSTWO \0\0 256K", 0, &oceanic_vtpro_layout},
|
||||
{"PROPLUS2 \0\0 256K", 0, &oceanic_vtpro_layout},
|
||||
{"ATMOSAIR \0\0 256K", 0, &oceanic_vtpro_layout},
|
||||
{"VTPRO r\0\0 256K", 0, &oceanic_vtpro_layout},
|
||||
{"ELITE r\0\0 256K", 0, &oceanic_vtpro_layout},
|
||||
{"VERSAPRO \0\0 256K", 0, VERSAPRO, &oceanic_vtpro_layout},
|
||||
{"ATMOSTWO \0\0 256K", 0, ATMOS2, &oceanic_vtpro_layout},
|
||||
{"PROPLUS2 \0\0 256K", 0, PROPLUS2, &oceanic_vtpro_layout},
|
||||
{"ATMOSAIR \0\0 256K", 0, ATMOSAI, &oceanic_vtpro_layout},
|
||||
{"VTPRO r\0\0 256K", 0, VTPRO, &oceanic_vtpro_layout},
|
||||
{"ELITE r\0\0 256K", 0, ELITE, &oceanic_vtpro_layout},
|
||||
|
||||
{"WISDOM r\0\0 256K", 0, &oceanic_wisdom_layout},
|
||||
{"WISDOM r\0\0 256K", 0, WISDOM, &oceanic_wisdom_layout},
|
||||
};
|
||||
|
||||
static dc_status_t
|
||||
@ -490,11 +490,16 @@ oceanic_vtpro_device_open (dc_device_t **out, dc_context_t *context, dc_iostream
|
||||
// Detect the memory layout.
|
||||
if (model == AERIS500AI) {
|
||||
device->base.layout = &aeris_500ai_layout;
|
||||
device->base.model = AERIS500AI;
|
||||
} else {
|
||||
device->base.layout = OCEANIC_COMMON_MATCH(device->base.version, versions, &device->base.firmware);
|
||||
if (device->base.layout == NULL) {
|
||||
const oceanic_common_version_t * version = OCEANIC_COMMON_MATCH(device->base.version, versions, &device->base.firmware);
|
||||
if (version == NULL) {
|
||||
WARNING (context, "Unsupported device detected!");
|
||||
device->base.layout = &oceanic_vtpro_layout;
|
||||
device->base.model = 0;
|
||||
} else {
|
||||
device->base.layout = version->layout;
|
||||
device->base.model = version->model;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user