6adb63b915
date: 2026-06-04T09:49:56 master commit: c0ab3550eca2e9daf197c46b7e4b24aa9637cf2e
86 lines
2.1 KiB
C
86 lines
2.1 KiB
C
void comms_endpoint2_write(const uint8_t *data, uint32_t len) {
|
|
UNUSED(data);
|
|
UNUSED(len);
|
|
}
|
|
|
|
int comms_control_handler(ControlPacket_t *req, uint8_t *resp) {
|
|
unsigned int resp_len = 0;
|
|
|
|
switch (req->request) {
|
|
// **** 0xc1: get hardware type
|
|
case 0xc1:
|
|
resp[0] = hw_type;
|
|
resp_len = 1;
|
|
break;
|
|
|
|
// **** 0xd1: enter bootloader mode
|
|
case 0xd1:
|
|
switch (req->param1) {
|
|
case 0:
|
|
print("-> entering bootloader\n");
|
|
enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
|
|
NVIC_SystemReset();
|
|
break;
|
|
case 1:
|
|
print("-> entering softloader\n");
|
|
enter_bootloader_mode = ENTER_SOFTLOADER_MAGIC;
|
|
NVIC_SystemReset();
|
|
break;
|
|
default:
|
|
print("Bootloader mode invalid\n");
|
|
break;
|
|
}
|
|
break;
|
|
|
|
// **** 0xd3/0xd4: signature bytes
|
|
case 0xd3:
|
|
case 0xd4: {
|
|
uint8_t offset = (req->request == 0xd3) ? 0U : 64U;
|
|
resp_len = 64U;
|
|
char *code = (char *)_app_start;
|
|
int code_len = _app_start[0];
|
|
(void)memcpy(resp, &code[code_len + offset], resp_len);
|
|
break;
|
|
}
|
|
|
|
// **** 0xd6: get version
|
|
case 0xd6:
|
|
(void)memcpy(resp, gitversion, sizeof(gitversion));
|
|
resp_len = sizeof(gitversion) - 1U;
|
|
break;
|
|
|
|
// **** 0xd8: reset ST
|
|
case 0xd8:
|
|
NVIC_SystemReset();
|
|
break;
|
|
|
|
// **** 0xdd: get healthpacket and CANPacket version hashes
|
|
case 0xdd: {
|
|
uint32_t versions[2] = {HEALTH_PACKET_VERSION, CAN_PACKET_VERSION_HASH};
|
|
(void)memcpy(resp, (uint8_t *)versions, sizeof(versions));
|
|
resp_len = sizeof(versions);
|
|
break;
|
|
}
|
|
|
|
// **** 0xb3: set motor speeds
|
|
case 0xb3:
|
|
rpm_left = (int16_t)req->param1;
|
|
rpm_right = (int16_t)req->param2;
|
|
break;
|
|
|
|
// **** 0xb4: enable/disable motors
|
|
case 0xb4:
|
|
enable_motors = (req->param1 == 1U);
|
|
if (enable_motors == 0) {
|
|
rpm_left = 0;
|
|
rpm_right = 0;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// Ignore unhandled requests
|
|
break;
|
|
}
|
|
return resp_len;
|
|
}
|