]> cvs.zerfleddert.de Git - rsbs2/blobdiff - firmware.c
compressed main firmware now also gets extracted :-)
[rsbs2] / firmware.c
index 0595bd9645ed973ad0ee01463c06f61de534dcc7..40c2b56c32e7d794f3654f9e39be5ff677bc44f6 100644 (file)
@@ -8,6 +8,7 @@
 #include <string.h>
 #include <strings.h>
 #include "rsb-crc.h"
+#include "rsb-lz.h"
 
 #define FINDSTR(addr, str) (!strncmp((char*)addr, str, strlen(str)))
 
@@ -75,13 +76,13 @@ void show_properties(unsigned char *fw, int len)
                        }
 
                        if (prop->right_rw == 0x00 && prop->rw_mask == 0x00) {
-                               printf("(R-) ");
+                               printf("(R-)");
                        } else if (prop->right_rw == 0x01) {
-                               printf("(RW mask: 0x%02x) ", prop->rw_mask);
+                               printf("(RW mask: 0x%02x)", prop->rw_mask);
                        } else {
-                               printf("(UNK 0x%02x 0x%02x) ", prop->right_rw, prop->rw_mask);
+                               printf("(UNK 0x%02x 0x%02x)", prop->right_rw, prop->rw_mask);
                        }
-                       printf("\n");
+                       printf(", length: %d\n", *((unsigned int*)(fw + i - 4)));
                }
        }
 }
@@ -236,13 +237,8 @@ void handle_boarddescription(unsigned char *fw, int len, int patch)
                        }
 
                        if (patch) {
-                               /* Enable ATX and relay power switching */
-                               BD_SET(pos, PWRATX);
+                               /* Enable relay power switching */
                                BD_SET(pos, PWRRELAY);
-                               /* Serial */
-                               BD_SET(pos, SERIAL2);
-                               /* ATX standby */
-                               BD_SET(pos, STANDBY);
                        }
                        printf("0x%08x: BOARD_DESCRIPTION: ", pos-fw);
                        print_boarddescription(pos);
@@ -259,6 +255,7 @@ void syntax(char *name)
        fprintf(stderr,"\t-d\t\tdisplay all properties of the image\n");
        fprintf(stderr,"\t-u\t\tupdate checksum of the image\n");
        fprintf(stderr,"\t-b\t\tmodify BOARD_DESCRIPTION for more power-switch options\n");
+       fprintf(stderr,"\t-e\t\textract files in firmware\n");
        fprintf(stderr,"\t-t property\tset 'property' to true\n");
        fprintf(stderr,"\t-f property\tset 'property' to false\n");
        fprintf(stderr,"\t-w property\tallow read-write access to 'property'\n");
@@ -356,11 +353,12 @@ int main(int argc, char **argv)
        int update_crc = 0;
        int patch_bd = 0;
        int patch_fw = 0;
+       int extract = 0;
 
        if (argc < 2)
                syntax(argv[0]);
 
-       while ((opt = getopt(argc, argv, "dubt:f:w:r:")) != -1) {
+       while ((opt = getopt(argc, argv, "dubet:f:w:r:")) != -1) {
                switch(opt) {
                        case 'd':
                                showall = 1;
@@ -371,6 +369,9 @@ int main(int argc, char **argv)
                        case 'b':
                                patch_bd = 1;
                                break;
+                       case 'e':
+                               extract = 1;
+                               break;
                        case 't':
                        case 'f':
                        case 'w':
@@ -459,6 +460,10 @@ int main(int argc, char **argv)
                handle_boarddescription(fw, statbuf.st_size -4, 0);
        }
 
+       if (extract) {
+               search_lz_sections(fw, statbuf.st_size - 4);
+       }
+
        if (update_crc || patch_fw || patch_bd) {
                ret = rsb_crc2(fw, statbuf.st_size, 0x55335053, &crc);
                if (ret == 4) {
Impressum, Datenschutz