Open FFBoard
Open source force feedback firmware
PCF8574.h
Go to the documentation of this file.
1/*
2 * PCF8574.h
3 *
4 * Created on: 10.03.2022
5 * Author: Yannick
6 */
7
8#ifndef USEREXTENSIONS_SRC_PCF8574_H_
9#define USEREXTENSIONS_SRC_PCF8574_H_
10
11
12
13#include "ButtonSource.h"
14#include "CommandHandler.h"
15#include "cppmain.h"
16#include "ChoosableClass.h"
17#include "I2C.h"
18#include "cpp_target_config.h"
19#include "PersistentStorage.h"
20#include "thread.hpp"
21#ifdef I2C_PORT
22class PCF8574 : public I2CDevice {
23public:
25 virtual ~PCF8574();
26
27 //void configurePort(bool fastMode);
28
29 uint8_t readByte(const uint8_t devAddr);
30 void readByteIT(const uint8_t devAddr,uint8_t* data);
31 void writeByteIT(const uint8_t devAddr,uint8_t* data);
32 void writeByte(const uint8_t devAddr,uint8_t data);
33
34// void startI2CTransfer(I2CPort* port);
35// void endI2CTransfer(I2CPort* port);
36
37// void startI2CTransfer(I2CPort* port);
38// void endI2CTransfer(I2CPort* port);
39
40
41protected:
43 //I2C_InitTypeDef config;
44 //volatile bool transferActive = false;
45private:
46 uint8_t lastWriteData = 0;
47};
48
49#ifdef PCF8574BUTTONS
51public:
53 virtual ~PCF8574Buttons();
54
55 enum class PCF8574Buttons_commands : uint32_t {
57 };
58 void Run();
59
60 void saveFlash();
61 void restoreFlash();
62
64 void i2cError(I2CPort* port);
65
66 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies) override;
67
68 uint8_t readButtons(uint64_t* buf);
69 uint16_t getBtnNum(); // Amount of readable buttons
70 void setBtnNum(uint8_t num);
71
72 const virtual ClassIdentifier getInfo();
74 static bool isCreatable() {return true;};
75
77
78 std::string getHelpstring(){return "btnnum/8 devices required. Addresses starting at 0x20.";}
79
80 void rxDone(uint8_t dat);
81
82private:
83 bool invert = true;
84 uint8_t numBytes = 1;
85 uint64_t mask = 0xff;
86 uint64_t lastButtons = 0;
87 uint64_t currentButtons = 0;
88
89 uint8_t lastByte=0;
90 uint8_t lastData=0;
91
92 uint32_t lastSuccess=0;
93 const uint32_t timeout = 250;
94 volatile bool readingData = false;
95
96};
97#endif
98#endif // I2C
99#endif /* USEREXTENSIONS_SRC_PCF8574_H_ */
ClassType
Definition: ClassIDs.h:12
CommandStatus
Definition: I2C.h:106
Definition: I2C.h:43
uint8_t numBytes
Definition: PCF8574.h:84
void i2cError(I2CPort *port)
Definition: PCF8574.cpp:130
void Run()
Definition: PCF8574.cpp:87
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies) override
Definition: PCF8574.cpp:186
const ClassType getClassType() override
returns the used classchooser selection id of this instance
Definition: PCF8574.h:76
uint64_t mask
Definition: PCF8574.h:85
std::string getHelpstring()
Definition: PCF8574.h:78
PCF8574Buttons_commands
Definition: PCF8574.h:55
void setBtnNum(uint8_t num)
Definition: PCF8574.cpp:173
virtual const ClassIdentifier getInfo()
Definition: PCF8574.cpp:66
bool invert
Definition: PCF8574.h:83
static bool isCreatable()
Definition: PCF8574.h:74
uint8_t lastData
Definition: PCF8574.h:90
static ClassIdentifier info
Definition: PCF8574.h:73
uint8_t lastByte
Definition: PCF8574.h:89
void saveFlash()
Definition: PCF8574.cpp:113
uint64_t lastButtons
Definition: PCF8574.h:86
uint8_t readButtons(uint64_t *buf)
Definition: PCF8574.cpp:136
const uint32_t timeout
Definition: PCF8574.h:93
virtual ~PCF8574Buttons()
Definition: PCF8574.cpp:82
void rxDone(uint8_t dat)
uint64_t currentButtons
Definition: PCF8574.h:87
void restoreFlash()
Definition: PCF8574.cpp:120
uint16_t getBtnNum()
Definition: PCF8574.cpp:163
volatile bool readingData
Definition: PCF8574.h:94
uint32_t lastSuccess
Definition: PCF8574.h:92
void i2cRxCompleted(I2CPort *port)
Definition: PCF8574.cpp:103
void readByteIT(const uint8_t devAddr, uint8_t *data)
Definition: PCF8574.cpp:39
PCF8574(I2CPort &port)
Definition: PCF8574.cpp:12
virtual ~PCF8574()
Definition: PCF8574.cpp:17
void writeByteIT(const uint8_t devAddr, uint8_t *data)
Definition: PCF8574.cpp:43
uint8_t readByte(const uint8_t devAddr)
Definition: PCF8574.cpp:33
uint8_t lastWriteData
Definition: PCF8574.h:46
void writeByte(const uint8_t devAddr, uint8_t data)
Definition: PCF8574.cpp:47
I2CPort & port
Definition: PCF8574.h:42
static struct @612 data