|
20 | 20 | Modified 2020 by Greyson Christoforo (grey@christoforo.net) to implement timeouts
|
21 | 21 | */
|
22 | 22 |
|
| 23 | + |
| 24 | +#pragma once |
| 25 | + |
23 | 26 | #ifndef TwoWire_h
|
24 | 27 | #define TwoWire_h
|
25 | 28 |
|
|
34 | 37 | class TwoWire : public Stream
|
35 | 38 | {
|
36 | 39 | private:
|
37 |
| - static uint8_t rxBuffer[]; |
38 |
| - static uint8_t rxBufferIndex; |
39 |
| - static uint8_t rxBufferLength; |
40 |
| - |
41 |
| - static uint8_t txAddress; |
42 |
| - static uint8_t txBuffer[]; |
43 |
| - static uint8_t txBufferIndex; |
44 |
| - static uint8_t txBufferLength; |
45 |
| - |
46 |
| - static uint8_t transmitting; |
47 |
| - static void (*user_onRequest)(void); |
48 |
| - static void (*user_onReceive)(int); |
49 |
| - static void onRequestService(void); |
50 |
| - static void onReceiveService(uint8_t*, int); |
| 40 | + uint8_t rxBuffer[BUFFER_LENGTH]; |
| 41 | + uint8_t rxBufferIndex; |
| 42 | + uint8_t rxBufferLength; |
| 43 | + |
| 44 | + uint8_t txAddress; |
| 45 | + uint8_t txBuffer[BUFFER_LENGTH]; |
| 46 | + uint8_t txBufferIndex; |
| 47 | + uint8_t txBufferLength; |
| 48 | + |
| 49 | + uint8_t transmitting; |
| 50 | + void (*user_onRequest)(void); |
| 51 | + void (*user_onReceive)(int); |
| 52 | + |
| 53 | + static void onRequestService_(void); |
| 54 | + static void onReceiveService_(uint8_t*, int); |
| 55 | + |
| 56 | + void onRequestService(void); |
| 57 | + void onReceiveService(uint8_t*, int); |
51 | 58 | public:
|
52 | 59 | TwoWire();
|
53 | 60 | void begin();
|
54 | 61 | void begin(uint8_t);
|
55 |
| - void begin(int); |
| 62 | + inline void begin(int address) {begin(static_cast<uint8_t>(address));} |
56 | 63 | void end();
|
57 | 64 | void setClock(uint32_t);
|
58 | 65 | void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false);
|
59 | 66 | bool getWireTimeoutFlag(void);
|
60 | 67 | void clearWireTimeoutFlag(void);
|
61 | 68 | void beginTransmission(uint8_t);
|
62 |
| - void beginTransmission(int); |
| 69 | + void beginTransmission(int address) {beginTransmission(static_cast<uint8_t>(address));} |
63 | 70 | uint8_t endTransmission(void);
|
64 | 71 | uint8_t endTransmission(uint8_t);
|
65 |
| - uint8_t requestFrom(uint8_t, uint8_t); |
66 |
| - uint8_t requestFrom(uint8_t, uint8_t, uint8_t); |
67 | 72 | uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t);
|
68 |
| - uint8_t requestFrom(int, int); |
69 |
| - uint8_t requestFrom(int, int, int); |
70 |
| - virtual size_t write(uint8_t); |
71 |
| - virtual size_t write(const uint8_t *, size_t); |
72 |
| - virtual int available(void); |
73 |
| - virtual int read(void); |
74 |
| - virtual int peek(void); |
75 |
| - virtual void flush(void); |
| 73 | + inline uint8_t requestFrom(uint8_t address, uint8_t quantity) { |
| 74 | + return requestFrom(address, quantity, static_cast<uint8_t>(true)); |
| 75 | + } |
| 76 | + inline uint8_t requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) { |
| 77 | + return requestFrom(address, quantity, static_cast<uint32_t>(0) |
| 78 | + , static_cast<uint8_t>(0), static_cast<uint8_t>(sendStop)); |
| 79 | + } |
| 80 | + inline uint8_t requestFrom(int address, int quantity) { |
| 81 | + return requestFrom(static_cast<uint8_t>(address), static_cast<uint8_t>(quantity) |
| 82 | + , static_cast<uint8_t>(true)); |
| 83 | + } |
| 84 | + inline uint8_t requestFrom(int address, int quantity, int sendStop) { |
| 85 | + return requestFrom(static_cast<uint8_t>(address), static_cast<uint8_t>(quantity) |
| 86 | + , static_cast<uint8_t>(sendStop)); |
| 87 | + } |
| 88 | + virtual size_t write(uint8_t) override; |
| 89 | + virtual size_t write(const uint8_t *, size_t) override; |
| 90 | + virtual int available(void) override; |
| 91 | + virtual int read(void) override; |
| 92 | + virtual int peek(void) override; |
| 93 | + virtual void flush(void) override; |
76 | 94 | void onReceive( void (*)(int) );
|
77 | 95 | void onRequest( void (*)(void) );
|
78 | 96 |
|
79 |
| - inline size_t write(unsigned long n) { return write((uint8_t)n); } |
80 |
| - inline size_t write(long n) { return write((uint8_t)n); } |
81 |
| - inline size_t write(unsigned int n) { return write((uint8_t)n); } |
82 |
| - inline size_t write(int n) { return write((uint8_t)n); } |
| 97 | + inline size_t write(unsigned long n) { return write(static_cast<uint8_t>(n)); } |
| 98 | + inline size_t write(long n) { return write(static_cast<uint8_t>(n)); } |
| 99 | + inline size_t write(unsigned int n) { return write(static_cast<uint8_t>(n)); } |
| 100 | + inline size_t write(int n) { return write(static_cast<uint8_t>(n)); } |
83 | 101 | using Print::write;
|
84 | 102 | };
|
85 | 103 |
|
|
0 commit comments