I2C device discovery and printout of known device names
i2cDevices.cpp
- Committer:
- loopsva
- Date:
- 2019-01-10
- Revision:
- 0:df49b3ed3502
File content as of revision 0:df49b3ed3502:
#include "mbed.h" #include "i2cDevices.h" extern RawSerial pc; //--------------------------------------------------------------------------------------------------------------------------------------// //Constructor i2c_discovery::i2c_discovery(PinName sda, PinName scl, const char* name) : _i2c(sda, scl) { _i2c.frequency(100000); } //--------------------------------------------------------------------------------------------------------------------------------------// //Display detected i2c device name int i2c_discovery::showI2C(i2cDeviceFlags& i2cFlags, char addr) { switch (addr) { #ifdef I2C_0x02 case 0x02: pc.printf("%s\r\n", I2C_0x02); i2cFlags.PCA9955_GGG_ok = true; break; #endif #ifdef I2C_0x04 case 0x04: pc.printf("%s\r\n", I2C_0x04); break; #endif #ifdef I2C_0x06 case 0x06: pc.printf("%s\r\n", I2C_0x06); break; #endif #ifdef I2C_0x08 case 0x08: pc.printf("%s\r\n", I2C_0x08); break; #endif #ifdef I2C_0x0A case 0x0A: pc.printf("%s\r\n", I2C_0x0A); break; #endif #ifdef I2C_0x0C case 0x0C: pc.printf("%s\r\n", I2C_0x0C); break; #endif #ifdef I2C_0x0E case 0x0E: pc.printf("%s\r\n", I2C_0x0E); break; #endif //---------------------------------------- #ifdef I2C_0x10 case 0x10: pc.printf("%s\r\n", I2C_0x10); break; #endif #ifdef I2C_0x12 case 0x12: pc.printf("%s\r\n", I2C_0x12); break; #endif #ifdef I2C_0x14 case 0x14: pc.printf("%s\r\n", I2C_0x14); break; #endif #ifdef I2C_0x16 case 0x16: pc.printf("%s\r\n", I2C_0x16); break; #endif #ifdef I2C_0x18 case 0x18: pc.printf("%s\r\n", I2C_0x18); break; #endif #ifdef I2C_0x1A case 0x1A: pc.printf("%s\r\n", I2C_0x1A); break; #endif #ifdef I2C_0x1C case 0x1C: pc.printf("%s\r\n", I2C_0x1C); break; #endif #ifdef I2C_0x1E case 0x1E: pc.printf("%s\r\n", I2C_0x1E); break; #endif //---------------------------------------- #ifdef I2C_0x20 case 0x20: pc.printf("%s\r\n", I2C_0x20); i2cFlags.VEML60xx_ok = true; break; #endif #ifdef I2C_0x22 case 0x22: pc.printf("%s\r\n", I2C_0x22); break; #endif #ifdef I2C_0x24 case 0x24: pc.printf("%s\r\n", I2C_0x24); break; #endif #ifdef I2C_0x26 case 0x26: pc.printf("%s\r\n", I2C_0x26); break; #endif #ifdef I2C_0x28 case 0x28: pc.printf("%s\r\n", I2C_0x28); break; #endif #ifdef I2C_0x2A case 0x2A: pc.printf("%s\r\n", I2C_0x2A); break; #endif #ifdef I2C_0x2C case 0x2C: pc.printf("%s\r\n", I2C_0x2C); break; #endif #ifdef I2C_0x2E case 0x2E: pc.printf("%s\r\n", I2C_0x2E); break; #endif //---------------------------------------- #ifdef I2C_0x30 case 0x30: pc.printf("%s\r\n", I2C_0x30); break; #endif #ifdef I2C_0x32 case 0x32: pc.printf("%s\r\n", I2C_0x32); break; #endif #ifdef I2C_0x34 case 0x34: pc.printf("%s\r\n", I2C_0x34); break; #endif #ifdef I2C_0x36 case 0x36: pc.printf("%s\r\n", I2C_0x36); break; #endif #ifdef I2C_0x38 case 0x38: pc.printf("%s\r\n", I2C_0x38); i2cFlags.mma8451cs1_ok = true; //fxos8700_ok = true; break; #endif #ifdef I2C_0x3A case 0x3A: pc.printf("%s\r\n", I2C_0x3A); //fxos8700_ok = true; break; #endif #ifdef I2C_0x3C case 0x3C: pc.printf("%s\r\n", I2C_0x3C); //fxos8700_ok = true; break; #endif #ifdef I2C_0x3E case 0x3E: pc.printf("%s\r\n", I2C_0x3E); //fxos8700_ok = true; break; #endif //---------------------------------------- #ifdef I2C_0x40 case 0x40: pc.printf("%s\r\n", I2C_0x40); break; #endif #ifdef I2C_0x42 case 0x42: pc.printf("%s\r\n", I2C_0x42); break; #endif #ifdef I2C_0x44 case 0x44: pc.printf("%s\r\n", I2C_0x44); break; #endif #ifdef I2C_0x46 case 0x46: pc.printf("%s\r\n", I2C_0x46); break; #endif #ifdef I2C_0x48 case 0x48: pc.printf("%s\r\n", I2C_0x48); break; #endif #ifdef I2C_0x4A case 0x4A: pc.printf("%s\r\n", I2C_0x4A); break; #endif #ifdef I2C_0x4C case 0x4C: pc.printf("%s\r\n", I2C_0x4C); break; #endif #ifdef I2C_0x4E case 0x4E: pc.printf("%s\r\n", I2C_0x4E); break; #endif //---------------------------------------- #ifdef I2C_0x50 case 0x50: pc.printf("%s\r\n", I2C_0x50); break; #endif #ifdef I2C_0x52 case 0x52: pc.printf("%s\r\n", I2C_0x52); break; #endif #ifdef I2C_0x54 case 0x54: pc.printf("%s\r\n", I2C_0x54); break; #endif #ifdef I2C_0x56 case 0x56: pc.printf("%s\r\n", I2C_0x56); break; #endif #ifdef I2C_0x58 case 0x58: pc.printf("%s\r\n", I2C_0x58); break; #endif #ifdef I2C_0x5A case 0x5A: pc.printf("%s\r\n", I2C_0x5A); break; #endif #ifdef I2C_0x5C case 0x5C: pc.printf("%s\r\n", I2C_0x5C); break; #endif #ifdef I2C_0x5E case 0x5E: pc.printf("%s\r\n", I2C_0x5E); break; #endif //---------------------------------------- #ifdef I2C_0x60 case 0x60: pc.printf("%s\r\n", I2C_0x60); break; #endif #ifdef I2C_0x62 case 0x62: pc.printf("%s\r\n", I2C_0x62); break; #endif #ifdef I2C_0x64 case 0x64: pc.printf("%s\r\n", I2C_0x64); break; #endif #ifdef I2C_0x66 case 0x66: pc.printf("%s\r\n", I2C_0x66); break; #endif #ifdef I2C_0x68 case 0x68: pc.printf("%s\r\n", I2C_0x68); break; #endif #ifdef I2C_0x6A case 0x6A: pc.printf("%s\r\n", I2C_0x6A); break; #endif #ifdef I2C_0x6C case 0x6C: pc.printf("%s\r\n", I2C_0x6C); break; #endif #ifdef I2C_0x6E case 0x6E: pc.printf("%s\r\n", I2C_0x6E); break; #endif //---------------------------------------- #ifdef I2C_0x70 case 0x70: pc.printf("%s\r\n", I2C_0x70); i2cFlags.VEML6070_ok = true; break; #endif #ifdef I2C_0x72 case 0x72: pc.printf("%s\r\n", I2C_0x72); break; #endif #ifdef I2C_0x74 case 0x74: pc.printf("%s\r\n", I2C_0x74); break; #endif #ifdef I2C_0x76 case 0x76: pc.printf("%s\r\n", I2C_0x76); break; #endif #ifdef I2C_0x78 case 0x78: pc.printf("%s\r\n", I2C_0x78); break; #endif #ifdef I2C_0x7A case 0x7A: pc.printf("%s\r\n", I2C_0x7A); break; #endif #ifdef I2C_0x7C case 0x7C: pc.printf("%s\r\n", I2C_0x7C); break; #endif #ifdef I2C_0x7E case 0x7E: pc.printf("%s\r\n", I2C_0x7E); break; #endif //---------------------------------------- #ifdef I2C_0x80 case 0x80: pc.printf("%s\r\n", I2C_0x80); i2cFlags.HTU21D_ok = true; i2cFlags.INA219_MAX7300_gg_ok = true; i2cFlags.INA230_MAX7300_gg_ok = true; break; #endif #ifdef I2C_0x82 case 0x82: pc.printf("%s\r\n", I2C_0x82); break; #endif #ifdef I2C_0x84 case 0x84: pc.printf("%s\r\n", I2C_0x84); break; #endif #ifdef I2C_0x86 case 0x86: pc.printf("%s\r\n", I2C_0x86); break; #endif #ifdef I2C_0x88 case 0x88: pc.printf("%s\r\n", I2C_0x88); break; #endif #ifdef I2C_0x8A case 0x8A: pc.printf("%s\r\n", I2C_0x8A); break; #endif #ifdef I2C_0x8C case 0x8C: pc.printf("%s\r\n", I2C_0x8C); break; #endif #ifdef I2C_0x8E case 0x8E: pc.printf("%s\r\n", I2C_0x8E); break; #endif //---------------------------------------- #ifdef I2C_0x90 case 0x90: pc.printf("%s\r\n", I2C_0x90); break; #endif #ifdef I2C_0x92 case 0x92: pc.printf("%s\r\n", I2C_0x92); break; #endif #ifdef I2C_0x94 case 0x94: pc.printf("%s\r\n", I2C_0x94); break; #endif #ifdef I2C_0x96 case 0x96: pc.printf("%s\r\n", I2C_0x96); break; #endif #ifdef I2C_0x98 case 0x98: pc.printf("%s\r\n", I2C_0x98); break; #endif #ifdef I2C_0x9A case 0x9A: pc.printf("%s\r\n", I2C_0x9A); break; #endif #ifdef I2C_0x9C case 0x9C: pc.printf("%s\r\n", I2C_0x9C); break; #endif #ifdef I2C_0x9E case 0x9E: pc.printf("%s\r\n", I2C_0x9E); break; #endif //---------------------------------------- #ifdef I2C_0xA0 case 0xA0: pc.printf("%s\r\n", I2C_0xA0); i2cFlags.eeprom000_ok = true; break; #endif #ifdef I2C_0xA2 case 0xA2: pc.printf("%s\r\n", I2C_0xA2); break; #endif #ifdef I2C_0xA4 case 0xA4: pc.printf("%s\r\n", I2C_0xA4); break; #endif #ifdef I2C_0xA6 case 0xA6: pc.printf("%s\r\n", I2C_0xA6); break; #endif #ifdef I2C_0xA8 case 0xA8: pc.printf("%s\r\n", I2C_0xA8); break; #endif #ifdef I2C_0xAA case 0xAA: pc.printf("%s\r\n", I2C_0xAA); i2cFlags.bq27210_ok = true; break; #endif #ifdef I2C_0xAC case 0xAC: pc.printf("%s\r\n", I2C_0xAC); break; #endif #ifdef I2C_0xAE case 0xAE: pc.printf("%s\r\n", I2C_0xAE); break; #endif //---------------------------------------- #ifdef I2C_0xB0 case 0xB0: pc.printf("%s\r\n", I2C_0xB0); break; #endif #ifdef I2C_0xB2 case 0xB2: pc.printf("%s\r\n", I2C_0xB2); break; #endif #ifdef I2C_0xB4 case 0xB4: pc.printf("%s\r\n", I2C_0xB4); i2cFlags.ccs811_0_ok = true; break; #endif #ifdef I2C_0xB6 case 0xB6: pc.printf("%s\r\n", I2C_0xB6); i2cFlags.ccs811_1_ok = true; break; #endif #ifdef I2C_0xB8 case 0xB8: pc.printf("%s\r\n", I2C_0xB8); break; #endif #ifdef I2C_0xBA case 0xBA: pc.printf("%s\r\n", I2C_0xBA); break; #endif #ifdef I2C_0xBC case 0xBC: pc.printf("%s\r\n", I2C_0xBC); break; #endif #ifdef I2C_0xBE case 0xBE: pc.printf("%s\r\n", I2C_0xBE); break; #endif //---------------------------------------- #ifdef I2C_0xC0 case 0xC0: pc.printf("%s\r\n", I2C_0xC0); i2cFlags.mlx90620_ok = true; //i2cFlags.PCA9955_GGG_ok = true; break; #endif #ifdef I2C_0xC2 case 0xC2: pc.printf("%s\r\n", I2C_0xC2); i2cFlags.SCD30_ok = true; break; #endif #ifdef I2C_0xC4 case 0xC4: pc.printf("%s\r\n", I2C_0xC4); break; #endif #ifdef I2C_0xC6 case 0xC6: pc.printf("%s\r\n", I2C_0xC6); break; #endif #ifdef I2C_0xC8 case 0xC8: pc.printf("%s\r\n", I2C_0xC8); break; #endif #ifdef I2C_0xCA case 0xCA: pc.printf("%s\r\n", I2C_0xCA); break; #endif #ifdef I2C_0xCC case 0xCC: pc.printf("%s\r\n", I2C_0xCC); break; #endif #ifdef I2C_0xCE case 0xCE: pc.printf("%s\r\n", I2C_0xCE); break; #endif //---------------------------------------- #ifdef I2C_0xD0 case 0xD0: pc.printf("%s\r\n", I2C_0xD0); i2cFlags.rtcDS_ok = true; break; #endif #ifdef I2C_0xD2 case 0xD2: pc.printf("%s\r\n", I2C_0xD2); break; #endif #ifdef I2C_0xD4 case 0xD4: pc.printf("%s\r\n", I2C_0xD4); break; #endif #ifdef I2C_0xD6 case 0xD6: pc.printf("%s\r\n", I2C_0xD6); break; #endif #ifdef I2C_0xD8 case 0xD8: pc.printf("%s\r\n", I2C_0xD8); break; #endif #ifdef I2C_0xDA case 0xDA: pc.printf("%s\r\n", I2C_0xDA); break; #endif #ifdef I2C_0xDC case 0xDC: pc.printf("%s\r\n", I2C_0xDC); break; #endif #ifdef I2C_0xDE case 0xDE: pc.printf("%s\r\n", I2C_0xDE); i2cFlags.mcp7941x_ok = true; break; #endif //---------------------------------------- #ifdef I2C_0xE0 case 0xE0: pc.printf("%s\r\n", I2C_0xE0); break; #endif #ifdef I2C_0xE2 case 0xE2: pc.printf("%s\r\n", I2C_0xE2); break; #endif #ifdef I2C_0xE4 case 0xE4: pc.printf("%s\r\n", I2C_0xE4); break; #endif #ifdef I2C_0xE6 case 0xE6: pc.printf("%s\r\n", I2C_0xE6); break; #endif #ifdef I2C_0xE8 case 0xE8: pc.printf("%s\r\n", I2C_0xE8); break; #endif #ifdef I2C_0xEA case 0xEA: pc.printf("%s\r\n", I2C_0xEA); break; #endif #ifdef I2C_0xEC case 0xEC: pc.printf("%s\r\n", I2C_0xEC); i2cFlags.bme280_cs0_ok = true; break; #endif #ifdef I2C_0xEE case 0xEE: pc.printf("%s\r\n", I2C_0xEE); i2cFlags.ms5611_ok = true; i2cFlags.bme280_cs1_ok = true; break; #endif //---------------------------------------- #ifdef I2C_0xF0 case 0xF0: pc.printf("%s\r\n", I2C_0xF0); break; #endif #ifdef I2C_0xF2 case 0xF2: pc.printf("%s\r\n", I2C_0xF2); break; #endif #ifdef I2C_0xF4 case 0xF4: pc.printf("%s\r\n", I2C_0xF4); break; #endif #ifdef I2C_0xF6 case 0xF6: pc.printf("%s\r\n", I2C_0xF6); break; #endif #ifdef I2C_0xF8 case 0xF8: pc.printf("%s\r\n", I2C_0xF8); break; #endif #ifdef I2C_0xFA case 0xFA: pc.printf("%s\r\n", I2C_0xFA); break; #endif #ifdef I2C_0xFC case 0xFC: pc.printf("%s\r\n", I2C_0xFC); break; #endif #ifdef I2C_0xFE case 0xFE: pc.printf("%s\r\n", I2C_0xFE); break; #endif //---------------------------------------- default: pc.printf("%sunknown%s\r\n", DOMAGENTA, DONONE); break; } return(0); } //------------------------------------------------------------------------------ // Clear I2C device flags void i2c_discovery::clearFlags(i2cDeviceFlags& i2cFlags) { i2cFlags.rtcDS_ok = false; i2cFlags.ms5611_ok = false; i2cFlags.bme280_cs0_ok = false; i2cFlags.bme280_cs1_ok = false; i2cFlags.mma8451cs1_ok = false; i2cFlags.HTU21D_ok = false; i2cFlags.PCA9955_GGG_ok = false; i2cFlags.VEML60xx_ok = false; i2cFlags.VEML6070_ok = false; i2cFlags.eeprom000_ok = false; i2cFlags.INA219_MAX7300_gg_ok = false; i2cFlags.INA230_MAX7300_gg_ok = false; i2cFlags.bq27210_ok = false; i2cFlags.SCD30_ok = false; i2cFlags.ccs811_0_ok = false; i2cFlags.ccs811_1_ok = false; i2cFlags.mcp7941x_ok = false; } //------------------------------------------------------------------------------ // Detect I2C device chain. If i2c chain > 1, return illegal number 255. Else, // return the total number of i2c devices detected int i2c_discovery::dispI2C(i2cDeviceFlags& i2cFlags) { //i2c_discovery::clearFlags(i2cFlags); int count = 0; for (int address = 2; address < 256; address +=2) { char xBuf[2] = { 0, 0 }; int x2c = _i2c.write(address, xBuf, 1, false); if(x2c == 0) { pc.printf(" - i2c device found at address 0x%02X %s", address, DOBLUE); showI2C(i2cFlags, address); pc.printf("%s", DONONE); count++; } } return(count); } //------------------------------------------------------------------------------ // Detect I2C device chain int i2c_discovery::find_i2c(i2cDeviceFlags& i2cFlags) { pc.printf("Searching for devices on i2c bus...\n"); int count = dispI2C(i2cFlags); pc.printf(" - %s%2d%s device(s) found on i2c bus\n", DOBLUE, count, DONONE); return(count); }