mirror of https://github.com/rusefi/bldc.git
blackmagic: Add cmd to write to target memory.
This commit is contained in:
parent
0109693e37
commit
add855f6e6
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
@ -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);
|
||||||
|
|
15
commands.c
15
commands.c
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue