【发布时间】:2015-08-07 18:05:25
【问题描述】:
我正在使用 Iridium PTT 开展一个项目。 Iridium 硬件连接到卫星,然后通过 USB 连接到我的 PC。
Iridium 硬件附带了一些在 Ubuntu Linux 上运行的软件,这些软件在我的 PC 上的 Virtual Box 中运行。该软件全部用 C 语言编写,在 Ubuntu 中运行良好。但我想在 Windows 上使用 Visual Studios 进行开发。
Ubuntu 版本使用 libftdi 和 libusb(来自 intra2net)与硬件通信。
我们得到了 libftdi、libusb 并在 Visual Studios 2013 Desktop Express Edition 中创建了一个项目。 (我什至下载了 Zadig for Windows 以检查以确保我拥有正确的 USB 驱动程序。我验证了驱动程序的箭头是绿色的,表示我的 USB 连接到硬件。)
当 Iridium 硬件连接到计算机时,设备管理器中会出现四个串行端口。当我运行我的程序时,我试图从 Windows 打开其中一个串行端口。当我尝试打开一个时出现错误(即使我可以从 Ubuntu 轻松打开它,在我的同一台 PC 上的虚拟框中运行)。
我正在使用在 Visual Studios 中运行的一些名为“simple.c”的示例代码(来自 Intra2net)。我把它贴在下面:
/* simple.c
Simple libftdi usage example
This program is distributed under the GPL, version 2
*/
#include <stdio.h>
#include <stdlib.h>
#include "ftdi.h"
int main(void)
{
int ret;
struct ftdi_context *ftdi;
struct ftdi_version_info version;
if ((ftdi = ftdi_new()) == 0)
{
fprintf(stderr, "ftdi_new failed\n");
return EXIT_FAILURE;
}
version = ftdi_get_library_version();
printf("Initialized libftdi %s (major: %d, minor: %d, micro: %d, snapshot ver: %s)\n",
version.version_str, version.major, version.minor, version.micro,
version.snapshot_str);
if ((ret = ftdi_usb_open(ftdi, 0x403, 0x6011)) < 0)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdi));
ftdi_free(ftdi);
return EXIT_FAILURE;
}
// Read out FTDIChip-ID of R type chips
if (ftdi->type == TYPE_R)
{
unsigned int chipid;
printf("ftdi_read_chipid: %d\n", ftdi_read_chipid(ftdi, &chipid));
printf("FTDI chipid: %X\n", chipid);
}
if ((ret = ftdi_usb_close(ftdi)) < 0)
{
fprintf(stderr, "unable to close ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdi));
ftdi_free(ftdi);
return EXIT_FAILURE;
}
ftdi_free(ftdi);
return EXIT_SUCCESS;
}
我只修改了 Intra2net 原始 simple.c 中的两行:
- 第 10 行:将
#include <ftdi.h>更改为#include "ftdi.h" - 第 28 行:对于我的硬件,我将
if ((ret = ftdi_usb_open(ftdi, 0x403, 0x6011)) < 0)中的原始十六进制数字更改为 Ubuntu C 代码中使用的数字。
我在运行 simple.c 时遇到的错误是 unable to open ftdi device: -4 (usb_open() failed)
这发生在 ftdi_usb_open 函数的第 28 行。
我是低级 C 编程的新手,我不知道从哪里开始。
当我遇到这个问题时,这意味着什么?我该如何解决这个问题?
谢谢!
【问题讨论】: