📄 atlasusbmsg.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 + -