32 uint8_t TwoWire::rxBuffer[BUFFER_LENGTH];
33 uint8_t TwoWire::rxBufferIndex = 0;
34 uint8_t TwoWire::rxBufferLength = 0;
36 uint8_t TwoWire::txAddress = 0;
37 uint8_t TwoWire::txBuffer[BUFFER_LENGTH];
38 uint8_t TwoWire::txBufferIndex = 0;
39 uint8_t TwoWire::txBufferLength = 0;
41 uint8_t TwoWire::transmitting = 0;
42 void (*TwoWire::user_onRequest)(void);
43 void (*TwoWire::user_onReceive)(int);
47 TwoWire::TwoWire() : SDA(29), SCL(28)
53 void TwoWire::begin(
void)
62 void TwoWire::begin(uint8_t address)
64 _i2c.Init(SDA, SCL, address);
68 void TwoWire::begin(
int address)
70 begin((uint8_t)address);
73 uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop)
76 if (quantity > BUFFER_LENGTH){
77 quantity = BUFFER_LENGTH;
81 if (!_i2c.IsStarted())
85 for (; read < quantity; read++)
86 rxBuffer[read] = _i2c.Bytein(1);
93 rxBufferLength = read;
98 uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity)
100 return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)
true);
103 uint8_t TwoWire::requestFrom(
int address,
int quantity)
105 return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)
true);
108 uint8_t TwoWire::requestFrom(
int address,
int quantity,
int sendStop)
110 return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)sendStop);
113 void TwoWire::beginTransmission(uint8_t address)
124 void TwoWire::beginTransmission(
int address)
126 beginTransmission((uint8_t)address);
142 uint8_t TwoWire::endTransmission(uint8_t sendStop)
145 if (!_i2c.IsStarted())
149 for (; write < txBufferLength; write++)
150 _i2c.Byteout(txBuffer[write]);
166 uint8_t TwoWire::endTransmission(
void)
168 return endTransmission(
true);
174 size_t TwoWire::write(uint8_t data)
179 if(txBufferLength >= BUFFER_LENGTH){
184 txBuffer[txBufferIndex] = data;
187 txBufferLength = txBufferIndex;
191 twi_transmit(&data, 1);
199 size_t TwoWire::write(
const uint8_t *data,
size_t quantity)
203 for(
size_t i = 0; i < quantity; ++i){
209 twi_transmit(data, quantity);
217 int TwoWire::available(
void)
219 return rxBufferLength - rxBufferIndex;
225 int TwoWire::read(
void)
230 if(rxBufferIndex < rxBufferLength){
231 value = rxBuffer[rxBufferIndex];
241 int TwoWire::peek(
void)
245 if(rxBufferIndex < rxBufferLength){
246 value = rxBuffer[rxBufferIndex];
252 void TwoWire::flush(
void)
258 void TwoWire::onReceiveService(uint8_t* inBytes,
int numBytes)
267 if(rxBufferIndex < rxBufferLength){
272 for(uint8_t i = 0; i < numBytes; ++i){
273 rxBuffer[i] = inBytes[i];
277 rxBufferLength = numBytes;
279 user_onReceive(numBytes);
283 void TwoWire::onRequestService(
void)
298 void TwoWire::onReceive(
void (*
function)(
int) )
300 user_onReceive =
function;
304 void TwoWire::onRequest(
void (*
function)(
void) )
306 user_onRequest =
function;