blackmagic: Add cmd to write to target memory.

This commit is contained in:
Johan Svard 2021-10-01 15:54:21 +02:00
parent 0109693e37
commit add855f6e6
4 changed files with 46 additions and 0 deletions

View File

@ -528,6 +528,34 @@ int bm_write_flash(uint32_t addr, const void *data, uint32_t len) {
return ret; return ret;
} }
/**
* Write target memory.
*
* @param addr
* Address to write to
*
* @param data
* The data to write
*
* @param len
* Length of the data
*
* @return
* -2: Write failed
* -1: Not connected
* 1: Success
*/
int bm_mem_write(uint32_t addr, const void *data, uint32_t len) {
int ret = -1;
if (cur_target) {
target_print_en = false;
ret = target_mem_write(cur_target, addr, data, len) ? -2 : 1;
}
return ret;
}
/** /**
* Read target memory * Read target memory
* *

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_write(uint32_t addr, const void *data, uint32_t len);
int bm_mem_read(uint32_t addr, 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_halt_req(void); void bm_halt_req(void);

View File

@ -1504,6 +1504,7 @@ void commands_process_packet(unsigned char *data, unsigned int len,
case COMM_BM_MAP_PINS_NRF5X: case COMM_BM_MAP_PINS_NRF5X:
case COMM_BM_MEM_READ: case COMM_BM_MEM_READ:
case COMM_GET_IMU_CALIBRATION: case COMM_GET_IMU_CALIBRATION:
case COMM_BM_MEM_WRITE:
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 + 1; blocking_thread_cmd_len = len + 1;
@ -2197,6 +2198,20 @@ static THD_FUNCTION(blocking_thread, arg) {
send_func_blocking(send_buffer, ind + read_len); send_func_blocking(send_buffer, ind + read_len);
} }
} break; } break;
case COMM_BM_MEM_WRITE: {
int32_t ind = 0;
uint32_t addr = buffer_get_uint32(data, &ind);
int res = bm_mem_write(addr, data + ind, len - ind);
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;
#endif #endif
case COMM_GET_IMU_CALIBRATION: { case COMM_GET_IMU_CALIBRATION: {
int32_t ind = 0; int32_t ind = 0;

View File

@ -1045,6 +1045,8 @@ typedef enum {
COMM_IO_BOARD_GET_ALL, COMM_IO_BOARD_GET_ALL,
COMM_IO_BOARD_SET_PWM, COMM_IO_BOARD_SET_PWM,
COMM_IO_BOARD_SET_DIGITAL, COMM_IO_BOARD_SET_DIGITAL,
COMM_BM_MEM_WRITE,
} COMM_PACKET_ID; } COMM_PACKET_ID;
// CAN commands // CAN commands