void SPI::read(void* buf, size_t count) { if (UNLIKELY(count == 0)) return; uint8_t* dp = (uint8_t*) buf; transfer_start(0xff); while (--count) *dp++ = transfer_next(0xff); *dp = transfer_await(); }
void SPI::write_P(const void* buf, size_t count) { if (UNLIKELY(count == 0)) return; const uint8_t* sp = (const uint8_t*) buf; uint8_t data = pgm_read_byte(sp++); transfer_start(data); while (--count) { data = pgm_read_byte(sp++); transfer_next(data); } transfer_await(); }
void SPI::write(const void* buf, size_t count) { if (count == 0) return; const uint8_t* sp = (const uint8_t*) buf; uint8_t data = *sp++; transfer_start(data); while (--count) { data = *sp++; transfer_next(data); } transfer_await(); }
void SPI::transfer(void* buf, size_t count) { if (UNLIKELY(count == 0)) return; uint8_t* dp = (uint8_t*) buf; uint8_t data = *dp; transfer_start(data); while (--count) { uint8_t* tp = dp + 1; data = *tp; *dp = transfer_next(data); dp = tp; } *dp = transfer_await(); }
void SPI::transfer(void* dst, const void* src, size_t count) { if (UNLIKELY(count == 0)) return; uint8_t* dp = (uint8_t*) dst; const uint8_t* sp = (const uint8_t*) src; uint8_t data = *sp++; transfer_start(data); while (--count) { uint8_t* tp = dp + 1; data = *sp++; *dp = transfer_next(data); dp = tp; } *dp = transfer_await(); }