Added COMM_BM_READ_MEM command

This commit is contained in:
Benjamin Vedder 2019-09-17 19:39:11 +02:00
parent eb6f5945ce
commit db6ba047d9
5 changed files with 53 additions and 0 deletions

View File

@ -1,3 +1,6 @@
=== FW 3.62 ===
* Added COMM_BM_MEM_READ.
=== FW 3.61 === === FW 3.61 ===
* Added PPM_CTRL_TYPE_CURRENT_SMART_REV mode. * Added PPM_CTRL_TYPE_CURRENT_SMART_REV mode.

View File

@ -459,6 +459,34 @@ int bm_write_flash(uint32_t addr, const void *data, uint32_t len) {
return ret; return ret;
} }
/**
* Read target memory
*
* @param addr
* Address to read from
*
* @param data
* Store the data here
*
* @param len
* Length of the data
*
* @return
* -2: Read failed
* -1: Not connected
* 1: Success
*/
int bm_mem_read(uint32_t addr, void *data, uint32_t len) {
int ret = -1;
if (cur_target) {
target_print_en = false;
ret = target_mem_read(cur_target, data, addr, len) ? 1 : -2;
}
return ret;
}
/** /**
* Reboot target. * Reboot target.
* *

View File

@ -29,6 +29,7 @@ void bm_set_enabled(bool enabled);
int bm_connect(void); int bm_connect(void);
int bm_erase_flash_all(void); int bm_erase_flash_all(void);
int bm_write_flash(uint32_t addr, const void *data, uint32_t len); int bm_write_flash(uint32_t addr, const void *data, uint32_t len);
int bm_mem_read(uint32_t addr, void *data, uint32_t len);
int bm_reboot(void); int bm_reboot(void);
void bm_disconnect(void); void bm_disconnect(void);
void bm_change_swd_pins(stm32_gpio_t *swdio_port, int swdio_pin, void bm_change_swd_pins(stm32_gpio_t *swdio_port, int swdio_pin,

View File

@ -938,6 +938,7 @@ void commands_process_packet(unsigned char *data, unsigned int len,
case COMM_BM_DISCONNECT: case COMM_BM_DISCONNECT:
case COMM_BM_MAP_PINS_DEFAULT: case COMM_BM_MAP_PINS_DEFAULT:
case COMM_BM_MAP_PINS_NRF5X: case COMM_BM_MAP_PINS_NRF5X:
case COMM_BM_MEM_READ:
if (!is_blocking) { if (!is_blocking) {
memcpy(blocking_thread_cmd_buffer, data - 1, len + 1); memcpy(blocking_thread_cmd_buffer, data - 1, len + 1);
blocking_thread_cmd_len = len; blocking_thread_cmd_len = len;
@ -1454,6 +1455,25 @@ static THD_FUNCTION(blocking_thread, arg) {
} break; } break;
#endif #endif
case COMM_BM_MEM_READ: {
int32_t ind = 0;
uint32_t addr = buffer_get_uint32(data, &ind);
uint16_t read_len = buffer_get_uint16(data, &ind);
if (read_len > sizeof(send_buffer) - 3) {
read_len = sizeof(send_buffer) - 3;
}
int res = bm_mem_read(addr, send_buffer + 3, read_len);
ind = 0;
send_buffer[ind++] = packet_id;
buffer_append_int16(send_buffer, res, &ind);
if (send_func_blocking) {
send_func_blocking(send_buffer, ind);
}
} break;
default: default:
break; break;
} }

View File

@ -660,6 +660,7 @@ typedef enum {
COMM_PLOT_DATA, COMM_PLOT_DATA,
COMM_PLOT_ADD_GRAPH, COMM_PLOT_ADD_GRAPH,
COMM_PLOT_SET_GRAPH, COMM_PLOT_SET_GRAPH,
COMM_BM_MEM_READ,
} COMM_PACKET_ID; } COMM_PACKET_ID;
// CAN commands // CAN commands