#
# This file is autogenerated, do not edit manually. Instead,
# edit gen/PigeonIMU_data.yml
#

import typing

from hal_impl.data import hal_data

class PigeonIMU:

    def __init__(self):
        self.create_called = False

    def create2(self, talonDeviceID: int) -> None:
        assert isinstance(talonDeviceID, int)
        self.create_called = True

    def create1(self, deviceNumber: int) -> None:
        assert isinstance(deviceNumber, int)
        self.create_called = True

    def setYaw(self, angleDeg: float, timeoutMs: int) -> int:
        '''Sets the Yaw register to the specified value.

        :param angleDeg: Degree of Yaw [+/- 23040 degrees]
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDeg, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def addYaw(self, angleDeg: float, timeoutMs: int) -> int:
        '''Atomically add to the Yaw register.

        :param angleDeg: Degrees to add to the Yaw register.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDeg, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setYawToCompass(self, timeoutMs: int) -> int:
        '''Sets the Yaw register to match the current compass value.

        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setFusedHeading(self, angleDeg: float, timeoutMs: int) -> int:
        '''Sets the Fused Heading to the specified value.

        :param angleDeg: Degree of heading [+/- 23040 degrees]
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDeg, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def addFusedHeading(self, angleDeg: float, timeoutMs: int) -> int:
        '''Atomically add to the Fused Heading register.

        :param angleDeg: Degrees to add to the Fused Heading register.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDeg, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setFusedHeadingToCompass(self, timeoutMs: int) -> int:
        '''Sets the Fused Heading register to match the current compass value.

        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setAccumZAngle(self, angleDeg: float, timeoutMs: int) -> int:
        '''Sets the AccumZAngle.

        :param angleDeg: Degrees to set AccumZAngle to.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDeg, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def configTemperatureCompensationEnable(self, bTempCompEnable: int, timeoutMs: int) -> int:
        '''Enable/Disable Temp compensation. Pigeon defaults with this on at boot.

        :param bTempCompEnable: Set to "True" to enable temperature compensation.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for config
            success and report an error if it times out. If zero, no
            blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(bTempCompEnable, int)
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setCompassDeclination(self, angleDegOffset: float, timeoutMs: int) -> int:
        '''Set the declination for compass. Declination is the difference between
        Earth Magnetic north, and the geographic "True North".

        :param angleDegOffset:  Degrees to set Compass Declination to.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for config
            success and report an error if it times out. If zero, no
            blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDegOffset, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setCompassAngle(self, angleDeg: float, timeoutMs: int) -> int:
        '''Sets the compass angle. Although compass is absolute [0,360) degrees, the
        continuous compass register holds the wrap-arounds.

        :param angleDeg:
            Degrees to set continuous compass angle to.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for config
            success and report an error if it times out. If zero, no
            blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(angleDeg, (int, float))
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def enterCalibrationMode(self, calMode: int, timeoutMs: int) -> int:
        '''Enters the Calbration mode.  See the Pigeon IMU documentation for More
        information on Calibration.

        :param calMode: Calibration to execute
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for
            config success and report an error if it times out.
            If zero, no blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(calMode, int)
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def getGeneralStatus(self) -> typing.Tuple[int, int, int, int, int, float, int, int, int, int]:
        raise NotImplementedError

    def getLastError(self) -> int:
        '''Call GetLastError() generated by this object.

        Not all functions return an error code but can
        potentially report errors.

        This function can be used to retrieve those error codes.

        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def get6dQuaternion(self) -> typing.Tuple[int, list]:
        '''Get 6d Quaternion data.

        :param wxyz: [w, x, y, z]
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getYawPitchRoll(self) -> typing.Tuple[int, list]:
        '''Get Yaw, Pitch, and Roll data.

        :param ypr_deg: [yaw, pitch, and roll]
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getAccumGyro(self) -> typing.Tuple[int, list]:
        '''Get AccumGyro data.
        AccumGyro is the integrated gyro value on each axis.

        :param xyz_deg: [x, y, z]
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getAbsoluteCompassHeading(self) -> typing.Tuple[int, float]:
        '''Get the absolute compass heading.

        :returns: compass heading [0,360) degrees.

        '''
        raise NotImplementedError

    def getCompassHeading(self) -> typing.Tuple[int, float]:
        '''Get the continuous compass heading.

        :returns: 
            continuous compass heading [-23040, 23040) degrees. 
            Use SetCompassHeading to modify the wrap-around portion.

        '''
        raise NotImplementedError

    def getCompassFieldStrength(self) -> typing.Tuple[int, float]:
        '''Gets the compass' measured magnetic field strength.

        :returns: field strength in Microteslas (uT).

        '''
        raise NotImplementedError

    def getTemp(self) -> typing.Tuple[int, float]:
        '''Gets the temperature of the pigeon.

        :returns: Temperature in ('C)

        '''
        raise NotImplementedError

    def getState(self) -> typing.Tuple[int, int]:
        '''Gets the current Pigeon state

        :returns: PigeonState enum

        '''
        raise NotImplementedError

    def getUpTime(self) -> typing.Tuple[int, int]:
        '''Gets the current Pigeon uptime.

        :returns: How long has Pigeon been running in whole seconds. Value caps at 255.

        '''
        raise NotImplementedError

    def getRawMagnetometer(self) -> typing.Tuple[int, list]:
        '''Get Raw Magnetometer data.

        :param rm_xyz: [x, y, z]
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getBiasedMagnetometer(self) -> typing.Tuple[int, list]:
        '''Get Biased Magnetometer data.

        :param bm_xyz: [x, y, z]
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getBiasedAccelerometer(self) -> typing.Tuple[int, list]:
        '''Get Biased Accelerometer data.

        :param ba_xyz: [x, y, z]
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getRawGyro(self) -> typing.Tuple[int, list]:
        '''Get Biased Accelerometer data.

        :param xyz_dps: [x, y, z] in degrees per second.
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getAccelerometerAngles(self) -> typing.Tuple[int, list]:
        '''Get Accelerometer tilt angles.

        :param tiltAngles: [x, y, z] angles.
        :returns: The last ErrorCode generated.

        '''
        raise NotImplementedError

    def getFusedHeading2(self) -> typing.Tuple[int, int, int, float, int]:
        raise NotImplementedError

    def getFusedHeading1(self) -> typing.Tuple[int, float]:
        raise NotImplementedError

    def getResetCount(self) -> typing.Tuple[int, int]:
        raise NotImplementedError

    def getResetFlags(self) -> typing.Tuple[int, int]:
        raise NotImplementedError

    def getFirmwareVersion(self) -> typing.Tuple[int, int]:
        '''Gets the firmware version of the device.

        :returns: 
            param holds the firmware version of the device. Device must be powered
            cycled at least once.

        '''
        raise NotImplementedError

    def hasResetOccurred(self) -> typing.Tuple[int, bool]:
        ''':returns: true iff a reset has occurred since last call.

        '''
        raise NotImplementedError

    def setLastError(self, value: int) -> int:
        assert isinstance(value, int)
        raise NotImplementedError

    def getFaults(self) -> typing.Tuple[int, int]:
        raise NotImplementedError

    def getStickyFaults(self) -> typing.Tuple[int, int]:
        raise NotImplementedError

    def clearStickyFaults(self, timeoutMs: int) -> int:
        '''Clears the Sticky Faults

        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setStatusFramePeriod(self, frame: int, periodMs: int, timeoutMs: int) -> int:
        '''Sets the period of the given status frame.

        :param statusFrame:
            Frame whose period is to be changed.
        :param periodMs:
            Period in ms for the given frame.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for config
            success and report an error if it times out. If zero, no
            blocking or checking is performed.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(frame, int)
        assert isinstance(periodMs, int)
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def getStatusFramePeriod(self, frame: int, timeoutMs: int) -> typing.Tuple[int, int]:
        '''Gets the period of the given status frame.

        :param frame:
            Frame to get the period of.
        :param timeoutMs:
            Timeout value in ms. If nonzero, function will wait for config
            success and report an error if it times out. If zero, no
            blocking or checking is performed.
        :returns: Period of the given status frame.

        '''
        assert isinstance(frame, int)
        assert isinstance(timeoutMs, int)
        raise NotImplementedError

    def setControlFramePeriod(self, frame: int, periodMs: int) -> int:
        '''Sets the period of the given control frame.

        :param frame:
            Frame whose period is to be changed.
        :param periodMs:
            Period in ms for the given frame.
        :returns: Error Code generated by function. 0 indicates no error.

        '''
        assert isinstance(frame, int)
        assert isinstance(periodMs, int)
        raise NotImplementedError

