private CP2112_DLL.HID_SMBUS_STATUS Write3(byte slaveAddress, ushort numBytesToWrite, byte OffsetAddr, byte[] WriteBytes) { CP2112_DLL.HID_SMBUS_STATUS ret = CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS; if (!isOpened()) { return(CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_ERROR); } byte wradr = OffsetAddr; ushort destlength = numBytesToWrite; ushort numBytesToRead = numBytesToWrite; byte[] readBytes = new byte[numBytesToRead]; ushort destindex = 0; byte status = 0; byte detailedstatus = 0; ushort numretries = 0; ushort bytesread = 0; while (numBytesToWrite > 0) { status = 0; destlength = numBytesToWrite; if (numBytesToWrite > writeBlock) { destlength = (ushort)writeBlock; } byte[] wrbuf = new byte[destlength + 1]; Array.Copy(WriteBytes, destindex, wrbuf, 1, destlength); wrbuf[0] = wradr; ret = CP2112_DLL.HidSmbus_WriteRequest(m_hidSmbus, slaveAddress, wrbuf, (byte)(destlength + 1)); Util.Delay(delayTime); //Console.WriteLine("destlength:" + destlength); if (ret != CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } do { ret = CP2112_DLL.HidSmbus_TransferStatusRequest(m_hidSmbus); if (ret != CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } ret = CP2112_DLL.HidSmbus_GetTransferStatusResponse(m_hidSmbus, ref status, ref detailedstatus, ref numretries, ref bytesread); if (ret != CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } if (status == (byte)CP2112_DLL.HID_SMBUS_TRANSFER_S0.HID_SMBUS_S0_ERROR) { return(CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_ERROR); } //Console.WriteLine("detailedstatus :" + detailedstatus + "status :" + status + "numretries:" + numretries); if (numretries > 999) { break; } }while (status != 0x02); numBytesToWrite -= destlength; destindex += destlength; wradr += (byte)destlength; } ret = CP2112_DLL.HidSmbus_CancelTransfer(m_hidSmbus); //Util.Delay(50); //ret=Read3(slaveAddress, numBytesToRead, OffsetAddr, ref readBytes); //if (!Util.arrayCompare(readBytes, WriteBytes)) //{ // ret = CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_WRITE_COMAPARE_FAIL; //} return(ret); }
private CP2112_DLL.HID_SMBUS_STATUS Read3(byte slaveAddress, ushort numBytesToRead, byte OffsetAddr, ref byte[] readBytes) { byte[] targetAddress = new byte[1]; targetAddress[0] = OffsetAddr; byte[] BufTmp = new byte[255]; byte ReadStatus = 0; byte numBytesRead = 0; ushort readCont = 0; CP2112_DLL.HID_SMBUS_STATUS ret = CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_ERROR; if (!isOpened()) { return(CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_ERROR); } ret = CP2112_DLL.HidSmbus_SetTimeouts(m_hidSmbus, 100); if (ret != CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } ret = CP2112_DLL.HidSmbus_AddressReadRequest(m_hidSmbus, slaveAddress, numBytesToRead, 1, targetAddress); Util.Delay(50); ret = CP2112_DLL.HidSmbus_ForceReadResponse(m_hidSmbus, numBytesToRead); if (ret != CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } Util.Delay(20); do { ret = CP2112_DLL.HidSmbus_GetReadResponse(m_hidSmbus, ref ReadStatus, BufTmp, 64, ref numBytesRead); // CP2112_DLL.HidSmbus_CancelTransfer(m_hidSmbus); if (ret != CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { break; } if (ReadStatus != (byte)CP2112_DLL.HID_SMBUS_TRANSFER_S0.HID_SMBUS_S0_ERROR) { Array.Copy(BufTmp, 0, readBytes, readCont, numBytesRead); readCont += numBytesRead; } else { return(CP2112_DLL.HID_SMBUS_STATUS.HID_SMBUS_ERROR); } }while (readCont < numBytesToRead); //ret = CP2112_DLL.HidSmbus_GetReadResponse(m_hidSmbus, ref ReadStatus, // BufTmp, 255, ref numBytesRead); //Array.Copy(BufTmp, 0, readBytes, 0, numBytesRead); CP2112_DLL.HidSmbus_CancelTransfer(m_hidSmbus); return(ret); }