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

📄 atlasusbmsg.cpp

📁 cell phone source code
💻 CPP
字号:
// 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -