|
|
- /* Through this source code, you could see the point output architechture of touch device.
- You could follow below code to do point parsing. And develop your own app. */
-
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <fcntl.h>
- #include <limits.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-
- #include <linux/input.h>
-
- /*Note: If you couldn't build this source code successfully, it may caused by the old kernel issue.
- Please enable below define depending on your kernel version */
-
- //#define KERNEL_2_6_35_DOWNWARD /* As kernel <= 2.6.35 */
- //#define KERNEL_2_6_32_DOWNWARD /* As kernel <= 2.6.32 */
- //#define KERNEL_2_6_29_DOWNWARD /* As kernel <= 2.6.29 */
-
- typedef struct tagevent
- {
- struct timeval time;
- unsigned short type;
- unsigned short code;
- int value;
- } input_event;
-
- void ParseEvent( input_event ev )
- {
- static unsigned short X, Y, State;
- static unsigned short X2, Y2, State2;
- static unsigned char bIsSecond;
-
-
- if( ev.type == EV_ABS ) {
- switch( ev.code ) {
- #ifndef KERNEL_2_6_35_DOWNWARD
- case ABS_MT_SLOT:
- printf(" [ABS_MT_SLOT] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- #endif
- #ifndef KERNEL_2_6_32_DOWNWARD
- case ABS_MT_PRESSURE:
- printf(" [ABS_MT_PRESSURE] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- #endif
- #ifndef KERNEL_2_6_29_DOWNWARD
- case ABS_MT_TRACKING_ID:
- printf(" [ABS_MT_TRACKING_ID] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_MT_POSITION_X:
- printf(" [ABS_MT_POSITION_X] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_MT_POSITION_Y:
- printf(" [ABS_MT_POSITION_Y] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_MT_TOUCH_MAJOR:
- printf(" [ABS_MT_TOUCH_MAJOR] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_MT_WIDTH_MAJOR:
- printf(" [ABS_MT_WIDTH_MAJOR] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- #endif
- case ABS_X:
- printf(" [ABS_X] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_Y:
- printf(" [ABS_Y] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_RX:
- printf(" [ABS_RX] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_RY:
- printf(" [ABS_RY] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case ABS_PRESSURE:
- printf(" [ABS_PRESSURE] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- default:
- break;
- }
- }
- else if( ev.type == EV_KEY ){
- switch( ev.code ){
- case BTN_TOUCH:
- printf(" [BTN_TOUCH] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case BTN_LEFT:
- printf(" [BTN_LEFT] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- case BTN_EXTRA:
- printf(" [BTN_EXTRA] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- default:
- break;
- }
-
- }
- else if( ev.type == EV_SYN ){
- switch( ev.code ){
- case SYN_REPORT:
- printf(" [SYN_REPORT] code = %3d, value = %4d\n\n", ev.code , ev.value);
- break;
- #ifndef KERNEL_2_6_29_DOWNWARD
- case SYN_MT_REPORT:
- printf(" [SYN_MT_REPORT] code = %3d, value = %4d\n", ev.code , ev.value);
- break;
- #endif
- default:
- break;
- }
- }
- else if( ev.type == EV_MSC ){
- if( ev.code == MSC_SCAN )
- printf(" [MSC_SCAN] code = %3d, value = %4d\n", ev.code , ev.value);
- }
- }
-
- int main( int argc, char **argv )
- {
- int fd;
- unsigned char byFlag = 0; /* 0: Point */
- char strPort[64] = { 0 };
- fd_set readfds;
-
- if( argc == 1 || argc > 2 ) {
- printf(" \nUsage:\n \tGetEvent [Port]\n");
- printf("Example:\n \tGetEvent /dev/input/event1\n\n");
- return 0;
- }
-
- sprintf( strPort, "%s", argv[1] );
- printf("Event Port = %s ", strPort);
- fd = open(strPort, O_RDONLY );
- if( fd >= 0 ) {
- printf(" open: ok\n" );
- FD_ZERO( &readfds );
- FD_SET( fd , &readfds );
- while( 1 ) {
- if( select( fd+1, &readfds, NULL, NULL, NULL ) > 0 ) {
- input_event ev;
- if( sizeof( input_event ) == read( fd, &ev, sizeof( input_event ) ) ) {
- ParseEvent( ev );
- } else {
- printf(" Nothing read \n" );
- }
- }
- }
- }
- return 0;
- }
|