-rw-r--r-- | libopie/odevice.cpp | 149 |
1 files changed, 147 insertions, 2 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index 3ff029e..aadd0bf 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp @@ -74,9 +74,8 @@ public: uint m_holdtime; QStrList *m_cpu_frequencies; }; - class iPAQ : public ODevice, public QWSServer::KeyboardFilter { protected: virtual void init ( ); virtual void initButtons ( ); @@ -368,8 +367,45 @@ struct r_button { "QPE/Launcher", "home()", "buttonsettings", "raise()" }, }; +class Yopy : public ODevice { +protected: + virtual void init ( ); + virtual void initButtons ( ); + +public: + virtual bool suspend ( ); + + virtual bool setDisplayBrightness ( int b ); + virtual int displayBrightnessResolution ( ) const; + + static bool isYopy ( ); +}; + +struct yopy_button { + Qt::Key code; + char *utext; + char *pix; + char *fpressedservice; + char *fpressedaction; + char *fheldservice; + char *fheldaction; +} yopy_buttons [] = { + { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"), + "devicebuttons/yopy_action", + "datebook", "nextView()", + "today", "raise()" }, + { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"), + "devicebuttons/yopy_ok", + "addressbook", "raise()", + "addressbook", "beamBusinessCard()" }, + { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"), + "devicebuttons/yopy_end", + "QPE/Launcher", "home()", + "buttonsettings", "raise()" }, +}; + static QCString makeChannel ( const char *str ) { if ( str && !::strchr ( str, '/' )) return QCString ( "QPE/Application/" ) + str; @@ -394,11 +430,12 @@ ODevice *ODevice::inst ( ) else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) dev = new SIMpad ( ); else if ( QFile::exists ( "/proc/sys/board/name" )) dev = new Ramses ( ); + else if ( Yopy::isYopy() ) + dev = new Yopy ( ); else dev = new ODevice ( ); - dev-> init ( ); } return dev; } @@ -929,8 +966,116 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) void ODevice::virtual_hook(int, void* ){ } +/************************************************** + * + * Yopy 3500/3700 + * + **************************************************/ + +bool Yopy::isYopy ( ) +{ + QFile f( "/proc/cpuinfo" ); + if ( f. open ( IO_ReadOnly ) ) { + QTextStream ts ( &f ); + QString line; + while( line = ts. readLine ( ) ) { + if ( line. left ( 8 ) == "Hardware" ) { + int loc = line. find ( ":" ); + if ( loc != -1 ) { + QString model = + line. mid ( loc + 2 ). simplifyWhiteSpace( ); + return ( model == "Yopy" ); + } + } + } + } + return false; +} + +void Yopy::init ( ) +{ + d-> m_vendorstr = "G.Mate"; + d-> m_vendor = Vendor_GMate; + d-> m_modelstr = "Yopy3700"; + d-> m_model = Model_Yopy_3700; + d-> m_rotation = Rot0; + + d-> m_systemstr = "Linupy"; + d-> m_system = System_Linupy; + + QFile f ( "/etc/issue" ); + if ( f. open ( IO_ReadOnly )) { + QTextStream ts ( &f ); + ts.readLine(); + d-> m_sysverstr = ts. readLine ( ); + f. close ( ); + } +} + +void Yopy::initButtons ( ) +{ + if ( d-> m_buttons ) + return; + + d-> m_buttons = new QValueList <ODeviceButton>; + + for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) { + + yopy_button *ib = yopy_buttons + i; + + ODeviceButton b; + + b. setKeycode ( ib-> code ); + b. setUserText ( QObject::tr ( "Button", ib-> utext )); + b. setPixmap ( Resource::loadPixmap ( ib-> pix )); + b. setFactoryPresetPressedAction + (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction)); + b. setFactoryPresetHeldAction + (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction)); + + d-> m_buttons-> append ( b ); + } + reloadButtonMapping ( ); + + QCopChannel *sysch = new QCopChannel("QPE/System", this); + connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), + this, SLOT(systemMessage(const QCString &, const QByteArray & ))); +} + +bool Yopy::suspend() +{ + /* Opie for Yopy does not implement its own power management at the + moment. The public version runs parallel to X, and relies on the + existing power management features. */ + return false; +} + +bool Yopy::setDisplayBrightness(int bright) +{ + /* The code here works, but is disabled as the current version runs + parallel to X, and relies on the existing backlight demon. */ +#if 0 + if ( QFile::exists("/proc/sys/pm/light") ) { + int fd = ::open("/proc/sys/pm/light", O_WRONLY); + if (fd >= 0 ) { + if (bright) + ::write(fd, "1\n", 2); + else + ::write(fd, "0\n", 2); + ::close(fd); + return true; + } + } +#endif + return false; +} + +int Yopy::displayBrightnessResolution() const +{ + return 2; +} /************************************************** * * iPAQ |