1 #ifndef STLINK_TOOLS_FLASH_H_
2 #define STLINK_TOOLS_FLASH_H_
3 
4 #include <stdint.h>
5 
6 #include <stlink.h>
7 
8 #define DEBUG_LOG_LEVEL 100
9 #define STND_LOG_LEVEL  50
10 #define ENABLE_OPT      1
11 
12 enum flash_cmd {FLASH_CMD_NONE = 0, FLASH_CMD_WRITE = 1, FLASH_CMD_READ = 2, FLASH_CMD_ERASE = 3, CMD_RESET = 4};
13 enum flash_format {FLASH_FORMAT_BINARY = 0, FLASH_FORMAT_IHEX = 1};
14 enum flash_area {FLASH_MAIN_MEMORY = 0, FLASH_SYSTEM_MEMORY = 1, FLASH_OTP = 2, FLASH_OPTION_BYTES = 3, FLASH_OPTION_BYTES_BOOT_ADD = 4, FLASH_OPTCR = 5, FLASH_OPTCR1 = 6};
15 struct flash_opts {
16     enum flash_cmd cmd;
17     uint8_t serial[STLINK_SERIAL_BUFFER_SIZE];
18     const char* filename;
19     stm32_addr_t addr;
20     size_t size;
21     int reset;
22     int log_level;
23     enum flash_format format;
24     enum flash_area area;
25     uint32_t val;
26     size_t flash_size;  // --flash=n[k][m]
27     int opt;            // enable empty tail data drop optimization
28     int freq;           // --freq=n[k][m] frequency of JTAG/SWD
29     enum connect_type connect;
30 };
31 
32 #define FLASH_OPTS_INITIALIZER {0, { 0 }, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
33 
34 int flash_get_opts(struct flash_opts* o, int ac, char** av);
35 
36 #endif // STLINK_FLASH_H_
37