author | llornkcor <llornkcor> | 2006-07-14 20:15:58 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2006-07-14 20:15:58 (UTC) |
commit | 20b8c8eb22b5498647430da49986f75b78cf2d79 (patch) (unidiff) | |
tree | 0309ad594266a40cf17959b5c0d322933b6256ca /libopie2 | |
parent | 36dece4760b1ac1799929221b49eb3bee98c2367 (diff) | |
download | opie-20b8c8eb22b5498647430da49986f75b78cf2d79.zip opie-20b8c8eb22b5498647430da49986f75b78cf2d79.tar.gz opie-20b8c8eb22b5498647430da49986f75b78cf2d79.tar.bz2 |
more htc universal stuff
-rw-r--r-- | libopie2/opiecore/device/odevice.h | 7 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_htc.cpp | 221 |
2 files changed, 59 insertions, 169 deletions
diff --git a/libopie2/opiecore/device/odevice.h b/libopie2/opiecore/device/odevice.h index 9afb92d..c2fa411 100644 --- a/libopie2/opiecore/device/odevice.h +++ b/libopie2/opiecore/device/odevice.h | |||
@@ -29,147 +29,154 @@ | |||
29 | 29 | ||
30 | #ifndef ODEVICE_H_ | 30 | #ifndef ODEVICE_H_ |
31 | #define ODEVICE_H_ | 31 | #define ODEVICE_H_ |
32 | 32 | ||
33 | /* OPIE */ | 33 | /* OPIE */ |
34 | #include <opie2/odevicebutton.h> | 34 | #include <opie2/odevicebutton.h> |
35 | #include <qpe/qpeapplication.h> /* for Transformation enum.. */ | 35 | #include <qpe/qpeapplication.h> /* for Transformation enum.. */ |
36 | 36 | ||
37 | /* QT */ | 37 | /* QT */ |
38 | #include <qnamespace.h> | 38 | #include <qnamespace.h> |
39 | #include <qobject.h> | 39 | #include <qobject.h> |
40 | #include <qstring.h> | 40 | #include <qstring.h> |
41 | 41 | ||
42 | 42 | ||
43 | #include <qstrlist.h> | 43 | #include <qstrlist.h> |
44 | #include <qwindowsystem_qws.h> | 44 | #include <qwindowsystem_qws.h> |
45 | 45 | ||
46 | 46 | ||
47 | class Sound; | 47 | class Sound; |
48 | 48 | ||
49 | namespace Opie{ | 49 | namespace Opie{ |
50 | namespace Core{ | 50 | namespace Core{ |
51 | 51 | ||
52 | class ODeviceData; | 52 | class ODeviceData; |
53 | /** | 53 | /** |
54 | * The available devices | 54 | * The available devices |
55 | */ | 55 | */ |
56 | enum OModel { | 56 | enum OModel { |
57 | Model_Unknown, // = 0 | 57 | Model_Unknown, // = 0 |
58 | 58 | ||
59 | Model_Series_Mask = 0xffff0000, | 59 | Model_Series_Mask = 0xffff0000, |
60 | 60 | ||
61 | Model_iPAQ = ( 1 << 16 ), | 61 | Model_iPAQ = ( 1 << 16 ), |
62 | 62 | ||
63 | Model_iPAQ_All = ( Model_iPAQ | 0xffff ), | 63 | Model_iPAQ_All = ( Model_iPAQ | 0xffff ), |
64 | Model_iPAQ_H31xx = ( Model_iPAQ | 0x0001 ), | 64 | Model_iPAQ_H31xx = ( Model_iPAQ | 0x0001 ), |
65 | Model_iPAQ_H36xx = ( Model_iPAQ | 0x0002 ), | 65 | Model_iPAQ_H36xx = ( Model_iPAQ | 0x0002 ), |
66 | Model_iPAQ_H37xx = ( Model_iPAQ | 0x0003 ), | 66 | Model_iPAQ_H37xx = ( Model_iPAQ | 0x0003 ), |
67 | Model_iPAQ_H38xx = ( Model_iPAQ | 0x0004 ), | 67 | Model_iPAQ_H38xx = ( Model_iPAQ | 0x0004 ), |
68 | Model_iPAQ_H39xx = ( Model_iPAQ | 0x0005 ), | 68 | Model_iPAQ_H39xx = ( Model_iPAQ | 0x0005 ), |
69 | Model_iPAQ_H5xxx = ( Model_iPAQ | 0x0006 ), | 69 | Model_iPAQ_H5xxx = ( Model_iPAQ | 0x0006 ), |
70 | Model_iPAQ_H22xx = ( Model_iPAQ | 0x0007 ), | 70 | Model_iPAQ_H22xx = ( Model_iPAQ | 0x0007 ), |
71 | Model_iPAQ_H191x = ( Model_iPAQ | 0x0008 ), | 71 | Model_iPAQ_H191x = ( Model_iPAQ | 0x0008 ), |
72 | Model_iPAQ_H1940 = ( Model_iPAQ | 0x0009 ), | 72 | Model_iPAQ_H1940 = ( Model_iPAQ | 0x0009 ), |
73 | Model_iPAQ_HX4700 = ( Model_iPAQ | 0x000A ), | 73 | Model_iPAQ_HX4700 = ( Model_iPAQ | 0x000A ), |
74 | Model_Jornada = ( 6 << 16 ), | 74 | Model_Jornada = ( 6 << 16 ), |
75 | Model_Jornada_56x = ( Model_Jornada | 0x0001 ), | 75 | Model_Jornada_56x = ( Model_Jornada | 0x0001 ), |
76 | Model_Jornada_720 = ( Model_Jornada | 0x0002 ), | 76 | Model_Jornada_720 = ( Model_Jornada | 0x0002 ), |
77 | Model_Jornada_820 = ( Model_Jornada | 0x0003 ), | ||
77 | 78 | ||
78 | Model_Zaurus = ( 2 << 16 ), | 79 | Model_Zaurus = ( 2 << 16 ), |
79 | 80 | ||
80 | Model_Zaurus_SL5000 = ( Model_Zaurus | 0x0001 ), | 81 | Model_Zaurus_SL5000 = ( Model_Zaurus | 0x0001 ), |
81 | Model_Zaurus_SL5500 = ( Model_Zaurus | 0x0002 ), | 82 | Model_Zaurus_SL5500 = ( Model_Zaurus | 0x0002 ), |
82 | Model_Zaurus_SLA300 = ( Model_Zaurus | 0x0003 ), | 83 | Model_Zaurus_SLA300 = ( Model_Zaurus | 0x0003 ), |
83 | Model_Zaurus_SLB600 = ( Model_Zaurus | 0x0004 ), | 84 | Model_Zaurus_SLB600 = ( Model_Zaurus | 0x0004 ), |
84 | Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x0005 ), | 85 | Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x0005 ), |
85 | Model_Zaurus_SL6000 = ( Model_Zaurus | 0x0006 ), | 86 | Model_Zaurus_SL6000 = ( Model_Zaurus | 0x0006 ), |
86 | Model_Zaurus_SLC3000 = ( Model_Zaurus | 0x0007 ), | 87 | Model_Zaurus_SLC3000 = ( Model_Zaurus | 0x0007 ), |
87 | Model_Zaurus_SLC1000 = ( Model_Zaurus | 0x0008 ), | 88 | Model_Zaurus_SLC1000 = ( Model_Zaurus | 0x0008 ), |
88 | Model_Zaurus_SLC3100 = ( Model_Zaurus | 0x0009 ), | 89 | Model_Zaurus_SLC3100 = ( Model_Zaurus | 0x0009 ), |
89 | 90 | ||
90 | Model_SIMpad = ( 3 << 16 ), | 91 | Model_SIMpad = ( 3 << 16 ), |
91 | 92 | ||
92 | Model_SIMpad_All = ( Model_SIMpad | 0xffff ), | 93 | Model_SIMpad_All = ( Model_SIMpad | 0xffff ), |
93 | Model_SIMpad_CL4 = ( Model_SIMpad | 0x0001 ), | 94 | Model_SIMpad_CL4 = ( Model_SIMpad | 0x0001 ), |
94 | Model_SIMpad_SL4 = ( Model_SIMpad | 0x0002 ), | 95 | Model_SIMpad_SL4 = ( Model_SIMpad | 0x0002 ), |
95 | Model_SIMpad_SLC = ( Model_SIMpad | 0x0003 ), | 96 | Model_SIMpad_SLC = ( Model_SIMpad | 0x0003 ), |
96 | Model_SIMpad_TSinus = ( Model_SIMpad | 0x0004 ), | 97 | Model_SIMpad_TSinus = ( Model_SIMpad | 0x0004 ), |
97 | 98 | ||
98 | Model_Ramses = ( 4 << 16 ), | 99 | Model_Ramses = ( 4 << 16 ), |
99 | 100 | ||
100 | Model_Ramses_All = ( Model_Ramses | 0xffff ), | 101 | Model_Ramses_All = ( Model_Ramses | 0xffff ), |
101 | Model_Ramses_MNCI = ( Model_Ramses | 0x0001 ), | 102 | Model_Ramses_MNCI = ( Model_Ramses | 0x0001 ), |
102 | Model_Ramses_MNCIRX = ( Model_Ramses | 0x0002 ), | 103 | Model_Ramses_MNCIRX = ( Model_Ramses | 0x0002 ), |
103 | 104 | ||
104 | Model_Yopy = ( 5 << 16 ), | 105 | Model_Yopy = ( 5 << 16 ), |
105 | 106 | ||
106 | Model_Yopy_All = ( Model_Yopy | 0xffff ), | 107 | Model_Yopy_All = ( Model_Yopy | 0xffff ), |
107 | Model_Yopy_3000 = ( Model_Yopy | 0x0001 ), | 108 | Model_Yopy_3000 = ( Model_Yopy | 0x0001 ), |
108 | Model_Yopy_3500 = ( Model_Yopy | 0x0002 ), | 109 | Model_Yopy_3500 = ( Model_Yopy | 0x0002 ), |
109 | Model_Yopy_3700 = ( Model_Yopy | 0x0003 ), | 110 | Model_Yopy_3700 = ( Model_Yopy | 0x0003 ), |
110 | 111 | ||
111 | Model_Beagle = ( 6 << 16 ), | 112 | Model_Beagle = ( 6 << 16 ), |
112 | 113 | ||
113 | Model_Beagle_All = ( Model_Beagle | 0xffff ), | 114 | Model_Beagle_All = ( Model_Beagle | 0xffff ), |
114 | Model_Beagle_PA100 = ( Model_Beagle | 0x0001 ), | 115 | Model_Beagle_PA100 = ( Model_Beagle | 0x0001 ), |
115 | 116 | ||
116 | Model_GenuineIntel = ( 7 << 16 ), | 117 | Model_GenuineIntel = ( 7 << 16 ), |
117 | 118 | ||
118 | Model_MyPal = ( 8 << 16 ), | 119 | Model_MyPal = ( 8 << 16 ), |
119 | 120 | ||
120 | Model_MyPal_All = ( Model_MyPal | 0xffff ), | 121 | Model_MyPal_All = ( Model_MyPal | 0xffff ), |
121 | Model_MyPal_620 = ( Model_MyPal | 0x0001 ), | 122 | Model_MyPal_620 = ( Model_MyPal | 0x0001 ), |
122 | Model_MyPal_716 = ( Model_MyPal | 0x0002 ), | 123 | Model_MyPal_716 = ( Model_MyPal | 0x0002 ), |
123 | Model_MyPal_730 = ( Model_MyPal | 0x0003 ), | 124 | Model_MyPal_730 = ( Model_MyPal | 0x0003 ), |
124 | 125 | ||
125 | Model_HTC = ( 9 << 16 ), | 126 | Model_HTC = ( 9 << 16 ), |
126 | Model_HTC_All = ( Model_HTC | 0xffff ), | 127 | Model_HTC_All = ( Model_HTC | 0xffff ), |
127 | Model_HTC_Universal = ( Model_HTC | 0x0001 ), | 128 | Model_HTC_Universal = ( Model_HTC | 0x0001 ), |
129 | Model_HTC_Alpine = ( Model_HTC | 0x0002 ), | ||
130 | Model_HTC_Apache = ( Model_HTC | 0x0003 ), | ||
131 | Model_HTC_Beetles = ( Model_HTC | 0x0004 ), | ||
132 | Model_HTC_Blueangel = ( Model_HTC | 0x0005 ), | ||
133 | Model_HTC_Himalaya = ( Model_HTC | 0x0006 ), | ||
134 | Model_HTC_Magician = ( Model_HTC | 0x0007 ), | ||
128 | 135 | ||
129 | Model_Motorola = ( 9 << 17 ), | 136 | Model_Motorola = ( 9 << 17 ), |
130 | Model_Motorola_All = ( Model_Motorola | 0xffff ), | 137 | Model_Motorola_All = ( Model_Motorola | 0xffff ), |
131 | Model_Motorola_EZX = ( Model_Motorola | 0x0001 ), | 138 | Model_Motorola_EZX = ( Model_Motorola | 0x0001 ), |
132 | 139 | ||
133 | }; | 140 | }; |
134 | 141 | ||
135 | /** | 142 | /** |
136 | * The vendor of the device | 143 | * The vendor of the device |
137 | */ | 144 | */ |
138 | enum OVendor { | 145 | enum OVendor { |
139 | Vendor_Unknown, | 146 | Vendor_Unknown, |
140 | 147 | ||
141 | Vendor_HP, | 148 | Vendor_HP, |
142 | Vendor_Sharp, | 149 | Vendor_Sharp, |
143 | Vendor_SIEMENS, | 150 | Vendor_SIEMENS, |
144 | Vendor_MundN, | 151 | Vendor_MundN, |
145 | Vendor_GMate, | 152 | Vendor_GMate, |
146 | Vendor_MasterIA, | 153 | Vendor_MasterIA, |
147 | Vendor_GenuineIntel, | 154 | Vendor_GenuineIntel, |
148 | Vendor_Asus, | 155 | Vendor_Asus, |
149 | Vendor_HTC, | 156 | Vendor_HTC, |
150 | Vendor_Motorola, | 157 | Vendor_Motorola, |
151 | }; | 158 | }; |
152 | 159 | ||
153 | /** | 160 | /** |
154 | * The System used | 161 | * The System used |
155 | */ | 162 | */ |
156 | enum OSystem { | 163 | enum OSystem { |
157 | System_Unknown, | 164 | System_Unknown, |
158 | 165 | ||
159 | System_Familiar, | 166 | System_Familiar, |
160 | System_Zaurus, | 167 | System_Zaurus, |
161 | System_OpenZaurus, | 168 | System_OpenZaurus, |
162 | System_Linupy, | 169 | System_Linupy, |
163 | System_OpenEmbedded, | 170 | System_OpenEmbedded, |
164 | System_PC, | 171 | System_PC, |
165 | System_OpenEZX, | 172 | System_OpenEZX, |
166 | System_Angstrom, | 173 | System_Angstrom, |
167 | }; | 174 | }; |
168 | 175 | ||
169 | typedef struct { | 176 | typedef struct { |
170 | OSystem system; | 177 | OSystem system; |
171 | char* sysstr; | 178 | char* sysstr; |
172 | char* sysvfile; | 179 | char* sysvfile; |
173 | } ODistribution; | 180 | } ODistribution; |
174 | 181 | ||
175 | extern ODistribution distributions[]; | 182 | extern ODistribution distributions[]; |
diff --git a/libopie2/opiecore/device/odevice_htc.cpp b/libopie2/opiecore/device/odevice_htc.cpp index a40308d..c21e10d 100644 --- a/libopie2/opiecore/device/odevice_htc.cpp +++ b/libopie2/opiecore/device/odevice_htc.cpp | |||
@@ -71,219 +71,198 @@ struct htc_button htc_buttons [] = { | |||
71 | "addressbook", "beamBusinessCard()" }, | 71 | "addressbook", "beamBusinessCard()" }, |
72 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), | 72 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), |
73 | "devicebuttons/z_home", | 73 | "devicebuttons/z_home", |
74 | "QPE/Launcher", "home()", | 74 | "QPE/Launcher", "home()", |
75 | "buttonsettings", "raise()" }, | 75 | "buttonsettings", "raise()" }, |
76 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), | 76 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), |
77 | "devicebuttons/z_menu", | 77 | "devicebuttons/z_menu", |
78 | "QPE/TaskBar", "toggleMenu()", | 78 | "QPE/TaskBar", "toggleMenu()", |
79 | "QPE/TaskBar", "toggleStartMenu()" }, | 79 | "QPE/TaskBar", "toggleStartMenu()" }, |
80 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), | 80 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), |
81 | "devicebuttons/z_mail", | 81 | "devicebuttons/z_mail", |
82 | "opiemail", "raise()", | 82 | "opiemail", "raise()", |
83 | "opiemail", "newMail()" }, | 83 | "opiemail", "newMail()" }, |
84 | }; | 84 | }; |
85 | 85 | ||
86 | struct htc_button htc_buttons_universal [] = { | 86 | struct htc_button htc_buttons_universal [] = { |
87 | { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), | 87 | { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), |
88 | "devicebuttons/z_calendar", | 88 | "devicebuttons/z_calendar", |
89 | "datebook", "nextView()", | 89 | "datebook", "nextView()", |
90 | "today", "raise()" }, | 90 | "today", "raise()" }, |
91 | { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), | 91 | { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), |
92 | "devicebuttons/z_contact", | 92 | "devicebuttons/z_contact", |
93 | "addressbook", "raise()", | 93 | "addressbook", "raise()", |
94 | "addressbook", "beamBusinessCard()" }, | 94 | "addressbook", "beamBusinessCard()" }, |
95 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), | 95 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), |
96 | "devicebuttons/z_home", | 96 | "devicebuttons/z_home", |
97 | "QPE/Launcher", "home()", | 97 | "QPE/Launcher", "home()", |
98 | "buttonsettings", "raise()" }, | 98 | "buttonsettings", "raise()" }, |
99 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), | 99 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), |
100 | "devicebuttons/z_menu", | 100 | "devicebuttons/z_menu", |
101 | "QPE/TaskBar", "toggleMenu()", | 101 | "QPE/TaskBar", "toggleMenu()", |
102 | "QPE/TaskBar", "toggleStartMenu()" }, | 102 | "QPE/TaskBar", "toggleStartMenu()" }, |
103 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), | 103 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), |
104 | "devicebuttons/z_mail", | 104 | "devicebuttons/z_mail", |
105 | "opiemail", "raise()", | 105 | "opiemail", "raise()", |
106 | "opiemail", "newMail()" }, | 106 | "opiemail", "newMail()" }, |
107 | 107 | ||
108 | { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Hinge1"), | 108 | { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Hinge1"), |
109 | "devicebuttons/z_hinge1", | 109 | "devicebuttons/z_hinge1", |
110 | "QPE/Rotation", "rotateDefault()",0}, | 110 | "QPE/Rotation", "rotateDefault()",0}, |
111 | { Qt::Key_F16, QT_TRANSLATE_NOOP("Button", "Hinge2"), | 111 | { Qt::Key_F16, QT_TRANSLATE_NOOP("Button", "Hinge2"), |
112 | "devicebuttons/z_hinge2", | 112 | "devicebuttons/z_hinge2", |
113 | "QPE/Rotation", "rotateDefault()",0}, | 113 | "QPE/Rotation", "rotateDefault()",0}, |
114 | { Qt::Key_F17, QT_TRANSLATE_NOOP("Button", "Hinge3"), | 114 | { Qt::Key_F17, QT_TRANSLATE_NOOP("Button", "Hinge3"), |
115 | "devicebuttons/z_hinge3", | 115 | "devicebuttons/z_hinge3", |
116 | "QPE/Rotation", "rotateDefault()",0}, | 116 | "QPE/Rotation", "rotateDefault()",0}, |
117 | }; | 117 | }; |
118 | 118 | ||
119 | struct htc_button htc_buttons_6000 [] = { | ||
120 | { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), | ||
121 | "devicebuttons/z_calendar", | ||
122 | "datebook", "nextView()", | ||
123 | "today", "raise()" }, | ||
124 | { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), | ||
125 | "devicebuttons/z_contact", | ||
126 | "addressbook", "raise()", | ||
127 | "addressbook", "beamBusinessCard()" }, | ||
128 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), | ||
129 | "devicebuttons/z_home", | ||
130 | "QPE/Launcher", "home()", | ||
131 | "buttonsettings", "raise()" }, | ||
132 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), | ||
133 | "devicebuttons/z_menu", | ||
134 | "QPE/TaskBar", "toggleMenu()", | ||
135 | "QPE/TaskBar", "toggleStartMenu()" }, | ||
136 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), | ||
137 | "devicebuttons/z_mail", | ||
138 | "opiemail", "raise()", | ||
139 | "opiemail", "newMail()" }, | ||
140 | { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Rotate Button"), | ||
141 | "devicebuttons/z_rotate", | ||
142 | 0, | ||
143 | "QPE/Rotation", "rotateDefault()" }, | ||
144 | { Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), | ||
145 | "devicebuttons/z_hinge3", | ||
146 | "QPE/VMemo", "toggleRecord()", | ||
147 | "sound", "raise()" }, | ||
148 | }; | ||
149 | 119 | ||
150 | // FIXME This gets unnecessary complicated. We should think about splitting the HTC | ||
151 | // class up into individual classes. We would need three classes | ||
152 | // | 120 | // |
153 | // HTC-Universal (PXA-model w/ 640x480 lcd, for Universal) | 121 | // HTC-Universal (PXA-model w/ 480x640 3.6" lcd) |
122 | // HTC-Alpine (PXA-model w/ 240x320 3.5" lcd) | ||
123 | // HTC-Apache (PXA-model w/ 240x320 2.8" lcd) | ||
124 | // HTC-Beetles (PXA-model w/ 240x240 3.0" lcd) | ||
125 | // HTC-Blueangel (PXA-model w/ 240x320 3.5" lcd) | ||
126 | // HTC-Himalaya (PXA-model w/ 240x320 3.5" lcd) | ||
127 | // HTC-Magician (PXA-model w/ 240x320 2.8" lcd) | ||
154 | 128 | ||
155 | void HTC::init(const QString& cpu_info) | 129 | void HTC::init(const QString& cpu_info) |
156 | { | 130 | { |
157 | qDebug( "HTC::init()" ); | 131 | qDebug( "HTC::init()" ); |
158 | // Set the time to wait until the system is really suspended | 132 | // Set the time to wait until the system is really suspended |
159 | // the delta between apm --suspend and sleeping | 133 | // the delta between apm --suspend and sleeping |
160 | setAPMTimeOut( 15000 ); | 134 | setAPMTimeOut( 15000 ); |
161 | 135 | ||
162 | // generic distribution code already scanned /etc/issue at that point - | ||
163 | // embedix releases contain "Embedix <version> | Linux for Embedded Devices" | ||
164 | if ( d->m_sysverstr.contains( "embedix", false ) ) | ||
165 | { | ||
166 | d->m_vendorstr = "HTC"; | ||
167 | d->m_vendor = Vendor_HTC; | ||
168 | d->m_systemstr = "OpenEmbedded"; | ||
169 | d->m_system = System_OpenEmbedded; | ||
170 | m_embedix = true; | ||
171 | } | ||
172 | else | ||
173 | { | ||
174 | d->m_vendorstr = "Xanadux Team"; | 136 | d->m_vendorstr = "Xanadux Team"; |
175 | d->m_systemstr = "Familiar"; | 137 | d->m_systemstr = "Familiar"; |
176 | d->m_system = System_Familiar; | 138 | d->m_system = System_Familiar; |
177 | // sysver already gathered | ||
178 | |||
179 | // OpenHTC sometimes uses the 2.4 (embedix) kernel, check if this is one | ||
180 | FILE *uname = popen("uname -r", "r"); | ||
181 | QFile f; | ||
182 | QString line; | ||
183 | if ( f.open(IO_ReadOnly, uname) ) { | ||
184 | QTextStream ts ( &f ); | ||
185 | line = ts.readLine(); | ||
186 | m_embedix = line.startsWith( "2.4." ); | ||
187 | f.close(); | ||
188 | } | ||
189 | pclose(uname); | ||
190 | } | ||
191 | 139 | ||
192 | // check the HTC model | 140 | // check the HTC model |
193 | QString model; | 141 | QString model; |
194 | int loc = cpu_info.find( ":" ); | 142 | int loc = cpu_info.find( ":" ); |
195 | if ( loc != -1 ) | 143 | if ( loc != -1 ) |
196 | model = cpu_info.mid( loc+2 ).simplifyWhiteSpace(); | 144 | model = cpu_info.mid( loc+2 ).simplifyWhiteSpace(); |
197 | else | 145 | else |
198 | model = cpu_info; | 146 | model = cpu_info; |
199 | 147 | ||
148 | d->m_model = Model_HTC_Universal; | ||
149 | d->m_modelstr = "Unknown HTC"; | ||
150 | |||
200 | if ( model == "HTC Universal" ) { | 151 | if ( model == "HTC Universal" ) { |
201 | d->m_model = Model_HTC_Universal; | 152 | d->m_model = Model_HTC_Universal; |
202 | d->m_modelstr = "HTC Universal"; | 153 | d->m_modelstr = "HTC Universal"; |
203 | } else { | ||
204 | d->m_model = Model_HTC_Universal; | ||
205 | d->m_modelstr = "Unknown HTC"; | ||
206 | } | 154 | } |
155 | if ( model == "HTC Alpine" ) { | ||
156 | d->m_model = Model_HTC_Alpine; | ||
157 | d->m_modelstr = "HTC Alpine"; | ||
158 | } | ||
159 | if ( model == "HTC Apache" ) { | ||
160 | d->m_model = Model_HTC_Apache; | ||
161 | d->m_modelstr = "HTC Apache"; | ||
162 | } | ||
163 | if ( model == "HTC Beetles" ) { | ||
164 | d->m_model = Model_HTC_Beetles; | ||
165 | d->m_modelstr = "HTC Beetles"; | ||
166 | } | ||
167 | if ( model == "HTC Blueangel" ) { | ||
168 | d->m_model = Model_HTC_Blueangel; | ||
169 | d->m_modelstr = "HTC Blueangel"; | ||
170 | } | ||
171 | if ( model == "HTC Himalaya" ) { | ||
172 | d->m_model = Model_HTC_Himalaya; | ||
173 | d->m_modelstr = "HTC Himalaya"; | ||
174 | } | ||
175 | if ( model == "HTC Magician" ) { | ||
176 | d->m_model = Model_HTC_Magician; | ||
177 | d->m_modelstr = "HTC Magician"; | ||
178 | } | ||
179 | |||
207 | 180 | ||
208 | // set path to backlight device in kernel 2.6 | 181 | // set path to backlight device |
209 | switch ( d->m_model ) | 182 | switch ( d->m_model ) |
210 | { | 183 | { |
211 | case Model_HTC_Universal: | 184 | case Model_HTC_Universal: |
185 | case Model_HTC_Magician: | ||
186 | case Model_HTC_Alpine: | ||
187 | case Model_HTC_Beetles: | ||
188 | case Model_HTC_Apache: | ||
189 | m_backlightdev = "/sys/class/backlight/pxa2xx-fb/"; | ||
190 | break; | ||
191 | case Model_HTC_Blueangel: | ||
192 | case Model_HTC_Himalaya: | ||
193 | m_backlightdev = "/sys/class/backlight/w100fb/"; | ||
194 | break; | ||
212 | default: | 195 | default: |
213 | // m_backlightdev = "/sys/class/backlight/corgi-bl/"; | ||
214 | m_backlightdev = "/sys/class/backlight/pxafb/"; | 196 | m_backlightdev = "/sys/class/backlight/pxafb/"; |
215 | } | 197 | } |
216 | 198 | ||
217 | // set initial rotation | 199 | // set initial rotation |
218 | switch( d->m_model ) | 200 | switch( d->m_model ) |
219 | { | 201 | { |
220 | case Model_HTC_Universal: | 202 | case Model_HTC_Universal: |
221 | initHingeSensor(); | 203 | initHingeSensor(); |
222 | d->m_rotation = rotation(); | 204 | d->m_rotation = rotation(); |
223 | d->m_direction = direction(); | 205 | d->m_direction = direction(); |
224 | break; | 206 | break; |
225 | default: | 207 | default: |
226 | d->m_rotation = Rot270; | 208 | d->m_rotation = Rot270; |
227 | } | 209 | } |
228 | 210 | ||
229 | // set default qte driver | 211 | // set default qte driver |
230 | switch( d->m_model ) | 212 | switch( d->m_model ) |
231 | { | 213 | { |
232 | default: | 214 | default: |
233 | d->m_qteDriver = "Transformed"; | 215 | d->m_qteDriver = "Transformed"; |
234 | } | 216 | } |
235 | 217 | ||
236 | m_leds[0] = Led_Off; | 218 | m_leds[0] = Led_Off; |
237 | 219 | ||
238 | if ( m_embedix ) | 220 | qDebug( "HTC::init() - Using the 2.6 Xanadux on a %s", (const char*) d->m_modelstr ); |
239 | qDebug( "HTC::init() - Using the 2.4 Embedix HAL on a %s", (const char*) d->m_modelstr ); | ||
240 | else | ||
241 | qDebug( "HTC::init() - Using the 2.6 Xanadux HAL on a %s", (const char*) d->m_modelstr ); | ||
242 | } | 221 | } |
243 | 222 | ||
244 | void HTC::initButtons() | 223 | void HTC::initButtons() |
245 | { | 224 | { |
246 | qDebug( "HTC::initButtons()" ); | 225 | qDebug( "HTC::initButtons()" ); |
247 | if ( d->m_buttons ) | 226 | if ( d->m_buttons ) |
248 | return; | 227 | return; |
249 | 228 | ||
250 | d->m_buttons = new QValueList <ODeviceButton>; | 229 | d->m_buttons = new QValueList <ODeviceButton>; |
251 | 230 | ||
252 | struct htc_button * phtc_buttons; | 231 | struct htc_button * phtc_buttons; |
253 | int buttoncount; | 232 | int buttoncount; |
254 | switch ( d->m_model ) | 233 | switch ( d->m_model ) |
255 | { | 234 | { |
256 | case Model_HTC_Universal: | 235 | case Model_HTC_Universal: |
257 | if ( isQWS( ) ) | 236 | if ( isQWS( ) ) |
258 | { | 237 | { |
259 | addPreHandler(this); | 238 | addPreHandler(this); |
260 | } | 239 | } |
261 | phtc_buttons = htc_buttons_universal; | 240 | phtc_buttons = htc_buttons_universal; |
262 | buttoncount = ARRAY_SIZE(htc_buttons_universal); | 241 | buttoncount = ARRAY_SIZE(htc_buttons_universal); |
263 | break; | 242 | break; |
264 | default: | 243 | default: |
265 | phtc_buttons = htc_buttons; | 244 | phtc_buttons = htc_buttons; |
266 | buttoncount = ARRAY_SIZE(htc_buttons); | 245 | buttoncount = ARRAY_SIZE(htc_buttons); |
267 | break; | 246 | break; |
268 | } | 247 | } |
269 | 248 | ||
270 | for ( int i = 0; i < buttoncount; i++ ) { | 249 | for ( int i = 0; i < buttoncount; i++ ) { |
271 | struct htc_button *zb = phtc_buttons + i; | 250 | struct htc_button *zb = phtc_buttons + i; |
272 | ODeviceButton b; | 251 | ODeviceButton b; |
273 | 252 | ||
274 | b.setKeycode( zb->code ); | 253 | b.setKeycode( zb->code ); |
275 | b.setUserText( QObject::tr( "Button", zb->utext )); | 254 | b.setUserText( QObject::tr( "Button", zb->utext )); |
276 | b.setPixmap( OResource::loadPixmap( zb->pix )); | 255 | b.setPixmap( OResource::loadPixmap( zb->pix )); |
277 | b.setFactoryPresetPressedAction( OQCopMessage( makeChannel ( zb->fpressedservice ), zb->fpressedaction )); | 256 | b.setFactoryPresetPressedAction( OQCopMessage( makeChannel ( zb->fpressedservice ), zb->fpressedaction )); |
278 | b.setFactoryPresetHeldAction( OQCopMessage( makeChannel ( zb->fheldservice ), zb->fheldaction )); | 257 | b.setFactoryPresetHeldAction( OQCopMessage( makeChannel ( zb->fheldservice ), zb->fheldaction )); |
279 | d->m_buttons->append( b ); | 258 | d->m_buttons->append( b ); |
280 | } | 259 | } |
281 | 260 | ||
282 | reloadButtonMapping(); | 261 | reloadButtonMapping(); |
283 | } | 262 | } |
284 | 263 | ||
285 | 264 | ||
286 | 265 | ||
287 | typedef struct sharp_led_status { | 266 | typedef struct sharp_led_status { |
288 | int which; /* select which LED status is wanted. */ | 267 | int which; /* select which LED status is wanted. */ |
289 | int status; /* set new led status if you call SHARP_LED_SETSTATUS */ | 268 | int status; /* set new led status if you call SHARP_LED_SETSTATUS */ |
@@ -333,328 +312,232 @@ void HTC::buzzer( int sound ) | |||
333 | 312 | ||
334 | } | 313 | } |
335 | #endif | 314 | #endif |
336 | } | 315 | } |
337 | 316 | ||
338 | 317 | ||
339 | void HTC::playAlarmSound() | 318 | void HTC::playAlarmSound() |
340 | { | 319 | { |
341 | buzzer( SHARP_BUZ_SCHEDULE_ALARM ); | 320 | buzzer( SHARP_BUZ_SCHEDULE_ALARM ); |
342 | } | 321 | } |
343 | 322 | ||
344 | void HTC::playTouchSound() | 323 | void HTC::playTouchSound() |
345 | { | 324 | { |
346 | buzzer( SHARP_BUZ_TOUCHSOUND ); | 325 | buzzer( SHARP_BUZ_TOUCHSOUND ); |
347 | } | 326 | } |
348 | 327 | ||
349 | void HTC::playKeySound() | 328 | void HTC::playKeySound() |
350 | { | 329 | { |
351 | buzzer( SHARP_BUZ_KEYSOUND ); | 330 | buzzer( SHARP_BUZ_KEYSOUND ); |
352 | } | 331 | } |
353 | 332 | ||
354 | 333 | ||
355 | QValueList <OLed> HTC::ledList() const | 334 | QValueList <OLed> HTC::ledList() const |
356 | { | 335 | { |
357 | QValueList <OLed> vl; | 336 | QValueList <OLed> vl; |
358 | vl << Led_Mail; | 337 | vl << Led_Mail; |
359 | return vl; | 338 | return vl; |
360 | } | 339 | } |
361 | 340 | ||
362 | QValueList <OLedState> HTC::ledStateList( OLed l ) const | 341 | QValueList <OLedState> HTC::ledStateList( OLed l ) const |
363 | { | 342 | { |
364 | QValueList <OLedState> vl; | 343 | QValueList <OLedState> vl; |
365 | 344 | ||
366 | if ( l == Led_Mail ) | 345 | if ( l == Led_Mail ) |
367 | vl << Led_Off << Led_On << Led_BlinkSlow; | 346 | vl << Led_Off << Led_On << Led_BlinkSlow; |
368 | return vl; | 347 | return vl; |
369 | } | 348 | } |
370 | 349 | ||
371 | OLedState HTC::ledState( OLed which ) const | 350 | OLedState HTC::ledState( OLed which ) const |
372 | { | 351 | { |
373 | if ( which == Led_Mail ) | 352 | if ( which == Led_Mail ) |
374 | return m_leds [0]; | 353 | return m_leds [0]; |
375 | else | 354 | else |
376 | return Led_Off; | 355 | return Led_Off; |
377 | } | 356 | } |
378 | 357 | ||
379 | bool HTC::setLedState( OLed which, OLedState st ) | 358 | bool HTC::setLedState( OLed which, OLedState st ) |
380 | { | 359 | { |
381 | // Currently not supported on non_embedix kernels | 360 | qDebug( "HTC::setLedState: ODevice handling not yet implemented" ); |
382 | if (!m_embedix) | ||
383 | { | ||
384 | qDebug( "HTC::setLedState: ODevice handling for non-embedix kernels not yet implemented" ); | ||
385 | return false; | ||
386 | } | ||
387 | |||
388 | static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); | ||
389 | |||
390 | if ( which == Led_Mail ) { | ||
391 | if ( fd >= 0 ) { | ||
392 | struct sharp_led_status leds; | ||
393 | ::memset ( &leds, 0, sizeof( leds )); | ||
394 | leds. which = SHARP_LED_MAIL_EXISTS; | ||
395 | bool ok = true; | ||
396 | |||
397 | switch ( st ) { | ||
398 | case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; | ||
399 | case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; | ||
400 | case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; | ||
401 | default : ok = false; | ||
402 | } | ||
403 | |||
404 | if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { | ||
405 | m_leds [0] = st; | ||
406 | return true; | ||
407 | } | ||
408 | } | ||
409 | } | ||
410 | return false; | 361 | return false; |
411 | } | 362 | } |
412 | 363 | ||
413 | int HTC::displayBrightnessResolution() const | 364 | int HTC::displayBrightnessResolution() const |
414 | { | 365 | { |
415 | /* MV */ | ||
416 | return 16; | ||
417 | |||
418 | int res = 1; | 366 | int res = 1; |
419 | if (m_embedix) | 367 | |
420 | { | ||
421 | int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_RDWR|O_NONBLOCK ); | ||
422 | if ( fd ) | ||
423 | { | ||
424 | int value = ::ioctl( fd, SHARP_FL_IOCTL_GET_STEP, 0 ); | ||
425 | ::close( fd ); | ||
426 | return value ? value : res; | ||
427 | } | ||
428 | } | ||
429 | else | ||
430 | { | ||
431 | int fd = ::open( m_backlightdev + "max_brightness", O_RDONLY|O_NONBLOCK ); | 368 | int fd = ::open( m_backlightdev + "max_brightness", O_RDONLY|O_NONBLOCK ); |
369 | |||
432 | if ( fd ) | 370 | if ( fd ) |
433 | { | 371 | { |
434 | char buf[100]; | 372 | char buf[100]; |
435 | if ( ::read( fd, &buf[0], sizeof buf ) ) ::sscanf( &buf[0], "%d", &res ); | 373 | if ( ::read( fd, &buf[0], sizeof buf ) ) ::sscanf( &buf[0], "%d", &res ); |
436 | ::close( fd ); | 374 | ::close( fd ); |
437 | } | 375 | } |
438 | } | 376 | |
439 | return res; | 377 | return res; |
440 | } | 378 | } |
441 | 379 | ||
442 | bool HTC::setDisplayBrightness( int bright ) | 380 | bool HTC::setDisplayBrightness( int bright ) |
443 | { | 381 | { |
444 | /* MV */ | ||
445 | return false; | ||
446 | 382 | ||
447 | //qDebug( "HTC::setDisplayBrightness( %d )", bright ); | 383 | //qDebug( "HTC::setDisplayBrightness( %d )", bright ); |
448 | bool res = false; | 384 | bool res = false; |
449 | 385 | ||
450 | if ( bright > 255 ) bright = 255; | 386 | if ( bright > 255 ) bright = 255; |
451 | if ( bright < 0 ) bright = 0; | 387 | if ( bright < 0 ) bright = 0; |
452 | 388 | ||
453 | int numberOfSteps = displayBrightnessResolution(); | 389 | int numberOfSteps = displayBrightnessResolution(); |
454 | int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255; | 390 | int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255; |
455 | 391 | ||
456 | if ( m_embedix ) | ||
457 | { | ||
458 | int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK ); | ||
459 | if ( fd ) | ||
460 | { | ||
461 | res = ( ::ioctl( fd, SHARP_FL_IOCTL_STEP_CONTRAST, val ) == 0 ); | ||
462 | ::close( fd ); | ||
463 | } | ||
464 | } | ||
465 | else | ||
466 | { | ||
467 | int fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK ); | 392 | int fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK ); |
468 | if ( fd ) | 393 | if ( fd ) |
469 | { | 394 | { |
470 | char buf[100]; | 395 | char buf[100]; |
471 | int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); | 396 | int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); |
472 | res = ( ::write( fd, &buf[0], len ) == 0 ); | 397 | res = ( ::write( fd, &buf[0], len ) == 0 ); |
473 | ::close( fd ); | 398 | ::close( fd ); |
474 | } | 399 | } |
475 | } | ||
476 | return res; | 400 | return res; |
477 | } | 401 | } |
478 | 402 | ||
479 | bool HTC::setDisplayStatus( bool on ) | 403 | bool HTC::setDisplayStatus( bool on ) |
480 | { | 404 | { |
481 | /* MV */ | ||
482 | return false; | ||
483 | 405 | ||
484 | bool res = false; | 406 | bool res = false; |
485 | if ( m_embedix ) | 407 | |
486 | { | ||
487 | int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK ); | ||
488 | if ( fd ) | ||
489 | { | ||
490 | int ioctlnum = on ? SHARP_FL_IOCTL_ON : SHARP_FL_IOCTL_OFF; | ||
491 | res = ( ::ioctl ( fd, ioctlnum, 0 ) == 0 ); | ||
492 | ::close ( fd ); | ||
493 | } | ||
494 | } | ||
495 | else | ||
496 | { | ||
497 | int fd = ::open( m_backlightdev + "power", O_WRONLY|O_NONBLOCK ); | 408 | int fd = ::open( m_backlightdev + "power", O_WRONLY|O_NONBLOCK ); |
498 | if ( fd ) | 409 | if ( fd ) |
499 | { | 410 | { |
500 | char buf[10]; | 411 | char buf[10]; |
501 | buf[0] = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; | 412 | buf[0] = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; |
502 | buf[1] = '\0'; | 413 | buf[1] = '\0'; |
503 | res = ( ::write( fd, &buf[0], 2 ) == 0 ); | 414 | res = ( ::write( fd, &buf[0], 2 ) == 0 ); |
504 | ::close( fd ); | 415 | ::close( fd ); |
505 | } | 416 | } |
506 | } | ||
507 | return res; | 417 | return res; |
508 | } | 418 | } |
509 | 419 | ||
510 | Transformation HTC::rotation() const | 420 | Transformation HTC::rotation() const |
511 | { | 421 | { |
512 | qDebug( "HTC::rotation()" ); | 422 | qDebug( "HTC::rotation()" ); |
513 | Transformation rot; | 423 | Transformation rot; |
514 | 424 | ||
515 | switch ( d->m_model ) { | 425 | switch ( d->m_model ) { |
516 | case Model_HTC_Universal: | 426 | case Model_HTC_Universal: |
517 | { | 427 | { |
518 | OHingeStatus hs = readHingeSensor(); | 428 | OHingeStatus hs = readHingeSensor(); |
519 | qDebug( "HTC::rotation() - hinge sensor = %d", (int) hs ); | 429 | qDebug( "HTC::rotation() - hinge sensor = %d", (int) hs ); |
520 | if ( hs == CASE_PORTRAIT ) rot = Rot0; | 430 | if ( hs == CASE_PORTRAIT ) rot = Rot0; |
521 | else if ( hs == CASE_UNKNOWN ) rot = Rot270; | 431 | else if ( hs == CASE_UNKNOWN ) rot = Rot270; |
522 | else rot = Rot270; | 432 | else rot = Rot270; |
523 | } | 433 | } |
524 | break; | 434 | break; |
525 | } | 435 | } |
526 | 436 | ||
527 | qDebug( "HTC::rotation() - returning '%d'", rot ); | 437 | qDebug( "HTC::rotation() - returning '%d'", rot ); |
528 | return rot; | 438 | return rot; |
529 | } | 439 | } |
530 | ODirection HTC::direction() const | 440 | ODirection HTC::direction() const |
531 | { | 441 | { |
532 | ODirection dir; | 442 | ODirection dir; |
533 | 443 | ||
534 | switch ( d->m_model ) { | 444 | switch ( d->m_model ) { |
535 | case Model_HTC_Universal: { | 445 | case Model_HTC_Universal: { |
536 | OHingeStatus hs = readHingeSensor(); | 446 | OHingeStatus hs = readHingeSensor(); |
537 | if ( hs == CASE_PORTRAIT ) dir = CCW; | 447 | if ( hs == CASE_PORTRAIT ) dir = CCW; |
538 | else if ( hs == CASE_UNKNOWN ) dir = CCW; | 448 | else if ( hs == CASE_UNKNOWN ) dir = CCW; |
539 | else dir = CW; | 449 | else dir = CW; |
540 | } | 450 | } |
541 | break; | 451 | break; |
542 | default: dir = d->m_direction; | 452 | default: dir = d->m_direction; |
543 | break; | 453 | break; |
544 | } | 454 | } |
545 | return dir; | 455 | return dir; |
546 | 456 | ||
547 | } | 457 | } |
548 | 458 | ||
549 | bool HTC::hasHingeSensor() const | 459 | bool HTC::hasHingeSensor() const |
550 | { | 460 | { |
551 | return d->m_model == Model_HTC_Universal; | 461 | return d->m_model == Model_HTC_Universal; |
552 | } | 462 | } |
553 | 463 | ||
554 | OHingeStatus HTC::readHingeSensor() const | 464 | OHingeStatus HTC::readHingeSensor() const |
555 | { | 465 | { |
556 | if (m_embedix) | ||
557 | { | ||
558 | int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); | ||
559 | if (handle == -1) | ||
560 | { | ||
561 | qWarning("HTC::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror | ||
562 | return CASE_UNKNOWN; | ||
563 | } | ||
564 | else | ||
565 | { | ||
566 | int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); | ||
567 | ::close (handle); | ||
568 | if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE ) | ||
569 | { | ||
570 | qDebug( "HTC::readHingeSensor() - result = %d", retval ); | ||
571 | return static_cast<OHingeStatus>( retval ); | ||
572 | } | ||
573 | else | ||
574 | { | ||
575 | qWarning("HTC::readHingeSensor() - couldn't compute hinge status!" ); | ||
576 | return CASE_UNKNOWN; | ||
577 | } | ||
578 | } | ||
579 | } | ||
580 | else | ||
581 | { | ||
582 | /* | 466 | /* |
583 | * The HTC Universal keyboard is event source 1 in kernel 2.6. | 467 | * The HTC Universal keyboard is event source 1 in kernel 2.6. |
584 | * Hinge status is reported via Input System Switchs 0 and 1 like that: | 468 | * Hinge status is reported via Input System Switchs 0 and 1 like that: |
585 | * | 469 | * |
586 | * ------------------------- | 470 | * ------------------------- |
587 | * | SW0 | SW1 | CASE | | 471 | * | SW0 | SW1 | CASE | |
588 | * |-----|-----|-----------| | 472 | * |-----|-----|-----------| |
589 | * | 0 0 Unknown | | 473 | * | 0 0 Unknown | |
590 | * | 1 0 Portrait | | 474 | * | 1 0 Portrait | |
591 | * | 0 1 Closed | | 475 | * | 0 1 Closed | |
592 | * | 1 1 Landscape | | 476 | * | 1 1 Landscape | |
593 | * ------------------------- | 477 | * ------------------------- |
594 | */ | 478 | */ |
595 | OInputDevice* keyboard = OInputSystem::instance()->device( "event1" ); | 479 | OInputDevice* keyboard = OInputSystem::instance()->device( "event1" ); |
596 | bool switch0 = true; | 480 | bool switch0 = true; |
597 | bool switch1 = false; | 481 | bool switch1 = false; |
598 | if ( keyboard ) | 482 | if ( keyboard ) |
599 | { | 483 | { |
600 | switch0 = keyboard->isHeld( OInputDevice::Switch0 ); | 484 | switch0 = keyboard->isHeld( OInputDevice::Switch0 ); |
601 | switch1 = keyboard->isHeld( OInputDevice::Switch1 ); | 485 | switch1 = keyboard->isHeld( OInputDevice::Switch1 ); |
602 | } | 486 | } |
603 | if ( switch0 ) | 487 | if ( switch0 ) |
604 | { | 488 | { |
605 | return switch1 ? CASE_LANDSCAPE : CASE_PORTRAIT; | 489 | return switch1 ? CASE_LANDSCAPE : CASE_PORTRAIT; |
606 | } | 490 | } |
607 | else | 491 | else |
608 | { | 492 | { |
609 | return switch1 ? CASE_CLOSED : CASE_UNKNOWN; | 493 | return switch1 ? CASE_CLOSED : CASE_UNKNOWN; |
610 | } | 494 | } |
611 | } | 495 | } |
612 | } | ||
613 | 496 | ||
614 | void HTC::initHingeSensor() | 497 | void HTC::initHingeSensor() |
615 | { | 498 | { |
616 | if ( m_embedix ) return; | 499 | if ( m_embedix ) return; |
617 | 500 | ||
618 | m_hinge.setName( "/dev/input/event1" ); | 501 | m_hinge.setName( "/dev/input/event1" ); |
619 | if ( !m_hinge.open( IO_ReadOnly ) ) | 502 | if ( !m_hinge.open( IO_ReadOnly ) ) |
620 | { | 503 | { |
621 | qWarning( "HTC::init() - Couldn't open /dev/input/event1 for read (%s)", strerror( errno ) ); | 504 | qWarning( "HTC::init() - Couldn't open /dev/input/event1 for read (%s)", strerror( errno ) ); |
622 | return; | 505 | return; |
623 | } | 506 | } |
624 | 507 | ||
625 | QSocketNotifier* sn = new QSocketNotifier( m_hinge.handle(), QSocketNotifier::Read, this ); | 508 | QSocketNotifier* sn = new QSocketNotifier( m_hinge.handle(), QSocketNotifier::Read, this ); |
626 | QObject::connect( sn, SIGNAL(activated(int)), this, SLOT(hingeSensorTriggered()) ); | 509 | QObject::connect( sn, SIGNAL(activated(int)), this, SLOT(hingeSensorTriggered()) ); |
627 | 510 | ||
628 | qDebug( "HTC::init() - Hinge Sensor Initialization successfully completed" ); | 511 | qDebug( "HTC::init() - Hinge Sensor Initialization successfully completed" ); |
629 | } | 512 | } |
630 | 513 | ||
631 | void HTC::hingeSensorTriggered() | 514 | void HTC::hingeSensorTriggered() |
632 | { | 515 | { |
633 | qDebug( "HTC::hingeSensorTriggered() - got event" ); | 516 | qDebug( "HTC::hingeSensorTriggered() - got event" ); |
634 | struct input_event e; | 517 | struct input_event e; |
635 | if ( ::read( m_hinge.handle(), &e, sizeof e ) > 0 ) | 518 | if ( ::read( m_hinge.handle(), &e, sizeof e ) > 0 ) |
636 | { | 519 | { |
637 | qDebug( "HTC::hingeSensorTriggered() - event has type %d, code %d, value %d", e.type, e.code, e.value ); | 520 | qDebug( "HTC::hingeSensorTriggered() - event has type %d, code %d, value %d", e.type, e.code, e.value ); |
638 | if ( e.type != EV_SW ) return; | 521 | if ( e.type != EV_SW ) return; |
639 | if ( readHingeSensor() != CASE_UNKNOWN ) | 522 | if ( readHingeSensor() != CASE_UNKNOWN ) |
640 | { | 523 | { |
641 | qDebug( "HTC::hingeSensorTriggered() - got valid switch event, calling rotateDefault()" ); | 524 | qDebug( "HTC::hingeSensorTriggered() - got valid switch event, calling rotateDefault()" ); |
642 | QCopChannel::send( "QPE/Rotation", "rotateDefault()" ); | 525 | QCopChannel::send( "QPE/Rotation", "rotateDefault()" ); |
643 | } | 526 | } |
644 | } | 527 | } |
645 | } | 528 | } |
646 | 529 | ||
647 | void HTC::systemMessage( const QCString &msg, const QByteArray & ) | 530 | void HTC::systemMessage( const QCString &msg, const QByteArray & ) |
648 | { | 531 | { |
649 | if ( msg == "deviceButtonMappingChanged()" ) { | 532 | if ( msg == "deviceButtonMappingChanged()" ) { |
650 | reloadButtonMapping(); | 533 | reloadButtonMapping(); |
651 | } | 534 | } |
652 | } | 535 | } |
653 | 536 | ||
654 | /* | 537 | /* |
655 | * Take code from iPAQ device. | 538 | * Take code from iPAQ device. |
656 | * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. | 539 | * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. |
657 | * I hope that is ok - Alwin | 540 | * I hope that is ok - Alwin |
658 | */ | 541 | */ |
659 | bool HTC::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) | 542 | bool HTC::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) |
660 | { | 543 | { |