// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef __FTDIGPIO_H__
#define __FTDIGPIO_H__

#include <ftdi.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>
#include <stdio.h>

#ifdef __cplusplus
extern "C" {
#endif

#define FGPIO_ERR_NONE   0
#define FGPIO_ERR_WR     1
#define FGPIO_ERR_RD     2
#define FGPIO_ERR_MASK   3
#define FGPIO_ERR_NOIMP  4

#define ERROR_FGPIO(ecode, ...)                 \
  fprintf(stderr, "-E- (%d) ", ecode);          \
  fprintf(stderr, __VA_ARGS__)

#ifndef DEBUG
#define DEBUG_FGPIO(...)
#else
#define DEBUG_FGPIO(...)                                        \
  fprintf(stderr, "DEBUG: %s:%u ", __FILE__, __LINE__);		\
  fprintf(stderr, __VA_ARGS__)
#endif

#define CHECK_FGPIO(fgpioc, fx, ...) do {           \
    DEBUG_FGPIO(__VA_ARGS__);                       \
    if ((fgpioc->error = fx) < 0) {                 \
      ERROR_FGPIO(fgpioc->error,__VA_ARGS__);       \
    }                                               \
  } while (0)

enum fgpio_type {
  TYPE_STANDARD,
  TYPE_CBUS
};

// Format direction and value bits for FTDI devices supporting UART + GPIO's
// (CBUS mode).
// The direction bits occupy the upper nibble.  A '1' means GPIO is an output a
// '0' means input
// The value bits occupy the lower nibble and are only applicable when the GPIO
// is an output.
#define FGPIO_CBUS_GPIO(dir, val) (((0xf & dir)<<4) | (0xf & val))

struct fgpio_context {
  // v--- DO NOT REORDER ---v
  struct ftdi_context *fc;
  struct gpio_s gpio;
  // ^--- DO NOT REORDER ---^
  int error;
};

int fgpio_init(struct fgpio_context *, struct ftdi_context *);
int fgpio_open(struct fgpio_context *, struct ftdi_common_args *);
int fgpio_wr_rd(struct fgpio_context *, struct gpio_s *, uint8_t *,
                enum ftdi_interface_type);
int fgpio_close(struct fgpio_context *);

#ifdef __cplusplus
}
#endif

#endif //__FTDIGPIO_H__
