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

📄 main.c

📁 AVR_usb_ISP
💻 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 + -