⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vndreq.c

📁 dz3000_51.0.0.4.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -