在Windows和Android上使用FTD2xx驱动程序

时间:2014-03-17 21:19:19

标签: java android driver ftdi

有谁知道我的代码会出现什么问题?

我正在尝试创建一个Android应用程序,可以访问外部传感器并显示从设备读取的数据。我已经设法恢复了一个字节数组,但我不确定这是如何转换为我希望阅读的整数。

我决定首先在Windows上创建一个java应用程序,以便在创建Android应用程序之前尝试更好地理解该问题。

我觉得项目设置正确,我已经导入了ftdichip.win32和ftdichip.ftd2xx库,我认为我已经设法找到了该设备。

但是,我无法读取希望传感器正在收集的值。我不确定它是否与无符号字节有关?

我已将我的代码包含在下面,我们将非常感谢您提供的任何帮助。

    import jd2xx.JD2XX;

以上是唯一必要的导入(根据我的理解?)

    JD2XX jd = new JD2XX();

    //list by Serial Number
    Object[] devs = jd.listDevicesBySerialNumber();
    for (int i = 0; i < devs.length; ++i) {
        System.out.println(devs[i]);
    }

    //List by Description
    devs = jd.listDevicesByDescription();
    for (int i = 0; i < devs.length; ++i) {
        System.out.println(devs[i]);
    }

    //List by location
    devs = jd.listDevicesByLocation();
    for (int i = 0; i < devs.length; ++i) {
        System.out.println(
                Integer.toHexString((Integer) devs[i]));
    }

    //open device
    jd.open(0);

    //configure the device
    jd.setBaudRate(38400);
    jd.setDataCharacteristics(
            8, JD2XX.STOP_BITS_1, JD2XX.PARITY_NONE);
    jd.setTimeouts(100, 100); //Set the time in ms between reads and writes (i think)
    jd.setFlowControl(JD2XX.FLOW_NONE, 0, 0);
    jd.setTimeouts(1000, 1000);

    while (true) {
    //try this 
    String msg = "So i can send it a message";
    int ret = jd.write(msg.getBytes())
    System.out.println(ret + "bytes sent.");

    //read 
    int test = jd.read()
    System.out.println("This is what is returned: " + test);
    }

如果有人能解释为什么我没有从设备中获得任何价值,那么你将是一个绝对的救命。

非常感谢。

1 个答案:

答案 0 :(得分:2)

您应首先检查队列:

int status = ftDev.getQueueStatus();
byte[] data = new byte[(int) status]; 
long lngBytesReturned = ftDev.read(data,data.length);

我将android d2xx库与D2xxManager一起使用  来自FTDI网站。