/// <summary>
 /// Initializes the FT245RBitbangController and starts the updater thread.
 /// </summary>
 /// <param name="Cabinet">The cabinet object which is using the output controller instance.</param>
 public override void Init(Cabinet Cabinet)
 {
     if (SerialNumber.IsNullOrWhiteSpace())
     {
         Log.Exception("Could not initialize FT245RBitbangController {0}. SerialNumber has not been set.".Build(Name));
         return;
     }
     AddOutputs();
     InitUpdaterThread();
     Log.Write("FT245RBitbangController {0} with serial number {1} has been initialized and the updater thread has been started.".Build(Name, SerialNumber));
 }
        private void Connect()
        {
            lock (FTDILocker)
            {
                if (FTDI != null)
                {
                    Disconnect();
                }

                if (SerialNumber.IsNullOrWhiteSpace())
                {
                    Log.Exception("The SerialNumber has not been set for the FT245RBitbangController named {0}. Cant connect to device.".Build(Name));
                    return;
                }

                FTDI = new FTDI();

                //Try to open the device
                try
                {
                    FTDI.ErrorHandler(FTDI.OpenBySerialNumber(SerialNumber));
                }
                catch (Exception E)
                {
                    Log.Exception("Could not open the connection to FTDI chip with serial number {0}.".Build(SerialNumber), E);
                    FTDI = null;
                    return;
                }

                // Set FT245RL to synchronous bit-bang mode, used on sainsmart relay board
                try
                {
                    FTDI.ErrorHandler(FTDI.SetBitMode(0xFF, FTDI.FT_BIT_MODES.FT_BIT_MODE_SYNC_BITBANG));
                }
                catch (Exception E)
                {
                    Log.Exception("Could set the bitmode to bitbang for FTDI chip with serial number {0}.".Build(SerialNumber), E);
                    Disconnect();
                    FTDI = null;
                    return;
                }

                Log.Write("Connection to FTDI chip {0} established.".Build(SerialNumber));
            }
        }