Esempio n. 1
0
        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));
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        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);
        }