Index: test/testprotocol.c |
diff --git a/test/testprotocol.c b/test/testprotocol.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..178dc96e95abdfaddf06cda3dd32a3a96e163d70 |
--- /dev/null |
+++ b/test/testprotocol.c |
@@ -0,0 +1,82 @@ |
+#include <sys/types.h> |
+#include <sys/stat.h> |
+#include <fcntl.h> |
+#include <stdio.h> |
+#include <unistd.h> |
+ |
+static int outputformat = 0; |
+ |
+void |
+SynapticsReadPacket(int fd) |
+{ |
+ int count = 0; |
+ int inSync = 0; |
+ unsigned char pBuf[7], u; |
+ |
+ while (read(fd,&u, 1) == 1) { |
+ pBuf[count++] = u; |
+ |
+ /* check first byte */ |
+ if ((count == 1) && ((u & 0xC8) != 0x80)) { |
+ inSync = 0; |
+ count = 0; |
+ printf("Synaptics driver lost sync at 1st byte\n"); |
+ continue; |
+ } |
+ |
+ /* check 4th byte */ |
+ if ((count == 4) && ((u & 0xc8) != 0xc0)) { |
+ inSync = 0; |
+ count = 0; |
+ printf("Synaptics driver lost sync at 4th byte\n"); |
+ continue; |
+ } |
+ |
+ if (count >= 6) { /* Full packet received */ |
+ if (!inSync) { |
+ inSync = 1; |
+ printf("Synaptics driver resynced.\n"); |
+ } |
+ count = 0; |
+ switch (outputformat) { |
+ case 1: |
+ printf("Paket:%02X-%02X-%02X-%02X-%02X-%02X\n", |
+ pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5]); |
+ break; |
+ case 2: |
+ printf("x = %i, y = %i, z = %i, w = %i, l = %i, r = %i\n", |
+ ((pBuf[3] & 0x10) << 8) | ((pBuf[1] & 0x0f) << 8) | pBuf[4], |
+ ((pBuf[3] & 0x20) << 7) | ((pBuf[1] & 0xf0) << 4) | pBuf[5], |
+ ((pBuf[0] & 0x30) >> 2) | ((pBuf[0] & 0x04) >> 1) | ((pBuf[3] & 0x04) >> 2), |
+ ((pBuf[0] & 0x30) >> 2) | ((pBuf[0] & 0x04) >> 1) | ((pBuf[3] & 0x04) >> 2), |
+ (pBuf[0] & 0x01) ? 1 : 0, |
+ (pBuf[0] & 0x2) ? 1 : 0); |
+ break; |
+ default: |
+ break; |
+ } |
+ } |
+ } |
+} |
+ |
+int |
+main(int argc, char* argv[]) |
+{ |
+ int fd; |
+ |
+ if (argc > 1) |
+ outputformat = atoi(argv[1]); |
+ |
+ |
+ fd = open("/dev/psaux", O_RDONLY); |
+ if (fd == -1) { |
+ printf("Error opening /dev/psaux\n"); |
+ exit(1); |
+ } |
+ |
+ SynapticsReadPacket(fd); |
+ |
+ close(fd); |
+ |
+ exit(0); |
+} |