Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 196325
b: refs/heads/master
c: 73b3577
h: refs/heads/master
i:
  196323: d4943a9
v: v3
  • Loading branch information
Stefan Achatz authored and Jiri Kosina committed May 19, 2010
1 parent bb1fedb commit 5c0569f
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 00237bc5204c43f67b2e68546012d7bd27efc1b6
refs/heads/master: 73b3577d5dc80bf5f079ddd5c0449459a1997765
11 changes: 6 additions & 5 deletions trunk/drivers/hid/hid-roccat-kone.c
Original file line number Diff line number Diff line change
Expand Up @@ -928,14 +928,15 @@ static int kone_raw_event(struct hid_device *hdev, struct hid_report *report,
return 0;

/*
* Firmware 1.38 introduced new behaviour for tilt buttons.
* Pressed tilt button is reported in each movement event.
* Firmware 1.38 introduced new behaviour for tilt and special buttons.
* Pressed button is reported in each movement event.
* Workaround sends only one event per press.
*/
if (kone->last_tilt_state == event->tilt)
event->tilt = 0;
if (memcmp(&kone->last_mouse_event.tilt, &event->tilt, 5))
memcpy(&kone->last_mouse_event, event,
sizeof(struct kone_mouse_event));
else
kone->last_tilt_state = event->tilt;
memset(&event->tilt, 0, 5);

/*
* handle special events and keep actual profile and dpi values
Expand Down
19 changes: 16 additions & 3 deletions trunk/drivers/hid/hid-roccat-kone.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,17 @@ enum kone_button_info_types {
kone_button_info_type_multimedia_volume_down = 0x27
};

enum kone_button_info_numbers {
kone_button_top = 1,
kone_button_wheel_tilt_left = 2,
kone_button_wheel_tilt_right = 3,
kone_button_forward = 4,
kone_button_backward = 5,
kone_button_middle = 6,
kone_button_plus = 7,
kone_button_minus = 8,
};

struct kone_light_info {
uint8_t number; /* number of light 1-5 */
uint8_t mod; /* 1 = on, 2 = off */
Expand Down Expand Up @@ -120,6 +131,7 @@ struct kone_profile {
uint8_t light_effect_speed; /* range 0-255 */

struct kone_light_info light_infos[5];
/* offset is kone_button_info_numbers - 1 */
struct kone_button_info button_infos[8];

uint16_t checksum; /* \brief holds checksum of struct */
Expand Down Expand Up @@ -165,7 +177,7 @@ enum kone_mouse_events {
/* TODO clarify meaning and occurence of kone_mouse_event_calibration */
kone_mouse_event_calibration = 0xc0,
kone_mouse_event_call_overlong_macro = 0xe0,
/* switch events notify if user changed values wiht mousebutton click */
/* switch events notify if user changed values with mousebutton click */
kone_mouse_event_switch_dpi = 0xf0,
kone_mouse_event_switch_profile = 0xf1
};
Expand All @@ -188,8 +200,9 @@ struct kone_device {
* is no way of getting this information from the device on demand
*/
int actual_profile, actual_dpi;
/* Used for neutralizing abnormal tilt button behaviour */
int last_tilt_state;
/* Used for neutralizing abnormal button behaviour */
struct kone_mouse_event last_mouse_event;

/*
* It's unlikely that multiple sysfs attributes are accessed at a time,
* so only one mutex is used to secure hardware access and profiles and
Expand Down

0 comments on commit 5c0569f

Please sign in to comment.