/**
 * IMU calibration data from Feature Report 0x05.
 *
 * The DualSense stores per-unit factory calibration for the gyroscope and
 * accelerometer.  Reading and applying these offsets and scale factors
 * removes bias drift and normalises per-axis sensitivity, giving more
 * accurate motion data than the hardcoded mapping.
 *
 * Layout mirrors the Linux kernel hid-playstation.c interpretation of
 * Feature Report 0x05 (41 bytes including the report-ID prefix).
 */
import type { HIDProvider } from "./hid_provider";
/** Per-axis calibration parameters for one gyro axis */
export interface GyroAxisCalibration {
    /** Resting-state bias (raw int16 counts) */
    bias: number;
    /** Raw count at +reference rotation rate */
    plus: number;
    /** Raw count at −reference rotation rate */
    minus: number;
}
/** Per-axis calibration parameters for one accelerometer axis */
export interface AccelAxisCalibration {
    /** Raw count at +1 g */
    plus: number;
    /** Raw count at −1 g */
    minus: number;
}
/** Full IMU calibration data parsed from Feature Report 0x05 */
export interface IMUCalibration {
    gyro: {
        pitch: GyroAxisCalibration;
        yaw: GyroAxisCalibration;
        roll: GyroAxisCalibration;
        /** Reference rotation-rate magnitude (positive direction) */
        speedPlus: number;
        /** Reference rotation-rate magnitude (negative direction) */
        speedMinus: number;
    };
    accel: {
        x: AccelAxisCalibration;
        y: AccelAxisCalibration;
        z: AccelAxisCalibration;
    };
}
/** Precomputed bias + scale for a single axis */
export interface AxisCalibrationFactors {
    /** Value to subtract from the raw int16 */
    bias: number;
    /** Multiplier: calibrated = (raw − bias) × scale, then clamp to [−1, 1] */
    scale: number;
}
/**
 * Precomputed calibration factors for all six IMU axes.
 *
 * Per-sample application: `calibrated = clamp((raw − bias) × scale, −1, 1)`
 */
export interface ResolvedCalibration {
    gyroPitch: AxisCalibrationFactors;
    gyroYaw: AxisCalibrationFactors;
    gyroRoll: AxisCalibrationFactors;
    accelX: AxisCalibrationFactors;
    accelY: AxisCalibrationFactors;
    accelZ: AxisCalibrationFactors;
}
/** Identity calibration: zero bias, uniform 1/32767 scale */
export declare const DefaultResolvedCalibration: ResolvedCalibration;
/**
 * Parse Feature Report 0x05 into an {@link IMUCalibration}.
 *
 * The report may or may not include the report-ID byte as the first
 * element depending on platform — the parser auto-detects.
 */
export declare function parseIMUCalibration(buf: Uint8Array): IMUCalibration;
/**
 * Precompute per-axis bias and scale from raw calibration data.
 *
 * **Gyroscope:** Removes resting-state bias and normalises per-axis
 * sensitivity so that the same physical rotation rate produces the same
 * numeric value on all three axes.  The most-sensitive axis (largest
 * raw range) maps exactly to [-1, 1] at full scale; less-sensitive
 * axes are boosted to match, with ≤ 4% clipping at extreme values.
 *
 * **Accelerometer:** Removes the zero-point offset (manufacturing
 * tolerance) and normalises per-axis sensitivity the same way.
 */
export declare function resolveCalibration(cal: IMUCalibration): ResolvedCalibration;
/**
 * Read and parse IMU calibration from a connected controller.
 * Returns undefined if the report cannot be read.
 */
export declare function readIMUCalibration(provider: HIDProvider): Promise<IMUCalibration | undefined>;
/**
 * Assemble two raw report bytes into a signed int16.
 */
export declare function rawInt16(lo: number, hi: number): number;
/**
 * Apply precomputed calibration to a single axis sample.
 * `calibrated = clamp((raw − bias) × scale, −1, 1)`
 */
export declare function applyCal(raw: number, factors: AxisCalibrationFactors): number;
//# sourceMappingURL=calibration.d.ts.map