Commit 8b194ee761699aab97c4994bd41d63e289d1dfc6

Authored by henyxia
1 parent e912f423

Getting touch information from screen

Showing 3 changed files with 42 additions and 6 deletions   Show diff stats
@@ -57,6 +57,8 @@ void setDebit(unsigned int d) @@ -57,6 +57,8 @@ void setDebit(unsigned int d)
57 57
58 void processScreen() 58 void processScreen()
59 { 59 {
  60 + int x = -1;
  61 + int y = -1;
60 if(actScreen == SC_HOME) 62 if(actScreen == SC_HOME)
61 { 63 {
62 if(uid[0] == '\0') 64 if(uid[0] == '\0')
@@ -67,6 +69,12 @@ void processScreen() @@ -67,6 +69,12 @@ void processScreen()
67 displayPicture("img/main.boz"); 69 displayPicture("img/main.boz");
68 } 70 }
69 } 71 }
  72 + else if(actScreen == SC_MAIN)
  73 + {
  74 + if(screenTouched(&x, &y))
  75 + displayPicture("img/home.boz");
  76 + //displayPicture = calculateInteraction(displayPicture, x, y);
  77 + }
70 } 78 }
71 79
72 void* drawUI(void* we) 80 void* drawUI(void* we)
@@ -2,14 +2,17 @@ @@ -2,14 +2,17 @@
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <stdbool.h> 3 #include <stdbool.h>
4 #include <libusb-1.0/libusb.h> 4 #include <libusb-1.0/libusb.h>
  5 +#include "printx.h"
5 #include "usb.h" 6 #include "usb.h"
6 7
7 -#define VENDOR_ID 0xfccf  
8 -#define PRODUCT_ID 0xa001  
9 -#define ENDPOINT_OUT 0x01  
10 -#define MAX_SIZE_OUT 64  
11 -#define HEIGHT 240  
12 -#define WIDTH 320 8 +#define VENDOR_ID 0xfccf
  9 +#define PRODUCT_ID 0xa001
  10 +#define ENDPOINT_OUT 0x01
  11 +#define ENDPOINT_IN 0x82
  12 +#define MAX_SIZE_OUT 64
  13 +#define HEIGHT 240
  14 +#define WIDTH 320
  15 +#define STATUS_QUERY_LENGTH 11
13 16
14 libusb_device_handle* screenHandle; 17 libusb_device_handle* screenHandle;
15 unsigned char data[MAX_SIZE_OUT]; 18 unsigned char data[MAX_SIZE_OUT];
@@ -183,3 +186,27 @@ bool initUSB(void) @@ -183,3 +186,27 @@ bool initUSB(void)
183 186
184 return true; 187 return true;
185 } 188 }
  189 +
  190 +bool screenTouched(int* x, int* y)
  191 +{
  192 + unsigned char data[STATUS_QUERY_LENGTH];
  193 + int transfered;
  194 + libusb_interrupt_transfer(screenHandle, ENDPOINT_IN, data, STATUS_QUERY_LENGTH, &transfered, 0);
  195 + if(transfered != STATUS_QUERY_LENGTH)
  196 + {
  197 + printx(ERROR, UI, "Status recieved is %d bytes long, and expected %d\n", transfered, STATUS_QUERY_LENGTH);
  198 + return false;
  199 + }
  200 +
  201 + //printx(DEBUG, UI, "%02X %02X %02X %02X", data[0], data[1], data[2], data[3]);
  202 + //printx(DEBUG, UI, "%02X %02X %02X %02X", data[4], data[5], data[6], data[7]);
  203 + //printx(DEBUG, UI, "%02X %02X %02X\n", data[8], data[9], data[10]);
  204 +
  205 + *x = data[3] + (256 * (int)data[4]);
  206 +
  207 + *y = data[7];
  208 +
  209 + printx(DEBUG, UI, "Screen %s at X %d Y %d\n", data[2] == 1 ? "touched" : "untouched", *x, *y);
  210 +
  211 + return data[2] == 1;
  212 +}
@@ -3,5 +3,6 @@ @@ -3,5 +3,6 @@
3 3
4 bool initUSB(); 4 bool initUSB();
5 void displayPicture(char*); 5 void displayPicture(char*);
  6 +bool screenTouched(int*, int*);
6 7
7 #endif 8 #endif