Generalización del mapeo de un sistema multivariable / capa.

Escribi una aplicacion conC ++ / QT que se comunica con un dispositivo para leer / escribir sus variables, las coloca / obtiene en una estructura y las presenta en una interfaz gráfica de usuario con fines de visualización / edición.

1) El dispositivo viene con un código c de muestra que también define el protocolo de comunicación (de una manera muy mala) como:

#define VALUE_1 0x12345678
#define VALUE_2 0xDEADBEEF
#define MY_DEVICE_VAR (VALUE_1 << 4) & (VALUE_2 >> 6)
#define MY_DEVICE_VAR_1 (MY_DEVICE_VAR & (VALUE_1 << 2)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
// .. and 300 more lines like above

Entonces la variableVAR_1 se representa con:MY_DEVICE_VAR_1.

2) Tengo una estructura que contiene todas las variables del dispositivo:

struct MyDeviceData
{
    int var1;
    double var2;
    char var3;
    bool var4;
        .
        .
};

Es básicamente un almacenamiento para / una proyección de los datos leídos desde el dispositivo. Hay 4 tipos diferentes de variables POD.

3) Finalmente mi gui tiene elementos de gui para mostrar y editar la instancia de MyDeviceData

class MyGuI
{
    QLineEdit var1;
    QLineEdit var2;
    QComboBox var3;
    QCheckBox var4;
       .
       .
};

Ahora mis preguntas son:

1) Estoy haciendo el mapeo deMY_DEVICE_VAR1 ->MyDeviceData::var1 ->MyGUI::var1 conif yswitch/case Declaraciones con las que no estoy orgulloso. ¿Cuál sería una mejor manera "programática" de hacer el mapeo?

2) Cuando se cambia el valor de un elemento gui, quiero enviarsolamente Valor actualizado a la tarjeta. Además de anular las funciones de controlador de eventos como "textChanged, selectedIndexChanged"etc. ¿Hay métodos" más inteligentes "? (QSignalMapper?)

3) En este tipo de proyecto, ¿es posible generalizar el trabajo de trabajo completo? (¿Una herramienta de generación de código? ¿Plantillas?)

Respuestas a la pregunta(1)

Su respuesta a la pregunta