summaryrefslogtreecommitdiff
path: root/qt
Unidiff
Diffstat (limited to 'qt') (more/less context) (show whitespace changes)
-rw-r--r--qt/qte234-for-opie091-simpad.patch136
1 files changed, 136 insertions, 0 deletions
diff --git a/qt/qte234-for-opie091-simpad.patch b/qt/qte234-for-opie091-simpad.patch
index e2e323a..fd535d4 100644
--- a/qt/qte234-for-opie091-simpad.patch
+++ b/qt/qte234-for-opie091-simpad.patch
@@ -24,3 +24,139 @@
24 # else 24 # else
25 if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) { 25 if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) {
26 # endif 26 # endif
27 --- src/kernel/qkeyboard_qws.cpp.origSat May 24 16:49:38 2003
28 +++ src/kernel/qkeyboard_qws.cppSat May 24 17:58:22 2003
29@@ -131,6 +131,46 @@
30
31 #endif // QNX6
32
33+/*
34+ * SIMpad switches handler
35+ * (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
36+ */
37+
38+//TODO: guard this against inclusion with #ifdef QT_QWS_SIMPAD
39+
40+#include <linux/switches.h>
41+#define SIMPAD_SWITCHES_DEVICE "/dev/misc/switches"
42+
43+// switches from top to down over the SIMpad surface
44+
45+#define SIMPAD_SWITCH_UPPER 0x10
46+
47+#define SIMPAD_SWITCH_UP 0x20
48+#define SIMPAD_SWITCH_DOWN 0x40
49+#define SIMPAD_SWITCH_LEFT 0x80
50+#define SIMPAD_SWITCH_RIGHT 0x100
51+
52+#define SIMPAD_SWITCH_LOWER 0x8
53+
54+class QWSsimpadButtonsHandler : public QWSKeyboardHandler
55+{
56+ Q_OBJECT
57+
58+ public:
59+ QWSsimpadButtonsHandler();
60+ virtual ~QWSsimpadButtonsHandler();
61+
62+ bool isOpen() { return fd > 0; }
63+
64+ private slots:
65+ void readSwitchesData();
66+
67+ private:
68+ switches_mask_t switches;
69+ int fd;
70+ QSocketNotifier *notifier;
71+};
72+
73 #ifdef QT_QWS_SL5XXX
74 static const QWSServer::KeyMap keyM[] = {
75 { Qt::Key_unknown,0xffff , 0xffff , 0xffff }, // 00
76@@ -1440,7 +1480,11 @@
77 } else {
78 type = spec;
79 }
80-
81+ if ( type == "SIMpad" )
82+ {
83+ qDebug( "QWSKeyboardHandler: using SIMpad keyboard handler..." );
84+ handler = new QWSsimpadButtonsHandler();
85+ }
86 if ( type == "Buttons" ) {
87 #if defined(QT_QWS_YOPY)
88 handler = new QWSyopyButtonsHandler();
89@@ -1469,6 +1513,72 @@
90 return keyM;
91 }
92
93-#endif // QT_NO_QWS_KEYBOARD
94
95+/*
96+ * SIMpad switches handler
97+ * (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
98+ */
99+
100+
101+QWSsimpadButtonsHandler::QWSsimpadButtonsHandler()
102+ :QWSKeyboardHandler(), fd( -1 )
103+{
104+ qDebug( "SimpadButtonsHandler()" );
105+ fd = ::open( SIMPAD_SWITCHES_DEVICE, O_RDWR | O_NDELAY, 0 );
106+ if ( fd < 0 )
107+ {
108+ qWarning( "SimpadButtonsHandler(): can't open %s", SIMPAD_SWITCHES_DEVICE );
109+ return;
110+ }
111+
112+ notifier = new QSocketNotifier( fd, QSocketNotifier::Read, this );
113+ connect( notifier, SIGNAL( activated(int) ),this, SLOT( readSwitchesData() ) );
114+}
115
116+
117+QWSsimpadButtonsHandler::~QWSsimpadButtonsHandler()
118+{
119+ qDebug( "~SimpadButtonsHandler()" );
120+ if ( fd > 0 )
121+ {
122+ ::close( fd );
123+ fd = -1;
124+ }
125+}
126+
127+
128+void QWSsimpadButtonsHandler::readSwitchesData()
129+{
130+ qDebug( "SimpadButtonsHandler() - detected switches action" );
131+
132+ if ( ::read( fd, &switches, sizeof switches ) < 0 )
133+ {
134+ qWarning( "SimpadButtonsHandler() - switches read error!" );
135+ return;
136+ }
137+
138+ qDebug( "SimpadButtonsHandler() - EVENT = %04xd | %04xd",
139+ switches.events[0], switches.states[0] );
140+
141+ bool press = switches.states[0]; // == switches.event[0];
142+ int code = switches.events[0];
143+ int k = -1;
144+
145+ switch(code)
146+ {
147+ case SIMPAD_SWITCH_UPPER: k = Qt::Key_Escape; break;
148+ case SIMPAD_SWITCH_UP: k = Qt::Key_Up; break;
149+ case SIMPAD_SWITCH_DOWN: k = Qt::Key_Down; break;
150+ case SIMPAD_SWITCH_LEFT: k = Qt::Key_Left; break;
151+ case SIMPAD_SWITCH_RIGHT: k = Qt::Key_Right; break;
152+ case SIMPAD_SWITCH_LOWER: k = Qt::Key_Return; break;
153+ default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event!" ); break;
154+ }
155+
156+ if ( k >= 0 )
157+ {
158+ qwsServer->processKeyEvent( 0, k, 0, press, false );
159+ }
160+}
161+
162+#endif // QT_NO_QWS_KEYBOARD