Sound Byte Libs 29c5ff3
C++ firmware library for audio applications on 32-bit ARM Cortex-M processors
Loading...
Searching...
No Matches
Classes | Namespaces
method_detection.hpp File Reference

Method and interface detection for driver validation. More...

#include <type_traits>
#include <cstdint>
#include <cstddef>
#include <sbl/hal/gpio/handle.hpp>
#include <sbl/hal/gpio/types.hpp>
#include <sbl/hal/adc/handle.hpp>
#include <sbl/hal/adc/types.hpp>
#include <sbl/hal/uart/handle.hpp>
#include <sbl/hal/audio/types.hpp>
Include dependency graph for method_detection.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  sbl::validation::has_gpio_set_mode< T, typename >
 GPIO Driver Method Detection (Handle-First API) More...
 
struct  sbl::validation::has_gpio_set_mode< T, std::void_t< decltype(T::set_mode(std::declval< const sbl::GpioHandle & >(), std::declval< sbl::hal::gpio::PinMode >()))> >
 
struct  sbl::validation::has_gpio_write< T, typename >
 
struct  sbl::validation::has_gpio_write< T, std::void_t< decltype(T::write(std::declval< const sbl::GpioHandle & >(), std::declval< bool >()))> >
 
struct  sbl::validation::has_gpio_read< T, typename >
 
struct  sbl::validation::has_gpio_read< T, std::void_t< decltype(T::read(std::declval< const sbl::GpioHandle & >()))> >
 
struct  sbl::validation::has_gpio_toggle< T, typename >
 
struct  sbl::validation::has_gpio_toggle< T, std::void_t< decltype(T::toggle(std::declval< const sbl::GpioHandle & >()))> >
 
struct  sbl::validation::gpio_driver_interface_complete< GpioDriver >
 Combined GPIO driver interface check. More...
 
struct  sbl::validation::has_timer_busy_wait_ms< T, typename >
 Timer Driver Method Detection. More...
 
struct  sbl::validation::has_timer_busy_wait_ms< T, std::void_t< decltype(T::busy_wait_ms(std::declval< uint32_t >()))> >
 
struct  sbl::validation::has_timer_millis< T, typename >
 
struct  sbl::validation::has_timer_millis< T, std::void_t< decltype(T::millis())> >
 
struct  sbl::validation::has_timer_micros< T, typename >
 
struct  sbl::validation::has_timer_micros< T, std::void_t< decltype(T::micros())> >
 
struct  sbl::validation::has_timer_init< T, typename >
 
struct  sbl::validation::has_timer_init< T, std::void_t< decltype(T::init(std::declval< uint32_t >()))> >
 
struct  sbl::validation::timer_micros_returns_uint32< T, typename >
 
struct  sbl::validation::timer_micros_returns_uint32< T, std::enable_if_t< std::is_same_v< decltype(T::micros()), uint32_t > > >
 
struct  sbl::validation::timer_driver_interface_complete< TimerDriver >
 Combined Timer driver interface check. More...
 
struct  sbl::validation::has_uart_init< T, typename >
 UART Driver Method Detection. More...
 
struct  sbl::validation::has_uart_init< T, std::void_t< decltype(T::init(std::declval< const sbl::UartHandle & >()))> >
 
struct  sbl::validation::has_uart_init_rx< T, typename >
 
struct  sbl::validation::has_uart_init_rx< T, std::void_t< decltype(T::init_rx(std::declval< const sbl::UartHandle & >()))> >
 
struct  sbl::validation::has_uart_write_byte< T, typename >
 
struct  sbl::validation::has_uart_write_byte< T, std::void_t< decltype(T::write_byte(std::declval< uint8_t >()))> >
 
struct  sbl::validation::has_uart_write_string< T, typename >
 
struct  sbl::validation::has_uart_write_string< T, std::void_t< decltype(T::write_string(std::declval< const char * >()))> >
 
struct  sbl::validation::has_uart_available< T, typename >
 
struct  sbl::validation::has_uart_available< T, std::void_t< decltype(T::available())> >
 
struct  sbl::validation::has_uart_read_byte< T, typename >
 
struct  sbl::validation::has_uart_read_byte< T, std::void_t< decltype(T::read_byte())> >
 
struct  sbl::validation::has_uart_try_write_byte< T, typename >
 
struct  sbl::validation::has_uart_try_write_byte< T, std::void_t< decltype(T::try_write_byte(std::declval< uint8_t >()))> >
 
struct  sbl::validation::has_uart_try_write_string< T, typename >
 
struct  sbl::validation::has_uart_try_write_string< T, std::void_t< decltype(T::try_write_string(std::declval< const char * >()))> >
 
struct  sbl::validation::uart_available_returns_bool< T, typename >
 
struct  sbl::validation::uart_available_returns_bool< T, std::enable_if_t< std::is_same_v< decltype(T::available()), bool > > >
 
