2011-11-24 20:46:24 +04:00
# ifndef __HID_ROCCAT_ISKU_H
# define __HID_ROCCAT_ISKU_H
/*
* Copyright ( c ) 2011 Stefan Achatz < erazor_de @ users . sourceforge . net >
*/
/*
* 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 .
*/
# include <linux/types.h>
2012-11-11 09:21:02 +04:00
enum {
ISKU_SIZE_CONTROL = 0x03 ,
ISKU_SIZE_INFO = 0x06 ,
ISKU_SIZE_KEY_MASK = 0x06 ,
ISKU_SIZE_KEYS_FUNCTION = 0x29 ,
ISKU_SIZE_KEYS_EASYZONE = 0x41 ,
ISKU_SIZE_KEYS_MEDIA = 0x1d ,
ISKU_SIZE_KEYS_THUMBSTER = 0x17 ,
ISKU_SIZE_KEYS_MACRO = 0x23 ,
ISKU_SIZE_KEYS_CAPSLOCK = 0x06 ,
ISKU_SIZE_LAST_SET = 0x14 ,
ISKU_SIZE_LIGHT = 0x0a ,
ISKU_SIZE_MACRO = 0x823 ,
2012-11-11 09:21:06 +04:00
ISKU_SIZE_RESET = 0x03 ,
2012-11-11 09:21:02 +04:00
ISKU_SIZE_TALK = 0x10 ,
} ;
2011-11-24 20:46:24 +04:00
enum {
ISKU_PROFILE_NUM = 5 ,
ISKU_USB_INTERFACE_PROTOCOL = 0 ,
} ;
struct isku_actual_profile {
uint8_t command ; /* ISKU_COMMAND_ACTUAL_PROFILE */
uint8_t size ; /* always 3 */
uint8_t actual_profile ;
} __packed ;
enum isku_commands {
ISKU_COMMAND_CONTROL = 0x4 ,
ISKU_COMMAND_ACTUAL_PROFILE = 0x5 ,
ISKU_COMMAND_KEY_MASK = 0x7 ,
ISKU_COMMAND_KEYS_FUNCTION = 0x8 ,
ISKU_COMMAND_KEYS_EASYZONE = 0x9 ,
ISKU_COMMAND_KEYS_MEDIA = 0xa ,
ISKU_COMMAND_KEYS_THUMBSTER = 0xb ,
ISKU_COMMAND_KEYS_MACRO = 0xd ,
ISKU_COMMAND_MACRO = 0xe ,
ISKU_COMMAND_INFO = 0xf ,
ISKU_COMMAND_LIGHT = 0x10 ,
2012-11-11 09:21:06 +04:00
ISKU_COMMAND_RESET = 0x11 ,
2011-11-24 20:46:24 +04:00
ISKU_COMMAND_KEYS_CAPSLOCK = 0x13 ,
ISKU_COMMAND_LAST_SET = 0x14 ,
ISKU_COMMAND_15 = 0x15 ,
ISKU_COMMAND_TALK = 0x16 ,
ISKU_COMMAND_FIRMWARE_WRITE = 0x1b ,
ISKU_COMMAND_FIRMWARE_WRITE_CONTROL = 0x1c ,
} ;
struct isku_report_button {
uint8_t number ; /* ISKU_REPORT_NUMBER_BUTTON */
uint8_t zero ;
uint8_t event ;
uint8_t data1 ;
uint8_t data2 ;
} ;
enum isku_report_numbers {
ISKU_REPORT_NUMBER_BUTTON = 3 ,
} ;
enum isku_report_button_events {
ISKU_REPORT_BUTTON_EVENT_PROFILE = 0x2 ,
} ;
struct isku_roccat_report {
uint8_t event ;
uint8_t data1 ;
uint8_t data2 ;
uint8_t profile ;
} __packed ;
struct isku_device {
int roccat_claimed ;
int chrdev_minor ;
struct mutex isku_lock ;
int actual_profile ;
} ;
# endif