#include "esc_backend.h"

/*
 * VESC ESC Backend Stub
 *
 * Placeholder implementation for FSESC 4.20 Plus (VESC-based dual ESC).
 * UART: ttyTHS1 (Jetson Orin) → FC USART6 @ 921600 baud
 * Protocol: pyvesc with CRC16-XModem checksum
 *
 * Issue #383: VESC integration (fills in this stub)
 * Issue #388: ESC abstraction layer (provides this interface)
 *
 * TODO (Issue #383):
 * - Implement vesc_init() with UART/GPIO config
 * - Implement vesc_send() with pyvesc packet encoding (duty/RPM control)
 * - Implement vesc_estop() to disable motor controller
 * - Implement vesc_get_telemetry() to parse VESC state messages
 * - Add balance mode configuration if using VESC balance app
 */

static const esc_backend_t vesc_backend;

/* Stub implementations — no-op until #383 fills them in */

static void vesc_backend_init(void) {
    /* TODO (Issue #383): Initialize UART6, configure VESC balance mode */
}

static void vesc_backend_send(int16_t speed, int16_t steer) {
    /* TODO (Issue #383): Encode speed/steer to pyvesc packet and send via UART6 */
    (void)speed;
    (void)steer;
}

static void vesc_backend_estop(void) {
    /* TODO (Issue #383): Send VESC shutdown command to disable motors */
}

static void vesc_backend_resume(void) {
    /* TODO (Issue #383): Resume from estop if needed */
}

static void vesc_backend_get_telemetry(esc_telemetry_t *out) {
    /* TODO (Issue #383): Poll/parse VESC telemetry (voltage, current, RPM, temp, fault) */
    if (out) {
        out->speed = 0;
        out->steer = 0;
        out->voltage_mv = 0;
        out->current_ma = 0;
        out->temperature_c = 0;
        out->fault = 0;
    }
}

/* VESC backend vtable */
static const esc_backend_t vesc_backend = {
    .init = vesc_backend_init,
    .send = vesc_backend_send,
    .estop = vesc_backend_estop,
    .resume = vesc_backend_resume,
    .get_telemetry = vesc_backend_get_telemetry,
};

/*
 * Public function to register VESC backend.
 * Called from main.c when configured with ESC_BACKEND=VESC.
 */
void vesc_backend_register_impl(void) {
    esc_backend_register(&vesc_backend);
}
