1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-10 18:24:11 +01:00
LibrePilot/flight/PiOS/inc/pios_i2c.h
peabody124 21b4e55029 OP-14 OP-16: I2C Improvements
1) Added nack counter monitoring
2) Made timeout for getting semaphore in I2C user space code use the one from
driver and record timeouts.  This does not influence timeouts in the non
FreeRTOS case
3) Remove case block from the error handler so that all bus errors reset the
i2c interface

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2469 ebee16cc-31ac-478f-84a7-5cbb03baadba
2011-01-17 02:11:12 +00:00

80 lines
2.2 KiB
C

/**
******************************************************************************
* @addtogroup PIOS PIOS Core hardware abstraction layer
* @{
* @addtogroup PIOS_I2C I2C Functions
* @{
*
* @file pios_i2c.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Thorsten Klose (tk@midibox.org)
* @brief I2C functions header.
* @see The GNU Public License (GPL) Version 3
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PIOS_I2C_H
#define PIOS_I2C_H
#define PIOS_I2C_DIAGNOSTICS
#include <stdbool.h>
/* Global Types */
enum pios_i2c_txn_direction {
PIOS_I2C_TXN_READ,
PIOS_I2C_TXN_WRITE
};
struct pios_i2c_txn {
const char *info;
uint16_t addr;
enum pios_i2c_txn_direction rw;
uint32_t len;
uint8_t *buf;
};
#define I2C_LOG_DEPTH 5
enum pios_i2c_error_type {
PIOS_I2C_ERROR_EVENT,
PIOS_I2C_ERROR_FSM,
PIOS_I2C_ERROR_INTERRUPT
};
struct pios_i2c_fault_history {
enum pios_i2c_error_type type;
uint32_t evirq[I2C_LOG_DEPTH];
uint32_t erirq[I2C_LOG_DEPTH];
uint8_t event[I2C_LOG_DEPTH];
uint8_t state[I2C_LOG_DEPTH];
};
/* Public Functions */
extern int32_t PIOS_I2C_Init(void);
extern bool PIOS_I2C_Transfer(uint8_t i2c, const struct pios_i2c_txn txn_list[], uint32_t num_txns);
extern void PIOS_I2C_EV_IRQ_Handler(uint8_t i2c);
extern void PIOS_I2C_ER_IRQ_Handler(uint8_t i2c);
extern void PIOS_I2C_GetDiagnostics(struct pios_i2c_fault_history * data, uint8_t * error_counts);
#endif /* PIOS_I2C_H */
/**
* @}
* @}
*/