日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]#ifndef __USBEP1_H_#define __USBEP1_H_#include "usb.h"#include "usbhw.h"extern s8 sendBuffer[4]; //鼠標(biāo)數(shù)據(jù)發(fā)送緩沖區(qū)extern u8 mouse_connect; //鼠標(biāo)連接標(biāo)志void usb_ep1_in_process(void);void usb_ep1_o

#ifndef __USBEP1_H_

#define __USBEP1_H_

#include "usb.h"

#include "usbhw.h"

extern s8 sendBuffer[4]; //鼠標(biāo)數(shù)據(jù)發(fā)送緩沖區(qū)

extern u8 mouse_connect; //鼠標(biāo)連接標(biāo)志

void usb_ep1_in_process(void);

void usb_ep1_out_process(void);

#endif

#include "usbep1.h"

s8 sendBuffer[4]={0};//鼠標(biāo)數(shù)據(jù)發(fā)送緩沖區(qū)

u8 mouse_connect=0; //鼠標(biāo)連接標(biāo)志

//針對(duì)接收的,暫時(shí)用不到

u8 readBuffer[4]={0};

u8 readLength=0;

void usb_ep1_in_process(void)

{

mouse_connect=1;

USB_WriteEP(HID_EP_IN,(u8*)sendBuffer,sizeof(sendBuffer));

sendBuffer[0]=0;

sendBuffer[1]=0;

sendBuffer[2]=0;

sendBuffer[3]=0;

}

void usb_ep1_out_process(void)

{

readLength=USB_ReadEP(HID_EP_OUT,readBuffer);

usb_debug_printf("usb ep1 outrn");

}

#ifndef __USBDESC_H__

#define __USBDESC_H__

#include "usb.h"

#include "usbcfg.h"

#include "hid.h"

#define WBVAL(x) (x & 0xFF),((x >> 8) & 0xFF)

#define USB_DEVICE_DESC_SIZE (sizeof(USB_DEVICE_DESCRIPTOR))

#define USB_CONFIGUARTION_DESC_SIZE (sizeof(USB_CONFIGURATION_DESCRIPTOR))

#define USB_INTERFACE_DESC_SIZE (sizeof(USB_INTERFACE_DESCRIPTOR))

#define USB_ENDPOINT_DESC_SIZE (sizeof(USB_ENDPOINT_DESCRIPTOR))

#define HID_DESC_OFFSET 0x0012

#define HID_DESC_SIZE (sizeof(HID_DESCRIPTOR))

#define HID_REPORT_DESC_SIZE (sizeof(HID_ReportDescriptor))

extern const U8 USB_DeviceDescriptor[];

extern const U8 USB_ConfigDescriptor[];

extern const U8 USB_StringDescriptor[];

extern const U8 HID_ReportDescriptor[];

extern const U16 HID_ReportDescSize;

#endif

#include "usbdesc.h"

//usb標(biāo)準(zhǔn)設(shè)備描述符

const U8 USB_DeviceDescriptor[]={

USB_DEVICE_DESC_SIZE, //bLength字段。設(shè)備描述符的長(zhǎng)度為18(0x12)字節(jié)

USB_DEVICE_DESCRIPTOR_TYPE, //bDescriptorType字段。設(shè)備描述符的編號(hào)為0x01

WBVAL(0x0110), //bcdUSB字段。這里設(shè)置版本為USB1.1,即0x0110。

0x00, //bDeviceClass字段。我們不在設(shè)備描述符中定義設(shè)備類,

0x00, //bDeviceSubClass字段。bDeviceClass字段為0時(shí),該字段也為0。

0x00, //bDeviceProtocol字段。bDeviceClass字段為0時(shí),該字段也為0。

USB_MAX_PACKET0, //bMaxPacketSize0字段。端點(diǎn)0的最大包長(zhǎng)度。

WBVAL(0x3849), //idVender字段。廠商ID號(hào),我們這里取0x8888,僅供實(shí)驗(yàn)用。

WBVAL(0x1433), //idProduct字段。產(chǎn)品ID號(hào),由于是第一個(gè)實(shí)驗(yàn),我們這里取0x0001。。

WBVAL(0x0100), // 設(shè)備的版本

0x01, //iManufacturer字段。廠商字符串的索引值,為了方便記憶和管理

0x02, //iProduct字段。產(chǎn)品字符串的索引值。剛剛用了1,這里就取2吧。

0x03, //iSerialNumber字段。設(shè)備的序列號(hào)字符串索引值。

0x01 //bNumConfigurations字段。該設(shè)備所具有的配置數(shù)。

};

//USB報(bào)告描述符的定義

const u8 HID_ReportDescriptor[]=

