Diffstat (limited to 'libopie2/opiecore/device/odevice_zaurus.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.cpp | 69 |
1 files changed, 27 insertions, 42 deletions
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp index e8b813e..6ac3157 100644 --- a/libopie2/opiecore/device/odevice_zaurus.cpp +++ b/libopie2/opiecore/device/odevice_zaurus.cpp | |||
@@ -70,177 +70,162 @@ struct z_button z_buttons [] = { | |||
70 | "QPE/Launcher", "home()", | 70 | "QPE/Launcher", "home()", |
71 | "buttonsettings", "raise()" }, | 71 | "buttonsettings", "raise()" }, |
72 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), | 72 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), |
73 | "devicebuttons/z_menu", | 73 | "devicebuttons/z_menu", |
74 | "QPE/TaskBar", "toggleMenu()", | 74 | "QPE/TaskBar", "toggleMenu()", |
75 | "QPE/TaskBar", "toggleStartMenu()" }, | 75 | "QPE/TaskBar", "toggleStartMenu()" }, |
76 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), | 76 | { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), |
77 | "devicebuttons/z_mail", | 77 | "devicebuttons/z_mail", |
78 | "opiemail", "raise()", | 78 | "opiemail", "raise()", |
79 | "opiemail", "newMail()" }, | 79 | "opiemail", "newMail()" }, |
80 | }; | 80 | }; |
81 | 81 | ||
82 | struct z_button z_buttons_c700 [] = { | 82 | struct z_button z_buttons_c700 [] = { |
83 | { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), | 83 | { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), |
84 | "devicebuttons/z_calendar", | 84 | "devicebuttons/z_calendar", |
85 | "datebook", "nextView()", | 85 | "datebook", "nextView()", |
86 | "today", "raise()" }, | 86 | "today", "raise()" }, |
87 | { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), | 87 | { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), |
88 | "devicebuttons/z_contact", | 88 | "devicebuttons/z_contact", |
89 | "addressbook", "raise()", | 89 | "addressbook", "raise()", |
90 | "addressbook", "beamBusinessCard()" }, | 90 | "addressbook", "beamBusinessCard()" }, |
91 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), | 91 | { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), |
92 | "devicebuttons/z_home", | 92 | "devicebuttons/z_home", |
93 | "QPE/Launcher", "home()", | 93 | "QPE/Launcher", "home()", |
94 | "buttonsettings", "raise()" }, | 94 | "buttonsettings", "raise()" }, |
95 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), | 95 | { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), |
96 | "devicebuttons/z_menu", | 96 | "devicebuttons/z_menu", |
97 | "QPE/TaskBar", "toggleMenu()", | 97 | "QPE/TaskBar", "toggleMenu()", |
98 | "QPE/TaskBar", "toggleStartMenu()" }, | 98 | "QPE/TaskBar", "toggleStartMenu()" }, |
99 | { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), | 99 | { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), |
100 | "devicebuttons/z_hinge", | 100 | "devicebuttons/z_hinge", |
101 | "QPE/Rotation", "rotateDefault()", | 101 | "QPE/Rotation", "rotateDefault()", |
102 | "QPE/Dummy", "doNothing()" }, | 102 | "QPE/Dummy", "doNothing()" }, |
103 | }; | 103 | }; |
104 | 104 | ||
105 | // FIXME This gets unnecessary complicated. We should think about splitting the Zaurus | 105 | // FIXME This gets unnecessary complicated. We should think about splitting the Zaurus |
106 | // class up into individual classes. We need three classes | 106 | // class up into individual classes. We need three classes |
107 | // | 107 | // |
108 | // Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) | 108 | // Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) |
109 | // Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) | 109 | // Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) |
110 | // Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) | 110 | // Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) |
111 | // | 111 | // |
112 | // Only question right now is: Do we really need to do it? Because as soon | 112 | // Only question right now is: Do we really need to do it? Because as soon |
113 | // as the OpenZaurus kernel is ready, there will be a unified interface for all | 113 | // as the OpenZaurus kernel is ready, there will be a unified interface for all |
114 | // Zaurus models (concerning apm, backlight, buttons, etc.) | 114 | // Zaurus models (concerning apm, backlight, buttons, etc.) |
115 | // | 115 | // |
116 | // Comments? - mickeyl. | 116 | // Comments? - mickeyl. |
117 | 117 | ||
118 | void Zaurus::init(const QString&) | 118 | void Zaurus::init(const QString& cpu_info) |
119 | { | 119 | { |
120 | d->m_vendorstr = "Sharp"; | 120 | // generic distribution code already scanned /etc/issue at that point - |
121 | d->m_vendor = Vendor_Sharp; | 121 | // embedix releases contain "Embedix <version> | Linux for Embedded Devices" |
122 | m_embedix = true; // Not openzaurus means: It has an embedix kernel ! | 122 | if ( d->m_sysverstr.contains( "embedix", false ) ) |
123 | 123 | { | |
124 | // QFile f ( "/proc/filesystems" ); | 124 | d->m_vendorstr = "Sharp"; |
125 | QString model; | 125 | d->m_vendor = Vendor_Sharp; |
126 | 126 | d->m_systemstr = "Zaurus"; | |
127 | // It isn't a good idea to check the system configuration to | 127 | d->m_system = System_Zaurus; |
128 | // detect the distribution ! | 128 | m_embedix = true; |
129 | // Otherwise it may happen that any other distribution is detected as openzaurus, just | 129 | } |
130 | // because it uses a jffs2 filesystem.. | 130 | else |
131 | // (eilers) | 131 | { |
132 | // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read(). find ( "\tjffs2\n" ) >= 0 )) { | ||
133 | QFile f ("/etc/oz_version"); | ||
134 | if ( f.exists() ){ | ||
135 | d->m_vendorstr = "OpenZaurus Team"; | 132 | d->m_vendorstr = "OpenZaurus Team"; |
136 | d->m_systemstr = "OpenZaurus"; | 133 | d->m_systemstr = "OpenZaurus"; |
137 | d->m_system = System_OpenZaurus; | 134 | d->m_system = System_OpenZaurus; |
135 | // sysver already gathered | ||
138 | 136 | ||
139 | if ( f. open ( IO_ReadOnly )) { | 137 | // Openzaurus sometimes uses the embedix kernel, check if this is one |
140 | QTextStream ts ( &f ); | ||
141 | d->m_sysverstr = ts. readLine();//. mid ( 10 ); | ||
142 | f. close(); | ||
143 | } | ||
144 | |||
145 | // Openzaurus sometimes uses the embedix kernel! | ||
146 | // => Check whether this is an embedix kernel | ||
147 | FILE *uname = popen("uname -r", "r"); | 138 | FILE *uname = popen("uname -r", "r"); |
139 | QFile f; | ||
148 | QString line; | 140 | QString line; |
149 | if ( f.open(IO_ReadOnly, uname) ) { | 141 | if ( f.open(IO_ReadOnly, uname) ) { |
150 | QTextStream ts ( &f ); | 142 | QTextStream ts ( &f ); |
151 | line = ts. readLine(); | 143 | line = ts. readLine(); |
152 | int loc = line. find ( "embedix" ); | 144 | int loc = line. find ( "embedix" ); |
153 | if ( loc != -1 ) | 145 | if ( loc != -1 ) |
154 | m_embedix = true; | 146 | m_embedix = true; |
155 | else | 147 | else |
156 | m_embedix = false; | 148 | m_embedix = false; |
157 | f. close(); | 149 | f.close(); |
158 | } | 150 | } |
159 | pclose(uname); | 151 | pclose(uname); |
160 | } | 152 | } |
161 | else { | ||
162 | d->m_systemstr = "Zaurus"; | ||
163 | d->m_system = System_Zaurus; | ||
164 | } | ||
165 | 153 | ||
166 | f. setName ( "/proc/cpuinfo" ); | 154 | // check the Zaurus model |
167 | if ( f. open ( IO_ReadOnly ) ) { | 155 | QString model; |
168 | QTextStream ts ( &f ); | 156 | int loc = cpu_info.find( ":" ); |
169 | QString line; | 157 | if ( loc != -1 ) |
170 | while( line = ts. readLine() ) { | 158 | model = cpu_info.mid( loc+2 ).simplifyWhiteSpace(); |
171 | if ( line. left ( 8 ) == "Hardware" ) | 159 | else |
172 | break; | 160 | model = cpu_info; |
173 | } | ||
174 | int loc = line. find ( ":" ); | ||
175 | if ( loc != -1 ) | ||
176 | model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); | ||
177 | } | ||
178 | 161 | ||
179 | if ( model == "SHARP Corgi" ) { | 162 | if ( model == "SHARP Corgi" ) { |
180 | d->m_model = Model_Zaurus_SLC7x0; | 163 | d->m_model = Model_Zaurus_SLC7x0; |
181 | d->m_modelstr = "Zaurus SL-C700"; | 164 | d->m_modelstr = "Zaurus SL-C700"; |
182 | } else if ( model == "SHARP Shepherd" ) { | 165 | } else if ( model == "SHARP Shepherd" ) { |
183 | d->m_model = Model_Zaurus_SLC7x0; | 166 | d->m_model = Model_Zaurus_SLC7x0; |
184 | d->m_modelstr = "Zaurus SL-C750"; | 167 | d->m_modelstr = "Zaurus SL-C750"; |
185 | } else if ( model == "SHARP Husky" ) { | 168 | } else if ( model == "SHARP Husky" ) { |
186 | d->m_model = Model_Zaurus_SLC7x0; | 169 | d->m_model = Model_Zaurus_SLC7x0; |
187 | d->m_modelstr = "Zaurus SL-C760"; | 170 | d->m_modelstr = "Zaurus SL-C760"; |
188 | } else if ( model == "SHARP Poodle" ) { | 171 | } else if ( model == "SHARP Poodle" ) { |
189 | d->m_model = Model_Zaurus_SLB600; | 172 | d->m_model = Model_Zaurus_SLB600; |
190 | d->m_modelstr = "Zaurus SL-B500 or SL-5600"; | 173 | d->m_modelstr = "Zaurus SL-B500 or SL-5600"; |
191 | } else if ( model == "Sharp-Collie" || model == "Collie" ) { | 174 | } else if ( model == "Sharp-Collie" || model == "Collie" ) { |
192 | d->m_model = Model_Zaurus_SL5500; | 175 | d->m_model = Model_Zaurus_SL5500; |
193 | d->m_modelstr = "Zaurus SL-5500 or SL-5000d"; | 176 | d->m_modelstr = "Zaurus SL-5500 or SL-5000d"; |
194 | } else { | 177 | } else { |
195 | d->m_model = Model_Zaurus_SL5500; | 178 | d->m_model = Model_Zaurus_SL5500; |
196 | d->m_modelstr = "Zaurus (Model unknown)"; | 179 | d->m_modelstr = "Unkown Zaurus"; |
197 | } | 180 | } |
198 | 181 | ||
182 | // set initial rotation | ||
183 | |||
199 | bool flipstate = false; | 184 | bool flipstate = false; |
200 | switch ( d->m_model ) { | 185 | switch ( d->m_model ) { |
201 | case Model_Zaurus_SLA300: | 186 | case Model_Zaurus_SLA300: |
202 | d->m_rotation = Rot0; | 187 | d->m_rotation = Rot0; |
203 | break; | 188 | break; |
204 | case Model_Zaurus_SLC7x0: | 189 | case Model_Zaurus_SLC7x0: |
205 | d->m_rotation = rotation(); | 190 | d->m_rotation = rotation(); |
206 | d->m_direction = direction(); | 191 | d->m_direction = direction(); |
207 | break; | 192 | break; |
208 | case Model_Zaurus_SLB600: | 193 | case Model_Zaurus_SLB600: |
209 | case Model_Zaurus_SL5500: | 194 | case Model_Zaurus_SL5500: |
210 | case Model_Zaurus_SL5000: | 195 | case Model_Zaurus_SL5000: |
211 | default: | 196 | default: |
212 | d->m_rotation = Rot270; | 197 | d->m_rotation = Rot270; |
213 | break; | 198 | break; |
214 | } | 199 | } |
215 | m_leds [0] = Led_Off; | 200 | m_leds [0] = Led_Off; |
216 | } | 201 | } |
217 | 202 | ||
218 | void Zaurus::initButtons() | 203 | void Zaurus::initButtons() |
219 | { | 204 | { |
220 | if ( d->m_buttons ) | 205 | if ( d->m_buttons ) |
221 | return; | 206 | return; |
222 | 207 | ||
223 | d->m_buttons = new QValueList <ODeviceButton>; | 208 | d->m_buttons = new QValueList <ODeviceButton>; |
224 | 209 | ||
225 | struct z_button * pz_buttons; | 210 | struct z_button * pz_buttons; |
226 | int buttoncount; | 211 | int buttoncount; |
227 | switch ( d->m_model ) { | 212 | switch ( d->m_model ) { |
228 | case Model_Zaurus_SLC7x0: | 213 | case Model_Zaurus_SLC7x0: |
229 | pz_buttons = z_buttons_c700; | 214 | pz_buttons = z_buttons_c700; |
230 | buttoncount = ARRAY_SIZE(z_buttons_c700); | 215 | buttoncount = ARRAY_SIZE(z_buttons_c700); |
231 | break; | 216 | break; |
232 | default: | 217 | default: |
233 | pz_buttons = z_buttons; | 218 | pz_buttons = z_buttons; |
234 | buttoncount = ARRAY_SIZE(z_buttons); | 219 | buttoncount = ARRAY_SIZE(z_buttons); |
235 | break; | 220 | break; |
236 | } | 221 | } |
237 | 222 | ||
238 | for ( int i = 0; i < buttoncount; i++ ) { | 223 | for ( int i = 0; i < buttoncount; i++ ) { |
239 | struct z_button *zb = pz_buttons + i; | 224 | struct z_button *zb = pz_buttons + i; |
240 | ODeviceButton b; | 225 | ODeviceButton b; |
241 | 226 | ||
242 | b. setKeycode ( zb->code ); | 227 | b. setKeycode ( zb->code ); |
243 | b. setUserText ( QObject::tr ( "Button", zb->utext )); | 228 | b. setUserText ( QObject::tr ( "Button", zb->utext )); |
244 | b. setPixmap ( Resource::loadPixmap ( zb->pix )); | 229 | b. setPixmap ( Resource::loadPixmap ( zb->pix )); |
245 | b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb->fpressedservice ), | 230 | b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb->fpressedservice ), |
246 | zb->fpressedaction )); | 231 | zb->fpressedaction )); |