YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
src
drivers
i2c
soft_i2c_slave_states.h
1
// ---------------------------------------------
2
// This file is part of
3
// _ _ __ _ _ __ __
4
// ( \/ ) /__\ ( )_( ) /__\ ( )
5
// \ / /(__)\ ) _ ( /(__)\ )(__
6
// (__)(__)(__)(_) (_)(__)(__)(____)
7
//
8
// Yet Another HW Abstraction Library
9
// Copyright (C) Andreas Terstegge
10
// BSD Licensed (see file LICENSE)
11
//
12
// ---------------------------------------------
13
//
14
// This class is used by the soft_i2c_slave driver.
15
// It implements all necessary states for the state
16
// machine, which processes the SDA and SCL line
17
// changes. The state pattern (GoF) is used!
18
19
#ifndef _SOFT_I2C_SLAVE_STATES_H_
20
#define _SOFT_I2C_SLAVE_STATES_H_
21
22
#include <cstdint>
23
24
class
soft_i2c_slave
;
25
26
namespace
I2C
27
{
28
29
class
STATE
{
30
public
:
31
STATE
(
soft_i2c_slave
& c) : _context(c) {}
32
33
virtual
void
enter() { }
34
virtual
void
leave() { }
35
36
void
start();
37
void
stop();
38
virtual
void
high() { }
39
virtual
void
low() { }
40
virtual
void
scl_falling() { }
41
42
virtual
~STATE
() { }
43
44
protected
:
45
soft_i2c_slave
& _context;
46
};
47
48
class
IDLE
:
public
STATE
{
49
public
:
50
IDLE
(
soft_i2c_slave
& c) :
STATE
(c) {}
51
void
enter()
override
;
52
};
53
54
class
READ_ADDR
:
public
STATE
{
55
public
:
56
READ_ADDR
(
soft_i2c_slave
& c) :
STATE
(c), _data(0), _bit_mask(0) {}
57
void
enter()
override
;
58
void
high()
override
;
59
void
low()
override
;
60
void
scl_falling()
override
;
61
private
:
62
uint8_t _data;
63
int
_bit_mask;
64
};
65
66
class
WRITE_ACK
:
public
STATE
{
67
public
:
68
WRITE_ACK
(
soft_i2c_slave
& c) :
STATE
(c) {}
69
void
enter()
override
;
70
void
scl_falling()
override
;
71
};
72
73
class
READ_DATA
:
public
STATE
{
74
public
:
75
READ_DATA
(
soft_i2c_slave
& c) :
STATE
(c), _data(0), _bit_mask(0) {}
76
void
enter()
override
;
77
void
high()
override
;
78
void
low()
override
;
79
void
scl_falling()
override
;
80
private
:
81
uint8_t _data;
82
int
_bit_mask;
83
};
84
85
class
WRITE_DATA
:
public
STATE
{
86
public
:
87
WRITE_DATA
(
soft_i2c_slave
& c) :
STATE
(c), _data(0), _bit_mask(0) {}
88
void
enter()
override
;
89
void
scl_falling()
override
;
90
private
:
91
uint8_t _data;
92
int
_bit_mask;
93
};
94
95
class
READ_ACK
:
public
STATE
{
96
public
:
97
READ_ACK
(
soft_i2c_slave
& c) :
STATE
(c) {}
98
void
high()
override
;
99
void
low()
override
;
100
void
scl_falling()
override
;
101
};
102
103
}
// namespace I2C
104
105
#endif
// _SOFT_I2C_SLAVE_STATES_H_
I2C::IDLE
Definition
soft_i2c_slave_states.h:48
I2C::READ_ACK
Definition
soft_i2c_slave_states.h:95
I2C::READ_ADDR
Definition
soft_i2c_slave_states.h:54
I2C::READ_DATA
Definition
soft_i2c_slave_states.h:73
I2C::STATE
Definition
soft_i2c_slave_states.h:29
I2C::WRITE_ACK
Definition
soft_i2c_slave_states.h:66
I2C::WRITE_DATA
Definition
soft_i2c_slave_states.h:85
soft_i2c_slave
Definition
soft_i2c_slave.h:49
Generated by
1.12.0