private void ReadAndLog(byte bRxCnt) { bool Ack = I2c.ReadBytes(Convert.ToByte(tbxAddr.Text, 16), bRxCnt); string Log = ""; if (Ack == false) { uiNAKCnt = Convert.ToUInt16(tbxNAKCnt.Text); uiNAKCnt++; tbxNAKCnt.Text = Convert.ToString(uiNAKCnt); } else { FillRxBox(bRxCnt); if (I2c.LogOn == true) { I2c.fs = new FileStream("I2cDriver2.log", FileMode.Append); I2c.sw = new StreamWriter(I2c.fs); Log = "Rd: " + tbxI2cRx.Text + " "; if (Ack == true) { Log += "ACK"; } else { Log += "NACK"; } I2c.sw.WriteLine(Log); I2c.LogCounter++; I2c.sw.Close(); I2c.fs.Close(); } } }
//--------------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); }