firmware-utils/addpattern: add support for the WRT160NL
SVN-Revision: 17140
This commit is contained in:
parent
60c9e8f5d7
commit
59c1e90fd7
1 changed files with 55 additions and 5 deletions
|
@ -29,11 +29,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* January 12, 2005
|
/* January 12, 2005
|
||||||
*
|
*
|
||||||
* Modified by rodent at rodent dot za dot net
|
* Modified by rodent at rodent dot za dot net
|
||||||
* Support added for the new WRT54G v2.2 and WRT54GS v1.1 "flags"
|
* Support added for the new WRT54G v2.2 and WRT54GS v1.1 "flags"
|
||||||
* Without the flags set to 0x7, the above units will refuse to flash.
|
* Without the flags set to 0x7, the above units will refuse to flash.
|
||||||
*
|
*
|
||||||
* Extensions:
|
* Extensions:
|
||||||
* -{0|1|2} sets {0|1} sets hw_ver flag to 0/1. {2} sets hw_ver to 1
|
* -{0|1|2} sets {0|1} sets hw_ver flag to 0/1. {2} sets hw_ver to 1
|
||||||
* and adds the new hardware "flags" for the v2.2/v1.1 units
|
* and adds the new hardware "flags" for the v2.2/v1.1 units
|
||||||
|
@ -87,16 +87,48 @@ struct code_header { /* from cyutils.h */
|
||||||
unsigned char res2[10];
|
unsigned char res2[10];
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
struct board_info {
|
||||||
|
char *id;
|
||||||
|
char *pattern;
|
||||||
|
char hw_ver;
|
||||||
|
char unused;
|
||||||
|
char flags[2];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct board_info boards[] = {
|
||||||
|
{
|
||||||
|
.id = "WRT160NL",
|
||||||
|
.pattern = "NL16",
|
||||||
|
.hw_ver = 0x00,
|
||||||
|
.unused = 0x0f,
|
||||||
|
.flags = {0x3f, 0x00},
|
||||||
|
}, {
|
||||||
|
/* Terminating entry */
|
||||||
|
.id = NULL,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
void usage(void) __attribute__ (( __noreturn__ ));
|
void usage(void) __attribute__ (( __noreturn__ ));
|
||||||
|
|
||||||
void usage(void)
|
void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-r #.#] [-{0|1|2|4}] -h\n");
|
fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-B board_id] [-p pattern] [-g] [-b] [-v v#.#.#] [-r #.#] [-{0|1|2|4}] -h\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct board_info *find_board(char *id)
|
||||||
|
{
|
||||||
|
struct board_info *board;
|
||||||
|
|
||||||
|
for (board = boards; board->id != NULL; board++)
|
||||||
|
if (strcasecmp(id, board->id) == 0)
|
||||||
|
return board;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char buf[1024]; /* keep this at 1k or adjust garbage calc below */
|
char buf[1024]; /* keep this at 1k or adjust garbage calc below */
|
||||||
|
@ -108,6 +140,8 @@ int main(int argc, char **argv)
|
||||||
char *pattern = CODE_PATTERN;
|
char *pattern = CODE_PATTERN;
|
||||||
char *pbotpat = PBOT_PATTERN;
|
char *pbotpat = PBOT_PATTERN;
|
||||||
char *version = CYBERTAN_VERSION;
|
char *version = CYBERTAN_VERSION;
|
||||||
|
char *board_id = NULL;
|
||||||
|
struct board_info *board = NULL;
|
||||||
int gflag = 0;
|
int gflag = 0;
|
||||||
int pbotflag = 0;
|
int pbotflag = 0;
|
||||||
int c;
|
int c;
|
||||||
|
@ -121,7 +155,7 @@ int main(int argc, char **argv)
|
||||||
hdr = (struct code_header *) buf;
|
hdr = (struct code_header *) buf;
|
||||||
memset(hdr, 0, sizeof(struct code_header));
|
memset(hdr, 0, sizeof(struct code_header));
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "i:o:p:gbv:0124hr:")) != -1) {
|
while ((c = getopt(argc, argv, "i:o:p:gbv:0124hr:B:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'i':
|
case 'i':
|
||||||
ifn = optarg;
|
ifn = optarg;
|
||||||
|
@ -161,6 +195,9 @@ int main(int argc, char **argv)
|
||||||
case 'r':
|
case 'r':
|
||||||
hdr->hw_ver = (char)(atof(optarg)*10)+0x30;
|
hdr->hw_ver = (char)(atof(optarg)*10)+0x30;
|
||||||
break;
|
break;
|
||||||
|
case 'B':
|
||||||
|
board_id = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
default:
|
||||||
|
@ -173,6 +210,19 @@ int main(int argc, char **argv)
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (board_id) {
|
||||||
|
board = find_board(board_id);
|
||||||
|
if (board == NULL) {
|
||||||
|
fprintf(stderr, "unknown board \"%s\"\n", board_id);
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
pattern = board->pattern;
|
||||||
|
hdr->hw_ver = board->hw_ver;
|
||||||
|
hdr->unused = board->unused;
|
||||||
|
hdr->flags[0] = board->flags[0];
|
||||||
|
hdr->flags[1] = board->flags[1];
|
||||||
|
}
|
||||||
|
|
||||||
if (strlen(pattern) != 4) {
|
if (strlen(pattern) != 4) {
|
||||||
fprintf(stderr, "illegal pattern \"%s\": length != 4\n", pattern);
|
fprintf(stderr, "illegal pattern \"%s\": length != 4\n", pattern);
|
||||||
usage();
|
usage();
|
||||||
|
@ -239,7 +289,7 @@ int main(int argc, char **argv)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ferror(in)) {
|
if (ferror(in)) {
|
||||||
goto FREAD_ERROR;
|
goto FREAD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue