Skip to content

Commit 432be83

Browse files
committed
uclogic: Allow three frame parameter sets
Allow three frame parameter sets (up from two) per each UC-Logic tablet interface. Bump the number of supported subreports to three as well to accomodate ID routing. This allows supporting the dial on Huion Q620M.
1 parent e163ea2 commit 432be83

1 file changed

Lines changed: 25 additions & 4 deletions

File tree

hid-uclogic-params.h

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ struct uclogic_params_pen {
7474
/* Report ID, if reports should be tweaked, zero if not */
7575
unsigned int id;
7676
/* The list of subreports */
77-
struct uclogic_params_pen_subreport subreport_list[2];
77+
struct uclogic_params_pen_subreport subreport_list[3];
7878
/* Type of in-range reporting, only valid if "id" is not zero */
7979
enum uclogic_params_pen_inrange inrange;
8080
/*
@@ -194,7 +194,7 @@ struct uclogic_params {
194194
* The list of frame control parameters and optional report descriptor
195195
* parts. Only valid, if "invalid" is false.
196196
*/
197-
struct uclogic_params_frame frame_list[2];
197+
struct uclogic_params_frame frame_list[3];
198198
};
199199

200200
/* Initialize a tablet interface and discover its parameters */
@@ -211,6 +211,7 @@ extern int uclogic_params_init(struct uclogic_params *params,
211211
".pen.id = %u\n" \
212212
".pen.subreport_list[0] = {0x%02hhx, %hhu}\n" \
213213
".pen.subreport_list[1] = {0x%02hhx, %hhu}\n" \
214+
".pen.subreport_list[2] = {0x%02hhx, %hhu}\n" \
214215
".pen.inrange = %s\n" \
215216
".pen.fragmented_hires = %s\n" \
216217
".pen.tilt_y_flipped = %s\n" \
@@ -231,7 +232,16 @@ extern int uclogic_params_init(struct uclogic_params *params,
231232
".frame_list[1].dev_id_byte = %u\n" \
232233
".frame_list[1].touch_ring_byte = %u\n" \
233234
".frame_list[1].touch_ring_max = %hhd\n" \
234-
".frame_list[1].touch_ring_flip_at = %hhd\n"
235+
".frame_list[1].touch_ring_flip_at = %hhd\n" \
236+
".frame_list[2].desc_ptr = %p\n" \
237+
".frame_list[2].desc_size = %u\n" \
238+
".frame_list[2].id = %u\n" \
239+
".frame_list[2].suffix = %s\n" \
240+
".frame_list[2].re_lsb = %u\n" \
241+
".frame_list[2].dev_id_byte = %u\n" \
242+
".frame_list[2].touch_ring_byte = %u\n" \
243+
".frame_list[2].touch_ring_max = %hhd\n" \
244+
".frame_list[2].touch_ring_flip_at = %hhd\n"
235245

236246
/* Tablet interface parameters *printf format arguments */
237247
#define UCLOGIC_PARAMS_FMT_ARGS(_params) \
@@ -245,6 +255,8 @@ extern int uclogic_params_init(struct uclogic_params *params,
245255
(_params)->pen.subreport_list[0].id, \
246256
(_params)->pen.subreport_list[1].value, \
247257
(_params)->pen.subreport_list[1].id, \
258+
(_params)->pen.subreport_list[2].value, \
259+
(_params)->pen.subreport_list[2].id, \
248260
uclogic_params_pen_inrange_to_str((_params)->pen.inrange), \
249261
((_params)->pen.fragmented_hires ? "true" : "false"), \
250262
((_params)->pen.tilt_y_flipped ? "true" : "false"), \
@@ -265,7 +277,16 @@ extern int uclogic_params_init(struct uclogic_params *params,
265277
(_params)->frame_list[1].dev_id_byte, \
266278
(_params)->frame_list[1].touch_ring_byte, \
267279
(_params)->frame_list[1].touch_ring_max, \
268-
(_params)->frame_list[1].touch_ring_flip_at
280+
(_params)->frame_list[1].touch_ring_flip_at, \
281+
(_params)->frame_list[2].desc_ptr, \
282+
(_params)->frame_list[2].desc_size, \
283+
(_params)->frame_list[2].id, \
284+
(_params)->frame_list[2].suffix, \
285+
(_params)->frame_list[2].re_lsb, \
286+
(_params)->frame_list[2].dev_id_byte, \
287+
(_params)->frame_list[2].touch_ring_byte, \
288+
(_params)->frame_list[2].touch_ring_max, \
289+
(_params)->frame_list[2].touch_ring_flip_at
269290

270291
/* Get a replacement report descriptor for a tablet's interface. */
271292
extern int uclogic_params_get_desc(const struct uclogic_params *params,

0 commit comments

Comments
 (0)