FreeCalypso > hg > freecalypso-tools
annotate loadtools/sertool.c @ 613:ab4021fb1c66
doc/Loadtools-performance: flash programming added
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 24 Feb 2020 22:30:00 +0000 | 
| parents | cef70d53fc5e | 
| children | ecea01f65146 | 
| rev | line source | 
|---|---|
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * This module contains the main() function for fc-iram, previously | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * called fc-sertool: the simplest of the FreeCalypso loading tools, | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 * which sends the user-specified IRAM SREC image to the boot ROM | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 * and then switches into serial tty pass-through. | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 */ | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <sys/types.h> | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include <stdint.h> | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 #include <stdio.h> | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 #include <stdlib.h> | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 #include <unistd.h> | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 #include "srecreader.h" | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 | 
| 250 
8c011177adb9
loadtools reworked to use factored-out libserial
 Mychaela Falconia <falcon@freecalypso.org> parents: 
204diff
changeset | 15 char *target_ttydev; | 
| 
8c011177adb9
loadtools reworked to use factored-out libserial
 Mychaela Falconia <falcon@freecalypso.org> parents: 
204diff
changeset | 16 | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 extern struct srecreader iramimage; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 | 
| 204 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 19 char **passon_argv; | 
| 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 20 int passon_argc; | 
| 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 21 | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 main(argc, argv) | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 char **argv; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 { | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 extern char *optarg; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 extern int optind; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 int c; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 | 
| 575 
cef70d53fc5e
loadtools: new -P boot control mechanism implemented
 Mychaela Falconia <falcon@freecalypso.org> parents: 
574diff
changeset | 29 while ((c = getopt(argc, argv, "b:c:C:h:H:i:P:")) != EOF) | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 switch (c) { | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 case 'b': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 set_romload_baudrate(optarg); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 continue; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 case 'c': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 set_compalstage_short(optarg); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 continue; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 case 'C': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 set_compalstage_fullpath(optarg); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 continue; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 case 'h': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 read_hwparam_file_shortname(optarg); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 continue; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 case 'H': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 read_hwparam_file_fullpath(optarg); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 continue; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 case 'i': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 set_beacon_interval(optarg); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 continue; | 
| 575 
cef70d53fc5e
loadtools: new -P boot control mechanism implemented
 Mychaela Falconia <falcon@freecalypso.org> parents: 
574diff
changeset | 49 case 'P': | 
| 
cef70d53fc5e
loadtools: new -P boot control mechanism implemented
 Mychaela Falconia <falcon@freecalypso.org> parents: 
574diff
changeset | 50 if (find_bootctrl_entry(optarg) < 0) | 
| 
cef70d53fc5e
loadtools: new -P boot control mechanism implemented
 Mychaela Falconia <falcon@freecalypso.org> parents: 
574diff
changeset | 51 exit(1); /* error msg already printed */ | 
| 
cef70d53fc5e
loadtools: new -P boot control mechanism implemented
 Mychaela Falconia <falcon@freecalypso.org> parents: 
574diff
changeset | 52 continue; | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 case '?': | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 default: | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 usage: fprintf(stderr, | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 "usage: fc-iram [options] ttyport iramimage.srec\n"); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 exit(1); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 } | 
| 204 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 59 if (argc - optind < 2) | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 goto usage; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 target_ttydev = argv[optind]; | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 iramimage.filename = argv[optind+1]; | 
| 204 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 63 if (argc - optind >= 3) { | 
| 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 64 passon_argv = argv + optind + 2; | 
| 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 65 passon_argc = argc - optind - 2; | 
| 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 66 } | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 | 
| 250 
8c011177adb9
loadtools reworked to use factored-out libserial
 Mychaela Falconia <falcon@freecalypso.org> parents: 
204diff
changeset | 68 open_serial_port(target_ttydev); | 
| 575 
cef70d53fc5e
loadtools: new -P boot control mechanism implemented
 Mychaela Falconia <falcon@freecalypso.org> parents: 
574diff
changeset | 69 pwon_if_needed(); | 
| 250 
8c011177adb9
loadtools reworked to use factored-out libserial
 Mychaela Falconia <falcon@freecalypso.org> parents: 
204diff
changeset | 70 perform_compal_stage(); | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 perform_romload(); | 
| 204 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 72 if (passon_argv) | 
| 
064d4eedb3a6
loadtools: second program invokation support added to fc-iram like in fc-xram
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 73 exec_2nd_prog(); | 
| 0 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 tty_passthru(); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 exit(0); | 
| 
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 } | 
