Beispiel #1
0
        public static bool Write()
        {
            bool Ack;
            byte CurrentDevAddr = DeviceAddr;

            // convert Addr to string "ll hh"
            byte   AddrLow  = (byte)Addr;
            byte   AddrHigh = (byte)(Addr >> 8);
            string MemAddr  = "";

            if (TwoByteAddr == true)
            {
                MemAddr += Convert.ToString((AddrHigh & 0xf0) >> 4, 16);
                MemAddr += Convert.ToString((AddrHigh & 0x0f), 16) + " ";
                MemAddr += Convert.ToString((AddrLow & 0xf0) >> 4, 16);
                MemAddr += Convert.ToString(AddrLow & 0x0f, 16);
            }
            else
            {
                MemAddr        += Convert.ToString((AddrLow & 0xf0) >> 4, 16);
                MemAddr        += Convert.ToString(AddrLow & 0x0f, 16);
                CurrentDevAddr |= (byte)(AddrHigh << 1);
            }

            // Set address
            string TxBytes = MemAddr + " ";
            // Convert FileBuffer to string
            int i;

            for (i = FileBufferIndex; i < FileBufferIndex + PageSize - 1; i++)
            {
                TxBytes += Convert.ToString((FileBuffer[i] & 0xf0) >> 4, 16);
                TxBytes += Convert.ToString(FileBuffer[i] & 0x0f, 16) + " ";
            }

            TxBytes += Convert.ToString((FileBuffer[i] & 0xf0) >> 4, 16);
            TxBytes += Convert.ToString(FileBuffer[i] & 0x0f, 16);

            FileBufferIndex = i + 1;

            Ack = I2c.WriteBytes(CurrentDevAddr, TxBytes);
            I2c.StopCond();
            if (Ack == false)
            {
                MemWrRunning = false;
                return(false);
            }
            else
            {
                Addr += PageSize;
                // check if finish
                if (Addr > EndAddr)
                {
                    MemWrRunning = false;
                }
                return(true);
            }
        }
Beispiel #2
0
        private void btnI2cRx_Click(object sender, EventArgs e)
        {
            if ((tbxRxCount.Text != "") || (tbxRxCount.Text != "0"))
            {                   // something to read
                ReadAndLog(Convert.ToByte(tbxRxCount.Text, 10));

                I2c.StopCond();
            }

            TxRepeatCounter    = 0;
            tmPolling.Interval = Convert.ToUInt16(tbxRepeatDelay.Text);
            tmPolling.Start();
        }
Beispiel #3
0
        private void btnI2cTx_Click(object sender, EventArgs e)
        {
            bool Ack;

            Ack = I2c.WriteBytes(Convert.ToByte(tbxAddr.Text, 16),
                                 tbxI2cTx.Text);

            if (cbxRepeatedStart.Checked == false)
            {
                I2c.StopCond();
            }

            if (Ack == false)
            {
                uiNAKCnt = Convert.ToUInt16(tbxNAKCnt.Text);
                uiNAKCnt++;
                tbxNAKCnt.Text = Convert.ToString(uiNAKCnt);
            }

            TxRepeatCounter    = 0;
            tmPolling.Interval = Convert.ToUInt16(tbxRepeatDelay.Text);
            tmPolling.Start();
        }
Beispiel #4
0
        private void tmPolling_Tick(object sender, EventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new tmPollingTickDelegate(tmPolling_Tick), new object[] { sender, e });
            }
            else
            {
                if (cbxRepeat.Checked == true)       // Terminal Tx repeat
                {
                    bool Ack = true;

                    if (tbxI2cTx.Text != "") // if "", then supress I2cWr
                    {
                        Ack = I2c.WriteBytes(Convert.ToByte(tbxAddr.Text, 16),
                                             tbxI2cTx.Text);

                        if (cbxRepeatedStart.Checked == false)
                        {
                            I2c.StopCond();
                        }
                    }
                    if (Ack == false)
                    {
                        uiNAKCnt++;
                        tbxNAKCnt.Text = Convert.ToString(uiNAKCnt);
                    }
                    else
                    {
                        if ((tbxRxCount.Text != "") && (tbxRxCount.Text != "0"))
                        {                   // something to read
                            ReadAndLog(Convert.ToByte(tbxRxCount.Text, 10));

                            I2c.StopCond();
                        }                   // end of something to read
                    }



                    TxRepeatCounter++;
                    tbxRepeatCounter.Text = Convert.ToString(TxRepeatCounter);

                    if ((StopOnError == true) &&
                        (Ack == false))
                    {
                        cbxRepeat.Checked = false;
                    }
                }

                else if (Eeprom.MemRdRunning == true)
                {
                    if (Eeprom.Read() == false)
                    {
                        uiNAKCnt = Convert.ToUInt16(tbxNAKCnt.Text);
                        uiNAKCnt++;
                        tbxNAKCnt.Text      = Convert.ToString(uiNAKCnt);
                        Eeprom.MemRdRunning = false;
                        tbxCurrentAddr.Text = "failed";
                    }
                    else
                    {
                        tbxCurrentAddr.Text = Convert.ToString(Eeprom.Addr);
                    }
                }

                else if (Eeprom.MemWrRunning == true)
                {
                    if (Eeprom.Write() == false)
                    {
                        uiNAKCnt = Convert.ToUInt16(tbxNAKCnt.Text);
                        uiNAKCnt++;
                        tbxNAKCnt.Text      = Convert.ToString(uiNAKCnt);
                        Eeprom.MemWrRunning = false;
                        tbxCurrentAddr.Text = "failed";
                    }
                    else
                    {
                        Thread.Sleep(10);           // 10ms Eeprom Wr
                        tbxCurrentAddr.Text = Convert.ToString(Eeprom.Addr);
                    }
                }

                else if (I2c.LogOn == true)
                {
                    tbxLogCounter.Text = Convert.ToString(I2c.LogCounter);
                }

                else if (CaptureRunning == true)
                {
                    CaptureI2c();
                }

                else
                {
                    tmPolling.Stop();
                }
            }
        }
Beispiel #5
0
//--------------Eeprom Read ---------------------------------------------------

        public static bool Read()
        {
            bool Ack;
            byte CurrentDevAddr = DeviceAddr;

            // convert Addr to string "ll hh"
            byte   AddrLow  = (byte)Addr;
            byte   AddrHigh = (byte)(Addr >> 8);
            string MemAddr  = "";
            string Log      = "";

            if (TwoByteAddr == true)
            {
                MemAddr += " " + Convert.ToString((AddrHigh & 0xf0) >> 4, 16);
                MemAddr += Convert.ToString((AddrHigh & 0x0f), 16) + " ";
                MemAddr += Convert.ToString((AddrLow & 0xf0) >> 4, 16);
                MemAddr += Convert.ToString(AddrLow & 0x0f, 16);
            }
            else
            {
                MemAddr        += Convert.ToString((AddrLow & 0xf0) >> 4, 16);
                MemAddr        += Convert.ToString(AddrLow & 0x0f, 16);
                CurrentDevAddr |= (byte)(AddrHigh << 1);
            }

            // Set address
            Ack = I2c.WriteBytes(CurrentDevAddr, MemAddr);

            if (Ack == false)
            {
                MemRdRunning = false;
                I2c.StopCond();
                return(false);
            }
            else
            {   // Read page, no I2c.StopCond() -> repeated Start
                Ack = I2c.ReadBytes(CurrentDevAddr, PageSize);
                if (Ack == false)
                {
                    MemRdRunning = false;
                }
                else
                {
                    if (I2c.LogOn == true)
                    {
                        I2c.fs = new FileStream("I2cDriver2.log", FileMode.Append);
                        I2c.sw = new StreamWriter(I2c.fs);
                        Log    = "Rd: " + Convert.ToString(PageSize) + " bytes ";
                        if (Ack == true)
                        {
                            Log += "ACK";
                        }
                        else
                        {
                            Log += "NACK";
                        }
                        I2c.sw.WriteLine(Log);
                        I2c.LogCounter++;
                        I2c.sw.Close();
                        I2c.fs.Close();
                    }
                }
                I2c.StopCond();
            }

            Addr += PageSize;

            // fill file buffer
            int i;

            for (i = 0; i < PageSize; i++)
            {
                FileBuffer[FileBufferIndex] = I2c.bRdBuffer[i];
                FileBufferIndex++;
            }

            // check if finish
            if (Addr > EndAddr)
            {
                MemRdRunning = false;
                FileStream   fs = new FileStream(FileName, FileMode.Create);
                BinaryWriter bw = new BinaryWriter(fs);

                for (i = 0; i < Length; i++)
                {
                    bw.Write(FileBuffer[i]);
                }

                bw.Close();
                fs.Close();
            }
            return(Ack);
        }