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

import typing

from hal_impl.data import hal_data, NotifyDict


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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    def getGeneralStatus(self) -> typing.Tuple[int, int, int, int, float, int, int, int, int]:
        raise NotImplementedError
        assert isinstance(retval, tuple) and len(retval) == 9
        assert isinstance(state, int)
        assert isinstance(currentMode, int)
        assert isinstance(calibrationError, int)
        assert isinstance(bCalIsBooting, int)
        assert isinstance(tempC, (int, float))
        assert isinstance(upTimeSec, int)
        assert isinstance(noMotionBiasCount, int)
        assert isinstance(tempCompensationCount, int)
        assert isinstance(lastError, int)
        return retval

    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.

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def get6dQuaternion(self) -> typing.List[float]:
        '''Get 6d Quaternion data.

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

        '''
        retval = 0
        raise NotImplementedError
        return retval

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

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

        '''
        retval = 0
        raise NotImplementedError
        return retval

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

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

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getAbsoluteCompassHeading(self) -> float:
        '''Get the absolute compass heading.

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

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getCompassHeading(self) -> float:
        '''Get the continuous compass heading.

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

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getCompassFieldStrength(self) -> float:
        '''Gets the compass' measured magnetic field strength.

        :returns: field strength in Microteslas (uT).

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getTemp(self) -> float:
        '''Gets the temperature of the pigeon.

        :returns: Temperature in ('C)

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getState(self) -> int:
        '''Gets the current Pigeon state

        :returns: PigeonState enum

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getUpTime(self) -> int:
        '''Gets the current Pigeon uptime.

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

        '''
        retval = 0
        raise NotImplementedError
        return retval

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

        :param rm_xyz: Array to fill with x[0], y[1], and z[2] data.
                       Number is equal to 0.6 microTeslas per unit.

        :returns: The last ErrorCode generated.

        '''
        retval = 0
        raise NotImplementedError
        return retval

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

        :param bm_xyz: Array to fill with x[0], y[1], and z[2] data.
                       Number is equal to 0.6 microTeslas per unit.

        :returns: The last ErrorCode generated.

        '''
        retval = 0
        raise NotImplementedError
        return retval

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

        :param ba_xyz: Array to fill with x[0], y[1], and z[2] data.
                       These are in fixed point notation Q2.14.  e.g. 16384 = 1G

        :returns: The last ErrorCode generated.

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getRawGyro(self) -> typing.List[float]:
        '''Get Raw Gyro data.

        :param xyz_dps: Array to fill with x[0], y[1], and z[2] data in degrees per second.

        :returns: The last ErrorCode generated.

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def getAccelerometerAngles(self) -> typing.List[float]:
        '''Get Accelerometer tilt angles.

        :param tiltAngles: Array to fill with x[0], y[1], and z[2] angles in degrees.

        :returns: The last ErrorCode generated.

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def _getFusedHeading2(self) -> typing.Tuple[int, int, float, int]:
        raise NotImplementedError
        assert isinstance(retval, tuple) and len(retval) == 4
        assert isinstance(bIsFusing, int)
        assert isinstance(bIsValid, int)
        assert isinstance(value, (int, float))
        assert isinstance(lastError, int)
        return retval

    def _getFusedHeading1(self) -> float:
        retval = 0
        raise NotImplementedError
        return retval

    def getResetCount(self) -> int:
        retval = 0
        raise NotImplementedError
        return retval

    def getResetFlags(self) -> int:
        retval = 0
        raise NotImplementedError
        return retval

    def getFirmwareVersion(self) -> 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.

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def hasResetOccurred(self) -> bool:
        ''':returns: true iff a reset has occurred since last call.

        '''
        retval = 0
        raise NotImplementedError
        return retval

    def setLastError(self, value: int) -> int:
        assert isinstance(value, int)
        retval = 0
        raise NotImplementedError
        return retval

    def getFaults(self) -> int:
        retval = 0
        raise NotImplementedError
        return retval

    def getStickyFaults(self) -> int:
        retval = 0
        raise NotImplementedError
        return retval

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

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

        '''
        assert isinstance(timeoutMs, int)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

    def getStatusFramePeriod(self, frame: int, timeoutMs: 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)
        retval = 0
        raise NotImplementedError
        return retval

    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)
        retval = 0
        raise NotImplementedError
        return retval

