0

組み込みコントローラーをホストとして使用して、USB カードリーダーと通信することに困惑しています。忍耐強く、制御トランザクションを送信して LED を操作し、カードが挿入されたときに IN パイプでステータスの更新を受信できるようになりました。私ができないことは、カード データを要求するために、コントロール パイプでレポート要求であると思われるものを送信することです。

私の質問は、HID カード リーダーがカード データ (レポート ID = 0x65、使用 ID = 0x61C) を送信するように、このレポート要求をどのように設定すればよいかということです。私の理解が正しければ、これはセットアップ パケット内のフラグの単純な操作に帰着するはずですが、私の人生では、どれが正しいのかわかりません。

次のコードは、LED を操作するために制御 EP で送信される set_config トランザクションをセットアップするために使用され、正常であることがわかっています。

//Format the setup transaction 
req.bmRequestType = USB_REQ_DIR_OUT         |   // 7    - Transfer is OUT   
                    USB_REQ_TYPE_CLASS      |   // 5,6  - Transfer type is Class 
                    USB_REQ_RECIP_INTERFACE;    // 4    - recipient is the device

//Set the request type to USB_REQ_SET_CONFIGURATION
req.bRequest = USB_REQ_SET_CONFIGURATION;   

//Set the descriptor type to string
req.wValue = (USB_DT_STRING << 8) | usb_dt;     //wValue type. On Linux ==> 0x302 for init msg,
                                                //                          0x35f for led on control

req.wIndex = 0;                         
req.wLength = len;  

この関数は、init メッセージには 0x302 で渡された値を使用し、LED 制御には 0x35f で渡された値を使用します。次に、目的のコマンドのインデックス 0 のレポート ID を含むバッファーを移動し、次にデータ (RGB 値) を移動する転送を開始します。

最後に、私が使用しているデバイスの記述子は次のとおりです。

Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x6352
idProduct 0x240a
bcdDevice 3.01
iManufacturer 1
iProduct 2
iSerial 3
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 3
bmAttributes 0x80
(バスパワー)
MaxPower 500mA\

インターフェイス記述子:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 ヒューマン インターフェイス デバイス
bInterfaceSubClass 0
bInterfaceProtocol 0 iInterface
4\

HID デバイス記述子:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 サポートされていません
bNumDescriptors 1
bDescriptorType 34 レポート
wDescriptorLength 730\

エンドポイント記述子:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
転送タイプ 割り込み
同期タイプ なし
使用タイプ データ
wMaxPacketSize 0x0040 1x 64 バイト
bInterval 46

ガイダンスやヘルプをいただければ幸いです。 -
ジャスティン

4

1 に答える 1