📄 usb.cpp
字号:
//==================================================================================================
///////////////////////////////////////// WUSB使用函数 ////////////////////////////////////////
//==================================================================================================
//添加标准头文件
#include "StdAfx.h"
//添加 LPC2146 的 USB 头文件
#include "..\USB\EasyUSB214x.h"
#include "..\USB\USB.h"
//==================================================================================================
///////////////////////////////////// WUSB类定义及初始化 //////////////////////////////////////
//==================================================================================================
WUSB::WUSB( VOID )
{
}
WUSB::~WUSB( VOID )
{
}
//==================================================================================================
////////////////////////////////////// 与LPC2146交换数据 /////////////////////////////////////
//==================================================================================================
DWORD WUSB::USB_ExchangeData( LPBYTE lpTxData, DWORD dwTxDataLen, LPBYTE lpRxData, DWORD dwRxDataLen )
{
//==========================================================================================
///////////////////////////////// 设置使用的局部变量 /////////////////////////////////
//==========================================================================================
DWORD dwRes = 0;
BYTE byUSBAck = 0;
BYTE byUSBCmd[8] = {0};
BYTE byUSBCmdSize = 8;
*( (LPDWORD)(&byUSBCmd[0]) ) = dwTxDataLen; //即将发送的字节数
*( (LPDWORD)(&byUSBCmd[4]) ) = dwRxDataLen; //即将接收的字节数
//==========================================================================================
////////////////////////////// 往端点1管道1发送数据长度 //////////////////////////////
//==========================================================================================
//用逻辑端点1的管道1, 告诉单片机: PC机将用逻辑端点2发送的字节数 8 接收的字节数 4096
dwRes = WriteData214x( 1, &byUSBCmd[0], byUSBCmdSize, 1000);
//验证返回值,长度4字节
if ( dwRes!=byUSBCmdSize )
{
return 0x02;
}
//==========================================================================================
///////////////////////////// 利用端点1管道0接收MCU应答 //////////////////////////////
//==========================================================================================
//接收单片机的应答, 应答为一个字节: 0x01, 确保单片机已收到 cmd[] 这两个字节
dwRes = ReadData214x( 0, &byUSBAck, 1, 1000 );
//验证返回值
if ( dwRes!=1 )
{
return 0x03;
}
//验证单片机应答
if ( byUSBAck!=1 )
{
return 0x04;
}
//==========================================================================================
/////////////////////////////// 利用端点2管道3发送数据 ///////////////////////////////
//==========================================================================================
//用逻辑端点2, 发送大量数据
dwRes = WriteData214x( 3, lpTxData, dwTxDataLen, 1000 );
//验证返回值
if ( dwRes!=dwTxDataLen )
{
return 0x05;
}
//==========================================================================================
///////////////////////////// 利用端点2管道2接收MCU数据 //////////////////////////////
//==========================================================================================
//用逻辑端点2, 接收来自 USB 设备的大量数据
dwRes = ReadData214x( 2, lpRxData, dwRxDataLen, 1000 );
if ( dwRes!=dwRxDataLen )
{
return 0x06;
}
//==========================================================================================
///////////////////////////////////// USB测试结束 ////////////////////////////////////
//==========================================================================================
return 0x01;
}
//==================================================================================================
/////////////////////////////////////// 检查 USB 返回值 //////////////////////////////////////
//==================================================================================================
VOID WUSB::USB_CheckReturnValue( DWORD dwReVal )
{
//==========================================================================================
///////////////////////////////////// 检查返回值 /////////////////////////////////////
//==========================================================================================
switch ( dwReVal )
{
case 0x00 :
MessageBox(NULL,TEXT("USB函数调用错误!"),TEXT("Error!"),MB_OK);
break;
case 0x01:
//函数使用成功
break;
case 0x02:
MessageBox(NULL,TEXT("错误码 0x02 \n逻辑端点 1 发送数据错误!"),TEXT("Error!"),MB_OK);
break;
case 0x03:
MessageBox(NULL,TEXT("错误码 0x03 \n逻辑端点 1 接收数据错误!"),TEXT("Error!"),MB_OK);
break;
case 0x04 :
MessageBox(NULL,TEXT("错误码 0x04 \n逻辑端点 1 应答错误"),TEXT("Error!"),MB_OK);
break;
case 0x05 :
MessageBox(NULL,TEXT("错误码 0x05 \n逻辑端点 2 发送数据错误!"),TEXT("Error!"),MB_OK);
break;
case 0x06 :
MessageBox(NULL,TEXT("错误码 0x06 \n逻辑端点 2 接收数据错误!"),TEXT("Error!"),MB_OK);
break;
default :
MessageBox(NULL,TEXT("USB函数调用错误!"),TEXT("Error!"),MB_OK);
break;
}
//==========================================================================================
/////////////////////////////////// 返回值检查结束 ///////////////////////////////////
//==========================================================================================
}
//===================================================================================================
////////////////////////////////////// 程序结束 /////////////////////////////////////////////////
//===================================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -