]>
cvs.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= %z d] \n " , sizeof ( UsbCommand
));   28    printf ( "  cmd[len= %z d]:  %0 16" llx
" \n " , sizeof ( UC
-> cmd
), UC
-> cmd
);   29    printf ( " arg0[len= %z d]:  %0 16" llx
" \n " , sizeof ( UC
-> arg
[ 0 ]), UC
-> arg
[ 0 ]);   30    printf ( " arg1[len= %z d]:  %0 16" llx
" \n " , sizeof ( UC
-> arg
[ 1 ]), UC
-> arg
[ 1 ]);   31    printf ( " arg2[len= %z d]:  %0 16" llx
" \n " , sizeof ( UC
-> arg
[ 2 ]), UC
-> arg
[ 2 ]);   32    printf ( " data[len= %z d]: " , sizeof ( UC
-> d
. asBytes
));   33    for  ( size_t  i
= 0 ;  i
< 16 ;  i
++) {   34      printf ( " %0 2x" , UC
-> d
. asBytes
[ i
]);   39  void  SendCommand ( UsbCommand
*  txcmd
) {   42    if  (! uart_send ( sp
,( byte_t
*) txcmd
, sizeof ( UsbCommand
))) {   43      printf ( "Sending bytes to proxmark failed \n " );   48  void  ReceiveCommand ( UsbCommand
*  rxcmd
) {   49    byte_t
*  prxcmd 
= ( byte_t
*) rxcmd
;   53      rxlen 
=  sizeof ( UsbCommand
) - ( prx
- prxcmd
);   54      if  ( uart_receive ( sp
, prx
,& rxlen
)) {   55  //      printf("received [%zd] bytes\n",rxlen);   57        if  (( prx
- prxcmd
) >=  sizeof ( UsbCommand
)) {   58  //        printf("received: ");   66  void  CloseProxmark () {   69    // Fix for linux, it seems that it is extremely slow to release the serial port file descriptor /dev/*   70    unlink ( serial_port_name
);   73  int  OpenProxmark ( size_t  i
) {   74    sp 
=  uart_open ( serial_port_name
);   75    if  ( sp 
==  INVALID_SERIAL_PORT 
||  sp 
==  CLAIMED_SERIAL_PORT
) {   82  static void  usage ( char  * argv0
)   84          fprintf ( stderr
,  "Usage:    %s  <port> [-b] image.elf [image.elf...] \n\n " ,  argv0
);   85          fprintf ( stderr
,  " \t -b \t Enable flashing of bootloader area (DANGEROUS) \n\n " );   86          //Is the example below really true? /Martin   87          fprintf ( stderr
,  "Example: \n\t  %s  path/to/osimage.elf path/to/fpgaimage.elf \n " ,  argv0
);   88          fprintf ( stderr
,  "Example (Linux): \n\t  %s   /dev/ttyACM0 armsrc/obj/fullimage.elf \n " ,  argv0
);   89          fprintf ( stderr
,  " \n Note (Linux): if the flasher gets stuck in 'Waiting for Proxmark to reappear on USB', try deactivating modem-manager: 'sudo service modemmanager stop' \n\n " );   95  int  main ( int  argc
,  char  ** argv
)  100          flash_file_t files
[ MAX_FILES
];  102          memset ( files
,  0 ,  sizeof ( files
));  109          for  ( int  i 
=  2 ;  i 
<  argc
;  i
++) {  110                  if  ( argv
[ i
][ 0 ] ==  '-' ) {  111                          if  (! strcmp ( argv
[ i
],  "-b" )) {  118                          res 
=  flash_load (& files
[ num_files
],  argv
[ i
],  can_write_bl
);  120                                  fprintf ( stderr
,  "Error while loading  %s \n " ,  argv
[ i
]);  123                          fprintf ( stderr
,  " \n " );  128    serial_port_name 
=  argv
[ 1 ];  130    fprintf ( stderr
, "Waiting for Proxmark to appear on USB..." );  133      fprintf ( stderr
,  "." );  134    }  while  (! OpenProxmark ( 0 ));  135    fprintf ( stderr
, " Found. \n " );  137          res 
=  flash_start_flashing ( can_write_bl
);  141          fprintf ( stderr
,  " \n Flashing... \n " );  143          for  ( int  i 
=  0 ;  i 
<  num_files
;  i
++) {  144                  res 
=  flash_write (& files
[ i
]);  147                  flash_free (& files
[ i
]);  148                  fprintf ( stderr
,  " \n " );  151          fprintf ( stderr
,  "Resetting hardware... \n " );  153          res 
=  flash_stop_flashing ();  159          fprintf ( stderr
,  "All done. \n\n " );  160          fprintf ( stderr
,  "Have a nice day! \n " );