/* SPDX-License-Identifier: GPL-2.0+ */ /* * HID driver for UC-Logic devices not fully compliant with HID standard * - tablet initialization and parameter retrieval * * Copyright (c) 2018 Nikolai Kondrashov */ /* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. */ #ifndef _HID_UCLOGIC_PARAMS_H #define _HID_UCLOGIC_PARAMS_H #include <linux/usb.h> #include <linux/hid.h> #include <linux/list.h> #define UCLOGIC_MOUSE_FRAME_QUIRK … #define UCLOGIC_BATTERY_QUIRK … /* Types of pen in-range reporting */ enum uclogic_params_pen_inrange { … }; /* Types of frames */ enum uclogic_params_frame_type { … }; /* * Pen report's subreport data. */ struct uclogic_params_pen_subreport { … }; /* * Tablet interface's pen input parameters. * * Must use declarative (descriptive) language, not imperative, to simplify * understanding and maintain consistency. * * Noop (preserving functionality) when filled with zeroes. */ struct uclogic_params_pen { … }; /* * Parameters of frame control inputs of a tablet interface. * * Must use declarative (descriptive) language, not imperative, to simplify * understanding and maintain consistency. * * Noop (preserving functionality) when filled with zeroes. */ struct uclogic_params_frame { … }; /* * List of works to be performed when a certain raw event is received. */ struct uclogic_raw_event_hook { … }; /* * Tablet interface report parameters. * * Must use declarative (descriptive) language, not imperative, to simplify * understanding and maintain consistency. * * When filled with zeros represents a "noop" configuration - passes all * reports unchanged and lets the generic HID driver handle everything. * * The resulting device report descriptor is assembled from all the report * descriptor parts referenced by the structure. No order of assembly should * be assumed. The structure represents original device report descriptor if * all the parts are NULL. */ struct uclogic_params { … }; /* Driver data */ struct uclogic_drvdata { … }; /* Initialize a tablet interface and discover its parameters */ extern int uclogic_params_init(struct uclogic_params *params, struct hid_device *hdev); /* Get a replacement report descriptor for a tablet's interface. */ extern int uclogic_params_get_desc(const struct uclogic_params *params, __u8 **pdesc, unsigned int *psize); /* Free resources used by tablet interface's parameters */ extern void uclogic_params_cleanup(struct uclogic_params *params); /* Dump tablet interface parameters with hid_dbg() */ extern void uclogic_params_hid_dbg(const struct hid_device *hdev, const struct uclogic_params *params); #endif /* _HID_UCLOGIC_PARAMS_H */