White balance lock#

Camera 1#

Sample code to monitor white balance lock state:

/** Reference on MainCamera peripheral. */
private var cameraRef: Ref<MainCamera>? = null

/** Monitors and prints white balance lock state. */
fun monitorWhiteBalanceLock(drone: Drone) {
    cameraRef = drone.getPeripheral(MainCamera::class.java) { camera ->
        // called on main thread when the camera peripheral changes
        camera?.run {
            whiteBalanceLock()?.apply {
                println("White balance lockable: $isLockable")
                println("White balance locked: $isLocked")
                println("White balance lock updating: $isUpdating")
            } ?: run {
                println("White balance lock not available")
            }
        }
    }
}

Example of output:

White balance lockable: true
White balance locked: false
White balance lock updating: false

Sample code to lock and unlock white balance:

/** Locks or unlocks white balance. */
fun lockWhiteBalance(drone: Drone, lock: Boolean) {
    drone.getPeripheral(MainCamera::class.java)?.run {
        whiteBalanceLock()?.lockCurrentValue(lock)
    }
}

Trying to change the lock value when isLockable is false will have no effect.

Camera 2#

Exposure lock is controlled with sub-component Camera.WhiteBalanceLock.

Sample code to monitor white balance lock state:

/** Reference on MainCamera peripheral. */
private var cameraRef: Ref<MainCamera>? = null
/** `MainCamera` peripheral. This is used to know when peripheral appears. */
private var mainCamera: Camera? = null

/** Monitors and prints white balance lock state. */
fun monitorWhiteBalanceLock(drone: Drone) {
    cameraRef = drone.getPeripheral(MainCamera::class.java) { camera ->
        // called on main thread when the camera peripheral changes
        camera?.run {
            // register sub-component listener, only when camera peripheral appears
            if (mainCamera == null) {
                // get notified every time white balance lock sub-component changes
                camera.component<Camera.WhiteBalanceLock> { whiteBalanceLock ->
                    whiteBalanceLock?.apply {
                        println("White balance lock mode: $mode")
                        println("White balance lock applying: $applying")
                    } ?: run {
                        println("White balance lock not available")
                    }
                }
            }
        }
        mainCamera = camera
    }
}

Example of output:

White balance lock mode: LOCKED
White balance lock applying: false

Sample code to lock and unlock white balance:

/** Locks white balance. */
fun lockWhiteBalance(drone: Drone) {
    drone.getPeripheral(MainCamera::class.java)?.run {
        component<Camera.WhiteBalanceLock>()?.apply {
            if (supportedModes.contains(Camera.WhiteBalanceLock.Mode.LOCKED)) {
                lock()
            } else {
                println("Can't lock white balance")
            }
        } ?: run {
            println("White balance lock not available")
        }
    }
}

/** Unlock white balance. */
fun unlockWhiteBalance(drone: Drone) {
    drone.getPeripheral(MainCamera::class.java)?.run {
        component<Camera.WhiteBalanceLock>()?.apply {
            if (supportedModes.contains(Camera.WhiteBalanceLock.Mode.UNLOCKED)) {
                unlock()
            } else {
                println("Can't lock white balance")
            }
        } ?: run {
            println("White balance lock not available")
        }
    }
}