📄 ybk_usb.~cpp
字号:
IOCTL_EZUSB_START_ISO_STREAM,
&IsoControl,
sizeof(ISO_TRANSFER_CONTROL),
NULL,
0,
&nbytes,
NULL);
}
else success=0;
return success;
}
extern "C" __declspec(dllexport) int __stdcall StopIsoStream(HANDLE DeviceHandle)
{
success=DeviceIoControl (DeviceHandle,
IOCTL_EZUSB_STOP_ISO_STREAM,
NULL,
0,
NULL,
0,
&nbytes,
NULL);
return success;
}
extern "C" __declspec(dllexport) int __stdcall ReadIsoBuffer(HANDLE DeviceHandle,
ULONG PipeIndex,
ULONG PacketSize,
ULONG PacketCount,
ULONG FramesPerBuffer,
ULONG BufferCount,
UCHAR *Pdata,
int *Readlength)
{
ISO_TRANSFER_CONTROL IsoControl;
//int lengthread;
IsoControl.PipeNum=PipeIndex;
IsoControl.PacketSize=PacketSize;
IsoControl.PacketCount=PacketCount;
IsoControl.FramesPerBuffer=FramesPerBuffer;
IsoControl.BufferCount=BufferCount;
datasize=PacketCount*(IsoControl.PacketSize+sizeof(USBD_ISO_PACKET_DESCRIPTOR));
if (ResetPipe(DeviceHandle,PipeIndex))
{
success=DeviceIoControl (DeviceHandle,
IOCTL_EZUSB_READ_ISO_BUFFER,
&IsoControl,
sizeof(ISO_TRANSFER_CONTROL),
Pdata,
datasize,
&nbytes,
NULL);
if (success!=0)
{
*Readlength=nbytes/(PacketSize+sizeof(USBD_ISO_PACKET_DESCRIPTOR));
//Readlength=&lengthread;
}
}
else success=0;
return success;
}
extern "C" __declspec(dllexport) int __stdcall GetDescriptor(HANDLE DeviceHandle,UCHAR *Pdata)
{
success=DeviceIoControl(DeviceHandle,
IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR,
NULL,
0,
Pdata,
sizeof (Usb_Device_Descriptor),
&nbytes,
NULL);
return success ;
}
extern "C" __declspec(dllexport) int __stdcall LoadDownCode(HANDLE DeviceHandle,int codeoffset,UCHAR *Pdata,int codesize)
{
ANCHOR_DOWNLOAD_CONTROL downloadControl;
downloadControl.Offset=codeoffset;
success = DeviceIoControl (DeviceHandle,
IOCTL_EZUSB_ANCHOR_DOWNLOAD,
&downloadControl,
sizeof(ANCHOR_DOWNLOAD_CONTROL),
Pdata,
codesize,
&nbytes,
NULL);
delay();
return success;
}
extern "C" __declspec(dllexport) int __stdcall GetPipeInf(HANDLE DeviceHandle,UCHAR *Pdata)
{
datasize=sizeof(USBD_PIPE_INFORMATION);
success=DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_GET_PIPE_INFO,
NULL,
0,
Pdata,
datasize,
&nbytes,
NULL);
return success ;
}
extern "C" __declspec(dllexport) int __stdcall ResetPipe(HANDLE DeviceHandle,ULONG Pipeindex)
{
success = DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_RESETPIPE,
&Pipeindex,
sizeof(ULONG),
NULL,
0,
&nbytes,
NULL);
return success ;
}
extern "C" __declspec(dllexport) int __stdcall AbortPipe(HANDLE DeviceHandle,ULONG Pipeindex)
{
DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_ABORTPIPE,
&Pipeindex,
sizeof(ULONG),
NULL,
0,
&nbytes,
NULL);
return success ;
}
extern "C" __declspec(dllexport) int __stdcall GetConfiguration(HANDLE DeviceHandle,UCHAR *Pdata)
{
datasize=sizeof(Usb_Configuration_Descriptor);
DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR,
NULL,
0,
Pdata,
datasize,
&nbytes,
NULL);
return success;
}
extern "C" __declspec(dllexport) int __stdcall GetStrDescriptor(HANDLE DeviceHandle,UCHAR *Pdata)
{
GET_STRING_DESCRIPTOR_IN input;
success=DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_GET_STRING_DESCRIPTOR,
&input,
sizeof(GET_STRING_DESCRIPTOR_IN),
Pdata,
sizeof (Usb_String_Descriptor),
&nbytes,
NULL);
return success;
}
extern "C" __declspec(dllexport) int __stdcall CpuReset(HANDLE DeviceHandle,int HoldOrReset)
{
VENDOR_REQUEST_IN myRequest;
myRequest.bRequest = 0xA0;
myRequest.wValue = 0x7F92;
myRequest.wIndex = 0x00;
myRequest.wLength = 0x01;
myRequest.bData =HoldOrReset % 2;
myRequest.direction = 0x00;
success = DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_VENDOR_REQUEST,
&myRequest,
sizeof(VENDOR_REQUEST_IN),
NULL,
0,
&nbytes,
NULL);
return success;
}
extern "C" __declspec(dllexport) int __stdcall PortReset(HANDLE DeviceHandle)
{
success = DeviceIoControl (DeviceHandle,
IOCTL_Ezusb_RESET,
NULL,
0,
NULL,
0,
&nbytes,
NULL);
return success;
}
extern "C" __declspec(dllexport) int __stdcall GetUsbLastError(HANDLE DeviceHandle,char *Pdata)
{
ULONG urbStatus = 0;
success = DeviceIoControl (DeviceHandle,
IOCTL_EZUSB_GET_LAST_ERROR,
NULL,
0,
&urbStatus,
sizeof(ULONG),
&nbytes,
NULL);
GetURBErrString(urbStatus,Pdata);
return success;
}
extern "C" __declspec(dllexport) int __stdcall GetFrameNum(HANDLE DeviceHandle,ULONG frameNum)
{
success = DeviceIoControl (DeviceHandle,
IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER,
NULL,
0,
&frameNum,
sizeof(ULONG),
&nbytes,
NULL);
return success;
}
void GetURBErrString(ULONG urbStatus, char* pStr)
{
char text[80];
if(!USBD_STATUS(urbStatus))
{
wsprintf (pStr, " [state=SUCCESS status=USBD_STATUS_SUCCESS]", text);
return;
}
switch(USBD_STATE(urbStatus))
{
case USBD_STATUS_SUCCESS: wsprintf (text, " [state=SUCCESS " ); break;
case USBD_STATUS_PENDING: wsprintf (text, " [state=PENDING " ); break;
case USBD_STATUS_HALTED: wsprintf (text, " [state=STALLED " ); break;
case USBD_STATUS_ERROR: wsprintf (text, " [state=ERROR " ); break;
default: break;
}
switch(urbStatus|0xC0000000L) // Note: error typedefs have both error and stall bit set
{
case USBD_STATUS_CRC: wsprintf (pStr, "%sstatus=USBD_STATUS_CRC]", text); break;
case USBD_STATUS_BTSTUFF: wsprintf (pStr, "%sstatus=USBD_STATUS_BTSTUFF]", text); break;
case USBD_STATUS_DATA_TOGGLE_MISMATCH: wsprintf (pStr, "%sstatus=USBD_STATUS_DATA_TOGGLE_MISMATCH]", text); break;
case USBD_STATUS_STALL_PID: wsprintf (pStr, "%sstatus=USBD_STATUS_STALL_PID]", text); break;
case USBD_STATUS_DEV_NOT_RESPONDING:wsprintf (pStr, "%sstatus=USBD_STATUS_DEV_NOT_RESPONDING]", text); break;
case USBD_STATUS_PID_CHECK_FAILURE: wsprintf (pStr, "%sstatus=USBD_STATUS_PID_CHECK_FAILURE]", text); break;
case USBD_STATUS_UNEXPECTED_PID: wsprintf (pStr, "%sstatus=USBD_STATUS_UNEXPECTED_PID]", text); break;
case USBD_STATUS_DATA_OVERRUN: wsprintf (pStr, "%sstatus=USBD_STATUS_DATA_OVERRUN]", text); break;
case USBD_STATUS_DATA_UNDERRUN: wsprintf (pStr, "%sstatus=USBD_STATUS_DATA_UNDERRUN]", text); break;
case USBD_STATUS_RESERVED1: wsprintf (pStr, "%sstatus=USBD_STATUS_RESERVED1]", text); break;
case USBD_STATUS_RESERVED2: wsprintf (pStr, "%sstatus=USBD_STATUS_RESERVED2]", text); break;
case USBD_STATUS_BUFFER_OVERRUN: wsprintf (pStr, "%sstatus=USBD_STATUS_BUFFER_OVERRUN]", text); break;
case USBD_STATUS_BUFFER_UNDERRUN: wsprintf (pStr, "%sstatus=USBD_STATUS_BUFFER_UNDERRUN]", text); break;
case USBD_STATUS_NOT_ACCESSED: wsprintf (pStr, "%sstatus=USBD_STATUS_NOT_ACCESSED]", text); break;
case USBD_STATUS_FIFO: wsprintf (pStr, "%sstatus=USBD_STATUS_FIFO]", text); break;
case USBD_STATUS_ENDPOINT_HALTED: wsprintf (pStr, "%sstatus=USBD_STATUS_ENDPOINT_HALTED]", text); break;
case USBD_STATUS_NO_MEMORY: wsprintf (pStr, "%sstatus=USBD_STATUS_NO_MEMORY]", text); break;
case USBD_STATUS_INVALID_URB_FUNCTION: wsprintf (pStr, "%sstatus=USBD_STATUS_INVALID_URB_FUNCTION]", text); break;
case USBD_STATUS_INVALID_PARAMETER: wsprintf (pStr, "%sstatus=USBD_STATUS_INVALID_PARAMETER]", text); break;
case USBD_STATUS_ERROR_BUSY: wsprintf (pStr, "%sstatus=USBD_STATUS_ERROR_BUSY]", text); break;
case USBD_STATUS_REQUEST_FAILED: wsprintf (pStr, "%sstatus=USBD_STATUS_REQUEST_FAILED]", text); break;
case USBD_STATUS_INVALID_PIPE_HANDLE: wsprintf (pStr, "%sstatus=USBD_STATUS_INVALID_PIPE_HANDLE]", text); break;
case USBD_STATUS_NO_BANDWIDTH: wsprintf (pStr, "%sstatus=USBD_STATUS_NO_BANDWIDTH]", text); break;
case USBD_STATUS_INTERNAL_HC_ERROR: wsprintf (pStr, "%sstatus=USBD_STATUS_INTERNAL_HC_ERROR]", text); break;
case USBD_STATUS_ERROR_SHORT_TRANSFER: wsprintf (pStr, "%sstatus=USBD_STATUS_ERROR_SHORT_TRANSFER]", text); break;
case USBD_STATUS_BAD_START_FRAME: wsprintf (pStr, "%sstatus=USBD_STATUS_BAD_START_FRAME]", text); break;
case USBD_STATUS_ISOCH_REQUEST_FAILED: wsprintf (pStr, "%sstatus=USBD_STATUS_ISOCH_REQUEST_FAILED]", text); break;
case USBD_STATUS_FRAME_CONTROL_OWNED: wsprintf (pStr, "%sstatus=USBD_STATUS_FRAME_CONTROL_OWNED]", text); break;
case USBD_STATUS_FRAME_CONTROL_NOT_OWNED:wsprintf (pStr, "%sstatus=USBD_STATUS_FRAME_CONTROL_NOT_OWNED]", text); break;
case USBD_STATUS_CANCELED: wsprintf (pStr, "%sstatus=USBD_STATUS_CANCELED]", text); break;
case USBD_STATUS_CANCELING: wsprintf (pStr, "%sstatus=USBD_STATUS_CANCELING]", text); break;
default: wsprintf (pStr, "%sstatus=UNKNOWN]", text); break;
}
}
void delay()
{int i;
for(i=0;i<1000;i++)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -