//
// WARNING: DO NOT EDIT THIS FILE
//   This file has been generated from the target's JSON hardware description
//

#include "stm32_gpio.h"

static const stm32_adc_input_t _ADC_inputs[] = {
  {
    // LH
    // ADC_INPUT_STICK,
    GPIOA,
    LL_GPIO_PIN_0,
    LL_ADC_CHANNEL_0,
    0 // normal
  },
  {
    // LV
    // ADC_INPUT_STICK,
    GPIOA,
    LL_GPIO_PIN_1,
    LL_ADC_CHANNEL_1,
    1 // inverted
  },
  {
    // RV
    // ADC_INPUT_STICK,
    GPIOA,
    LL_GPIO_PIN_3,
    LL_ADC_CHANNEL_3,
    0 // normal
  },
  {
    // RH
    // ADC_INPUT_STICK,
    GPIOA,
    LL_GPIO_PIN_2,
    LL_ADC_CHANNEL_2,
    1 // inverted
  },
  {
    // P1
    // ADC_INPUT_FLEX,
    GPIOC,
    LL_GPIO_PIN_0,
    LL_ADC_CHANNEL_10,
    0 // normal
  },
  {
    // P2
    // ADC_INPUT_FLEX,
    GPIOC,
    LL_GPIO_PIN_1,
    LL_ADC_CHANNEL_11,
    0 // normal
  },
  {
    // P3
    // ADC_INPUT_FLEX,
    GPIOC,
    LL_GPIO_PIN_2,
    LL_ADC_CHANNEL_12,
    0 // normal
  },
  {
    // SL1
    // ADC_INPUT_FLEX,
    GPIOF,
    LL_GPIO_PIN_6,
    LL_ADC_CHANNEL_4,
    1 // inverted
  },
  {
    // SL2
    // ADC_INPUT_FLEX,
    GPIOC,
    LL_GPIO_PIN_3,
    LL_ADC_CHANNEL_13,
    0 // normal
  },
  {
    // EXT1
    // ADC_INPUT_FLEX,
    GPIOF,
    LL_GPIO_PIN_8,
    LL_ADC_CHANNEL_6,
    0 // normal
  },
  {
    // EXT2
    // ADC_INPUT_FLEX,
    GPIOF,
    LL_GPIO_PIN_9,
    LL_ADC_CHANNEL_7,
    0 // normal
  },
  {
    // EXT3
    // ADC_INPUT_FLEX,
    GPIOA,
    LL_GPIO_PIN_2,
    LL_ADC_CHANNEL_2,
    1 // inverted
  },
  {
    // EXT4
    // ADC_INPUT_FLEX,
    GPIOA,
    LL_GPIO_PIN_3,
    LL_ADC_CHANNEL_3,
    0 // normal
  },
  {
    // VBAT
    // ADC_INPUT_VBAT,
    GPIOF,
    LL_GPIO_PIN_7,
    LL_ADC_CHANNEL_5,
    0 // normal
  },
  {
    // RTC_BAT
    // ADC_INPUT_RTC_BAT,
    nullptr,
    0,
    LL_ADC_CHANNEL_VBAT,
    0 // normal
  },
};

static const uint8_t _ADC_MAIN_channels[] = {
    0, // LH
    1, // LV
    2, // RV
    3, // RH
    4, // P1
    5, // P2
    6, // P3
    7, // SL1
    8, // SL2
    9, // EXT1
    10, // EXT2
    11, // EXT3
    12, // EXT4
    13, // VBAT
};

static const uint8_t _ADC_EXT_channels[] = {
    14, // RTC_BAT
};

static const stm32_adc_t _ADC_adc[] = {
  {
    ADC3,
    DMA2,
    LL_DMA_CHANNEL_2,
    LL_DMA_STREAM_0,
    DMA2_Stream0_IRQn,
    _ADC_MAIN_channels,
    0,
    14,
    LL_ADC_SAMPLINGTIME_56CYCLES
  },
  {
    ADC1,
    nullptr,
    0,
    0,
    (IRQn_Type)-1,
    _ADC_EXT_channels,
    14,
    1,
    LL_ADC_SAMPLINGTIME_56CYCLES
  },
};

static const stm32_spi_adc_t _ADC_spi[] = {
};

extern "C" void DMA2_Stream0_IRQHandler (void)
{
  stm32_hal_adc_dma_isr(&_ADC_adc[0]);
}

extern "C" void ADC_IRQHandler()
{
  stm32_hal_adc_isr(&_ADC_adc[0]);
  stm32_hal_adc_isr(&_ADC_adc[1]);
 
}

#if defined(STM32H7)
extern "C" void ADC3_IRQHandler()
{
  stm32_hal_adc_isr(&_ADC_adc[0]);
  stm32_hal_adc_isr(&_ADC_adc[1]);
 
}
#endif

static const uint32_t _ADC_GPIOA_pins[] = {
    LL_GPIO_PIN_0,
    LL_GPIO_PIN_1,
    LL_GPIO_PIN_3,
    LL_GPIO_PIN_2,
    LL_GPIO_PIN_2,
    LL_GPIO_PIN_3,
};

static const uint32_t _ADC_GPIOC_pins[] = {
    LL_GPIO_PIN_0,
    LL_GPIO_PIN_1,
    LL_GPIO_PIN_2,
    LL_GPIO_PIN_3,
};

static const uint32_t _ADC_GPIOF_pins[] = {
    LL_GPIO_PIN_6,
    LL_GPIO_PIN_8,
    LL_GPIO_PIN_9,
    LL_GPIO_PIN_7,
};

static const stm32_adc_gpio_t _ADC_GPIOs[] = {
  { GPIOA, _ADC_GPIOA_pins, 6 },
  { GPIOC, _ADC_GPIOC_pins, 4 },
  { GPIOF, _ADC_GPIOF_pins, 4 },
};
