Sound Byte Libs 1ee2ca6
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 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::core::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_delay_ms< T, typename >
 Timer Driver Method Detection. More...
 
struct  sbl::validation::has_timer_delay_ms< T, std::void_t< decltype(T::delay_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_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_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< 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::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::core::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...
 

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.