-rw-r--r-- | libopie/odevice.cpp | 128 | ||||
-rw-r--r-- | libopie/odevice.h | 3 |
2 files changed, 130 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 | |||
@@ -85,48 +85,60 @@ public: | |||
85 | 85 | ||
86 | virtual bool setDisplayBrightness ( int b ); | 86 | virtual bool setDisplayBrightness ( int b ); |
87 | virtual int displayBrightnessResolution ( ) const; | 87 | virtual int displayBrightnessResolution ( ) const; |
88 | 88 | ||
89 | virtual void alarmSound ( ); | 89 | virtual void alarmSound ( ); |
90 | 90 | ||
91 | virtual QValueList <OLed> ledList ( ) const; | 91 | virtual QValueList <OLed> ledList ( ) const; |
92 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 92 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
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; |
125 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 137 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
126 | virtual OLedState ledState ( OLed led ) const; | 138 | virtual OLedState ledState ( OLed led ) const; |
127 | virtual bool setLedState ( OLed led, OLedState st ); | 139 | virtual bool setLedState ( OLed led, OLedState st ); |
128 | 140 | ||
129 | static bool isZaurus(); | 141 | static bool isZaurus(); |
130 | 142 | ||
131 | protected: | 143 | protected: |
132 | virtual void buzzer ( int snd ); | 144 | virtual void buzzer ( int snd ); |
@@ -412,48 +424,50 @@ static QCString makeChannel ( const char *str ) | |||
412 | else | 424 | else |
413 | return str; | 425 | return str; |
414 | } | 426 | } |
415 | 427 | ||
416 | static inline bool isQWS() | 428 | static inline bool isQWS() |
417 | { | 429 | { |
418 | return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; | 430 | return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; |
419 | } | 431 | } |
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 ( ) |
452 | { | 466 | { |
453 | d = new ODeviceData; | 467 | d = new ODeviceData; |
454 | 468 | ||
455 | d-> m_modelstr = "Unknown"; | 469 | d-> m_modelstr = "Unknown"; |
456 | d-> m_model = Model_Unknown; | 470 | d-> m_model = Model_Unknown; |
457 | d-> m_vendorstr = "Unknown"; | 471 | d-> m_vendorstr = "Unknown"; |
458 | d-> m_vendor = Vendor_Unknown; | 472 | d-> m_vendor = Vendor_Unknown; |
459 | d-> m_systemstr = "Unknown"; | 473 | d-> m_systemstr = "Unknown"; |
@@ -962,49 +976,49 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) | |||
962 | //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); | 976 | //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); |
963 | 977 | ||
964 | QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); | 978 | QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); |
965 | } | 979 | } |
966 | void ODevice::virtual_hook(int, void* ){ | 980 | void ODevice::virtual_hook(int, void* ){ |
967 | 981 | ||
968 | } | 982 | } |
969 | 983 | ||
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; |
1003 | 1017 | ||
1004 | d-> m_systemstr = "Linupy"; | 1018 | d-> m_systemstr = "Linupy"; |
1005 | d-> m_system = System_Linupy; | 1019 | d-> m_system = System_Linupy; |
1006 | 1020 | ||
1007 | QFile f ( "/etc/issue" ); | 1021 | QFile f ( "/etc/issue" ); |
1008 | if ( f. open ( IO_ReadOnly )) { | 1022 | if ( f. open ( IO_ReadOnly )) { |
1009 | QTextStream ts ( &f ); | 1023 | QTextStream ts ( &f ); |
1010 | ts.readLine(); | 1024 | ts.readLine(); |
@@ -2431,24 +2445,136 @@ bool Ramses::setDisplayContrast(int contr) | |||
2431 | // pwm0 contrast: 20 steps 79..90 (dunkel->hell) | 2445 | // pwm0 contrast: 20 steps 79..90 (dunkel->hell) |
2432 | 2446 | ||
2433 | if (contr > 255 ) | 2447 | if (contr > 255 ) |
2434 | contr = 255; | 2448 | contr = 255; |
2435 | if (contr < 0) | 2449 | if (contr < 0) |
2436 | contr = 0; | 2450 | contr = 0; |
2437 | contr = 90 - (contr * 20 / 255); | 2451 | contr = 90 - (contr * 20 / 255); |
2438 | 2452 | ||
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 | } | ||
diff --git a/libopie/odevice.h b/libopie/odevice.h index 2a5e494..35e3eff 100644 --- a/libopie/odevice.h +++ b/libopie/odevice.h | |||
@@ -30,48 +30,51 @@ | |||
30 | 30 | ||
31 | #include <qpe/qpeapplication.h> /* for Transformation enum.. */ | 31 | #include <qpe/qpeapplication.h> /* for Transformation enum.. */ |
32 | 32 | ||
33 | class ODeviceData; | 33 | class ODeviceData; |
34 | 34 | ||
35 | namespace Opie { | 35 | namespace Opie { |
36 | 36 | ||
37 | /** | 37 | /** |
38 | * The available devices | 38 | * The available devices |
39 | */ | 39 | */ |
40 | enum OModel { | 40 | enum OModel { |
41 | Model_Unknown, // = 0 | 41 | Model_Unknown, // = 0 |
42 | 42 | ||
43 | Model_Series_Mask = 0xff000000, | 43 | Model_Series_Mask = 0xff000000, |
44 | 44 | ||
45 | Model_iPAQ = ( 1 << 24 ), | 45 | Model_iPAQ = ( 1 << 24 ), |
46 | 46 | ||
47 | Model_iPAQ_All = ( Model_iPAQ | 0xffffff ), | 47 | Model_iPAQ_All = ( Model_iPAQ | 0xffffff ), |
48 | Model_iPAQ_H31xx = ( Model_iPAQ | 0x000001 ), | 48 | Model_iPAQ_H31xx = ( Model_iPAQ | 0x000001 ), |
49 | Model_iPAQ_H36xx = ( Model_iPAQ | 0x000002 ), | 49 | Model_iPAQ_H36xx = ( Model_iPAQ | 0x000002 ), |
50 | Model_iPAQ_H37xx = ( Model_iPAQ | 0x000004 ), | 50 | Model_iPAQ_H37xx = ( Model_iPAQ | 0x000004 ), |
51 | Model_iPAQ_H38xx = ( Model_iPAQ | 0x000008 ), | 51 | Model_iPAQ_H38xx = ( Model_iPAQ | 0x000008 ), |
52 | Model_iPAQ_H39xx = ( Model_iPAQ | 0x000010 ), | 52 | Model_iPAQ_H39xx = ( Model_iPAQ | 0x000010 ), |
53 | 53 | ||
54 | Model_Jornada = ( 6 << 24 ), | ||
55 | Model_Jornada_56x = ( Model_Jornada | 0x000001 ), | ||
56 | |||
54 | Model_Zaurus = ( 2 << 24 ), | 57 | Model_Zaurus = ( 2 << 24 ), |
55 | 58 | ||
56 | Model_Zaurus_SL5000 = ( Model_Zaurus | 0x000001 ), | 59 | Model_Zaurus_SL5000 = ( Model_Zaurus | 0x000001 ), |
57 | Model_Zaurus_SL5500 = ( Model_Zaurus | 0x000002 ), | 60 | Model_Zaurus_SL5500 = ( Model_Zaurus | 0x000002 ), |
58 | Model_Zaurus_SLA300 = ( Model_Zaurus | 0x000003 ), | 61 | Model_Zaurus_SLA300 = ( Model_Zaurus | 0x000003 ), |
59 | Model_Zaurus_SLB600 = ( Model_Zaurus | 0x000004 ), | 62 | Model_Zaurus_SLB600 = ( Model_Zaurus | 0x000004 ), |
60 | Model_Zaurus_SLC700 = ( Model_Zaurus | 0x000005 ), | 63 | Model_Zaurus_SLC700 = ( Model_Zaurus | 0x000005 ), |
61 | 64 | ||
62 | Model_SIMpad = ( 3 << 24 ), | 65 | Model_SIMpad = ( 3 << 24 ), |
63 | 66 | ||
64 | Model_SIMpad_All = ( Model_SIMpad | 0xffffff ), | 67 | Model_SIMpad_All = ( Model_SIMpad | 0xffffff ), |
65 | Model_SIMpad_CL4 = ( Model_SIMpad | 0x000001 ), | 68 | Model_SIMpad_CL4 = ( Model_SIMpad | 0x000001 ), |
66 | Model_SIMpad_SL4 = ( Model_SIMpad | 0x000002 ), | 69 | Model_SIMpad_SL4 = ( Model_SIMpad | 0x000002 ), |
67 | Model_SIMpad_SLC = ( Model_SIMpad | 0x000004 ), | 70 | Model_SIMpad_SLC = ( Model_SIMpad | 0x000004 ), |
68 | Model_SIMpad_TSinus = ( Model_SIMpad | 0x000008 ), | 71 | Model_SIMpad_TSinus = ( Model_SIMpad | 0x000008 ), |
69 | 72 | ||
70 | Model_Ramses = ( 4 << 24 ), | 73 | Model_Ramses = ( 4 << 24 ), |
71 | 74 | ||
72 | Model_Ramses_All = ( Model_Ramses | 0xffffff ), | 75 | Model_Ramses_All = ( Model_Ramses | 0xffffff ), |
73 | Model_Ramses_MNCI = ( Model_Ramses | 0x000001 ), | 76 | Model_Ramses_MNCI = ( Model_Ramses | 0x000001 ), |
74 | 77 | ||
75 | Model_Yopy = ( 5 << 24 ), | 78 | Model_Yopy = ( 5 << 24 ), |
76 | 79 | ||
77 | Model_Yopy_All = ( Model_Yopy | 0xffffff ), | 80 | Model_Yopy_All = ( Model_Yopy | 0xffffff ), |