Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

AN7570サンプルプロジェクトに拡張ユニットコントロールを実装 - KBA219280 - Community Translated (JA)

AN7570サンプルプロジェクトに拡張ユニットコントロールを実装 - KBA219280 - Community Translated (JA)

GeethaP_31
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Community Translated by keni_4440091 Expert        Version: **

Translation - English: Implementing Extension Unit Control in AN75779 Example Project - KBA219280

質問:

AN75779と関係するサンプルプロジェクトに対する拡張ユニットコントロールの実装方法は?

質問:

拡張ユニットはベンダー特有のビルディングブロックを仕様に追加するためのUVC仕様によって提供される方法です。

AN75579に関係するサンプルプロジェクトに下記の修正を施して下さい。

  1. Visual Studioを使用して生成されたGUIDと共にcyfxuvcdscr.cファイルの中のExtension Unit Descriptor16バイトGUIDフィールドを更新して下さい:Tools  > Create GUIDに移動して下さい。ポップアップウィンドウで、Registry Formatを選択します。GUIDがリザルトフィールドの中で生成されています。
  2. 実装されるべき拡張ユニットコントロールの数によってcyfxuvcdscr.cファイルの中の拡張ユニット記述子のこのターミナルフィールドのコントロール数を更新して下さい。従って、実装された拡張ユニットコントロールのビットマップであるbmControlsフィールドを更新します。例として、4つの拡張ユニットコントロールを実装するためには、下記が拡張ユニット記述子になります:

/* Extension Unit Descriptor */        
     0x1C,                             /*
記述子サイズ */
        
     0x24,                             /*
クラス特有インターフェースdescタイプ */
        
     0x06,                             /*
拡張ユニット記述子タイプ */
        
     0x03,                             /*
このターミナルのID */
        
     0xB8,0x19,0x77,0x02                    /* 16
バイトGUID. Visual Studioを使用して生成した特別なGUIDはこのフィールドで更新される必要があります*/
                0x7F,0xB0,0x67,0x45,         
     0x88,0xB1,0x20,0x34,               0x36,0xAD,0xBE,0x5D,        
     0x04,                             /*
このターミナルのコントロール数 */
        
     0x01,                             /*
このターミナルの入力ピン数 */
        
     0x02,                             /*
セキュアID : 2 : Procユニットに接続 */
        
     0x03,                             /*
このターミナル用コントロールフィールド数 : 3バイト */
        
     0x0F,0x00,0x00,             /* bmControls */
        
     0x00,                             /*
ストリング desc インデックス : 不使用 */

拡張ユニットコントロールで要求されるSET_CURGET_CUR uvc.cファイルのUVCHandleExtensionUnitRqts()関数で処理される必要があります。

 

例:

 

     #define CONTROL_IN_EXTENSION_UNIT (uint16_t) (0x0100)

 

     static uint8_t current_value_extension_unit_control;

 

          
          /*
拡張ユニットにアドレス指定された制御要求のハンドラー */

 

     static void UVCHandleExtensionUnitRqts (void)

 

     {

 

          CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

  

               uint16_t readCount;

 

                  switch(wValue) {

 

                   case CONTROL_IN_EXTENSION_UNIT:

 
                    switch(bRequest) {

 
                         case CY_FX_USB_UVC_GET_DEF_REQ:


                         case CY_FX_USB_UVC_GET_MIN_REQ:

 
                              glEp0Buffer[0] = 1;

 
                              CyU3PUsbSendEP0Data (1, (uint8_t *)glEp0Buffer);

 
                            break;

 
                            case CY_FX_USB_UVC_GET_RES_REQ:

 
                         glEp0Buffer[0] = 1;

 
                         CyU3PUsbSendEP0Data (1, (uint8_t *)glEp0Buffer);

 
                          break;

 
                          case CY_FX_USB_UVC_GET_MAX_REQ:

 
                       glEp0Buffer[0] = 50;

 
                       CyU3PUsbSendEP0Data (1, (uint8_t *)glEp0Buffer);

 
                       break;

 
                       case CY_FX_USB_UVC_GET_CUR_REQ:

 

                                 glEp0Buffer[0] = current_value_extension_unit_control;

 
                       CyU3PUsbSendEP0Data (1, (uint8_t *)glEp0Buffer);

 
                       break;


                       case CY_FX_USB_UVC_GET_LEN_REQ:

 
                       glEp0Buffer[0] = 0x01;

 
                       glEp0Buffer[1] = 0x00;

 
                       CyU3PUsbSendEP0Data (2, (uint8_t *)glEp0Buffer);

 
                       break;

 
                       case CY_FX_USB_UVC_GET_INFO_REQ:

 
                     glEp0Buffer[0] = 3;                    /* GET/SET
要求はサポートされています。 */

 
                    CyU3PUsbSendEP0Data (1, (uint8_t *)glEp0Buffer);


                    break;


                    case CY_FX_USB_UVC_SET_CUR_REQ:

 
                       apiRetStatus = CyU3PUsbGetEP0Data (CY_FX_UVC_MAX_PROBE_SETTING_ALIGNED,

 
                               glEp0Buffer, &readCount);

 
                       if (apiRetStatus == CY_U3P_SUCCESS) {

 
                           current_value_extension_unit_control = glEp0Buffer[0];


                       }

 
                         break;

 

                     default:


                   CyU3PUsbStall (0, CyTrue, CyFalse);


                          break;


                     }

 

                        break;

 

                     default:

 
                    CyU3PUsbStall (0, CyTrue, CyFalse);

 

                     break;

 

                     }

 

          }

これらのファームウェア変更に加えて、ホストアプリケーションコードを修正する必要があります。

UVC拡張ユニットに実装するホストアプリケーションコードに関しては、マイクロソフトから下記のリンクを参照して下さい:

https://msdn.microsoft.com/en-us/windows/hardware/drivers/stream/uvc-extension-unit-code-samples

0 件の賞賛
208 件の閲覧回数
寄稿者