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 | |||
@@ -76,2 +76,3 @@ enum OModel { | |||
76 | Model_Jornada_720 = ( Model_Jornada | 0x0002 ), | 76 | Model_Jornada_720 = ( Model_Jornada | 0x0002 ), |
77 | Model_Jornada_820 = ( Model_Jornada | 0x0003 ), | ||
77 | 78 | ||
@@ -127,2 +128,8 @@ enum OModel { | |||
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 | ||
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 | |||
@@ -118,37 +118,11 @@ struct htc_button htc_buttons_universal [] = { | |||
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 | ||
@@ -161,31 +135,5 @@ void HTC::init(const QString& cpu_info) | |||
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 | ||
@@ -199,2 +147,5 @@ void HTC::init(const QString& 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" ) { |
@@ -202,8 +153,30 @@ void HTC::init(const QString& cpu_info) | |||
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 ) |
@@ -211,4 +184,13 @@ void HTC::init(const QString& cpu_info) | |||
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/"; |
@@ -237,6 +219,3 @@ void HTC::init(const QString& cpu_info) | |||
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 | } |
@@ -380,31 +359,3 @@ 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; |
@@ -414,19 +365,6 @@ 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 ) |
@@ -437,3 +375,3 @@ int HTC::displayBrightnessResolution() const | |||
437 | } | 375 | } |
438 | } | 376 | |
439 | return res; | 377 | return res; |
@@ -443,4 +381,2 @@ bool HTC::setDisplayBrightness( int bright ) | |||
443 | { | 381 | { |
444 | /* MV */ | ||
445 | return false; | ||
446 | 382 | ||
@@ -455,21 +391,9 @@ bool HTC::setDisplayBrightness( int bright ) | |||
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 | } |
@@ -480,27 +404,13 @@ 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 | } |
@@ -555,28 +465,2 @@ 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 | /* |
@@ -610,3 +494,2 @@ OHingeStatus HTC::readHingeSensor() const | |||
610 | } | 494 | } |
611 | } | ||
612 | } | 495 | } |