public bool RunI2CTest(UnitI2CTest[] I2CTests) { string stdErr; int hr; bool RetVal = true; if (!ConnectProgrammer()) { TestStatusUpdate(MTKTestMessageType.Information, "Error!!!"); Log.PrintLog(this, "Unable to connect to the programmer.", LogDetailLevel.LogRelevant); return(false); } hr = Programmer.SetProtocol(enumInterfaces.I2C, out stdErr); if (!IsSuccess(hr)) { Log.PrintLog(this, "Failed to set I2C protocol: " + stdErr, LogDetailLevel.LogRelevant); RetVal = false; } hr = Programmer.I2C_SetSpeed(enumI2Cspeed.CLK_100K, out stdErr); if (!IsSuccess(hr)) { Log.PrintLog(this, "Failed to set I2C bus clock speed: " + stdErr, LogDetailLevel.LogRelevant); RetVal = false; } hr = Programmer.I2C_ResetBus(out stdErr); if (!IsSuccess(hr)) { Log.PrintLog(this, "Failed to reset I2C bus: " + stdErr, LogDetailLevel.LogRelevant); RetVal = false; } byte[] DevList = new byte[0]; hr = Programmer.I2C_GetDeviceList(out DevList, out stdErr); if (!IsSuccess(hr)) { Log.PrintLog(this, "Failed to get device list: " + stdErr, LogDetailLevel.LogRelevant); RetVal = false; } Log.PrintLog(this, "I2C Bus reinitialized successfully.", LogDetailLevel.LogEverything); for (int i = 0; i < I2CTests.Count(); i++) { bool DeviceFound = false; for (int j = 0; j < DevList.Count(); j++) { if (DevList[j] == (byte)I2CTests[i].Address) { DeviceFound = true; break; } } if (DeviceFound) { if (I2CTests[i].Action == MTKI2CTestType.Write) { hr = Programmer.I2C_SendData(I2CTests[i].Address, I2CTests[i].DataBuffer, out stdErr); if (!IsSuccess(hr)) { Log.PrintLog(this, "Failed I2C write: " + stdErr, LogDetailLevel.LogRelevant); RetVal = false; } } else if (I2CTests[i].Action == MTKI2CTestType.Read) { hr = Programmer.I2C_ReadData(I2CTests[i].Address, I2CTests[i].NumRxBytes, out I2CTests[i].RxDataBuffer, out stdErr); if (!IsSuccess(hr)) { Log.PrintLog(this, "Failed I2C read: " + stdErr, LogDetailLevel.LogRelevant); RetVal = false; } } } else { Log.PrintLog(this, "Cannot find I2C device with address: " + I2CTests[i].Address.ToString("x2").ToUpper(), LogDetailLevel.LogEverything); RetVal = false; } } if (!DisconnectProgrammer()) { TestStatusUpdate(MTKTestMessageType.Information, "Error!!!"); Log.PrintLog(this, "Unable to disconnect from the programmer.", LogDetailLevel.LogRelevant); RetVal = false; } return(RetVal); }