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

📄 ybk_usb.~cpp

📁 EZ_USB 通信DLL源码
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
                                 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 + -