El controlador FTDI d2xx no lee bytes en Android para comunicarse con la placa MDB a la máquina expendedora

0

Al probar el controlador D2xx desde FTDI, el dispositivo Android no lee ningún byte.

Debajo están los códigos:

al abrir un puerto para usar (ya que solo 1 puerto en android es el predeterminado para el primer puerto en la función de lista de dispositivos de UARTmanager). seguido de una de las respuestas en este sitio web para utilizar restartintask

private void openFunction() throws Exception
{
    this.ftDev = UARTManager.openByIndex(SerialContext, portToUse);

    if (!ftDev.isOpen())
    {
        throw new Exception("openFunction -- SerialCommunicator: Unable To open FTDI device for communication.");
    }

    this.ftDev.restartInTask();
}

una vez que se conectó, intentó enviar un mensaje:

int status = ftDev.write(byteToSend, byteToSend.length);
this.trace("send Status: " + Integer.toString(status));
  • el problema aquí es que el retorno de estado de la escritura siempre es 5, no hay documentación en el sitio web de FTDI que indique qué significado tiene cada retorno de estado después de la operación de escritura. la longitud de bytetosend era 2

al leer del hardware que contiene el conjunto de chips FTDI:

public byte serialReadByte()
{
    this.readCompleted = false;

    new ReadAsyncTask().execute();

    while(!this.readCompleted) {}

    if(this.fromSerial != null && this.fromSerial.length > 0)
    {
        return this.fromSerial[0];
    }

    return null;
}

private class ReadAsyncTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... arg0) {   

            int totalRead = ftDev.getQueueStatus();

            fromSerial = new byte[1];

            if(totalRead > 0)
            {
                ftDev.read(fromSerial, 1);          
            }

            readCompleted = true;

            return null;
        }

    }
  • el problema aquí es que nada se devuelve de la lectura. Siguiendo una de las respuestas aquí para ponerlo en un hilo como se ve en el código actual

fuera de opción aquí, tal vez ustedes tienen alguna idea sobre esto? El modelo FTDI es FT230XS-R y utiliza el UARTManager del controlador FTDI.

Se buscó otro controlador disponible en Internet, solo para encontrar que solo es compatible con FT232, ¿tal vez podrían sugerir un controlador que funcione para el chipset FTDI FT230XS-R?

    
pregunta vims liu

1 respuesta

1

Me pregunto dónde buscó los valores de retorno, porque si escribo "Android D2XX FTDI" en Google, inmediatamente y en primer lugar me devuelve este PDF .

Lo que de manera muy sencilla le indica los valores de retorno que debe verificar en cada función. En este caso (página 47) es el número de bytes escritos, no un estado.

Entonces, parece que no está enviando solo 2 bytes y no está recibiendo ningún dato en su sistema FTDI, pero puede estar fácilmente en cualquier cosa que se conecte. De lo que no hablas. Si espera enviar 2 bytes y enviar 5 bytes, es posible que tampoco esté enviando los bytes que cree que envía.

También dices que probaste diferentes tasas de baudios. ¿Qué piensa el hardware conectado de esto? ¿Reconfiguraste eso? Con los UART, los dispositivos deben aceptar la velocidad de comunicación en detalle.

También es posible que algo más vaya mal en tu conexión que hayas olvidado verificar, pero que no puedo decir, ya que evito a Java como la plaga. (Llámalo una preferencia personal)

En la página 30 también puede ver cómo crear cheques para evitar errores no rastreables.

    
respondido por el Asmyldof

Lea otras preguntas en las etiquetas