JAVA - Android - Obsługa konwertera FTDI USB-Serial - błędny odbiór danych

0

Witam!

Uruchamiam komunikację z zewnętrznym urządzeniem poprzez konwerter USB-Serial zbudowanego na FT232RL.
Wszystko od strony ftdi skonfigurowane 9600,N,8,1 bez sterowania przepływem.
Komunikacja w kierunku: Android -> konwerter -> urządzenie działa bez zarzutu.
Niestety mam problem z odbiorem danych. Teoretycznie wszystko działa:

w skrócie wywołuję:

bytesAvailable = ftDev.getQueueStatus();

funkcja zwraca poprawną ilość zbuforowanych odebranych danych,
później odczytuję dane do tablicy:

readed_bytes = ftDev.read(packetBytes, bytesAvailable);

funkcja również zwraca tą samą wartość, czyli readed_bytes = bytesAvailable
Problem w tym, ze tablica packetBytes nie zawiera odebranych danych.
Zaznaczę, że dane wysyłam do urządzenia i odbieram z urządzenia w tym samym wątku...
Pytanie dlaczego w buforze nie mam odebranych danych w ilości readed_bytes?

Może ktoś spotkał się z podobnym problemem...

Pozdrawiam!
Sławek

0

Okazało się, że problem dotyczy sterowania przepływem...
Zmodyfikowałem kod oryginalnego przykładu ze strony ftdi, dodając sprawdzenie rezultatu poszczególnych funkcji.

 
int OpenFTDI() throws IOException 
    {
        int index = 0;
        int result = -1;
        boolean result_bl = false;

        //------------------------------------
        
            // Get FT_Device and Open the port
            ftD2xx = D2xxManager.getInstance(this);
            DevCount = ftD2xx.createDeviceInfoList(this);
            if (DevCount > 0) 
            {
                ftDev = ftD2xx.openByIndex(this, index);

                // Configure the port to UART                
                if (ftDev.isOpen() == true) 
                {
                    // Reset FT Device
                    result_bl = ftDev.setBitMode((byte) 0, D2xxManager.FT_BITMODE_RESET);
                    
                    if (result_bl == true) 
                    {
                        // Set Baud Rate
                        result_bl = ftDev.setBaudRate(230400);

                        if (result_bl == true) 
                        {
                            // Set Data Bit , Stop Bit , Parity Bit
                            result_bl = ftDev.setDataCharacteristics(D2xxManager.FT_DATA_BITS_8, D2xxManager.FT_STOP_BITS_1, D2xxManager.FT_PARITY_NONE);
                            
                            if (result_bl == true) 
                            {
                                // Set Flow Control
                                result_bl = ftDev.setFlowControl(D2xxManager.FT_FLOW_NONE, (byte) 0x0b, (byte) 0x0d);
                                if (result_bl == true) 
                                {
                                    result = 0; //port has been openeed & configured OK
                                } 
                                else 
                                    {
                                        result = 6;
                                    }
                            } 
                            else 
                                {
                                    result = 5;
                                }
                        } 
                        else 
                            {
                                result = 4;
                            }
                    } 
                    else 
                        {
                            result = 3;
                        }
                } 
                else 
                    {
                        result = 2;
                    }
            } 
            else 
                {
                    result = 1;
                }

        return(result);

    }

Okazało się, że ostatnia funkcja (setFlowControl) nie wykonuje sie prawidłowo i zwraca wartość false...
Co dalej ??? dlaczego nie mogę ustawić sterowania na NONE?
(dziwne, bo jak wybiorę sterowanie przepływem sprzętowe, to cała funkcja OpenFTDI wykonuje się poprawnie...)

Całość testuję na Androidzie 4.4

Pozdrawiam!
Sławek

1 użytkowników online, w tym zalogowanych: 0, gości: 1