i2csniffer.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. // I2C Pins
  5. #define pinSCL &gpio_ext_pc0
  6. #define pinSDA &gpio_ext_pc1
  7. // Bus States
  8. typedef enum { I2C_BUS_FREE, I2C_BUS_STARTED } i2cBusStates;
  9. // Max read size of i2c frame by message
  10. // Arbitraly defined
  11. // They're not real limit to maximum frames send
  12. #define MAX_MESSAGE_SIZE 128
  13. // Nb of records
  14. #define MAX_RECORDS 128
  15. /// @brief Struct used to store our reads
  16. typedef struct {
  17. uint8_t data[MAX_MESSAGE_SIZE];
  18. bool ack[MAX_MESSAGE_SIZE];
  19. uint8_t bit_index;
  20. uint8_t data_index;
  21. } i2cFrame;
  22. typedef struct {
  23. bool started;
  24. bool first;
  25. i2cBusStates state;
  26. i2cFrame frames[MAX_RECORDS];
  27. uint8_t frame_index;
  28. uint8_t menu_index;
  29. uint8_t row_index;
  30. } i2cSniffer;
  31. void clear_sniffer_buffers(i2cSniffer* i2c_sniffer);
  32. void start_interrupts(i2cSniffer* i2c_sniffer);
  33. void stop_interrupts();
  34. void SDAcallback(void* _i2c_sniffer);
  35. void SCLcallback(void* _i2c_sniffer);
  36. i2cSniffer* i2c_sniffer_alloc();
  37. void i2c_sniffer_free(i2cSniffer* i2c_sniffer);