📄 stdreq.c
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
stdreq.c
Abstract:
Module related to standard request
Environment:
Keil C51 Compiler
Revision History:
08/28/2001 Chi-Yeh Tsai created
--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"
#include "stdreq.h"
#include "main.h"
#include "ctlsetup.h"
#include "stddesc.h"
#include "usbstr.h"
#include "uiflow.h"
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//=============================================================================
//Program
//=============================================================================
//-----------------------------------------------------------------------------
//STDREQ_NoDataPhase
//-----------------------------------------------------------------------------
void STDREQ_NoDataPhase(void) USING_1
/*++
Routine Description:
process standard request without data phase
Arguments:
none
Return Value:
none
--*/
{
}
//-----------------------------------------------------------------------------
//STDREQ_PreInDataPhase
//-----------------------------------------------------------------------------
void STDREQ_PreInDataPhase(void) USING_1
/*++
Routine Description:
pre-process setting of following in data phase
Arguments:
none
Return Value:
none
--*/
{
switch (G_pCtrlCommand->bRequest)
{
case K_STDREQCODE_GET_DESCRIPTOR:
STDREQ_PreGetDescriptor(); //GET_DESCRIPTOR
break;
default:
break;
}
}
//-----------------------------------------------------------------------------
//STDREQ_PreOutDataPhase
//-----------------------------------------------------------------------------
void STDREQ_PreOutDataPhase(void) USING_1
/*++
Routine Description:
pre-process setting of following out data phase
Arguments:
none
Return Value:
none
--*/
{
G_pucCtrlDataPointer = G_ucCtrlData;
}
//-----------------------------------------------------------------------------
//STDREQ_PostInDataPhase
//-----------------------------------------------------------------------------
void STDREQ_PostInDataPhase(void) USING_1
/*++
Routine Description:
post-process data of complete in data phase
Arguments:
none
Return Value:
none
--*/
{
}
//-----------------------------------------------------------------------------
//STDREQ_PostOutDataPhase
//-----------------------------------------------------------------------------
void STDREQ_PostOutDataPhase(void) USING_1
/*++
Routine Description:
post-process data of complete out data phase
Arguments:
none
Return Value:
none
--*/
{
}
//-----------------------------------------------------------------------------
//STDREQ_PreGetDescriptor
//-----------------------------------------------------------------------------
void STDREQ_PreGetDescriptor(void) USING_1
/*++
Routine Description:
prepare standard request of get descriptor
Arguments:
none
Return Value:
none
--*/
{
USHORT sizeAvailable = 0;
//get descriptor length
switch (G_pCtrlCommand->wValue & 0xff00)
{
case K_DEVICE_DESCRIPTOR:
//get device descriptor
//DbgPrint("STDREQ_PreGetDescriptor: get device descriptor\n");
//richie@g0109
//richie@si0417
// if (G_ui_status == K_UI_mass_storage)//(1)//((XBYTE[0x2041] & 0x10) == 0x00)
if ( ((G_UIStatus & 0xff00) == K_UISTATUS_USBMODE_MASS) //yichang@replace
&& (G_CameraOptions.Storage == K_UIOPTION_STORAGE_MSDC) )
{
G_pucCtrlDataPointer = (UCHAR *)&K_MSDC_DeviceDescriptor; // WWWW
sizeAvailable = K_MSDC_DEVICE_DESCRIPTOR_SIZE;
}
// else if (G_ui_status == K_UI_still_image_class)//(1)//((XBYTE[0x2041] & 0x10) == 0x00)
else if ( ((G_UIStatus & 0xff00) == K_UISTATUS_USBMODE_MASS) //yichang@replace
&& (G_CameraOptions.Storage == K_UIOPTION_STORAGE_SIDC) )
{
G_pucCtrlDataPointer = (UCHAR *)&K_SIDC_DeviceDescriptor; // WWWW
sizeAvailable = K_SIDC_DEVICE_DESCRIPTOR_SIZE;
}
else
{
G_pucCtrlDataPointer = (UCHAR *)&K_DeviceDescriptor; // WWWW
sizeAvailable = K_DEVICE_DESCRIPTOR_SIZE;
}
break;
case K_CONFIGURATION_DESCRIPTOR:
//get configuration descriptor
//DbgPrint("STDREQ_PreGetDescriptor: get configuration descriptor\n");
//richie@g0109
//richie@si0417
// if (G_ui_status == K_UI_mass_storage)//(1)//((XBYTE[0x2041] & 0x10) == 0x00)
if ( ((G_UIStatus & 0xff00) == K_UISTATUS_USBMODE_MASS) //yichang@replace
&& (G_CameraOptions.Storage == K_UIOPTION_STORAGE_MSDC) )
{
G_pucCtrlDataPointer = (UCHAR *)&K_MSDC_ConfigurationDescriptor; // WWWW
sizeAvailable = K_MSDC_CONFIGURATION_DESCRIPTOR_SIZE;
}
// else if (G_ui_status == K_UI_still_image_class)//(1)//((XBYTE[0x2041] & 0x10) == 0x00)
else if ( ((G_UIStatus & 0xff00) == K_UISTATUS_USBMODE_MASS) //yichang@replace
&& (G_CameraOptions.Storage == K_UIOPTION_STORAGE_SIDC) )
{
G_pucCtrlDataPointer = (UCHAR *)&K_SIDC_ConfigurationDescriptor; // WWWW
sizeAvailable = K_SIDC_CONFIGURATION_DESCRIPTOR_SIZE;
}
else
{
G_pucCtrlDataPointer = (UCHAR *)&K_ConfigurationDescriptor; // WWWW
sizeAvailable = K_CONFIGURATION_DESCRIPTOR_SIZE;
}
break;
case K_STRING_DESCRIPTOR:
//get string descriptor
//DbgPrint("STDREQ_PreGetDescriptor: get string descriptor\n");
switch (G_pCtrlCommand->wValue & 0x00ff)
{
case 0x0000:
//get language ID string
G_pucCtrlDataPointer = K_LanguageIdString;
sizeAvailable = K_LANGUAGE_ID_STRING_SIZE;
break;
case 0x0001:
//get manufacturer string
G_pucCtrlDataPointer = K_ManufacturerString;
sizeAvailable = K_MANUFACTURER_STRING_SIZE;
break;
case 0x0002:
//get product string
G_pucCtrlDataPointer = K_ProductString;
sizeAvailable = K_PRODUCT_STRING_SIZE;
break;
case 0x0003:
//get serial number string
G_pucCtrlDataPointer = K_SerialNumberString;
sizeAvailable = K_SERIAL_NUMBER_STRING_SIZE;
break;
#if 0
case 0x0004:
//get configuration string
G_pucCtrlDataPointer = K_ConfigurationString;
sizeAvailable = K_CONFIGURATION_STRING_SIZE;
break;
case 0x0005:
//get interface string
G_pucCtrlDataPointer = K_InterfaceString;
sizeAvailable = K_INTERFACE_STRING_SIZE;
break;
#endif
default:
G_usCtrlDataLength = 0;
break;
}
break;
default:
G_usCtrlDataLength = 0;
break;
}
//min(sizeAvailable, wLength) -> DataLength
if (sizeAvailable < G_usCtrlDataLength)
G_usCtrlDataLength = sizeAvailable;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -