// Get the CFHEADER module at address 0
var cfheader0 = Cfheader.Instances[0];
 
// Open USB communcation with the CFHEADER module
cfheader0.Open();
 
// Get all possible IO module instances
var allIOModules = ((IEnumerable<IIOModule>)cfheader0.AnalogInputModules)
    .Concat(cfheader0.AnalogOutputModules)
    .Concat(cfheader0.DigitalInputModules)
    .Concat(cfheader0.DigitalOutputModules);
 
// Reset the IO module's I²C status so I²C communication will be attempted again on the next call to `Sync`.
foreach(var ioModule in allIOModules)
{
    ioModule.AcknowledgeI2cFailure();
}
 
// Test i2c communication for each IO module
cfheader0.Sync();
 
// Identify each IO module whose I²C communication succeeded.
foreach(var ioModule in allIOModules)
{
    if (ioModule.I2cStatus == I2cResult.Success)
    {
        Console.WriteLine($"Found {ioModule.GetType().Name} at address {ioModule.Address}");
    }
}
 
// Close USB communication with the CFHEADER module
cfheader0.Close();