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); } }
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(); }
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(); }
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(); } } }
//--------------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); }