mirror of https://github.com/rusefi/hex2dfu.git
new feature
New feature -J output summary in JSON format. Excellent for easy integration with auto deployment software.
This commit is contained in:
parent
5f4f2be865
commit
eeed78d000
105
hex2dfu.c
105
hex2dfu.c
|
@ -33,6 +33,7 @@ int main (int argc, char **argv) {
|
||||||
int i, c, vid =0x0483, pid = 0xdf11, ver = 0xffff;
|
int i, c, vid =0x0483, pid = 0xdf11, ver = 0xffff;
|
||||||
char *tar0 = NULL, *tar0_lab = NULL, *out_fn = NULL;
|
char *tar0 = NULL, *tar0_lab = NULL, *out_fn = NULL;
|
||||||
FILE *inFile, *outFile;
|
FILE *inFile, *outFile;
|
||||||
|
unsigned char json_output = 0;
|
||||||
|
|
||||||
#ifdef ED25519_SUPPORT
|
#ifdef ED25519_SUPPORT
|
||||||
unsigned char hash_buf[64];
|
unsigned char hash_buf[64];
|
||||||
|
@ -51,8 +52,11 @@ int main (int argc, char **argv) {
|
||||||
unsigned int crc = 0, tmp, add_crc32 = 0;
|
unsigned int crc = 0, tmp, add_crc32 = 0;
|
||||||
|
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
while ((c = getopt (argc, argv, "hv:p:d:i:l:o:c:S:P:e")) != -1) {
|
while ((c = getopt (argc, argv, "hv:p:d:i:l:o:c:S:P:eJ")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
case 'J':
|
||||||
|
json_output = 1;
|
||||||
|
break;
|
||||||
case 'i': //target0 input file name
|
case 'i': //target0 input file name
|
||||||
tar0 = optarg;
|
tar0 = optarg;
|
||||||
break;
|
break;
|
||||||
|
@ -146,8 +150,6 @@ int main (int argc, char **argv) {
|
||||||
|
|
||||||
fclose (inFile);
|
fclose (inFile);
|
||||||
if (tar0_buf && (tar0_len > 0)) {
|
if (tar0_buf && (tar0_len > 0)) {
|
||||||
printf("Data Start Address: 0x%08x\r\n", tar0_start_address);
|
|
||||||
printf("Data Length: %ub\r\n", tar0_len);
|
|
||||||
if ((add_crc32>0) && (add_crc32 < (tar0_start_address+tar0_len-256))) { //-c request CRC32 placement at given address
|
if ((add_crc32>0) && (add_crc32 < (tar0_start_address+tar0_len-256))) { //-c request CRC32 placement at given address
|
||||||
add_crc32 -= tar0_start_address;
|
add_crc32 -= tar0_start_address;
|
||||||
tar0_buf[add_crc32 + 4] = tar0_len>>0 & 0xFF; //binary code length first(little endian)
|
tar0_buf[add_crc32 + 4] = tar0_len>>0 & 0xFF; //binary code length first(little endian)
|
||||||
|
@ -160,35 +162,13 @@ int main (int argc, char **argv) {
|
||||||
sha512_update(&hash, tar0_buf, add_crc32);
|
sha512_update(&hash, tar0_buf, add_crc32);
|
||||||
sha512_update(&hash, tar0_buf+add_crc32+256, tar0_len-(add_crc32+256));
|
sha512_update(&hash, tar0_buf+add_crc32+256, tar0_len-(add_crc32+256));
|
||||||
sha512_final(&hash, hash_buf);
|
sha512_final(&hash, hash_buf);
|
||||||
printf("SHA512: ");
|
|
||||||
for(c=0; c<64; c++) {
|
|
||||||
printf("%02x", (unsigned char)hash_buf[c]);
|
|
||||||
}
|
|
||||||
printf("\r\n");
|
|
||||||
|
|
||||||
ed25519_sign(signature, hash_buf, 64, public_key, private_key);
|
ed25519_sign(signature, hash_buf, 64, public_key, private_key);
|
||||||
memmove(tar0_buf+add_crc32+0x10, signature, 64);
|
memmove(tar0_buf+add_crc32+0x10, signature, 64);
|
||||||
memmove(tar0_buf+add_crc32+0x10+64, public_key, 32);
|
memmove(tar0_buf+add_crc32+0x10+64, public_key, 32);
|
||||||
|
|
||||||
printf("Signing PublicKey: ");
|
|
||||||
for(c=0; c<32; c++) {
|
|
||||||
printf("%02x", (unsigned char)public_key[c]);
|
|
||||||
}
|
|
||||||
printf("\r\n");
|
|
||||||
|
|
||||||
printf("Signature: ");
|
|
||||||
for(c=0; c<64; c++) {
|
|
||||||
printf("%02x", (unsigned char)signature[c]);
|
|
||||||
}
|
|
||||||
printf("\r\n");
|
|
||||||
|
|
||||||
if (ed25519_public_add) {
|
if (ed25519_public_add) {
|
||||||
memmove(tar0_buf+add_crc32+0x10+64+32, public_key_publisher, 32);
|
memmove(tar0_buf+add_crc32+0x10+64+32, public_key_publisher, 32);
|
||||||
printf("Publisher PublicKey: ");
|
|
||||||
for(c=0; c<32; c++) {
|
|
||||||
printf("%02x", (unsigned char)public_key_publisher[c]);
|
|
||||||
}
|
|
||||||
printf("\r\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -198,7 +178,6 @@ int main (int argc, char **argv) {
|
||||||
tar0_buf[add_crc32 + 1] = crc>>8 & 0xFF;
|
tar0_buf[add_crc32 + 1] = crc>>8 & 0xFF;
|
||||||
tar0_buf[add_crc32 + 2] = crc>>16 & 0xFF;
|
tar0_buf[add_crc32 + 2] = crc>>16 & 0xFF;
|
||||||
tar0_buf[add_crc32 + 3] = crc>>24 & 0xFF;
|
tar0_buf[add_crc32 + 3] = crc>>24 & 0xFF;
|
||||||
printf("Additional CRC32 data: 0x%08x:0x%08x\r\n",add_crc32+tar0_start_address ,crc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dfu_len = 11 + 274 + 8+ tar0_len + 16;
|
dfu_len = 11 + 274 + 8+ tar0_len + 16;
|
||||||
|
@ -275,7 +254,74 @@ int main (int argc, char **argv) {
|
||||||
if (c != 1) {
|
if (c != 1) {
|
||||||
printf ("error: write to output file\n");
|
printf ("error: write to output file\n");
|
||||||
}
|
}
|
||||||
printf("Done.\r\n");
|
if (json_output) {
|
||||||
|
printf("{\"code_address\":\"0x%08x\"", tar0_start_address);
|
||||||
|
printf(",\"code_length\":\"0x%08x\"", tar0_len);
|
||||||
|
printf(",\"meta_address\":\"0x%08x\"", add_crc32+tar0_start_address);
|
||||||
|
if (ed25519_secret) {
|
||||||
|
printf(",\"sha512\":\"");
|
||||||
|
for(c=0; c<64; c++) {
|
||||||
|
printf("%02x", (unsigned char)hash_buf[c]);
|
||||||
|
}
|
||||||
|
printf("\"");
|
||||||
|
|
||||||
|
printf(",\"signature_pubkey\":\"");
|
||||||
|
for(c=0; c<32; c++) {
|
||||||
|
printf("%02x", (unsigned char)public_key[c]);
|
||||||
|
}
|
||||||
|
printf("\"");
|
||||||
|
|
||||||
|
printf(",\"signature\":\"");
|
||||||
|
for(c=0; c<64; c++) {
|
||||||
|
printf("%02x", (unsigned char)signature[c]);
|
||||||
|
}
|
||||||
|
printf("\"");
|
||||||
|
|
||||||
|
if (ed25519_public_add) {
|
||||||
|
printf(",\"publisher_pubkey\":\"");
|
||||||
|
for(c=0; c<32; c++) {
|
||||||
|
printf("%02x", (unsigned char)public_key_publisher[c]);
|
||||||
|
}
|
||||||
|
printf("\"");
|
||||||
|
}
|
||||||
|
printf(",\"crc32\":\"0x%08x\"", crc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf("}\r\n");
|
||||||
|
} else {
|
||||||
|
printf("Data Start Address: 0x%08x\r\n", tar0_start_address);
|
||||||
|
printf("Data Length: %ub\r\n", tar0_len);
|
||||||
|
if (ed25519_secret) {
|
||||||
|
printf("SHA512: ");
|
||||||
|
for(c=0; c<64; c++) {
|
||||||
|
printf("%02x", (unsigned char)hash_buf[c]);
|
||||||
|
}
|
||||||
|
printf("\r\n");
|
||||||
|
|
||||||
|
printf("Signing PublicKey: ");
|
||||||
|
for(c=0; c<32; c++) {
|
||||||
|
printf("%02x", (unsigned char)public_key[c]);
|
||||||
|
}
|
||||||
|
printf("\r\n");
|
||||||
|
|
||||||
|
printf("Signature: ");
|
||||||
|
for(c=0; c<64; c++) {
|
||||||
|
printf("%02x", (unsigned char)signature[c]);
|
||||||
|
}
|
||||||
|
printf("\r\n");
|
||||||
|
|
||||||
|
if (ed25519_public_add) {
|
||||||
|
printf("Publisher PublicKey: ");
|
||||||
|
for(c=0; c<32; c++) {
|
||||||
|
printf("%02x", (unsigned char)public_key_publisher[c]);
|
||||||
|
}
|
||||||
|
printf("\r\n");
|
||||||
|
}
|
||||||
|
printf("CRC32 data: 0x%08x @0x%08x\r\n", crc, add_crc32+tar0_start_address);
|
||||||
|
}
|
||||||
|
printf("Done.\r\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printf ("error: processing input file\n");
|
printf ("error: processing input file\n");
|
||||||
|
@ -285,9 +331,10 @@ int main (int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_help(void) {
|
void print_help(void) {
|
||||||
printf("STM32 hex2dfu version 1.2\r\n");
|
printf("STM32 hex2dfu version 1.3\r\n");
|
||||||
printf("(c) Encedo Ltd 2013-2015\r\n");
|
printf("(c) Encedo Ltd 2013-2015\r\n");
|
||||||
printf("Options:\r\n");
|
printf("Options:\r\n");
|
||||||
|
printf("-J - output in JSON structure except errors (optional)\r\n");
|
||||||
printf("-c - place CRC23 under this addres (optional)\r\n");
|
printf("-c - place CRC23 under this addres (optional)\r\n");
|
||||||
printf("-d - file version number (optional, default: 0xFFFF)\r\n");
|
printf("-d - file version number (optional, default: 0xFFFF)\r\n");
|
||||||
printf("-h - help\r\n");
|
printf("-h - help\r\n");
|
||||||
|
|
Loading…
Reference in New Issue