embedded-software
reusable software modules for embedded systems
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
i2c.h
Go to the documentation of this file.
1 /*
2  * File: i2c.h
3  * Author: Anthony Merlino
4  *
5  * Created on February 24, 2015, 11:03 PM
6  *
7  * Edited by: Nicholas Klein
8  * Edited on March 25, 2019
9  *
10  * Edited by: Stephen Glass
11  * Edited on April 12, 2019
12  * Added functionality to keep connection active after transaction
13  * Useful if you want to send repeated start condition for next transaction
14  */
15 
16 #ifndef _I2C_H_
17 #define _I2C_H_
18 
19 #include "project_settings.h"
20 #include "hal_i2c.h"
21 
22 #ifndef I2C_MAX_TX_SIZE
23 #define I2C_MAX_TX_SIZE 4
24 #endif
25 
26 #ifndef I2C_MAX_RX_SIZE
27 #define I2C_MAX_RX_SIZE 4
28 #endif
29 
30 #ifndef I2C_MAX_TRANSACTIONS
31 #define I2C_MAX_TRANSACTIONS 4
32 #endif
33 
37  uint16_t slave_address;
38  struct {
39  uint16_t writeLength : 4;
40  uint16_t readLength : 4;
41  uint16_t channel : 3;
42  uint16_t retryCount : 3;
43  uint16_t blocking : 1;
44  uint16_t finished : 1;
45  uint16_t error : 1;
46  uint16_t stayActive : 1; // doesn't send stop bit after transmitting
47  // enable if you want repeated-start signal SR on next transaction
48  };
49  void (*callback)(struct i2c_transaction);
50 };
51 
53 
54 #define TRANSACTION_FAILED 1
55 #define TRANSACTION_SUCCESSFUL 0
56 
57 void I2C_Init(i2c_settings_t* i2c_settings);
58 void I2C_Transact(i2c_transaction_t* transaction);
59 
60 uint8_t I2C_Tx_Handler(uint8_t channel);
61 void I2C_Rx_Handler(uint8_t channel, uint8_t byte);
62 
63 /******************************************
64  * HAL Support Functions
65  *****************************************/
66 uint16_t I2C_GetSlaveAddress(uint8_t channel);
67 uint8_t I2C_GetTxByte(uint8_t channel);
68 uint8_t I2C_GetTxSize(uint8_t channel);
69 uint8_t I2C_GetRxSize(uint8_t channel);
70 uint8_t I2C_GetStayActive(uint8_t channel);
71 void I2C_TransactionSuccess(uint8_t channel);
72 void I2C_TransactionFail(uint8_t channel);
73 
74 /******************************************
75  * HAL Functions
76  *****************************************/
77 
78 #ifndef hal_I2C_Init
79 void hal_I2C_Init(i2c_settings_t* settings);
80 #endif
81 
82 #ifndef hal_I2C_Enable
83 void hal_I2C_Enable(uint8_t channel);
84 #endif
85 
86 #ifndef hal_I2C_Disable
87 void hal_I2C_Disable(uint8_t channel);
88 #endif
89 
90 #ifndef hal_I2C_SendStart
91 void hal_I2C_SendStart(uint8_t channel);
92 #endif
93 
94 #ifndef hal_I2C_EnableInterrupts
95 void hal_I2C_EnableInterrupts(uint8_t channel);
96 #endif
97 
98 #ifndef hal_I2C_DisableInterrupts
100 #endif
101 
102 #endif // _I2C_H_
uint16_t finished
Definition: i2c.h:44
#define I2C_MAX_TX_SIZE
Definition: i2c.h:23
uint8_t I2C_Tx_Handler(uint8_t channel)
Definition: i2c.h:34
void I2C_Transact(i2c_transaction_t *transaction)
Definition: i2c.c:131
void hal_I2C_Enable(uint8_t channel)
Definition: hal_i2c.c:46
uint16_t I2C_GetSlaveAddress(uint8_t channel)
Definition: i2c.c:195
uint8_t I2C_GetStayActive(uint8_t channel)
Definition: i2c.c:215
void hal_I2C_DisableInterrupts(uint8_t channel)
Definition: hal_i2c.c:85
uint8_t readData[I2C_MAX_RX_SIZE]
Definition: i2c.h:36
uint8_t I2C_GetRxSize(uint8_t channel)
Definition: i2c.c:211
#define I2C_MAX_RX_SIZE
Definition: i2c.h:27
uint8_t I2C_GetTxByte(uint8_t channel)
Definition: i2c.c:203
void I2C_Rx_Handler(uint8_t channel, uint8_t byte)
Definition: i2c.c:199
void I2C_Init(i2c_settings_t *i2c_settings)
Definition: i2c.c:88
void(* callback)(struct i2c_transaction)
Definition: i2c.h:49
uint16_t error
Definition: i2c.h:45
uint16_t writeLength
Definition: i2c.h:39
uint16_t blocking
Definition: i2c.h:43
void I2C_TransactionFail(uint8_t channel)
Definition: i2c.c:225
uint8_t writeData[I2C_MAX_TX_SIZE]
Definition: i2c.h:35
void hal_I2C_SendStart(uint8_t channel)
Definition: hal_i2c.c:98
void hal_I2C_EnableInterrupts(uint8_t channel)
Definition: hal_i2c.c:72
uint16_t slave_address
Definition: i2c.h:37
uint16_t stayActive
Definition: i2c.h:46
uint8_t I2C_GetTxSize(uint8_t channel)
Definition: i2c.c:207
void hal_I2C_Disable(uint8_t channel)
Definition: hal_i2c.c:59
uint16_t retryCount
Definition: i2c.h:42
void I2C_TransactionSuccess(uint8_t channel)
Definition: i2c.c:219
uint16_t channel
Definition: i2c.h:41
Definition: hal_i2c.h:16
void hal_I2C_Init(i2c_settings_t *settings)
Definition: hal_i2c.c:18
uint16_t readLength
Definition: i2c.h:40