
  py::enum_<ctre::phoenix::ErrorCode>(m, "ErrorCode")
    .value("OK", ctre::phoenix::ErrorCode::OK)
    .value("OKAY", ctre::phoenix::ErrorCode::OKAY)
    .value("CAN_MSG_STALE", ctre::phoenix::ErrorCode::CAN_MSG_STALE)
    .value("CAN_TX_FULL", ctre::phoenix::ErrorCode::CAN_TX_FULL)
    .value("TxFailed", ctre::phoenix::ErrorCode::TxFailed)
    .value("InvalidParamValue", ctre::phoenix::ErrorCode::InvalidParamValue)
    .value("CAN_INVALID_PARAM", ctre::phoenix::ErrorCode::CAN_INVALID_PARAM)
    .value("RxTimeout", ctre::phoenix::ErrorCode::RxTimeout)
    .value("CAN_MSG_NOT_FOUND", ctre::phoenix::ErrorCode::CAN_MSG_NOT_FOUND)
    .value("TxTimeout", ctre::phoenix::ErrorCode::TxTimeout)
    .value("CAN_NO_MORE_TX_JOBS", ctre::phoenix::ErrorCode::CAN_NO_MORE_TX_JOBS)
    .value("UnexpectedArbId", ctre::phoenix::ErrorCode::UnexpectedArbId)
    .value("CAN_NO_SESSIONS_AVAIL", ctre::phoenix::ErrorCode::CAN_NO_SESSIONS_AVAIL)
    .value("BufferFull", ctre::phoenix::ErrorCode::BufferFull)
    .value("CAN_OVERFLOW", ctre::phoenix::ErrorCode::CAN_OVERFLOW)
    .value("SensorNotPresent", ctre::phoenix::ErrorCode::SensorNotPresent)
    .value("FirmwareTooOld", ctre::phoenix::ErrorCode::FirmwareTooOld)
    .value("CouldNotChangePeriod", ctre::phoenix::ErrorCode::CouldNotChangePeriod)
    .value("GeneralError", ctre::phoenix::ErrorCode::GeneralError)
    .value("GENERAL_ERROR", ctre::phoenix::ErrorCode::GENERAL_ERROR)
    .value("SIG_NOT_UPDATED", ctre::phoenix::ErrorCode::SIG_NOT_UPDATED)
    .value("SigNotUpdated", ctre::phoenix::ErrorCode::SigNotUpdated)
    .value("NotAllPIDValuesUpdated", ctre::phoenix::ErrorCode::NotAllPIDValuesUpdated)
    .value("GEN_PORT_ERROR", ctre::phoenix::ErrorCode::GEN_PORT_ERROR)
    .value("PORT_MODULE_TYPE_MISMATCH", ctre::phoenix::ErrorCode::PORT_MODULE_TYPE_MISMATCH)
    .value("GEN_MODULE_ERROR", ctre::phoenix::ErrorCode::GEN_MODULE_ERROR)
    .value("MODULE_NOT_INIT_SET_ERROR", ctre::phoenix::ErrorCode::MODULE_NOT_INIT_SET_ERROR)
    .value("MODULE_NOT_INIT_GET_ERROR", ctre::phoenix::ErrorCode::MODULE_NOT_INIT_GET_ERROR)
    .value("WheelRadiusTooSmall", ctre::phoenix::ErrorCode::WheelRadiusTooSmall)
    .value("TicksPerRevZero", ctre::phoenix::ErrorCode::TicksPerRevZero)
    .value("DistanceBetweenWheelsTooSmall", ctre::phoenix::ErrorCode::DistanceBetweenWheelsTooSmall)
    .value("GainsAreNotSet", ctre::phoenix::ErrorCode::GainsAreNotSet)
    .value("IncompatibleMode", ctre::phoenix::ErrorCode::IncompatibleMode)
    .value("InvalidHandle", ctre::phoenix::ErrorCode::InvalidHandle)
    .value("PulseWidthSensorNotPresent", ctre::phoenix::ErrorCode::PulseWidthSensorNotPresent)
    .value("GeneralWarning", ctre::phoenix::ErrorCode::GeneralWarning)
    .value("FeatureNotSupported", ctre::phoenix::ErrorCode::FeatureNotSupported)
    .value("NotImplemented", ctre::phoenix::ErrorCode::NotImplemented)
    .value("FirmVersionCouldNotBeRetrieved", ctre::phoenix::ErrorCode::FirmVersionCouldNotBeRetrieved)
    .value("FeaturesNotAvailableYet", ctre::phoenix::ErrorCode::FeaturesNotAvailableYet)
    .value("ControlModeNotValid", ctre::phoenix::ErrorCode::ControlModeNotValid)
    .value("ControlModeNotSupportedYet", ctre::phoenix::ErrorCode::ControlModeNotSupportedYet)
    .value("CascadedPIDNotSupporteYet", ctre::phoenix::ErrorCode::CascadedPIDNotSupporteYet)
    .value("RemoteSensorsNotSupportedYet", ctre::phoenix::ErrorCode::RemoteSensorsNotSupportedYet)
;

  py::enum_<ctre::phoenix::ParamEnum>(m, "ParamEnum")
    .value("eOnBoot_BrakeMode", ctre::phoenix::ParamEnum::eOnBoot_BrakeMode)
    .value("eQuadFilterEn", ctre::phoenix::ParamEnum::eQuadFilterEn)
    .value("eQuadIdxPolarity", ctre::phoenix::ParamEnum::eQuadIdxPolarity)
    .value("eClearPositionOnIdx", ctre::phoenix::ParamEnum::eClearPositionOnIdx)
    .value("eMotionProfileHasUnderrunErr", ctre::phoenix::ParamEnum::eMotionProfileHasUnderrunErr)
    .value("eClearPosOnLimitF", ctre::phoenix::ParamEnum::eClearPosOnLimitF)
    .value("eClearPosOnLimitR", ctre::phoenix::ParamEnum::eClearPosOnLimitR)
    .value("eStatusFramePeriod", ctre::phoenix::ParamEnum::eStatusFramePeriod)
    .value("eOpenloopRamp", ctre::phoenix::ParamEnum::eOpenloopRamp)
    .value("eClosedloopRamp", ctre::phoenix::ParamEnum::eClosedloopRamp)
    .value("eNeutralDeadband", ctre::phoenix::ParamEnum::eNeutralDeadband)
    .value("ePeakPosOutput", ctre::phoenix::ParamEnum::ePeakPosOutput)
    .value("eNominalPosOutput", ctre::phoenix::ParamEnum::eNominalPosOutput)
    .value("ePeakNegOutput", ctre::phoenix::ParamEnum::ePeakNegOutput)
    .value("eNominalNegOutput", ctre::phoenix::ParamEnum::eNominalNegOutput)
    .value("eProfileParamSlot_P", ctre::phoenix::ParamEnum::eProfileParamSlot_P)
    .value("eProfileParamSlot_I", ctre::phoenix::ParamEnum::eProfileParamSlot_I)
    .value("eProfileParamSlot_D", ctre::phoenix::ParamEnum::eProfileParamSlot_D)
    .value("eProfileParamSlot_F", ctre::phoenix::ParamEnum::eProfileParamSlot_F)
    .value("eProfileParamSlot_IZone", ctre::phoenix::ParamEnum::eProfileParamSlot_IZone)
    .value("eProfileParamSlot_AllowableErr", ctre::phoenix::ParamEnum::eProfileParamSlot_AllowableErr)
    .value("eProfileParamSlot_MaxIAccum", ctre::phoenix::ParamEnum::eProfileParamSlot_MaxIAccum)
    .value("eClearPositionOnLimitF", ctre::phoenix::ParamEnum::eClearPositionOnLimitF)
    .value("eClearPositionOnLimitR", ctre::phoenix::ParamEnum::eClearPositionOnLimitR)
    .value("eClearPositionOnQuadIdx", ctre::phoenix::ParamEnum::eClearPositionOnQuadIdx)
    .value("eSampleVelocityPeriod", ctre::phoenix::ParamEnum::eSampleVelocityPeriod)
    .value("eSampleVelocityWindow", ctre::phoenix::ParamEnum::eSampleVelocityWindow)
    .value("eFeedbackSensorType", ctre::phoenix::ParamEnum::eFeedbackSensorType)
    .value("eSelectedSensorPosition", ctre::phoenix::ParamEnum::eSelectedSensorPosition)
    .value("eFeedbackNotContinuous", ctre::phoenix::ParamEnum::eFeedbackNotContinuous)
    .value("eRemoteSensorSource", ctre::phoenix::ParamEnum::eRemoteSensorSource)
    .value("eRemoteSensorDeviceID", ctre::phoenix::ParamEnum::eRemoteSensorDeviceID)
    .value("eSensorTerm", ctre::phoenix::ParamEnum::eSensorTerm)
    .value("eRemoteSensorClosedLoopDisableNeutralOnLOS", ctre::phoenix::ParamEnum::eRemoteSensorClosedLoopDisableNeutralOnLOS)
    .value("eForwardSoftLimitThreshold", ctre::phoenix::ParamEnum::eForwardSoftLimitThreshold)
    .value("eReverseSoftLimitThreshold", ctre::phoenix::ParamEnum::eReverseSoftLimitThreshold)
    .value("eForwardSoftLimitEnable", ctre::phoenix::ParamEnum::eForwardSoftLimitEnable)
    .value("eReverseSoftLimitEnable", ctre::phoenix::ParamEnum::eReverseSoftLimitEnable)
    .value("eNominalBatteryVoltage", ctre::phoenix::ParamEnum::eNominalBatteryVoltage)
    .value("eBatteryVoltageFilterSize", ctre::phoenix::ParamEnum::eBatteryVoltageFilterSize)
    .value("eContinuousCurrentLimitAmps", ctre::phoenix::ParamEnum::eContinuousCurrentLimitAmps)
    .value("ePeakCurrentLimitMs", ctre::phoenix::ParamEnum::ePeakCurrentLimitMs)
    .value("ePeakCurrentLimitAmps", ctre::phoenix::ParamEnum::ePeakCurrentLimitAmps)
    .value("eClosedLoopIAccum", ctre::phoenix::ParamEnum::eClosedLoopIAccum)
    .value("eCustomParam", ctre::phoenix::ParamEnum::eCustomParam)
    .value("eStickyFaults", ctre::phoenix::ParamEnum::eStickyFaults)
    .value("eAnalogPosition", ctre::phoenix::ParamEnum::eAnalogPosition)
    .value("eQuadraturePosition", ctre::phoenix::ParamEnum::eQuadraturePosition)
    .value("ePulseWidthPosition", ctre::phoenix::ParamEnum::ePulseWidthPosition)
    .value("eMotMag_Accel", ctre::phoenix::ParamEnum::eMotMag_Accel)
    .value("eMotMag_VelCruise", ctre::phoenix::ParamEnum::eMotMag_VelCruise)
    .value("eLimitSwitchSource", ctre::phoenix::ParamEnum::eLimitSwitchSource)
    .value("eLimitSwitchNormClosedAndDis", ctre::phoenix::ParamEnum::eLimitSwitchNormClosedAndDis)
    .value("eLimitSwitchDisableNeutralOnLOS", ctre::phoenix::ParamEnum::eLimitSwitchDisableNeutralOnLOS)
    .value("eLimitSwitchRemoteDevID", ctre::phoenix::ParamEnum::eLimitSwitchRemoteDevID)
    .value("eYawOffset", ctre::phoenix::ParamEnum::eYawOffset)
    .value("eCompassOffset", ctre::phoenix::ParamEnum::eCompassOffset)
    .value("eBetaGain", ctre::phoenix::ParamEnum::eBetaGain)
    .value("eEnableCompassFusion", ctre::phoenix::ParamEnum::eEnableCompassFusion)
    .value("eGyroNoMotionCal", ctre::phoenix::ParamEnum::eGyroNoMotionCal)
    .value("eEnterCalibration", ctre::phoenix::ParamEnum::eEnterCalibration)
    .value("eFusedHeadingOffset", ctre::phoenix::ParamEnum::eFusedHeadingOffset)
    .value("eStatusFrameRate", ctre::phoenix::ParamEnum::eStatusFrameRate)
    .value("eAccumZ", ctre::phoenix::ParamEnum::eAccumZ)
    .value("eTempCompDisable", ctre::phoenix::ParamEnum::eTempCompDisable)
    .value("eMotionMeas_tap_threshX", ctre::phoenix::ParamEnum::eMotionMeas_tap_threshX)
    .value("eMotionMeas_tap_threshY", ctre::phoenix::ParamEnum::eMotionMeas_tap_threshY)
    .value("eMotionMeas_tap_threshZ", ctre::phoenix::ParamEnum::eMotionMeas_tap_threshZ)
    .value("eMotionMeas_tap_count", ctre::phoenix::ParamEnum::eMotionMeas_tap_count)
    .value("eMotionMeas_tap_time", ctre::phoenix::ParamEnum::eMotionMeas_tap_time)
    .value("eMotionMeas_tap_time_multi", ctre::phoenix::ParamEnum::eMotionMeas_tap_time_multi)
    .value("eMotionMeas_shake_reject_thresh", ctre::phoenix::ParamEnum::eMotionMeas_shake_reject_thresh)
    .value("eMotionMeas_shake_reject_time", ctre::phoenix::ParamEnum::eMotionMeas_shake_reject_time)
    .value("eMotionMeas_shake_reject_timeout", ctre::phoenix::ParamEnum::eMotionMeas_shake_reject_timeout)
;

  py::enum_<ctre::phoenix::CANifierControlFrame>(m, "CANifierControlFrame")
    .value("CANifier_Control_1_General", ctre::phoenix::CANifierControlFrame::CANifier_Control_1_General)
    .value("CANifier_Control_2_PwmOutput", ctre::phoenix::CANifierControlFrame::CANifier_Control_2_PwmOutput)
;

  py::enum_<ctre::phoenix::CANifierStatusFrame>(m, "CANifierStatusFrame")
    .value("CANifierStatusFrame_Status_1_General", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_1_General)
    .value("CANifierStatusFrame_Status_2_General", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_2_General)
    .value("CANifierStatusFrame_Status_3_PwmInputs0", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_3_PwmInputs0)
    .value("CANifierStatusFrame_Status_4_PwmInputs1", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_4_PwmInputs1)
    .value("CANifierStatusFrame_Status_5_PwmInputs2", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_5_PwmInputs2)
    .value("CANifierStatusFrame_Status_6_PwmInputs3", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_6_PwmInputs3)
    .value("CANifierStatusFrame_Status_8_Misc", ctre::phoenix::CANifierStatusFrame::CANifierStatusFrame_Status_8_Misc)
;

  py::enum_<ctre::phoenix::motion::SetValueMotionProfile>(m, "SetValueMotionProfile")
    .value("Disable", ctre::phoenix::motion::SetValueMotionProfile::Disable)
    .value("Enable", ctre::phoenix::motion::SetValueMotionProfile::Enable)
    .value("Hold", ctre::phoenix::motion::SetValueMotionProfile::Hold)
;

  py::enum_<ctre::phoenix::motorcontrol::ControlFrame>(m, "ControlFrame")
    .value("Control_3_General", ctre::phoenix::motorcontrol::ControlFrame::Control_3_General)
    .value("Control_4_Advanced", ctre::phoenix::motorcontrol::ControlFrame::Control_4_Advanced)
    .value("Control_6_MotProfAddTrajPoint", ctre::phoenix::motorcontrol::ControlFrame::Control_6_MotProfAddTrajPoint)
;

  py::enum_<ctre::phoenix::motorcontrol::ControlFrameEnhanced>(m, "ControlFrameEnhanced")
    .value("Control_3_General_", ctre::phoenix::motorcontrol::ControlFrameEnhanced::Control_3_General_)
    .value("Control_4_Advanced_", ctre::phoenix::motorcontrol::ControlFrameEnhanced::Control_4_Advanced_)
    .value("Control_5_FeedbackOutputOverride_", ctre::phoenix::motorcontrol::ControlFrameEnhanced::Control_5_FeedbackOutputOverride_)
    .value("Control_6_MotProfAddTrajPoint_", ctre::phoenix::motorcontrol::ControlFrameEnhanced::Control_6_MotProfAddTrajPoint_)
;

  py::enum_<ctre::phoenix::motorcontrol::ControlMode>(m, "ControlMode")
    .value("PercentOutput", ctre::phoenix::motorcontrol::ControlMode::PercentOutput)
    .value("Position", ctre::phoenix::motorcontrol::ControlMode::Position)
    .value("Velocity", ctre::phoenix::motorcontrol::ControlMode::Velocity)
    .value("Current", ctre::phoenix::motorcontrol::ControlMode::Current)
    .value("Follower", ctre::phoenix::motorcontrol::ControlMode::Follower)
    .value("MotionProfile", ctre::phoenix::motorcontrol::ControlMode::MotionProfile)
    .value("MotionMagic", ctre::phoenix::motorcontrol::ControlMode::MotionMagic)
    .value("MotionMagicArc", ctre::phoenix::motorcontrol::ControlMode::MotionMagicArc)
    .value("MotionProfileArc", ctre::phoenix::motorcontrol::ControlMode::MotionProfileArc)
    .value("Disabled", ctre::phoenix::motorcontrol::ControlMode::Disabled)
