Subversion Repositories idreammicro-avr

Rev

Rev 31 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

/**************************************************************************//**
 * \brief MCP23008 library
 * \author Copyright (C) 2012  Julien Le Sech - www.idreammicro.com
 * \version 1.0
 * \date 20121025
 *
 * This file is part of the iDreamMicro library.
 *
 * This library is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/
 ******************************************************************************/


/**************************************************************************//**
 * \headerfile mcp23008.h
 ******************************************************************************/


#ifndef H__IDREAMMICRO__MCP23008__H
#define H__IDREAMMICRO__MCP23008__H

#ifdef _cplusplus
extern "C"{
#endif

/******************************************************************************
 * Header file inclusions.
 ******************************************************************************/


#include <stdint.h>

/******************************************************************************
 * Public macro definitions.
 ******************************************************************************/


/**************************************************************************//**
 * \def     MCP23008__CLOCK_RATE
 * \brief   MCP23008 frequency in Hertz.
 * On ATmega, can be 100 kHz or 400 Khz.
 ******************************************************************************/

#define MCP23008__CLOCK_RATE    400000

/******************************************************************************
 * MCP23008 GPIOs.
 ******************************************************************************/


/**************************************************************************//**
 * \def     MCP23008__GP0
 * \brief   I/O pin 0.
 ******************************************************************************/

#define MCP23008__GP0   0

/**************************************************************************//**
 * \def     MCP23008__GP1
 * \brief   I/O pin 1.
 ******************************************************************************/

#define MCP23008__GP1   1

/**************************************************************************//**
 * \def     MCP23008__GP2
 * \brief   I/O iin 2.
 ******************************************************************************/

#define MCP23008__GP2   2

/**************************************************************************//**
 * \def     MCP23008__GP3
 * \brief   I/O pin 3.
 ******************************************************************************/

#define MCP23008__GP3   3

/**************************************************************************//**
 * \def     MCP23008__GP4
 * \brief   I/O pin 4.
 ******************************************************************************/

#define MCP23008__GP4   4

/**************************************************************************//**
 * \def     MCP23008__GP5
 * \brief   I/O pin 5.
 ******************************************************************************/

#define MCP23008__GP5   5

/**************************************************************************//**
 * \def     MCP23008__GP6
 * \brief   I/O pin 6.
 ******************************************************************************/

#define MCP23008__GP6   6

/**************************************************************************//**
 * \def     MCP23008__GP7
 * \brief   I/O pin 7.
 ******************************************************************************/

#define MCP23008__GP7   7

/******************************************************************************
 * Public type definitions.
 ******************************************************************************/


/**************************************************************************//**
 * \enum mcp23008__directions
 * \brief MCP23008 pin/port directions.
 *
 * \typedef mcp23008__direction_t
 * \brief MCP23008 pin/port direction.
 ******************************************************************************/

typedef enum mcp23008__directions
{
    MCP23008__DIRECTION__INPUT, /*!<  Input. */
    MCP23008__DIRECTION__OUTPUT /*!<  Output. */
} mcp23008__direction_t;

/**************************************************************************//**
 * \enum mcp23008__levels
 * \brief MCP23008 GPIO levels.
 *
 * \typedef mcp23008__level_t
 * \brief MCP23008 GPIO level.
 ******************************************************************************/

typedef enum mcp23008__levels
{
    MCP23008__LEVEL__LOW,   /*!<  Low level. */
    MCP23008__LEVEL__HIGH   /*!<  High level. */
} mcp23008__level_t;

/**************************************************************************//**
 * \typedef mcp23008__gpio_t
 * \brief
 ******************************************************************************/

typedef uint8_t mcp23008__gpio_t;

/******************************************************************************
 * Public function prototypes.
 ******************************************************************************/


/**************************************************************************//**
 * \fn void mcp23008__initialize(uint8_t hardware_address)
 *
 * \brief Initialize MCP23008.
 *
 * \param hardware_address  Hardware address defined by pins A0 to A2.
 ******************************************************************************/

void
mcp23008__initialize
(
    uint8_t hardware_address
);

/**************************************************************************//**
 * \fn void mcp23008__configure pin(
 * mcp23008__gpio_t         pin,
 * mcp23008__direction_t    direction)
 *
 * \brief Configure pin direction.
 *
 * \param pin       Pin to configure.
 * \param direction Pin direction.
 ******************************************************************************/

void
mcp23008__configure_pin
(
    mcp23008__gpio_t        pin,
    mcp23008__direction_t   direction
);

/**************************************************************************//**
 * \fn void mcp23008__configure_port(mcp23008__direction_t direction)
 *
 * \brief Configure port direction.
 *
 * \param direction Port direction.
 ******************************************************************************/

void
mcp23008__configure_port
(
    mcp23008__direction_t direction
);

/**************************************************************************//**
 * \fn mcp23008__level_t mcp23008__get_pin_level(mcp23008__gpio_t pin)
 *
 * \brief Get pin level.
 *
 * \param pin   Pin to get level.
 *
 * \return Pin level.
 ******************************************************************************/

mcp23008__level_t
mcp23008__get_pin_level
(
    mcp23008__gpio_t pin
);

/**************************************************************************//**
 * \fn void mcp23008__set_pin_level(
 * mcp23008__gpio_t     pin,
 * mcp23008__level_t    level)
 *
 * \brief Set pin level.
 *
 * \param pin   Pin to set level.
 * \param level Level to set.
 ******************************************************************************/

void
mcp23008__set_pin_level
(
    mcp23008__gpio_t    pin,
    mcp23008__level_t   level
);

/**************************************************************************//**
 * \fn uin8_t mcp23008__get_port_value(void)
 *
 * \brief Get port value.
 *
 * \return Port value.
 ******************************************************************************/

uint8_t
mcp23008__get_port_value
(
    void
);

/**************************************************************************//**
 * \fn void mcp23008__set_port_value(uint8_t value)
 *
 * \brief Set port value.
 *
 * \param value Value to set.
 ******************************************************************************/

void
mcp23008__set_port_value
(
    uint8_t value
);

#ifdef _cplusplus
}
#endif

#endif /* H__IDREAMMICRO__MCP23008__H */