| 1234567891011121314151617181920212223242526272829303132333435 |
- #include "i2cscanner.h"
- void scan_i2c_bus(i2cScanner* i2c_scanner) {
- i2c_scanner->nb_found = 0;
- i2c_scanner->scanned = true;
- // Get the bus
- furi_hal_i2c_acquire(I2C_BUS);
- // scan
- for(uint8_t addr = 0x01; addr <= MAX_I2C_ADDR << 1; addr++) {
- // Check for peripherals
- if(furi_hal_i2c_is_device_ready(I2C_BUS, addr, I2C_TIMEOUT)) {
- // skip even 8-bit addr
- if(addr % 2 != 0) {
- continue;
- }
- // convert addr to 7-bits
- i2c_scanner->addresses[i2c_scanner->nb_found] = addr >> 1;
- i2c_scanner->nb_found++;
- }
- }
- furi_hal_i2c_release(I2C_BUS);
- }
- i2cScanner* i2c_scanner_alloc() {
- i2cScanner* i2c_scanner = malloc(sizeof(i2cScanner));
- i2c_scanner->nb_found = 0;
- i2c_scanner->menu_index = 0;
- i2c_scanner->scanned = false;
- return i2c_scanner;
- }
- void i2c_scanner_free(i2cScanner* i2c_scanner) {
- furi_assert(i2c_scanner);
- free(i2c_scanner);
- }
|