[gnome-color-manager: 16/80] huey: Get the ambient value from the hardware
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-color-manager: 16/80] huey: Get the ambient value from the hardware
- Date: Mon, 19 Jul 2010 11:33:48 +0000 (UTC)
commit 58acf89d73e9264972b95ff151edd4116da7eab8
Author: Richard Hughes <richard hughsie com>
Date: Sat Jul 17 22:44:16 2010 +0100
huey: Get the ambient value from the hardware
src/gcm-huey-example.c | 87 +++++++++++++++++++++++++++++++++++++-----------
1 files changed, 67 insertions(+), 20 deletions(-)
---
diff --git a/src/gcm-huey-example.c b/src/gcm-huey-example.c
index 913d91f..1800861 100644
--- a/src/gcm-huey-example.c
+++ b/src/gcm-huey-example.c
@@ -40,20 +40,54 @@
#define HUEY_RETVAL_ERROR 0x80
#define HUEY_RETVAL_RETRY 0x90
-#define HUEY_COMMAND_UNKNOWN_00 0x00 /* returns: "Cir001" -- Cirrus Logic? It's a Cyprus IC... */
-#define HUEY_COMMAND_UNKNOWN_02 0x02 /* returns: all NULL for NULL input, 00,02,02,cc,53,6c,00,00 for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_UNKNOWN_03 0x03 /* returns: all NULL for NULL input, 00,03,62,18,88,85,00,00 for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_UNKNOWN_05 0x05 /* returns: all NULL for NULL input, 00,05,00,00,00,00,00,00 for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_UNKNOWN_06 0x06 /* returns: all NULL for NULL input, 00,06,f1,f2,f3,f4,00,00 for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_UNKNOWN_07 0x07 /* returns: all NULL all of the time */
-#define HUEY_COMMAND_UNKNOWN_08 0x08 /* returns: all NULL for NULL input, 00,08,f1,f2,00,00,00,00 for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_UNLOCK 0x0e /* returns: all NULL all of the time */
-#define HUEY_COMMAND_UNKNOWN_0F 0x0f /* returns: all NULL all of the time */
-#define HUEY_COMMAND_UNKNOWN_13 0x13 /* returns: all NULL all of the time */
-#define HUEY_COMMAND_UNKNOWN_16 0x16 /* returns: all NULL for NULL input, times out for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_AMBIENT 0x17 /* returns: 90,17,03,00,00,00,00,00 */
-#define HUEY_COMMAND_SET_LEDS 0x18 /* returns: all NULL for NULL input, times out for 0xf1f2f3f4f5f6f7f8 */
-#define HUEY_COMMAND_UNKNOWN_19 0x19 /* returns: all NULL for NULL input, times out for 0xf1f2f3f4f5f6f7f8 */
+/* returns: "Cir001" -- Cirrus Logic? It's a Cyprus IC... */
+#define HUEY_COMMAND_UNKNOWN_00 0x00
+
+/* returns: all NULL for NULL input, 00,02,02,cc,53,6c,00,00 for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_02 0x02
+
+/* returns: all NULL for NULL input, 00,03,62,18,88,85,00,00 for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_03 0x03
+
+/* returns: all NULL for NULL input, 00,05,00,00,00,00,00,00 for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_05 0x05
+
+/* returns: all NULL for NULL input, 00,06,f1,f2,f3,f4,00,00 for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_06 0x06
+
+/* returns: all NULL all of the time */
+#define HUEY_COMMAND_UNKNOWN_07 0x07
+
+/* returns: all NULL for NULL input, 00,08,f1,f2,00,00,00,00 for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_08 0x08
+
+/* returns: all NULL all of the time */
+#define HUEY_COMMAND_UNLOCK 0x0e
+
+/* returns: all NULL all of the time */
+#define HUEY_COMMAND_UNKNOWN_0F 0x0f
+
+/* returns: all NULL all of the time */
+#define HUEY_COMMAND_UNKNOWN_13 0x13
+
+/* returns: all NULL for NULL input, times out for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_16 0x16
+
+/* returns: 90,17,03,00,00,00,00,00, then on second read:
+ * 00,17,03,00,00,62,57,00 in light (or)
+ * 00,17,03,00,00,00,08,00 in light
+ * no idea --^^ ^---^ = 16bits data?
+ */
+#define HUEY_COMMAND_AMBIENT 0x17
+
+/* input: 18,00,f0,00,00,00,00,00
+ * returns: 00,18,f0,00,00,00,00,00
+ * led mask ----^
+ */
+#define HUEY_COMMAND_SET_LEDS 0x18
+
+/* returns: all NULL for NULL input, times out for 0xf1f2f3f4f5f6f7f8 */
+#define HUEY_COMMAND_UNKNOWN_19 0x19
typedef struct {
gboolean connected;
@@ -241,7 +275,7 @@ send_command (GcmPriv *priv, guchar command, const guchar *payload, GError **err
gsize reply_read;
guint i;
- /* first byte seems to be a command, i've no idea what the others do */
+ /* first byte seems to be a command */
request[0] = command;
for (i=1; i<8; i++)
request[i] = payload[i-1];
@@ -293,13 +327,24 @@ send_leds (GcmPriv *priv, guchar mask, GError **error)
}
static gboolean
-get_ambient (GcmPriv *priv, GError **error)
+get_ambient (GcmPriv *priv, guint16 *value, GError **error)
{
/* from usb-ambient.txt */
- guchar payload[] = { 0x03, 0x00, 0xa9, 0xaa, 0xaa, 0xab, 0xab };
+ guchar request[] = { HUEY_COMMAND_AMBIENT, 0x03, 0x00, 0xa9, 0xaa, 0xaa, 0xab, 0xab };
+ guchar reply[8];
+ gboolean ret;
+ gsize reply_read;
- /* send all commands that are implemented */
- return send_command (priv, HUEY_COMMAND_AMBIENT, payload, error);
+ /* hit hardware */
+ ret = send_data (priv, request, 8, reply, 8, &reply_read, error);
+ if (!ret)
+ goto out;
+
+ /* parse the value */
+ g_debug ("%i, %i", reply[5], reply[5]);
+ *value = reply[5] * 0xff + reply[6];
+out:
+ return ret;
}
int
@@ -307,6 +352,7 @@ main (void)
{
gint retval;
guint i;
+ guint16 value;
gboolean ret;
GcmPriv *priv;
GError *error = NULL;
@@ -346,12 +392,13 @@ main (void)
}
/* get ambient */
- ret = get_ambient (priv, &error);
+ ret = get_ambient (priv, &value, &error);
if (!ret) {
g_warning ("failed to get ambient: %s", error->message);
g_error_free (error);
goto out;
}
+ g_debug ("ambient = %i(units?)", value);
if (0) {
guchar payload[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]