📄 vndreq.c
字号:
#include "general.h"
#include "vndreq.h"
#include "main.h"
#include "initio.h"
#include "sensor.h"
#include "ctlsetup.h"
#include "image.h"
#include "cardusr.h"
#include "cardlink.h"
#include "unistd.h"
///(98K_FIRMWARE_RELEASE1521)
#define K_FIRMWARE_VERSION ((UCHAR)0x63)
//Joe update from V5.0 To V5.2 at 20030320
//Joe@2003.3.19 9:39 modify end
/////////////////////////////////////
#ifdef OffColr
#define K_FIRMWARE_RELEASE ((UCHAR)0x08)
#endif
#ifdef OffColrR
#define K_FIRMWARE_RELEASE ((UCHAR)0x09)
#endif
#ifdef OffColrG
#define K_FIRMWARE_RELEASE ((UCHAR)0x0a)
#endif
#ifdef greenread
#define K_FIRMWARE_RELEASE ((UCHAR)0x0b)
#endif
////////////////////////////////
#define K_FIRMWARE_SEQUENCE ((UCHAR)0xf)
#define K_FIRMWARE_CHIPNUMBER ((UCHAR)0x04) //SPCA533
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//patch4.4.1@richie@noncompress
extern xdata UCHAR G_ucNonCompFlag;
//=============================================================================
//Program
//=============================================================================
//-----------------------------------------------------------------------------
//VNDREQ_NoDataPhase
//-----------------------------------------------------------------------------
void VNDREQ_NoDataPhase(void) USING_1
/*++
Routine Description:
process standard request without data phase
Arguments:
none
Return Value:
none
--*/
{
if (G_pCtrlCommand->bRequest)
{
//not register write
if ((G_pCtrlCommand->bRequest & 0xf0) != 0x20) //Deferred Procedure Call in main lock loop
{
//lock fields of request
G_bRequestLock =
G_bRequestLog =
G_pCtrlCommand->bRequest;
G_wValueLock = G_pCtrlCommand->wValue;
G_wIndexLock = G_pCtrlCommand->wIndex;
//patch4.5@yichang for USB VC begin
G_L2_ModuleID = (UCHAR)(G_wIndexLock>>8);
G_L1_ModuleID = G_L2_ModuleID;
G_L1_FuncID = (UCHAR)(G_wIndexLock&0x00ff);
G_L2_FuncID = G_L1_FuncID;
//patch4.5@yichang for USB VC end
}
else
{ //No Deferred Procedure Call in main lock loop
//vendor command to stop stream
if (G_pCtrlCommand->bRequest == 0x2f)
G_btStopStream = 1;
}
}
else
{
//register write
//single write
XBYTE[G_pCtrlCommand->wIndex] = (UCHAR) (G_pCtrlCommand->wValue & 0x00ff);
}
}
//-----------------------------------------------------------------------------
//VNDREQ_PreInDataPhase
//-----------------------------------------------------------------------------
void VNDREQ_PreInDataPhase(void) USING_1
/*++
Routine Description:
pre-process setting of following in data phase
Arguments:
none
Return Value:
none
--*/
{
ULONG i;
UCHAR bRequest;
USHORT wIndex, wValue;
G_pucCtrlDataPointer = G_ucCtrlData;
bRequest = G_pCtrlCommand->bRequest;
wIndex = G_pCtrlCommand->wIndex;
wValue = G_pCtrlCommand->wValue;
switch (bRequest)
{
case 0x00: //register read
//check address of burst read
if (wIndex == 0x21ff)
wIndex = 0x1200;
//fill data to buffer
for (i = 0; i < G_usCtrlDataLength; i++)
{
G_pucCtrlDataPointer[i] =
(UCHAR) XBYTE[(ULONG) wIndex + i];
}
break;
case 0x20: //get version
//fill data to buffer
G_pucCtrlDataPointer[0] = K_FIRMWARE_VERSION;
G_pucCtrlDataPointer[1] = K_FIRMWARE_RELEASE;
G_pucCtrlDataPointer[2] = K_FIRMWARE_SEQUENCE;
G_pucCtrlDataPointer[3] = XBYTE[0x20ff];
G_pucCtrlDataPointer[4] = K_FIRMWARE_CHIPNUMBER;
break;
case 0x21: //get state
//fill data to buffer
switch (wIndex)
{
case 0x00: //Get ucState
G_pucCtrlDataPointer[0] = G_ucState;
break;
case 0x01: //Get ucState2
G_pucCtrlDataPointer[0] = G_ucState2;
break;
case 0x02: //Get ucState3
G_pucCtrlDataPointer[0] = G_ucState3;
break;
case 0x03: //Get FW Status
G_pucCtrlDataPointer[0] = G_bRequestLog;
G_pucCtrlDataPointer[1] = M_LoByteOfWord(wIndex);
G_pucCtrlDataPointer[2] = M_HiByteOfWord(wIndex);
G_pucCtrlDataPointer[3] = G_ucState;
G_pucCtrlDataPointer[4] = G_ucState2;
G_pucCtrlDataPointer[5] = G_ucState3;
G_pucCtrlDataPointer[6] = bRequest;
break;
default:
break;
}
break;
case 0x22: //get error code
G_pucCtrlDataPointer[0] = M_LoByteOfDword(G_ulErrorCode);
G_pucCtrlDataPointer[1] = M_MidLoByteOfDword(G_ulErrorCode);
G_pucCtrlDataPointer[2] = M_MidHiByteOfDword(G_ulErrorCode);
G_pucCtrlDataPointer[3] = M_HiByteOfDword(G_ulErrorCode);
break;
case 0x23: //get information
INITIO_GetInformation(wIndex); //cch
break;
case 0x24: //get color information
SENSOR_GetColorInformation(wIndex);
break;
case 0x25: //get camera size index
INITIO_GetCameraSizeIndex(wIndex); //cch
break;
case 0x26: //get quantization table index
G_pucCtrlDataPointer[0] = G_Image_QTableIndex; //cch@10/15
break;
case 0x27: //get image type
G_pucCtrlDataPointer[0] = G_Image_Type; //cch@10/26
break;
case 0x28: //get image type
//richie@vc0422
if (wIndex == K_CARD_EXIST_CHECK_INDEX)
{
G_pucCtrlDataPointer[0] = 0;
#if (CFC_OPTION == 1)
if (G_Card_Type == K_MEDIA_CFC)
G_pucCtrlDataPointer[0] = 1;
#endif
#if (SDF_OPTION == 1)
if (G_Card_Type == K_MEDIA_SDF)
G_pucCtrlDataPointer[0] = 1;
#endif
#if (MMC_OPTION == 1)
if (G_Card_Type == K_MEDIA_MMC)
G_pucCtrlDataPointer[0] = 1;
#endif
#if (SMC_OPTION == 1)
if (G_Card_Type == K_MEDIA_SMC)
G_pucCtrlDataPointer[0] = 1;
#endif
//patch4.2@richie@ds0511 begin
#if (DOSRAM_OPTION == 1)
if (G_Card_Type == K_MEDIA_DOSRAM)
G_pucCtrlDataPointer[0] = 1;
#endif
//patch4.2@richie@ds0511 end
}
else if (wIndex == K_NAND_FLASH_EXIST_CHECK_INDEX)
{
G_pucCtrlDataPointer[0] = 0;
#if (NANDF_OPTION == 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -