# Main Kconfig settings

mainmenu "Klipper Firmware Configuration"

config LOW_LEVEL_OPTIONS
    bool "Enable extra low-level configuration options"
    default n
    help
        Enable low-level configuration options that (if modified) may
        result in a build that does not function correctly.

choice
    prompt "Micro-controller Architecture"
    config MACH_AVR
        bool "Atmega AVR"
    config MACH_ATSAM
        bool "SAM3/SAM4 (Due and Duet)"
    config MACH_ATSAMD
        bool "SAMD21/SAMD51"
    config MACH_LPC176X
        bool "LPC176x (Smoothieboard)"
    config MACH_STM32F1
        bool "STMicroelectronics STM32F103"
    config MACH_PRU
        bool "Beaglebone PRU"
    config MACH_LINUX
        bool "Linux process"
    config MACH_SIMU
        bool "Host simulator"
endchoice

source "src/avr/Kconfig"
source "src/atsam/Kconfig"
source "src/atsamd/Kconfig"
source "src/lpc176x/Kconfig"
source "src/stm32f1/Kconfig"
source "src/pru/Kconfig"
source "src/linux/Kconfig"
source "src/simulator/Kconfig"

# Generic configuration options for serial ports
config SERIAL_BAUD
    depends on SERIAL
    int "Baud rate for serial port" if LOW_LEVEL_OPTIONS
    default 250000
    help
        Specify the baud rate of the serial port. This should be set
        to 250000. Read the FAQ before changing this value.

# Generic configuration options for USB
menu "USB ids"
    depends on USBSERIAL

config USB_VENDOR_ID
    hex "USB vendor ID"
    default 0x2341
config USB_DEVICE_ID
    hex "USB device ID"
    default 0xabcd
config USB_SERIAL_NUMBER
    string "USB serial number"
    default "12345"

endmenu

# Step timing customization
config CUSTOM_STEP_DELAY
    bool "Specify a custom step pulse duration"
    depends on LOW_LEVEL_OPTIONS
config STEP_DELAY
    int
    default 2
config STEP_DELAY
    int "Step pulse duration (in microseconds)"
    depends on CUSTOM_STEP_DELAY
    help
        Specify the duration of the stepper step pulse time. This
        setting applies to all stepper drivers controlled by the
        micro-controller. If this value is set to zero then the code
        will "step" and "unstep" in the same C function.

        The default is zero for 8-bit AVR based micro-controllers, as
        it takes a little over 2us to step and unstep with this
        setting.

        The default for all other micro-controllers is 2us.

        CUSTOMIZING THIS VALUE DOES NOT IMPROVE PERFORMANCE!

# The HAVE_GPIO_x options allow boards to disable support for some
# commands if the hardware does not support the feature.
config HAVE_GPIO
    bool
    default n
config HAVE_GPIO_ADC
    bool
    default n
config HAVE_GPIO_SPI
    bool
    default n
config HAVE_GPIO_I2C
    bool
    default n
config HAVE_GPIO_HARD_PWM
    bool
    default n
config HAVE_GPIO_BITBANGING
    bool
    default n

config INLINE_STEPPER_HACK
    # Enables gcc to inline stepper_event() into the main timer irq handler
    bool
    depends on HAVE_GPIO
    default y
