controlfunc.cpp
来自「嵌入式系统设计与开发实例详解--基于ARM的应用(采用ARM7TDMI内核的、三」· C++ 代码 · 共 108 行
CPP
108 行
/*----------------------------------------------------------------------------
* Copyright (c) 2001 by National Semiconductor Corporation
* National Semiconductor Corporation
* 2900 Semiconductor Drive
* Santa Clara, California 95051
*
* All rights reserved
*
*<<<-------------------------------------------------------------------------
* File Contents:
* ControlFunc.cpp -this class handles access to the Control pipe (endpoint Zero).
* This class methods are used by other tests for transferring
* control information, i.e. test name and arguments, and feedbacks
* as well.
*
* Project: USB Demo Application
* Author : Yan Nosovitsky
* Date : Dec 2001
*----------------------------------------------------------------------->>>*/
// ControlFunc.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "controlCmdTab.h"
#include "command_api.h"
#include "CommonDefines.h"
#include "USBDriver.h"
#include "ControlFunc.h"
ControlFunc::ControlFunc()
{
}
ControlFunc::~ControlFunc()
{
}
BOOL ControlFunc::SendSetupPacketOut (BYTE request, WORD value, WORD index, WORD length)
{
BYTE setupPacket[8];
USBDriver *curUSBDriver = USBDriver::GetUSBDriver();
if (curUSBDriver->IsUSBDriverHaveError())
return FALSE;
BYTE reqType = 0x43; /* vendor request host->device*/
/* Build Setup packet */
BuildSetup(setupPacket, reqType, request, value, index, length);
/* Send Setup packet */
if (curUSBDriver->WorkWithZeroPipe(setupPacket, NULL, 0, FALSE) == 0xffffffff)
/* error */
return FALSE;
else
return TRUE;
}
BOOL ControlFunc::SendSetupPacketIn( BYTE request, WORD value, WORD index, WORD length, BYTE *buffer)
{
BYTE setupPacket[8];
USBDriver *curUSBDriver = USBDriver::GetUSBDriver();
if (curUSBDriver->IsUSBDriverHaveError())
return FALSE;
BYTE reqType = 0xc4; /* vendor request device->host */
/* Build Setup packet */
BuildSetup(setupPacket, reqType, request, value, index, length);
/* Send Setup packet */
if (curUSBDriver->WorkWithZeroPipe(setupPacket, buffer, length,TRUE) == 0xffffffff)
/* error */
return FALSE;
else
return TRUE;
}
void ControlFunc::BuildSetup(BYTE *setup, BYTE reqType, BYTE request, WORD value, WORD index, WORD length)
{
setup[0] = reqType;
setup[1] = request;
*(WORD *)&setup[2] = value;
*(WORD *)&setup[4] = index;
*(WORD *)&setup[6] = length;
}
int ControlFunc::ProcessStandardRequest(BYTE reqType, BYTE request, WORD value, WORD index, WORD length, BYTE *buffer)
{
BYTE setupPacket[8];
USBDriver *curUSBDriver = USBDriver::GetUSBDriver();
if (curUSBDriver->IsUSBDriverHaveError())
{
return FALSE;
}
/* Build Setup packet */
BuildSetup(setupPacket, reqType, request, value, index, length);
/* Send Setup packet */
return curUSBDriver->WorkWithZeroPipe(setupPacket, buffer, length,TRUE);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?