;

  py::enum_<ctre::phoenix::motorcontrol::FeedbackDevice>(m, "FeedbackDevice")
    .value("None", ctre::phoenix::motorcontrol::FeedbackDevice::None)
    .value("QuadEncoder", ctre::phoenix::motorcontrol::FeedbackDevice::QuadEncoder)
    .value("Analog", ctre::phoenix::motorcontrol::FeedbackDevice::Analog)
    .value("Tachometer", ctre::phoenix::motorcontrol::FeedbackDevice::Tachometer)
    .value("PulseWidthEncodedPosition", ctre::phoenix::motorcontrol::FeedbackDevice::PulseWidthEncodedPosition)
    .value("SensorSum", ctre::phoenix::motorcontrol::FeedbackDevice::SensorSum)
    .value("SensorDifference", ctre::phoenix::motorcontrol::FeedbackDevice::SensorDifference)
    .value("RemoteSensor0", ctre::phoenix::motorcontrol::FeedbackDevice::RemoteSensor0)
    .value("RemoteSensor1", ctre::phoenix::motorcontrol::FeedbackDevice::RemoteSensor1)
    .value("SoftwareEmulatedSensor", ctre::phoenix::motorcontrol::FeedbackDevice::SoftwareEmulatedSensor)
    .value("CTRE_MagEncoder_Absolute", ctre::phoenix::motorcontrol::FeedbackDevice::CTRE_MagEncoder_Absolute)
    .value("CTRE_MagEncoder_Relative", ctre::phoenix::motorcontrol::FeedbackDevice::CTRE_MagEncoder_Relative)
;

  py::enum_<ctre::phoenix::motorcontrol::RemoteFeedbackDevice>(m, "RemoteFeedbackDevice")
    .value("RemoteFeedbackDevice_None", ctre::phoenix::motorcontrol::RemoteFeedbackDevice::RemoteFeedbackDevice_None)
    .value("RemoteFeedbackDevice_SensorSum", ctre::phoenix::motorcontrol::RemoteFeedbackDevice::RemoteFeedbackDevice_SensorSum)
    .value("RemoteFeedbackDevice_SensorDifference", ctre::phoenix::motorcontrol::RemoteFeedbackDevice::RemoteFeedbackDevice_SensorDifference)
    .value("RemoteFeedbackDevice_RemoteSensor0", ctre::phoenix::motorcontrol::RemoteFeedbackDevice::RemoteFeedbackDevice_RemoteSensor0)
    .value("RemoteFeedbackDevice_RemoteSensor1", ctre::phoenix::motorcontrol::RemoteFeedbackDevice::RemoteFeedbackDevice_RemoteSensor1)
    .value("RemoteFeedbackDevice_SoftwareEmulatedSensor", ctre::phoenix::motorcontrol::RemoteFeedbackDevice::RemoteFeedbackDevice_SoftwareEmulatedSensor)
;

  py::enum_<ctre::phoenix::motorcontrol::LimitSwitchSource>(m, "LimitSwitchSource")
    .value("LimitSwitchSource_FeedbackConnector", ctre::phoenix::motorcontrol::LimitSwitchSource::LimitSwitchSource_FeedbackConnector)
    .value("LimitSwitchSource_RemoteTalonSRX", ctre::phoenix::motorcontrol::LimitSwitchSource::LimitSwitchSource_RemoteTalonSRX)
    .value("LimitSwitchSource_RemoteCANifier", ctre::phoenix::motorcontrol::LimitSwitchSource::LimitSwitchSource_RemoteCANifier)
    .value("LimitSwitchSource_Deactivated", ctre::phoenix::motorcontrol::LimitSwitchSource::LimitSwitchSource_Deactivated)
