145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson#ifndef __UHID_H_ 245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson#define __UHID_H_ 345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson/* 545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * User-space I/O driver support for HID subsystem 645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * Copyright (c) 2012 David Herrmann 745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson */ 845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson/* 1045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * This program is free software; you can redistribute it and/or modify it 1145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * under the terms of the GNU General Public License as published by the Free 1245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * Software Foundation; either version 2 of the License, or (at your option) 1345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * any later version. 1445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson */ 1545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 1645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson/* 1745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * Public header for user-space communication. We try to keep every structure 1845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * aligned but to be safe we also use __attribute__((__packed__)). Therefore, 1945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson * the communication should be ABI compatible even between architectures. 2045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson */ 2145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 2245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson#include <linux/input.h> 2345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson#include <linux/types.h> 2445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 2545b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonenum uhid_event_type { 2645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_CREATE, 2745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_DESTROY, 2845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_START, 2945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_STOP, 3045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_OPEN, 3145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_CLOSE, 3245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_OUTPUT, 3345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_OUTPUT_EV, 3445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_INPUT, 3545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_FEATURE, 3645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_FEATURE_ANSWER, 3745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson}; 3845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 3945b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_create_req { 4045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 name[128]; 4145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 phys[64]; 4245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 uniq[64]; 4345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 __user *rd_data; 4445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 rd_size; 4545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 4645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 bus; 4745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 vendor; 4845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 product; 4945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 version; 5045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 country; 5145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson} __attribute__((__packed__)); 5245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 5345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson#define UHID_DATA_MAX 4096 5445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 5545b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonenum uhid_report_type { 5645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_FEATURE_REPORT, 5745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_OUTPUT_REPORT, 5845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson UHID_INPUT_REPORT, 5945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson}; 6045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 6145b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_input_req { 6245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 data[UHID_DATA_MAX]; 6345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 size; 6445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson} __attribute__((__packed__)); 6545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 6645b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_output_req { 6745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 data[UHID_DATA_MAX]; 6845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 size; 6945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 rtype; 7045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson} __attribute__((__packed__)); 7145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 7245b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_output_ev_req { 7345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 type; 7445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 code; 7545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __s32 value; 7645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson} __attribute__((__packed__)); 7745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 7845b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_feature_req { 7945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 id; 8045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 rnum; 8145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 rtype; 8245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson} __attribute__((__packed__)); 8345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 8445b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_feature_answer_req { 8545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 id; 8645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 err; 8745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u16 size; 8845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u8 data[UHID_DATA_MAX]; 8945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson}; 9045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 9145b515c106161bb3b00d2c097504b9d44505f2d9Scott Andersonstruct uhid_event { 9245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson __u32 type; 9345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 9445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson union { 9545b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson struct uhid_create_req create; 9645b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson struct uhid_input_req input; 9745b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson struct uhid_output_req output; 9845b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson struct uhid_output_ev_req output_ev; 9945b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson struct uhid_feature_req feature; 10045b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson struct uhid_feature_answer_req feature_answer; 10145b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson } u; 10245b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson} __attribute__((__packed__)); 10345b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson 10445b515c106161bb3b00d2c097504b9d44505f2d9Scott Anderson#endif /* __UHID_H_ */ 105