コード例 #1
0
        public void SetRtc(DateTime rtcTime)
        {
            StxEtxMemoryStream stream = new StxEtxMemoryStream();

            stream.StartPacket();
            stream.WriteByte((byte)Commands.SetRtc);
            stream.WriteByte(ConvertToBcd(rtcTime.Second));
            stream.WriteByte(ConvertToBcd(rtcTime.Minute));
            stream.WriteByte(ConvertToBcd(rtcTime.Hour));
            byte dayOfWeek = (byte)rtcTime.DayOfWeek;

            if (rtcTime.DayOfWeek == DayOfWeek.Sunday)
            {
                dayOfWeek = 7;
            }
            stream.WriteByte(dayOfWeek);
            stream.WriteByte(ConvertToBcd(rtcTime.Day));
            stream.WriteByte(ConvertToBcd(rtcTime.Month));
            stream.WriteByte(ConvertToBcd((rtcTime.Year - 2000)));
            stream.EndPacket();
            byte[]    bytes        = stream.GetBytes();
            uint      bytesWritten = 0;
            FT_STATUS status       = _Ftdi.Write(bytes, bytes.Length, ref bytesWritten);

            if (status != FT_STATUS.FT_OK)
            {
                throw new Exception("Error writing data (SetRtc)");
            }
            if (bytesWritten != bytes.Length)
            {
                throw new Exception("Wrong number of bytes written (SetRtc)");
            }
        }
コード例 #2
0
        /* Function : FTDI_SendData
         * Author	: ENTTEC
         * Purpose  : Send Data (DMX or other packets) to the PRO
         * Parameters: Label, Pointer to Data Structure, Length of Data
         * Modified by Gareth Evans, Sniper Systems to convert this to c# for use
         */
        private bool FTDI_SendData(FT_HANDLE handle, int label, byte[] data, ref FT_STATUS status)
        {
            if (Connected)
            {
                int bytes_written = 0;
                //int size = 0;
                // Form Packet Header
                byte[] header = GetProHeader(label, data.Length);
                byte[] footer = new byte[1] {
                    DMX_END_CODE
                };
                byte[] packet = header.Concat(data).Concat(footer).ToArray();
                //Console.WriteLine("Write: {0}", Sniper.Common.Conversion.ToHex(true, packet));
                bytes_written = write(handle, packet, packet.Length);
                if (bytes_written != packet.Length)
                {
                    return(false);
                }

                if (status == FT_STATUS.FT_OK)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(false);
        }
コード例 #3
0
        public byte[] ReadSramPage()
        {
            Console.WriteLine("ReadSramPage");

            byte[] cmdData = new byte[] {
                (byte)Commands.SramRead
            };

            StxEtxPacket packet = new StxEtxPacket(cmdData);

            byte[]    bytes        = packet.GetBytes();
            uint      bytesWritten = 0;
            FT_STATUS status       = _Ftdi.Write(bytes, bytes.Length, ref bytesWritten);

            if (status != FT_STATUS.FT_OK)
            {
                throw new Exception("Error writing data (ReadSramPage)");
            }
            if (bytesWritten != bytes.Length)
            {
                throw new Exception("Wrong number of bytes written (ReadSramPage)");
            }

            return(ReceiveResponse());
        }
コード例 #4
0
ファイル: FTDI.cs プロジェクト: naelcm/VHDL-SPI-Port
        public unsafe bool WriteAndReadBytes(byte[] outData, out byte[] inData, UInt32 bytes)
        {
            FT_STATUS ftStatus     = FT_STATUS.FT_OTHER_ERROR;
            UInt32    inByteCount  = 0;
            UInt32    outByteCount = 0;

            inData = new byte[bytes];

            if (CheckConnect())
            {
                // Empty input buffer before trying to read
                ftStatus = FT_Purge(ftHandle, (UInt32)(FT_PURGE_FLAGS.FT_PURGE_RX | FT_PURGE_FLAGS.FT_PURGE_TX));

                if (ftStatus == FT_STATUS.FT_OK)
                {
                    fixed(byte *pbyBuffer = outData)
                    ftStatus = FT_Write(ftHandle, pbyBuffer, bytes, ref outByteCount);

                    if (ftStatus == FT_STATUS.FT_OK)
                    {
                        fixed(byte *pbyBuffer = inData)
                        ftStatus = FT_Read(ftHandle, pbyBuffer, bytes, ref inByteCount);
                    }
                }
            }
            return((ftStatus == FT_STATUS.FT_OK) && (inByteCount == bytes) && (outByteCount == bytes));
        }
コード例 #5
0
        private byte[] ReceiveResponse()
        {
            byte[]       result = null;
            StxEtxParser parser = new StxEtxParser();

            parser.PacketComplete += new StxEtxParser.PacketCompleteHandler((par, data) => {
                result = data;
            });

            while (result == null)
            {
                if (_WaitHandle.WaitOne(1000) == false)
                {
                    throw new Exception("Error reading data (ReceiveResponse)");
                }

                uint rxBytes = 0;
                _Ftdi.GetRxBytesAvailable(ref rxBytes);
                if (rxBytes > 0)
                {
                    byte[]    readBuffer = new byte[rxBytes];
                    uint      readBytes  = 0;
                    FT_STATUS status     = _Ftdi.Read(readBuffer, (uint)readBuffer.Length, ref readBytes);
                    if (status != FT_STATUS.FT_OK)
                    {
                        throw new Exception("Error reading data (ReceiveResponse)");
                    }
                    parser.Parse(readBuffer, 0, (int)readBytes);
                }
            }

            return(result);
        }
コード例 #6
0
        protected virtual void writeDMXBuffer()
        {
            while (!done)
            {
                newData = BuildBufferFromQueues();
                try
                {
                    if (Connected)
                    {
                        if (newData)
                        {
                            FT_STATUS status = FT_STATUS.FT_OK;
                            if (!FTDI_SendData(handle, SET_DMX_TX_MODE, (new byte[1]).Concat(buffer).ToArray(), ref status))
                            {
                                break;
                            }
                            newData = false;
                        }

                        System.Threading.Thread.Sleep(25);
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(25);
                    }
                }
                catch (Exception)
                {
                    break;
                }
            }
            Connected = false;
            done      = false;
        }
コード例 #7
0
ファイル: OpenDMX.cs プロジェクト: russjudge/ArtemisModLoader
 static void TestStatus(FT_STATUS status)
 {
     if (status != FT_STATUS.FT_OK)
     {
         throw new DMXException(status);
     }
 }
コード例 #8
0
ファイル: FTD2XX.cs プロジェクト: qcyb/FlyingDMX
        public override void Start()
        {
            try
            {
                var ports = SerialPort.GetPortNames();
                foreach (string port in ports)
                {
                    SerialPort sPort = new SerialPort(port);
                    sPort.Open();
                    sPort.Close();
                    sPort.Dispose();
                }
            }
            catch
            {
            }

            handle = 0;
            status = FT_Open(0, ref handle);
            Console.WriteLine("[DRIVER STATUS] " + status.ToString());

            InitOpenDMX();

            done       = false;
            workThread = new Thread(new ThreadStart(writeData));
            workThread.Start();
        }
コード例 #9
0
        public FT_STATUS I2C_ReadByte(byte slaveAddress, uint deviceAddress, ref byte data)
        {
            FT_STATUS status          = FT_STATUS.FT_OK;
            uint      bytesToTransfer = 0;
            uint      bytesTransfered = 0;

            byte[] buffer = new byte[2];

            buffer[bytesToTransfer++] = (byte)deviceAddress;
            buffer[bytesToTransfer++] = (byte)(deviceAddress >> 8);

            status = I2C_DeviceWrite(handle, slaveAddress, bytesToTransfer, buffer, ref bytesTransfered,
                                     I2C_TRANSFER_OPTIONS_START_BIT);

            APP_CHECK_STATUS(status);

            bytesToTransfer = 1;
            bytesTransfered = 0;
            buffer          = new byte[1];
            status         |= I2C_DeviceRead(handle, slaveAddress, bytesToTransfer, buffer, ref bytesTransfered,
                                             I2C_TRANSFER_OPTIONS_START_BIT | I2C_TRANSFER_OPTIONS_NACK_LAST_BYTE);

            APP_CHECK_STATUS(status);

            data = buffer[0];
            return(status);
        }
コード例 #10
0
        /// <summary>
        /// CBUSの設定を変更する
        /// </summary>
        /// <param name="configs"></param>
        public void SetCBusConfig(CBUSConfig configs)
        {
            if (!IsOpen())
            {
                throw new InvalidOperationException("Connection is not opened yet.");
            }

            // EEPROM読込み
            eeprom = new FT232R_EEPROM_STRUCTURE();
            FT_STATUS ret = ftdi.ReadFT232REEPROM(eeprom);

            if (ret != FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Failed to read EEPROM. FT_STATUS=" + ret);
            }

            // 設定が異なる場合のみ、EEPROMに書き込み
            if (eeprom.Cbus0 != configs.cbus0 ||
                eeprom.Cbus1 != configs.cbus1 ||
                eeprom.Cbus2 != configs.cbus2 ||
                eeprom.Cbus3 != configs.cbus3)
            {
                eeprom.Cbus0 = configs.cbus0;
                eeprom.Cbus1 = configs.cbus1;
                eeprom.Cbus2 = configs.cbus2;
                eeprom.Cbus3 = configs.cbus3;
                ret          = ftdi.WriteFT232REEPROM(eeprom);
                if (ret != FT_STATUS.FT_OK)
                {
                    throw new InvalidOperationException("Failed to write EEPROM. FT_STATUS=" + ret);
                }
            }
        }
コード例 #11
0
        void OpenFtdiDeviceThenWaitAndWrite()
        {
            Console.WriteLine("Starting DMX Frame sender thread : id {0} [{1}]", Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.Name);
            uint handle = 0;

            try
            {
                status = FtdiDevice.FT_Open(0, ref handle).CheckStatus("FT_Open()");
            }
            catch (System.DllNotFoundException dllExc)
            {
                Console.WriteLine("DllException : " + dllExc.Message);
                Console.WriteLine("OpenDMX serial chipset driver may not be installed in your system !");
                Console.WriteLine("You can download the latest version here : http://www.ftdichip.com/Drivers/D2XX.htm");
                Console.WriteLine("Your DMX interface can not be used, is not correctly installed or is not recognized.");
                return;
            }
            if (status != FT_STATUS.FT_OK)
            {
                if (status == FT_STATUS.FT_DEVICE_NOT_FOUND)
                {
                    Console.WriteLine("No OpenDMX Interface.");
                    return;
                }
                else
                {
                    Console.WriteLine($"ERROR : unknow error in FT_Open() : {status}");
                }
            }
            Console.WriteLine("OpenDMX interface found.");
            WriteDmxDataLoop(handle);
        }
コード例 #12
0
        public void WriteSram(int pageAddr, byte[] data)
        {
            if ((pageAddr % 1) != 0)
            {
                throw new ArgumentException("pageAddr must be word aligned");
            }

            StxEtxMemoryStream stream = new StxEtxMemoryStream();

            int addr = pageAddr / 2;

            stream.StartPacket();
            stream.WriteByte((byte)Commands.SetAddr);
            WriteIntBe(stream, addr);
            stream.EndPacket();

            stream.StartPacket();
            stream.WriteByte((byte)Commands.SramWrite);
            stream.Write(data, 0, data.Length);
            stream.EndPacket();

            byte[]    bytes        = stream.GetBytes();
            uint      bytesWritten = 0;
            FT_STATUS status       = _Ftdi.Write(bytes, bytes.Length, ref bytesWritten);

            if (status != FT_STATUS.FT_OK)
            {
                throw new Exception("Error writing data (WriteSram)");
            }
            if (bytesWritten != bytes.Length)
            {
                throw new Exception("Wrong number of bytes written (WriteSram)");
            }
            _PendingAck++;
        }
コード例 #13
0
        unsafe public byte[] Read(UInt32 rxCount)
        {
            UInt32    dwRet    = 0;
            FT_STATUS ftStatus = FT_STATUS.FT_OTHER_ERROR;

            byte[] cBuf = new byte[3];

            cBuf[0] = (byte)'!';
            cBuf[1] = (byte)0; // PORT A
            cBuf[2] = 0xFF;
            // write the direction to output
            fixed(byte *pBuf = cBuf)
            {
                ftStatus = FT_Write(m_hPort, pBuf, 3, ref dwRet);
                if (ftStatus != FT_STATUS.FT_OK && dwRet != 3)
                {
                    throw (new SystemException("Error WriteDirection"));
                }
            }

            fixed(byte *pBuf = cBuf)
            {
                ftStatus = FT_Read(m_hPort, pBuf, rxCount, ref dwRet);
            }

            if (ftStatus != FT_STATUS.FT_OK)
            {
                return(null);
            }

            return(cBuf);
        }
コード例 #14
0
        unsafe public byte[] ReadValue_SPI(UInt32 rxCount)
        {
            UInt32    dwRet    = 0;
            FT_STATUS ftStatus = FT_STATUS.FT_OTHER_ERROR;

            byte[] cBuf = new byte[rxCount];

            dwRet = 0;
            long timeout;

            timeout = 0;

            do
            {
                ftStatus = FT_GetQueueStatus(m_hPort, ref dwRet);
                timeout++;
            } while ((dwRet < rxCount) && (timeout < 100000));

            if (timeout == 100000)
            {
                return(null);
            }

            fixed(byte *pBuf = cBuf)
            {
                ftStatus = FT_Read(m_hPort, pBuf, rxCount, ref dwRet);
            }

            if (ftStatus != FT_STATUS.FT_OK)
            {
                return(null);
            }

            return(cBuf);
        }
コード例 #15
0
 static void APP_CHECK_STATUS(FT_STATUS status)
 {
     if (status != FT_STATUS.FT_OK)
     {
         Console.WriteLine("Error: {0}", status.ToString());
     }
 }
コード例 #16
0
ファイル: FTDI.cs プロジェクト: Jchuchla/vixen-sall-vixen
        public void start()
        {
            handle = 0;
            status = FT_Open(0, ref handle);
            if (status != FT_STATUS.FT_OK)
            {
                string message = "Failed to open FTDI device" + status.ToString();
                //failure
                throw new Exception(message);
            }
            else
            {
                //worked

                //Configure the device for DMX data
                initOpenDMX();

                //Initialize the universe and start code to all 0s
                for (int i = 0; i < 513; i++)
                {
                    setDmxValue(i, 0);
                }

                //Create and start the thread that sends the output data to the driver
                Thread thread = new Thread(new ThreadStart(writeData));
                thread.Start();
            }
        }
コード例 #17
0
        private void writeDMXBuffer()
        {
            while (!done)
            {
                try
                {
                    newData = MoveNextBufferToThread();

                    if (Connected)
                    {
                        if (newData)
                        {
                            FT_STATUS status = FT_STATUS.FT_OK;
                            if (!FTDI_SendData(handle, SET_DMX_TX_MODE, (new byte[1]).Concat(bufferToUsb).ToArray(), ref status))
                            {
                                break;
                            }
                            newData = false;
                        }

                        System.Threading.Thread.Sleep(25);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                    break;
                }
            }
            Connected = false;
            done      = false;
        }
コード例 #18
0
        public void SetFlashSelect(FlashType flashType)
        {
            byte flashSel;

            if (flashType == FlashType.Rom)
            {
                flashSel = 0;
            }
            else
            {
                flashSel = 1;
            }
            Console.WriteLine(String.Format("Set FlashSel: {0}", flashSel));

            StxEtxMemoryStream stream = new StxEtxMemoryStream();

            stream.StartPacket();
            stream.WriteByte((byte)Commands.FlashSelect);
            stream.WriteByte(flashSel);
            stream.EndPacket();

            byte[]    bytes        = stream.GetBytes();
            uint      bytesWritten = 0;
            FT_STATUS status       = _Ftdi.Write(bytes, bytes.Length, ref bytesWritten);

            if (status != FT_STATUS.FT_OK)
            {
                throw new Exception("Error writing data (SetFlashSelect)");
            }
            if (bytesWritten != bytes.Length)
            {
                throw new Exception("Wrong number of bytes written (SetFlashSelect)");
            }
        }
コード例 #19
0
        unsafe protected virtual void WriteDirection(char port, byte value)
        {
            UInt32    dwRet    = 0;
            FT_STATUS ftStatus = FT_STATUS.FT_OTHER_ERROR;

            byte[] cBuf = new byte[5];

            cBuf[0] = (byte)'!';
            cBuf[1] = (byte)port;
            cBuf[2] = value;

            switch (port)
            {
            case 'A':
                m_direction[0] = value;
                break;

            case 'B':
                m_direction[1] = value;
                break;

            case 'C':
                m_direction[2] = value;
                break;
            }

            fixed(byte *pBuf = cBuf)
            {
                ftStatus = FT_Write(m_hPort, pBuf, 3, ref dwRet);
                if (ftStatus != FT_STATUS.FT_OK && dwRet != 3)
                {
                    throw (new SystemException("Error WriteDirection"));
                }
            }
        }
コード例 #20
0
        public void EraseSector(int sectorAddr)
        {
            Console.WriteLine(String.Format("Erase sector: 0x{0:X8}", sectorAddr));

            StxEtxMemoryStream stream = new StxEtxMemoryStream();

            int addr = sectorAddr / 4;

            stream.StartPacket();
            stream.WriteByte((byte)Commands.SetAddr);
            WriteIntBe(stream, addr);
            stream.EndPacket();

            stream.StartPacket();
            stream.WriteByte((byte)Commands.FlashErase);
            stream.EndPacket();

            byte[]    bytes        = stream.GetBytes();
            uint      bytesWritten = 0;
            FT_STATUS status       = _Ftdi.Write(bytes, bytes.Length, ref bytesWritten);

            if (status != FT_STATUS.FT_OK)
            {
                throw new Exception("Error writing data (EraseSector)");
            }
            if (bytesWritten != bytes.Length)
            {
                throw new Exception("Wrong number of bytes written (EraseSector)");
            }
            _PendingAck++;
        }
コード例 #21
0
        public override void Close()
        {
            isInitialized = false;
            if (ftdi != null && ftdi.IsOpen)
            {
                // バッファをクリア
                ClearBuffer();

                // ポートを閉じる
                FT_STATUS ret = ftdi.ResetPort();
                if (ret == FT_STATUS.FT_OK)
                {
                    ret = ftdi.Close();
                    if (ret != FT_STATUS.FT_OK)
                    {
                        throw new InvalidOperationException("close failure.");
                    }
                }
                else
                {
                    throw new InvalidOperationException("reset failure.");
                }
                ftdi = null;
            }
        }
コード例 #22
0
ファイル: D2XX.cs プロジェクト: elemprog/Thermometer
        // Flush drivers receive buffer - Get queue status and read everything available and discard data
        protected byte FlushBuffer()
        {
            ftStatus = GetRxBytesAvailable(ref BytesAvailable);  // Get the number of bytes in the receive buffer
            if (ftStatus != FT_STATUS.FT_OK)
            {
                return(1);
            }

            if (BytesAvailable > 0)
            {
                ftStatus = Read(InputBuffer, BytesAvailable, ref NumBytesRead);         //Read out the data from receive buffer
                if (ftStatus != FT_STATUS.FT_OK)
                {
                    return(1);       // error
                }
                else
                {
                    return(0);       // all bytes successfully read
                }
            }
            else
            {
                return(0);           // there were no bytes to read
            }
        }
コード例 #23
0
        public FirmwareIdentity ReadVersion()
        {
            byte[] cmdData = new byte[] {
                (byte)Commands.ReadVersion
            };

            StxEtxPacket packet = new StxEtxPacket(cmdData);

            byte[]    bytes        = packet.GetBytes();
            uint      bytesWritten = 0;
            FT_STATUS status       = _Ftdi.Write(bytes, bytes.Length, ref bytesWritten);

            if (status != FT_STATUS.FT_OK)
            {
                throw new Exception("Error writing data (ReadVersion)");
            }
            if (bytesWritten != bytes.Length)
            {
                throw new Exception("Wrong number of bytes written (ReadVersion)");
            }

            byte[] result = ReceiveResponse();

            _FirmwareIdentity.Id    = result[0];
            _FirmwareIdentity.Major = result[1];
            _FirmwareIdentity.Minor = result[2];
            _FirmwareIdentity.Debug = result[3];

            return(_FirmwareIdentity);
        }
コード例 #24
0
ファイル: D2XX.cs プロジェクト: elemprog/Thermometer
        // Read a specified number of bytes from the driver receive buffer
        protected byte Receive_Data(uint BytesToRead)
        {
            uint NumBytesInQueue  = 0;
            uint QueueTimeOut     = 0;
            uint Buffer1Index     = 0;
            uint Buffer2Index     = 0;
            uint TotalBytesRead   = 0;
            bool QueueTimeoutFlag = false;
            uint NumBytesRxd      = 0;

            // Keep looping until all requested bytes are received or we've tried 5000 times (value can be chosen as required)
            while ((TotalBytesRead < BytesToRead) && (QueueTimeoutFlag == false))
            {
                ftStatus = GetRxBytesAvailable(ref NumBytesInQueue);       // Check bytes available

                if ((NumBytesInQueue > 0) && (ftStatus == FT_STATUS.FT_OK))
                {
                    ftStatus = Read(InputBuffer, NumBytesInQueue, ref NumBytesRxd);  // if any available read them

                    if ((NumBytesInQueue == NumBytesRxd) && (ftStatus == FT_STATUS.FT_OK))
                    {
                        Buffer1Index = 0;

                        while (Buffer1Index < NumBytesRxd)
                        {
                            InputBuffer2[Buffer2Index] = InputBuffer[Buffer1Index];     // copy into main overall application buffer
                            Buffer1Index++;
                            Buffer2Index++;
                        }
                        TotalBytesRead = TotalBytesRead + NumBytesRxd;                  // Keep track of total
                    }
                    else
                    {
                        return(1);
                    }

                    QueueTimeOut++;
                    if (QueueTimeOut == 5000)
                    {
                        QueueTimeoutFlag = true;
                    }
                    else
                    {
                        Thread.Sleep(0);                                                // Avoids running Queue status checks back to back
                    }
                }
            }
            // returning globals NumBytesRead and the buffer InputBuffer2
            NumBytesRead = TotalBytesRead;

            if (QueueTimeoutFlag == true)
            {
                return(1);
            }
            else
            {
                return(0);
            }
        }
コード例 #25
0
 public static void start()
 {
     handle  = 0;
     status  = FT_Open(0, ref handle);
     runtime = new Thread(new ThreadStart(writeData));
     runtime.Start();
     setDmxValue(0, 0);  //Set DMX Start Code
 }
コード例 #26
0
ファイル: FTD2XX.cs プロジェクト: qcyb/FlyingDMX
 public override void Stop()
 {
     this.done = true;
     this.workThread.Abort();
     this.workThread = null;
     status          = FT_ResetDevice(handle);
     status          = FT_Close(handle);
 }
コード例 #27
0
 private static bool Ok(FT_STATUS status)
 {
     if (status == FT_STATUS.FT_OK)
     {
         return(true);
     }
     throw new ApplicationException($"[{nameof(FT232HDetector)}]Last operation failed code:{status}");
 }
コード例 #28
0
ファイル: Shows.cs プロジェクト: phil4565/DMX_Light
            public static void start()
            {
                handle = 0;
                status = FT_Open(0, ref handle);
                Thread thread = new Thread(new ThreadStart(writeData));

                thread.Start();
            }
コード例 #29
0
ファイル: Ftdi.cs プロジェクト: DavidMartinOnGitHub/T1
        public void Initialize()
        {
            Console.WriteLine(">>Initialize");
#if LINUXBUILD
            FT_STATUS ftstatus = FT_SetVIDPID(0x0403, 0x7cb0);
            Console.WriteLine("FT_STATUS = {0}", ftstatus.ToString());
#endif
            Console.WriteLine("<<Initialize");
        }
コード例 #30
0
ファイル: Ftd2xx.cs プロジェクト: NitramAnaip/deCo2me
        public static void Read(FT_HANDLE handle, byte[] buffer)
        {
            FT_STATUS status = FT_Read(handle, buffer, (uint)buffer.Length, out uint bytesReturned);

            if (status != FT_STATUS.FT_OK || bytesReturned != buffer.Length)
            {
                throw new InvalidOperationException();
            }
        }
コード例 #31
0
ファイル: FTDI.cs プロジェクト: stewmc/vixen
		public void start()
		{
			handle = 0;
			status = FT_Open(0, ref handle);
			if (status != FT_STATUS.FT_OK) {
				string message = "Failed to open FTDI device" + status.ToString();
				//failure
				throw new Exception(message);
			}
			else {
				//worked

				//Configure the device for DMX data
				initOpenDMX();

				//Initialize the universe and start code to all 0s
				for (int i = 0; i < 513; i++)
					setDmxValue(i, 0);

				//Create and start the thread that sends the output data to the driver
				Thread thread = new Thread(new ThreadStart(writeData));
				thread.Start();
			}
		}
コード例 #32
0
ファイル: FTDI.cs プロジェクト: seth-obi-msci/CSharp
        //**************************************************************************
        //**************************************************************************
        //
        // HELPER METHODS
        //
        //**************************************************************************
        //**************************************************************************
        //**************************************************************************
        // ErrorHandler
        //**************************************************************************
        /// <summary>
        /// Method to check ftStatus and ftErrorCondition values for error conditions and throw exceptions accordingly.
        /// </summary>
        private void ErrorHandler(FT_STATUS ftStatus, FT_ERROR ftErrorCondition)
        {
            if (ftStatus != FT_STATUS.FT_OK)
            {
                // Check FT_STATUS values returned from FTD2XX DLL calls
                switch (ftStatus)
                {
                    case FT_STATUS.FT_DEVICE_NOT_FOUND:
                        {
                            throw new FT_EXCEPTION("FTDI device not found.");
                        }
                    case FT_STATUS.FT_DEVICE_NOT_OPENED:
                        {
                            throw new FT_EXCEPTION("FTDI device not opened.");
                        }
                    case FT_STATUS.FT_DEVICE_NOT_OPENED_FOR_ERASE:
                        {
                            throw new FT_EXCEPTION("FTDI device not opened for erase.");
                        }
                    case FT_STATUS.FT_DEVICE_NOT_OPENED_FOR_WRITE:
                        {
                            throw new FT_EXCEPTION("FTDI device not opened for write.");
                        }
                    case FT_STATUS.FT_EEPROM_ERASE_FAILED:
                        {
                            throw new FT_EXCEPTION("Failed to erase FTDI device EEPROM.");
                        }
                    case FT_STATUS.FT_EEPROM_NOT_PRESENT:
                        {
                            throw new FT_EXCEPTION("No EEPROM fitted to FTDI device.");
                        }
                    case FT_STATUS.FT_EEPROM_NOT_PROGRAMMED:
                        {
                            throw new FT_EXCEPTION("FTDI device EEPROM not programmed.");
                        }
                    case FT_STATUS.FT_EEPROM_READ_FAILED:
                        {
                            throw new FT_EXCEPTION("Failed to read FTDI device EEPROM.");
                        }
                    case FT_STATUS.FT_EEPROM_WRITE_FAILED:
                        {
                            throw new FT_EXCEPTION("Failed to write FTDI device EEPROM.");
                        }
                    case FT_STATUS.FT_FAILED_TO_WRITE_DEVICE:
                        {
                            throw new FT_EXCEPTION("Failed to write to FTDI device.");
                        }
                    case FT_STATUS.FT_INSUFFICIENT_RESOURCES:
                        {
                            throw new FT_EXCEPTION("Insufficient resources.");
                        }
                    case FT_STATUS.FT_INVALID_ARGS:
                        {
                            throw new FT_EXCEPTION("Invalid arguments for FTD2XX function call.");
                        }
                    case FT_STATUS.FT_INVALID_BAUD_RATE:
                        {
                            throw new FT_EXCEPTION("Invalid Baud rate for FTDI device.");
                        }
                    case FT_STATUS.FT_INVALID_HANDLE:
                        {
                            throw new FT_EXCEPTION("Invalid handle for FTDI device.");
                        }
                    case FT_STATUS.FT_INVALID_PARAMETER:
                        {
                            throw new FT_EXCEPTION("Invalid parameter for FTD2XX function call.");
                        }
                    case FT_STATUS.FT_IO_ERROR:
                        {
                            throw new FT_EXCEPTION("FTDI device IO error.");
                        }
                    case FT_STATUS.FT_OTHER_ERROR:
                        {
                            throw new FT_EXCEPTION("An unexpected error has occurred when trying to communicate with the FTDI device.");
                        }
                    default:
                        break;
                }
            }
            if (ftErrorCondition != FT_ERROR.FT_NO_ERROR)
            {
                // Check for other error conditions not handled by FTD2XX DLL
                switch (ftErrorCondition)
                {
                    case FT_ERROR.FT_INCORRECT_DEVICE:
                        {
                            throw new FT_EXCEPTION("The current device type does not match the EEPROM structure.");
                        }
                    case FT_ERROR.FT_INVALID_BITMODE:
                        {
                            throw new FT_EXCEPTION("The requested bit mode is not valid for the current device.");
                        }
                    case FT_ERROR.FT_BUFFER_SIZE:
                        {
                            throw new FT_EXCEPTION("The supplied buffer is not big enough.");
                        }

                    default:
                        break;
                }

            }

            return;
        }
コード例 #33
0
ファイル: FTDI.cs プロジェクト: vegaslight/vixen-modules
 //modified removing static
 public void start()
 {
     handle = 0;
     status = FT_Open(0, ref handle);
     if (status != FT_STATUS.FT_OK)
     {
         string message = "Failed to open FTDI device" + status.ToString();
         //failure
         throw new Exception(message);
     }
     else
     {
         //worked
         setDmxValue(0, 0);  //Set DMX Start Code
     }
 }
コード例 #34
0
            public byte[] ReadData()
            {
                uint BytesRead = 0;
                uint RxBytes = 0;
                uint EventDWord = 0;
                uint TxBytes = 0;
                CurExStatus = FT_GetStatus(curFtHandle, ref RxBytes, ref TxBytes, ref EventDWord);

                if (CurExStatus != FT_STATUS.FT_OK)
                    return null;

                if (RxBytes == 0) return null;

                var RecBuf = new byte[RxBytes];

                int IndexBuf = 0;
                while (RxBytes > 0)
                {
                    fixed (byte* rb = &RecBuf[IndexBuf])
                    {
                        CurExStatus = FT_Read(curFtHandle, rb, RxBytes < 256 ? RxBytes : 256, ref BytesRead);
                        if (CurExStatus != FT_STATUS.FT_OK)
                        {
                            return null;
                        }
                    }
                    IndexBuf += (int)BytesRead;
                    //  RxChar(RecBuf,BytesRead);
                    RxBytes -= BytesRead;
                }
                return RecBuf;
            }
コード例 #35
0
ファイル: FTDI.cs プロジェクト: vegaslight/vixen-modules
 //Added stop()
 public void stop()
 {
     //this.thread.Abort();
     status = FT_Close(handle);
 }
コード例 #36
0
ファイル: OpenDMX.cs プロジェクト: Kurocon/KDMX
 public static void initOpenDMX()
 {
     status = FT_ResetDevice(handle);
     status = FT_SetDivisor(handle, (char)12);  // set baud rate
     status = FT_SetDataCharacteristics(handle, BITS_8, STOP_BITS_2, PARITY_NONE);
     status = FT_SetFlowControl(handle, (char)FLOW_NONE, 0, 0);
     status = FT_ClrRts(handle);
     status = FT_Purge(handle, PURGE_TX);
     status = FT_Purge(handle, PURGE_RX);
 }
コード例 #37
0
ファイル: OpenDMX.cs プロジェクト: Kurocon/KDMX
 public static int write(uint handle, byte[] data, int length)
 {
     IntPtr ptr = Marshal.AllocHGlobal((int)length);
     Marshal.Copy(data, 0, ptr, (int)length);
     uint bytesWritten = 0;
     status = FT_Write(handle, ptr, (uint)length, ref bytesWritten);
     return (int)bytesWritten;
 }
コード例 #38
0
ファイル: OpenDMX.cs プロジェクト: Kurocon/KDMX
 public static void start()
 {
     handle = 0;
     status = FT_Open(0, ref handle);
     Thread thread = new Thread(new ThreadStart(writeData));
     thread.Start();
     setDmxValue(0, 0);  //Set DMX Start Code
 }
コード例 #39
0
ファイル: FTDI.cs プロジェクト: stewmc/vixen
		//Added stop()
		public void stop()
		{
			done = true;
			status = FT_Close(handle);
		}
コード例 #40
0
ファイル: OpenDMX.cs プロジェクト: valeryjacobs/TIMTLTS
        public static void writeData()
        {
            try
            {
                initOpenDMX();
                if (OpenDMX.status == FT_STATUS.FT_OK)
                {
                    status = FT_SetBreakOn(handle);
                    status = FT_SetBreakOff(handle);
                    bytesWritten = write(handle, buffer, buffer.Length);

                    Thread.Sleep(25);      //give the system time to send the data before sending more

                }
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp);
            }
        }
コード例 #41
0
ファイル: FTDI.cs プロジェクト: vegaslight/vixen-modules
 public int write(uint handle, byte[] data, int length)
 {
     Marshal.Copy(data, 0, ptr, (int)length);
     uint bytesWritten = 0;
     status = FT_Write(handle, ptr, (uint)length, ref bytesWritten);
     return (int)bytesWritten;
 }
コード例 #42
0
ファイル: Device.cs プロジェクト: karnauhov/smart-h
        private string OpenDevice(out ControllerStatus status, out string info)
        {
            status = ControllerStatus.DeviceError;
            info = "";

            //Get number of devices
            _ftStatus = _myFtdiDevice.GetNumberOfDevices(ref _ftdiDeviceCount);
            if (_ftStatus != FT_STATUS.FT_OK)
                return string.Format("Failed to get number of devices (error {0})", _ftStatus);
            if (_ftdiDeviceCount == 0)
            {
                status = ControllerStatus.DeviceAbsent;
                return "No connected devices";
            }

            //Get list of devices
            _ftdiDeviceList = new FT_DEVICE_INFO_NODE[_ftdiDeviceCount];
            _ftStatus = _myFtdiDevice.GetDeviceList(_ftdiDeviceList);
            if (_ftStatus != FT_STATUS.FT_OK)
                return string.Format("Failed to get list of devices (error {0})", _ftStatus);
            int ourDeviceIndex = -1;
            StringBuilder list = new StringBuilder();
            for (int i = 0; i < _ftdiDeviceCount; i++)
            {
                if (_ftdiDeviceList[i].Description.IndexOf(_description) != -1)
                    ourDeviceIndex = i;
                list.Append(string.Format("flags:{0},type:{1},ID:{2},loc.ID:{3},SN:{4},desc:'{5}'; ",
                    string.Format("{0:x}", _ftdiDeviceList[i].Flags),
                    _ftdiDeviceList[i].Type,
                    string.Format("{0:x}", _ftdiDeviceList[i].ID),
                    string.Format("{0:x}", _ftdiDeviceList[i].LocId),
                    _ftdiDeviceList[i].SerialNumber,
                    _ftdiDeviceList[i].Description));
            }
            string devices = list.ToString();
            if (ourDeviceIndex == -1)
            {
                status = ControllerStatus.DeviceAbsent;
                return string.Format("Device '{0}' is absent", _description + (devices != "" ? " (" + devices + ")" : ""));
            }

            //Open device
            _ftStatus = _myFtdiDevice.OpenByIndex(ourDeviceIndex);
            if (_ftStatus != FT_STATUS.FT_OK)
            {
                status = ControllerStatus.Error;
                return string.Format("Failed to open device (error {0})", _ftStatus);
            }
            else
                info = string.Format("Device '{0}' was opened", _description);

            //Set baud rate
            _ftStatus = _myFtdiDevice.SetBaudRate(_speed);
            if (_ftStatus != FT_STATUS.FT_OK)
            {
                status = ControllerStatus.Error;
                return string.Format("Failed to set Baud rate (error {0})", _ftStatus);
            }

            //Set timeout
            _ftStatus = _myFtdiDevice.SetTimeouts(_readTimeout, _writeTimeout);
            if (_ftStatus != FT_STATUS.FT_OK)
            {
                status = ControllerStatus.Error;
                return string.Format("Failed to set timeouts (error {0})", _ftStatus);
            }

            //Set flow control
            _ftStatus = _myFtdiDevice.SetFlowControl(FT_FLOW_CONTROL.FT_FLOW_NONE, 0, 0);
            if (_ftStatus != FT_STATUS.FT_OK)
            {
                status = ControllerStatus.Error;
                return string.Format("Failed to set flow control (error {0})", _ftStatus);
            }

            //Device ready
            status = ControllerStatus.DeviceOpened;
            return "";
        }
コード例 #43
0
ファイル: FTDI.cs プロジェクト: stewmc/vixen
		public int write(uint handle, byte[] data, int length)
		{
			//Free the memory from the last call to write()
			Marshal.FreeHGlobal(transmitPtr);

			//Copy the buffer to a stream of bytes
			transmitPtr = Marshal.AllocHGlobal((int) length);
			Marshal.Copy(data, 0, transmitPtr, (int) length);

			uint bytesWritten = 0;

			//Write the data to the serial buffer
			status = FT_Write(handle, transmitPtr, (uint) length, ref bytesWritten);

			return (int) bytesWritten;
		}
コード例 #44
0
ファイル: OpenDMX.cs プロジェクト: valeryjacobs/TIMTLTS
 public static void start()
 {
     handle = 0;
     status = FT_Open(0, ref handle);
     //setting up the WriteData method to be on it's own thread. This will also turn all channels off
     //this unrequested change of state can be managed by getting the current state of all channels
     //into the write buffer before calling this function.
     Thread thread = new Thread(new ThreadStart(writeData));
     thread.Start();
 }
コード例 #45
0
ファイル: OpenDMX.cs プロジェクト: valeryjacobs/TIMTLTS
 public static int write(uint handle, byte[] data, int length)
 {
     try
     {
         IntPtr ptr = Marshal.AllocHGlobal((int)length);
         Marshal.Copy(data, 0, ptr, (int)length);
         uint bytesWritten = 0;
         status = FT_Write(handle, ptr, (uint)length, ref bytesWritten);
         return (int)bytesWritten;
     }
     catch (Exception exp)
     {
         Console.WriteLine(exp);
         return 0;
     }
 }