;

  py::enum_<ctre::phoenix::motorcontrol::RemoteLimitSwitchSource>(m, "RemoteLimitSwitchSource")
    .value("RemoteLimitSwitchSource_RemoteTalonSRX", ctre::phoenix::motorcontrol::RemoteLimitSwitchSource::RemoteLimitSwitchSource_RemoteTalonSRX)
    .value("RemoteLimitSwitchSource_RemoteCANifier", ctre::phoenix::motorcontrol::RemoteLimitSwitchSource::RemoteLimitSwitchSource_RemoteCANifier)
    .value("RemoteLimitSwitchSource_Deactivated", ctre::phoenix::motorcontrol::RemoteLimitSwitchSource::RemoteLimitSwitchSource_Deactivated)
;

  py::enum_<ctre::phoenix::motorcontrol::LimitSwitchNormal>(m, "LimitSwitchNormal")
    .value("LimitSwitchNormal_NormallyOpen", ctre::phoenix::motorcontrol::LimitSwitchNormal::LimitSwitchNormal_NormallyOpen)
    .value("LimitSwitchNormal_NormallyClosed", ctre::phoenix::motorcontrol::LimitSwitchNormal::LimitSwitchNormal_NormallyClosed)
    .value("LimitSwitchNormal_Disabled", ctre::phoenix::motorcontrol::LimitSwitchNormal::LimitSwitchNormal_Disabled)
;

  py::enum_<ctre::phoenix::motorcontrol::NeutralMode>(m, "NeutralMode")
    .value("EEPROMSetting", ctre::phoenix::motorcontrol::NeutralMode::EEPROMSetting)
    .value("Coast", ctre::phoenix::motorcontrol::NeutralMode::Coast)
    .value("Brake", ctre::phoenix::motorcontrol::NeutralMode::Brake)
;

  py::enum_<ctre::phoenix::motorcontrol::RemoteSensorSource>(m, "RemoteSensorSource")
    .value("RemoteSensorSource_Off", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_Off)
    .value("RemoteSensorSource_TalonSRX_SelectedSensor", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_TalonSRX_SelectedSensor)
    .value("RemoteSensorSource_Pigeon_Yaw", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_Pigeon_Yaw)
    .value("RemoteSensorSource_Pigeon_Pitch", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_Pigeon_Pitch)
    .value("RemoteSensorSource_Pigeon_Roll", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_Pigeon_Roll)
    .value("RemoteSensorSource_CANifier_Quadrature", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_CANifier_Quadrature)
    .value("RemoteSensorSource_CANifier_PWMInput0", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_CANifier_PWMInput0)
    .value("RemoteSensorSource_CANifier_PWMInput1", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_CANifier_PWMInput1)
    .value("RemoteSensorSource_CANifier_PWMInput2", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_CANifier_PWMInput2)
    .value("RemoteSensorSource_CANifier_PWMInput3", ctre::phoenix::motorcontrol::RemoteSensorSource::RemoteSensorSource_CANifier_PWMInput3)
;

  py::enum_<ctre::phoenix::motorcontrol::SensorTerm>(m, "SensorTerm")
    .value("SensorTerm_Sum0", ctre::phoenix::motorcontrol::SensorTerm::SensorTerm_Sum0)
    .value("SensorTerm_Sum1", ctre::phoenix::motorcontrol::SensorTerm::SensorTerm_Sum1)
    .value("SensorTerm_Diff0", ctre::phoenix::motorcontrol::SensorTerm::SensorTerm_Diff0)
    .value("SensorTerm_Diff1", ctre::phoenix::motorcontrol::SensorTerm::SensorTerm_Diff1)
;

  py::enum_<ctre::phoenix::motorcontrol::StatusFrameEnhanced>(m, "StatusFrameEnhanced")
    .value("Status_1_General", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_1_General)
    .value("Status_2_Feedback0", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_2_Feedback0)
    .value("Status_4_AinTempVbat", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_4_AinTempVbat)
    .value("Status_6_Misc", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_6_Misc)
    .value("Status_7_CommStatus", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_7_CommStatus)
    .value("Status_9_MotProfBuffer", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_9_MotProfBuffer)
    .value("Status_10_MotionMagic", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_10_MotionMagic)
    .value("Status_12_Feedback1", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_12_Feedback1)
    .value("Status_13_Base_PIDF0", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_13_Base_PIDF0)
    .value("Status_14_Turn_PIDF1", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_14_Turn_PIDF1)
    .value("Status_15_FirmareApiStatus", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_15_FirmareApiStatus)
    .value("Status_3_Quadrature", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_3_Quadrature)
    .value("Status_8_PulseWidth", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_8_PulseWidth)
    .value("Status_11_UartGadgeteer", ctre::phoenix::motorcontrol::StatusFrameEnhanced::Status_11_UartGadgeteer)
