【问题标题】:USing FTD2xx driver on Windows and Android在 Windows 和 Android 上使用 FTD2xx 驱动程序
【发布时间】:2014-03-17 21:19:18
【问题描述】:

有人知道我下面的代码会出现什么问题吗?

我正在尝试创建一个可以访问外部传感器并显示正在从设备读取的数据的 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);
    }

如果有人能解释我没有从设备中获得任何价值的原因,那你绝对是救命稻草。

非常感谢。

【问题讨论】:

    标签: java android driver ftdi


    【解决方案1】:

    你应该先检查队列:

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

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

    【讨论】:

    • 谢谢。您能告诉我您连接到 USB 的传感器吗?它是外部供电的吗?
    • 我将一个 FTDI USB 串行适配器连接到 OBDII 端口,是的,它由汽车电池 (+12V) 供电,您在读取什么数据?如果您期望无符号字节并且读取方法使用 java 字节实现,则可以在负数的情况下添加 256,其相同的位表示,在 127 之后您得到 -128(unsigned 128),-127...-1 (无符号 255)。
    • 我正在尝试从未通电的this 传感器读取数据。很抱歉,您会在调用 read 方法之前向设备发送写操作吗?此外,您是否使用诸如“0x13”之类的值,这是我第一次遇到它们,任何关于该主题的推荐阅读将不胜感激。
    • 我不知道您的适配器的规格或以前使用过该传感器,但值得检查本节“数字接口数字通信引脚“RX”和“TX”在 2.8V 逻辑下运行电平。当与使用更高电压电平的外部电路连接时,有必要限制可以流动的电流。外部电压电平应最大为 5V,并且应在每个通信引脚上串联一个 3K3 电阻。“obd-就像我使用的协议是请求-回复协议一样,我发送一个十六进制请求(如 0x13)转换为整数表示。
    • 然后我检查队列并读取2个字节,第一个是发送的请求,第二个字节是回复(整数值)。
    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2011-09-11
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多