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

📄 controlfunc.cpp

📁 基于ARM的应用Source6
💻 CPP
字号:
/*----------------------------------------------------------------------------
 *  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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -