-rw-r--r-- | libopie/odevice.cpp | 128 |
1 files changed, 127 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index aadd0bf..8624016 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp | |||
@@ -93,32 +93,44 @@ public: | |||
93 | virtual OLedState ledState ( OLed led ) const; | 93 | virtual OLedState ledState ( OLed led ) const; |
94 | virtual bool setLedState ( OLed led, OLedState st ); | 94 | virtual bool setLedState ( OLed led, OLedState st ); |
95 | 95 | ||
96 | virtual bool hasLightSensor ( ) const; | 96 | virtual bool hasLightSensor ( ) const; |
97 | virtual int readLightSensor ( ); | 97 | virtual int readLightSensor ( ); |
98 | virtual int lightSensorResolution ( ) const; | 98 | virtual int lightSensorResolution ( ) const; |
99 | 99 | ||
100 | protected: | 100 | protected: |
101 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); | 101 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); |
102 | virtual void timerEvent ( QTimerEvent *te ); | 102 | virtual void timerEvent ( QTimerEvent *te ); |
103 | 103 | ||
104 | int m_power_timer; | 104 | int m_power_timer; |
105 | 105 | ||
106 | OLedState m_leds [2]; | 106 | OLedState m_leds [2]; |
107 | }; | 107 | }; |
108 | 108 | ||
109 | class Jornada : public ODevice { | ||
110 | protected: | ||
111 | virtual void init ( ); | ||
112 | virtual void initButtons ( ); | ||
113 | public: | ||
114 | virtual bool setSoftSuspend ( bool soft ); | ||
115 | virtual bool setDisplayBrightness ( int b ); | ||
116 | virtual int displayBrightnessResolution ( ) const; | ||
117 | static bool isJornada(); | ||
118 | |||
119 | }; | ||
120 | |||
109 | class Zaurus : public ODevice { | 121 | class Zaurus : public ODevice { |
110 | protected: | 122 | protected: |
111 | virtual void init ( ); | 123 | virtual void init ( ); |
112 | virtual void initButtons ( ); | 124 | virtual void initButtons ( ); |
113 | 125 | ||
114 | public: | 126 | public: |
115 | virtual bool setSoftSuspend ( bool soft ); | 127 | virtual bool setSoftSuspend ( bool soft ); |
116 | 128 | ||
117 | virtual bool setDisplayBrightness ( int b ); | 129 | virtual bool setDisplayBrightness ( int b ); |
118 | virtual int displayBrightnessResolution ( ) const; | 130 | virtual int displayBrightnessResolution ( ) const; |
119 | 131 | ||
120 | virtual void alarmSound ( ); | 132 | virtual void alarmSound ( ); |
121 | virtual void keySound ( ); | 133 | virtual void keySound ( ); |
122 | virtual void touchSound ( ); | 134 | virtual void touchSound ( ); |
123 | 135 | ||
124 | virtual QValueList <OLed> ledList ( ) const; | 136 | virtual QValueList <OLed> ledList ( ) const; |
@@ -420,32 +432,34 @@ static inline bool isQWS() | |||
420 | 432 | ||
421 | ODevice *ODevice::inst ( ) | 433 | ODevice *ODevice::inst ( ) |
422 | { | 434 | { |
423 | static ODevice *dev = 0; | 435 | static ODevice *dev = 0; |
424 | 436 | ||
425 | if ( !dev ) { | 437 | if ( !dev ) { |
426 | if ( QFile::exists ( "/proc/hal/model" )) | 438 | if ( QFile::exists ( "/proc/hal/model" )) |
427 | dev = new iPAQ ( ); | 439 | dev = new iPAQ ( ); |
428 | else if ( Zaurus::isZaurus() ) | 440 | else if ( Zaurus::isZaurus() ) |
429 | dev = new Zaurus ( ); | 441 | dev = new Zaurus ( ); |
430 | else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) | 442 | else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) |
431 | dev = new SIMpad ( ); | 443 | dev = new SIMpad ( ); |
432 | else if ( QFile::exists ( "/proc/sys/board/name" )) | 444 | else if ( QFile::exists ( "/proc/sys/board/name" )) |
433 | dev = new Ramses ( ); | 445 | dev = new Ramses ( ); |
434 | else if ( Yopy::isYopy() ) | 446 | else if ( Yopy::isYopy() ) |
435 | dev = new Yopy ( ); | 447 | dev = new Yopy ( ); |
448 | else if ( Jornada::isJornada() ) | ||
449 | dev = new Jornada ( ); | ||
436 | else | 450 | else |
437 | dev = new ODevice ( ); | 451 | dev = new ODevice ( ); |
438 | dev-> init ( ); | 452 | dev-> init ( ); |
439 | } | 453 | } |
440 | return dev; | 454 | return dev; |
441 | } | 455 | } |
442 | 456 | ||
443 | 457 | ||
444 | /************************************************** | 458 | /************************************************** |
445 | * | 459 | * |
446 | * common | 460 | * common |
447 | * | 461 | * |
448 | **************************************************/ | 462 | **************************************************/ |
449 | 463 | ||
450 | 464 | ||
451 | ODevice::ODevice ( ) | 465 | ODevice::ODevice ( ) |
@@ -970,33 +984,33 @@ void ODevice::virtual_hook(int, void* ){ | |||
970 | /************************************************** | 984 | /************************************************** |
971 | * | 985 | * |
972 | * Yopy 3500/3700 | 986 | * Yopy 3500/3700 |
973 | * | 987 | * |
974 | **************************************************/ | 988 | **************************************************/ |
975 | 989 | ||
976 | bool Yopy::isYopy ( ) | 990 | bool Yopy::isYopy ( ) |
977 | { | 991 | { |
978 | QFile f( "/proc/cpuinfo" ); | 992 | QFile f( "/proc/cpuinfo" ); |
979 | if ( f. open ( IO_ReadOnly ) ) { | 993 | if ( f. open ( IO_ReadOnly ) ) { |
980 | QTextStream ts ( &f ); | 994 | QTextStream ts ( &f ); |
981 | QString line; | 995 | QString line; |
982 | while( line = ts. readLine ( ) ) { | 996 | while( line = ts. readLine ( ) ) { |
983 | if ( line. left ( 8 ) == "Hardware" ) { | 997 | if ( line. left ( 8 ) == "Hardware" ) { |
984 | int loc = line. find ( ":" ); | 998 | int loc = line. find ( ":" ); |
985 | if ( loc != -1 ) { | 999 | if ( loc != -1 ) { |
986 | QString model = | 1000 | QString model = |
987 | line. mid ( loc + 2 ). simplifyWhiteSpace( ); | 1001 | line. mid ( loc + 2 ). simplifyWhiteSpace( ); |
988 | return ( model == "Yopy" ); | 1002 | return ( model == "Yopy" ); |
989 | } | 1003 | } |
990 | } | 1004 | } |
991 | } | 1005 | } |
992 | } | 1006 | } |
993 | return false; | 1007 | return false; |
994 | } | 1008 | } |
995 | 1009 | ||
996 | void Yopy::init ( ) | 1010 | void Yopy::init ( ) |
997 | { | 1011 | { |
998 | d-> m_vendorstr = "G.Mate"; | 1012 | d-> m_vendorstr = "G.Mate"; |
999 | d-> m_vendor = Vendor_GMate; | 1013 | d-> m_vendor = Vendor_GMate; |
1000 | d-> m_modelstr = "Yopy3700"; | 1014 | d-> m_modelstr = "Yopy3700"; |
1001 | d-> m_model = Model_Yopy_3700; | 1015 | d-> m_model = Model_Yopy_3700; |
1002 | d-> m_rotation = Rot0; | 1016 | d-> m_rotation = Rot0; |
@@ -2439,16 +2453,128 @@ bool Ramses::setDisplayContrast(int contr) | |||
2439 | if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) { | 2453 | if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) { |
2440 | qDebug(" %d -> pwm0", contr); | 2454 | qDebug(" %d -> pwm0", contr); |
2441 | char writeCommand[100]; | 2455 | char writeCommand[100]; |
2442 | const int count = sprintf(writeCommand, "%d\n", contr); | 2456 | const int count = sprintf(writeCommand, "%d\n", contr); |
2443 | res = (::write(fd, writeCommand, count) != -1); | 2457 | res = (::write(fd, writeCommand, count) != -1); |
2444 | res = true; | 2458 | res = true; |
2445 | ::close(fd); | 2459 | ::close(fd); |
2446 | } | 2460 | } |
2447 | return res; | 2461 | return res; |
2448 | } | 2462 | } |
2449 | 2463 | ||
2450 | 2464 | ||
2451 | int Ramses::displayContrastResolution() const | 2465 | int Ramses::displayContrastResolution() const |
2452 | { | 2466 | { |
2453 | return 20; | 2467 | return 20; |
2454 | } | 2468 | } |
2469 | |||
2470 | |||
2471 | /************************************************** | ||
2472 | * * | ||
2473 | * Jornada * | ||
2474 | * * | ||
2475 | **************************************************/ | ||
2476 | |||
2477 | |||
2478 | bool Jornada::isJornada ( ) | ||
2479 | { | ||
2480 | QFile f( "/proc/cpuinfo" ); | ||
2481 | if ( f. open ( IO_ReadOnly ) ) { | ||
2482 | QTextStream ts ( &f ); | ||
2483 | QString line; | ||
2484 | while( line = ts. readLine ( ) ) { | ||
2485 | if ( line. left ( 8 ) == "Hardware" ) { | ||
2486 | int loc = line. find ( ":" ); | ||
2487 | if ( loc != -1 ) { | ||
2488 | QString model = | ||
2489 | line. mid ( loc + 2 ). simplifyWhiteSpace( ); | ||
2490 | return ( model == "HP Jornada 56x" ); | ||
2491 | } | ||
2492 | } | ||
2493 | } | ||
2494 | } | ||
2495 | return false; | ||
2496 | } | ||
2497 | |||
2498 | void Jornada::init ( ) | ||
2499 | { | ||
2500 | d-> m_vendorstr = "HP"; | ||
2501 | d-> m_vendor = Vendor_HP; | ||
2502 | d-> m_modelstr = "Jornada 56x"; | ||
2503 | d-> m_model = Model_Jornada_56x; | ||
2504 | d-> m_systemstr = "Familiar"; | ||
2505 | d-> m_system = System_Familiar; | ||
2506 | d-> m_rotation = Rot0; | ||
2507 | } | ||
2508 | |||
2509 | void Jornada::initButtons ( ) | ||
2510 | { | ||
2511 | if ( d-> m_buttons ) | ||
2512 | return; | ||
2513 | |||
2514 | // Simulation uses iPAQ 3660 device buttons | ||
2515 | |||
2516 | qDebug ( "init Buttons" ); | ||
2517 | d-> m_buttons = new QValueList <ODeviceButton>; | ||
2518 | |||
2519 | for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { | ||
2520 | i_button *ib = ipaq_buttons + i; | ||
2521 | ODeviceButton b; | ||
2522 | |||
2523 | if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { | ||
2524 | b. setKeycode ( ib-> code ); | ||
2525 | b. setUserText ( QObject::tr ( "Button", ib-> utext )); | ||
2526 | b. setPixmap ( Resource::loadPixmap ( ib-> pix )); | ||
2527 | b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); | ||
2528 | b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); | ||
2529 | d-> m_buttons-> append ( b ); | ||
2530 | } | ||
2531 | } | ||
2532 | reloadButtonMapping ( ); | ||
2533 | |||
2534 | QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); | ||
2535 | connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); | ||
2536 | } | ||
2537 | |||
2538 | int Jornada::displayBrightnessResolution ( ) const | ||
2539 | { | ||
2540 | } | ||
2541 | |||
2542 | bool Jornada::setDisplayBrightness ( int bright ) | ||
2543 | { | ||
2544 | bool res = false; | ||
2545 | int fd; | ||
2546 | |||
2547 | if ( bright > 255 ) | ||
2548 | bright = 255; | ||
2549 | if ( bright < 0 ) | ||
2550 | bright = 0; | ||
2551 | |||
2552 | if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { | ||
2553 | FLITE_IN bl; | ||
2554 | bl. mode = 1; | ||
2555 | bl. pwr = bright ? 1 : 0; | ||
2556 | bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; | ||
2557 | res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); | ||
2558 | ::close ( fd ); | ||
2559 | } | ||
2560 | return res; | ||
2561 | } | ||
2562 | |||
2563 | bool Jornada::setSoftSuspend ( bool soft ) | ||
2564 | { | ||
2565 | bool res = false; | ||
2566 | int fd; | ||
2567 | |||
2568 | if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { | ||
2569 | if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) | ||
2570 | res = true; | ||
2571 | else | ||
2572 | ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); | ||
2573 | |||
2574 | ::close ( fd ); | ||
2575 | } | ||
2576 | else | ||
2577 | ::perror ( "/proc/sys/ts/suspend_button_mode" ); | ||
2578 | |||
2579 | return res; | ||
2580 | } | ||