struct  sbl::validation::uart_read_byte_returns_uint8< T, typename >
 
struct  sbl::validation::uart_read_byte_returns_uint8< T, std::enable_if_t< std::is_same_v< decltype(T::read_byte()), uint8_t > > >
 
struct  sbl::validation::uart_try_write_byte_returns_bool< T, typename >
 
struct  sbl::validation::uart_try_write_byte_returns_bool< T, std::enable_if_t< std::is_same_v< decltype(T::try_write_byte(std::declval< uint8_t >())), bool > > >
 
struct  sbl::validation::has_uart_write< T, typename >
 
struct  sbl::validation::has_uart_write< T, std::void_t< decltype(T::write(std::declval< const uint8_t * >(), std::declval< std::size_t >()))> >
 
struct  sbl::validation::uart_driver_interface_complete< UartDriver >
 Combined UART driver interface check. More...
 
struct  sbl::validation::has_adc_init< T, typename >
 ADC Driver Method Detection. More...
 
struct  sbl::validation::has_adc_init< T, std::void_t< decltype(T::init())> >
 
struct  sbl::validation::has_adc_configure_channel< T, typename >
 
struct  sbl::validation::has_adc_configure_channel< T, std::void_t< decltype(T::configure_channel(std::declval< const sbl::AdcHandle & >(), std::declval< sbl::hal::adc::SampleTime >()))> >
 
struct  sbl::validation::has_adc_start_conversion< T, typename >
 
struct  sbl::validation::has_adc_start_conversion< T, std::void_t< decltype(T::start_conversion(std::declval< const sbl::AdcHandle & >()))> >
 
struct  sbl::validation::has_adc_is_conversion_complete< T, typename >
 
struct  sbl::validation::has_adc_is_conversion_complete< T, std::void_t< decltype(T::is_conversion_complete())> >
 
struct  sbl::validation::has_adc_read_raw< T, typename >
 
struct  sbl::validation::has_adc_read_raw< T, std::void_t< decltype(T::read_raw())> >
 
struct  sbl::validation::has_adc_resolution_bits< T, typename >
 
struct  sbl::validation::has_adc_resolution_bits< T, std::void_t< decltype(T::resolution_bits())> >
 
struct  sbl::validation::adc_driver_interface_complete< AdcDriver >
 Combined ADC driver interface check. More...
 
struct  sbl::validation::has_adc_start_dma_scan< T, typename >
 
struct  sbl::validation::has_adc_start_dma_scan< T, std::void_t< decltype(T::start_dma_scan(std::declval< const sbl::AdcHandle * >(), std::declval< uint8_t >(), std::declval< uint16_t * >(), std::declval< sbl::hal::adc::SampleTime >()))> >
 
struct  sbl::validation::has_adc_stop_dma_scan< T, typename >
 
struct  sbl::validation::has_adc_stop_dma_scan< T, std::void_t< decltype(T::stop_dma_scan())> >
 
struct  sbl::validation::has_audio_init< T, typename >
 Audio Driver Method Detection. More...
 
struct  sbl::validation::has_audio_init< T, std::void_t< decltype(T::init())> >
 
struct  sbl::validation::has_audio_init_config< T, typename >
 
struct  sbl::validation::has_audio_init_config< T, std::void_t< decltype(T::init(std::declval< const sbl::hal::audio::AudioConfig & >()))> >
 
struct  sbl::validation::has_audio_set_callback< T, typename >
 
struct  sbl::validation::has_audio_set_callback< T, std::void_t< decltype(T::set_callback(std::declval< sbl::hal::audio::AudioCallback >()))> >
 
struct  sbl::validation::has_audio_start< T, typename >
 
struct  sbl::validation::has_audio_start< T, std::void_t< decltype(T::start())> >
 
struct  sbl::validation::has_audio_stop< T, typename >
 
struct  sbl::validation::has_audio_stop< T, std::void_t< decltype(T::stop())> >
 
struct  sbl::validation::audio_driver_interface_complete< AudioDriver >
 Combined Audio driver interface check. More...
 

Namespaces

namespace  sbl
 Root namespace for all Sound Byte Libs functionality.
 
namespace  sbl::validation
 Compile-time validation infrastructure.
 

Detailed Description

Method and interface detection for driver validation.

Uses C++17 SFINAE (Substitution Failure Is Not An Error) to detect what methods drivers provide at compile-time. This enables comprehensive driver contract validation with clear error messages.

SFINAE Pattern

All detection uses the consistent std::void_t pattern:

template<typename T, typename = void>
struct has_method : std::false_type {};
template<typename T>
struct has_method<T, std::void_t<decltype(T::method(...))>>
: std::true_type {};
See also
gpio_requirements.hpp

Definition in file method_detection.hpp.