/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware.tests.extension.light@2.0;

// If importing something from the same package, the preference is:
// import @2.0::Foo. However, since this isn't a minor version upgrade
// we have to use the fully-qualified names here.
import android.hardware.light@2.0::Brightness;
import android.hardware.light@2.0::LightState;

enum Default : int32_t {
    // for calls to setLight from the framework that don't know about this
    // extension or its requirements
    INTERPOLATION_OMEGA = 2
};

/**
 * One possibility is renaming an old type. Another possibility is taking
 * advantages of the different namespaces.
 */
enum Brightness : android.hardware.light@2.0::Brightness {
    /**
     * Say we're really going to use the phone as a heater.
     */
    EXTREME,

    /**
     * Sometimes at night, we need it to be day.
     */
    THE_SUN,
};

/**
 * Structs can't inherit eachother in hidl. Use composition instead. In this
 * case, I won't use inheritence because I want to replace Brightness with
 * the new enumeration.
 */
struct LightState {
    android.hardware.light@2.0::LightState state;

    /**
     * This is the secret sauce that will really make this extension shine.
     * No other person has such a cool feature in their hals. Don't forget
     * to describe all details of parameters. An interface is a contract, and
     * specifying this contract to the letter is what allows that contracted
     * to be maintained. :)
     *
     * So, this parameter represents the speed at which brightness is changed
     * to the new value in the three dimensional space with coordinates RGB
     * from the red, blue, and green.
     */
    int32_t interpolationOmega;

    /**
     * Include new values.
     */
    Brightness brightness;
};
