Tool Libs
UMIT-TIROL Institute of Automation and Control Engineering library collection
 
Loading...
Searching...
No Matches
i2c.h
Go to the documentation of this file.
1
5#pragma once
6#include <utils/queue.h>
7#include <utils/deadline.h>
8
9#include "gpio.h"
10#include "registry.h"
11namespace I2C {
12class Request; //< forward declaration
21struct Device {
22 Sink<Request> &bus;
24 const uint8_t address;
26 Device(Sink<Request> &bus, uint8_t address) : bus(bus), address(address) {}
30 virtual void callback(const Request &req)=0;
31};
32
37struct Request {
40 union Type {
41 struct {
42 uint8_t read:1;
43 uint8_t slave:1;
44 uint8_t mem:1;
45 };
46 enum {
47 MASTER_WRITE,
48 MASTER_READ,
49 SLAVE_WRITE,
50 SLAVE_READ,
51 MEM_WRITE,
52 MEM_READ,
53 } type;
54 } opts;
61 uint8_t mem;
62};
63
65struct HW : public Sink<Request> {
66 inline static Registry<HW, I2C_HandleTypeDef, 4> reg{};
67
68 Queue<Request> q; //< master
69 Request in, out; //< slave
70 Deadline deadline{};
71 enum {NONE, IN, OUT, Q} active{};
72
74 struct Conf {
75 I2C_TypeDef *i2c;
76 AFIO sda, scl;
77 uint32_t baud;
78 uint32_t address;
79 };
81 HW(const Conf &conf);
83 bool full() override;
84 void push(Request &&rq) override;
85 using Sink<Request>::push;
86 void irqEvHandler();
87 void irqErHandler();
88 I2C_HandleTypeDef handle{};
89};
90}
Wrapper class for pins in alternate configuration mode.
Definition gpio.h:60
simple Buffer backed queue implementation
Definition queue.h:12
registry that maps classes to HAL handles
Definition registry.h:13
Copyright (c) 2023 IACE.
Copyright (c) 2020 IACE.
Copyright (c) 2023 IACE.
Copyright (c) 2023 IACE.
dynamically allocated, but fixed-size buffer template
Definition buffer.h:18
simple solution for keeping track of timeouts
Definition deadline.h:15
generic I2C device wrapper.
Definition i2c.h:21
const uint8_t address
unshifted 7bit I2C device address
Definition i2c.h:24
virtual void callback(const Request &req)=0
callback.
Device(Sink< Request > &bus, uint8_t address)
construct device on bus with given address
Definition i2c.h:26
I2C Peripheral Driver.
Definition i2c.h:65
uint32_t baud
baud-rate
Definition i2c.h:77
AFIO scl
initialized (Open-Drain) pins
Definition i2c.h:76
bool full() override
no need to call this before pushing SLAVE requests
Definition i2c.cpp:113
I2C_TypeDef * i2c
I2C peripheral.
Definition i2c.h:75
uint32_t address
unshifted 7-bit address to respond to as slave
Definition i2c.h:78
bus configuration
Definition i2c.h:74
struct defining an I2C request.
Definition i2c.h:37
Buffer< uint8_t > data
transfer data
Definition i2c.h:39
uint8_t mem
memory address for memory transmissions
Definition i2c.h:61
Device * dev
pointer to the calling I2C::Device instance
Definition i2c.h:38
union I2C::Request::Type opts
transfer options.
generic object sink, i.e.
Definition streams.h:15