i2cscanner.c 999 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "i2cscanner.h"
  2. void scan_i2c_bus(i2cScanner* i2c_scanner) {
  3. i2c_scanner->nb_found = 0;
  4. i2c_scanner->scanned = true;
  5. // Get the bus
  6. furi_hal_i2c_acquire(I2C_BUS);
  7. // scan
  8. for(uint8_t addr = 0x01; addr <= MAX_I2C_ADDR << 1; addr++) {
  9. // Check for peripherals
  10. if(furi_hal_i2c_is_device_ready(I2C_BUS, addr, I2C_TIMEOUT)) {
  11. // skip even 8-bit addr
  12. if(addr % 2 != 0) {
  13. continue;
  14. }
  15. // convert addr to 7-bits
  16. i2c_scanner->addresses[i2c_scanner->nb_found] = addr >> 1;
  17. i2c_scanner->nb_found++;
  18. }
  19. }
  20. furi_hal_i2c_release(I2C_BUS);
  21. }
  22. i2cScanner* i2c_scanner_alloc() {
  23. i2cScanner* i2c_scanner = malloc(sizeof(i2cScanner));
  24. i2c_scanner->nb_found = 0;
  25. i2c_scanner->menu_index = 0;
  26. i2c_scanner->scanned = false;
  27. return i2c_scanner;
  28. }
  29. void i2c_scanner_free(i2cScanner* i2c_scanner) {
  30. furi_assert(i2c_scanner);
  31. free(i2c_scanner);
  32. }