// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.hardware.i2c;

using zx;

const uint32 I2C_10_BIT_ADDR_MASK = 0xF000;
const uint32 I2C_MAX_RW_OPS = 8;
const uint32 I2C_MAX_TOTAL_TRANSFER = 4096;

/// See `Transact` below for usage.
struct I2cOp {
    [Buffer] vector<uint8> data;
    bool is_read;
    bool stop;
};

[Transport = "Banjo", BanjoLayout = "ddk-protocol", HandleWrappers]
protocol I2c {
    /// Writes and reads data on an i2c channel. Up to I2C_MAX_RW_OPS operations can be passed in
    /// with a maximum of I2C_MAX_TOTAL_TRANSFER total bytes transfered.
    /// For write ops, i2c_op_t.data points to data to write.  The data to write does not need to be
    /// kept alive after this call.  For read ops, i2c_op_t.data is ignored.  Any combination of
    /// reads and writes can be specified.  At least the last op must have the stop flag set.
    /// The results of the operations are returned asynchronously via the transact_cb.
    /// The cookie parameter can be used to pass your own private data to the transact_cb callback.
    [Async]
    Transact(vector<I2cOp> op) -> (zx.status status, vector<I2cOp> op);
    /// Returns the maximum transfer size for read and write operations on the channel.
    GetMaxTransferSize() -> (zx.status s, uint64 size);
    GetInterrupt(uint32 flags) -> (zx.status s, zx.handle:INTERRUPT irq);
};
