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