i2csniffer.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. } i2cSniffer;
  30. void clear_sniffer_buffers(i2cSniffer* i2c_sniffer);
  31. void start_interrupts(i2cSniffer* i2c_sniffer);
  32. void stop_interrupts();
  33. void SDAcallback(void* _i2c_sniffer);
  34. void SCLcallback(void* _i2c_sniffer);
  35. i2cSniffer* i2c_sniffer_alloc();
  36. void i2c_sniffer_free(i2cSniffer* i2c_sniffer);