summaryrefslogtreecommitdiff
path: root/extra/upower/lg-unifying-fix-K750-features-name-use-1-second-interval.patch
blob: 27c4dc51eaf599c98367b5b8ecab57481f88068e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
From 35b0d25b49d04cf7d33699c34f42a196c8e92a2e Mon Sep 17 00:00:00 2001
From: Julien Danjou <julien@danjou.info>
Date: Sat, 01 Dec 2012 12:30:03 +0000
Subject: lg-unifying: fix K750 features name, use 1 second interval

I've recently got access to some spec on this, so I'm now able to document
his a bit better. Also, change the 0x78 value for the function sending
BattLightMeasureBroadcastEvent to 0x1 since this is the number of event we
want, and one is enough.

Signed-off-by: Julien Danjou <julien@danjou.info>
Signed-off-by: Richard Hughes <richard@hughsie.com>
---
diff --git a/src/linux/up-device-lg-unifying.c b/src/linux/up-device-lg-unifying.c
index e8997c0..eddd1ec 100644
--- a/src/linux/up-device-lg-unifying.c
+++ b/src/linux/up-device-lg-unifying.c
@@ -84,10 +84,9 @@
 #define HIDPP_FEATURE_GETDEVICENAMETYPE_FUNCTION_GETCOUNT      (0x00 << 4)
 #define HIDPP_FEATURE_GETDEVICENAMETYPE_FUNCTION_GETDEVICENAME (0x01 << 4)
 
-/* I wish i has the spec for this, but I don't so I invented the name */
-#define HIDPP_FEATURE_K750_BATTERY                                   0x4301
-#define HIDPP_FEATURE_K750_BATTERY_FUNCTION_STARTLUXANDBATTERY   (0x00 << 4)
-#define HIDPP_FEATURE_K750_BATTERY_FUNCTION_LUXANDBATTERYEVENT   (0x01 << 4)
+#define HIDPP_FEATURE_SOLAR_DASHBOARD                                     0x4301
+#define HIDPP_FEATURE_SOLAR_DASHBOARD_FUNCTION_SetLightMeasure       (0x00 << 4)
+#define HIDPP_FEATURE_SOLAR_DASHBOARD_BattLightMeasureBroadcastEvent (0x01 << 4)
 
 #define HIDPP_FEATURE_FUNCTION_AS_ARG(feature)	\
 	feature >> 8, feature, 0x00
@@ -105,7 +104,7 @@ struct UpDeviceUnifyingPrivate
 	int			 fd;
 	/* Device index on the Unifying "bus" */
 	gint			 device_index;
-	gint			 feature_k750_battery_index;
+	gint			 feature_solar_dashboard_index;
 	GIOChannel		*channel;
 	guint			 channel_source_id;
 };
@@ -130,8 +129,8 @@ up_device_unifying_event_io (GIOChannel *channel, GIOCondition condition, gpoint
 	while (read (unifying->priv->fd, buf, sizeof(buf)) > 0)
 		if (buf[0] == HIDPP_HEADER_RESPONSE &&
 		    buf[1] == unifying->priv->device_index &&
-		    buf[2] == unifying->priv->feature_k750_battery_index &&
-		    buf[3] == HIDPP_FEATURE_K750_BATTERY_FUNCTION_LUXANDBATTERYEVENT) {
+		    buf[2] == unifying->priv->feature_solar_dashboard_index &&
+		    buf[3] == HIDPP_FEATURE_SOLAR_DASHBOARD_BattLightMeasureBroadcastEvent) {
 			lux = (buf[5] << 8) | buf[6];
 			if (lux > 200) {
 				g_object_set (device,
@@ -283,25 +282,24 @@ up_device_unifying_hidpp2_set_battery (UpDeviceUnifying *unifying)
 		0x00, 0x00, 0x00, 0x00, 0x00,
 	};
 
-	if (unifying->priv->feature_k750_battery_index == -1)
-		unifying->priv->feature_k750_battery_index =
-			up_device_unifying_hidpp2_get_feature_index (unifying, HIDPP_FEATURE_K750_BATTERY);
+	if (unifying->priv->feature_solar_dashboard_index == -1)
+		unifying->priv->feature_solar_dashboard_index =
+			up_device_unifying_hidpp2_get_feature_index (unifying, HIDPP_FEATURE_SOLAR_DASHBOARD);
 
-	if (unifying->priv->feature_k750_battery_index == 0) {
-		/* Probably not a K750 */
+	if (unifying->priv->feature_solar_dashboard_index == 0) {
+		/* Probably not a solar keyboard */
 		/* TODO: add support for BatteryLevelStatus */
 	} else {
 		/* This request will make the keyboard send a bunch of packets
 		 * (events) with lux-meter and battery information */
-		request[2] = unifying->priv->feature_k750_battery_index;
-		request[3] = HIDPP_FEATURE_K750_BATTERY_FUNCTION_STARTLUXANDBATTERY;
-		/* Don't know what this means */
-		request[4] = 0x78;
-		request[5] = 0x01;
+		request[2] = unifying->priv->feature_solar_dashboard_index;
+		request[3] = HIDPP_FEATURE_SOLAR_DASHBOARD_FUNCTION_SetLightMeasure;
+		request[4] = 0x01; /* Max number of reports: number of report sent after function call */
+		request[5] = 0x01; /* Report period: time between reports, in seconds */
 
 
 		if (write (unifying->priv->fd, request, sizeof(request)) != sizeof(request)) {
-			g_debug ("Unable to send K750 battery/lux events start request to device");
+			g_debug ("Unable to send solar battery/lux events start request to device");
 			return FALSE;
 		}
 
@@ -719,7 +717,7 @@ up_device_unifying_init (UpDeviceUnifying *unifying)
 	unifying->priv = UP_DEVICE_UNIFYING_GET_PRIVATE (unifying);
 	unifying->priv->poll_timer_id = 0;
 	unifying->priv->fd = -1;
-	unifying->priv->feature_k750_battery_index = -1;
+	unifying->priv->feature_solar_dashboard_index = -1;
 }
 
 /**
--
cgit v0.9.0.2-2-gbebe