module_name: DShot Driver
serial_config:
    - command: dshot telemetry ${SERIAL_DEV}
      port_config_param:
        name: DSHOT_TEL_CFG
        group: DShot

parameters:
    - group: DShot
      definitions:
        DSHOT_CONFIG:
            description:
                short: Configure DShot
                long: |
                    This enables/disables DShot. The different modes define different
                    speeds, for example DShot150 = 150kb/s. Not all ESCs support all modes.

                    Note: this enables DShot on the FMU outputs. For boards with an IO it is the
                    AUX outputs.
            type: enum
            values:
                0: Disable (use PWM/Oneshot)
                150: DShot150
                300: DShot300
                600: DShot600
                1200: DShot1200
            reboot_required: true
            default: 0
        DSHOT_MIN:
            description:
                short: Minimum DShot Motor Output
                long: |
                    Minimum Output Value for DShot in percent. The value depends on the ESC. Make
                    sure to set this high enough so that the motors are always spinning while
                    armed.
            type: float
            unit: '%'
            min: 0
            max: 1
            decimal: 2
            increment: 0.01
            default: 0.055
        DSHOT_3D_ENABLE:
            description:
                short: Allows for 3d mode when using DShot and suitable mixer
                long: |
                    WARNING: ESC must be configured for 3D mode, and DSHOT_MIN set to 0.
                    This splits the throttle ranges in two.
                    Direction 1) 48 is the slowest, 1047 is the fastest.
                    Direction 2) 1049 is the slowest, 2047 is the fastest.
                    When mixer outputs 1000 or value inside DSHOT 3D deadband, DShot 0 is sent.
            type: boolean
            default: 0
        DSHOT_3D_DEAD_H:
            description:
                short: DSHOT 3D deadband high
                long: |
                    When the actuator_output is between DSHOT_3D_DEAD_L and DSHOT_3D_DEAD_H, motor will not spin.
                    This value is with respect to the mixer_module range (0-1999), not the DSHOT values.
            type: int32
            min: 1000
            max: 1999
            default: 1000
        DSHOT_3D_DEAD_L:
            description:
                short: DSHOT 3D deadband low
                long: |
                    When the actuator_output is between DSHOT_3D_DEAD_L and DSHOT_3D_DEAD_H, motor will not spin.
                    This value is with respect to the mixer_module range (0-1999), not the DSHOT values.
            type: int32
            min: 0
            max: 1000
            default: 1000
        MOT_POLE_COUNT: # only used by dshot so far, so keep it under the dshot group
            description:
                short: Number of magnetic poles of the motors
                long: |
                    Specify the number of magnetic poles of the motors.
                    It is required to compute the RPM value from the eRPM returned with the ESC telemetry.

                    Either get the number from the motor spec sheet or count the magnets on the bell of the motor (not the stator magnets).
                    Typical motors for 5 inch props have 14 poles.
            type: int32
            default: 14
