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

📄 usbfull.h

📁 PIC单片机的USB嵌入式接口程序,用C语言编写
💻 H
字号:

/*  Example Source Code for USB Enumeration using a PDIUSBD11 connected to a PIC16F87x	*/
/*  Copyright 2001 Craig Peacock, Craig.Peacock@beyondlogic.org			            */
/*  31th December 2001 http://www.beyondlogic.org            				      */

typedef struct {
	unsigned char bmRequestType;
	unsigned char bRequest;
	unsigned short wValue;
	unsigned short wIndex;
	unsigned short wLength;
} USB_SETUP_REQUEST, *PUSB_SETUP_REQUEST;

typedef struct {
		unsigned char bLength;
		unsigned char bDescriptorType;
		unsigned short bcdUSB;
		unsigned char bDeviceClass;
		unsigned char bDeviceSubClass;
		unsigned char bDeviceProtocol;
		unsigned char bMaxPacketSize0;
		unsigned short idVendor;
		unsigned short idProduct;
		unsigned short bcdDevice;
		unsigned char iManufacturer;
		unsigned char iProduct;
		unsigned char iSerialNumber;
		unsigned char bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;

typedef struct {
		unsigned char bLength;
		unsigned char bDescriptorType;
		unsigned char bEndpointAddress;
		unsigned char bmAttributes;
		unsigned short wMaxPacketSize;
		unsigned char bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;

typedef struct {
		unsigned char bLength;
		unsigned char bDescriptorType;
		unsigned short wTotalLength;
		unsigned char bNumInterfaces;
		unsigned char bConfigurationValue;
		unsigned char iConfiguration;
		unsigned char bmAttributes;
		unsigned char MaxPower;
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;

typedef struct {
		unsigned char bLength;
		unsigned char bDescriptorType;
		unsigned char bInterfaceNumber;
		unsigned char bAlternateSetting;
		unsigned char bNumEndpoints;
		unsigned char bInterfaceClass;
		unsigned char bInterfaceSubClass;
		unsigned char bInterfaceProtocol;
		unsigned char iInterface;
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;

typedef struct {
		unsigned char bLength;
		unsigned char bDescriptorType;
		unsigned short wHIDClassSpecComp;
		unsigned char bCountry;
		unsigned char bNumDescriptors;
		unsigned char b1stDescType;
		unsigned short w1stDescLength;
} USB_HID_DESCRIPTOR, *PUSB_HID_DESCRIPTOR;

typedef struct {
	USB_CONFIGURATION_DESCRIPTOR ConfigDescriptor;
	USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
  	USB_ENDPOINT_DESCRIPTOR EndpointDescriptor0;
	USB_ENDPOINT_DESCRIPTOR EndpointDescriptor1;
} USB_CONFIG_DATA, *PUSB_CONFIG_DATA;

typedef struct {
	unsigned char bLenght;
      	unsigned char bDescriptorType;
      	char     bString[24];
} MANUFACTURER_DESCRIPTOR, *PMANUFACTURER_DESCRIPTOR;

typedef struct {
	unsigned char bLenght;
      	unsigned char bDescriptorType;
      	unsigned short wLANGID0;
} LANGID_DESCRIPTOR, *PLANGID_DESCRIPTOR;

void I2C_Write(unsigned char byDevId, const unsigned char * pbyData, unsigned char byCount);
void I2C_Read(unsigned char byDevId, unsigned char pbyData[], unsigned char byCount);
void I2C_Init(void);
void I2C_Start(void);
void I2C_Stop(void);
unsigned char I2C_Read_Byte(unsigned char Ack);
void I2C_Write_Byte(unsigned char byte);
void USB_Init(void);
void USB_Disconnect(void);
void D11CmdDataWrite(unsigned char Command, const unsigned char *Buffer, unsigned char Count);
void D11CmdDataRead(unsigned char Command, unsigned char Buffer[], unsigned char Count);
unsigned char D11ReadEndpoint(unsigned char Endpoint, unsigned char *Buffer);
void D11WriteEndpoint(unsigned char Endpoint, const unsigned char *Buffer, unsigned char Bytes);
void WriteBufferToEndPoint(void);
void loadfromcircularbuffer(void);
void GetDescriptor(PUSB_SETUP_REQUEST SetupPacket);
void D11GetIRQ(void);
void InitUART(void);
void putch(unsigned char byte);
void puthex(unsigned char byte);
void Process_EP0_OUT_Interrupt(void);
void ErrorStallControlEndPoint(void);

#define D11_SET_HUB_ADDRESS 		0xD0
#define D11_SET_ADDRESS_ENABLE		0xD1
#define D11_SET_ENDPOINT_ENABLE  	0xD8
#define D11_SET_MODE			0xF3
#define D11_READ_INTERRUPT_REGISTER 	0xF4
#define D11_READ_LAST_TRANSACTION	0x40
#define D11_SET_ENDPOINT_STATUS		0x40
#define D11_READ_ENDPOINT_STATUS	0x80
#define D11_READ_BUFFER			0xF0
#define D11_WRITE_BUFFER		0xF0
#define D11_CLEAR_BUFFER		0xF2
#define D11_VALIDATE_BUFFER		0xFA
#define D11_ACK_SETUP			0xF1

#define D11_ENDPOINT_EP0_OUT 		0x02
#define D11_ENDPOINT_EP0_IN 		0x03
#define D11_ENDPOINT_EP1_OUT 		0x05
#define D11_ENDPOINT_EP1_IN 		0x04
#define D11_ENDPOINT_EP2_OUT 		0x06
#define D11_ENDPOINT_EP2_IN 		0x07
#define D11_ENDPOINT_EP3_OUT 		0x08
#define D11_ENDPOINT_EP3_IN 		0x09

#define D11_CMD_ADDR	  	   	0x36
#define D11_DATA_ADDR_WRITE		0x34
#define D11_DATA_ADDR_READ		0x35

#define D11_INT_BUS_RESET		0x4000
#define D11_INT_EP0_OUT			0x0004
#define D11_INT_EP0_IN			0x0008
#define D11_INT_EP1_OUT			0x0020
#define D11_INT_EP1_IN			0x0010
#define D11_INT_EP2_OUT			0x0040
#define D11_INT_EP2_IN			0x0080
#define D11_INT_EP3_OUT			0x0100
#define D11_INT_EP3_IN			0x0200

#define D11_LAST_TRAN_SETUP		0x20

#define STANDARD_DEVICE_REQUEST		0x00
#define STANDARD_INTERFACE_REQUEST	0x01
#define STANDARD_ENDPOINT_REQUEST	0x02
#define VENDOR_DEVICE_REQUEST		0x40
#define VENDOR_ENDPOINT_REQUEST		0x42

#define GET_STATUS  			0
#define CLEAR_FEATURE     		1
#define SET_FEATURE                 	3
#define SET_ADDRESS                 	5
#define GET_DESCRIPTOR              	6
#define SET_DESCRIPTOR              	7
#define GET_CONFIGURATION           	8
#define SET_CONFIGURATION           	9
#define GET_INTERFACE               	10
#define SET_INTERFACE               	11
#define SYNCH_FRAME                 	12
#define VENDOR_GET_ANALOG_VALUE		1
#define VENDOR_SET_RB_HIGH_NIBBLE	2

#define	ENDPOINT_HALT			0

#define TYPE_DEVICE_DESCRIPTOR          1
#define TYPE_CONFIGURATION_DESCRIPTOR   2
#define TYPE_STRING_DESCRIPTOR          3
#define TYPE_INTERFACE_DESCRIPTOR       4
#define TYPE_ENDPOINT_DESCRIPTOR        5
#define TYPE_HID_DESCRIPTOR		0x21

#define USB_ENDPOINT_TYPE_CONTROL	0x00
#define USB_ENDPOINT_TYPE_ISOCHRONOUS	0x01
#define USB_ENDPOINT_TYPE_BULK		0x02
#define USB_ENDPOINT_TYPE_INTERRUPT	0x03


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -