public static HID_SMBUS_STATUS Open(uint nDevices, ref IntPtr m_hidSmbus) { HID_SMBUS_STATUS ret = 0; uint numDevices = 0; m_hidSmbus = IntPtr.Zero; //if (IsOpen() == HID_SMBUS_SUCCESS) return HID_SMBUS_SUCCESS; ret = HidSmbus_GetNumDevices(ref numDevices, HidSmbus_VID, HidSmbus_PID); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } if (numDevices <= nDevices) { return(HID_SMBUS_STATUS.HID_SMBUS_DEVICE_NOT_FOUND); } ret = HidSmbus_Open(ref m_hidSmbus, 0, HidSmbus_VID, HidSmbus_PID); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } return(HidSmbus_SetSmbusConfig(m_hidSmbus, BandRate, 0x30, 1, 1000, 1000, 0, 0)); }
public static HID_SMBUS_STATUS Write(byte slaveAddress, ushort numBytesToWrite, byte OffsetAddr, byte[] WriteBytes) { HID_SMBUS_STATUS ret = HID_SMBUS_STATUS.HID_SMBUS_SUCCESS; if (IsOpen() != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(HID_SMBUS_STATUS.HID_SMBUS_ERROR); } byte[] wrbuf = new byte[80]; byte wradr = OffsetAddr; ushort destlength = numBytesToWrite; ushort destindex = 0; byte status = 0; byte detailedstatus = 0; ushort numretries = 0; ushort bytesread = 0; while (numBytesToWrite > 0) { destlength = numBytesToWrite; if (numBytesToWrite > 60) { destlength = 60; } Array.Copy(WriteBytes, destindex, wrbuf, 1, destlength); wrbuf[0] = wradr; do { ret = HidSmbus_TransferStatusRequest(m_hidSmbus); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } ret = HidSmbus_GetTransferStatusResponse(m_hidSmbus, ref status, ref detailedstatus, ref numretries, ref bytesread); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } if (status == (byte)HID_SMBUS_TRANSFER_S0.HID_SMBUS_S0_ERROR) { return(HID_SMBUS_STATUS.HID_SMBUS_ERROR); } }while (status == 0x01); ret = HidSmbus_WriteRequest(m_hidSmbus, slaveAddress, wrbuf, (byte)(destlength + 1)); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } numBytesToWrite -= destlength; destindex += destlength; wradr += (byte)destlength; } return(ret); }
public static HID_SMBUS_STATUS Read(byte slaveAddress, ushort numBytesToRead, byte OffsetAddr, ref byte[] readBytes) { HID_SMBUS_STATUS ret = HID_SMBUS_STATUS.HID_SMBUS_ERROR; byte[] BufTmp = new byte[64]; byte[] targetAddress = new byte[16]; byte ReadStatus = 0; byte numBytesRead = 0; Array.Clear(readBytes, 0, numBytesToRead); // if (IsOpen() != HID_SMBUS_SUCCESS) return HID_SMBUS_STATUS.HID_SMBUS_ERROR; targetAddress[0] = OffsetAddr; ret = HidSmbus_AddressReadRequest(m_hidSmbus, slaveAddress, numBytesToRead, 1, targetAddress); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { return(ret); } ushort readCont = 0; do { ret = HidSmbus_GetReadResponse(m_hidSmbus, ref ReadStatus, BufTmp, 64, ref numBytesRead); if (ret != HID_SMBUS_STATUS.HID_SMBUS_SUCCESS) { break; } if (ReadStatus != (byte)HID_SMBUS_TRANSFER_S0.HID_SMBUS_S0_ERROR) { Array.Copy(BufTmp, 0, readBytes, readCont, numBytesRead); readCont += numBytesRead; } else { return(HID_SMBUS_STATUS.HID_SMBUS_ERROR); } }while (ReadStatus == (byte)HID_SMBUS_TRANSFER_S0.HID_SMBUS_S0_BUSY); return(ret); }