Commands and information

gii_cmd_event is the basic structure for evCommand and evInformation events. It may need to be casted to some other structure (depending on code) to access the data.

#define GII_CMD_DATA_MAX  (248-sizeof(gii_cmd_nodata_event))

/*      These are used internally either to the application or the
 *      kernel. The same event is used for both Command and Information
 *      events. The recipient must not store references to the data. If
 *      the data information is needed afterwards, copy it!
 */
typedef struct gii_cmd_event {

        COMMON_DATA;

        uint32  code;                   /* command/request code */
        uint8   data[GII_CMD_DATA_MAX]; /* command related data */

} gii_cmd_event;

Device information

One use of evCommand is to convey some capabilities of a GII device:

/* This event is sent/received to require/get the capabilities of a device
 * as specified in target/origin.
 * An event stating num_buttons=num_axes=0 says, that the device is inactive,
 * unplugged, whatever. Devices automatically report (detectable) state
 * changes via devinfo. But you need to re-query the valinfo records.
 */
#define GII_CMDCODE_GETDEVINFO  (0x01)
typedef struct gii_cmddata_getdevinfo {

        char            longname[75];
        char            shortname[5];

        gii_event_mask  can_generate;

        int             num_buttons;    /* Maximum number of buttons. */
        int             num_axes;       /* Maximum number of axes. */

} gii_cmddata_getdevinfo;

This event is guaranteed to be generated immediately after opening an input source.

can_generate is a mask of all events that the device can generate. num_buttons and num_axes are the number of buttons and axes that the device can report on.