]>
git.zerfleddert.de Git - proxmark3-svn/blob - client/flasher.c
1 //-----------------------------------------------------------------------------
2 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 // at your option, any later version. See the LICENSE.txt file for the text of
5 //-----------------------------------------------------------------------------
6 // Flasher frontend tool
7 //-----------------------------------------------------------------------------
13 #include "proxmark3.h"
22 static serial_port sp
;
23 static char* serial_port_name
;
25 void cmd_debug(UsbCommand
* UC
) {
27 printf("UsbCommand length[len=%zd]\n",sizeof(UsbCommand
));
28 printf(" cmd[len=%zd]: %016"llx
"\n",sizeof(UC
->cmd
),UC
->cmd
);
29 printf(" arg0[len=%zd]: %016"llx
"\n",sizeof(UC
->arg
[0]),UC
->arg
[0]);
30 printf(" arg1[len=%zd]: %016"llx
"\n",sizeof(UC
->arg
[1]),UC
->arg
[1]);
31 printf(" arg2[len=%zd]: %016"llx
"\n",sizeof(UC
->arg
[2]),UC
->arg
[2]);
32 printf(" data[len=%zd]: ",sizeof(UC
->d
.asBytes
));
34 for (size_t i
=0; i
<16; i
++)
35 printf("%02x",UC
->d
.asBytes
[i
]);
40 void SendCommand(UsbCommand
* txcmd
) {
43 if (!uart_send(sp
,(byte_t
*)txcmd
,sizeof(UsbCommand
))) {
44 printf("Sending bytes to proxmark failed\n");
49 void ReceiveCommand(UsbCommand
* rxcmd
) {
50 byte_t
* prxcmd
= (byte_t
*)rxcmd
;
54 rxlen
= sizeof(UsbCommand
) - (prx
-prxcmd
);
55 if (uart_receive(sp
,prx
,&rxlen
)) {
57 if ((prx
-prxcmd
) >= sizeof(UsbCommand
)) {
64 void CloseProxmark() {
67 // Fix for linux, it seems that it is extremely slow to release the serial port file descriptor /dev/*
68 unlink(serial_port_name
);
71 int OpenProxmark(size_t i
) {
72 sp
= uart_open(serial_port_name
);
75 if (sp
== INVALID_SERIAL_PORT
|| sp
== CLAIMED_SERIAL_PORT
)
81 static void usage(char *argv0
)
83 fprintf(stderr
, "Usage: %s <port> [-b] image.elf [image.elf...]\n\n", argv0
);
84 fprintf(stderr
, "\t-b\tEnable flashing of bootloader area (DANGEROUS)\n\n");
85 //Is the example below really true? /Martin
86 fprintf(stderr
, "Example:\n\n\t %s path/to/osimage.elf path/to/fpgaimage.elf\n", argv0
);
87 fprintf(stderr
, "\nExample (Linux):\n\n\t %s /dev/ttyACM0 armsrc/obj/fullimage.elf\n", argv0
);
88 fprintf(stderr
, "\nExample (OS) :\n\n\t %s /dev/cu.usbmodem1451 armsrc/obj/fullimage.elf\n", argv0
);
89 fprintf(stderr
, "\nNote (Linux): if the flasher gets stuck in 'Waiting for Proxmark to reappear on <DEVICE>',\n");
90 fprintf(stderr
, " you need to blacklist proxmark for modem-manager - see wiki for more details:\n");
91 fprintf(stderr
, " old ref --> http://code.google.com/p/proxmark3/wiki/Linux\n\n");
92 fprintf(stderr
, " new refs --> ");
93 fprintf(stderr
, " https://github.com/Proxmark/proxmark3/wiki/Gentoo Linux\n\n");
94 fprintf(stderr
, " https://github.com/Proxmark/proxmark3/wiki/Ubuntu Linux\n\n");
95 fprintf(stderr
, " https://github.com/Proxmark/proxmark3/wiki/OSX\n\n");
100 int main(int argc
, char **argv
)
102 int can_write_bl
= 0;
105 flash_file_t files
[MAX_FILES
];
107 memset(files
, 0, sizeof(files
));
114 for (int i
= 2; i
< argc
; i
++) {
115 if (argv
[i
][0] == '-') {
116 if (!strcmp(argv
[i
], "-b")) {
123 res
= flash_load(&files
[num_files
], argv
[i
], can_write_bl
);
125 fprintf(stderr
, "Error while loading %s\n", argv
[i
]);
128 fprintf(stderr
, "\n");
133 serial_port_name
= argv
[1];
135 fprintf(stderr
, "Waiting for Proxmark to appear on %s", serial_port_name
);
138 fprintf(stderr
, ".");
139 } while (!OpenProxmark(0));
141 fprintf(stderr
," Found.\n");
143 res
= flash_start_flashing(can_write_bl
, serial_port_name
);
147 fprintf(stderr
, "\nFlashing...\n");
149 for (int i
= 0; i
< num_files
; i
++) {
150 res
= flash_write(&files
[i
]);
153 flash_free(&files
[i
]);
154 fprintf(stderr
, "\n");
157 fprintf(stderr
, "Resetting hardware...\n");
159 res
= flash_stop_flashing();
165 fprintf(stderr
, "All done.\n\n");
166 fprintf(stderr
, "Have a nice day!\n");