/** * @file rcsignal.h * @brief RC PWM/SBUS signal reading and parsing module */ #ifndef RCSIGNAL_H #define RCSIGNAL_H #include "esp_err.h" #include "config.h" #include #include // SBUS protocol constants (always defined for use in both modes) #define SBUS_NUM_CHANNELS 16 // SBUS supports 16 proportional channels /** * @brief Callback function type for mode changes */ typedef void (*rcsignal_mode_change_callback_t)(); /** * @brief Initialize RC signal reading * @param config Pointer to configuration structure * @return ESP_OK on success */ esp_err_t rcsignal_init(const config_t *config); /** * @brief Deinitialize RC signal reading */ void rcsignal_deinit(void); /** * @brief Register callback for mode changes * @param callback Callback function */ void rcsignal_register_callback(rcsignal_mode_change_callback_t callback); /** * @brief Get current PWM pulse width in microseconds * @return Pulse width in µs (0 if no signal) */ uint32_t rcsignal_get_pulse_width(void); /** * @brief Check if PWM signal is active * @return true if signal detected in last 100ms */ bool rcsignal_is_active(void); /** * @brief Get current mode * @return Current animation mode (0-13) */ uint8_t rcsignal_get_current_mode(void); /** * @brief Get SBUS channel value (only valid in SBUS mode) * @param channel Channel index (0-15) * @return Channel value (172-1811) or 0 if invalid/not in SBUS mode */ uint16_t rcsignal_get_sbus_channel(uint8_t channel); /** * @brief Debug function to print all SBUS channels (only valid in SBUS mode) */ void rcsignal_debug_print_channels(void); #endif // RCSIGNAL_H