summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice.h2
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp18
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.h3
3 files changed, 19 insertions, 4 deletions
diff --git a/libopie2/opiecore/device/odevice.h b/libopie2/opiecore/device/odevice.h
index 0eed1c9..492c97b 100644
--- a/libopie2/opiecore/device/odevice.h
+++ b/libopie2/opiecore/device/odevice.h
@@ -192,65 +192,65 @@ enum ODirection {
192 CW = 0, 192 CW = 0,
193 CCW = 1, 193 CCW = 1,
194 Flip = 2, 194 Flip = 2,
195}; 195};
196 196
197enum OHingeStatus { 197enum OHingeStatus {
198 CASE_CLOSED = 3, 198 CASE_CLOSED = 3,
199 CASE_PORTRAIT = 2, 199 CASE_PORTRAIT = 2,
200 CASE_LANDSCAPE = 0, 200 CASE_LANDSCAPE = 0,
201 CASE_UNKNOWN = 1, 201 CASE_UNKNOWN = 1,
202}; 202};
203 203
204/* default button for qvfb or such 204/* default button for qvfb or such
205 * see odevice.cpp for details. 205 * see odevice.cpp for details.
206 * hint: manage a user defined button for qvfb? 206 * hint: manage a user defined button for qvfb?
207 * alwin 207 * alwin
208 */ 208 */
209struct default_button { 209struct default_button {
210 Qt::Key code; 210 Qt::Key code;
211 char *utext; 211 char *utext;
212 char *pix; 212 char *pix;
213 char *fpressedservice; 213 char *fpressedservice;
214 char *fpressedaction; 214 char *fpressedaction;
215 char *fheldservice; 215 char *fheldservice;
216 char *fheldaction; 216 char *fheldaction;
217}; 217};
218 218
219/** 219/**
220 * A singleton which gives informations about device specefic option 220 * A singleton which gives informations about device specefic option
221 * like the Hardware used, LEDs, the Base Distribution and 221 * like the Hardware used, LEDs, the Base Distribution and
222 * hardware key mappings. 222 * hardware key mappings.
223 * 223 *
224 * @short A small class for device specefic options 224 * @short A small class for device specific options
225 * @see QObject 225 * @see QObject
226 * @author Robert Griebl 226 * @author Robert Griebl
227 * @version 1.0 227 * @version 1.0
228 */ 228 */
229class ODevice : public QObject 229class ODevice : public QObject
230{ 230{
231 Q_OBJECT 231 Q_OBJECT
232 232
233private: 233private:
234 /* disable copy */ 234 /* disable copy */
235 ODevice ( const ODevice & ); 235 ODevice ( const ODevice & );
236 236
237protected: 237protected:
238 ODevice(); 238 ODevice();
239 virtual void init(const QString&); 239 virtual void init(const QString&);
240 virtual void initButtons(); 240 virtual void initButtons();
241 static void sendSuspendmsg(); 241 static void sendSuspendmsg();
242 242
243 ODeviceData *d; 243 ODeviceData *d;
244 244
245public: 245public:
246 // sandman do we want to allow destructions? -zecke? 246 // sandman do we want to allow destructions? -zecke?
247 virtual ~ODevice(); 247 virtual ~ODevice();
248 static ODevice *inst(); 248 static ODevice *inst();
249 249
250 // information 250 // information
251 QString modelString() const; 251 QString modelString() const;
252 OModel model() const; 252 OModel model() const;
253 inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); } 253 inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); }
254 254
255 QString vendorString() const; 255 QString vendorString() const;
256 OVendor vendor() const; 256 OVendor vendor() const;
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index a75f566..8a7e252 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -128,64 +128,65 @@ struct z_button z_buttons_6000 [] = {
128 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 128 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
129 "devicebuttons/z_home", 129 "devicebuttons/z_home",
130 "QPE/Launcher", "home()", 130 "QPE/Launcher", "home()",
131 "buttonsettings", "raise()" }, 131 "buttonsettings", "raise()" },
132 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 132 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
133 "devicebuttons/z_menu", 133 "devicebuttons/z_menu",
134 "QPE/TaskBar", "toggleMenu()", 134 "QPE/TaskBar", "toggleMenu()",
135 "QPE/TaskBar", "toggleStartMenu()" }, 135 "QPE/TaskBar", "toggleStartMenu()" },
136 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 136 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
137 "devicebuttons/z_mail", 137 "devicebuttons/z_mail",
138 "opiemail", "raise()", 138 "opiemail", "raise()",
139 "opiemail", "newMail()" }, 139 "opiemail", "newMail()" },
140 { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Rotate Button"), 140 { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Rotate Button"),
141 "devicebuttons/z_rotate", 141 "devicebuttons/z_rotate",
142 0, 142 0,
143 "QPE/Rotation", "rotateDefault()" }, 143 "QPE/Rotation", "rotateDefault()" },
144 { Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 144 { Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
145 "devicebuttons/z_hinge3", 145 "devicebuttons/z_hinge3",
146 "QPE/VMemo", "toggleRecord()", 146 "QPE/VMemo", "toggleRecord()",
147 "sound", "raise()" }, 147 "sound", "raise()" },
148}; 148};
149 149
150// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 150// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
151// class up into individual classes. We would need three classes 151// class up into individual classes. We would need three classes
152// 152//
153// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 153// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
154// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 154// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
155// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, C860, C3000, C1000, C3100) 155// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, C860, C3000, C1000, C3100)
156// Zaurus-Tosa (PXA-model w/ 480x640 lcd, for SL6000) 156// Zaurus-Tosa (PXA-model w/ 480x640 lcd, for SL6000)
157 157
158void Zaurus::init(const QString& cpu_info) 158void Zaurus::init(const QString& cpu_info)
159{ 159{
160 qDebug( "Zaurus::init()" );
160 // Set the time to wait until the system is really suspended 161 // Set the time to wait until the system is really suspended
161 // the delta between apm --suspend and sleeping 162 // the delta between apm --suspend and sleeping
162 setAPMTimeOut( 15000 ); 163 setAPMTimeOut( 15000 );
163 164
164 // generic distribution code already scanned /etc/issue at that point - 165 // generic distribution code already scanned /etc/issue at that point -
165 // embedix releases contain "Embedix <version> | Linux for Embedded Devices" 166 // embedix releases contain "Embedix <version> | Linux for Embedded Devices"
166 if ( d->m_sysverstr.contains( "embedix", false ) ) 167 if ( d->m_sysverstr.contains( "embedix", false ) )
167 { 168 {
168 d->m_vendorstr = "Sharp"; 169 d->m_vendorstr = "Sharp";
169 d->m_vendor = Vendor_Sharp; 170 d->m_vendor = Vendor_Sharp;
170 d->m_systemstr = "Zaurus"; 171 d->m_systemstr = "Zaurus";
171 d->m_system = System_Zaurus; 172 d->m_system = System_Zaurus;
172 m_embedix = true; 173 m_embedix = true;
173 } 174 }
174 else 175 else
175 { 176 {
176 d->m_vendorstr = "OpenZaurus Team"; 177 d->m_vendorstr = "OpenZaurus Team";
177 d->m_systemstr = "OpenZaurus"; 178 d->m_systemstr = "OpenZaurus";
178 d->m_system = System_OpenZaurus; 179 d->m_system = System_OpenZaurus;
179 // sysver already gathered 180 // sysver already gathered
180 181
181 // OpenZaurus sometimes uses the 2.4 (embedix) kernel, check if this is one 182 // OpenZaurus sometimes uses the 2.4 (embedix) kernel, check if this is one
182 FILE *uname = popen("uname -r", "r"); 183 FILE *uname = popen("uname -r", "r");
183 QFile f; 184 QFile f;
184 QString line; 185 QString line;
185 if ( f.open(IO_ReadOnly, uname) ) { 186 if ( f.open(IO_ReadOnly, uname) ) {
186 QTextStream ts ( &f ); 187 QTextStream ts ( &f );
187 line = ts.readLine(); 188 line = ts.readLine();
188 m_embedix = line.startsWith( "2.4." ); 189 m_embedix = line.startsWith( "2.4." );
189 f.close(); 190 f.close();
190 } 191 }
191 pclose(uname); 192 pclose(uname);
@@ -230,115 +231,116 @@ void Zaurus::init(const QString& cpu_info)
230 d->m_model = Model_Zaurus_SLC3100; 231 d->m_model = Model_Zaurus_SLC3100;
231 d->m_modelstr = "Zaurus SL-C3100"; 232 d->m_modelstr = "Zaurus SL-C3100";
232 } else { 233 } else {
233 d->m_model = Model_Zaurus_SL5500; 234 d->m_model = Model_Zaurus_SL5500;
234 d->m_modelstr = "Unknown Zaurus"; 235 d->m_modelstr = "Unknown Zaurus";
235 } 236 }
236 237
237 // set path to backlight device in kernel 2.6 238 // set path to backlight device in kernel 2.6
238 switch ( d->m_model ) 239 switch ( d->m_model )
239 { 240 {
240 case Model_Zaurus_SLB600: // fallthrough 241 case Model_Zaurus_SLB600: // fallthrough
241 case Model_Zaurus_SL5500: 242 case Model_Zaurus_SL5500:
242 m_backlightdev = "/sys/class/backlight/locomo-backlight/"; 243 m_backlightdev = "/sys/class/backlight/locomo-backlight/";
243 break; 244 break;
244 case Model_Zaurus_SL6000: 245 case Model_Zaurus_SL6000:
245 m_backlightdev = "/sys/class/backlight/tosa-bl/"; 246 m_backlightdev = "/sys/class/backlight/tosa-bl/";
246 break; 247 break;
247 default: 248 default:
248 m_backlightdev = "/sys/class/backlight/corgi-bl/"; 249 m_backlightdev = "/sys/class/backlight/corgi-bl/";
249 } 250 }
250 251
251 // set initial rotation 252 // set initial rotation
252 switch( d->m_model ) 253 switch( d->m_model )
253 { 254 {
254 case Model_Zaurus_SL6000: // fallthrough 255 case Model_Zaurus_SL6000: // fallthrough
255 case Model_Zaurus_SLA300: 256 case Model_Zaurus_SLA300:
256 d->m_rotation = Rot0; 257 d->m_rotation = Rot0;
257 break; 258 break;
258 case Model_Zaurus_SLC3100: // fallthrough 259 case Model_Zaurus_SLC3100: // fallthrough
259 case Model_Zaurus_SLC3000: // fallthrough 260 case Model_Zaurus_SLC3000: // fallthrough
260 case Model_Zaurus_SLC1000: // fallthrough 261 case Model_Zaurus_SLC1000: // fallthrough
261 case Model_Zaurus_SLC7x0: 262 case Model_Zaurus_SLC7x0:
263 initHingeSensor();
262 d->m_rotation = rotation(); 264 d->m_rotation = rotation();
263 d->m_direction = direction(); 265 d->m_direction = direction();
264 break; 266 break;
265 case Model_Zaurus_SLB600: // fallthrough 267 case Model_Zaurus_SLB600: // fallthrough
266 case Model_Zaurus_SL5000: // fallthrough 268 case Model_Zaurus_SL5000: // fallthrough
267 case Model_Zaurus_SL5500: // fallthrough 269 case Model_Zaurus_SL5500: // fallthrough
268 default: 270 default:
269 d->m_rotation = Rot270; 271 d->m_rotation = Rot270;
270 } 272 }
271 273
272 // set default qte driver 274 // set default qte driver
273 switch( d->m_model ) 275 switch( d->m_model )
274 { 276 {
275 case Model_Zaurus_SLC7x0: 277 case Model_Zaurus_SLC7x0:
276 d->m_qteDriver = "W100"; 278 d->m_qteDriver = "W100";
277 break; 279 break;
278 default: 280 default:
279 d->m_qteDriver = "Transformed"; 281 d->m_qteDriver = "Transformed";
280 } 282 }
281 283
282 m_leds[0] = Led_Off; 284 m_leds[0] = Led_Off;
283 285
284 if ( m_embedix ) 286 if ( m_embedix )
285 qDebug( "Zaurus::init() - Using the 2.4 Embedix HAL on a %s", (const char*) d->m_modelstr ); 287 qDebug( "Zaurus::init() - Using the 2.4 Embedix HAL on a %s", (const char*) d->m_modelstr );
286 else 288 else
287 qDebug( "Zaurus::init() - Using the 2.6 OpenZaurus HAL on a %s", (const char*) d->m_modelstr ); 289 qDebug( "Zaurus::init() - Using the 2.6 OpenZaurus HAL on a %s", (const char*) d->m_modelstr );
288} 290}
289 291
290void Zaurus::initButtons() 292void Zaurus::initButtons()
291{ 293{
294 qDebug( "Zaurus::initButtons()" );
292 if ( d->m_buttons ) 295 if ( d->m_buttons )
293 return; 296 return;
294 297
295 d->m_buttons = new QValueList <ODeviceButton>; 298 d->m_buttons = new QValueList <ODeviceButton>;
296 299
297 struct z_button * pz_buttons; 300 struct z_button * pz_buttons;
298 int buttoncount; 301 int buttoncount;
299 switch ( d->m_model ) 302 switch ( d->m_model )
300 { 303 {
301 case Model_Zaurus_SL6000: 304 case Model_Zaurus_SL6000:
302 pz_buttons = z_buttons_6000; 305 pz_buttons = z_buttons_6000;
303 buttoncount = ARRAY_SIZE(z_buttons_6000); 306 buttoncount = ARRAY_SIZE(z_buttons_6000);
304 break; 307 break;
305 case Model_Zaurus_SLC3100: // fallthrough 308 case Model_Zaurus_SLC3100: // fallthrough
306 case Model_Zaurus_SLC3000: // fallthrough 309 case Model_Zaurus_SLC3000: // fallthrough
307 case Model_Zaurus_SLC1000: // fallthrough 310 case Model_Zaurus_SLC1000: // fallthrough
308 case Model_Zaurus_SLC7x0: 311 case Model_Zaurus_SLC7x0:
309 if ( isQWS( ) ) 312 if ( isQWS( ) )
310 { // setup hinge sensor stuff 313 {
311 addPreHandler(this); 314 addPreHandler(this);
312 initHingeSensor();
313 } 315 }
314 pz_buttons = z_buttons_c700; 316 pz_buttons = z_buttons_c700;
315 buttoncount = ARRAY_SIZE(z_buttons_c700); 317 buttoncount = ARRAY_SIZE(z_buttons_c700);
316 break; 318 break;
317 default: 319 default:
318 pz_buttons = z_buttons; 320 pz_buttons = z_buttons;
319 buttoncount = ARRAY_SIZE(z_buttons); 321 buttoncount = ARRAY_SIZE(z_buttons);
320 break; 322 break;
321 } 323 }
322 324
323 for ( int i = 0; i < buttoncount; i++ ) { 325 for ( int i = 0; i < buttoncount; i++ ) {
324 struct z_button *zb = pz_buttons + i; 326 struct z_button *zb = pz_buttons + i;
325 ODeviceButton b; 327 ODeviceButton b;
326 328
327 b.setKeycode( zb->code ); 329 b.setKeycode( zb->code );
328 b.setUserText( QObject::tr( "Button", zb->utext )); 330 b.setUserText( QObject::tr( "Button", zb->utext ));
329 b.setPixmap( OResource::loadPixmap( zb->pix )); 331 b.setPixmap( OResource::loadPixmap( zb->pix ));
330 b.setFactoryPresetPressedAction( OQCopMessage( makeChannel ( zb->fpressedservice ), zb->fpressedaction )); 332 b.setFactoryPresetPressedAction( OQCopMessage( makeChannel ( zb->fpressedservice ), zb->fpressedaction ));
331 b.setFactoryPresetHeldAction( OQCopMessage( makeChannel ( zb->fheldservice ), zb->fheldaction )); 333 b.setFactoryPresetHeldAction( OQCopMessage( makeChannel ( zb->fheldservice ), zb->fheldaction ));
332 d->m_buttons->append( b ); 334 d->m_buttons->append( b );
333 } 335 }
334 336
335 reloadButtonMapping(); 337 reloadButtonMapping();
336} 338}
337 339
338 340
339 341
340typedef struct sharp_led_status { 342typedef struct sharp_led_status {
341 int which; /* select which LED status is wanted. */ 343 int which; /* select which LED status is wanted. */
342 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 344 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
343} sharp_led_status; 345} sharp_led_status;
344 346
@@ -572,64 +574,65 @@ Transformation Zaurus::rotation() const
572 574
573 // SLC7x0 needs a special case here, because we were able to set the W100 575 // SLC7x0 needs a special case here, because we were able to set the W100
574 // hardware default rotation on kernel 2.6 to Rot0 576 // hardware default rotation on kernel 2.6 to Rot0
575 case Model_Zaurus_SLC7x0: 577 case Model_Zaurus_SLC7x0:
576 { 578 {
577 OHingeStatus hs = readHingeSensor(); 579 OHingeStatus hs = readHingeSensor();
578 qDebug( "Zaurus::rotation() - hinge sensor = %d", (int) hs ); 580 qDebug( "Zaurus::rotation() - hinge sensor = %d", (int) hs );
579 581
580 if ( m_embedix ) 582 if ( m_embedix )
581 { 583 {
582 if ( hs == CASE_PORTRAIT ) rot = Rot0; 584 if ( hs == CASE_PORTRAIT ) rot = Rot0;
583 else if ( hs == CASE_UNKNOWN ) rot = Rot270; 585 else if ( hs == CASE_UNKNOWN ) rot = Rot270;
584 else rot = Rot270; 586 else rot = Rot270;
585 } 587 }
586 else 588 else
587 { 589 {
588 if ( hs == CASE_PORTRAIT ) rot = Rot90; 590 if ( hs == CASE_PORTRAIT ) rot = Rot90;
589 else if ( hs == CASE_UNKNOWN ) rot = Rot0; 591 else if ( hs == CASE_UNKNOWN ) rot = Rot0;
590 else rot = Rot0; 592 else rot = Rot0;
591 } 593 }
592 } 594 }
593 break; 595 break;
594 case Model_Zaurus_SL6000: 596 case Model_Zaurus_SL6000:
595 case Model_Zaurus_SLB600: 597 case Model_Zaurus_SLB600:
596 case Model_Zaurus_SLA300: 598 case Model_Zaurus_SLA300:
597 case Model_Zaurus_SL5500: 599 case Model_Zaurus_SL5500:
598 case Model_Zaurus_SL5000: 600 case Model_Zaurus_SL5000:
599 default: 601 default:
600 rot = d->m_rotation; 602 rot = d->m_rotation;
601 break; 603 break;
602 } 604 }
603 605
606 qDebug( "Zaurus::rotation() - returning '%d'", rot );
604 return rot; 607 return rot;
605} 608}
606ODirection Zaurus::direction() const 609ODirection Zaurus::direction() const
607{ 610{
608 ODirection dir; 611 ODirection dir;
609 612
610 switch ( d->m_model ) { 613 switch ( d->m_model ) {
611 case Model_Zaurus_SLC3100: // fallthrough 614 case Model_Zaurus_SLC3100: // fallthrough
612 case Model_Zaurus_SLC3000: // fallthrough 615 case Model_Zaurus_SLC3000: // fallthrough
613 case Model_Zaurus_SLC1000: // fallthrough 616 case Model_Zaurus_SLC1000: // fallthrough
614 case Model_Zaurus_SLC7x0: { 617 case Model_Zaurus_SLC7x0: {
615 OHingeStatus hs = readHingeSensor(); 618 OHingeStatus hs = readHingeSensor();
616 if ( hs == CASE_PORTRAIT ) dir = CCW; 619 if ( hs == CASE_PORTRAIT ) dir = CCW;
617 else if ( hs == CASE_UNKNOWN ) dir = CCW; 620 else if ( hs == CASE_UNKNOWN ) dir = CCW;
618 else dir = CW; 621 else dir = CW;
619 } 622 }
620 break; 623 break;
621 case Model_Zaurus_SL6000: 624 case Model_Zaurus_SL6000:
622 case Model_Zaurus_SLA300: 625 case Model_Zaurus_SLA300:
623 case Model_Zaurus_SLB600: 626 case Model_Zaurus_SLB600:
624 case Model_Zaurus_SL5500: 627 case Model_Zaurus_SL5500:
625 case Model_Zaurus_SL5000: 628 case Model_Zaurus_SL5000:
626 default: dir = d->m_direction; 629 default: dir = d->m_direction;
627 break; 630 break;
628 } 631 }
629 return dir; 632 return dir;
630 633
631} 634}
632 635
633bool Zaurus::hasHingeSensor() const 636bool Zaurus::hasHingeSensor() const
634{ 637{
635 return d->m_model == Model_Zaurus_SLC7x0 || 638 return d->m_model == Model_Zaurus_SLC7x0 ||
@@ -676,88 +679,97 @@ OHingeStatus Zaurus::readHingeSensor() const
676 * | 0 0 Landscape | 679 * | 0 0 Landscape |
677 * | 0 1 Portrait | 680 * | 0 1 Portrait |
678 * | 1 0 Unknown | 681 * | 1 0 Unknown |
679 * | 1 1 Closed | 682 * | 1 1 Closed |
680 * ------------------------- 683 * -------------------------
681 */ 684 */
682 OInputDevice* keyboard = OInputSystem::instance()->device( "event0" ); 685 OInputDevice* keyboard = OInputSystem::instance()->device( "event0" );
683 bool switch0 = true; 686 bool switch0 = true;
684 bool switch1 = false; 687 bool switch1 = false;
685 if ( keyboard ) 688 if ( keyboard )
686 { 689 {
687 switch0 = keyboard->isHeld( OInputDevice::Switch0 ); 690 switch0 = keyboard->isHeld( OInputDevice::Switch0 );
688 switch1 = keyboard->isHeld( OInputDevice::Switch1 ); 691 switch1 = keyboard->isHeld( OInputDevice::Switch1 );
689 } 692 }
690 if ( switch0 ) 693 if ( switch0 )
691 { 694 {
692 return switch1 ? CASE_CLOSED : CASE_UNKNOWN; 695 return switch1 ? CASE_CLOSED : CASE_UNKNOWN;
693 } 696 }
694 else 697 else
695 { 698 {
696 return switch1 ? CASE_PORTRAIT : CASE_LANDSCAPE; 699 return switch1 ? CASE_PORTRAIT : CASE_LANDSCAPE;
697 } 700 }
698 } 701 }
699} 702}
700 703
701void Zaurus::initHingeSensor() 704void Zaurus::initHingeSensor()
702{ 705{
703 if ( m_embedix ) return; 706 if ( m_embedix ) return;
704 707
705 m_hinge.setName( "/dev/input/event0" ); 708 m_hinge.setName( "/dev/input/event0" );
706 if ( !m_hinge.open( IO_ReadOnly ) ) 709 if ( !m_hinge.open( IO_ReadOnly ) )
707 { 710 {
708 qDebug( "Zaurus::init() - Couldn't open /dev/input/event0 for read (%s)", strerror( errno ) ); 711 qWarning( "Zaurus::init() - Couldn't open /dev/input/event0 for read (%s)", strerror( errno ) );
709 return; 712 return;
710 } 713 }
711 714
712 QSocketNotifier* sn = new QSocketNotifier( m_hinge.handle(), QSocketNotifier::Read, this ); 715 QSocketNotifier* sn = new QSocketNotifier( m_hinge.handle(), QSocketNotifier::Read, this );
713 QObject::connect( sn, SIGNAL(activated(int)), this, SLOT(hingeSensorTriggered()) ); 716 QObject::connect( sn, SIGNAL(activated(int)), this, SLOT(hingeSensorTriggered()) );
717
718 qDebug( "Zaurus::init() - Hinge Sensor Initialization successfully completed" );
714} 719}
715 720
716void Zaurus::hingeSensorTriggered() 721void Zaurus::hingeSensorTriggered()
717{ 722{
718 qDebug( "Zaurus::hingeSensorTriggered() - got event" ); 723 qDebug( "Zaurus::hingeSensorTriggered() - got event" );
719 struct input_event e; 724 struct input_event e;
720 if ( ::read( m_hinge.handle(), &e, sizeof e ) > 0 ) 725 if ( ::read( m_hinge.handle(), &e, sizeof e ) > 0 )
721 { 726 {
722 qDebug( "Zaurus::hingeSensorTriggered() - event has type %d, code %d, value %d", e.type, e.code, e.value ); 727 qDebug( "Zaurus::hingeSensorTriggered() - event has type %d, code %d, value %d", e.type, e.code, e.value );
723 if ( e.type != EV_SW ) return; 728 if ( e.type != EV_SW ) return;
724 if ( readHingeSensor() != CASE_UNKNOWN ) 729 if ( readHingeSensor() != CASE_UNKNOWN )
725 { 730 {
726 qDebug( "Zaurus::hingeSensorTriggered() - got valid switch event, calling rotateDefault()" ); 731 qDebug( "Zaurus::hingeSensorTriggered() - got valid switch event, calling rotateDefault()" );
727 QCopChannel::send( "QPE/Rotation", "rotateDefault()" ); 732 QCopChannel::send( "QPE/Rotation", "rotateDefault()" );
728 } 733 }
729 } 734 }
730} 735}
731 736
737void Zaurus::systemMessage( const QCString &msg, const QByteArray & )
738{
739 if ( msg == "deviceButtonMappingChanged()" ) {
740 reloadButtonMapping();
741 }
742}
743
732/* 744/*
733 * Take code from iPAQ device. 745 * Take code from iPAQ device.
734 * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. 746 * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction.
735 * I hope that is ok - Alwin 747 * I hope that is ok - Alwin
736 */ 748 */
737bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 749bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
738{ 750{
739 int newkeycode = keycode; 751 int newkeycode = keycode;
740 752
741 if ( !hasHingeSensor() ) return false; 753 if ( !hasHingeSensor() ) return false;
742 754
743 /* map cursor keys depending on the hinge status */ 755 /* map cursor keys depending on the hinge status */
744 switch ( keycode ) { 756 switch ( keycode ) {
745 // Rotate cursor keys 757 // Rotate cursor keys
746 case Key_Left : 758 case Key_Left :
747 case Key_Right: 759 case Key_Right:
748 case Key_Up : 760 case Key_Up :
749 case Key_Down : 761 case Key_Down :
750 { 762 {
751 if (rotation()==Rot90) { 763 if (rotation()==Rot90) {
752 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; 764 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
753 } 765 }
754 } 766 }
755 break; 767 break;
756 768
757 } 769 }
758 if (newkeycode!=keycode) { 770 if (newkeycode!=keycode) {
759 if ( newkeycode != Key_unknown ) { 771 if ( newkeycode != Key_unknown ) {
760 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 772 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
761 } 773 }
762 return true; 774 return true;
763 } 775 }
diff --git a/libopie2/opiecore/device/odevice_zaurus.h b/libopie2/opiecore/device/odevice_zaurus.h
index bf30bc6..8a66f9c 100644
--- a/libopie2/opiecore/device/odevice_zaurus.h
+++ b/libopie2/opiecore/device/odevice_zaurus.h
@@ -68,71 +68,74 @@
68#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 68#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
69#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 69#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
70 70
71#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 71#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
72#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 72#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
73#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 73#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
74 74
75// Rotation and Power Management 75// Rotation and Power Management
76#define SHARP_IOCTL_GET_ROTATION 0x413c 76#define SHARP_IOCTL_GET_ROTATION 0x413c
77 77
78#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 78#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
79#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 79#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
80#define APM_EVT_POWER_BUTTON (1 << 0) 80#define APM_EVT_POWER_BUTTON (1 << 0)
81 81
82// Brightness Embedix 82// Brightness Embedix
83#define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl" 83#define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl"
84#define SHARP_FL_IOCTL_ON 1 84#define SHARP_FL_IOCTL_ON 1
85#define SHARP_FL_IOCTL_OFF 2 85#define SHARP_FL_IOCTL_OFF 2
86#define SHARP_FL_IOCTL_STEP_CONTRAST 100 86#define SHARP_FL_IOCTL_STEP_CONTRAST 100
87#define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101 87#define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101
88#define SHARP_FL_IOCTL_GET_STEP 102 88#define SHARP_FL_IOCTL_GET_STEP 102
89 89
90// Vesa Standard 90// Vesa Standard
91#define FB_BLANK_UNBLANK 0 91#define FB_BLANK_UNBLANK 0
92#define FB_BLANK_POWERDOWN 4 92#define FB_BLANK_POWERDOWN 4
93 93
94namespace Opie { 94namespace Opie {
95namespace Core { 95namespace Core {
96namespace Internal { 96namespace Internal {
97 97
98class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter 98class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter
99{ 99{
100 Q_OBJECT
101
100 protected: 102 protected:
101 virtual void init(const QString&); 103 virtual void init(const QString&);
102 virtual void initButtons(); 104 virtual void initButtons();
103 void initHingeSensor(); 105 void initHingeSensor();
104 106
105 protected slots: 107 protected slots:
106 void hingeSensorTriggered(); 108 void hingeSensorTriggered();
109 void systemMessage( const QCString &msg, const QByteArray & );
107 110
108 public: 111 public:
109 virtual bool setDisplayBrightness( int b ); 112 virtual bool setDisplayBrightness( int b );
110 virtual bool setDisplayStatus( bool on ); 113 virtual bool setDisplayStatus( bool on );
111 virtual int displayBrightnessResolution() const; 114 virtual int displayBrightnessResolution() const;
112 115
113 virtual void playAlarmSound(); 116 virtual void playAlarmSound();
114 virtual void playKeySound(); 117 virtual void playKeySound();
115 virtual void playTouchSound(); 118 virtual void playTouchSound();
116 119
117 virtual QValueList <OLed> ledList() const; 120 virtual QValueList <OLed> ledList() const;
118 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 121 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
119 virtual OLedState ledState( OLed led ) const; 122 virtual OLedState ledState( OLed led ) const;
120 virtual bool setLedState( OLed led, OLedState st ); 123 virtual bool setLedState( OLed led, OLedState st );
121 124
122 virtual bool hasHingeSensor() const; 125 virtual bool hasHingeSensor() const;
123 virtual OHingeStatus readHingeSensor() const; 126 virtual OHingeStatus readHingeSensor() const;
124 127
125 virtual Transformation rotation() const; 128 virtual Transformation rotation() const;
126 virtual ODirection direction() const; 129 virtual ODirection direction() const;
127 virtual bool suspend(); 130 virtual bool suspend();
128 131
129 protected: 132 protected:
130 virtual void buzzer( int snd ); 133 virtual void buzzer( int snd );
131 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 134 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
132 135
133 QString m_backlightdev; 136 QString m_backlightdev;
134 OLedState m_leds[1]; 137 OLedState m_leds[1];
135 bool m_embedix; 138 bool m_embedix;
136 QFile m_hinge; 139 QFile m_hinge;
137}; 140};
138 141