#include "bmp_remote.h"
#include "protocol_v0_defs.h"
#include "protocol_v0_swd.h"
uint32_t remote_v0_swd_seq_in(size_t clock_cycles)
{
char buffer[REMOTE_MAX_MSG_SIZE];
int length = sprintf(buffer, REMOTE_SWD_IN_STR, clock_cycles);
platform_buffer_write(buffer, length);
length = platform_buffer_read(buffer, REMOTE_MAX_MSG_SIZE);
if (length < 2 || buffer[0] == REMOTE_RESP_ERR) {
DEBUG_ERROR("%s failed, error %s\n", __func__, length ? buffer + 1 : "short response");
exit(-1);
}
const uint32_t result = remote_hex_string_to_num(-1, buffer + 1);
DEBUG_PROBE("%s %zu clock_cycles: %08" PRIx32 "\n", __func__, clock_cycles, result);
return result;
}
bool remote_v0_swd_seq_in_parity(uint32_t *result, size_t clock_cycles)
{
char buffer[REMOTE_MAX_MSG_SIZE];
int length = sprintf(buffer, REMOTE_SWD_IN_PAR_STR, clock_cycles);
platform_buffer_write(buffer, length);
length = platform_buffer_read(buffer, REMOTE_MAX_MSG_SIZE);
if (length < 2 || buffer[0] == REMOTE_RESP_ERR) {
DEBUG_ERROR("%s failed, error %s\n", __func__, length ? buffer + 1 : "short response");
exit(-1);
}
*result = remote_hex_string_to_num(-1, buffer + 1);
DEBUG_PROBE("%s %zu clock_cycles: %08" PRIx32 " %s\n", __func__, clock_cycles, *result,
buffer[0] != REMOTE_RESP_OK ? "ERR" : "OK");
return buffer[0] != REMOTE_RESP_OK;
}
void remote_v0_swd_seq_out(uint32_t value, size_t clock_cycles)
{
char buffer[REMOTE_MAX_MSG_SIZE];
DEBUG_PROBE("%s %zu clock_cycles: %08" PRIx32 "\n", __func__, clock_cycles, value);
int length = sprintf(buffer, REMOTE_SWD_OUT_STR, clock_cycles, value);
platform_buffer_write(buffer, length);
length = platform_buffer_read(buffer, REMOTE_MAX_MSG_SIZE);
if (length < 1 || buffer[0] == REMOTE_RESP_ERR) {
DEBUG_ERROR("%s failed, error %s\n", __func__, length ? buffer + 1 : "short response");
exit(-1);
}
}
void remote_v0_swd_seq_out_parity(uint32_t value, size_t clock_cycles)
{
char buffer[REMOTE_MAX_MSG_SIZE];
DEBUG_PROBE("%s %zu clock_cycles: %08" PRIx32 "\n", __func__, clock_cycles, value);
int length = sprintf(buffer, REMOTE_SWD_OUT_PAR_STR, clock_cycles, value);
platform_buffer_write(buffer, length);
length = platform_buffer_read(buffer, REMOTE_MAX_MSG_SIZE);
if (length < 1 || buffer[1] == REMOTE_RESP_ERR) {
DEBUG_ERROR("%s failed, error %s\n", __func__, length ? buffer + 2 : "short response");
exit(-1);
}
}