/*
 * 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.hardware.weaver@1.0;

enum WeaverStatus : uint32_t {
    OK,
    FAILED,
};

struct WeaverConfig {
    /** The number of slots available. */
    uint32_t slots;
    /** The number of bytes used for a key. */
    uint32_t keySize;
    /** The number of bytes used for a value. */
    uint32_t valueSize;
};

enum WeaverReadStatus : WeaverStatus {
    INCORRECT_KEY,
    THROTTLE,
};

struct WeaverReadResponse {
    /** The time to wait, in milliseconds, before making the next request. */
    uint32_t timeout;
    /** The value read from the slot or empty if the value was not read. */
    vec<uint8_t> value;
};