{

//每行開始的第一字節(jié)為該條目的前綴,前綴的格式為:

//D7~D4:bTag。D3~D2:bType;D1~D0:bSize。以下分別對(duì)每個(gè)條目注釋。

//這是一個(gè)全局(bType為1)條目,選擇用途頁(yè)為普通桌面Generic Desktop Page(0x01)

//后面跟一字節(jié)數(shù)據(jù)(bSize為1),后面的字節(jié)數(shù)就不注釋了,

//自己根據(jù)bSize來判斷。

0x05,0x01,// USAGE_PAGE (Generic Desktop)

//這是一個(gè)局部(bType為2)條目,說明接下來的應(yīng)用集合用途用于鼠標(biāo)

0x09,0x02,// USAGE (Mouse)

//這是一個(gè)主條目(bType為0)條目,開集合,后面跟的數(shù)據(jù)0x01表示

//該集合是一個(gè)應(yīng)用集合。它的性質(zhì)在前面由用途頁(yè)和用途定義為

//普通桌面用的鼠標(biāo)。

0xa1,0x01,// COLLECTION (Application)

//這是一個(gè)局部條目。說明用途為指針集合

0x09,0x01,// USAGE (Pointer)

//這是一個(gè)主條目,開集合,后面跟的數(shù)據(jù)0x00表示該集合是一個(gè)

//物理集合,用途由前面的局部條目定義為指針集合。

0xa1,0x00,// COLLECTION (Physical)

//這是一個(gè)全局條目,選擇用途頁(yè)為按鍵(Button Page(0x09))

0x05,0x09,// USAGE_PAGE (Button)

//這是一個(gè)局部條目,說明用途的最小值為1。實(shí)際上是鼠標(biāo)左鍵。

0x19,0x01,// USAGE_MINIMUM (Button 1)

//這是一個(gè)局部條目,說明用途的最大值為3。實(shí)際上是鼠標(biāo)中鍵。

0x29,0x03,// USAGE_MAXIMUM (Button 3)

//這是一個(gè)全局條目,說明返回的數(shù)據(jù)的邏輯值(就是我們返回的數(shù)據(jù)域的值啦)

//最小為0。因?yàn)槲覀冞@里用Bit來表示一個(gè)數(shù)據(jù)域,因此最小為0,最大為1。

0x15,0x00,// LOGICAL_MINIMUM (0)

//這是一個(gè)全局條目,說明邏輯值最大為1。

0x25,0x01,// LOGICAL_MAXIMUM (1)

//這是一個(gè)全局條目,說明數(shù)據(jù)域的數(shù)量為三個(gè)。

0x95,0x03,// REPORT_COUNT (3)

//這是一個(gè)全局條目,說明每個(gè)數(shù)據(jù)域的長(zhǎng)度為1個(gè)bit。

0x75,0x01,// REPORT_SIZE (1)

//這是一個(gè)主條目,說明有3個(gè)長(zhǎng)度為1bit的數(shù)據(jù)域(數(shù)量和長(zhǎng)度

//由前面的兩個(gè)全局條目所定義)用來做為輸入,

//屬性為:Data,Var,Abs。Data表示這些數(shù)據(jù)可以變動(dòng),Var表示

//這些數(shù)據(jù)域是獨(dú)立的,每個(gè)域表示一個(gè)意思。Abs表示絕對(duì)值。

//這樣定義的結(jié)果就是,第一個(gè)數(shù)據(jù)域bit0表示按鍵1(左鍵)是否按下,

//第二個(gè)數(shù)據(jù)域bit1表示按鍵2(右鍵)是否按下,第三個(gè)數(shù)據(jù)域bit2表示

//按鍵3(中鍵)是否按下。

0x81,0x02,// INPUT (Data,Var,Abs)

//這是一個(gè)全局條目,說明數(shù)據(jù)域數(shù)量為1個(gè)

0x95,0x01,// REPORT_COUNT (1)

//這是一個(gè)全局條目,說明每個(gè)數(shù)據(jù)域的長(zhǎng)度為5bit。

0x75,0x05,// REPORT_SIZE (5)

//這是一個(gè)主條目,輸入用,由前面兩個(gè)全局條目可知,長(zhǎng)度為5bit,

//數(shù)量為1個(gè)。它的屬性為常量(即返回的數(shù)據(jù)一直是0)。

//這個(gè)只是為了湊齊一個(gè)字節(jié)(前面用了3個(gè)bit)而填充的一些數(shù)據(jù)

//而已,所以它是沒有實(shí)際用途的。

0x81,0x03,// INPUT (Cnst,Var,Abs)

//這是一個(gè)全局條目,選擇用途頁(yè)為普通桌面Generic Desktop Page(0x01)

0x05,0x01,// USAGE_PAGE (Generic Desktop)

//這是一個(gè)局部條目,說明用途為X軸

0x09, 0x30, //

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