// 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 ddk.protocol.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 {
    vector<voidptr> data;
    bool is_read;
    bool stop;
};

[Layout = "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, usize size);
    GetInterrupt(uint32 flags) -> (zx.status s, handle<interrupt> irq);
};
