Iluminación USB OpenDMX FTD2XX DMXking

Pareja de preguntas rápidas. Tengo un controlador de iluminación USB DMX king que estoy tratando de controlar.

Se basa en el protocolo Open DMX (de Entec) que pone a disposición una clase c #. Tengo el dispositivo conectado a una lata RGB, y si pruebo el dispositivo USB con su controlador, se conecta a COM4 y cuando cambio su software al modo de transmisión, puedo configurar canales DMX individuales.

Utilizando su clase OpenDMX, con algunas modificaciones (el núcleo es el mismo, acabo de agregar una comprobación adicional de errores, puedo ubicar el dispositivo, consultar su información, etc. Cuando abro el dispositivo obtengo un identificador. escribo en ese dispositivo con FT_Write pero no importa lo que haga, no se encienden las luces.

Aquí hay algunos fragmentos de código relevantes:

public static byte[] buffer;

[DllImport("FTD2XX.dll")]
public static extern FT_STATUS FT_Open(UInt32 uiPort, ref uint ftHandle);
[DllImport("FTD2XX.dll")]
public static extern FT_STATUS FT_Write(uint ftHandle, IntPtr lpBuffer, UInt32 dwBytesToRead, ref UInt32 lpdwBytesWritten);

public static void writeData()
{
    while (!done)
    {
        try
        {
            initOpenDMX();
            status = FT_SetBreakOn(handle);
            status = FT_SetBreakOff(handle);
            bytesWritten = write(handle, buffer, buffer.Length);
            if (bytesWritten == 0)
            {
                break;
            }

            System.Threading.Thread.Sleep(25);
        }
        catch (Exception)
        {
            break;
        }
    }
    Connected = false;
    done = false;
}

Todo el estado regresa como FT_Ok, y bytesWritten regresa como 512 (el número de canales en este controlador USB)

Sigo pensando que me he perdido algo como configurar el dispositivo en un modo de transmisión o similar (solo tiene un zócalo DMX)

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_SetLatencyTimer(handle, (byte)40);
    status = FT_Purge(handle, PURGE_TX);
    status = FT_Purge(handle, PURGE_RX);
}

También probé la clase Entec OpenDMX sin ninguna modificación mía y tampoco parece hacer nada.

Solo quiero enfatizar que su software de control funciona bien, por lo que la luz y el controlador son compatibles. Creo que falta algo en la forma en que estoy usando FTD2xx. No se producen errores (todo es FT_OK), por lo que esto sugiere que la DLL está funcionando, especialmente porque puedo consultar el dispositivo utilizando los métodos FT_ListDevices y FT_GetDeviceInfo.

¿Algunas ideas

Gareth

Respuestas a la pregunta(5)

Su respuesta a la pregunta