Skip to content

Commit 9cc9ada

Browse files
committed
Changed static variables of Wire to non static.
Some functions only doing type casts and forwarding are now inline which improves speed. Refactored code to more actual C++ style.
1 parent 891b446 commit 9cc9ada

File tree

2 files changed

+68
-75
lines changed

2 files changed

+68
-75
lines changed

libraries/Wire/src/Wire.cpp

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,18 @@
2828

2929
#include "Wire.h"
3030

31-
// Initialize Class Variables //////////////////////////////////////////////////
32-
33-
uint8_t TwoWire::rxBuffer[BUFFER_LENGTH];
34-
uint8_t TwoWire::rxBufferIndex = 0;
35-
uint8_t TwoWire::rxBufferLength = 0;
36-
37-
uint8_t TwoWire::txAddress = 0;
38-
uint8_t TwoWire::txBuffer[BUFFER_LENGTH];
39-
uint8_t TwoWire::txBufferIndex = 0;
40-
uint8_t TwoWire::txBufferLength = 0;
41-
42-
uint8_t TwoWire::transmitting = 0;
43-
void (*TwoWire::user_onRequest)(void);
44-
void (*TwoWire::user_onReceive)(int);
4531

4632
// Constructors ////////////////////////////////////////////////////////////////
4733

4834
TwoWire::TwoWire()
35+
: rxBufferIndex(0)
36+
, rxBufferLength(0)
37+
, txAddress(0)
38+
, txBufferIndex(0)
39+
, txBufferLength(0)
40+
, transmitting(0)
41+
, user_onRequest(nullptr)
42+
, user_onReceive(nullptr)
4943
{
5044
}
5145

@@ -60,8 +54,8 @@ void TwoWire::begin(void)
6054
txBufferLength = 0;
6155

6256
twi_init();
63-
twi_attachSlaveTxEvent(onRequestService); // default callback must exist
64-
twi_attachSlaveRxEvent(onReceiveService); // default callback must exist
57+
twi_attachSlaveTxEvent(onRequestService_); // default callback must exist
58+
twi_attachSlaveRxEvent(onReceiveService_); // default callback must exist
6559
}
6660

6761
void TwoWire::begin(uint8_t address)
@@ -70,11 +64,6 @@ void TwoWire::begin(uint8_t address)
7064
twi_setAddress(address);
7165
}
7266

73-
void TwoWire::begin(int address)
74-
{
75-
begin((uint8_t)address);
76-
}
77-
7867
void TwoWire::end(void)
7968
{
8069
twi_disable();
@@ -164,25 +153,6 @@ uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddres
164153
return read;
165154
}
166155

167-
uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) {
168-
return requestFrom((uint8_t)address, (uint8_t)quantity, (uint32_t)0, (uint8_t)0, (uint8_t)sendStop);
169-
}
170-
171-
uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity)
172-
{
173-
return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true);
174-
}
175-
176-
uint8_t TwoWire::requestFrom(int address, int quantity)
177-
{
178-
return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true);
179-
}
180-
181-
uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop)
182-
{
183-
return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)sendStop);
184-
}
185-
186156
void TwoWire::beginTransmission(uint8_t address)
187157
{
188158
// indicate that we are transmitting
@@ -194,11 +164,6 @@ void TwoWire::beginTransmission(uint8_t address)
194164
txBufferLength = 0;
195165
}
196166

197-
void TwoWire::beginTransmission(int address)
198-
{
199-
beginTransmission((uint8_t)address);
200-
}
201-
202167
//
203168
// Originally, 'endTransmission' was an f(void) function.
204169
// It has been modified to take one parameter indicating
@@ -318,6 +283,11 @@ void TwoWire::flush(void)
318283
// XXX: to be implemented.
319284
}
320285

286+
void TwoWire::onReceiveService_(uint8_t* inBytes, int numBytes)
287+
{
288+
Wire.onReceiveService(inBytes, numBytes);
289+
}
290+
321291
// behind the scenes function that is called when data is received
322292
void TwoWire::onReceiveService(uint8_t* inBytes, int numBytes)
323293
{
@@ -343,6 +313,11 @@ void TwoWire::onReceiveService(uint8_t* inBytes, int numBytes)
343313
user_onReceive(numBytes);
344314
}
345315

316+
void TwoWire::onRequestService_()
317+
{
318+
Wire.onRequestService();
319+
}
320+
346321
// behind the scenes function that is called when data is requested
347322
void TwoWire::onRequestService(void)
348323
{

libraries/Wire/src/Wire.h

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
Modified 2020 by Greyson Christoforo (grey@christoforo.net) to implement timeouts
2121
*/
2222

23+
24+
#pragma once
25+
2326
#ifndef TwoWire_h
2427
#define TwoWire_h
2528

@@ -34,52 +37,67 @@
3437
class TwoWire : public Stream
3538
{
3639
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);
5158
public:
5259
TwoWire();
5360
void begin();
5461
void begin(uint8_t);
55-
void begin(int);
62+
inline void begin(int address) {begin(static_cast<uint8_t>(address));}
5663
void end();
5764
void setClock(uint32_t);
5865
void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false);
5966
bool getWireTimeoutFlag(void);
6067
void clearWireTimeoutFlag(void);
6168
void beginTransmission(uint8_t);
62-
void beginTransmission(int);
69+
void beginTransmission(int address) {beginTransmission(static_cast<uint8_t>(address));}
6370
uint8_t endTransmission(void);
6471
uint8_t endTransmission(uint8_t);
65-
uint8_t requestFrom(uint8_t, uint8_t);
66-
uint8_t requestFrom(uint8_t, uint8_t, uint8_t);
6772
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;
7694
void onReceive( void (*)(int) );
7795
void onRequest( void (*)(void) );
7896

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)); }
83101
using Print::write;
84102
};
85103

0 commit comments

Comments
 (0)