📄 main.c
字号:
/* Name: main.c * Project: Testing driver features * Author: Christian Starkjohann * Creation Date: 2008-04-29 * Tabsize: 4 * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) * This Revision: $Id: main.c 692 2008-11-07 15:07:40Z cs $ *//*This module is a do-nothing test code linking against (or including) the USBdriver. It is used to determine the code size for various options and tocheck whether the code compiles with all options.*/#include <avr/io.h>#include <avr/interrupt.h> /* for sei() */#include <avr/pgmspace.h> /* required by usbdrv.h */#include <util/delay.h> /* for _delay_ms() */#include "usbdrv.h"#if USE_INCLUDE#include "usbdrv.c"#endif/* ------------------------------------------------------------------------- *//* ----------------------------- USB interface ----------------------------- *//* ------------------------------------------------------------------------- */#if USB_CFG_IMPLEMENT_FN_WRITEuchar usbFunctionWrite(uchar *data, uchar len){ return 1;}#endif#if USB_CFG_IMPLEMENT_FN_READuchar usbFunctionRead(uchar *data, uchar len){ return len;}#endif#if USB_CFG_IMPLEMENT_FN_WRITEOUTvoid usbFunctionWriteOut(uchar *data, uchar len){}#endif#if USE_DYNAMIC_DESCRIPTORstatic PROGMEM char myDescriptorDevice[] = { /* USB device descriptor */ 18, /* sizeof(usbDescriptorDevice): length of descriptor in bytes */ USBDESCR_DEVICE, /* descriptor type */ 0x10, 0x01, /* USB version supported */ USB_CFG_DEVICE_CLASS, USB_CFG_DEVICE_SUBCLASS, 0, /* protocol */ 8, /* max packet size */ /* the following two casts affect the first byte of the constant only, but * that's sufficient to avoid a warning with the default values. */ (char)USB_CFG_VENDOR_ID,/* 2 bytes */ (char)USB_CFG_DEVICE_ID,/* 2 bytes */ USB_CFG_DEVICE_VERSION, /* 2 bytes */ USB_CFG_DESCR_PROPS_STRING_VENDOR != 0 ? 1 : 0, /* manufacturer string index */ USB_CFG_DESCR_PROPS_STRING_PRODUCT != 0 ? 2 : 0, /* product string index */ USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER != 0 ? 3 : 0, /* serial number string index */ 1, /* number of configurations */};static PROGMEM char myDescriptorConfiguration[] = { /* USB configuration descriptor */ 9, /* sizeof(usbDescriptorConfiguration): length of descriptor in bytes */ USBDESCR_CONFIG, /* descriptor type */ 18 + 7 * USB_CFG_HAVE_INTRIN_ENDPOINT + (USB_CFG_DESCR_PROPS_HID & 0xff), 0, /* total length of data returned (including inlined descriptors) */ 1, /* number of interfaces in this configuration */ 1, /* index of this configuration */ 0, /* configuration name string index */#if USB_CFG_IS_SELF_POWERED USBATTR_SELFPOWER, /* attributes */#else (char)USBATTR_BUSPOWER, /* attributes */#endif USB_CFG_MAX_BUS_POWER/2, /* max USB current in 2mA units *//* interface descriptor follows inline: */ 9, /* sizeof(usbDescrInterface): length of descriptor in bytes */ USBDESCR_INTERFACE, /* descriptor type */ 0, /* index of this interface */ 0, /* alternate setting for this interface */ USB_CFG_HAVE_INTRIN_ENDPOINT, /* endpoints excl 0: number of endpoint descriptors to follow */ USB_CFG_INTERFACE_CLASS, USB_CFG_INTERFACE_SUBCLASS, USB_CFG_INTERFACE_PROTOCOL, 0, /* string index for interface */#if (USB_CFG_DESCR_PROPS_HID & 0xff) /* HID descriptor */ 9, /* sizeof(usbDescrHID): length of descriptor in bytes */ USBDESCR_HID, /* descriptor type: HID */ 0x01, 0x01, /* BCD representation of HID version */ 0x00, /* target country code */ 0x01, /* number of HID Report (or other HID class) Descriptor infos to follow */ 0x22, /* descriptor type: report */ USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH, 0, /* total length of report descriptor */#endif#if USB_CFG_HAVE_INTRIN_ENDPOINT /* endpoint descriptor for endpoint 1 */ 7, /* sizeof(usbDescrEndpoint) */ USBDESCR_ENDPOINT, /* descriptor type = endpoint */ (char)0x81, /* IN endpoint number 1 */ 0x03, /* attrib: Interrupt endpoint */ 8, 0, /* maximum packet size */ USB_CFG_INTR_POLL_INTERVAL, /* in ms */#endif};USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(usbRequest_t *rq){uchar *p = 0, len = 0; if(rq->wValue.bytes[1] == USBDESCR_DEVICE){ p = (uchar *)myDescriptorDevice; len = sizeof(myDescriptorDevice); }else{ /* must be configuration descriptor */ p = (uchar *)(myDescriptorConfiguration); len = sizeof(myDescriptorConfiguration); } usbMsgPtr = p; return len;}#endifUSB_PUBLIC usbMsgLen_t usbFunctionSetup(uchar data[8]){usbRequest_t *rq = (void *)data; if(rq->bRequest == 0) /* request using usbFunctionRead()/usbFunctionWrite() */ return 0xff; return 0; /* default for not implemented requests: return no data back to host */}/* ------------------------------------------------------------------------- */int main(void){uchar i; usbInit(); usbDeviceDisconnect(); /* enforce re-enumeration, do this while interrupts are disabled! */ i = 0; while(--i){ /* fake USB disconnect for > 250 ms */ _delay_ms(1); } usbDeviceConnect(); sei(); for(;;){ /* main event loop */ usbPoll(); } return 0;}/* ------------------------------------------------------------------------- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -