亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbdrv.h

?? AVRusb開發(fā)的一個(gè)電腦遙控器
?? H
?? 第 1 頁 / 共 2 頁
字號(hào):
/* Name: usbdrv.h * Project: AVR USB driver * Author: Christian Starkjohann * Creation Date: 2004-12-29 * Tabsize: 4 * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH * License: Proprietary, free under certain conditions. See Documentation. * This Revision: Id: usbdrv.h 230 2006-07-18 11:29:00Z cs  */  /* $Id: usbdrv.h,v 1.3 2007/01/27 09:10:06 ksz Exp $ */#ifndef __usbdrv_h_included__#define __usbdrv_h_included__#include "usbconfig.h"#include "iarcompat.h"/*Hardware Prerequisites:=======================USB lines D+ and D- MUST be wired to the same I/O port. D+ must (also) beconnected to INT0. D- requires a pullup of 1.5k to +3.5V (and the devicemust be powered at 3.5V) to identify as low-speed USB device. A pullup of1M SHOULD be connected from D+ to +3.5V to prevent interference when no USBmaster is connected. We use D+ as interrupt source and not D- because itdoes not trigger on keep-alive and RESET states.As a compile time option, the 1.5k pullup resistor on D- can be madeswitchable to allow the device to disconnect at will. See the definition ofusbDeviceConnect() and usbDeviceDisconnect() further down in this file.Please adapt the values in usbconfig.h according to your hardware!The device MUST be clocked at 12 MHz. This is more than the 10 MHz allowed byan AT90S2313 powered at 4.5V. However, if the supply voltage to maximum clockrelation is interpolated linearly, an ATtiny2313 meets the requirement byspecification. In practice, the AT90S2313 can be overclocked and works well.Limitations:============Compiling:You should link the usbdrv.o module first because it has special alignmentrequirements for the receive buffer (the buffer must not cross a 256 bytepage boundary, it must not even touch it at the end). If you can't link itfirst, you must use other measures to ensure alignment.Note: gcc does not always assign variable addresses in the order as the modulesare linked or the variables are declared. You can choose a memory section forthe receive buffer with the configuration option "USB_BUFFER_SECTION". Thisoption defaults to ".bss". If you use your own section, you can place it atan arbitrary location with a linker option similar to"-Wl,--section-start=.mybuffer=0x800060". Use "avr-nm -ng" on the binary andsearch for "usbRxBuf" to find tbe base address of the 22 bytes rx buffer.Robustness with respect to communication errors:The driver assumes error-free communication. It DOES check for errors inthe PID, but does NOT check bit stuffing errors, SE0 in middle of a byte,token CRC (5 bit) and data CRC (16 bit). CRC checks can not be performed dueto timing constraints: We must start sending a reply within 7 bit times.Bit stuffing and misplaced SE0 would have to be checked in real-time, but CPUperformance does not permit that. The driver does not check Data0/Data1toggling, but application software can implement the check.Sampling jitter:The driver guarantees a sampling window of 1/2 bit. The USB spec requiresthat the receiver has at most 1/4 bit sampling window. The 1/2 bit windowshould still work reliably enough because we work at low speed. If you wantto meet the spec, define the macro "USB_CFG_SAMPLE_EXACT" to 1 in usbconfig.h.This will unroll a loop which results in bigger code size.Input characteristics:Since no differential receiver circuit is used, electrical interferencerobustness may suffer. The driver samples only one of the data lines withan ordinary I/O pin's input characteristics. However, since this is only alow speed USB implementation and the specification allows for 8 times thebit rate over the same hardware, we should be on the safe side. Even the specrequires detection of asymmetric states at high bit rate for SE0 detection.Number of endpoints:The driver supports up to four endpoints: One control endpoint (endpoint 0),two interrupt-in (or bulk-in) endpoints (endpoint 1 and 3) and oneinterrupt-out (or bulk-out) endpoint (endpoint 1). Please note that the USBstandard forbids bulk endpoints for low speed devices! Most operating systemsallow them anyway, but the AVR will spend 90% of the CPU time in the USBinterrupt polling for bulk data.By default, only the control endpoint 0 is enabled. To get the other endpoints,define USB_CFG_HAVE_INTRIN_ENDPOINT, USB_CFG_HAVE_INTRIN_ENDPOINT3 and/orUSB_CFG_IMPLEMENT_FN_WRITEOUT respectively (see usbconfig-prototype.h fordetails).Maximum data payload:Data payload of control in and out transfers may be up to 254 bytes. In orderto accept payload data of out transfers, you need to implement'usbFunctionWrite()'.USB Suspend Mode supply current:The USB standard limits power consumption to 500uA when the bus is in suspendmode. This is not a problem for self-powered devices since they don't needbus power anyway. Bus-powered devices can achieve this only by putting theCPU in sleep mode. The driver does not implement suspend handling by itself.However, the application may implement activity monitoring and wakeup fromsleep. The host sends regular SE0 states on the bus to keep it active. TheseSE0 states can be detected by wiring the INT1 pin to D-. It is not necessaryto enable the interrupt, checking the interrupt pending flag should suffice.Before entering sleep mode, the application should enable INT1 for a wakeupon the next bus activity.Operation without an USB master:The driver behaves neutral without connection to an USB master if D- readsas 1. To avoid spurious interrupts, we recommend a high impedance (e.g. 1M)pullup resistor on D+. If D- becomes statically 0, the driver may block inthe interrupt routine.Interrupt latency:The application must ensure that the USB interrupt is not disabled for morethan 20 cycles. This implies that all interrupt routines must either bedeclared as "INTERRUPT" instead of "SIGNAL" (see "avr/signal.h") or that theyare written in assembler with "sei" as the first instruction.Maximum interrupt duration / CPU cycle consumption:The driver handles all USB communication during the interrupt serviceroutine. The routine will not return before an entire USB message is receivedand the reply is sent. This may be up to ca. 1200 cycles = 100us if the hostconforms to the standard. The driver will consume CPU cycles for all USBmessages, even if they address another (low-speed) device on the same bus.*//* ------------------------------------------------------------------------- *//* --------------------------- Module Interface ---------------------------- *//* ------------------------------------------------------------------------- */#define USBDRV_VERSION  20060718/* This define uniquely identifies a driver version. It is a decimal number * constructed from the driver's release date in the form YYYYMMDD. If the * driver's behavior or interface changes, you can use this constant to * distinguish versions. If it is not defined, the driver's release date is * older than 2006-01-25. */#ifndef __ASSEMBLER__#ifndef uchar#define uchar   unsigned char#endif#ifndef schar#define schar   signed char#endif/* shortcuts for well defined 8 bit integer types */struct usbRequest;  /* forward declaration */extern void     usbInit(void);/* This function must be called before interrupts are enabled and the main * loop is entered. */extern void     usbPoll(void);/* This function must be called at regular intervals from the main loop. * Maximum delay between calls is somewhat less than 50ms (USB timeout for * accepting a Setup message). Otherwise the device will not be recognized. * Please note that debug outputs through the UART take ~ 0.5ms per byte * at 19200 bps. */extern uchar    *usbMsgPtr;/* This variable may be used to pass transmit data to the driver from the * implementation of usbFunctionWrite(). It is also used internally by the * driver for standard control requests. */extern uchar    usbFunctionSetup(uchar data[8]);/* This function is called when the driver receives a SETUP transaction from * the host which is not answered by the driver itself (in practice: class and * vendor requests). All control transfers start with a SETUP transaction where * the host communicates the parameters of the following (optional) data * transfer. The SETUP data is available in the 'data' parameter which can * (and should) be casted to 'usbRequest_t *' for a more user-friendly access * to parameters. * * If the SETUP indicates a control-in transfer, you should provide the * requested data to the driver. There are two ways to transfer this data: * (1) Set the global pointer 'usbMsgPtr' to the base of the static RAM data * block and return the length of the data in 'usbFunctionSetup()'. The driver * will handle the rest. Or (2) return 0xff in 'usbFunctionSetup()'. The driver * will then call 'usbFunctionRead()' when data is needed. See the * documentation for usbFunctionRead() for details. * * If the SETUP indicates a control-out transfer, the only way to receive the * data from the host is through the 'usbFunctionWrite()' call. If you * implement this function, you must return 0xff in 'usbFunctionSetup()' to * indicate that 'usbFunctionWrite()' should be used. See the documentation of * this function for more information. If you just want to ignore the data sent * by the host, return 0 in 'usbFunctionSetup()'. * * Note that calls to the functions usbFunctionRead() and usbFunctionWrite() * are only done if enabled by the configuration in usbconfig.h. */extern uchar usbFunctionDescriptor(struct usbRequest *rq);/* You need to implement this function ONLY if you provide USB descriptors at * runtime (which is an expert feature). It is very similar to * usbFunctionSetup() above, but it is called only to request USB descriptor * data. See the documentation of usbFunctionSetup() above for more info. */#if USB_CFG_HAVE_INTRIN_ENDPOINTvoid    usbSetInterrupt(uchar *data, uchar len);/* This function sets the message which will be sent during the next interrupt * IN transfer. The message is copied to an internal buffer and must not exceed * a length of 8 bytes. The message may be 0 bytes long just to indicate the * interrupt status to the host. * If you need to transfer more bytes, use a control read after the interrupt. */extern volatile uchar usbTxLen1;#define usbInterruptIsReady()   (usbTxLen1 & 0x10)/* This macro indicates whether the last interrupt message has already been * sent. If you set a new interrupt message before the old was sent, the * message already buffered will be lost. */#if USB_CFG_HAVE_INTRIN_ENDPOINT3void    usbSetInterrupt3(uchar *data, uchar len);extern volatile uchar usbTxLen3;#define usbInterruptIsReady3()   (usbTxLen3 & 0x10)/* Same as above for endpoint 3 */#endif#endif /* USB_CFG_HAVE_INTRIN_ENDPOINT */#if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    /* simplified interface for backward compatibility */#define usbHidReportDescriptor  usbDescriptorHidReport/* should be declared as: PROGMEM char usbHidReportDescriptor[]; *//* If you implement an HID device, you need to provide a report descriptor. * The HID report descriptor syntax is a bit complex. If you understand how * report descriptors are constructed, we recommend that you use the HID * Descriptor Tool from usb.org, see http://www.usb.org/developers/hidpage/. * Otherwise you should probably start with a working example. */#endif  /* USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH */#if USB_CFG_IMPLEMENT_FN_WRITEextern uchar    usbFunctionWrite(uchar *data, uchar len);/* This function is called by the driver to provide a control transfer's * payload data (control-out). It is called in chunks of up to 8 bytes. The * total count provided in the current control transfer can be obtained from * the 'length' property in the setup data. If an error occurred during * processing, return 0xff (== -1). The driver will answer the entire transfer * with a STALL token in this case. If you have received the entire payload * successfully, return 1. If you expect more data, return 0. If you don't * know whether the host will send more data (you should know, the total is * provided in the usbFunctionSetup() call!), return 1. * NOTE: If you return 0xff for STALL, 'usbFunctionWrite()' may still be called * for the remaining data. You must continue to return 0xff for STALL in these * calls. * In order to get usbFunctionWrite() called, define USB_CFG_IMPLEMENT_FN_WRITE * to 1 in usbconfig.h and return 0xff in usbFunctionSetup().. */#endif /* USB_CFG_IMPLEMENT_FN_WRITE */#if USB_CFG_IMPLEMENT_FN_READextern uchar usbFunctionRead(uchar *data, uchar len);/* This function is called by the driver to ask the application for a control * transfer's payload data (control-in). It is called in chunks of up to 8 * bytes each. You should copy the data to the location given by 'data' and * return the actual number of bytes copied. If you return less than requested, * the control-in transfer is terminated. If you return 0xff, the driver aborts * the transfer with a STALL token. * In order to get usbFunctionRead() called, define USB_CFG_IMPLEMENT_FN_READ * to 1 in usbconfig.h and return 0xff in usbFunctionSetup().. */#endif /* USB_CFG_IMPLEMENT_FN_READ */#if USB_CFG_IMPLEMENT_FN_WRITEOUTextern void usbFunctionWriteOut(uchar *data, uchar len);/* This function is called by the driver when data on interrupt-out or bulk- * out endpoint 1 is received. You must define USB_CFG_IMPLEMENT_FN_WRITEOUT * to 1 in usbconfig.h to get this function called. */#endif /* USB_CFG_IMPLEMENT_FN_WRITEOUT */#ifdef USB_CFG_PULLUP_IOPORTNAME#define usbDeviceConnect()      ((USB_PULLUP_DDR |= (1<<USB_CFG_PULLUP_BIT)), \                                  (USB_PULLUP_OUT |= (1<<USB_CFG_PULLUP_BIT)))/* This macro (intended to look like a function) connects the device to the * USB bus. It is only available if you have defined the constants * USB_CFG_PULLUP_IOPORT and USB_CFG_PULLUP_BIT in usbconfig.h. */#define usbDeviceDisconnect()   (USB_PULLUP_OUT &= ~(1<<USB_CFG_PULLUP_BIT))/* This macro (intended to look like a function) disconnects the device from * the USB bus. It is only available if you have defined the constants * USB_CFG_PULLUP_IOPORT and USB_CFG_PULLUP_BIT in usbconfig.h. */#endif /* USB_CFG_PULLUP_IOPORT */extern unsigned usbCrc16(unsigned data, uchar len);#define usbCrc16(data, len) usbCrc16((unsigned)(data), len)/* This function calculates the binary complement of the data CRC used in * USB data packets. The value is used to build raw transmit packets. * You may want to use this function for data checksums or to verify received * data. We enforce 16 bit calling conventions for compatibility with IAR's * tiny memory model. */extern unsigned usbCrc16Append(unsigned data, uchar len);#define usbCrc16Append(data, len)    usbCrc16Append((unsigned)(data), len)/* This function is equivalent to usbCrc16() above, except that it appends * the 2 bytes CRC (lowbyte first) in the 'data' buffer after reading 'len' * bytes. */extern uchar    usbConfiguration;/* This value contains the current configuration set by the host. The driver * allows setting and querying of this variable with the USB SET_CONFIGURATION * and GET_CONFIGURATION requests, but does not use it otherwise. * You may want to reflect the "configured" status with a LED on the device or * switch on high power parts of the circuit only if the device is configured. */#define USB_STRING_DESCRIPTOR_HEADER(stringLength) ((2*(stringLength)+2) | (3<<8))/* This macro builds a descriptor header for a string descriptor given the * string's length. See usbdrv.c for an example how to use it. */#if USB_CFG_HAVE_FLOWCONTROLextern volatile schar   usbRxLen;#define usbDisableAllRequests()     usbRxLen = -1/* Must be called from usbFunctionWrite(). This macro disables all data input * from the USB interface. Requests from the host are answered with a NAK * while they are disabled. */#define usbEnableAllRequests()      usbRxLen = 0/* May only be called if requests are disabled. This macro enables input from * the USB interface after it has been disabled with usbDisableAllRequests(). */#define usbAllRequestsAreDisabled() (usbRxLen < 0)/* Use this macro to find out whether requests are disabled. It may be needed * to ensure that usbEnableAllRequests() is never called when requests are * enabled. */#endifextern uchar    usbTxPacketCnt1;extern uchar    usbTxPacketCnt3;/* The two variables above are mostly for internal use by the driver. You may * have to reset usbTxPacketCnt1 to 0 if you start data toggling at DATA0 for * interrupt-IN endpoint 1 and usbTxPacketCnt3 for interrupt-IN endpoint 3

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美久久一区| 国产v综合v亚洲欧| 欧美日韩你懂的| 日韩不卡一区二区| 日韩欧美国产wwwww| 国产一区二区三区电影在线观看| 日韩欧美激情一区| 国产 日韩 欧美大片| 亚洲欧美日韩成人高清在线一区| 在线观看日韩av先锋影音电影院| 亚洲一区免费视频| 久久综合九色综合97婷婷女人 | 69久久夜色精品国产69蝌蚪网| 丝袜亚洲精品中文字幕一区| 91精品国产欧美一区二区| 国精产品一区一区三区mba桃花| 国产欧美日产一区| 欧美日韩国产成人在线免费| 麻豆国产欧美日韩综合精品二区| 久久久精品日韩欧美| 欧美色成人综合| 国产成人亚洲精品狼色在线| 亚洲bt欧美bt精品| 国产欧美日韩另类视频免费观看| 91国偷自产一区二区开放时间| 久久99这里只有精品| 亚洲在线成人精品| 中文字幕一区免费在线观看| 欧美一区二视频| 精品视频在线免费看| 丰满少妇久久久久久久| 久久超碰97中文字幕| 亚洲一区二区免费视频| 最新热久久免费视频| 国产精品美女久久久久高潮| 日韩欧美国产一区二区在线播放 | 国产剧情一区在线| 日韩高清欧美激情| 亚洲电影一区二区三区| 中文字幕亚洲一区二区va在线| www国产精品av| 欧美精品一区二| 日韩欧美亚洲另类制服综合在线| 欧美麻豆精品久久久久久| 欧美在线播放高清精品| 欧美日韩你懂得| 在线综合+亚洲+欧美中文字幕| 在线观看免费亚洲| 欧美日韩一区不卡| 欧美一区二区三级| 久久视频一区二区| 中文字幕一区二区三区蜜月 | 欧美高清一级片在线观看| 国产精品家庭影院| 亚洲一二三四区| 青青草视频一区| 国产在线不卡视频| 99免费精品视频| 精品视频一区二区不卡| 日韩美一区二区三区| 国产精品三级视频| 午夜精品久久久久| 国产成人福利片| 欧美色图片你懂的| 国产亚洲欧美日韩日本| 亚洲免费在线视频| 激情都市一区二区| 在线一区二区三区四区五区| 欧美va日韩va| 性久久久久久久久久久久| 国产成人亚洲综合a∨猫咪| 在线免费观看一区| 国产精品情趣视频| 久久99国产精品久久99| 欧美日韩国产综合视频在线观看| 国产欧美一区二区在线| 日韩成人免费在线| 色天使色偷偷av一区二区| 欧美激情综合五月色丁香小说| 天天综合天天综合色| 色天使色偷偷av一区二区| 亚洲精品一区二区三区蜜桃下载| 日韩在线播放一区二区| 在线观看视频一区二区欧美日韩| 国产女人水真多18毛片18精品视频| 亚洲国产成人91porn| 色妹子一区二区| 亚洲欧美日韩国产另类专区| 不卡的av电影| 成人欧美一区二区三区黑人麻豆 | 99久久综合99久久综合网站| 久久久亚洲欧洲日产国码αv| 极品美女销魂一区二区三区| 精品三级av在线| 国产激情偷乱视频一区二区三区| 精品少妇一区二区三区| 国产一区 二区| 自拍av一区二区三区| 91国模大尺度私拍在线视频| 亚洲第四色夜色| 久久精品一区二区三区不卡牛牛 | 国产亚洲综合av| 日本欧洲一区二区| 中文字幕免费不卡| 欧美精品一区二区三区久久久| 色婷婷一区二区三区四区| 成人高清视频在线观看| 韩国女主播一区| 开心九九激情九九欧美日韩精美视频电影 | 国产亚洲一区二区三区在线观看 | 麻豆国产精品777777在线| 欧美经典一区二区三区| 色偷偷久久人人79超碰人人澡| 亚洲精品ww久久久久久p站| 欧美精品视频www在线观看| 国产伦理精品不卡| 亚洲成年人网站在线观看| 久久精品视频免费| 欧美福利视频导航| 欧美性淫爽ww久久久久无| av电影一区二区| 国产高清不卡一区二区| 日日夜夜免费精品| 亚洲特黄一级片| 久久亚洲一区二区三区四区| 欧美日韩成人综合在线一区二区| 91色婷婷久久久久合中文| 成人精品免费网站| 成人一区在线观看| 另类人妖一区二区av| 青青草视频一区| 久久不见久久见免费视频1| 香蕉影视欧美成人| 亚洲成人综合视频| 亚洲午夜久久久久久久久久久 | 亚洲综合成人在线视频| 国产精品美女一区二区在线观看| 欧美第一区第二区| 91精品国产综合久久久久久久 | 欧美午夜免费电影| 91福利国产精品| 在线观看视频91| 欧美亚洲综合网| 欧美日韩亚洲综合| 欧美精品xxxxbbbb| 久久精品一区二区三区不卡牛牛 | 亚洲国产综合91精品麻豆| 日本不卡的三区四区五区| 老司机精品视频线观看86| 韩国一区二区在线观看| 成人美女在线视频| 在线区一区二视频| 精品久久久久久久久久久院品网 | 精品久久国产老人久久综合| 中文字幕不卡在线观看| 日韩av在线免费观看不卡| 高清日韩电视剧大全免费| 日韩欧美一级二级三级| 亚洲精品成a人| 成人激情av网| 久久综合九色综合欧美亚洲| 无码av免费一区二区三区试看 | 欧美日精品一区视频| 久久一夜天堂av一区二区三区| 中文字幕欧美区| 日韩高清不卡一区二区三区| 国产精品性做久久久久久| 欧美性受xxxx| 中文字幕一区二区在线播放| 人人狠狠综合久久亚洲| 成人91在线观看| 精品国产一区二区在线观看| 亚洲精品国产视频| 国产一区二三区| 欧美精选一区二区| 亚洲风情在线资源站| 91在线视频网址| 国产日韩高清在线| 国产一区二三区好的| 欧美电影免费观看高清完整版在| 亚洲综合色视频| 99re66热这里只有精品3直播 | 午夜精品一区在线观看| 91丝袜美腿高跟国产极品老师 | 久久综合中文字幕| 久久精品国产亚洲一区二区三区| 欧美视频一区二区三区| 一区二区三区美女视频| 91丨porny丨中文| 亚洲视频一区在线观看| www.爱久久.com| 国产精品国模大尺度视频| 丰满白嫩尤物一区二区| 国产精品美女久久久久久久| 99久久夜色精品国产网站| 国产精品美女www爽爽爽| 97se狠狠狠综合亚洲狠狠| 亚洲欧美另类在线| 欧洲一区二区三区在线| 午夜久久久影院|