Не удается прочитать байты из Java-приложения FTDI Serial I2C в Android Eclipse
У меня есть FTDI UMFT201XB (последовательный интерфейс USB I2C), подключенный к планшету Android 4.2 с помощью кабеля OTG. FTDI подключен к PIC MCU. Я запустил пример TN-147 от FTDI, и устройство распознается правильно.
Я изменил пример TN-147, чтобы прочитать 12 байтов, которые MCU отправил на UMFT201XB.
Код является:
public void ReNew() {
byte [] databuf = new byte[5] ;
byte [] databuf1 = new byte[20];
device_time=0;
databuf1[0]= 0x64;
databuf1[2]= 0x64;
databuf[0]= 0x09;
if(ftdid2xx.createDeviceInfoList(Device_ControlFragmentContext) <= 0)
return;
ftDevice = ftdid2xx.openByIndex(Device_ControlFragmentContext, 0);
if (ftDevice == null) {
Toast.makeText(Device_ControlFragmentContext, "Not supported device",Toast.LENGTH_SHORT).show();
} else {
//ftDevice.setLatencyTimer((byte)240);
ftDevice.purge((byte) (D2xxManager.FT_PURGE_TX | D2xxManager.FT_PURGE_RX));
ftDevice.setBitMode((byte)0x33 , (byte)0x20);
iavailable1 = ftDevice.getQueueStatus();
ftDevice.write(databuf , 1);
ftDevice.restartInTask();
iavailable2 = ftDevice.getQueueStatus();
lenght_ = ftDevice.read(databuf1,iavailable2);
iavailable3 = ftDevice.getQueueStatus();
ftDevice.setBitMode((byte)0x32 , (byte)0x20);
ftDevice.close();
device_time=databuf1[0]+databuf1[1]+databuf1[2]+databuf1[3]+databuf1[4]+databuf1[5]+databuf1[6]+databuf1[7]+databuf1[8]+databuf1[9]+databuf1[10]+databuf1[11]+databuf1[12]+databuf1[13]+databuf1[14]+databuf1[16]+databuf1[17]+databuf1[18]+databuf1[15]+databuf1[19];
DEVICE_TIME.setText(String.valueOf(device_time));
days_view.setText(String.valueOf(iavailable1));
hours_view.setText(String.valueOf(iavailable2));
minutes_view.setText(String.valueOf(iavailable3));
seconds_view.setText(String.valueOf(lenght_));
SYSTEM_TIME.setText(String.valueOf(593));
/////////////////////////////////////////////////////////////////////////////////
}
ftDevice.close();
}
Моя проблема заключается в том, что во время выполнения device_time = 200 (декабрь), iavailable1 = 00, iavailable2 = 12(декабрь) и iavailable3 = 12(декабрь).
Очевидно, что 200 пришли из databuf1[0]= 0x64; databuf1[2]= 0x64;
FtDevice.read(databuf1,iavailable2) не извлекает никакие байты в databuf1. И доступные байты остаются 12(Dec) (iavailable3 = 12).
Пожалуйста помоги.
1 ответ
У меня была похожая проблема. Попробуйте переместить прочитанную часть в другой поток. Это сработало для меня, когда я сдал FT_Device
для AsyncTask
"s doInBackground()
метод, который читается в байтах.