2 Replies Latest reply on Aug 3, 2020 12:40 AM by keni_4440091

    Community Translation - Implementing Extension Unit Control in AN75779 Example Project - KBA219280

    keni_4440091

      Hi

       

      I want to translate KBA219280, please confirm to my work.

       

      Regards,

      Nino

        • 2. Re: Community Translation - Implementing Extension Unit Control in AN75779 Example Project - KBA219280
          keni_4440091

          タイトル:AN7570サンプルプロジェクトに拡張ユニットコントロールを実装 – KBA219280

           

          バージョン 1

           

          content.librarian 2017/04/07 2:30 に作成。content.librarian 2017/04/07 2:39 に変更。

           

          Version: **

           

          質問:

          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 インデックス : 不使用 */

          1.  

          拡張ユニットコントロールで要求される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

          1403 閲覧 カテゴリ: USB: SuperSpeed Peripherals タグ: superspeed usb hubs