Kamcho Library 02.00.03  lib.kamcho.02.00.03.287
i2c_device.h
Go to the documentation of this file.
1 
12 #ifndef __I2C_DEVICE_H__
13 #define __I2C_DEVICE_H__
14 
15 #include <stdint.h>
16 #include <stdbool.h>
17 #include "hdf.h"
18 #include "errno.h"
19 
20 #define I2C_DEVICE_BUFFER_SIZE 64
21 
25 enum {
33 };
34 
38 typedef struct I2C_Device_SlaveInfo_Type {
39  uint8_t SlaveAddrLen;
42  uint16_t SlaveAddr;
43  uint16_t SlaveAddrMask;
44  uint16_t Speed;
46 
51  uint8_t SlaveAddrLen;
53  uint16_t Speed;
55 
59 typedef struct {
60  uint8_t status;
61  uint8_t data;
62  uint8_t counter;
63  uint8_t collision;
64  uint8_t address;
65  uint8_t state;
66  uint8_t read_index;
67  uint8_t write_index;
68  uint8_t read_len;
69  uint8_t write_len;
70  uint8_t read_buf[I2C_DEVICE_BUFFER_SIZE];
71  uint8_t write_buf[I2C_DEVICE_BUFFER_SIZE];
72  uint8_t mode;
73  uint8_t opmode;
74 } I2C_State_t;
75 
79 typedef struct I2C_Device_Type {
80  void (*Enable)(void);
81  void (*Disable)(void);
82  uint8_t (*ReadData)(void);
83  uint8_t (*GetStatus)(void);
84  void (*WriteData)(uint8_t data);
85  void (*SlaveClockStretch)(void);
86  void (*SlaveReleaseClock)(void);
87  void (*MasterRepeatStart)(void);
88  void (*MasterReceiveStart)(void);
89  void (*MasterIssueNack)(void);
90  void (*MasterIssueAck)(void);
91  void (*MasterIssueStop)(void);
92  void (*MasterIssueStart)(void);
93  uint8_t (*StartBitReceived)(void);
94  void (*Set7BitSlaveAddr)(void);
95  void (*Set10BitSlaveAddr)(void);
96  void (*SetMasterMode)(void);
97  void (*SetSlaveMode)(void);
98  void (*SlaveEnableGeneralCall)(void);
99  void (*SlaveDisableGeneralCall)(void);
100  void (*EnableFilter)(void);
101  void (*DisableFilter)(void);
102  void (*SetSlaveAddress)(uint16_t addr);
103  void (*SetSlaveAddressMask)(uint16_t mask);
104  void (*SetClockDivider)(uint8_t div);
107  char *Name;
109 } I2C_Device_t;
110 
117 I2C_Device_t *I2C_devGetDevice(const char *name);
118 
127 
136 
143 int32_t I2C_devReset(I2C_Device_t *dev);
144 
154 int32_t I2C_devMasterSendData(I2C_Device_t *dev, uint16_t addr, uint8_t *data, uint32_t len);
155 
164 int32_t I2C_devMasterReadRequest(I2C_Device_t *dev, uint16_t addr, uint32_t len);
165 
176 int32_t I2C_devMasterRegisterReadRequest(I2C_Device_t *dev, uint16_t slave_addr,
177  uint8_t *reg_addr, uint8_t addrlen, uint8_t datalen);
178 
187 int32_t I2C_devMasterReadResult(I2C_Device_t *dev, uint8_t *data, uint32_t len);
188 
195 int32_t I2C_devIsInProgress(I2C_Device_t *dev);
196 
203 int32_t I2C_devEnable(I2C_Device_t *dev);
204 
211 int32_t I2C_devDisable(I2C_Device_t *dev);
212 
221 int32_t I2C_devSlaveSetResponseData(I2C_Device_t *dev, uint8_t *array, uint32_t len);
222 
231 int32_t I2C_devSlaveReadResult(I2C_Device_t *dev, uint8_t *array, uint32_t len);
232 
240 
248 
255 int32_t I2C_devSlaveRestart(I2C_Device_t *dev);
256 
257 #endif /* __I2C_DEVICE_H__ */
void(* Set10BitSlaveAddr)(void)
Definition: i2c_device.h:95
struct I2C_Device_MasterInfo_Type I2C_Device_MasterInfo_t
A structure to represent I2C master device initialization information.
int32_t I2C_devEnable(I2C_Device_t *dev)
Enable I2C hardware module.
Definition: i2c_device.c:135
int32_t I2C_devMasterReadResult(I2C_Device_t *dev, uint8_t *data, uint32_t len)
Read data from I2C master device, the data is the result of last read request.
Definition: i2c_device.c:290
IRQn_Type IRQ
Definition: i2c_device.h:105
int32_t I2C_devSlaveDataReceived(I2C_Device_t *dev)
Check how many bytes received by I2C slave module.
Definition: i2c_device.c:220
int32_t I2C_devMasterRegisterReadRequest(I2C_Device_t *dev, uint16_t slave_addr, uint8_t *reg_addr, uint8_t addrlen, uint8_t datalen)
Send a register read request to I2C master device.
Definition: i2c_device.c:321
void(* MasterReceiveStart)(void)
Definition: i2c_device.h:88
bool FilterEnable
Definition: i2c_device.h:52
int32_t I2C_devDisable(I2C_Device_t *dev)
Disable I2C hardware module.
Definition: i2c_device.c:145
void(* SetSlaveMode)(void)
Definition: i2c_device.h:97
Definition: i2c_device.h:28
void(* SlaveClockStretch)(void)
Definition: i2c_device.h:85
void(* SlaveEnableGeneralCall)(void)
Definition: i2c_device.h:98
void(* Disable)(void)
Definition: i2c_device.h:81
uint8_t address
Definition: i2c_device.h:64
int32_t I2C_devReset(I2C_Device_t *dev)
Reset I2C master device.
Definition: i2c_device.c:155
A structure to represent I2C master device initialization information.
Definition: i2c_device.h:50
uint8_t(* ReadData)(void)
Definition: i2c_device.h:82
void(* MasterIssueNack)(void)
Definition: i2c_device.h:89
void(* SlaveDisableGeneralCall)(void)
Definition: i2c_device.h:99
int32_t I2C_devMasterSendData(I2C_Device_t *dev, uint16_t addr, uint8_t *data, uint32_t len)
Send a data block through I2C master device.
Definition: i2c_device.c:271
uint8_t(* GetStatus)(void)
Definition: i2c_device.h:83
int32_t I2C_devMasterReadRequest(I2C_Device_t *dev, uint16_t addr, uint32_t len)
Send a read request to I2C master device.
Definition: i2c_device.c:302
uint8_t read_len
Definition: i2c_device.h:68
uint8_t state
Definition: i2c_device.h:65
uint16_t Speed
Definition: i2c_device.h:53
Definition: i2c_device.h:30
uint16_t Speed
Definition: i2c_device.h:44
IRQn_Type CollisionIRQ
Definition: i2c_device.h:106
int32_t I2C_devSlaveReadResult(I2C_Device_t *dev, uint8_t *array, uint32_t len)
Read data from I2C slave module.
Definition: i2c_device.c:209
int32_t I2C_devSlaveSetResponseData(I2C_Device_t *dev, uint8_t *array, uint32_t len)
Set response data to I2C slave module.
Definition: i2c_device.c:196
void(* WriteData)(uint8_t data)
Definition: i2c_device.h:84
A structure to represent I2C slave device initialization information.
Definition: i2c_device.h:38
uint8_t counter
Definition: i2c_device.h:62
uint8_t status
Definition: i2c_device.h:60
A structure to represent I2C device state.
Definition: i2c_device.h:59
void(* SlaveReleaseClock)(void)
Definition: i2c_device.h:86
void(* MasterIssueStop)(void)
Definition: i2c_device.h:91
uint16_t SlaveAddr
Definition: i2c_device.h:42
void(* SetSlaveAddressMask)(uint16_t mask)
Definition: i2c_device.h:103
int32_t I2C_devSlaveInit(I2C_Device_t *dev, I2C_Device_SlaveInfo_t *info)
Initialize I2C slave device.
Definition: i2c_device.c:167
#define I2C_DEVICE_BUFFER_SIZE
Definition: i2c_device.h:20
uint8_t SlaveAddrLen
Definition: i2c_device.h:39
uint8_t write_len
Definition: i2c_device.h:69
bool GeneralCallEnable
Definition: i2c_device.h:40
void(* SetClockDivider)(uint8_t div)
Definition: i2c_device.h:104
void(* Enable)(void)
Definition: i2c_device.h:80
uint8_t data
Definition: i2c_device.h:61
Definition: i2c_device.h:27
int32_t I2C_devIsInProgress(I2C_Device_t *dev)
Check if I2C master device is busy in last transation.
Definition: i2c_device.c:264
char * Name
Definition: i2c_device.h:107
uint8_t write_index
Definition: i2c_device.h:67
uint8_t(* StartBitReceived)(void)
Definition: i2c_device.h:93
uint8_t opmode
Definition: i2c_device.h:73
Definition: i2c_device.h:26
struct I2C_Device_SlaveInfo_Type I2C_Device_SlaveInfo_t
A structure to represent I2C slave device initialization information.
enum IRQn IRQn_Type
The enumeration of Interrupt Number Assignments.
void(* MasterIssueAck)(void)
Definition: i2c_device.h:90
int32_t I2C_devMasterInit(I2C_Device_t *dev, I2C_Device_MasterInfo_t *info)
Initialize I2C master device.
Definition: i2c_device.c:247
struct I2C_Device_Type I2C_Device_t
A structure to represent I2C device.
Definition: i2c_device.h:32
void(* MasterRepeatStart)(void)
Definition: i2c_device.h:87
int32_t I2C_devSlaveDataResponsed(I2C_Device_t *dev)
Check how many bytes has been read by a I2C master.
Definition: i2c_device.c:227
void(* Set7BitSlaveAddr)(void)
Definition: i2c_device.h:94
uint16_t SlaveAddrMask
Definition: i2c_device.h:43
uint8_t read_index
Definition: i2c_device.h:66
bool FilterEnable
Definition: i2c_device.h:41
void(* SetMasterMode)(void)
Definition: i2c_device.h:96
Definition: i2c_device.h:29
Definition: i2c_device.h:31
int32_t I2C_devSlaveRestart(I2C_Device_t *dev)
Restart next I2C cycle as a slave.
Definition: i2c_device.c:234
I2C_State_t * state
Definition: i2c_device.h:108
uint8_t collision
Definition: i2c_device.h:63
I2C_Device_t * I2C_devGetDevice(const char *name)
Request a I2C Device.
Definition: i2c_device.c:124
void(* SetSlaveAddress)(uint16_t addr)
Definition: i2c_device.h:102
A structure to represent I2C device.
Definition: i2c_device.h:79
void(* MasterIssueStart)(void)
Definition: i2c_device.h:92
void(* EnableFilter)(void)
Definition: i2c_device.h:100
uint8_t SlaveAddrLen
Definition: i2c_device.h:51
void(* DisableFilter)(void)
Definition: i2c_device.h:101
uint8_t mode
Definition: i2c_device.h:72