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 | 255 |
2 files changed, 76 insertions, 186 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 | |||
@@ -74,6 +74,7 @@ enum OModel { | |||
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 | ||
@@ -125,6 +126,12 @@ enum OModel { | |||
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 ), |
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 | |||
@@ -116,41 +116,15 @@ struct htc_button htc_buttons_universal [] = { | |||
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 | { |
@@ -159,35 +133,9 @@ void HTC::init(const QString& cpu_info) | |||
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 - | 136 | d->m_vendorstr = "Xanadux Team"; |
163 | // embedix releases contain "Embedix <version> | Linux for Embedded Devices" | 137 | d->m_systemstr = "Familiar"; |
164 | if ( d->m_sysverstr.contains( "embedix", false ) ) | 138 | d->m_system = System_Familiar; |
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"; | ||
175 | d->m_systemstr = "Familiar"; | ||
176 | 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; |
@@ -197,20 +145,54 @@ void HTC::init(const QString& cpu_info) | |||
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 { | 154 | } |
204 | d->m_model = Model_HTC_Universal; | 155 | if ( model == "HTC Alpine" ) { |
205 | d->m_modelstr = "Unknown HTC"; | 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"; | ||
206 | } | 178 | } |
207 | 179 | ||
208 | // set path to backlight device in kernel 2.6 | 180 | |
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 | ||
@@ -235,10 +217,7 @@ void HTC::init(const QString& cpu_info) | |||
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() |
@@ -378,71 +357,28 @@ OLedState HTC::ledState( OLed which ) const | |||
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 | { | 368 | int fd = ::open( m_backlightdev + "max_brightness", O_RDONLY|O_NONBLOCK ); |
421 | int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_RDWR|O_NONBLOCK ); | 369 | |
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 ); | ||
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; |
@@ -453,56 +389,30 @@ bool HTC::setDisplayBrightness( int bright ) | |||
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 ) | 392 | int fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK ); |
393 | if ( fd ) | ||
457 | { | 394 | { |
458 | int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK ); | 395 | char buf[100]; |
459 | if ( fd ) | 396 | int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); |
460 | { | 397 | res = ( ::write( fd, &buf[0], len ) == 0 ); |
461 | res = ( ::ioctl( fd, SHARP_FL_IOCTL_STEP_CONTRAST, val ) == 0 ); | 398 | ::close( fd ); |
462 | ::close( fd ); | ||
463 | } | ||
464 | } | ||
465 | else | ||
466 | { | ||
467 | int fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK ); | ||
468 | if ( fd ) | ||
469 | { | ||
470 | char buf[100]; | ||
471 | int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); | ||
472 | res = ( ::write( fd, &buf[0], len ) == 0 ); | ||
473 | ::close( fd ); | ||
474 | } | ||
475 | } | 399 | } |
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 | { | 408 | int fd = ::open( m_backlightdev + "power", O_WRONLY|O_NONBLOCK ); |
487 | int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK ); | 409 | if ( fd ) |
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 | { | 410 | { |
497 | int fd = ::open( m_backlightdev + "power", O_WRONLY|O_NONBLOCK ); | 411 | char buf[10]; |
498 | if ( fd ) | 412 | buf[0] = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; |
499 | { | 413 | buf[1] = '\0'; |
500 | char buf[10]; | 414 | res = ( ::write( fd, &buf[0], 2 ) == 0 ); |
501 | buf[0] = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; | 415 | ::close( fd ); |
502 | buf[1] = '\0'; | ||
503 | res = ( ::write( fd, &buf[0], 2 ) == 0 ); | ||
504 | ::close( fd ); | ||
505 | } | ||
506 | } | 416 | } |
507 | return res; | 417 | return res; |
508 | } | 418 | } |
@@ -553,32 +463,6 @@ bool HTC::hasHingeSensor() const | |||
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: |
@@ -608,7 +492,6 @@ OHingeStatus HTC::readHingeSensor() const | |||
608 | { | 492 | { |
609 | return switch1 ? CASE_CLOSED : CASE_UNKNOWN; | 493 | return switch1 ? CASE_CLOSED : CASE_UNKNOWN; |
610 | } | 494 | } |
611 | } | ||
612 | } | 495 | } |
613 | 496 | ||
614 | void HTC::initHingeSensor() | 497 | void HTC::initHingeSensor() |