i2csniffer.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 {
  9. I2C_BUS_FREE,
  10. I2C_BUS_STARTED
  11. } i2cBusStates;
  12. // Max read size of i2c frame by message
  13. // Arbitraly defined
  14. // They're not real limit to maximum frames send
  15. #define MAX_MESSAGE_SIZE 128
  16. // Nb of records
  17. #define MAX_RECORDS 128
  18. /// @brief Struct used to store our reads
  19. typedef struct {
  20. uint8_t data[MAX_MESSAGE_SIZE];
  21. bool ack[MAX_MESSAGE_SIZE];
  22. uint8_t bit_index;
  23. uint8_t data_index;
  24. } i2cFrame;
  25. typedef struct {
  26. bool started;
  27. bool first;
  28. i2cBusStates state;
  29. i2cFrame frames[MAX_RECORDS];
  30. uint8_t frame_index;
  31. uint8_t menu_index;
  32. uint8_t row_index;
  33. } i2cSniffer;
  34. void clear_sniffer_buffers(i2cSniffer* i2c_sniffer);
  35. void start_interrupts(i2cSniffer* i2c_sniffer);
  36. void stop_interrupts();
  37. void SDAcallback(void* _i2c_sniffer);
  38. void SCLcallback(void* _i2c_sniffer);
  39. i2cSniffer* i2c_sniffer_alloc();
  40. void i2c_sniffer_free(i2cSniffer* i2c_sniffer);