+++ /dev/null
-diff --git a/.gitignore b/.gitignore
-index ccfb515..a6f8d11 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -16,3 +16,4 @@ install-sh
- *.o
- missing
- stamp-h1
-+aio-grab_vuplus_*
-diff --git a/main.c b/main.c
-index 190ff5f..3a2ba51 100644
---- a/main.c
-+++ b/main.c
-@@ -1,5 +1,5 @@
- /*
--AiO Dreambox Screengrabber v0.83a
-+AiO Screengrabber v0.83a
-
- written 2006 - 2009 by Seddi
- Contact: seddi@ihad.tv / http://www.ihad.tv
-@@ -38,6 +38,7 @@ Feel free to use the code for your own projects. See LICENSE file for details.
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <unistd.h>
-+#include <ctype.h>
-
- #include <linux/fb.h>
-
-@@ -101,10 +102,24 @@ static void combine(unsigned char *output,
- const unsigned char *video, const unsigned char *osd,
- unsigned int xres, unsigned int yres);
-
-+#define IS_VUPLUS 1
-+#if IS_VUPLUS
-+enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405,BRCM7335,BRCM7325,BRCM7346,BRCM7425,BRCM7362};
-+char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405","Brcm7335","Brcm7325","Brcm7346","Brcm7425\/7241","Brcm7362"};
-+#else
- enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405};
- static const char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405"};
-+#endif
- static int stb_type=UNKNOWN;
-
-+char* upcase(char* mixedstr)
-+{
-+ size_t j;
-+ for (j=0; j< strlen(mixedstr); ++j)
-+ mixedstr[j]=toupper(mixedstr[j]);
-+ return mixedstr;
-+}
-+
- static const char *file_getline(const char *filename)
- {
- static char *line = NULL;
-@@ -184,10 +199,9 @@ static int file_scanf_lines(const char *filename, const char *fmt, ...)
- }
-
- // main program
--
- int main(int argc, char **argv) {
-
-- printf("AiO Dreambox Screengrabber " PACKAGE_VERSION "\n\n");
-+ printf("AiO Screengrabber " PACKAGE_VERSION "\n\n");
-
- unsigned int xres_v = 0,yres_v = 0,xres_o,yres_o,xres,yres,aspect,width;
- int c,osd_only,video_only,use_osd_res,use_png,use_jpg,jpg_quality,no_aspect,use_letterbox;
-@@ -205,11 +219,33 @@ int main(int argc, char **argv) {
- char filename[256] = { "/tmp/screenshot.bmp" };
-
- // detect STB
-- const char *line = file_getline("/proc/fb");
-+ char *line = (char*)file_getline("/proc/fb");
- if (line == NULL)
- return 1;
-
- if (strstr(line, "bcmfb")) {
-+#if IS_VUPLUS
-+ if((line=(char*)file_getline("/proc/stb/info/chipset")) == NULL)
-+ return 1;
-+ if (strstr(upcase(line),"7335"))
-+ stb_type=BRCM7335;
-+ else if (strstr(upcase(line),"7325"))
-+ stb_type=BRCM7325;
-+ else if (strstr(upcase(line),"7405"))
-+ stb_type=BRCM7405;
-+ else if (strstr(upcase(line),"7356"))
-+ stb_type=BRCM7346;
-+ else if (strstr(upcase(line),"7346"))
-+ stb_type=BRCM7346;
-+ else if (strstr(upcase(line),"7424"))
-+ stb_type=BRCM7425;
-+ else if (strstr(upcase(line),"7425"))
-+ stb_type=BRCM7425;
-+ else if (strstr(upcase(line),"7241"))
-+ stb_type=BRCM7425;
-+ else if (strstr(upcase(line),"7362"))
-+ stb_type=BRCM7362;
-+#else
- line = file_getline("/proc/stb/info/model");
- if (line == NULL)
- return 1;
-@@ -221,6 +257,7 @@ int main(int argc, char **argv) {
- !strcmp(line, "dm800se") ||
- !strcmp(line, "dm7020hd"))
- stb_type = BRCM7405;
-+#endif
- } else if (strstr(line, "xilleonfb")) {
- stb_type = XILLEON;
- } else if (strstr(line, "Pallas FB")) {
-@@ -563,16 +600,34 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- perror("/dev/mem");
- return false;
- }
--
-+#if IS_VUPLUS
-+ if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425 || stb_type == BRCM7362)
-+#else
- if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405)
-+#endif
- {
- // grab brcm7401 pic from decoder memory
-+#if IS_VUPLUS
-+ off_t offset_addr = 0x10600000;
-+ switch(stb_type) {
-+ case BRCM7401:
-+ case BRCM7400:
-+ case BRCM7405:
-+ case BRCM7335:
-+ case BRCM7325: offset_addr = 0x10100000; break;
-+ }
-+ unsigned char *memory = mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, offset_addr);
-+ if (memory == MAP_FAILED) {
-+ perror("mmap");
-+ return false;
-+ }
-+#else
- unsigned char *memory = mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, 0x10100000);
- if (memory == MAP_FAILED) {
- perror("mmap");
- return false;
- }
--
-+#endif
- unsigned char data[100];
-
- unsigned int adr,adr2,ofs,ofs2,offset/*,vert_start,vert_end*/;
-@@ -582,12 +637,30 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- memcpy(data,memory,100);
- //vert_start=data[0x1B]<<8|data[0x1A];
- //vert_end=data[0x19]<<8|data[0x18];
-+#if IS_VUPLUS
-+ if(stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325) {
-+ stride=data[0x15]<<8|data[0x14];
-+ ofs=(data[0x28]<<8|data[0x27])>>4;
-+ ofs2=(data[0x2c]<<8|data[0x2b])>>4;
-+ adr=(data[0x1f]<<24|data[0x1e]<<16|data[0x1d]<<8|data[0x1c])&0xFFFFFF00;
-+ adr2=(data[0x23]<<24|data[0x22]<<16|data[0x21]<<8|data[0x20])&0xFFFFFF00;
-+ offset=adr2-adr;
-+ } else {
-+ stride=data[0x15]<<8|data[0x14];
-+ ofs=(data[0x3c]<<8|data[0x3b])>>4;
-+ ofs2=(data[0x40]<<8|data[0x3f])>>4;
-+ adr=(data[0x1f]<<24|data[0x1e]<<16|data[0x1d]<<8|data[0x1c])&0xFFFFFF00;
-+ adr2=(data[0x37]<<24|data[0x36]<<16|data[0x35]<<8|data[0x34])&0xFFFFFF00;
-+ offset=adr2-adr;
-+ }
-+#else
- stride=data[0x15]<<8|data[0x14];
- ofs=(data[0x28]<<8|data[0x27])>>4;
- ofs2=(data[0x2c]<<8|data[0x2b])>>4;
- adr=(data[0x1f]<<24|data[0x1e]<<16|data[0x1d]<<8|data[0x1c])&0xFFFFFF00;
- adr2=(data[0x23]<<24|data[0x22]<<16|data[0x21]<<8|data[0x20])&0xFFFFFF00;
- offset=adr2-adr;
-+#endif
-
- munmap(memory, 100);
-
-@@ -609,7 +682,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- assert(chroma);
-
- // grabbing luma & chroma plane from the decoder memory
-+#if IS_VUPLUS
-+ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425 || stb_type == BRCM7362 ) {
-+#else
- if (stb_type == BRCM7401 || stb_type == BRCM7405) {
-+#endif
- // on dm800/dm500hd we have direct access to the decoder memory
- memory = mmap(0, offset + stride*(ofs2+64), PROT_READ, MAP_SHARED, mem_fd, adr);
- if (memory == MAP_FAILED) {
-@@ -620,7 +697,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- usleep(50000); // we try to get a full picture, its not possible to get a sync from the decoder so we use a delay
- // and hope we get a good timing. dont ask me why, but every DM800 i tested so far produced a good
- // result with a 50ms delay
-+#if IS_VUPLUS
-+ } else if (stb_type == BRCM7400 || stb_type == BRCM7335) {
-+#else
- } else if (stb_type == BRCM7400) {
-+#endif
- // on dm8000 we have to use dma, so dont change anything here until you really know what you are doing !
-
- unsigned int i = 0;
-@@ -639,7 +720,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- }
-
- volatile unsigned long *mem_dma;
-+#if IS_VUPLUS
-+ mem_dma = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, (stb_type==BRCM7400)?0x10c02000:0x10c01000);
-+#else
- mem_dma = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0x10c02000);
-+#endif
- if (mem_dma == MAP_FAILED) {
- perror("mmap");
- return false;
-@@ -675,8 +760,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- unsigned int t = 0, t2 = 0, dat1 = 0;
- unsigned int chr_luma_stride = 0x40;
- unsigned int sw;
--
-+#if IS_VUPLUS
-+ if (stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425)
-+#else
- if (stb_type == BRCM7405)
-+#endif
- chr_luma_stride *= 2;
-
- xsub=chr_luma_stride;
-@@ -710,10 +798,17 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre
- dat1+=stride;
- }
- }
--
-+#if IS_VUPLUS
-+ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425 || stb_type == BRCM7362) {
-+#else
- if (stb_type == BRCM7401 || stb_type == BRCM7405)
-+#endif
- munmap(memory, offset + stride * (ofs2 + 64));
-+#if IS_VUPLUS
-+ } else if (stb_type == BRCM7400 || stb_type == BRCM7335) {
-+#else
- else if (stb_type == BRCM7400) {
-+#endif
- memory -= 0x1000;
- munmap(memory, DMA_BLOCKSIZE + 0x1000);
- }