File i2c.h¶
File List > external-docs > libDaisy > src > per > i2c.h
Go to the documentation of this file
Source Code¶
#pragma once
#include "util/hal_map.h"
#include "daisy_core.h"
namespace daisy
{
class I2CHandle
{
public:
struct Config
{
enum class Mode
{
I2C_MASTER,
I2C_SLAVE,
};
enum class Peripheral
{
I2C_1 = 0,
I2C_2,
I2C_3,
I2C_4,
};
enum class Speed
{
I2C_100KHZ,
I2C_400KHZ,
I2C_1MHZ,
};
Peripheral periph;
struct
{
Pin scl;
Pin sda;
} pin_config;
Speed speed;
Mode mode;
// 0x10 is chosen as a default to avoid conflicts with reserved addresses
uint8_t address = 0x10;
};
enum class Result
{
OK,
ERR
};
enum class Direction
{
TRANSMIT,
RECEIVE,
};
I2CHandle() : pimpl_(nullptr) {}
I2CHandle(const I2CHandle& other) = default;
I2CHandle& operator=(const I2CHandle& other) = default;
Result Init(const Config& config);
const Config& GetConfig() const;
Result TransmitBlocking(uint16_t address,
uint8_t* data,
uint16_t size,
uint32_t timeout);
Result ReceiveBlocking(uint16_t address,
uint8_t* data,
uint16_t size,
uint32_t timeout);
typedef void (*CallbackFunctionPtr)(void* context, Result result);
Result TransmitDma(uint16_t address,
uint8_t* data,
uint16_t size,
CallbackFunctionPtr callback,
void* callback_context);
Result ReceiveDma(uint16_t address,
uint8_t* data,
uint16_t size,
CallbackFunctionPtr callback,
void* callback_context);
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 WriteDataAtAddress(uint16_t address,
uint16_t mem_address,
uint16_t mem_address_size,
uint8_t* data,
uint16_t data_size,
uint32_t timeout);
class Impl;
private:
Impl* pimpl_;
};
extern "C"
{
void dsy_i2c_global_init();
};
} // namespace daisy