#include "logoview.h"
#include "jpeg.h"
-#define LV_VERSION "1.01"
+#define LV_VERSION "1.01c"
#define VERSIONSTR "\n\
- ------------------------------------------------------------\n\
+ -------------------------------------------------------------\n\
-- logoview v" LV_VERSION " * (C)2011-2012, M. Liebmann (micha-bbg) --\n\
- ------------------------------------------------------------\n\n"
+ -- patched for Keywelt by Markham --\n\
+ -------------------------------------------------------------\n\n"
#define FLAG_FILE "/tmp/.logoview"
#define NEUTRINO_CONF "/var/tuxbox/config/neutrino.conf"
#define FB_DEVICE "/dev/fb/0"
screen_EndX = 0;
screen_EndY = 0;
screen_preset = 0;
+ osd_resolution = -1;
lfb = 0;
PicBuf = 0;
TmpBuf = 0;
void CLogoView::ClearThis(bool ClearDisplay/*=true*/)
{
unlink(FLAG_FILE);
- if (lfb > 0) {
+ if (lfb) {
if (ClearDisplay)
SetScreenBuf(lfb, 0x00, 0x00, 0x00, 0x00); // clear screen
munmap(lfb, fix_screeninfo.smem_len);
}
- if (PicBuf > 0)
+ if (PicBuf)
free(PicBuf);
- if (TmpBuf > 0)
+ if (TmpBuf)
free(TmpBuf);
- if (ScBuf > 0)
+ if (ScBuf)
free(ScBuf);
if (fb > 0)
close(fb);
{
char buf1[512] = "";
char buf2[512] = "";
- FILE *fv = fopen(NEUTRINO_CONF, "r");
+ FILE *fv;
- screen_StartX=5;
- screen_StartY=5;
- screen_EndX=1275;
- screen_EndY=715;
+ if (var_screeninfo.xres == 1920) {
+ screen_StartX = 22;
+ screen_StartY = 22;
+ screen_EndX = 1898;
+ screen_EndY = 1058;
+ }
+ else {
+ screen_StartX = 15;
+ screen_StartY = 15;
+ screen_EndX = 1265;
+ screen_EndY = 705;
+ }
- if(!noconf && fv) {
+ if(!noconf && (fv = fopen(NEUTRINO_CONF,"r")) != NULL) {
while(fgets(buf1, sizeof(buf1), fv) != NULL) {
sscanf(buf1, "screen_preset=%2d", &screen_preset);
+ sscanf(buf1, "osd_resolution=%2d", &osd_resolution);
}
fclose(fv);
ScreenMode = (screen_preset) ? "lcd" : "crt";
fv = fopen(NEUTRINO_CONF, "r");
if(fv) {
while(fgets(buf1, sizeof(buf1), fv) != NULL) {
- sprintf(buf2, "screen_StartX_%s=%%4d", ScreenMode.c_str());
+ if (osd_resolution == -1)
+ sprintf(buf2,"screen_StartX_%s", ScreenMode.c_str());
+ else
+ sprintf(buf2,"screen_StartX_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution);
sscanf(buf1, buf2, &screen_StartX);
- sprintf(buf2, "screen_StartY_%s=%%4d", ScreenMode.c_str());
+ if (osd_resolution == -1)
+ sprintf(buf2,"screen_StartY_%s", ScreenMode.c_str());
+ else
+ sprintf(buf2,"screen_StartY_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution);
sscanf(buf1, buf2, &screen_StartY);
- sprintf(buf2, "screen_EndX_%s=%%4d", ScreenMode.c_str());
+ if (osd_resolution == -1)
+ sprintf(buf2,"screen_EndX_%s", ScreenMode.c_str());
+ else
+ sprintf(buf2,"screen_EndX_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution);
sscanf(buf1, buf2, &screen_EndX);
- sprintf(buf2, "screen_EndY_%s=%%4d", ScreenMode.c_str());
+ if (osd_resolution == -1)
+ sprintf(buf2,"screen_EndY_%s", ScreenMode.c_str());
+ else
+ sprintf(buf2,"screen_EndY_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution);
sscanf(buf1, buf2, &screen_EndY);
}
+// printf("\n##### [%s] screen_StartX: %d, screen_StartY: %d, screen_EndX: %d, screen_EndY: %d\n \n", __FUNCTION__, screen_StartX, screen_StartY, screen_EndX, screen_EndY);
fclose(fv);
}
}
--------\n\
-l | --logo Path to logofile (jpg only)\n\
-b | --background Run in background\n\
+ -n | --noconf Without config\n\
-t | --timeout Timeout in sec. (default 0 = no timeout)\n\
-c | --clearscreen Clear screen when timeout (default = no)\n\
-h | --help This help\n\
default: return 0;
}
}
-
+#if 1
+ fb = -1;
+ int count = 0;
+ // waiting for framebuffer device
+ while (fb == -1) {
+ fb = open(FB_DEVICE, O_RDWR);
+ if (fb != -1) break;
+ if (count >= 80) { // 8 sec
+ perror("[logoview] <timeout open framebuffer device>");
+ exit(1);
+ }
+ count++;
+ usleep(100000);
+ }
+ if (count > 0)
+ printf("[logoview] <open framebuffer device OK>, waiting: %.1f sec\n", count/10.0);
+#else
fb = open(FB_DEVICE, O_RDWR);
if(fb == -1) {
perror("[logoview] <open framebuffer device>");
exit(1);
}
+#endif
if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) {
perror("[logoview] <FBIOGET_FSCREENINFO>\n");
ClearThis();