summaryrefslogtreecommitdiff
authorocheong <ocheong>2003-10-09 10:57:25 (UTC)
committer ocheong <ocheong>2003-10-09 10:57:25 (UTC)
commit5103b92c2fc7e28f87dcbdc3650820494359dcca (patch) (side-by-side diff)
tree0236f032f6b30adfbe208f3303e50ddccc772db6
parentc37ffc2854d1c968eb28d4ae185b5c64877c6e9d (diff)
downloadopie-5103b92c2fc7e28f87dcbdc3650820494359dcca.zip
opie-5103b92c2fc7e28f87dcbdc3650820494359dcca.tar.gz
opie-5103b92c2fc7e28f87dcbdc3650820494359dcca.tar.bz2
Added class for Yopy devices.
It doesn't really do much, as power and backlight is still handled by the demons running under X (Opie is meant to be used without terminating X).
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp149
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
@@ -46,65 +46,64 @@
// _IO and friends are only defined in kernel headers ...
#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
#define OD_IO(type,number) OD_IOC(0,type,number,0)
#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
using namespace Opie;
class ODeviceData {
public:
QString m_vendorstr;
OVendor m_vendor;
QString m_modelstr;
OModel m_model;
QString m_systemstr;
OSystem m_system;
QString m_sysverstr;
Transformation m_rotation;
ODirection m_direction;
QValueList <ODeviceButton> *m_buttons;
uint m_holdtime;
QStrList *m_cpu_frequencies;
};
-
class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
protected:
virtual void init ( );
virtual void initButtons ( );
public:
virtual bool setSoftSuspend ( bool soft );
virtual bool setDisplayBrightness ( int b );
virtual int displayBrightnessResolution ( ) const;
virtual void alarmSound ( );
virtual QValueList <OLed> ledList ( ) const;
virtual QValueList <OLedState> ledStateList ( OLed led ) const;
virtual OLedState ledState ( OLed led ) const;
virtual bool setLedState ( OLed led, OLedState st );
virtual bool hasLightSensor ( ) const;
virtual int readLightSensor ( );
virtual int lightSensorResolution ( ) const;
protected:
virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
virtual void timerEvent ( QTimerEvent *te );
int m_power_timer;
OLedState m_leds [2];
};
class Zaurus : public ODevice {
@@ -340,93 +339,131 @@ struct s_button {
"QPE/Launcher", "home()",
"buttonsettings", "raise()" },
{ Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
"devicebuttons/simpad_upper_lower",
"QPE/Launcher", "home()",
"buttonsettings", "raise()" },
*/
};
struct r_button {
uint model;
Qt::Key code;
char *utext;
char *pix;
char *fpressedservice;
char *fpressedaction;
char *fheldservice;
char *fheldaction;
} ramses_buttons [] = {
{ Model_Ramses_MNCI,
Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
"devicebuttons/z_menu",
"QPE/TaskBar", "toggleMenu()",
"QPE/TaskBar", "toggleStartMenu()" },
{ Model_Ramses_MNCI,
Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
"devicebuttons/ipaq_home",
"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;
else
return str;
}
static inline bool isQWS()
{
return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
}
ODevice *ODevice::inst ( )
{
static ODevice *dev = 0;
if ( !dev ) {
if ( QFile::exists ( "/proc/hal/model" ))
dev = new iPAQ ( );
else if ( Zaurus::isZaurus() )
dev = new Zaurus ( );
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;
}
/**************************************************
*
* common
*
**************************************************/
ODevice::ODevice ( )
{
d = new ODeviceData;
d-> m_modelstr = "Unknown";
d-> m_model = Model_Unknown;
d-> m_vendorstr = "Unknown";
d-> m_vendor = Vendor_Unknown;
d-> m_systemstr = "Unknown";
d-> m_system = System_Unknown;
d-> m_sysverstr = "0.0";
d-> m_rotation = Rot0;
d-> m_direction = CW;
d-> m_holdtime = 1000; // 1000ms
d-> m_buttons = 0;
d-> m_cpu_frequencies = new QStrList;
}
@@ -901,64 +938,172 @@ void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
buttonFile. setGroup ( "Button" + QString::number ( button ));
buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
// buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
}
void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
{
initButtons ( );
if ( button >= (int) d-> m_buttons-> count ( ))
return;
ODeviceButton &b = ( *d-> m_buttons ) [button];
b. setHeldAction ( action );
Config buttonFile ( "ButtonSettings" );
buttonFile. setGroup ( "Button" + QString::number ( button ));
buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
// buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
}
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
*
**************************************************/
void iPAQ::init ( )
{
d-> m_vendorstr = "HP";
d-> m_vendor = Vendor_HP;
QFile f ( "/proc/hal/model" );
if ( f. open ( IO_ReadOnly )) {
QTextStream ts ( &f );
d-> m_modelstr = "H" + ts. readLine ( );
if ( d-> m_modelstr == "H3100" )
d-> m_model = Model_iPAQ_H31xx;
else if ( d-> m_modelstr == "H3600" )
d-> m_model = Model_iPAQ_H36xx;
else if ( d-> m_modelstr == "H3700" )
d-> m_model = Model_iPAQ_H37xx;
else if ( d-> m_modelstr == "H3800" )
d-> m_model = Model_iPAQ_H38xx;
else if ( d-> m_modelstr == "H3900" )
d-> m_model = Model_iPAQ_H39xx;
else
d-> m_model = Model_Unknown;