我正在使用Iridium PTT开展项目。 Iridium硬件连接到卫星,然后通过USB连接到我的PC。
Iridium硬件附带了一些在Ubuntu Linux上运行的软件,它在我的电脑上的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上)。
我正在使用一些名为“simple.c”的示例代码(来自Intra2net),我正在Visual Studio中运行。我在下面发布了它:
/* 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中的两行:
#include <ftdi.h>
更改为#include "ftdi.h"
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编程的新手,我不知道从哪里开始。
遇到这个问题时意味着什么?我怎么能解决这个问题呢?
谢谢!
答案 0 :(得分:2)
您对Enable Model Ctrl At Startup
的来电打开了第一台具有指定供应商和产品ID的设备。
假设您提供正确的供应商和产品价值,代码中的任何内容都不会出错。
如果您无法打开设备,有些事情值得检查: