2016-09-28 7 views
1

私はlibft4222を使ってFT4222チップと通信しようとしています。 FTDIが提供する次のサンプルコードを実行すると、WindowsとLinuxプラットフォーム間で異なる応答が返されます。FT4222デバイス情報はWindowsでは正しく、Linuxでは正しくありませんか?

サンプルコード:Windowsでは

FT_STATUS ftStatus; 
FT_DEVICE_LIST_INFO_NODE *devInfo; 
DWORD numDevs; 
// create the device information list 
ftStatus = FT_CreateDeviceInfoList(&numDevs); 
if (ftStatus == FT_OK) { 
    printf("Number of devices is %d\n",numDevs); 
} 
if (numDevs > 0) { 
    // allocate storage for list based on numDevs 
    devInfo = 
    (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*numDevs); 
    // get the device information list 
    ftStatus = FT_GetDeviceInfoList(devInfo,&numDevs); 
    if (ftStatus == FT_OK) { 
     for (int i = 0; i < numDevs; i++) { 
      printf("Dev %d:\n",i); 
      printf(" Flags=0x%x\n",devInfo[i].Flags); 
      printf(" Type=0x%x\n",devInfo[i].Type); 
      printf(" ID=0x%x\n",devInfo[i].ID); 
      printf(" LocId=0x%x\n",devInfo[i].LocId); 
      printf(" SerialNumber=%s\n",devInfo[i].SerialNumber); 
      printf(" Description=%s\n",devInfo[i].Description); 
      printf(" ftHandle=0x%x\n",devInfo[i].ftHandle); 
     } 
    } 
} 

I受ける正しいよう、以下の出力、:

Dev 0: 
Flags= 0x2, (CLOSE-HS) 
Type= 0xa 
ID= 0x403601c 
LocId= 0x1131 
SerialNumber= A 
Description= FT4222 A 
ftHandle= 0x0 
Dev 1: 
Flags= 0x0, (CLOSE-FS) 
Type= 0xa 
ID= 0x403601c 
LocId= 0x1132 
SerialNumber= B 
Description= FT4222 B 
ftHandle= 0x0 

Linuxでは(x64のUbuntuの、libft4222のはi386版と私のテストアプリケーションを実行している)I次の出力が表示され、正しく表示されない場合があります。

私は不思議ですシステムの違いは?なぜ他の1つがOpenとして表示されている間、1つはClosedとして表示されますか?

EDIT:このデバイスのために次のように表示され-v lsusbが:

Bus 001 Device 015: ID 0403:601c Future Technology Devices International, Ltd 
Couldn't open device, some information will be missing 
Device Descriptor: 
    bLength    18 
    bDescriptorType   1 
    bcdUSB    2.00 
    bDeviceClass   0 (Defined at Interface level) 
    bDeviceSubClass   0 
    bDeviceProtocol   0 
    bMaxPacketSize0  64 
    idVendor   0x0403 Future Technology Devices International, Ltd 
    idProduct   0x601c 
    bcdDevice   18.00 
    iManufacturer   1 
    iProduct    2 
    iSerial     0 
    bNumConfigurations  1 
    Configuration Descriptor: 
    bLength     9 
    bDescriptorType   2 
    wTotalLength   55 
    bNumInterfaces   2 
    bConfigurationValue  1 
    iConfiguration   0 
    bmAttributes   0xa0 
     (Bus Powered) 
    MaxPower    100mA 
    Interface Descriptor: 
     bLength     9 
     bDescriptorType   4 
     bInterfaceNumber  0 
     bAlternateSetting  0 
     bNumEndpoints   2 
     bInterfaceClass  255 Vendor Specific Class 
     bInterfaceSubClass 255 Vendor Specific Subclass 
     bInterfaceProtocol 255 Vendor Specific Protocol 
     iInterface    2 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x81 EP 1 IN 
     bmAttributes   2 
      Transfer Type   Bulk 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x0200 1x 512 bytes 
     bInterval    0 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x02 EP 2 OUT 
     bmAttributes   2 
      Transfer Type   Bulk 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x0200 1x 512 bytes 
     bInterval    0 
    Interface Descriptor: 
     bLength     9 
     bDescriptorType   4 
     bInterfaceNumber  1 
     bAlternateSetting  0 
     bNumEndpoints   2 
     bInterfaceClass  255 Vendor Specific Class 
     bInterfaceSubClass 255 Vendor Specific Subclass 
     bInterfaceProtocol 255 Vendor Specific Protocol 
     iInterface    2 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x83 EP 3 IN 
     bmAttributes   2 
      Transfer Type   Bulk 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x0008 1x 8 bytes 
     bInterval    0 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x04 EP 4 OUT 
     bmAttributes   2 
      Transfer Type   Bulk 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x0008 1x 8 bytes 
     bInterval    0 
+0

それで 'lsusb'とは何ですか? – Olaf

+0

@Olafがメインポストに編集として追加されました – schumacher574

+0

C++タグを追加した理由は何ですか?クイックな一見、コードは純粋なCのように見えますか?CまたはC++コンパイラを使用していますか? – Olaf

答えて

1

カーリーのi386にしようとした後、すべてがうまく働きました。これは、ライブラリがamd64 OSのフレーバーでうまく動作しないと思ったので、私はUbuntu i386を試しました。以前と同じ問題 - 不正なデバイス情報。

実際の問題がKaliにあったことがわかりました。私はrootアカウントでログインしていました。 Ubuntuでは、rootアカウントのログインは利用できません。 sudoでテストアプリケーションを実行した後、FT4222チップから取得した情報は正しいものでした。

適切なソリューションは、FT4222デバイスのアクセス許可を変更するためにudevルールを使用する可能性があります。

関連する問題