summaryrefslogtreecommitdiff
path: root/v4l_experimental/xc3028/convert.c
diff options
context:
space:
mode:
authorMarkus Rechberger <devnull@localhost>2006-01-25 09:48:37 +0000
committerMarkus Rechberger <devnull@localhost>2006-01-25 09:48:37 +0000
commit8c995fe9b63c4e6b6c8d95a6ad3457c2e6751b20 (patch)
treeea72625b9fce3183864de7a4fe015b8f747ed337 /v4l_experimental/xc3028/convert.c
parenta25dd947a39d66c4d6f78b18df1e9c07185546c3 (diff)
downloadmediapointer-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.c84
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);
+}