/*
 * Copyright (C) 2017 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.car.diagnostic;

import android.car.diagnostic.CarDiagnosticEvent;
import android.car.diagnostic.ICarDiagnosticEventListener;

/** @hide */
interface ICarDiagnostic {
    /**
     * Register a callback (or update registration) for diagnostic events.
     */
    boolean registerOrUpdateDiagnosticListener(int frameType, int rate,
        in ICarDiagnosticEventListener listener) = 1;

    /**
     * Get the value for the most recent live frame data available.
     */
    CarDiagnosticEvent getLatestLiveFrame() = 2;

    /**
     * Get the list of timestamps for which there exist a freeze frame stored.
     */
    long[] getFreezeFrameTimestamps() = 3;

    /**
     * Get the value for the freeze frame stored given a timestamp.
     */
    CarDiagnosticEvent getFreezeFrame(long timestamp) = 4;

    /**
     * Erase freeze frames given timestamps (or all, if no timestamps).
     */
     boolean clearFreezeFrames(in long[] timestamps) = 5;

    /**
     * Stop receiving diagnostic events for a given callback.
     */
     void unregisterDiagnosticListener(int frameType,
         in ICarDiagnosticEventListener callback) = 6;

    /**
     * Returns whether the underlying HAL supports live frames.
     */
     boolean isLiveFrameSupported() = 7;

    /**
     * Returns whether the underlying HAL supports sending notifications to
     * registered listeners when new freeze frames happen.
     */
     boolean isFreezeFrameNotificationSupported() = 8;

    /**
     * Returns whether the underlying HAL supports retrieving freeze frames
     * stored in vehicle memory using timestamp.
     */
     boolean isGetFreezeFrameSupported() = 9;

    /**
     * Returns whether the underlying HAL supports clearing freeze frames.
     */
     boolean isClearFreezeFramesSupported() = 10;

    /**
     * Returns whether the underlying HAL supports clearing specific freeze frames specified
     * by means of their timestamps.
     */
     boolean isSelectiveClearFreezeFramesSupported() = 11;
}
