i2csniffer.h 1012 B

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