;

  py::enum_<ctre::phoenix::motorcontrol::StatusFrame>(m, "StatusFrame")
    .value("Status_1_General_", ctre::phoenix::motorcontrol::StatusFrame::Status_1_General_)
    .value("Status_2_Feedback0_", ctre::phoenix::motorcontrol::StatusFrame::Status_2_Feedback0_)
    .value("Status_4_AinTempVbat_", ctre::phoenix::motorcontrol::StatusFrame::Status_4_AinTempVbat_)
    .value("Status_6_Misc_", ctre::phoenix::motorcontrol::StatusFrame::Status_6_Misc_)
    .value("Status_7_CommStatus_", ctre::phoenix::motorcontrol::StatusFrame::Status_7_CommStatus_)
    .value("Status_9_MotProfBuffer_", ctre::phoenix::motorcontrol::StatusFrame::Status_9_MotProfBuffer_)
    .value("Status_10_MotionMagic_", ctre::phoenix::motorcontrol::StatusFrame::Status_10_MotionMagic_)
    .value("Status_12_Feedback1_", ctre::phoenix::motorcontrol::StatusFrame::Status_12_Feedback1_)
    .value("Status_13_Base_PIDF0_", ctre::phoenix::motorcontrol::StatusFrame::Status_13_Base_PIDF0_)
    .value("Status_14_Turn_PIDF1_", ctre::phoenix::motorcontrol::StatusFrame::Status_14_Turn_PIDF1_)
    .value("Status_15_FirmareApiStatus_", ctre::phoenix::motorcontrol::StatusFrame::Status_15_FirmareApiStatus_)
;

  py::enum_<ctre::phoenix::motorcontrol::VelocityMeasPeriod>(m, "VelocityMeasPeriod")
    .value("Period_1Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_1Ms)
    .value("Period_2Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_2Ms)
    .value("Period_5Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_5Ms)
    .value("Period_10Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_10Ms)
    .value("Period_20Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_20Ms)
    .value("Period_25Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_25Ms)
    .value("Period_50Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_50Ms)
    .value("Period_100Ms", ctre::phoenix::motorcontrol::VelocityMeasPeriod::Period_100Ms)
;

  py::enum_<ctre::phoenix::sensors::PigeonIMU_ControlFrame>(m, "PigeonIMU_ControlFrame")
    .value("PigeonIMU_CondStatus_Control_1", ctre::phoenix::sensors::PigeonIMU_ControlFrame::PigeonIMU_CondStatus_Control_1)
;

  py::enum_<ctre::phoenix::sensors::PigeonIMU_StatusFrame>(m, "PigeonIMU_StatusFrame")
    .value("PigeonIMU_CondStatus_1_General", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_1_General)
    .value("PigeonIMU_CondStatus_9_SixDeg_YPR", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_9_SixDeg_YPR)
    .value("PigeonIMU_CondStatus_6_SensorFusion", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_6_SensorFusion)
    .value("PigeonIMU_CondStatus_11_GyroAccum", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_11_GyroAccum)
    .value("PigeonIMU_CondStatus_2_GeneralCompass", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_2_GeneralCompass)
    .value("PigeonIMU_CondStatus_3_GeneralAccel", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_3_GeneralAccel)
    .value("PigeonIMU_CondStatus_10_SixDeg_Quat", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_CondStatus_10_SixDeg_Quat)
    .value("PigeonIMU_RawStatus_4_Mag", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_RawStatus_4_Mag)
    .value("PigeonIMU_BiasedStatus_2_Gyro", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_BiasedStatus_2_Gyro)
    .value("PigeonIMU_BiasedStatus_4_Mag", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_BiasedStatus_4_Mag)
    .value("PigeonIMU_BiasedStatus_6_Accel", ctre::phoenix::sensors::PigeonIMU_StatusFrame::PigeonIMU_BiasedStatus_6_Accel)
;

