summaryrefslogtreecommitdiff
path: root/libopie2
authorllornkcor <llornkcor>2006-07-14 20:15:58 (UTC)
committer llornkcor <llornkcor>2006-07-14 20:15:58 (UTC)
commit20b8c8eb22b5498647430da49986f75b78cf2d79 (patch) (unidiff)
tree0309ad594266a40cf17959b5c0d322933b6256ca /libopie2
parent36dece4760b1ac1799929221b49eb3bee98c2367 (diff)
downloadopie-20b8c8eb22b5498647430da49986f75b78cf2d79.zip
opie-20b8c8eb22b5498647430da49986f75b78cf2d79.tar.gz
opie-20b8c8eb22b5498647430da49986f75b78cf2d79.tar.bz2
more htc universal stuff
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice.h7
-rw-r--r--libopie2/opiecore/device/odevice_htc.cpp255
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
119struct 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
155void HTC::init(const QString& cpu_info) 129void 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
244void HTC::initButtons() 223void HTC::initButtons()
@@ -378,71 +357,28 @@ OLedState HTC::ledState( OLed which ) const
378 357
379bool HTC::setLedState( OLed which, OLedState st ) 358bool 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
413int HTC::displayBrightnessResolution() const 364int 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
442bool HTC::setDisplayBrightness( int bright ) 380bool 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
479bool HTC::setDisplayStatus( bool on ) 403bool 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
554OHingeStatus HTC::readHingeSensor() const 464OHingeStatus 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
614void HTC::initHingeSensor() 497void HTC::initHingeSensor()