private void SendDataIntoFifo() { FTDI.FT_STATUS status; uint txQueue = 0; // check buffer status = ftHandle.GetTxBytesWaiting(ref txQueue); if (txQueue == 0) { // write data uint written = 0; ftHandle.Write(data, data.Length, ref written); if (written == 0) { MessageBox.Show("No data have been written"); return; } } Thread.Sleep(20); status = ftHandle.GetRxBytesAvailable(ref rxQueue); if (rxQueue > 0 && status == FTDI.FT_STATUS.FT_OK) { // read data uint read = 0; ftHandle.Read(recData, (uint)rxQueue, ref read); if (read == 0) { MessageBox.Show("No data have been read from FIFO"); return; } } //status = ftHandle.GetTxBytesWaiting(ref txQueue); //if (txQueue == 0) //{ // // write data // uint written = 0; // ftHandle.Write(data, data.Length, ref written); // if (written == 0) // { // MessageBox.Show("No data have been written"); // return; // } //} }
static FTDI.FT_STATUS Sync_MPSSE(ref FTDI ftdi, byte[] TransferBuffer) { /* * See FTDI AN_114 Page 10-11 Synchronize the MPSSE interface by sending bad command &xAA* * For Check MPSSE is sucsessfully running send a bad obcode (0xaa) * The request must be 0xfa and the bad obcode * In the AN make it at twice. * Im too lazy for this! */ uint NumBytesToTransfer, TxRxQ = 0; uint NumBytesTransfered = 0; FTDI.FT_STATUS s; NumBytesToTransfer = 0; TransferBuffer[NumBytesToTransfer++] = 0xaa; ftdi.Write(TransferBuffer, NumBytesToTransfer, ref NumBytesTransfered); do { Thread.Sleep(5); ftdi.GetTxBytesWaiting(ref TxRxQ); } while (TxRxQ != 0); Thread.Sleep(20); s = ftdi.GetRxBytesAvailable(ref NumBytesToTransfer); if (s == FTDI.FT_STATUS.FT_OK) { ftdi.Read(TransferBuffer, NumBytesToTransfer, ref NumBytesTransfered); //if we get 0xfa and 0xaa MPSSE should be working if (TransferBuffer[0] != 0xfa || TransferBuffer[1] != 0xaa) { return(FTDI.FT_STATUS.FT_OTHER_ERROR); } } else { return(FTDI.FT_STATUS.FT_OTHER_ERROR); } return(FTDI.FT_STATUS.FT_OK); }
public void GetTxBytesWaiting(ref uint num_bytes_write_queue) { myFtdiDevice.GetTxBytesWaiting(ref num_bytes_write_queue); }
public object write(byte[] payload) { byte[] Start = { 0x00 }; byte[] MAB = new byte[256]; if (!dmx512Pro.IsOpen) { dmx512Pro.OpenByDescription("DMX USB PRO"); } //DMX_PRO.SetDataCharacteristics(FTDI.FT_DATA_BITS.FT_BITS_8, FTDI.FT_STOP_BITS.FT_STOP_BITS_2, FTDI.FT_PARITY.FT_PARITY_NONE); dmx512Pro.Purge(FTDI.FT_PURGE.FT_PURGE_RX); dmx512Pro.Purge(FTDI.FT_PURGE.FT_PURGE_TX); //DMX_PRO.SetBreak(true); dmx512Pro.SetTimeouts(1000, 500); uint tx = 0; dmx512Pro.SetBaudRate(250000); dmx512Pro.SetBreak(true); System.Threading.Thread.Sleep(10); dmx512Pro.SetBreak(false); dmx512Pro.Write(MAB, 0, ref tx); dmx512Pro.Write(Start, Start.Length, ref tx); //DMX_PRO.Purge(FTDI.FT_PURGE.FT_PURGE_TX); uint rx = 0; int _try = 0; msg _out = (msg)parse(payload, 0, 0, null); _out.info(); Console.WriteLine(string.Format("Try: {0} ", ++_try)); dmx512Pro.Write(payload, payload.Length, ref tx); do { dmx512Pro.GetTxBytesWaiting(ref tx); //Console.WriteLine("Bytes Waiting: " + tx); System.Threading.Thread.Sleep(100); } while (tx != 0); dmx512Pro.GetRxBytesAvailable(ref rx); byte line_status = 0; byte[] buffer = new byte[rx]; dmx512Pro.Read(buffer, rx, ref rx); msg _in = (msg)parse(buffer, 1, _out.TransactionNumber, _out._pid); /////////////////////////////////////////////////////////////////// _in.info(); Console.WriteLine("\n"); /////////////////////////////////////////////////////////////////// return(_in); }