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);
        }
Пример #2
0
        int connected = 0;  // DTV

        private void InitPPCOM(GUI_Settings guiSettings)
        {
            int    hr;
            string strVolt;
            string strError;

            if (pp != null)
            {
                return;             //Programmer already started
            }
            pp = new PP_ComLib_WrapperClass();

            if (!pp.w_IsConnected())
            {
                if (pp.w_ConnectToLatest() == 0)
                {
                    AppendTextToLog("Detected PSoC Programmer COM object version " + pp.Version());
                }
                else
                {
                    AppendTextToLog("PSoC Programmer not installed. Please install PSoC Programmer and try again.");

                    //Disconnect from COM-object and unload it
                    pp = null;
                    GC.GetTotalMemory(true);
                    return;
                }
            }

            //Open and Configure MiniProg3 port
            hr = OpenPort(out strError);
            if (!SUCCEEDED(hr))
            {
                rtbLog.AppendText("Connect error: " + strError);
                rtbLog.AppendText("\r\n");

                //Disconnect from COM-object and unload it
                pp = null;
                GC.GetTotalMemory(true);
                return;
            }

            pp.SetProtocolClock(enumFrequencies.FREQ_03_0, out strError);
            if (guiSettings.conn == Connector.P10)
            {
                pp.SetProtocolConnector(1, out strError);
            }
            else
            {
                pp.SetProtocolConnector(0, out strError);
            }

            pp.SetProtocol(enumInterfaces.SWD_SWV, out strError);

            if (guiSettings.volt == Voltage.V5_0)
            {
                strVolt = "5.0";
            }
            else if (guiSettings.volt == Voltage.V3_3)
            {
                strVolt = "3.3";
            }
            else if (guiSettings.volt == Voltage.V2_5)
            {
                strVolt = "2.5";
            }
            else if (guiSettings.volt == Voltage.V1_8)
            {
                strVolt = "1.8";
            }
            else
            {
                strVolt = "EXT";
            }

            if (strVolt != "EXT")
            {
                pp.SetPowerVoltage(strVolt, out strError);
                pp.PowerOn(out strError);
            }

            /* Init the event handler for received data */
            pp.OnUSB2IIC_DataReceived += new PP_ComLib_Wrapper.PP_ComLib_WrapperClass.DelegateByteArrayParam(pp_USB2IIC_ReceivedData);

            //object ports;
            string[] portsStr;
            hr = pp.GetPorts(out portsStr, out strError);
            //string[] portsStr = ports as string[];
            AppendTextToLog("Connected to '" + portsStr[0] + "' programmer!");
            btnConnect.Text = "Disconnect";     // DTV
            connected       = 1;                // DTV
        }