add mtd cleanup, fix #17
[openwrt.git] / target / utils / src / addpattern.c
index 52fb8ee..67f9da2 100644 (file)
@@ -50,6 +50,7 @@
 
 #define CODE_ID                "U2ND"          /* from code_pattern.h */
 #define CODE_PATTERN   "W54S"  /* from code_pattern.h */
+#define PBOT_PATTERN   "PBOT"
 
 #define CYBERTAN_VERSION       "v3.37.2" /* from cyutils.h */
 
@@ -75,7 +76,7 @@ void usage(void) __attribute__ (( __noreturn__ ));
 
 void usage(void)
 {
-       fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-v v#.#.#] [-{0|1|2}]\n");
+       fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-{0|1|2|4}]\n");
        exit(EXIT_FAILURE);
 }
 
@@ -88,8 +89,10 @@ int main(int argc, char **argv)
        char *ifn = NULL;
        char *ofn = NULL;
        char *pattern = CODE_PATTERN;
+       char *pbotpat = PBOT_PATTERN;
        char *version = CYBERTAN_VERSION;
        int gflag = 0;
+       int pbotflag = 0;
        int c;
        int v0, v1, v2;
        size_t off, n;
@@ -101,7 +104,7 @@ int main(int argc, char **argv)
        hdr = (struct code_header *) buf;
        memset(hdr, 0, sizeof(struct code_header));
 
-       while ((c = getopt(argc, argv, "i:o:p:gv:012")) != -1) {
+       while ((c = getopt(argc, argv, "i:o:p:gbv:0124")) != -1) {
                switch (c) {
                        case 'i':
                                ifn = optarg;
@@ -115,6 +118,9 @@ int main(int argc, char **argv)
                        case 'g':
                                gflag = 1;
                                break;
+                       case 'b':
+                               pbotflag = 1;
+                               break;
                        case 'v':                       /* extension to allow setting version */
                                version = optarg;
                                break;
@@ -130,6 +136,11 @@ int main(int argc, char **argv)
                                hdr->flags |= SUPPORT_INTEL_FLASH;
                                hdr->flags |= SUPPORT_5325E_SWITCH;
                                break;
+                       case '4':
+                               /* V4 firmware sets the flags to 0x1f */
+                               hdr->hw_ver = 1;
+                               hdr->flags = 0x1f;
+                               break;
 
                        default:
                                usage();
@@ -169,6 +180,8 @@ int main(int argc, char **argv)
        }
 
        memcpy(&hdr->magic, pattern, 4);
+       if (pbotflag)
+               memcpy(&hdr->res1, pbotpat, 4);
        hdr->fwdate[0] = ptm->tm_year % 100;
        hdr->fwdate[1] = ptm->tm_mon + 1;
        hdr->fwdate[2] = ptm->tm_mday;
This page took 0.022915 seconds and 4 git commands to generate.