atlasusbmsg.cpp

来自「cell phone source code」· C++ 代码 · 共 127 行

CPP
127
字号
// AtlasUsbMsg.cpp: implementation of the CAtlasUsbMsg class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "..\inc\AtlasUsbIO.h"
#include "AtlasUsbMsg.h"
#include "AtlasUsbDev.h"
#include "atlasapi.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CAtlasUsbMsg::CAtlasUsbMsg()
{
	m_pVendorMsg = NULL;
}

CAtlasUsbMsg::~CAtlasUsbMsg()
{
	if(m_pVendorMsg)
		delete m_pVendorMsg;
}

void CAtlasUsbMsg::AllocateMsg(BYTE dwMsg)
{
	//Get rid of the old msg
	if(m_pVendorMsg)
		delete m_pVendorMsg;

	m_dwInLength = 0;
	m_dwOutLength = 0;
	switch(dwMsg)
	{
	case ATLAS_MSG_GET_BOOT_STAGE:
	case ATLAS_MSG_REQUEST_IMG_BUF:
	case ATLAS_MSG_GET_CPU_INFO:
	case ATLAS_MSG_GET_BOOTLOADER_VERSION:
	case ATLAS_MSG_GET_NANDXIP_INFO:
	case ATLAS_MSG_GET_EBOOT_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_DM_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_NK_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_NBOOT_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_USB_PIPE_INDEX:
	case ATLAS_MSG_GET_EBOOT_POSITION:
		m_dwInLength = sizeof(DWORD);
		break;
	case ATLAS_MSG_GET_NF_INFO:
		m_dwInLength = sizeof(DumpNFInfo);
		break;
	case ATLAS_MSG_GET_HARDWARE_NAME:
	case ATLAS_MSG_GET_SOFTWARE_NAME:	
	case ATLAS_MSG_GET_IMG_TYPE:
		m_dwInLength = 20;
		break;
	default:
		break;
	}
	m_dwMsgSize = sizeof(ATLAS_USB_MESSAGE) + m_dwInLength;
	m_pVendorMsg = (PATLAS_USB_MESSAGE) (new char[m_dwMsgSize]);
}

void CAtlasUsbMsg::FormatMsg(BYTE dwMsg, PBYTE pContext)
{
	AllocateMsg(dwMsg);

	m_pVendorMsg->vendorRequest = dwMsg;
	m_pVendorMsg->size = m_dwMsgSize;
	if(m_dwInLength)
		m_pVendorMsg->vendorLength = m_dwInLength;
	else if(m_dwOutLength)
		m_pVendorMsg->vendorLength = m_dwOutLength;
	else
		m_pVendorMsg->vendorLength = 0;

	switch(dwMsg)
	{
	case ATLAS_MSG_REQUEST_IMG_BUF:
		m_pVendorMsg->transferFlag = USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK;
		m_pVendorMsg->vendorValue = *(PWORD)pContext;
		m_pVendorMsg->vendorIndex = *(PWORD)(pContext + 2);
		break;
	case ATLAS_MSG_SET_CUR_IMG_TYPE:
	case ATLAS_MSG_SET_NAND_CS:
	case ATLAS_MSG_GET_ONE_BLOCK_DATA:
		m_pVendorMsg->transferFlag = USBD_TRANSFER_DIRECTION_OUT;
		m_pVendorMsg->vendorValue = (WORD)(*(int*)pContext);
		m_pVendorMsg->vendorIndex = 0;
		break;
	case ATLAS_MSG_SET_FRAME_LENGTH:
		m_pVendorMsg->transferFlag = USBD_TRANSFER_DIRECTION_OUT;
		m_pVendorMsg->vendorValue = (WORD)(*(WORD*)pContext);
		m_pVendorMsg->vendorIndex = (WORD)(*(WORD*)(pContext+2));
		break;
	case ATLAS_MSG_GET_BOOT_STAGE:
	case ATLAS_MSG_GET_CPU_INFO:
	case ATLAS_MSG_GET_HARDWARE_NAME:
	case ATLAS_MSG_GET_SOFTWARE_NAME:
	case ATLAS_MSG_GET_IMG_TYPE:
	case ATLAS_MSG_GET_BOOTLOADER_VERSION:
	case ATLAS_MSG_GET_NANDXIP_INFO:
	case ATLAS_MSG_GET_EBOOT_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_DM_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_NK_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_NBOOT_RESERVEDBLOCKS:
	case ATLAS_MSG_GET_USB_PIPE_INDEX:
	case ATLAS_MSG_GET_NF_INFO:
	case ATLAS_MSG_GET_EBOOT_POSITION:
		m_pVendorMsg->transferFlag = USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK;
		m_pVendorMsg->vendorValue = 0;
		m_pVendorMsg->vendorIndex = 0;
		break;
	default:
		m_pVendorMsg->transferFlag = USBD_TRANSFER_DIRECTION_OUT;
		m_pVendorMsg->vendorValue = 0;
		m_pVendorMsg->vendorIndex = 0;
		break;
	}
}

⌨️ 快捷键说明

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