25 #ifndef ACE_WIRE_SIMPLE_WIRE_FAST_INTERFACE_H
26 #define ACE_WIRE_SIMPLE_WIRE_FAST_INTERFACE_H
50 uint8_t T_DELAY_MICROS
67 digitalWriteFast(T_CLOCK_PIN, LOW);
68 digitalWriteFast(T_DATA_PIN, LOW);
95 uint8_t effectiveAddr = (addr << 1) | 0x00;
96 uint8_t res =
write(effectiveAddr);
111 for (uint8_t i = 0; i < 8; ++i) {
127 uint8_t ack = readAck();
155 uint8_t addr, uint8_t quantity,
bool sendStop =
true)
const {
156 mQuantity = quantity;
157 mSendStop = sendStop;
166 uint8_t effectiveAddr = (addr << 1) | 0x01;
167 uint8_t status =
write(effectiveAddr);
169 return (status == 0) ? 0 : quantity;
187 if (! mQuantity)
return 0xff;
192 for (uint8_t i = 0; i < 8; ++i) {
195 uint8_t bit = digitalReadFast(T_DATA_PIN);
224 static uint8_t readAck() {
232 uint8_t ack = digitalReadFast(T_DATA_PIN);
240 static void sendAck() {
247 static void sendNack() {
253 static void bitDelay() { delayMicroseconds(T_DELAY_MICROS); }
255 static void clockHigh() { pinModeFast(T_CLOCK_PIN, INPUT); bitDelay(); }
257 static void clockLow() { pinModeFast(T_CLOCK_PIN, OUTPUT); bitDelay(); }
259 static void dataHigh() { pinModeFast(T_DATA_PIN, INPUT); bitDelay(); }
261 static void dataLow() { pinModeFast(T_DATA_PIN, OUTPUT); bitDelay(); }
264 mutable bool mSendStop;
265 mutable uint8_t mQuantity;