summaryrefslogtreecommitdiff
Unidiff
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
@@ -14,129 +14,128 @@
14 You should have received a copy of the GNU Library General Public License 14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to 15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. 17 Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <stdlib.h> 20#include <stdlib.h>
21#include <unistd.h> 21#include <unistd.h>
22#include <fcntl.h> 22#include <fcntl.h>
23#include <sys/ioctl.h> 23#include <sys/ioctl.h>
24#include <signal.h> 24#include <signal.h>
25#include <sys/time.h> 25#include <sys/time.h>
26#include <linux/soundcard.h> 26#include <linux/soundcard.h>
27#include <math.h> 27#include <math.h>
28 28
29#include <qapplication.h> 29#include <qapplication.h>
30 30
31#include <qfile.h> 31#include <qfile.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33#include <qpe/sound.h> 33#include <qpe/sound.h>
34#include <qpe/resource.h> 34#include <qpe/resource.h>
35#include <qpe/config.h> 35#include <qpe/config.h>
36#include <qpe/qcopenvelope_qws.h> 36#include <qpe/qcopenvelope_qws.h>
37 37
38#include "odevice.h" 38#include "odevice.h"
39 39
40#include <qwindowsystem_qws.h> 40#include <qwindowsystem_qws.h>
41 41
42#ifndef ARRAY_SIZE 42#ifndef ARRAY_SIZE
43#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 43#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
44#endif 44#endif
45 45
46// _IO and friends are only defined in kernel headers ... 46// _IO and friends are only defined in kernel headers ...
47 47
48#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 48#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
49 49
50#define OD_IO(type,number) OD_IOC(0,type,number,0) 50#define OD_IO(type,number) OD_IOC(0,type,number,0)
51#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 51#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
52#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 52#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
53#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 53#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
54 54
55using namespace Opie; 55using namespace Opie;
56 56
57class ODeviceData { 57class ODeviceData {
58public: 58public:
59 QString m_vendorstr; 59 QString m_vendorstr;
60 OVendor m_vendor; 60 OVendor m_vendor;
61 61
62 QString m_modelstr; 62 QString m_modelstr;
63 OModel m_model; 63 OModel m_model;
64 64
65 QString m_systemstr; 65 QString m_systemstr;
66 OSystem m_system; 66 OSystem m_system;
67 67
68 QString m_sysverstr; 68 QString m_sysverstr;
69 69
70 Transformation m_rotation; 70 Transformation m_rotation;
71 ODirection m_direction; 71 ODirection m_direction;
72 72
73 QValueList <ODeviceButton> *m_buttons; 73 QValueList <ODeviceButton> *m_buttons;
74 uint m_holdtime; 74 uint m_holdtime;
75 QStrList *m_cpu_frequencies; 75 QStrList *m_cpu_frequencies;
76}; 76};
77 77
78
79class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 78class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
80protected: 79protected:
81 virtual void init ( ); 80 virtual void init ( );
82 virtual void initButtons ( ); 81 virtual void initButtons ( );
83 82
84public: 83public:
85 virtual bool setSoftSuspend ( bool soft ); 84 virtual bool setSoftSuspend ( bool soft );
86 85
87 virtual bool setDisplayBrightness ( int b ); 86 virtual bool setDisplayBrightness ( int b );
88 virtual int displayBrightnessResolution ( ) const; 87 virtual int displayBrightnessResolution ( ) const;
89 88
90 virtual void alarmSound ( ); 89 virtual void alarmSound ( );
91 90
92 virtual QValueList <OLed> ledList ( ) const; 91 virtual QValueList <OLed> ledList ( ) const;
93 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 92 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
94 virtual OLedState ledState ( OLed led ) const; 93 virtual OLedState ledState ( OLed led ) const;
95 virtual bool setLedState ( OLed led, OLedState st ); 94 virtual bool setLedState ( OLed led, OLedState st );
96 95
97 virtual bool hasLightSensor ( ) const; 96 virtual bool hasLightSensor ( ) const;
98 virtual int readLightSensor ( ); 97 virtual int readLightSensor ( );
99 virtual int lightSensorResolution ( ) const; 98 virtual int lightSensorResolution ( ) const;
100 99
101protected: 100protected:
102 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 );
103 virtual void timerEvent ( QTimerEvent *te ); 102 virtual void timerEvent ( QTimerEvent *te );
104 103
105 int m_power_timer; 104 int m_power_timer;
106 105
107 OLedState m_leds [2]; 106 OLedState m_leds [2];
108}; 107};
109 108
110class Zaurus : public ODevice { 109class Zaurus : public ODevice {
111protected: 110protected:
112 virtual void init ( ); 111 virtual void init ( );
113 virtual void initButtons ( ); 112 virtual void initButtons ( );
114 113
115public: 114public:
116 virtual bool setSoftSuspend ( bool soft ); 115 virtual bool setSoftSuspend ( bool soft );
117 116
118 virtual bool setDisplayBrightness ( int b ); 117 virtual bool setDisplayBrightness ( int b );
119 virtual int displayBrightnessResolution ( ) const; 118 virtual int displayBrightnessResolution ( ) const;
120 119
121 virtual void alarmSound ( ); 120 virtual void alarmSound ( );
122 virtual void keySound ( ); 121 virtual void keySound ( );
123 virtual void touchSound ( ); 122 virtual void touchSound ( );
124 123
125 virtual QValueList <OLed> ledList ( ) const; 124 virtual QValueList <OLed> ledList ( ) const;
126 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 125 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
127 virtual OLedState ledState ( OLed led ) const; 126 virtual OLedState ledState ( OLed led ) const;
128 virtual bool setLedState ( OLed led, OLedState st ); 127 virtual bool setLedState ( OLed led, OLedState st );
129 128
130 static bool isZaurus(); 129 static bool isZaurus();
131 130
132protected: 131protected:
133 virtual void buzzer ( int snd ); 132 virtual void buzzer ( int snd );
134 133
135 OLedState m_leds [1]; 134 OLedState m_leds [1];
136 bool m_embedix; 135 bool m_embedix;
137}; 136};
138 137
139class SIMpad : public ODevice, public QWSServer::KeyboardFilter { 138class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
140protected: 139protected:
141 virtual void init ( ); 140 virtual void init ( );
142 virtual void initButtons ( ); 141 virtual void initButtons ( );
@@ -308,157 +307,195 @@ struct s_button {
308 "QPE/TaskBar", "toggleMenu()", 307 "QPE/TaskBar", "toggleMenu()",
309 "QPE/TaskBar", "toggleStartMenu()" }, 308 "QPE/TaskBar", "toggleStartMenu()" },
310 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 309 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
311 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"), 310 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"),
312 "devicebuttons/simpad_lower_left", 311 "devicebuttons/simpad_lower_left",
313 "mail", "raise()", 312 "mail", "raise()",
314 "mail", "newMail()" }, 313 "mail", "newMail()" },
315 314
316 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 315 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
317 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"), 316 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"),
318 "devicebuttons/simpad_upper_up", 317 "devicebuttons/simpad_upper_up",
319 "QPE/Launcher", "home()", 318 "QPE/Launcher", "home()",
320 "buttonsettings", "raise()" }, 319 "buttonsettings", "raise()" },
321 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 320 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
322 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"), 321 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"),
323 "devicebuttons/simpad_upper_down", 322 "devicebuttons/simpad_upper_down",
324 "addressbook", "raise()", 323 "addressbook", "raise()",
325 "addressbook", "beamBusinessCard()" }, 324 "addressbook", "beamBusinessCard()" },
326 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 325 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
327 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"), 326 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"),
328 "devicebuttons/simpad_upper_right", 327 "devicebuttons/simpad_upper_right",
329 "QPE/TaskBar", "toggleMenu()", 328 "QPE/TaskBar", "toggleMenu()",
330 "QPE/TaskBar", "toggleStartMenu()" }, 329 "QPE/TaskBar", "toggleStartMenu()" },
331 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 330 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
332 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"), 331 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"),
333 "devicebuttons/simpad_upper_left", 332 "devicebuttons/simpad_upper_left",
334 "QPE/Rotation", "flip()", 333 "QPE/Rotation", "flip()",
335 "QPE/Rotation", "flip()" }, 334 "QPE/Rotation", "flip()" },
336 /* 335 /*
337 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 336 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
338 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 337 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
339 "devicebuttons/simpad_lower_upper", 338 "devicebuttons/simpad_lower_upper",
340 "QPE/Launcher", "home()", 339 "QPE/Launcher", "home()",
341 "buttonsettings", "raise()" }, 340 "buttonsettings", "raise()" },
342 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 341 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
343 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 342 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
344 "devicebuttons/simpad_upper_lower", 343 "devicebuttons/simpad_upper_lower",
345 "QPE/Launcher", "home()", 344 "QPE/Launcher", "home()",
346 "buttonsettings", "raise()" }, 345 "buttonsettings", "raise()" },
347 */ 346 */
348}; 347};
349 348
350struct r_button { 349struct r_button {
351 uint model; 350 uint model;
352 Qt::Key code; 351 Qt::Key code;
353 char *utext; 352 char *utext;
354 char *pix; 353 char *pix;
355 char *fpressedservice; 354 char *fpressedservice;
356 char *fpressedaction; 355 char *fpressedaction;
357 char *fheldservice; 356 char *fheldservice;
358 char *fheldaction; 357 char *fheldaction;
359} ramses_buttons [] = { 358} ramses_buttons [] = {
360 { Model_Ramses_MNCI, 359 { Model_Ramses_MNCI,
361 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 360 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
362 "devicebuttons/z_menu", 361 "devicebuttons/z_menu",
363 "QPE/TaskBar", "toggleMenu()", 362 "QPE/TaskBar", "toggleMenu()",
364 "QPE/TaskBar", "toggleStartMenu()" }, 363 "QPE/TaskBar", "toggleStartMenu()" },
365 { Model_Ramses_MNCI, 364 { Model_Ramses_MNCI,
366 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 365 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
367 "devicebuttons/ipaq_home", 366 "devicebuttons/ipaq_home",
368 "QPE/Launcher", "home()", 367 "QPE/Launcher", "home()",
369 "buttonsettings", "raise()" }, 368 "buttonsettings", "raise()" },
370}; 369};
371 370
371class Yopy : public ODevice {
372protected:
373 virtual void init ( );
374 virtual void initButtons ( );
375
376public:
377 virtual bool suspend ( );
378
379 virtual bool setDisplayBrightness ( int b );
380 virtual int displayBrightnessResolution ( ) const;
381
382 static bool isYopy ( );
383};
384
385struct yopy_button {
386 Qt::Key code;
387 char *utext;
388 char *pix;
389 char *fpressedservice;
390 char *fpressedaction;
391 char *fheldservice;
392 char *fheldaction;
393} yopy_buttons [] = {
394 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"),
395 "devicebuttons/yopy_action",
396 "datebook", "nextView()",
397 "today", "raise()" },
398 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"),
399 "devicebuttons/yopy_ok",
400 "addressbook", "raise()",
401 "addressbook", "beamBusinessCard()" },
402 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"),
403 "devicebuttons/yopy_end",
404 "QPE/Launcher", "home()",
405 "buttonsettings", "raise()" },
406};
407
372static QCString makeChannel ( const char *str ) 408static QCString makeChannel ( const char *str )
373{ 409{
374 if ( str && !::strchr ( str, '/' )) 410 if ( str && !::strchr ( str, '/' ))
375 return QCString ( "QPE/Application/" ) + str; 411 return QCString ( "QPE/Application/" ) + str;
376 else 412 else
377 return str; 413 return str;
378} 414}
379 415
380static inline bool isQWS() 416static inline bool isQWS()
381{ 417{
382 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 418 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
383} 419}
384 420
385ODevice *ODevice::inst ( ) 421ODevice *ODevice::inst ( )
386{ 422{
387 static ODevice *dev = 0; 423 static ODevice *dev = 0;
388 424
389 if ( !dev ) { 425 if ( !dev ) {
390 if ( QFile::exists ( "/proc/hal/model" )) 426 if ( QFile::exists ( "/proc/hal/model" ))
391 dev = new iPAQ ( ); 427 dev = new iPAQ ( );
392 else if ( Zaurus::isZaurus() ) 428 else if ( Zaurus::isZaurus() )
393 dev = new Zaurus ( ); 429 dev = new Zaurus ( );
394 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) 430 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" ))
395 dev = new SIMpad ( ); 431 dev = new SIMpad ( );
396 else if ( QFile::exists ( "/proc/sys/board/name" )) 432 else if ( QFile::exists ( "/proc/sys/board/name" ))
397 dev = new Ramses ( ); 433 dev = new Ramses ( );
434 else if ( Yopy::isYopy() )
435 dev = new Yopy ( );
398 else 436 else
399 dev = new ODevice ( ); 437 dev = new ODevice ( );
400
401 dev-> init ( ); 438 dev-> init ( );
402 } 439 }
403 return dev; 440 return dev;
404} 441}
405 442
406 443
407/************************************************** 444/**************************************************
408 * 445 *
409 * common 446 * common
410 * 447 *
411 **************************************************/ 448 **************************************************/
412 449
413 450
414ODevice::ODevice ( ) 451ODevice::ODevice ( )
415{ 452{
416 d = new ODeviceData; 453 d = new ODeviceData;
417 454
418 d-> m_modelstr = "Unknown"; 455 d-> m_modelstr = "Unknown";
419 d-> m_model = Model_Unknown; 456 d-> m_model = Model_Unknown;
420 d-> m_vendorstr = "Unknown"; 457 d-> m_vendorstr = "Unknown";
421 d-> m_vendor = Vendor_Unknown; 458 d-> m_vendor = Vendor_Unknown;
422 d-> m_systemstr = "Unknown"; 459 d-> m_systemstr = "Unknown";
423 d-> m_system = System_Unknown; 460 d-> m_system = System_Unknown;
424 d-> m_sysverstr = "0.0"; 461 d-> m_sysverstr = "0.0";
425 d-> m_rotation = Rot0; 462 d-> m_rotation = Rot0;
426 d-> m_direction = CW; 463 d-> m_direction = CW;
427 464
428 d-> m_holdtime = 1000; // 1000ms 465 d-> m_holdtime = 1000; // 1000ms
429 d-> m_buttons = 0; 466 d-> m_buttons = 0;
430 d-> m_cpu_frequencies = new QStrList; 467 d-> m_cpu_frequencies = new QStrList;
431} 468}
432 469
433void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 470void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
434{ 471{
435 if ( msg == "deviceButtonMappingChanged()" ) { 472 if ( msg == "deviceButtonMappingChanged()" ) {
436 reloadButtonMapping ( ); 473 reloadButtonMapping ( );
437 } 474 }
438} 475}
439 476
440void ODevice::init ( ) 477void ODevice::init ( )
441{ 478{
442} 479}
443 480
444/** 481/**
445 * This method initialises the button mapping 482 * This method initialises the button mapping
446 */ 483 */
447void ODevice::initButtons ( ) 484void ODevice::initButtons ( )
448{ 485{
449 if ( d-> m_buttons ) 486 if ( d-> m_buttons )
450 return; 487 return;
451 488
452 // Simulation uses iPAQ 3660 device buttons 489 // Simulation uses iPAQ 3660 device buttons
453 490
454 qDebug ( "init Buttons" ); 491 qDebug ( "init Buttons" );
455 d-> m_buttons = new QValueList <ODeviceButton>; 492 d-> m_buttons = new QValueList <ODeviceButton>;
456 493
457 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 494 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
458 i_button *ib = ipaq_buttons + i; 495 i_button *ib = ipaq_buttons + i;
459 ODeviceButton b; 496 ODeviceButton b;
460 497
461 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 498 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
462 b. setKeycode ( ib-> code ); 499 b. setKeycode ( ib-> code );
463 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 500 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
464 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 501 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
@@ -869,128 +906,236 @@ void ODevice::reloadButtonMapping ( )
869 if ( cfg. hasGroup ( group )) { 906 if ( cfg. hasGroup ( group )) {
870 cfg. setGroup ( group ); 907 cfg. setGroup ( group );
871 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 908 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
872 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 909 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
873 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 910 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
874 911
875 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 912 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
876 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 913 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
877 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 914 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
878 } 915 }
879 916
880 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 917 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
881 918
882 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 919 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
883 } 920 }
884} 921}
885 922
886void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 923void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
887{ 924{
888 initButtons ( ); 925 initButtons ( );
889 926
890 QString mb_chan; 927 QString mb_chan;
891 928
892 if ( button >= (int) d-> m_buttons-> count ( )) 929 if ( button >= (int) d-> m_buttons-> count ( ))
893 return; 930 return;
894 931
895 ODeviceButton &b = ( *d-> m_buttons ) [button]; 932 ODeviceButton &b = ( *d-> m_buttons ) [button];
896 b. setPressedAction ( action ); 933 b. setPressedAction ( action );
897 934
898 mb_chan=b. pressedAction ( ). channel ( ); 935 mb_chan=b. pressedAction ( ). channel ( );
899 936
900 Config buttonFile ( "ButtonSettings" ); 937 Config buttonFile ( "ButtonSettings" );
901 buttonFile. setGroup ( "Button" + QString::number ( button )); 938 buttonFile. setGroup ( "Button" + QString::number ( button ));
902 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 939 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
903 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 940 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
904 941
905 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 942 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
906 943
907 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 944 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
908} 945}
909 946
910void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 947void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
911{ 948{
912 initButtons ( ); 949 initButtons ( );
913 950
914 if ( button >= (int) d-> m_buttons-> count ( )) 951 if ( button >= (int) d-> m_buttons-> count ( ))
915 return; 952 return;
916 953
917 ODeviceButton &b = ( *d-> m_buttons ) [button]; 954 ODeviceButton &b = ( *d-> m_buttons ) [button];
918 b. setHeldAction ( action ); 955 b. setHeldAction ( action );
919 956
920 Config buttonFile ( "ButtonSettings" ); 957 Config buttonFile ( "ButtonSettings" );
921 buttonFile. setGroup ( "Button" + QString::number ( button )); 958 buttonFile. setGroup ( "Button" + QString::number ( button ));
922 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 959 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
923 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 960 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
924 961
925 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 962 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
926 963
927 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 964 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
928} 965}
929void ODevice::virtual_hook(int, void* ){ 966void ODevice::virtual_hook(int, void* ){
930 967
931} 968}
932 969
970/**************************************************
971 *
972 * Yopy 3500/3700
973 *
974 **************************************************/
975
976bool Yopy::isYopy ( )
977{
978 QFile f( "/proc/cpuinfo" );
979 if ( f. open ( IO_ReadOnly ) ) {
980 QTextStream ts ( &f );
981 QString line;
982 while( line = ts. readLine ( ) ) {
983 if ( line. left ( 8 ) == "Hardware" ) {
984 int loc = line. find ( ":" );
985 if ( loc != -1 ) {
986 QString model =
987 line. mid ( loc + 2 ). simplifyWhiteSpace( );
988 return ( model == "Yopy" );
989 }
990 }
991 }
992 }
993 return false;
994}
995
996void Yopy::init ( )
997{
998 d-> m_vendorstr = "G.Mate";
999 d-> m_vendor = Vendor_GMate;
1000 d-> m_modelstr = "Yopy3700";
1001 d-> m_model = Model_Yopy_3700;
1002 d-> m_rotation = Rot0;
1003
1004 d-> m_systemstr = "Linupy";
1005 d-> m_system = System_Linupy;
1006
1007 QFile f ( "/etc/issue" );
1008 if ( f. open ( IO_ReadOnly )) {
1009 QTextStream ts ( &f );
1010 ts.readLine();
1011 d-> m_sysverstr = ts. readLine ( );
1012 f. close ( );
1013 }
1014}
1015
1016void Yopy::initButtons ( )
1017{
1018 if ( d-> m_buttons )
1019 return;
1020
1021 d-> m_buttons = new QValueList <ODeviceButton>;
1022
1023 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) {
1024
1025 yopy_button *ib = yopy_buttons + i;
1026
1027 ODeviceButton b;
1028
1029 b. setKeycode ( ib-> code );
1030 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1031 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1032 b. setFactoryPresetPressedAction
1033 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction));
1034 b. setFactoryPresetHeldAction
1035 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction));
1036
1037 d-> m_buttons-> append ( b );
1038 }
1039 reloadButtonMapping ( );
1040
1041 QCopChannel *sysch = new QCopChannel("QPE/System", this);
1042 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )),
1043 this, SLOT(systemMessage(const QCString &, const QByteArray & )));
1044}
1045
1046bool Yopy::suspend()
1047{
1048 /* Opie for Yopy does not implement its own power management at the
1049 moment. The public version runs parallel to X, and relies on the
1050 existing power management features. */
1051 return false;
1052}
1053
1054bool Yopy::setDisplayBrightness(int bright)
1055{
1056 /* The code here works, but is disabled as the current version runs
1057 parallel to X, and relies on the existing backlight demon. */
1058#if 0
1059 if ( QFile::exists("/proc/sys/pm/light") ) {
1060 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1061 if (fd >= 0 ) {
1062 if (bright)
1063 ::write(fd, "1\n", 2);
1064 else
1065 ::write(fd, "0\n", 2);
1066 ::close(fd);
1067 return true;
1068 }
1069 }
1070#endif
1071 return false;
1072}
1073
1074int Yopy::displayBrightnessResolution() const
1075{
1076 return 2;
1077}
933 1078
934/************************************************** 1079/**************************************************
935 * 1080 *
936 * iPAQ 1081 * iPAQ
937 * 1082 *
938 **************************************************/ 1083 **************************************************/
939 1084
940void iPAQ::init ( ) 1085void iPAQ::init ( )
941{ 1086{
942 d-> m_vendorstr = "HP"; 1087 d-> m_vendorstr = "HP";
943 d-> m_vendor = Vendor_HP; 1088 d-> m_vendor = Vendor_HP;
944 1089
945 QFile f ( "/proc/hal/model" ); 1090 QFile f ( "/proc/hal/model" );
946 1091
947 if ( f. open ( IO_ReadOnly )) { 1092 if ( f. open ( IO_ReadOnly )) {
948 QTextStream ts ( &f ); 1093 QTextStream ts ( &f );
949 1094
950 d-> m_modelstr = "H" + ts. readLine ( ); 1095 d-> m_modelstr = "H" + ts. readLine ( );
951 1096
952 if ( d-> m_modelstr == "H3100" ) 1097 if ( d-> m_modelstr == "H3100" )
953 d-> m_model = Model_iPAQ_H31xx; 1098 d-> m_model = Model_iPAQ_H31xx;
954 else if ( d-> m_modelstr == "H3600" ) 1099 else if ( d-> m_modelstr == "H3600" )
955 d-> m_model = Model_iPAQ_H36xx; 1100 d-> m_model = Model_iPAQ_H36xx;
956 else if ( d-> m_modelstr == "H3700" ) 1101 else if ( d-> m_modelstr == "H3700" )
957 d-> m_model = Model_iPAQ_H37xx; 1102 d-> m_model = Model_iPAQ_H37xx;
958 else if ( d-> m_modelstr == "H3800" ) 1103 else if ( d-> m_modelstr == "H3800" )
959 d-> m_model = Model_iPAQ_H38xx; 1104 d-> m_model = Model_iPAQ_H38xx;
960 else if ( d-> m_modelstr == "H3900" ) 1105 else if ( d-> m_modelstr == "H3900" )
961 d-> m_model = Model_iPAQ_H39xx; 1106 d-> m_model = Model_iPAQ_H39xx;
962 else 1107 else
963 d-> m_model = Model_Unknown; 1108 d-> m_model = Model_Unknown;
964 1109
965 f. close ( ); 1110 f. close ( );
966 } 1111 }
967 1112
968 switch ( d-> m_model ) { 1113 switch ( d-> m_model ) {
969 case Model_iPAQ_H31xx: 1114 case Model_iPAQ_H31xx:
970 case Model_iPAQ_H38xx: 1115 case Model_iPAQ_H38xx:
971 d-> m_rotation = Rot90; 1116 d-> m_rotation = Rot90;
972 break; 1117 break;
973 case Model_iPAQ_H36xx: 1118 case Model_iPAQ_H36xx:
974 case Model_iPAQ_H37xx: 1119 case Model_iPAQ_H37xx:
975 case Model_iPAQ_H39xx: 1120 case Model_iPAQ_H39xx:
976 default: 1121 default:
977 d-> m_rotation = Rot270; 1122 d-> m_rotation = Rot270;
978 break; 1123 break;
979 } 1124 }
980 1125
981 f. setName ( "/etc/familiar-version" ); 1126 f. setName ( "/etc/familiar-version" );
982 if ( f. open ( IO_ReadOnly )) { 1127 if ( f. open ( IO_ReadOnly )) {
983 d-> m_systemstr = "Familiar"; 1128 d-> m_systemstr = "Familiar";
984 d-> m_system = System_Familiar; 1129 d-> m_system = System_Familiar;
985 1130
986 QTextStream ts ( &f ); 1131 QTextStream ts ( &f );
987 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1132 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
988 1133
989 f. close ( ); 1134 f. close ( );
990 } else { 1135 } else {
991 f. setName ( "/etc/oz_version" ); 1136 f. setName ( "/etc/oz_version" );
992 1137
993 if ( f. open ( IO_ReadOnly )) { 1138 if ( f. open ( IO_ReadOnly )) {
994 d-> m_systemstr = "OpenEmbedded/iPaq"; 1139 d-> m_systemstr = "OpenEmbedded/iPaq";
995 d-> m_system = System_Familiar; 1140 d-> m_system = System_Familiar;
996 1141