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

📄 descriptors.h

📁 LUFA (Lightweight USB Framework for AVRs) is my first foray into the world of USB. Originally based
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
             LUFA Library
     Copyright (C) Dean Camera, 2009.
              
  dean [at] fourwalledcubicle [dot] com
      www.fourwalledcubicle.com
*/

/*
  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)

  Permission to use, copy, modify, and distribute this software
  and its documentation for any purpose and without fee is hereby
  granted, provided that the above copyright notice appear in all
  copies and that both that the copyright notice and this
  permission notice and warranty disclaimer appear in supporting
  documentation, and that the name of the author not be used in
  advertising or publicity pertaining to distribution of the
  software without specific, written prior permission.

  The author disclaim all warranties with regard to this
  software, including all implied warranties of merchantability
  and fitness.  In no event shall the author be liable for any
  special, indirect or consequential damages or any damages
  whatsoever resulting from loss of use, data or profits, whether
  in an action of contract, negligence or other tortious action,
  arising out of or in connection with the use or performance of
  this software.
*/

/** \file
 *
 *  Header file for Descriptors.c.
 */
 
#ifndef _DESCRIPTORS_H_
#define _DESCRIPTORS_H_

	/* Includes: */
		#include <LUFA/Drivers/USB/USB.h>

		#include <avr/pgmspace.h>

	/* Macros: */
		/** Descriptor header constant to indicate a Audio class interface descriptor. */
		#define DTYPE_AudioInterface         0x24

		/** Descriptor header constant to indicate a Audio class endpoint descriptor. */
		#define DTYPE_AudioEndpoint          0x25

		/** Audio class descriptor subtype value for a Audio class specific header descriptor. */
		#define DSUBTYPE_Header              0x01

		/** Audio class descriptor subtype value for an Output Terminal Audio class specific descriptor. */
		#define DSUBTYPE_InputTerminal       0x02

		/** Audio class descriptor subtype value for an Input Terminal Audio class specific descriptor. */
		#define DSUBTYPE_OutputTerminal      0x03

		/** Audio class descriptor subtype value for a Feature Unit Audio class specific descriptor. */
		#define DSUBTYPE_FeatureUnit         0x06

		/** Audio class descriptor subtype value for a general Audio class specific descriptor. */
		#define DSUBTYPE_General             0x01

		/** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */
		#define DSUBTYPE_Format              0x02
		
		//@{
		/** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */

		#define CHANNEL_LEFT_FRONT           (1 << 0)
		#define CHANNEL_RIGHT_FRONT          (1 << 1)
		#define CHANNEL_CENTER_FRONT         (1 << 2)
		#define CHANNEL_LOW_FREQ_ENHANCE     (1 << 3)
		#define CHANNEL_LEFT_SURROUND        (1 << 4)
		#define CHANNEL_RIGHT_SURROUND       (1 << 5)
		#define CHANNEL_LEFT_OF_CENTER       (1 << 6)
		#define CHANNEL_RIGHT_OF_CENTER      (1 << 7)
		#define CHANNEL_SURROUND             (1 << 8)
		#define CHANNEL_SIDE_LEFT            (1 << 9)
		#define CHANNEL_SIDE_RIGHT           (1 << 10)
		#define CHANNEL_TOP                  (1 << 11)
		//@}

		//@{
		/** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */

		#define FEATURE_MUTE                 (1 << 0)
		#define FEATURE_VOLUME               (1 << 1)
		#define FEATURE_BASS                 (1 << 2)
		#define FEATURE_MID                  (1 << 3)
		#define FEATURE_TREBLE               (1 << 4)
		#define FEATURE_GRAPHIC_EQUALIZER    (1 << 5)
		#define FEATURE_AUTOMATIC_GAIN       (1 << 6)
		#define FEATURE_DELAY                (1 << 7)
		#define FEATURE_BASS_BOOST           (1 << 8)
		#define FEATURE_BASS_LOUDNESS        (1 << 9)
		//@}

		//@{
		/** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
		
		#define TERMINAL_UNDEFINED           0x0100
		#define TERMINAL_STREAMING           0x0101
		#define TERMINAL_VENDOR              0x01FF
		#define TERMINAL_IN_UNDEFINED        0x0200
		#define TERMINAL_IN_MIC              0x0201
		#define TERMINAL_IN_DESKTOP_MIC      0x0202
		#define TERMINAL_IN_PERSONAL_MIC     0x0203
		#define TERMINAL_IN_OMNIDIR_MIC      0x0204
		#define TERMINAL_IN_MIC_ARRAY        0x0205
		#define TERMINAL_IN_PROCESSING_MIC   0x0206
		#define TERMINAL_IN_OUT_UNDEFINED    0x0300
		#define TERMINAL_OUT_SPEAKER         0x0301
		#define TERMINAL_OUT_HEADPHONES      0x0302
		#define TERMINAL_OUT_HEAD_MOUNTED    0x0303
		#define TERMINAL_OUT_DESKTOP         0x0304
		#define TERMINAL_OUT_ROOM            0x0305
		#define TERMINAL_OUT_COMMUNICATION   0x0306
		#define TERMINAL_OUT_LOWFREQ         0x0307
		//@}

		/** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.
		 *
		 *  \param freq  Required audio sampling frequency in HZ
		 */
		#define SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}
		
		/** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint
		 *  accepts only filled endpoint packets of audio samples.
		 */
		#define EP_ACCEPTS_ONLY_FULL_PACKETS (1 << 7)

		/** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint
		 *  will accept partially filled endpoint packets of audio samples.
		 */
		#define EP_ACCEPTS_SMALL_PACKETS     (0 << 7)

		#if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)
			/** Endpoint number of the Audio isochronous streaming data endpoint. */
			#define AUDIO_STREAM_EPNUM       1
		#else
			#define AUDIO_STREAM_EPNUM       3		
		#endif
		
		/** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires
		 *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller
		 *  USB AVR models will result in unavoidable distorted output.
		 */
		#define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)
		
		/** Sample frequency of the data being transmitted through the streaming endpoint. */
		#define AUDIO_SAMPLE_FREQUENCY       48000
		
	/* Type Defines: */
		/** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to
		 *  supply extra information about the audio device's layout to the host. See the USB Audio specification for more
		 *  details.
		 */
		typedef struct
		{

⌨️ 快捷键说明

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