/* Types of pen in-range reporting */ enum uclogic_params_pen_inrange { /* Normal reports: zero - out of proximity, one - in proximity */
UCLOGIC_PARAMS_PEN_INRANGE_NORMAL = 0, /* Inverted reports: zero - in proximity, one - out of proximity */
UCLOGIC_PARAMS_PEN_INRANGE_INVERTED, /* No reports */
UCLOGIC_PARAMS_PEN_INRANGE_NONE,
};
/* Types of frames */ enum uclogic_params_frame_type { /* Frame with buttons */
UCLOGIC_PARAMS_FRAME_BUTTONS = 0, /* Frame with buttons and a dial */
UCLOGIC_PARAMS_FRAME_DIAL, /* Frame with buttons and a mouse (shaped as a dial + touchpad) */
UCLOGIC_PARAMS_FRAME_MOUSE,
};
/* *Tabletinterface'speninputparameters. * *Mustusedeclarative(descriptive)language,notimperative,tosimplify *understandingandmaintainconsistency. * *Noop(preservingfunctionality)whenfilledwithzeroes.
*/ struct uclogic_params_pen { /* *Trueifpenusageisinvalidforthisinterfaceandshouldbe *ignored,falseotherwise.
*/ bool usage_invalid; /* *Pointertoreportdescriptorpartdescribingthepeninputs. *Allocatedwithkmalloc.NULLifthepartisnotspecified.
*/ const __u8 *desc_ptr; /* *Sizeofthereportdescriptor. *Onlyvalid,if"desc_ptr"isnotNULL.
*/ unsignedint desc_size; /* Report ID, if reports should be tweaked, zero if not */ unsignedint id; /* The list of subreports, only valid if "id" is not zero */ struct uclogic_params_pen_subreport subreport_list[3]; /* Type of in-range reporting, only valid if "id" is not zero */ enum uclogic_params_pen_inrange inrange; /* *True,ifreportsincludefragmentedhighresolutioncoords,with *high-orderXandthenYbytesfollowingthepressurefield. *Onlyvalidif"id"isnotzero.
*/ bool fragmented_hires; /* *Trueifthepenreportstiltinbytesatoffset10(X)and11(Y), *andtheYtiltdirectionisflipped. *Onlyvalidif"id"isnotzero.
*/ bool tilt_y_flipped;
};
/* Driver data */ struct uclogic_drvdata { /* Interface parameters */ struct uclogic_params params; /* Pointer to the replacement report descriptor. NULL if none. */ const __u8 *desc_ptr; /* *Sizeofthereplacementreportdescriptor. *Onlyvalidifdesc_ptrisnotNULL
*/ unsignedint desc_size; /* Pen input device */ struct input_dev *pen_input; /* In-range timer */ struct timer_list inrange_timer; /* Last rotary encoder state, or U8_MAX for none */
u8 re_state; /* Device quirks */ unsignedlong quirks;
};
/* Initialize a tablet interface and discover its parameters */ externint uclogic_params_init(struct uclogic_params *params, struct hid_device *hdev);
/* Get a replacement report descriptor for a tablet's interface. */ externint uclogic_params_get_desc(conststruct uclogic_params *params, const __u8 **pdesc, unsignedint *psize);
/* Free resources used by tablet interface's parameters */ externvoid uclogic_params_cleanup(struct uclogic_params *params);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.