From: Ronny Strutz Date: Thu, 10 Nov 2005 01:41:03 +0000 (+0000) Subject: add functions for aspect-ratio and system (system is buggy in /proc) X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=e809534d8af6a2f742dbc6d1341c7df804a42234 add functions for aspect-ratio and system (system is buggy in /proc) --- diff --git a/lib/driver/avswitch.cpp b/lib/driver/avswitch.cpp index 31db25a..9d2ae00 100644 --- a/lib/driver/avswitch.cpp +++ b/lib/driver/avswitch.cpp @@ -15,14 +15,10 @@ eAVSwitch::eAVSwitch() { ASSERT(!instance); instance = this; - - avsfd = open("/dev/dbox/avs0", O_RDWR); } eAVSwitch::~eAVSwitch() { - if(avsfd > 0) - close(avsfd); } eAVSwitch *eAVSwitch::getInstance() @@ -32,9 +28,88 @@ eAVSwitch *eAVSwitch::getInstance() void eAVSwitch::setColorFormat(int format) { - printf("eAVSwitch::setColorFormat(%d)\n",format); - /*there are no ioctl for controling this in avs - scart api needed - no, not the gillem one */ + /* + 0-CVBS + 1-RGB + 2-S-Video + */ + char *cvbs="cvbs"; + char *rgb="rgb"; + char *svideo="svideo"; + int fd; + + if((fd = open("/proc/stb/avs/0/colorformat", O_WRONLY)) < 0) { + printf("cannot open /proc/stb/avs/0/colorformat\n"); + return; + } + switch(format) { + case 0: + write(fd, cvbs, strlen(cvbs)); + break; + case 1: + write(fd, rgb, strlen(rgb)); + break; + case 2: + write(fd, svideo, strlen(svideo)); + break; + } + close(fd); +} + +void eAVSwitch::setAspectRatio(int ratio) +{ + /* + 0-4:3 Letterbox + 1-4:3 PanScan + 2-16:9 + 3-16:9 forced + */ + + char *any="any"; + char *norm="4:3"; + char *wide="16:9"; + int fd; + + if((fd = open("/proc/stb/video/aspect", O_WRONLY)) < 0) { + printf("cannot open /proc/stb/video/aspect\n"); + return; + } + switch(ratio) { + case 0: + write(fd, any, strlen(any)); + break; + case 1: + write(fd, norm, strlen(norm)); + break; + case 2: + case 3: + write(fd, wide, strlen(wide)); + break; + } + close(fd); +} + +void eAVSwitch::setVideomode(int mode) +{ + char *pal="pal"; + char *ntsc="ntsc"; + int fd; + + return 0; + //FIXME: bug in driver (cannot set PAL) + if((fd = open("/proc/stb/video/videomode", O_WRONLY)) < 0) { + printf("cannot open /proc/stb/video/videomode\n"); + return; + } + switch(mode) { + case 0: + write(fd, pal, strlen(pal)); + break; + case 3: + write(fd, ntsc, strlen(ntsc)); + break; + } + close(fd); } //FIXME: correct "run/startlevel" diff --git a/lib/driver/avswitch.h b/lib/driver/avswitch.h index d841769..1579488 100644 --- a/lib/driver/avswitch.h +++ b/lib/driver/avswitch.h @@ -5,7 +5,6 @@ class eAVSwitch { static eAVSwitch *instance; - int avsfd; protected: public: eAVSwitch(); @@ -14,6 +13,8 @@ public: static eAVSwitch *getInstance(); void setColorFormat(int format); + void setAspectRatio(int ratio); + void setVideomode(int mode); }; #endif