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

📄 scl.c

📁 这个是好记星608的AP源代码,他的主要是是GUI,还有对字典的操作
💻 C
字号:
// SCmdDisp.cpp: implementation of the SCmdDisp class.
//
//////////////////////////////////////////////////////////////////////

#define __OS_SOURCE_FILE__

#include "Kernel.h"
#include "SCL.h"
#include "HAL.h"
#include "RbcCmd.h"

UINT g_uLen; // SCSI CDB len
BYTE *g_pCDB; // CDB pointer
UINT g_uDLen; // Data len

UINT32 g_BufferSize;

#define UPDATE_BUFFSIZE 0x1000

BYTE *g_pData; // Data pointer


UINT g_uSLen; // Sense len
BYTE *g_pSense; // Sense pointer
UINT g_uStatus;

UINT g_uDirection; // Data transfer direction
DWORD g_dwXansfer; // Data transfer
DWORD *g_pdwResidue;


const CLSCMD g_arSupportCmd[] = {
	BUILDCDB(0x28, cmd_readChkCmd, cmd_readBuildResponse, NULL),	// Read(10)
	BUILDCDB(0x2a, cmd_wriChkCmd, cmd_wriBuildResponse, NULL),		// Write
	BUILDCDB(0x25, cmd_rcChkCmd, cmd_rcBuildResponse, NULL),		// Read Capacity
	BUILDCDB(0x03, cmd_rsChkCmd, cmd_rsBuildResponse, NULL),		// Request Sense
	BUILDCDB(0x00, cmd_turChkCmd, cmd_turBuildResponse, NULL),		// test unit ready
	BUILDCDB(0x23, cmd_UnknownChkCmd, cmd_UnknownBuildResponse, NULL),		// 23h
	BUILDCDB(0x12, cmd_iqChkCmd, cmd_iqBuildResponse, NULL),		// Inquiry
	BUILDCDB(0x1a, cmd_ModeSenseChkCmd, cmd_ModeSenseBuildResponse, NULL),		// Mode Sense
	BUILDCDB(0x1e, cmd_MediumRemoveChkCmd, cmd_MediumRemoveBuildResponse, NULL),		// Mode Sense
};

const ULP_ONRECEIVEDPROC g_pfnSCSI_OnSCR[] = {
	SCSI_OnSCR
};

// extern var use
extern NU_MEMORY_POOL  System_Memory;
extern REQUEST_SENSE_DATA   Req_SenseData;

UINT SCSI_Init(void)
{


	g_pData = NULL; // Data pointer

	g_uLen = 0; // SCSI CDB len
	g_pCDB = NULL; // CDB pointer
	g_uDLen = 0; // Data len

	g_uSLen = 0; // Sense len
	g_pSense = NULL; // Sense pointer
	g_uStatus = 0; // SCSI Status

	g_uDirection = 0; // Data transfer direction
	g_dwXansfer = 0; // Data transfer
	g_pdwResidue = NULL;

	memset(&Req_SenseData,0x0,sizeof(REQUEST_SENSE_DATA));
	Req_SenseData.ResponseCode= 0x70;
	Req_SenseData.Valid = 0x1;
	Req_SenseData.AdditionalSenseLen = 0x0b;
	Req_SenseData.ASC= 0x28;



	if (NULL != g_pData)
	{
		MemFree(g_pData);
	}
	for (g_BufferSize=64*1024; g_BufferSize>=8*1024; g_BufferSize/=2)
	{
		g_pData = (BYTE*)MemAlloc(g_BufferSize);
		if(NU_NULL != g_pData )
		    break;
	}
	if (NULL == g_pData)
		return CHECK_CONDITION;

	return BOL_Init(sizeof(g_pfnSCSI_OnSCR)/sizeof(g_pfnSCSI_OnSCR[0]), (ULP_ONRECEIVEDPROC *)g_pfnSCSI_OnSCR);
}

UINT SCSI_UnInit()
{
	if (NULL != g_pData)
	{
		MemFree(g_pData);
		g_pData = NULL;
	}
	return 0;
}

UINT SCSI_SCC(UINT uSLen, BYTE *pSense, UINT uStatus)
{
	return 0;
}




// LLP callback function.
UINT SCSI_OnSCR(UINT uLen, BYTE *pCDB, UINT uDirection, DWORD dwXansfer, DWORD *pdwResidue)
{
	UINT8 nCount;
	UINT8 u=0;
	UINT uRet = CSW_GOOD;

	if (uLen == 0 || NULL == pCDB)
		return CSW_FAIL;

	nCount = sizeof(g_arSupportCmd)/sizeof(g_arSupportCmd[0]);

	for (u=0; u<nCount; u++)
	{
			
		if (g_arSupportCmd[u].uOptrCode == (*(BYTE *)pCDB))
		{			
			g_uLen = uLen;
			g_pCDB = pCDB;
			g_uDirection = uDirection;
			g_dwXansfer = dwXansfer;
			g_pdwResidue = pdwResidue;

//			if (0 == (uRet = g_arSupportCmd[u].pfnChkCmd()))
			{
				uRet = g_arSupportCmd[u].pfnBuildResponse();
			}

			g_uStatus = (MS_STATUS)uRet;
//			SCSI_SetStatus((MS_STATUS)uRet);
			break;
		}
	}

//	SCSI_SCC(g_uSLen, g_pSense, g_uStatus);
#define SafeFree(p); if (p) MemFree(p); p = NULL;
		g_uLen = 0;
		g_pCDB = NULL;
		g_uDLen = 0;
		g_uSLen = 0;

		SafeFree(g_pSense);

		g_uStatus = 0;
		g_uDirection = 0;
		g_dwXansfer = 0;
		g_pdwResidue = NULL;
	return (uRet == CHECK_CONDITION) ? CSW_FAIL : uRet;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -