Adafruit_SPIDevice.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <SPI.h>
  2. #ifndef Adafruit_SPIDevice_h
  3. #define Adafruit_SPIDevice_h
  4. // some modern SPI definitions don't have BitOrder enum
  5. #if (defined(__AVR__) && !defined(ARDUINO_ARCH_MEGAAVR)) || \
  6. defined(ESP8266) || defined(TEENSYDUINO) || \
  7. defined(ARDUINO_ARCH_SPRESENSE) || defined(ARDUINO_attinyxy7) || \
  8. defined(ARDUINO_attinyxy6) || defined(ARDUINO_attinyxy4) || \
  9. defined(ARDUINO_attinyxy2)
  10. typedef enum _BitOrder {
  11. SPI_BITORDER_MSBFIRST = MSBFIRST,
  12. SPI_BITORDER_LSBFIRST = LSBFIRST,
  13. } BitOrder;
  14. #elif defined(ESP32)
  15. // some modern SPI definitions don't have BitOrder enum and have different SPI
  16. // mode defines
  17. typedef enum _BitOrder {
  18. SPI_BITORDER_MSBFIRST = SPI_MSBFIRST,
  19. SPI_BITORDER_LSBFIRST = SPI_LSBFIRST,
  20. } BitOrder;
  21. #else
  22. // Some platforms have a BitOrder enum but its named MSBFIRST/LSBFIRST
  23. #define SPI_BITORDER_MSBFIRST MSBFIRST
  24. #define SPI_BITORDER_LSBFIRST LSBFIRST
  25. #endif
  26. /**! The class which defines how we will talk to this device over SPI **/
  27. class Adafruit_SPIDevice {
  28. public:
  29. Adafruit_SPIDevice(int8_t cspin, uint32_t freq = 1000000,
  30. BitOrder dataOrder = SPI_BITORDER_MSBFIRST,
  31. uint8_t dataMode = SPI_MODE0, SPIClass *theSPI = &SPI);
  32. Adafruit_SPIDevice(int8_t cspin, int8_t sck, int8_t miso, int8_t mosi,
  33. uint32_t freq = 1000000,
  34. BitOrder dataOrder = SPI_BITORDER_MSBFIRST,
  35. uint8_t dataMode = SPI_MODE0);
  36. bool begin(void);
  37. bool read(uint8_t *buffer, size_t len, uint8_t sendvalue = 0xFF);
  38. bool write(uint8_t *buffer, size_t len, uint8_t *prefix_buffer = NULL,
  39. size_t prefix_len = 0);
  40. bool write_then_read(uint8_t *write_buffer, size_t write_len,
  41. uint8_t *read_buffer, size_t read_len,
  42. uint8_t sendvalue = 0xFF);
  43. uint8_t transfer(uint8_t send);
  44. void transfer(uint8_t *buffer, size_t len);
  45. private:
  46. SPIClass *_spi;
  47. SPISettings *_spiSetting;
  48. uint32_t _freq;
  49. BitOrder _dataOrder;
  50. uint8_t _dataMode;
  51. int8_t _cs, _sck, _mosi, _miso;
  52. bool _begun;
  53. };
  54. #endif // Adafruit_SPIDevice_h