diff options
author | Markus Rechberger <devnull@localhost> | 2006-01-25 09:48:37 +0000 |
---|---|---|
committer | Markus Rechberger <devnull@localhost> | 2006-01-25 09:48:37 +0000 |
commit | 8c995fe9b63c4e6b6c8d95a6ad3457c2e6751b20 (patch) | |
tree | ea72625b9fce3183864de7a4fe015b8f747ed337 /v4l_experimental/xc3028/convert.c | |
parent | a25dd947a39d66c4d6f78b18df1e9c07185546c3 (diff) | |
download | mediapointer-dvb-s2-8c995fe9b63c4e6b6c8d95a6ad3457c2e6751b20.tar.gz mediapointer-dvb-s2-8c995fe9b63c4e6b6c8d95a6ad3457c2e6751b20.tar.bz2 |
Hauppauge HVR 900 driver support
From: Markus Rechberger <mrechberger@gmail.com>
Signed-off-by: Markus Rechberger <mrechberger@gmail.com>
Diffstat (limited to 'v4l_experimental/xc3028/convert.c')
-rw-r--r-- | v4l_experimental/xc3028/convert.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/v4l_experimental/xc3028/convert.c b/v4l_experimental/xc3028/convert.c new file mode 100644 index 000000000..00b1f7d9d --- /dev/null +++ b/v4l_experimental/xc3028/convert.c @@ -0,0 +1,84 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#define ARRAY_SIZE(fw) sizeof(fw)/sizeof(fw[0]) +struct{ + char *fwname; + char *fwstart; + char *fwstart2; + int length1; + int length2; +} xc_firmware[]={{"Terratec","\x2a\x03\xe5\xe0\x00\x07\xf4\xd0\x01\xc0\x70\xe0\x00\x07","\x2a\x00\xc3\xe0\x00\x07\xb9\xf1\x05\x01\x6e\x82\x02\x82",2480,3876}, + {"Hauppauge","\x2a\x03\xcc\xe0\x00\x07\xf4\xd0\x01\xc0\x70\xe0\x00\x07","\x2a\x00\xbe\xe0\x00\x07\xb9\xf1\x05\x01\x69\x82\x02\x82",2532,3886}}; + +int main(int argc, char **argv){ + FILE *file; + char buffer[1024]; + char *fwmem=0; + int len; + long fleng=0; + int i; + int n=0; + int x; + int done=0; + int d=0; + int e=0; + if(argc!=2){ + printf("./convert <filename>\n"); + exit(1); + } + file=fopen(argv[1],"r"); + fprintf(stderr,"Firmware extractor 0.1\n"); + while((len=fread(buffer,1,1024,file))){ + fleng+=len; + fwmem=realloc(fwmem,fleng); + memcpy(&fwmem[fleng-len],buffer,len); + } + fprintf(stderr,"Stored in memory: %ld\n",fleng); + for(n=0;n<ARRAY_SIZE(xc_firmware);n++){ + for(i=0;i<fleng&&done!=2;i++){ + if(xc_firmware[n].fwstart[d]==fwmem[i]&&done!=1){ + if(d==13){ + fprintf(stderr,"==== %s ====\n",xc_firmware[n].fwname); + printf("%d\n",xc_firmware[n].length1); + fprintf(stderr,"FW part 1 found!\n"); + fprintf(stderr,"Length: %d bytes\n",xc_firmware[n].length1); + for(x=1;x<=xc_firmware[n].length1;x++){ + fprintf(stderr,"%02x ",((unsigned char*)fwmem)[i-13+x]); + printf("%c",((unsigned char*)fwmem)[i-13+x]); + if(x%63==0){ + fprintf(stderr,"\n"); + } + } + fprintf(stderr,"\n"); + done++; + } + d++; + } else { + d=0; + } + if(xc_firmware[n].fwstart2[e]==fwmem[i]){ + if(e==13){ + fprintf(stderr,"-------------------------------------------\n"); + fprintf(stderr,"FW part 2 found!\n"); + fprintf(stderr,"Length: %d bytes\n",xc_firmware[n].length2); + for(x=1;x<=xc_firmware[n].length2;x++){ + printf("%c",((unsigned char*)fwmem)[i-13+x]); + fprintf(stderr,"%02x ",((unsigned char*)fwmem)[i-13+x]); + if(x%63==0){ + fprintf(stderr,"\n"); + } + } + done++; + } + e++; + } else { + e=0; + } + } + } + free(fwmem); + fclose(file); + exit(0); +} |