?? 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 + -