#include "esc_backend.h" #include /* Global active backend (selected at runtime or compile-time) */ static const esc_backend_t *g_active_backend = NULL; void esc_backend_register(const esc_backend_t *backend) { g_active_backend = backend; if (backend && backend->init) { backend->init(); } } const esc_backend_t *esc_backend_get(void) { return g_active_backend; } /* High-level convenience wrappers — call through vtable */ void esc_init(void) { if (g_active_backend && g_active_backend->init) { g_active_backend->init(); } } void esc_send(int16_t speed, int16_t steer) { if (g_active_backend && g_active_backend->send) { g_active_backend->send(speed, steer); } } void esc_estop(void) { if (g_active_backend && g_active_backend->estop) { g_active_backend->estop(); } } void esc_resume(void) { if (g_active_backend && g_active_backend->resume) { g_active_backend->resume(); } } void esc_get_telemetry(esc_telemetry_t *out) { if (out) { /* Zero-fill by default */ out->speed = 0; out->steer = 0; out->voltage_mv = 0; out->current_ma = 0; out->temperature_c = 0; out->fault = 0; if (g_active_backend && g_active_backend->get_telemetry) { g_active_backend->get_telemetry(out); } } }