summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
authormickeyl <mickeyl>2003-05-07 13:44:23 (UTC)
committer mickeyl <mickeyl>2003-05-07 13:44:23 (UTC)
commit4619398b4712062e65d1919156edea38785c590e (patch) (unidiff)
tree4d00604960974ca16f9d40468bce4c096e2a76b0 /libopie/odevice.cpp
parent83f53eede83728c131b1134ae0a674a7d8f6f00a (diff)
downloadopie-4619398b4712062e65d1919156edea38785c590e.zip
opie-4619398b4712062e65d1919156edea38785c590e.tar.gz
opie-4619398b4712062e65d1919156edea38785c590e.tar.bz2
fix bug kergoth introduced in rev 1.43
fd was an integer static to the function which means that the assignment only happens once. This is ok, when we don't close the device, but not if we close it after usage. Thanks to eilers for confirming! I wonder why noone else spotted this...
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 62e3569..7d862cd 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -283,1160 +283,1160 @@ ODevice::ODevice ( )
283 283
284 d-> m_holdtime = 1000; // 1000ms 284 d-> m_holdtime = 1000; // 1000ms
285 d-> m_buttons = 0; 285 d-> m_buttons = 0;
286} 286}
287 287
288void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 288void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
289{ 289{
290 if ( msg == "deviceButtonMappingChanged()" ) { 290 if ( msg == "deviceButtonMappingChanged()" ) {
291 reloadButtonMapping ( ); 291 reloadButtonMapping ( );
292 } 292 }
293} 293}
294 294
295void ODevice::init ( ) 295void ODevice::init ( )
296{ 296{
297} 297}
298 298
299/** 299/**
300 * This method initialises the button mapping 300 * This method initialises the button mapping
301 */ 301 */
302void ODevice::initButtons ( ) 302void ODevice::initButtons ( )
303{ 303{
304 if ( d-> m_buttons ) 304 if ( d-> m_buttons )
305 return; 305 return;
306 306
307 // Simulation uses iPAQ 3660 device buttons 307 // Simulation uses iPAQ 3660 device buttons
308 308
309 qDebug ( "init Buttons" ); 309 qDebug ( "init Buttons" );
310 d-> m_buttons = new QValueList <ODeviceButton>; 310 d-> m_buttons = new QValueList <ODeviceButton>;
311 311
312 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 312 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
313 i_button *ib = ipaq_buttons + i; 313 i_button *ib = ipaq_buttons + i;
314 ODeviceButton b; 314 ODeviceButton b;
315 315
316 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 316 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
317 b. setKeycode ( ib-> code ); 317 b. setKeycode ( ib-> code );
318 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 318 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
319 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 319 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
320 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 320 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
321 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 321 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
322 d-> m_buttons-> append ( b ); 322 d-> m_buttons-> append ( b );
323 } 323 }
324 } 324 }
325 reloadButtonMapping ( ); 325 reloadButtonMapping ( );
326 326
327 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 327 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
328 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 328 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
329} 329}
330 330
331ODevice::~ODevice ( ) 331ODevice::~ODevice ( )
332{ 332{
333 delete d; 333 delete d;
334} 334}
335 335
336bool ODevice::setSoftSuspend ( bool /*soft*/ ) 336bool ODevice::setSoftSuspend ( bool /*soft*/ )
337{ 337{
338 return false; 338 return false;
339} 339}
340 340
341//#include <linux/apm_bios.h> 341//#include <linux/apm_bios.h>
342 342
343#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 343#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
344 344
345/** 345/**
346 * This method will try to suspend the device 346 * This method will try to suspend the device
347 * It only works if the user is the QWS Server and the apm application 347 * It only works if the user is the QWS Server and the apm application
348 * is installed. 348 * is installed.
349 * It tries to suspend and then waits some time cause some distributions 349 * It tries to suspend and then waits some time cause some distributions
350 * do have asynchronus apm implementations. 350 * do have asynchronus apm implementations.
351 * This method will either fail and return false or it'll suspend the 351 * This method will either fail and return false or it'll suspend the
352 * device and return once the device got woken up 352 * device and return once the device got woken up
353 * 353 *
354 * @return if the device got suspended 354 * @return if the device got suspended
355 */ 355 */
356bool ODevice::suspend ( ) 356bool ODevice::suspend ( )
357{ 357{
358 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 358 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
359 return false; 359 return false;
360 360
361 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 361 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
362 return false; 362 return false;
363 363
364 bool res = false; 364 bool res = false;
365 365
366 struct timeval tvs, tvn; 366 struct timeval tvs, tvn;
367 ::gettimeofday ( &tvs, 0 ); 367 ::gettimeofday ( &tvs, 0 );
368 368
369 ::sync ( ); // flush fs caches 369 ::sync ( ); // flush fs caches
370 res = ( ::system ( "apm --suspend" ) == 0 ); 370 res = ( ::system ( "apm --suspend" ) == 0 );
371 371
372 // This is needed because the iPAQ apm implementation is asynchronous and we 372 // This is needed because the iPAQ apm implementation is asynchronous and we
373 // can not be sure when exactly the device is really suspended 373 // can not be sure when exactly the device is really suspended
374 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 374 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
375 375
376 if ( res ) { 376 if ( res ) {
377 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 377 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
378 ::usleep ( 200 * 1000 ); 378 ::usleep ( 200 * 1000 );
379 ::gettimeofday ( &tvn, 0 ); 379 ::gettimeofday ( &tvn, 0 );
380 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 380 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
381 } 381 }
382 382
383 return res; 383 return res;
384} 384}
385 385
386//#include <linux/fb.h> better not rely on kernel headers in userspace ... 386//#include <linux/fb.h> better not rely on kernel headers in userspace ...
387 387
388#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 388#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
389 389
390/* VESA Blanking Levels */ 390/* VESA Blanking Levels */
391#define VESA_NO_BLANKING 0 391#define VESA_NO_BLANKING 0
392#define VESA_VSYNC_SUSPEND 1 392#define VESA_VSYNC_SUSPEND 1
393#define VESA_HSYNC_SUSPEND 2 393#define VESA_HSYNC_SUSPEND 2
394#define VESA_POWERDOWN 3 394#define VESA_POWERDOWN 3
395 395
396/** 396/**
397 * This sets the display on or off 397 * This sets the display on or off
398 */ 398 */
399bool ODevice::setDisplayStatus ( bool on ) 399bool ODevice::setDisplayStatus ( bool on )
400{ 400{
401 if ( d-> m_model == Model_Unknown ) 401 if ( d-> m_model == Model_Unknown )
402 return false; 402 return false;
403 403
404 bool res = false; 404 bool res = false;
405 int fd; 405 int fd;
406 406
407 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 407 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
408 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 408 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
409 ::close ( fd ); 409 ::close ( fd );
410 } 410 }
411 return res; 411 return res;
412} 412}
413 413
414/** 414/**
415 * This sets the display brightness 415 * This sets the display brightness
416 * @return success or failure 416 * @return success or failure
417 */ 417 */
418bool ODevice::setDisplayBrightness ( int p) 418bool ODevice::setDisplayBrightness ( int p)
419{ 419{
420 Q_UNUSED( p ) 420 Q_UNUSED( p )
421 return false; 421 return false;
422} 422}
423 423
424int ODevice::displayBrightnessResolution ( ) const 424int ODevice::displayBrightnessResolution ( ) const
425{ 425{
426 return 16; 426 return 16;
427} 427}
428 428
429/** 429/**
430 * This returns the vendor as string 430 * This returns the vendor as string
431 * @return Vendor as QString 431 * @return Vendor as QString
432 */ 432 */
433QString ODevice::vendorString ( ) const 433QString ODevice::vendorString ( ) const
434{ 434{
435 return d-> m_vendorstr; 435 return d-> m_vendorstr;
436} 436}
437 437
438/** 438/**
439 * This returns the vendor as one of the values of OVendor 439 * This returns the vendor as one of the values of OVendor
440 * @return OVendor 440 * @return OVendor
441 */ 441 */
442OVendor ODevice::vendor ( ) const 442OVendor ODevice::vendor ( ) const
443{ 443{
444 return d-> m_vendor; 444 return d-> m_vendor;
445} 445}
446 446
447/** 447/**
448 * This returns the model as a string 448 * This returns the model as a string
449 * @return A string representing the model 449 * @return A string representing the model
450 */ 450 */
451QString ODevice::modelString ( ) const 451QString ODevice::modelString ( ) const
452{ 452{
453 return d-> m_modelstr; 453 return d-> m_modelstr;
454} 454}
455 455
456/** 456/**
457 * This does return the OModel used 457 * This does return the OModel used
458 */ 458 */
459OModel ODevice::model ( ) const 459OModel ODevice::model ( ) const
460{ 460{
461 return d-> m_model; 461 return d-> m_model;
462} 462}
463 463
464/** 464/**
465 * This does return the systen name 465 * This does return the systen name
466 */ 466 */
467QString ODevice::systemString ( ) const 467QString ODevice::systemString ( ) const
468{ 468{
469 return d-> m_systemstr; 469 return d-> m_systemstr;
470} 470}
471 471
472/** 472/**
473 * Return System as OSystem value 473 * Return System as OSystem value
474 */ 474 */
475OSystem ODevice::system ( ) const 475OSystem ODevice::system ( ) const
476{ 476{
477 return d-> m_system; 477 return d-> m_system;
478} 478}
479 479
480/** 480/**
481 * @return the version string of the base system 481 * @return the version string of the base system
482 */ 482 */
483QString ODevice::systemVersionString ( ) const 483QString ODevice::systemVersionString ( ) const
484{ 484{
485 return d-> m_sysverstr; 485 return d-> m_sysverstr;
486} 486}
487 487
488/** 488/**
489 * @return the current Transformation 489 * @return the current Transformation
490 */ 490 */
491Transformation ODevice::rotation ( ) const 491Transformation ODevice::rotation ( ) const
492{ 492{
493 return d-> m_rotation; 493 return d-> m_rotation;
494} 494}
495 495
496/** 496/**
497 * @return the current rotation direction 497 * @return the current rotation direction
498 */ 498 */
499ODirection ODevice::direction ( ) const 499ODirection ODevice::direction ( ) const
500{ 500{
501 return d-> m_direction; 501 return d-> m_direction;
502} 502}
503 503
504/** 504/**
505 * This plays an alarmSound 505 * This plays an alarmSound
506 */ 506 */
507void ODevice::alarmSound ( ) 507void ODevice::alarmSound ( )
508{ 508{
509#ifndef QT_NO_SOUND 509#ifndef QT_NO_SOUND
510 static Sound snd ( "alarm" ); 510 static Sound snd ( "alarm" );
511 511
512 if ( snd. isFinished ( )) 512 if ( snd. isFinished ( ))
513 snd. play ( ); 513 snd. play ( );
514#endif 514#endif
515} 515}
516 516
517/** 517/**
518 * This plays a key sound 518 * This plays a key sound
519 */ 519 */
520void ODevice::keySound ( ) 520void ODevice::keySound ( )
521{ 521{
522#ifndef QT_NO_SOUND 522#ifndef QT_NO_SOUND
523 static Sound snd ( "keysound" ); 523 static Sound snd ( "keysound" );
524 524
525 if ( snd. isFinished ( )) 525 if ( snd. isFinished ( ))
526 snd. play ( ); 526 snd. play ( );
527#endif 527#endif
528} 528}
529 529
530/** 530/**
531 * This plays a touch sound 531 * This plays a touch sound
532 */ 532 */
533void ODevice::touchSound ( ) 533void ODevice::touchSound ( )
534{ 534{
535 535
536#ifndef QT_NO_SOUND 536#ifndef QT_NO_SOUND
537 static Sound snd ( "touchsound" ); 537 static Sound snd ( "touchsound" );
538 538
539 if ( snd. isFinished ( )) 539 if ( snd. isFinished ( ))
540 snd. play ( ); 540 snd. play ( );
541#endif 541#endif
542} 542}
543 543
544/** 544/**
545 * This method will return a list of leds 545 * This method will return a list of leds
546 * available on this device 546 * available on this device
547 * @return a list of LEDs. 547 * @return a list of LEDs.
548 */ 548 */
549QValueList <OLed> ODevice::ledList ( ) const 549QValueList <OLed> ODevice::ledList ( ) const
550{ 550{
551 return QValueList <OLed> ( ); 551 return QValueList <OLed> ( );
552} 552}
553 553
554/** 554/**
555 * This does return the state of the LEDs 555 * This does return the state of the LEDs
556 */ 556 */
557QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const 557QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const
558{ 558{
559 return QValueList <OLedState> ( ); 559 return QValueList <OLedState> ( );
560} 560}
561 561
562/** 562/**
563 * @return the state for a given OLed 563 * @return the state for a given OLed
564 */ 564 */
565OLedState ODevice::ledState ( OLed /*which*/ ) const 565OLedState ODevice::ledState ( OLed /*which*/ ) const
566{ 566{
567 return Led_Off; 567 return Led_Off;
568} 568}
569 569
570/** 570/**
571 * Set the state for a LED 571 * Set the state for a LED
572 * @param which Which OLed to use 572 * @param which Which OLed to use
573 * @param st The state to set 573 * @param st The state to set
574 * @return success or failure 574 * @return success or failure
575 */ 575 */
576bool ODevice::setLedState ( OLed which, OLedState st ) 576bool ODevice::setLedState ( OLed which, OLedState st )
577{ 577{
578 Q_UNUSED( which ) 578 Q_UNUSED( which )
579 Q_UNUSED( st ) 579 Q_UNUSED( st )
580 return false; 580 return false;
581} 581}
582 582
583/** 583/**
584 * @return if the device has a light sensor 584 * @return if the device has a light sensor
585 */ 585 */
586bool ODevice::hasLightSensor ( ) const 586bool ODevice::hasLightSensor ( ) const
587{ 587{
588 return false; 588 return false;
589} 589}
590 590
591/** 591/**
592 * @return a value from the light senso 592 * @return a value from the light senso
593 */ 593 */
594int ODevice::readLightSensor ( ) 594int ODevice::readLightSensor ( )
595{ 595{
596 return -1; 596 return -1;
597} 597}
598 598
599/** 599/**
600 * @return the light sensor resolution whatever that is ;) 600 * @return the light sensor resolution whatever that is ;)
601 */ 601 */
602int ODevice::lightSensorResolution ( ) const 602int ODevice::lightSensorResolution ( ) const
603{ 603{
604 return 0; 604 return 0;
605} 605}
606 606
607/** 607/**
608 * @return a list of hardware buttons 608 * @return a list of hardware buttons
609 */ 609 */
610const QValueList <ODeviceButton> &ODevice::buttons ( ) 610const QValueList <ODeviceButton> &ODevice::buttons ( )
611{ 611{
612 initButtons ( ); 612 initButtons ( );
613 613
614 return *d-> m_buttons; 614 return *d-> m_buttons;
615} 615}
616 616
617/** 617/**
618 * @return The amount of time that would count as a hold 618 * @return The amount of time that would count as a hold
619 */ 619 */
620uint ODevice::buttonHoldTime ( ) const 620uint ODevice::buttonHoldTime ( ) const
621{ 621{
622 return d-> m_holdtime; 622 return d-> m_holdtime;
623} 623}
624 624
625/** 625/**
626 * This method return a ODeviceButton for a key code 626 * This method return a ODeviceButton for a key code
627 * or 0 if no special hardware button is available for the device 627 * or 0 if no special hardware button is available for the device
628 * 628 *
629 * @return The devicebutton or 0l 629 * @return The devicebutton or 0l
630 * @see ODeviceButton 630 * @see ODeviceButton
631 */ 631 */
632const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 632const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
633{ 633{
634 initButtons ( ); 634 initButtons ( );
635 635
636 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) { 636 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) {
637 if ( (*it). keycode ( ) == code ) 637 if ( (*it). keycode ( ) == code )
638 return &(*it); 638 return &(*it);
639 } 639 }
640 return 0; 640 return 0;
641} 641}
642 642
643void ODevice::reloadButtonMapping ( ) 643void ODevice::reloadButtonMapping ( )
644{ 644{
645 initButtons ( ); 645 initButtons ( );
646 646
647 Config cfg ( "ButtonSettings" ); 647 Config cfg ( "ButtonSettings" );
648 648
649 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) { 649 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) {
650 ODeviceButton &b = ( *d-> m_buttons ) [i]; 650 ODeviceButton &b = ( *d-> m_buttons ) [i];
651 QString group = "Button" + QString::number ( i ); 651 QString group = "Button" + QString::number ( i );
652 652
653 QCString pch, hch; 653 QCString pch, hch;
654 QCString pm, hm; 654 QCString pm, hm;
655 QByteArray pdata, hdata; 655 QByteArray pdata, hdata;
656 656
657 if ( cfg. hasGroup ( group )) { 657 if ( cfg. hasGroup ( group )) {
658 cfg. setGroup ( group ); 658 cfg. setGroup ( group );
659 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 659 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
660 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 660 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
661 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 661 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
662 662
663 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 663 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
664 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 664 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
665 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 665 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
666 } 666 }
667 667
668 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 668 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
669 669
670 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 670 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
671 } 671 }
672} 672}
673 673
674void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 674void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
675{ 675{
676 initButtons ( ); 676 initButtons ( );
677 677
678 QString mb_chan; 678 QString mb_chan;
679 679
680 if ( button >= (int) d-> m_buttons-> count ( )) 680 if ( button >= (int) d-> m_buttons-> count ( ))
681 return; 681 return;
682 682
683 ODeviceButton &b = ( *d-> m_buttons ) [button]; 683 ODeviceButton &b = ( *d-> m_buttons ) [button];
684 b. setPressedAction ( action ); 684 b. setPressedAction ( action );
685 685
686 mb_chan=b. pressedAction ( ). channel ( ); 686 mb_chan=b. pressedAction ( ). channel ( );
687 687
688 Config buttonFile ( "ButtonSettings" ); 688 Config buttonFile ( "ButtonSettings" );
689 buttonFile. setGroup ( "Button" + QString::number ( button )); 689 buttonFile. setGroup ( "Button" + QString::number ( button ));
690 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 690 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
691 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 691 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
692 692
693 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 693 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
694 694
695 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 695 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
696} 696}
697 697
698void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 698void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
699{ 699{
700 initButtons ( ); 700 initButtons ( );
701 701
702 if ( button >= (int) d-> m_buttons-> count ( )) 702 if ( button >= (int) d-> m_buttons-> count ( ))
703 return; 703 return;
704 704
705 ODeviceButton &b = ( *d-> m_buttons ) [button]; 705 ODeviceButton &b = ( *d-> m_buttons ) [button];
706 b. setHeldAction ( action ); 706 b. setHeldAction ( action );
707 707
708 Config buttonFile ( "ButtonSettings" ); 708 Config buttonFile ( "ButtonSettings" );
709 buttonFile. setGroup ( "Button" + QString::number ( button )); 709 buttonFile. setGroup ( "Button" + QString::number ( button ));
710 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 710 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
711 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 711 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
712 712
713 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 713 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
714 714
715 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 715 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
716} 716}
717 717
718 718
719 719
720 720
721/************************************************** 721/**************************************************
722 * 722 *
723 * iPAQ 723 * iPAQ
724 * 724 *
725 **************************************************/ 725 **************************************************/
726 726
727void iPAQ::init ( ) 727void iPAQ::init ( )
728{ 728{
729 d-> m_vendorstr = "HP"; 729 d-> m_vendorstr = "HP";
730 d-> m_vendor = Vendor_HP; 730 d-> m_vendor = Vendor_HP;
731 731
732 QFile f ( "/proc/hal/model" ); 732 QFile f ( "/proc/hal/model" );
733 733
734 if ( f. open ( IO_ReadOnly )) { 734 if ( f. open ( IO_ReadOnly )) {
735 QTextStream ts ( &f ); 735 QTextStream ts ( &f );
736 736
737 d-> m_modelstr = "H" + ts. readLine ( ); 737 d-> m_modelstr = "H" + ts. readLine ( );
738 738
739 if ( d-> m_modelstr == "H3100" ) 739 if ( d-> m_modelstr == "H3100" )
740 d-> m_model = Model_iPAQ_H31xx; 740 d-> m_model = Model_iPAQ_H31xx;
741 else if ( d-> m_modelstr == "H3600" ) 741 else if ( d-> m_modelstr == "H3600" )
742 d-> m_model = Model_iPAQ_H36xx; 742 d-> m_model = Model_iPAQ_H36xx;
743 else if ( d-> m_modelstr == "H3700" ) 743 else if ( d-> m_modelstr == "H3700" )
744 d-> m_model = Model_iPAQ_H37xx; 744 d-> m_model = Model_iPAQ_H37xx;
745 else if ( d-> m_modelstr == "H3800" ) 745 else if ( d-> m_modelstr == "H3800" )
746 d-> m_model = Model_iPAQ_H38xx; 746 d-> m_model = Model_iPAQ_H38xx;
747 else if ( d-> m_modelstr == "H3900" ) 747 else if ( d-> m_modelstr == "H3900" )
748 d-> m_model = Model_iPAQ_H39xx; 748 d-> m_model = Model_iPAQ_H39xx;
749 else 749 else
750 d-> m_model = Model_Unknown; 750 d-> m_model = Model_Unknown;
751 751
752 f. close ( ); 752 f. close ( );
753 } 753 }
754 754
755 switch ( d-> m_model ) { 755 switch ( d-> m_model ) {
756 case Model_iPAQ_H31xx: 756 case Model_iPAQ_H31xx:
757 case Model_iPAQ_H38xx: 757 case Model_iPAQ_H38xx:
758 d-> m_rotation = Rot90; 758 d-> m_rotation = Rot90;
759 break; 759 break;
760 case Model_iPAQ_H36xx: 760 case Model_iPAQ_H36xx:
761 case Model_iPAQ_H37xx: 761 case Model_iPAQ_H37xx:
762 case Model_iPAQ_H39xx: 762 case Model_iPAQ_H39xx:
763 default: 763 default:
764 d-> m_rotation = Rot270; 764 d-> m_rotation = Rot270;
765 break; 765 break;
766 } 766 }
767 767
768 f. setName ( "/etc/familiar-version" ); 768 f. setName ( "/etc/familiar-version" );
769 if ( f. open ( IO_ReadOnly )) { 769 if ( f. open ( IO_ReadOnly )) {
770 d-> m_systemstr = "Familiar"; 770 d-> m_systemstr = "Familiar";
771 d-> m_system = System_Familiar; 771 d-> m_system = System_Familiar;
772 772
773 QTextStream ts ( &f ); 773 QTextStream ts ( &f );
774 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 774 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
775 775
776 f. close ( ); 776 f. close ( );
777 } else { 777 } else {
778 f. setName ( "/etc/oz_version" ); 778 f. setName ( "/etc/oz_version" );
779 779
780 if ( f. open ( IO_ReadOnly )) { 780 if ( f. open ( IO_ReadOnly )) {
781 d-> m_systemstr = "OpenEmbedded/iPaq"; 781 d-> m_systemstr = "OpenEmbedded/iPaq";
782 d-> m_system = System_Familiar; 782 d-> m_system = System_Familiar;
783 783
784 QTextStream ts ( &f ); 784 QTextStream ts ( &f );
785 ts.setDevice ( &f ); 785 ts.setDevice ( &f );
786 d-> m_sysverstr = ts. readLine ( ); 786 d-> m_sysverstr = ts. readLine ( );
787 f. close ( ); 787 f. close ( );
788 } 788 }
789 } 789 }
790 790
791 791
792 792
793 793
794 794
795 m_leds [0] = m_leds [1] = Led_Off; 795 m_leds [0] = m_leds [1] = Led_Off;
796 796
797 m_power_timer = 0; 797 m_power_timer = 0;
798 798
799} 799}
800 800
801void iPAQ::initButtons ( ) 801void iPAQ::initButtons ( )
802{ 802{
803 if ( d-> m_buttons ) 803 if ( d-> m_buttons )
804 return; 804 return;
805 805
806 if ( isQWS( ) ) 806 if ( isQWS( ) )
807 QWSServer::setKeyboardFilter ( this ); 807 QWSServer::setKeyboardFilter ( this );
808 808
809 d-> m_buttons = new QValueList <ODeviceButton>; 809 d-> m_buttons = new QValueList <ODeviceButton>;
810 810
811 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 811 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
812 i_button *ib = ipaq_buttons + i; 812 i_button *ib = ipaq_buttons + i;
813 ODeviceButton b; 813 ODeviceButton b;
814 814
815 if (( ib-> model & d-> m_model ) == d-> m_model ) { 815 if (( ib-> model & d-> m_model ) == d-> m_model ) {
816 b. setKeycode ( ib-> code ); 816 b. setKeycode ( ib-> code );
817 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 817 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
818 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 818 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
819 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 819 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
820 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 820 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
821 821
822 d-> m_buttons-> append ( b ); 822 d-> m_buttons-> append ( b );
823 } 823 }
824 } 824 }
825 reloadButtonMapping ( ); 825 reloadButtonMapping ( );
826 826
827 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 827 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
828 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 828 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
829} 829}
830 830
831 831
832//#include <linux/h3600_ts.h> // including kernel headers is evil ... 832//#include <linux/h3600_ts.h> // including kernel headers is evil ...
833 833
834typedef struct { 834typedef struct {
835 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 835 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
836 unsigned char TotalTime; /* Units of 5 seconds */ 836 unsigned char TotalTime; /* Units of 5 seconds */
837 unsigned char OnTime; /* units of 100m/s */ 837 unsigned char OnTime; /* units of 100m/s */
838 unsigned char OffTime; /* units of 100m/s */ 838 unsigned char OffTime; /* units of 100m/s */
839} LED_IN; 839} LED_IN;
840 840
841typedef struct { 841typedef struct {
842 unsigned char mode; 842 unsigned char mode;
843 unsigned char pwr; 843 unsigned char pwr;
844 unsigned char brightness; 844 unsigned char brightness;
845} FLITE_IN; 845} FLITE_IN;
846 846
847#define LED_ON OD_IOW( 'f', 5, LED_IN ) 847#define LED_ON OD_IOW( 'f', 5, LED_IN )
848#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 848#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
849 849
850 850
851QValueList <OLed> iPAQ::ledList ( ) const 851QValueList <OLed> iPAQ::ledList ( ) const
852{ 852{
853 QValueList <OLed> vl; 853 QValueList <OLed> vl;
854 vl << Led_Power; 854 vl << Led_Power;
855 855
856 if ( d-> m_model == Model_iPAQ_H38xx ) 856 if ( d-> m_model == Model_iPAQ_H38xx )
857 vl << Led_BlueTooth; 857 vl << Led_BlueTooth;
858 return vl; 858 return vl;
859} 859}
860 860
861QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 861QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
862{ 862{
863 QValueList <OLedState> vl; 863 QValueList <OLedState> vl;
864 864
865 if ( l == Led_Power ) 865 if ( l == Led_Power )
866 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 866 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
867 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 867 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
868 vl << Led_Off; // << Led_On << ??? 868 vl << Led_Off; // << Led_On << ???
869 869
870 return vl; 870 return vl;
871} 871}
872 872
873OLedState iPAQ::ledState ( OLed l ) const 873OLedState iPAQ::ledState ( OLed l ) const
874{ 874{
875 switch ( l ) { 875 switch ( l ) {
876 case Led_Power: 876 case Led_Power:
877 return m_leds [0]; 877 return m_leds [0];
878 case Led_BlueTooth: 878 case Led_BlueTooth:
879 return m_leds [1]; 879 return m_leds [1];
880 default: 880 default:
881 return Led_Off; 881 return Led_Off;
882 } 882 }
883} 883}
884 884
885bool iPAQ::setLedState ( OLed l, OLedState st ) 885bool iPAQ::setLedState ( OLed l, OLedState st )
886{ 886{
887 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 887 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
888 888
889 if ( l == Led_Power ) { 889 if ( l == Led_Power ) {
890 if ( fd >= 0 ) { 890 if ( fd >= 0 ) {
891 LED_IN leds; 891 LED_IN leds;
892 ::memset ( &leds, 0, sizeof( leds )); 892 ::memset ( &leds, 0, sizeof( leds ));
893 leds. TotalTime = 0; 893 leds. TotalTime = 0;
894 leds. OnTime = 0; 894 leds. OnTime = 0;
895 leds. OffTime = 1; 895 leds. OffTime = 1;
896 leds. OffOnBlink = 2; 896 leds. OffOnBlink = 2;
897 897
898 switch ( st ) { 898 switch ( st ) {
899 case Led_Off : leds. OffOnBlink = 0; break; 899 case Led_Off : leds. OffOnBlink = 0; break;
900 case Led_On : leds. OffOnBlink = 1; break; 900 case Led_On : leds. OffOnBlink = 1; break;
901 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 901 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
902 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 902 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
903 } 903 }
904 904
905 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 905 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
906 m_leds [0] = st; 906 m_leds [0] = st;
907 return true; 907 return true;
908 } 908 }
909 } 909 }
910 } 910 }
911 return false; 911 return false;
912} 912}
913 913
914 914
915bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 915bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
916{ 916{
917 int newkeycode = keycode; 917 int newkeycode = keycode;
918 918
919 switch ( keycode ) { 919 switch ( keycode ) {
920 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 920 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
921 case HardKey_Menu: { 921 case HardKey_Menu: {
922 if (( d-> m_model == Model_iPAQ_H38xx ) || 922 if (( d-> m_model == Model_iPAQ_H38xx ) ||
923 ( d-> m_model == Model_iPAQ_H39xx )) { 923 ( d-> m_model == Model_iPAQ_H39xx )) {
924 newkeycode = HardKey_Mail; 924 newkeycode = HardKey_Mail;
925 } 925 }
926 break; 926 break;
927 } 927 }
928 928
929 // Rotate cursor keys 180° 929 // Rotate cursor keys 180°
930 case Key_Left : 930 case Key_Left :
931 case Key_Right: 931 case Key_Right:
932 case Key_Up : 932 case Key_Up :
933 case Key_Down : { 933 case Key_Down : {
934 if (( d-> m_model == Model_iPAQ_H31xx ) || 934 if (( d-> m_model == Model_iPAQ_H31xx ) ||
935 ( d-> m_model == Model_iPAQ_H38xx )) { 935 ( d-> m_model == Model_iPAQ_H38xx )) {
936 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 936 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
937 } 937 }
938 break; 938 break;
939 } 939 }
940 940
941 // map Power Button short/long press to F34/F35 941 // map Power Button short/long press to F34/F35
942 case Key_SysReq: { 942 case Key_SysReq: {
943 if ( isPress ) { 943 if ( isPress ) {
944 if ( m_power_timer ) 944 if ( m_power_timer )
945 killTimer ( m_power_timer ); 945 killTimer ( m_power_timer );
946 m_power_timer = startTimer ( 500 ); 946 m_power_timer = startTimer ( 500 );
947 } 947 }
948 else if ( m_power_timer ) { 948 else if ( m_power_timer ) {
949 killTimer ( m_power_timer ); 949 killTimer ( m_power_timer );
950 m_power_timer = 0; 950 m_power_timer = 0;
951 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 951 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
952 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 952 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
953 } 953 }
954 newkeycode = Key_unknown; 954 newkeycode = Key_unknown;
955 break; 955 break;
956 } 956 }
957 } 957 }
958 958
959 if ( newkeycode != keycode ) { 959 if ( newkeycode != keycode ) {
960 if ( newkeycode != Key_unknown ) 960 if ( newkeycode != Key_unknown )
961 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 961 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
962 return true; 962 return true;
963 } 963 }
964 else 964 else
965 return false; 965 return false;
966} 966}
967 967
968void iPAQ::timerEvent ( QTimerEvent * ) 968void iPAQ::timerEvent ( QTimerEvent * )
969{ 969{
970 killTimer ( m_power_timer ); 970 killTimer ( m_power_timer );
971 m_power_timer = 0; 971 m_power_timer = 0;
972 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 972 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
973 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 973 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
974} 974}
975 975
976 976
977void iPAQ::alarmSound ( ) 977void iPAQ::alarmSound ( )
978{ 978{
979#ifndef QT_NO_SOUND 979#ifndef QT_NO_SOUND
980 static Sound snd ( "alarm" ); 980 static Sound snd ( "alarm" );
981 int fd; 981 int fd;
982 int vol; 982 int vol;
983 bool vol_reset = false; 983 bool vol_reset = false;
984 984
985 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 985 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
986 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 986 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
987 Config cfg ( "qpe" ); 987 Config cfg ( "qpe" );
988 cfg. setGroup ( "Volume" ); 988 cfg. setGroup ( "Volume" );
989 989
990 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 990 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
991 if ( volalarm < 0 ) 991 if ( volalarm < 0 )
992 volalarm = 0; 992 volalarm = 0;
993 else if ( volalarm > 100 ) 993 else if ( volalarm > 100 )
994 volalarm = 100; 994 volalarm = 100;
995 volalarm |= ( volalarm << 8 ); 995 volalarm |= ( volalarm << 8 );
996 996
997 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 997 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
998 vol_reset = true; 998 vol_reset = true;
999 } 999 }
1000 } 1000 }
1001 1001
1002 snd. play ( ); 1002 snd. play ( );
1003 while ( !snd. isFinished ( )) 1003 while ( !snd. isFinished ( ))
1004 qApp-> processEvents ( ); 1004 qApp-> processEvents ( );
1005 1005
1006 if ( fd >= 0 ) { 1006 if ( fd >= 0 ) {
1007 if ( vol_reset ) 1007 if ( vol_reset )
1008 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1008 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1009 ::close ( fd ); 1009 ::close ( fd );
1010 } 1010 }
1011#endif 1011#endif
1012} 1012}
1013 1013
1014 1014
1015bool iPAQ::setSoftSuspend ( bool soft ) 1015bool iPAQ::setSoftSuspend ( bool soft )
1016{ 1016{
1017 bool res = false; 1017 bool res = false;
1018 int fd; 1018 int fd;
1019 1019
1020 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1020 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1021 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1021 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1022 res = true; 1022 res = true;
1023 else 1023 else
1024 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1024 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1025 1025
1026 ::close ( fd ); 1026 ::close ( fd );
1027 } 1027 }
1028 else 1028 else
1029 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1029 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1030 1030
1031 return res; 1031 return res;
1032} 1032}
1033 1033
1034 1034
1035bool iPAQ::setDisplayBrightness ( int bright ) 1035bool iPAQ::setDisplayBrightness ( int bright )
1036{ 1036{
1037 bool res = false; 1037 bool res = false;
1038 int fd; 1038 int fd;
1039 1039
1040 if ( bright > 255 ) 1040 if ( bright > 255 )
1041 bright = 255; 1041 bright = 255;
1042 if ( bright < 0 ) 1042 if ( bright < 0 )
1043 bright = 0; 1043 bright = 0;
1044 1044
1045 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1045 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1046 FLITE_IN bl; 1046 FLITE_IN bl;
1047 bl. mode = 1; 1047 bl. mode = 1;
1048 bl. pwr = bright ? 1 : 0; 1048 bl. pwr = bright ? 1 : 0;
1049 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1049 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1050 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1050 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1051 ::close ( fd ); 1051 ::close ( fd );
1052 } 1052 }
1053 return res; 1053 return res;
1054} 1054}
1055 1055
1056int iPAQ::displayBrightnessResolution ( ) const 1056int iPAQ::displayBrightnessResolution ( ) const
1057{ 1057{
1058 switch ( model ( )) { 1058 switch ( model ( )) {
1059 case Model_iPAQ_H31xx: 1059 case Model_iPAQ_H31xx:
1060 case Model_iPAQ_H36xx: 1060 case Model_iPAQ_H36xx:
1061 case Model_iPAQ_H37xx: 1061 case Model_iPAQ_H37xx:
1062 return 128; // really 256, but >128 could damage the LCD 1062 return 128; // really 256, but >128 could damage the LCD
1063 1063
1064 case Model_iPAQ_H38xx: 1064 case Model_iPAQ_H38xx:
1065 case Model_iPAQ_H39xx: 1065 case Model_iPAQ_H39xx:
1066 return 64; 1066 return 64;
1067 1067
1068 default: 1068 default:
1069 return 2; 1069 return 2;
1070 } 1070 }
1071} 1071}
1072 1072
1073 1073
1074bool iPAQ::hasLightSensor ( ) const 1074bool iPAQ::hasLightSensor ( ) const
1075{ 1075{
1076 return true; 1076 return true;
1077} 1077}
1078 1078
1079int iPAQ::readLightSensor ( ) 1079int iPAQ::readLightSensor ( )
1080{ 1080{
1081 int fd; 1081 int fd;
1082 int val = -1; 1082 int val = -1;
1083 1083
1084 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1084 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1085 char buffer [8]; 1085 char buffer [8];
1086 1086
1087 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1087 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1088 char *endptr; 1088 char *endptr;
1089 1089
1090 buffer [4] = 0; 1090 buffer [4] = 0;
1091 val = ::strtol ( buffer + 2, &endptr, 16 ); 1091 val = ::strtol ( buffer + 2, &endptr, 16 );
1092 1092
1093 if ( *endptr != 0 ) 1093 if ( *endptr != 0 )
1094 val = -1; 1094 val = -1;
1095 } 1095 }
1096 ::close ( fd ); 1096 ::close ( fd );
1097 } 1097 }
1098 1098
1099 return val; 1099 return val;
1100} 1100}
1101 1101
1102int iPAQ::lightSensorResolution ( ) const 1102int iPAQ::lightSensorResolution ( ) const
1103{ 1103{
1104 return 256; 1104 return 256;
1105} 1105}
1106 1106
1107/************************************************** 1107/**************************************************
1108 * 1108 *
1109 * Zaurus 1109 * Zaurus
1110 * 1110 *
1111 **************************************************/ 1111 **************************************************/
1112 1112
1113 1113
1114 1114
1115void Zaurus::init ( ) 1115void Zaurus::init ( )
1116{ 1116{
1117 d-> m_vendorstr = "Sharp"; 1117 d-> m_vendorstr = "Sharp";
1118 d-> m_vendor = Vendor_Sharp; 1118 d-> m_vendor = Vendor_Sharp;
1119 1119
1120 QFile f ( "/proc/filesystems" ); 1120 QFile f ( "/proc/filesystems" );
1121 QString model; 1121 QString model;
1122 1122
1123 if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1123 if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1124 d-> m_vendorstr = "OpenZaurus Team"; 1124 d-> m_vendorstr = "OpenZaurus Team";
1125 d-> m_systemstr = "OpenZaurus"; 1125 d-> m_systemstr = "OpenZaurus";
1126 d-> m_system = System_OpenZaurus; 1126 d-> m_system = System_OpenZaurus;
1127 1127
1128 f. close ( ); 1128 f. close ( );
1129 1129
1130 f. setName ( "/etc/oz_version" ); 1130 f. setName ( "/etc/oz_version" );
1131 if ( f. open ( IO_ReadOnly )) { 1131 if ( f. open ( IO_ReadOnly )) {
1132 QTextStream ts ( &f ); 1132 QTextStream ts ( &f );
1133 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1133 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1134 f. close ( ); 1134 f. close ( );
1135 } 1135 }
1136 } 1136 }
1137 else { 1137 else {
1138 d-> m_systemstr = "Zaurus"; 1138 d-> m_systemstr = "Zaurus";
1139 d-> m_system = System_Zaurus; 1139 d-> m_system = System_Zaurus;
1140 } 1140 }
1141 1141
1142 f. setName ( "/proc/cpuinfo" ); 1142 f. setName ( "/proc/cpuinfo" );
1143 if ( f. open ( IO_ReadOnly ) ) { 1143 if ( f. open ( IO_ReadOnly ) ) {
1144 QTextStream ts ( &f ); 1144 QTextStream ts ( &f );
1145 QString line; 1145 QString line;
1146 while( line = ts. readLine ( ) ) { 1146 while( line = ts. readLine ( ) ) {
1147 if ( line. left ( 8 ) == "Hardware" ) 1147 if ( line. left ( 8 ) == "Hardware" )
1148 break; 1148 break;
1149 } 1149 }
1150 int loc = line. find ( ":" ); 1150 int loc = line. find ( ":" );
1151 if ( loc != -1 ) 1151 if ( loc != -1 )
1152 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1152 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1153 } 1153 }
1154 1154
1155 if ( model == "SHARP Corgi" ) { 1155 if ( model == "SHARP Corgi" ) {
1156 d-> m_model = Model_Zaurus_SLC700; 1156 d-> m_model = Model_Zaurus_SLC700;
1157 d-> m_modelstr = "Zaurus SL-C700"; 1157 d-> m_modelstr = "Zaurus SL-C700";
1158 } else if ( model == "SHARP Poodle" ) { 1158 } else if ( model == "SHARP Poodle" ) {
1159 d-> m_model = Model_Zaurus_SLB600; 1159 d-> m_model = Model_Zaurus_SLB600;
1160 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1160 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1161 } else if ( model = "Sharp-Collie" ) { 1161 } else if ( model = "Sharp-Collie" ) {
1162 d-> m_model = Model_Zaurus_SL5500; 1162 d-> m_model = Model_Zaurus_SL5500;
1163 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1163 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1164 } else { 1164 } else {
1165 d-> m_model = Model_Zaurus_SL5500; 1165 d-> m_model = Model_Zaurus_SL5500;
1166 d-> m_modelstr = "Zaurus (Model unknown)"; 1166 d-> m_modelstr = "Zaurus (Model unknown)";
1167 } 1167 }
1168 1168
1169 bool flipstate = false; 1169 bool flipstate = false;
1170 switch ( d-> m_model ) { 1170 switch ( d-> m_model ) {
1171 case Model_Zaurus_SLA300: 1171 case Model_Zaurus_SLA300:
1172 d-> m_rotation = Rot0; 1172 d-> m_rotation = Rot0;
1173 break; 1173 break;
1174 case Model_Zaurus_SLC700: 1174 case Model_Zaurus_SLC700:
1175 // Note: need to 1) set flipstate based on physical screen orientation 1175 // Note: need to 1) set flipstate based on physical screen orientation
1176 // and 2) check to see if the user overrode the rotation direction 1176 // and 2) check to see if the user overrode the rotation direction
1177 // using appearance, and if so, remove that item from the Config to 1177 // using appearance, and if so, remove that item from the Config to
1178 // ensure the rotate applet flips us back to the previous state. 1178 // ensure the rotate applet flips us back to the previous state.
1179 if ( flipstate ) { 1179 if ( flipstate ) {
1180 // 480x640 1180 // 480x640
1181 d-> m_rotation = Rot0; 1181 d-> m_rotation = Rot0;
1182 d-> m_direction = CW; 1182 d-> m_direction = CW;
1183 } else { 1183 } else {
1184 // 640x480 1184 // 640x480
1185 d-> m_rotation = Rot270; 1185 d-> m_rotation = Rot270;
1186 d-> m_direction = CCW; 1186 d-> m_direction = CCW;
1187 } 1187 }
1188 break; 1188 break;
1189 case Model_Zaurus_SLB600: 1189 case Model_Zaurus_SLB600:
1190 case Model_Zaurus_SL5500: 1190 case Model_Zaurus_SL5500:
1191 case Model_Zaurus_SL5000: 1191 case Model_Zaurus_SL5000:
1192 default: 1192 default:
1193 d-> m_rotation = Rot270; 1193 d-> m_rotation = Rot270;
1194 break; 1194 break;
1195 } 1195 }
1196 m_leds [0] = Led_Off; 1196 m_leds [0] = Led_Off;
1197} 1197}
1198 1198
1199void Zaurus::initButtons ( ) 1199void Zaurus::initButtons ( )
1200{ 1200{
1201 if ( d-> m_buttons ) 1201 if ( d-> m_buttons )
1202 return; 1202 return;
1203 1203
1204 d-> m_buttons = new QValueList <ODeviceButton>; 1204 d-> m_buttons = new QValueList <ODeviceButton>;
1205 1205
1206 struct z_button * pz_buttons; 1206 struct z_button * pz_buttons;
1207 int buttoncount; 1207 int buttoncount;
1208 switch ( d-> m_model ) { 1208 switch ( d-> m_model ) {
1209 case Model_Zaurus_SLC700: 1209 case Model_Zaurus_SLC700:
1210 pz_buttons = z_buttons_c700; 1210 pz_buttons = z_buttons_c700;
1211 buttoncount = ARRAY_SIZE(z_buttons_c700); 1211 buttoncount = ARRAY_SIZE(z_buttons_c700);
1212 break; 1212 break;
1213 default: 1213 default:
1214 pz_buttons = z_buttons; 1214 pz_buttons = z_buttons;
1215 buttoncount = ARRAY_SIZE(z_buttons); 1215 buttoncount = ARRAY_SIZE(z_buttons);
1216 break; 1216 break;
1217 } 1217 }
1218 1218
1219 for ( int i = 0; i < buttoncount; i++ ) { 1219 for ( int i = 0; i < buttoncount; i++ ) {
1220 struct z_button *zb = pz_buttons + i; 1220 struct z_button *zb = pz_buttons + i;
1221 ODeviceButton b; 1221 ODeviceButton b;
1222 1222
1223 b. setKeycode ( zb-> code ); 1223 b. setKeycode ( zb-> code );
1224 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1224 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1225 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1225 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1226 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction )); 1226 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction ));
1227 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction )); 1227 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction ));
1228 1228
1229 d-> m_buttons-> append ( b ); 1229 d-> m_buttons-> append ( b );
1230 } 1230 }
1231 1231
1232 reloadButtonMapping ( ); 1232 reloadButtonMapping ( );
1233 1233
1234 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1234 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1235 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1235 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1236} 1236}
1237 1237
1238#include <unistd.h> 1238#include <unistd.h>
1239#include <fcntl.h> 1239#include <fcntl.h>
1240#include <sys/ioctl.h> 1240#include <sys/ioctl.h>
1241 1241
1242//#include <asm/sharp_char.h> // including kernel headers is evil ... 1242//#include <asm/sharp_char.h> // including kernel headers is evil ...
1243 1243
1244#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1244#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1245 1245
1246 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1246 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1247#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1247#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1248 1248
1249#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1249#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1250#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1250#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1251#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1251#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1252 1252
1253/* --- for SHARP_BUZZER device --- */ 1253/* --- for SHARP_BUZZER device --- */
1254 1254
1255 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1255 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1256//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1256//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1257 1257
1258#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1258#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1259#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1259#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1260#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1260#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1261#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1261#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1262#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1262#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1263 1263
1264//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1264//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1265//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1265//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1266 1266
1267//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1267//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1268//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1268//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1269//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1269//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1270//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1270//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1271//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1271//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1272//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1272//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1273//#define SHARP_PDA_APPSTART 9 /* application start */ 1273//#define SHARP_PDA_APPSTART 9 /* application start */
1274//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1274//#define SHARP_PDA_APPQUIT 10 /* application ends */
1275 1275
1276//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1276//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1277//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1277//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1278//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1278//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1279//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1279//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1280// 1280//
1281 1281
1282 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1282 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1283#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1283#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1284 1284
1285typedef struct sharp_led_status { 1285typedef struct sharp_led_status {
1286 int which; /* select which LED status is wanted. */ 1286 int which; /* select which LED status is wanted. */
1287 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 1287 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
1288} sharp_led_status; 1288} sharp_led_status;
1289 1289
1290#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1290#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1291 1291
1292#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 1292#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
1293#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1293#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1294#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 1294#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
1295 1295
1296// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1296// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1297 1297
1298#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1298#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1299#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1299#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1300#define APM_EVT_POWER_BUTTON (1 << 0) 1300#define APM_EVT_POWER_BUTTON (1 << 0)
1301 1301
1302#define FL_IOCTL_STEP_CONTRAST 100 1302#define FL_IOCTL_STEP_CONTRAST 100
1303 1303
1304 1304
1305void Zaurus::buzzer ( int sound ) 1305void Zaurus::buzzer ( int sound )
1306{ 1306{
1307 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1307 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1308 1308
1309 if ( fd >= 0 ) { 1309 if ( fd >= 0 ) {
1310 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1310 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1311 ::close ( fd ); 1311 ::close ( fd );
1312 } 1312 }
1313} 1313}
1314 1314
1315 1315
1316void Zaurus::alarmSound ( ) 1316void Zaurus::alarmSound ( )
1317{ 1317{
1318 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1318 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1319} 1319}
1320 1320
1321void Zaurus::touchSound ( ) 1321void Zaurus::touchSound ( )
1322{ 1322{
1323 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1323 buzzer ( SHARP_BUZ_TOUCHSOUND );
1324} 1324}
1325 1325
1326void Zaurus::keySound ( ) 1326void Zaurus::keySound ( )
1327{ 1327{
1328 buzzer ( SHARP_BUZ_KEYSOUND ); 1328 buzzer ( SHARP_BUZ_KEYSOUND );
1329} 1329}
1330 1330
1331 1331
1332QValueList <OLed> Zaurus::ledList ( ) const 1332QValueList <OLed> Zaurus::ledList ( ) const
1333{ 1333{
1334 QValueList <OLed> vl; 1334 QValueList <OLed> vl;
1335 vl << Led_Mail; 1335 vl << Led_Mail;
1336 return vl; 1336 return vl;
1337} 1337}
1338 1338
1339QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1339QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1340{ 1340{
1341 QValueList <OLedState> vl; 1341 QValueList <OLedState> vl;
1342 1342
1343 if ( l == Led_Mail ) 1343 if ( l == Led_Mail )
1344 vl << Led_Off << Led_On << Led_BlinkSlow; 1344 vl << Led_Off << Led_On << Led_BlinkSlow;
1345 return vl; 1345 return vl;
1346} 1346}
1347 1347
1348OLedState Zaurus::ledState ( OLed which ) const 1348OLedState Zaurus::ledState ( OLed which ) const
1349{ 1349{
1350 if ( which == Led_Mail ) 1350 if ( which == Led_Mail )
1351 return m_leds [0]; 1351 return m_leds [0];
1352 else 1352 else
1353 return Led_Off; 1353 return Led_Off;
1354} 1354}
1355 1355
1356bool Zaurus::setLedState ( OLed which, OLedState st ) 1356bool Zaurus::setLedState ( OLed which, OLedState st )
1357{ 1357{
1358 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1358 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1359 1359
1360 if ( which == Led_Mail ) { 1360 if ( which == Led_Mail ) {
1361 if ( fd >= 0 ) { 1361 if ( fd >= 0 ) {
1362 struct sharp_led_status leds; 1362 struct sharp_led_status leds;
1363 ::memset ( &leds, 0, sizeof( leds )); 1363 ::memset ( &leds, 0, sizeof( leds ));
1364 leds. which = SHARP_LED_MAIL_EXISTS; 1364 leds. which = SHARP_LED_MAIL_EXISTS;
1365 bool ok = true; 1365 bool ok = true;
1366 1366
1367 switch ( st ) { 1367 switch ( st ) {
1368 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1368 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1369 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1369 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1370 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1370 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1371 default : ok = false; 1371 default : ok = false;
1372 } 1372 }
1373 1373
1374 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1374 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1375 m_leds [0] = st; 1375 m_leds [0] = st;
1376 return true; 1376 return true;
1377 } 1377 }
1378 } 1378 }
1379 } 1379 }
1380 return false; 1380 return false;
1381} 1381}
1382 1382
1383bool Zaurus::setSoftSuspend ( bool soft ) 1383bool Zaurus::setSoftSuspend ( bool soft )
1384{ 1384{
1385 bool res = false; 1385 bool res = false;
1386 int fd; 1386 int fd;
1387 1387
1388 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 1388 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
1389 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 1389 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {
1390 1390
1391 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources 1391 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources
1392 1392
1393 if ( sources >= 0 ) { 1393 if ( sources >= 0 ) {
1394 if ( soft ) 1394 if ( soft )
1395 sources &= ~APM_EVT_POWER_BUTTON; 1395 sources &= ~APM_EVT_POWER_BUTTON;
1396 else 1396 else
1397 sources |= APM_EVT_POWER_BUTTON; 1397 sources |= APM_EVT_POWER_BUTTON;
1398 1398
1399 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 1399 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
1400 res = true; 1400 res = true;
1401 else 1401 else
1402 perror ( "APM_IOCGEVTSRC" ); 1402 perror ( "APM_IOCGEVTSRC" );
1403 } 1403 }
1404 else 1404 else
1405 perror ( "APM_IOCGEVTSRC" ); 1405 perror ( "APM_IOCGEVTSRC" );
1406 1406
1407 ::close ( fd ); 1407 ::close ( fd );
1408 } 1408 }
1409 else 1409 else
1410 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1410 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
1411 1411
1412 return res; 1412 return res;
1413} 1413}
1414 1414
1415 1415
1416bool Zaurus::setDisplayBrightness ( int bright ) 1416bool Zaurus::setDisplayBrightness ( int bright )
1417{ 1417{
1418 bool res = false; 1418 bool res = false;
1419 int fd; 1419 int fd;
1420 1420
1421 if ( bright > 255 ) 1421 if ( bright > 255 )
1422 bright = 255; 1422 bright = 255;
1423 if ( bright < 0 ) 1423 if ( bright < 0 )
1424 bright = 0; 1424 bright = 0;
1425 1425
1426 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1426 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1427 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1427 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1428 if ( bright && !bl ) 1428 if ( bright && !bl )
1429 bl = 1; 1429 bl = 1;
1430 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 1430 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
1431 ::close ( fd ); 1431 ::close ( fd );
1432 } 1432 }
1433 return res; 1433 return res;
1434} 1434}
1435 1435
1436 1436
1437int Zaurus::displayBrightnessResolution ( ) const 1437int Zaurus::displayBrightnessResolution ( ) const
1438{ 1438{
1439 return 5; 1439 return 5;
1440} 1440}
1441 1441
1442 1442