summaryrefslogtreecommitdiff
path: root/examples
authormickeyl <mickeyl>2005-02-02 15:23:01 (UTC)
committer mickeyl <mickeyl>2005-02-02 15:23:01 (UTC)
commit227d06128b74ef78b8268e18dabe454469b65cc8 (patch) (unidiff)
tree64632ebff3bb6df1ba81ce1e70638cbce15de33c /examples
parent1a5dc271114432e0e598af499c076bfbf69ff972 (diff)
downloadopie-227d06128b74ef78b8268e18dabe454469b65cc8.zip
opie-227d06128b74ef78b8268e18dabe454469b65cc8.tar.gz
opie-227d06128b74ef78b8268e18dabe454469b65cc8.tar.bz2
first work on input system abstractions
Diffstat (limited to 'examples') (more/less context) (ignore whitespace changes)
-rw-r--r--examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp b/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp
index 89209a7..5450966 100644
--- a/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp
+++ b/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp
@@ -1,250 +1,318 @@
1/*
2                 This file is part of the Opie Project
3 =. (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de>
4 .=l.
5           .>+-=
6 _;:,     .>    :=|. This program is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This program is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
18..}^=.=       =       ; Library General Public License for more
19++=   -.     .`     .: details.
20 :     =  ...= . :.=-
21 -.   .:....=;==+<; You should have received a copy of the GNU
22  -_. . .   )=.  = Library General Public License along with
23    --        :-=` this library; see the file COPYING.LIB.
24 If not, write to the Free Software Foundation,
25 Inc., 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA.
27*/
28
29#include <opie2/odebug.h>
30#include <opie2/oinputsystem.h>
31
32using namespace Opie::Core;
33
34#include <stdlib.h>
35#include <stdio.h>
36#include <unistd.h>
37#include <sys/ioctl.h>
38#include <sys/fcntl.h>
39
40#if 1
41
42int main( int argc, char** argv )
43{
44 OInputSystem* sys = OInputSystem::instance();
45 OInputSystem::DeviceIterator it = sys->iterator();
46
47 OInputDevice* dev = 0;
48
49 while ( it.current() )
50 {
51 odebug << "DEMO: OInputSystem contains Device '" << it.current()->name() << "'" << oendl;
52
53 dev = it.current();
54
55 odebug << "========================================"
56 << "\nDevice: " << dev->name()
57 << "\nName: " << dev->identity()
58 << "\nPath: " << dev->path()
59 << "\nUniq: " << dev->uniq()
60 << oendl;
61
62 ++it;
63 }
64}
65
66#else
67
1#include <fcntl.h> 68#include <fcntl.h>
2#include <unistd.h> 69#include <unistd.h>
3#include <cstdlib> 70#include <cstdlib>
4#include <cstdio> 71#include <cstdio>
5#include <string> 72#include <string>
6 73
7#include <sys/types.h> 74#include <sys/types.h>
8#include <linux/input.h> 75#include <linux/input.h>
9 76
10using std::string; 77using std::string;
11 78
12const unsigned char BUT1 = 0x01; 79const unsigned char BUT1 = 0x01;
13const unsigned char BUT2 = 0x04; 80const unsigned char BUT2 = 0x04;
14const unsigned char BUT3 = 0x02; 81const unsigned char BUT3 = 0x02;
15const unsigned char BUT4 = 0x40; 82const unsigned char BUT4 = 0x40;
16const unsigned char BUT5 = 0x80; 83const unsigned char BUT5 = 0x80;
17 84
18#define BITMASK( name, numbits ) \ 85#define BITMASK( name, numbits ) \
19 unsigned short name[ ((numbits) - 1) / (sizeof( short ) * 8) + 1 ]; \ 86 unsigned short name[ ((numbits) - 1) / (sizeof( short ) * 8) + 1 ]; \
20 memset( name, 0, sizeof( name ) ) 87 memset( name, 0, sizeof( name ) )
21 88
22#define TEST_BIT( bitmask, bit ) \ 89#define TEST_BIT( bitmask, bit ) \
23 ( bitmask[ (bit) / sizeof(short) / 8 ] & (1u << ( (bit) % (sizeof(short) * 8))) ) 90 ( bitmask[ (bit) / sizeof(short) / 8 ] & (1u << ( (bit) % (sizeof(short) * 8))) )
24 91
25int Open_cPad() 92int Open_cPad()
26{ 93{
27 size_t MAX_DEVICES = 1; 94 size_t MAX_DEVICES = 1;
28 int fd = -1; 95 int fd = -1;
29 input_id info; 96 input_id info;
30 97
31 for( size_t i = 0; i < MAX_DEVICES; ++i ) 98 for( size_t i = 0; i < MAX_DEVICES; ++i )
32 { 99 {
33 string devpath( "/dev/input/event0" ); 100 string devpath( "/dev/input/event0" );
34 101
35 //devpath << (int)i; 102 //devpath << (int)i;
36 103
37 fd = open( devpath.c_str(), O_RDONLY, &info ); 104 fd = open( devpath.c_str(), O_RDONLY, &info );
38 105
39 if( fd >= 0 ) 106 if( fd >= 0 )
40 { 107 {
41 int version = -1; 108 int version = -1;
42 /* ioctl() accesses the underlying driver */ 109 /* ioctl() accesses the underlying driver */
43 if (ioctl(fd, EVIOCGVERSION, &version)) { 110 if (ioctl(fd, EVIOCGVERSION, &version)) {
44 perror("evdev ioctl"); 111 perror("evdev ioctl");
45 } 112 }
46 113
47 /* the EVIOCGVERSION ioctl() returns an int */ 114 /* the EVIOCGVERSION ioctl() returns an int */
48 /* so we unpack it and display it */ 115 /* so we unpack it and display it */
49 printf("evdev driver version is %d.%d.%d\n", 116 printf("evdev driver version is %d.%d.%d\n",
50 version >> 16, (version >> 8) & 0xff, 117 version >> 16, (version >> 8) & 0xff,
51 version & 0xff); 118 version & 0xff);
52 119
53 // Get Identifying info 120 // Get Identifying info
54 121
55 if( ioctl( fd, EVIOCGID, &info) ) 122 if( ioctl( fd, EVIOCGID, &info) )
56 { 123 {
57 perror( "event device ioctl" ); 124 perror( "event device ioctl" );
58 return -1; 125 return -1;
59 } 126 }
60 printf( "Bus: %#x, Vendor: %#x, Product: %#x, Version: %#x\n", 127 printf( "Bus: %#x, Vendor: %#x, Product: %#x, Version: %#x\n",
61 info.bustype, info.vendor, info.product, info.version ); 128 info.bustype, info.vendor, info.product, info.version );
62 129
63 switch ( info.bustype) 130 switch ( info.bustype)
64 { 131 {
65 case BUS_PCI : 132 case BUS_PCI :
66 printf(" is on a PCI bus\n"); 133 printf(" is on a PCI bus\n");
67 break; 134 break;
68 case BUS_USB : 135 case BUS_USB :
69 printf(" is on a Universal Serial Bus\n"); 136 printf(" is on a Universal Serial Bus\n");
70 break; 137 break;
71 /* ... */ 138 /* ... */
72 } 139 }
73 140
74 // Get device 'name' 141 // Get device 'name'
75 142
76 char name[256] = "Unknown"; 143 char name[256] = "Unknown";
77 if( ioctl( fd, EVIOCGNAME(sizeof name ), name) < 0 ) 144 if( ioctl( fd, EVIOCGNAME(sizeof name ), name) < 0 )
78 { 145 {
79 perror( "event device ioctl" ); 146 perror( "event device ioctl" );
80 }else 147 }else
81 printf( "Device name '%s'\n", name ); 148 printf( "Device name '%s'\n", name );
82 149
83 if(ioctl(fd, EVIOCGPHYS(sizeof(name)), name) < 0) { 150 if(ioctl(fd, EVIOCGPHYS(sizeof(name)), name) < 0) {
84 perror("event ioctl"); 151 perror("event ioctl");
85 }else 152 }else
86 printf("Device path '%s'\n", name ); 153 printf("Device path '%s'\n", name );
87 154
88 if(ioctl(fd, EVIOCGUNIQ(sizeof(name)), name) < 0) { 155 if(ioctl(fd, EVIOCGUNIQ(sizeof(name)), name) < 0) {
89 perror("event ioctl"); 156 perror("event ioctl");
90 }else 157 }else
91 printf("Device identity '%s'\n", name ); 158 printf("Device identity '%s'\n", name );
92 159
93 // Get feature types 160 // Get feature types
94 161
95 BITMASK( features, EV_MAX ); 162 BITMASK( features, EV_MAX );
96 163
97 if( ioctl( fd, EVIOCGBIT( 0, EV_MAX ), features) < 0 ) 164 if( ioctl( fd, EVIOCGBIT( 0, EV_MAX ), features) < 0 )
98 { 165 {
99 perror( "event device ioctl" ); 166 perror( "event device ioctl" );
100 return -1; 167 return -1;
101 } 168 }
102 169
103 printf( "Supported features:\n" ); 170 printf( "Supported features:\n" );
104 for( size_t bit = 0; bit < EV_MAX; ++bit ) 171 for( size_t bit = 0; bit < EV_MAX; ++bit )
105 { 172 {
106 if( TEST_BIT( features, bit ) ) 173 if( TEST_BIT( features, bit ) )
107 { 174 {
108 switch( bit ) 175 switch( bit )
109 { 176 {
110 case EV_SYN : 177 case EV_SYN :
111 printf(" Sync. Events\n"); 178 printf(" Sync. Events\n");
112 break; 179 break;
113 //case EV_RST: 180 //case EV_RST:
114 // printf( " Reset?\n" ); 181 // printf( " Reset?\n" );
115 // break; 182 // break;
116 case EV_KEY: 183 case EV_KEY:
117 printf( " Keys or buttons\n" ); 184 printf( " Keys or buttons\n" );
118 break; 185 break;
119 case EV_REL: 186 case EV_REL:
120 printf( " Relative axes\n" ); 187 printf( " Relative axes\n" );
121 break; 188 break;
122 case EV_ABS: 189 case EV_ABS:
123 printf( " Absolute axes\n" ); 190 printf( " Absolute axes\n" );
124 break; 191 break;
125 case EV_MSC: 192 case EV_MSC:
126 printf( " Misc\n" ); 193 printf( " Misc\n" );
127 break; 194 break;
128 case EV_LED: 195 case EV_LED:
129 printf( " Led's\n" ); 196 printf( " Led's\n" );
130 break; 197 break;
131 case EV_SND: 198 case EV_SND:
132 printf( " Sounds\n" ); 199 printf( " Sounds\n" );
133 break; 200 break;
134 case EV_REP: 201 case EV_REP:
135 printf( " Repeat\n" ); 202 printf( " Repeat\n" );
136 break; 203 break;
137 case EV_FF : // fallthrough 204 case EV_FF : // fallthrough
138 case EV_FF_STATUS: 205 case EV_FF_STATUS:
139 printf(" Force Feedback\n"); 206 printf(" Force Feedback\n");
140 break; 207 break;
141 case EV_PWR: 208 case EV_PWR:
142 printf(" Power Management\n"); 209 printf(" Power Management\n");
143 break; 210 break;
144 default: 211 default:
145 printf( " Unknown (bit %d)\n", bit ); 212 printf( " Unknown (bit %d)\n", bit );
146 } 213 }
147 } 214 }
148 } 215 }
149 216
150 // Check keystate 217 // Check keystate
151 218
152 BITMASK( keys, KEY_MAX ); 219 BITMASK( keys, KEY_MAX );
153 220
154 if( ioctl( fd, EVIOCGKEY( sizeof(keys) ), keys ) < 0 ) 221 if( ioctl( fd, EVIOCGKEY( sizeof(keys) ), keys ) < 0 )
155 { 222 {
156 perror( "event device ioctl" ); 223 perror( "event device ioctl" );
157 return -1; 224 return -1;
158 } 225 }
159 226
160 printf( "Key global status:\n" ); 227 printf( "Key global status:\n" );
161 for( size_t bit = 0; bit < KEY_MAX; ++bit ) 228 for( size_t bit = 0; bit < KEY_MAX; ++bit )
162 { 229 {
163 if( TEST_BIT( keys, bit ) ) 230 if( TEST_BIT( keys, bit ) )
164 { 231 {
165 printf( "Key (bit %d) active\n", bit ); 232 printf( "Key (bit %d) active\n", bit );
166 } 233 }
167 } 234 }
168 } 235 }
169 else 236 else
170 printf( "Failed to open device\n" ); 237 printf( "Failed to open device\n" );
171 238
172 close( fd ); 239 close( fd );
173 } 240 }
174 return fd; 241 return fd;
175} 242}
176 243
177 244
178int main( int argc, char **argv ) 245int main( int argc, char **argv )
179{ 246{
180 //printf(" Long: %d, int %d, short %d\n", sizeof( long ), sizeof( int ), sizeof( short ) ); 247 //printf(" Long: %d, int %d, short %d\n", sizeof( long ), sizeof( int ), sizeof( short ) );
181 //printf( "num chars %d\n", snprintf( NULL, 0, 0 ) ); 248 //printf( "num chars %d\n", snprintf( NULL, 0, 0 ) );
182 //exit( 0 ); 249 //exit( 0 );
183 Open_cPad(); 250 Open_cPad();
184 251
185#if 1 252#if 1
186 int fd = open( "/dev/input/event0", O_RDONLY ); 253 int fd = open( "/dev/input/event0", O_RDONLY );
187 254
188 if( fd == -1 ) 255 if( fd == -1 )
189 { 256 {
190 printf( "Failed to open device\n" ); 257 printf( "Failed to open device\n" );
191 goto hell; 258 goto hell;
192 } 259 }
193 260
194 struct input_event evbuf; 261 struct input_event evbuf;
195 262
196 for(;;) 263 for(;;)
197 { 264 {
198 if( read( fd, &evbuf, sizeof evbuf ) == -1 ) 265 if( read( fd, &evbuf, sizeof evbuf ) == -1 )
199 { 266 {
200 printf( "Read error\n" ); 267 printf( "Read error\n" );
201 goto hell; 268 goto hell;
202 } 269 }
203 270
204 printf( "Type: %d, Code: %d, Value: %d\n", evbuf.type, evbuf.code, evbuf.value ); 271 printf( "Type: %d, Code: %d, Value: %d\n", evbuf.type, evbuf.code, evbuf.value );
205 } 272 }
206 273
207#endif 274#endif
208#if 0 275#if 0
209 unsigned char buf[ 4 ]; 276 unsigned char buf[ 4 ];
210 277
211 for(;;) 278 for(;;)
212 { 279 {
213 if( read( fd, buf, sizeof buf ) == -1 ) 280 if( read( fd, buf, sizeof buf ) == -1 )
214 { 281 {
215 printf( "Read error\n" ); 282 printf( "Read error\n" );
216 goto hell; 283 goto hell;
217 } 284 }
218 285
219 printf( "Raw:\t%#x\t%#x\t%#x\t%#x\n", buf[ 0 ], buf[ 1 ], buf[ 2 ], buf[ 3 ] ); 286 printf( "Raw:\t%#x\t%#x\t%#x\t%#x\n", buf[ 0 ], buf[ 1 ], buf[ 2 ], buf[ 3 ] );
220 287
221 int dx = buf[ 1 ]; 288 int dx = buf[ 1 ];
222 289
223 if( ( buf[ 0 ] & 0x10 ) != 0 ) 290 if( ( buf[ 0 ] & 0x10 ) != 0 )
224 dx -= 256; 291 dx -= 256;
225 292
226 int dy = - buf[ 2 ]; 293 int dy = - buf[ 2 ];
227 294
228 if( ( buf[ 0 ] & 0x20 ) != 0 ) 295 if( ( buf[ 0 ] & 0x20 ) != 0 )
229 dy += 256; 296 dy += 256;
230 297
231 printf( "( %d, %d )\t", dx, dy ); 298 printf( "( %d, %d )\t", dx, dy );
232 299
233 if( buf[ 0 ] & BUT1 ) 300 if( buf[ 0 ] & BUT1 )
234 printf( "Left\t" ); 301 printf( "Left\t" );
235 if( buf[ 0 ] & BUT2 ) 302 if( buf[ 0 ] & BUT2 )
236 printf( "Middle\t" ); 303 printf( "Middle\t" );
237 if( buf[ 0 ] & BUT3 ) 304 if( buf[ 0 ] & BUT3 )
238 printf( "Right\t" ); 305 printf( "Right\t" );
239 306
240 printf( "\n" ); 307 printf( "\n" );
241 } 308 }
242#endif 309#endif
243 310
244 //close( fd ); 311 //close( fd );
245 312
246 exit( EXIT_SUCCESS ); 313 exit( EXIT_SUCCESS );
247hell: 314hell:
248 exit( EXIT_FAILURE ); 315 exit( EXIT_FAILURE );
249} 316}
250 317
318#endif \ No newline at end of file