使用 c2hs 与 struct 和匿名联合进行接口

如何将这段 C 代码编码到。Chs 文件,以便 c2hs 可以将其转换为相对较好的东西?

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;
};
};
1491 次浏览

How about this: change the code so that you name the members. The layout in memory is the same so that it will be binary compatible. You would have to do this patch for each version of the lib.

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