Schnittstelle zu Strukturen und anonymen Gewerkschaften mit c2hs

100

Wie würde man diesen Teil des C-Codes in eine .chs-Datei codieren, damit c2hs ihn in etwas relativ Nettes verwandeln kann?

typedef enum {
    MONOME_BUTTON_UP        = 0x00,
    MONOME_BUTTON_DOWN      = 0x01,
    MONOME_ENCODER_DELTA    = 0x02,
    MONOME_ENCODER_KEY_UP   = 0x03,
    MONOME_ENCODER_KEY_DOWN = 0x04,
    MONOME_TILT             = 0x05,

    /* update this if you add event types */
    MONOME_EVENT_MAX        = 0x06
} monome_event_type_t;

typedef struct monome monome_t; /* opaque data type */
typedef struct monome_event monome_event_t;

typedef void (*monome_event_callback_t)
    (const monome_event_t *event, void *data);

struct monome_event {
    monome_t *monome;
    monome_event_type_t event_type;

    /* __extension__ for anonymous unions in gcc */
    __extension__ union {
        struct {
            unsigned int x;
            unsigned int y;
        } grid;

        struct {
            unsigned int number;
            int delta;
        } encoder;

        struct {
            unsigned int sensor;
            int x;
            int y;
            int z;
        } tilt;
    };
};
amn
quelle
12
Es ist produktiver für Sie, zuerst zu versuchen, das Problem zu lösen, und dann spezifische Fragen zur Sprache und / oder zu den Tools zu stellen. Noch besser sind Fragen, die Verwirrung stiften und unnötige Komplexität einer bestimmten Anwendung vermeiden. Sie könnten beispielsweise nach einer einfachen Struktur und / oder nach einer einfachen Vereinigung fragen und dieses Wissen dann auf Ihr Problem anwenden.
Thomas M. DuBuisson
2
@ ThomasM.DuBuisson Ich denke, Sie machen einen vernünftigen Punkt. Ich werde das etwas weiter durcharbeiten.
@unsymbol hast du eine Antwort auf deine Frage? Bitte erwägen Sie, es hier hinzuzufügen :)
Alfakini
1
Hallo unsymbol, gibt es Neuigkeiten dazu? Hast du es zum Laufen gebracht und wie?
Casper Thule Hansen

Antworten:

1

Wie wäre es damit: Ändern Sie den Code so, dass Sie die Mitglieder benennen. Das Layout im Speicher ist das gleiche, so dass es binär kompatibel ist. Sie müssten diesen Patch für jede Version der Bibliothek ausführen.

struct monome_event {
    monome_t *monome;
    monome_event_type_t event_type;

    /* __extension__ for anonymous unions in gcc */
    __extension__ union {
        struct me_grid {
            unsigned int x;
            unsigned int y;
        } grid;

        struct me_encoder {
            unsigned int number;
            int delta;
        } encoder;

        struct me_tilt {
            unsigned int sensor;
            int x;
            int y;
            int z;
        } tilt;
    };
};
h4ck3rm1k3
quelle