summaryrefslogtreecommitdiff
path: root/libopie2
Unidiff
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_ipaq.cpp77
-rw-r--r--libopie2/opiecore/device/odevice_mypal.cpp17
2 files changed, 43 insertions, 51 deletions
diff --git a/libopie2/opiecore/device/odevice_ipaq.cpp b/libopie2/opiecore/device/odevice_ipaq.cpp
index 00939bf..16ecc27 100644
--- a/libopie2/opiecore/device/odevice_ipaq.cpp
+++ b/libopie2/opiecore/device/odevice_ipaq.cpp
@@ -63,118 +63,110 @@ using namespace Opie::Core::Internal;
63/* KERNEL */ 63/* KERNEL */
64#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 64#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
65 65
66#define OD_IO(type,number) OD_IOC(0,type,number,0) 66#define OD_IO(type,number) OD_IOC(0,type,number,0)
67#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 67#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
68#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 68#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
69#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 69#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
70 70
71typedef struct { 71typedef struct {
72 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 72 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
73 unsigned char TotalTime; /* Units of 5 seconds */ 73 unsigned char TotalTime; /* Units of 5 seconds */
74 unsigned char OnTime; /* units of 100m/s */ 74 unsigned char OnTime; /* units of 100m/s */
75 unsigned char OffTime; /* units of 100m/s */ 75 unsigned char OffTime; /* units of 100m/s */
76} LED_IN; 76} LED_IN;
77 77
78typedef struct { 78typedef struct {
79 unsigned char mode; 79 unsigned char mode;
80 unsigned char pwr; 80 unsigned char pwr;
81 unsigned char brightness; 81 unsigned char brightness;
82} FLITE_IN; 82} FLITE_IN;
83 83
84#define LED_ON OD_IOW( 'f', 5, LED_IN ) 84#define LED_ON OD_IOW( 'f', 5, LED_IN )
85#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 85#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
86 86
87#define Model_Keyboardless_2_6 (Model_iPAQ_H191x | Model_iPAQ_H22xx | Model_iPAQ_HX4700 | Model_iPAQ_H4xxx)
88
87struct i_button ipaq_buttons [] = { 89struct i_button ipaq_buttons [] = {
88 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x | Model_iPAQ_H22xx | Model_iPAQ_HX4700 | Model_iPAQ_H4xxx, 90
91 // Common button map for all keyboardless devices with 2.6 kernel
92 { Model_Keyboardless_2_6,
89 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 93 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
90 "devicebuttons/ipaq_calendar", 94 "devicebuttons/ipaq_calendar",
91 "datebook", "nextView()", 95 "datebook", "nextView()",
92 "today", "raise()" }, 96 "today", "raise()" },
93 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x | Model_iPAQ_H22xx | Model_iPAQ_HX4700 | Model_iPAQ_H4xxx, 97 { Model_Keyboardless_2_6,
94 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 98 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
95 "devicebuttons/ipaq_contact", 99 "devicebuttons/ipaq_contact",
96 "addressbook", "raise()", 100 "addressbook", "raise()",
97 "addressbook", "beamBusinessCard()" }, 101 "addressbook", "beamBusinessCard()" },
98 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 102 { Model_Keyboardless_2_6,
99 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 103 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Mail Button"),
100 "devicebuttons/ipaq_menu",
101 "QPE/TaskBar", "toggleMenu()",
102 "QPE/TaskBar", "toggleStartMenu()" },
103 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
104 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
105 "devicebuttons/ipaq_mail", 104 "devicebuttons/ipaq_mail",
106 "opiemail", "raise()", 105 "opiemail", "raise()",
107 "opiemail", "newMail()" }, 106 "opiemail", "newMail()" },
108 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x | Model_iPAQ_H4xxx, 107 { Model_Keyboardless_2_6,
109 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 108 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
110 "devicebuttons/ipaq_home", 109 "devicebuttons/ipaq_home",
111 "QPE/Launcher", "home()", 110 "QPE/Launcher", "home()",
112 "buttonsettings", "raise()" }, 111 "buttonsettings", "raise()" },
113 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 112 { Model_Keyboardless_2_6,
114 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 113 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
115 "devicebuttons/ipaq_record", 114 "devicebuttons/ipaq_record",
116 "QPE/VMemo", "toggleRecord()", 115 "QPE/VMemo", "toggleRecord()",
117 "sound", "raise()" }, 116 "sound", "raise()" },
118 117
119 { Model_iPAQ_H191x | Model_iPAQ_H4xxx, 118 // Devices with 2.4 kernel
120 Qt::Key_F8, QT_TRANSLATE_NOOP("Button", "Mail Button"), 119 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
121 "devicebuttons/ipaq_mail", 120 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
122 "opiemail", "raise()", 121 "devicebuttons/ipaq_calendar",
123 "opiemail", "newMail()" }, 122 "datebook", "nextView()",
124 { Model_iPAQ_H191x | Model_iPAQ_H4xxx, 123 "today", "raise()" },
125 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Record Button"), 124 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
126 "devicebuttons/ipaq_record", 125 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
127 "QPE/VMemo", "toggleRecord()", 126 "devicebuttons/ipaq_contact",
128 "sound", "raise()" }, 127 "addressbook", "raise()",
129 128 "addressbook", "beamBusinessCard()" },
130 //h2200 has different button mapping 129 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
131 { Model_iPAQ_H22xx, 130 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
132 Qt::Key_NumLock, QT_TRANSLATE_NOOP("Button", "Mail Button"),
133 "devicebuttons/ipaq_mail",
134 "opiemail", "raise()",
135 "opiemail", "newMail()" },
136 { Model_iPAQ_H22xx,
137 Qt::Key_ScrollLock, QT_TRANSLATE_NOOP("Button", "Menu Button"),
138 "devicebuttons/ipaq_menu", 131 "devicebuttons/ipaq_menu",
139 "QPE/TaskBar", "toggleMenu()", 132 "QPE/TaskBar", "toggleMenu()",
140 "QPE/TaskBar", "toggleStartMenu()" }, 133 "QPE/TaskBar", "toggleStartMenu()" },
141 // and hx4700 has different button mapping still 134 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
142 { Model_iPAQ_HX4700, 135 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
143 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Mail Button"),
144 "devicebuttons/ipaq_mail", 136 "devicebuttons/ipaq_mail",
145 "opiemail", "raise()", 137 "opiemail", "raise()",
146 "opiemail", "newMail()" }, 138 "opiemail", "newMail()" },
147 { Model_iPAQ_HX4700, 139 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
148 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Record Button"), 140 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
149 "devicebuttons/ipaq_record",
150 "QPE/VMemo", "toggleRecord()",
151 "sound", "raise()" },
152 { Model_iPAQ_HX4700,
153 Qt::Key_Home, QT_TRANSLATE_NOOP("Button", "Home Button"),
154 "devicebuttons/ipaq_home", 141 "devicebuttons/ipaq_home",
155 "QPE/Launcher", "home()", 142 "QPE/Launcher", "home()",
156 "buttonsettings", "raise()" }, 143 "buttonsettings", "raise()" },
144 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
145 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
146 "devicebuttons/ipaq_record",
147 "QPE/VMemo", "toggleRecord()",
148 "sound", "raise()" },
157 149
158}; 150};
159 151
160void iPAQ::init(const QString& model) 152void iPAQ::init(const QString& model)
161{ 153{
162 d->m_vendorstr = "HP"; 154 d->m_vendorstr = "HP";
163 d->m_vendor = Vendor_HP; 155 d->m_vendor = Vendor_HP;
164 156
165 d->m_modelstr = model.mid(model.findRev('H')); 157 d->m_modelstr = model.mid(model.findRev('H'));
166 158
167 if ( d->m_modelstr == "H3100" ) 159 if ( d->m_modelstr == "H3100" )
168 d->m_model = Model_iPAQ_H31xx; 160 d->m_model = Model_iPAQ_H31xx;
169 else if ( d->m_modelstr == "H3600" ) 161 else if ( d->m_modelstr == "H3600" )
170 d->m_model = Model_iPAQ_H36xx; 162 d->m_model = Model_iPAQ_H36xx;
171 else if ( d->m_modelstr == "H3700" ) 163 else if ( d->m_modelstr == "H3700" )
172 d->m_model = Model_iPAQ_H37xx; 164 d->m_model = Model_iPAQ_H37xx;
173 else if ( d->m_modelstr == "H3800" ) 165 else if ( d->m_modelstr == "H3800" )
174 d->m_model = Model_iPAQ_H38xx; 166 d->m_model = Model_iPAQ_H38xx;
175 else if ( d->m_modelstr == "H3900" ) 167 else if ( d->m_modelstr == "H3900" )
176 d->m_model = Model_iPAQ_H39xx; 168 d->m_model = Model_iPAQ_H39xx;
177 else if ( d->m_modelstr == "H5400" ) 169 else if ( d->m_modelstr == "H5400" )
178 d->m_model = Model_iPAQ_H5xxx; 170 d->m_model = Model_iPAQ_H5xxx;
179 else if ( d->m_modelstr == "H2200" ) 171 else if ( d->m_modelstr == "H2200" )
180 d->m_model = Model_iPAQ_H22xx; 172 d->m_model = Model_iPAQ_H22xx;
@@ -325,53 +317,50 @@ bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, b
325 break; 317 break;
326 } 318 }
327 319
328 // Rotate cursor keys 180 or 270 320 // Rotate cursor keys 180 or 270
329 case Key_Left : 321 case Key_Left :
330 case Key_Right: 322 case Key_Right:
331 case Key_Up : 323 case Key_Up :
332 case Key_Down : { 324 case Key_Down : {
333 if (( d->m_model == Model_iPAQ_H31xx ) || 325 if (( d->m_model == Model_iPAQ_H31xx ) ||
334 ( d->m_model == Model_iPAQ_H38xx )) { 326 ( d->m_model == Model_iPAQ_H38xx )) {
335 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 327 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
336 } 328 }
337 // Rotate the cursor keys by 270 329 // Rotate the cursor keys by 270
338 // keycode - Key_Left = position of the button starting from left clockwise 330 // keycode - Key_Left = position of the button starting from left clockwise
339 // add the rotation to it and modolo. No we've the original offset 331 // add the rotation to it and modolo. No we've the original offset
340 // add the offset to the Key_Left key 332 // add the offset to the Key_Left key
341 if (( d->m_model == Model_iPAQ_H5xxx ) || 333 if (( d->m_model == Model_iPAQ_H5xxx ) ||
342 ( d->m_model == Model_iPAQ_H191x ) || 334 ( d->m_model == Model_iPAQ_H191x ) ||
343 ( d->m_model == Model_iPAQ_H4xxx ) || 335 ( d->m_model == Model_iPAQ_H4xxx ) ||
344 ( d->m_model == Model_iPAQ_H1940 )) 336 ( d->m_model == Model_iPAQ_H1940 ))
345 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; 337 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
346 break; 338 break;
347 } 339 }
348 340
349 // map Power Button short/long press to F6 for h191x
350 case Key_F6:
351 if ( d->m_model != Model_iPAQ_H191x && d->m_model != Model_iPAQ_H4xxx )
352 break;
353 // map Power Button short/long press to F34/F35 341 // map Power Button short/long press to F34/F35
342 case HardKey_Suspend: // Hope we don't have infinite recursion here
354 case Key_SysReq: { 343 case Key_SysReq: {
355 if ( isPress ) { 344 if ( isPress ) {
356 if ( m_power_timer ) 345 if ( m_power_timer )
357 killTimer ( m_power_timer ); 346 killTimer ( m_power_timer );
358 m_power_timer = startTimer ( 500 ); 347 m_power_timer = startTimer ( 500 );
359 } 348 }
360 else if ( m_power_timer ) { 349 else if ( m_power_timer ) {
361 killTimer ( m_power_timer ); 350 killTimer ( m_power_timer );
362 m_power_timer = 0; 351 m_power_timer = 0;
363 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 352 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
364 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 353 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
365 } 354 }
366 newkeycode = Key_unknown; 355 newkeycode = Key_unknown;
367 break; 356 break;
368 } 357 }
369 } 358 }
370 359
371 if ( newkeycode != keycode ) { 360 if ( newkeycode != keycode ) {
372 if ( newkeycode != Key_unknown ) 361 if ( newkeycode != Key_unknown )
373 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 362 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
374 return true; 363 return true;
375 } 364 }
376 else 365 else
377 return false; 366 return false;
diff --git a/libopie2/opiecore/device/odevice_mypal.cpp b/libopie2/opiecore/device/odevice_mypal.cpp
index 7eb8d1d..208be46 100644
--- a/libopie2/opiecore/device/odevice_mypal.cpp
+++ b/libopie2/opiecore/device/odevice_mypal.cpp
@@ -39,71 +39,74 @@
39/* OPIE */ 39/* OPIE */
40#include <qpe/config.h> 40#include <qpe/config.h>
41#include <qpe/sound.h> 41#include <qpe/sound.h>
42#include <qpe/qcopenvelope_qws.h> 42#include <qpe/qcopenvelope_qws.h>
43 43
44#include <opie2/okeyfilter.h> 44#include <opie2/okeyfilter.h>
45#include <opie2/oresource.h> 45#include <opie2/oresource.h>
46 46
47/* STD */ 47/* STD */
48#include <fcntl.h> 48#include <fcntl.h>
49#include <math.h> 49#include <math.h>
50#include <stdlib.h> 50#include <stdlib.h>
51#include <signal.h> 51#include <signal.h>
52#include <sys/ioctl.h> 52#include <sys/ioctl.h>
53#include <sys/time.h> 53#include <sys/time.h>
54#include <unistd.h> 54#include <unistd.h>
55#ifndef QT_NO_SOUND 55#ifndef QT_NO_SOUND
56#include <linux/soundcard.h> 56#include <linux/soundcard.h>
57#endif 57#endif
58 58
59 59
60using namespace Opie::Core; 60using namespace Opie::Core;
61using namespace Opie::Core::Internal; 61using namespace Opie::Core::Internal;
62 62
63#define Model_Keyboardless_2_6 (Model_MyPal_716)
64
63struct m_button mypal_buttons [] = { 65struct m_button mypal_buttons [] = {
64 { Model_MyPal_716, 66 // Common button map for all keyboardless devices with 2.6 kernel
67 { Model_Keyboardless_2_6,
65 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 68 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
66 "devicebuttons/ipaq_calendar", 69 "devicebuttons/ipaq_calendar",
67 "datebook", "nextView()", 70 "datebook", "nextView()",
68 "today", "raise()" }, 71 "today", "raise()" },
69 { Model_MyPal_716, 72 { Model_Keyboardless_2_6,
70 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 73 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
71 "devicebuttons/ipaq_contact", 74 "devicebuttons/ipaq_contact",
72 "addressbook", "raise()", 75 "addressbook", "raise()",
73 "addressbook", "beamBusinessCard()" }, 76 "addressbook", "beamBusinessCard()" },
74 { Model_MyPal_716, 77 { Model_Keyboardless_2_6,
75 Qt::Key_F8, QT_TRANSLATE_NOOP("Button", "Mail Button"), 78 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Mail Button"),
76 "devicebuttons/ipaq_mail", 79 "devicebuttons/ipaq_mail",
77 "opiemail", "raise()", 80 "opiemail", "raise()",
78 "opiemail", "newMail()" }, 81 "opiemail", "newMail()" },
79 { Model_MyPal_716, 82 { Model_Keyboardless_2_6,
80 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 83 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
81 "devicebuttons/ipaq_home", 84 "devicebuttons/ipaq_home",
82 "QPE/Launcher", "home()", 85 "QPE/Launcher", "home()",
83 "buttonsettings", "raise()" }, 86 "buttonsettings", "raise()" },
84 { Model_MyPal_716, 87 { Model_Keyboardless_2_6,
85 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Record Button"), 88 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
86 "devicebuttons/ipaq_record", 89 "devicebuttons/ipaq_record",
87 "QPE/VMemo", "toggleRecord()", 90 "QPE/VMemo", "toggleRecord()",
88 "sound", "raise()" }, 91 "sound", "raise()" },
89}; 92};
90 93
91void MyPal::init(const QString& model) 94void MyPal::init(const QString& model)
92{ 95{
93 d->m_vendorstr = "Asus"; 96 d->m_vendorstr = "Asus";
94 d->m_vendor = Vendor_Asus; 97 d->m_vendor = Vendor_Asus;
95 98
96 d->m_modelstr = model.mid(model.findRev('A')); 99 d->m_modelstr = model.mid(model.findRev('A'));
97 if ( d->m_modelstr == "A716" ) 100 if ( d->m_modelstr == "A716" )
98 d->m_model = Model_MyPal_716; 101 d->m_model = Model_MyPal_716;
99 else 102 else
100 d->m_model = Model_Unknown; 103 d->m_model = Model_Unknown;
101 104
102 d->m_rotation = Rot0; 105 d->m_rotation = Rot0;
103 106
104 m_power_timer = 0; 107 m_power_timer = 0;
105} 108}
106 109
107void MyPal::initButtons() 110void MyPal::initButtons()
108{ 111{
109 if ( d->m_buttons ) 112 if ( d->m_buttons )