libDaisy
Hardware Library for Daisy
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
i2c.h
Go to the documentation of this file.
1#pragma once
2#include "util/hal_map.h"
3#include "daisy_core.h"
4
5namespace daisy
6{
26{
27 public:
29 struct Config
30 {
32 enum class Mode
33 {
36 };
37
39 enum class Peripheral
40 {
41 I2C_1 = 0,
42 I2C_2,
43 I2C_3,
44 I2C_4,
45 };
46
50 enum class Speed
51 {
54 I2C_1MHZ,
55 };
56
58 struct
59 {
66 // 0x10 is chosen as a default to avoid conflicts with reserved addresses
67 uint8_t address = 0x10;
68 };
69
71 enum class Result
72 {
73 OK,
74 ERR
75 };
76
77 enum class Direction
78 {
79 TRANSMIT,
80 RECEIVE,
81 };
82
83 I2CHandle() : pimpl_(nullptr) {}
84 I2CHandle(const I2CHandle& other) = default;
85 I2CHandle& operator=(const I2CHandle& other) = default;
86
88 Result Init(const Config& config);
89
91 const Config& GetConfig() const;
92
101 Result TransmitBlocking(uint16_t address,
102 uint8_t* data,
103 uint16_t size,
104 uint32_t timeout);
105
114 Result ReceiveBlocking(uint16_t address,
115 uint8_t* data,
116 uint16_t size,
117 uint32_t timeout);
118
120 typedef void (*CallbackFunctionPtr)(void* context, Result result);
121
141 Result TransmitDma(uint16_t address,
142 uint8_t* data,
143 uint16_t size,
144 CallbackFunctionPtr callback,
145 void* callback_context);
146
166 Result ReceiveDma(uint16_t address,
167 uint8_t* data,
168 uint16_t size,
169 CallbackFunctionPtr callback,
170 void* callback_context);
171
189 Result ReadDataAtAddress(uint16_t address,
190 uint16_t mem_address,
191 uint16_t mem_address_size,
192 uint8_t* data,
193 uint16_t data_size,
194 uint32_t timeout);
195
213 Result WriteDataAtAddress(uint16_t address,
214 uint16_t mem_address,
215 uint16_t mem_address_size,
216 uint8_t* data,
217 uint16_t data_size,
218 uint32_t timeout);
219
220
221 class Impl;
223 private:
224 Impl* pimpl_;
225};
226
227extern "C"
228{
231};
232
233} // namespace daisy
Definition i2c.h:26
I2CHandle(const I2CHandle &other)=default
const Config & GetConfig() const
Result ReadDataAtAddress(uint16_t address, uint16_t mem_address, uint16_t mem_address_size, uint8_t *data, uint16_t data_size, uint32_t timeout)
Result TransmitDma(uint16_t address, uint8_t *data, uint16_t size, CallbackFunctionPtr callback, void *callback_context)
Result Init(const Config &config)
I2CHandle()
Definition i2c.h:83
Result
Definition i2c.h:72
Result ReceiveBlocking(uint16_t address, uint8_t *data, uint16_t size, uint32_t timeout)
I2CHandle & operator=(const I2CHandle &other)=default
Direction
Definition i2c.h:78
void(*) CallbackFunctionPtr(void *context, Result result)
Definition i2c.h:120
Result TransmitBlocking(uint16_t address, uint8_t *data, uint16_t size, uint32_t timeout)
Result ReceiveDma(uint16_t address, uint8_t *data, uint16_t size, CallbackFunctionPtr callback, void *callback_context)
Result WriteDataAtAddress(uint16_t address, uint16_t mem_address, uint16_t mem_address_size, uint8_t *data, uint16_t data_size, uint32_t timeout)
Hardware defines and helpers for daisy field platform.
Definition index.h:2
void dsy_i2c_global_init()
Definition i2c.h:30
Mode
Definition i2c.h:33
struct daisy::I2CHandle::Config::@15 pin_config
Mode mode
Definition i2c.h:65
Pin scl
Definition i2c.h:60
Speed
Definition i2c.h:51
Speed speed
Definition i2c.h:64
uint8_t address
Definition i2c.h:67
Peripheral periph
Definition i2c.h:57
Peripheral
Definition i2c.h:40
Pin sda
Definition i2c.h:61
representation of hardware port/pin combination
Definition daisy_core.h:193