Added new GenericHID device demo application.
[pub/USBasp.git] / Demos / Device / AudioOutput / AudioOutput.h
1 /*
2 LUFA Library
3 Copyright (C) Dean Camera, 2009.
4
5 dean [at] fourwalledcubicle [dot] com
6 www.fourwalledcubicle.com
7 */
8
9 /*
10 Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
11
12 Permission to use, copy, modify, and distribute this software
13 and its documentation for any purpose and without fee is hereby
14 granted, provided that the above copyright notice appear in all
15 copies and that both that the copyright notice and this
16 permission notice and warranty disclaimer appear in supporting
17 documentation, and that the name of the author not be used in
18 advertising or publicity pertaining to distribution of the
19 software without specific, written prior permission.
20
21 The author disclaim all warranties with regard to this
22 software, including all implied warranties of merchantability
23 and fitness. In no event shall the author be liable for any
24 special, indirect or consequential damages or any damages
25 whatsoever resulting from loss of use, data or profits, whether
26 in an action of contract, negligence or other tortious action,
27 arising out of or in connection with the use or performance of
28 this software.
29 */
30
31 /** \file
32 *
33 * Header file for AudioOutput.c.
34 */
35
36 #ifndef _AUDIO_OUTPUT_H_
37 #define _AUDIO_OUTPUT_H_
38
39 /* Includes: */
40 #include <avr/io.h>
41 #include <avr/wdt.h>
42 #include <avr/power.h>
43
44 #include "Descriptors.h"
45
46 #include <LUFA/Version.h> // Library Version Information
47 #include <LUFA/Common/ButtLoadTag.h> // PROGMEM tags readable by the ButtLoad project
48 #include <LUFA/Drivers/USB/USB.h> // USB Functionality
49 #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver
50 #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management
51
52 /* Macros: */
53 #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)
54 #define TCCRxA TCCR3A
55 #define TCCRxB TCCR3B
56 #define OCRxA OCR3A
57 #define OCRxB OCR3B
58 #define WGMx0 WGM30
59 #define WGMx2 WGM32
60 #define COMxA1 COM3A1
61 #define COMxA0 COM3A0
62 #define COMxB1 COM3B1
63 #define COMxB0 COM3B0
64 #define CSx0 CS30
65 #else
66 /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
67 #define TCCRxA TCCR1A
68
69 /** Timer count register used for right channel PWM audio output */
70 #define TCCRxB TCCR1B
71
72 /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
73 #define OCRxA OCR1A
74
75 /** Timer compare register used for right channel PWM audio output */
76 #define OCRxB OCR1B
77
78 /** Timer control register mask used to select PWM mode */
79 #define WGMx0 WGM10
80
81 /** Timer control register mask used to select PWM mode */
82 #define WGMx2 WGM12
83
84 /** Timer control register mask used to set, clear or toggle channel output pin on match */
85 #define COMxA1 COM1A1
86
87 /** Timer control register mask used to set, clear or toggle channel output pin on match */
88 #define COMxA0 COM1A0
89
90 /** Timer control register mask used to set, clear or toggle channel output pin on match */
91 #define COMxB1 COM1B1
92
93 /** Timer control register mask used to set, clear or toggle channel output pin on match */
94 #define COMxB0 COM1B0
95
96 /** Timer control register mask used to start the timer at Fcpu clock rate */
97 #define CSx0 CS10
98 #endif
99
100 /* Enums: */
101 /** Enum for the possible status codes for passing to the UpdateStatus() function. */
102 enum AudioOutput_StatusCodes_t
103 {
104 Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */
105 Status_USBEnumerating = 1, /**< USB interface is enumerating */
106 Status_USBReady = 2, /**< USB interface is connected and ready */
107 };
108
109 /* Task Definitions: */
110 TASK(USB_Audio_Task);
111
112 /* Event Handlers: */
113 /** Indicates that this module will catch the USB_Connect event when thrown by the library. */
114 HANDLES_EVENT(USB_Connect);
115
116 /** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */
117 HANDLES_EVENT(USB_Disconnect);
118
119 /** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */
120 HANDLES_EVENT(USB_ConfigurationChanged);
121
122 /** Indicates that this module will catch the USB_UnhandledControlPacket event when thrown by the library. */
123 HANDLES_EVENT(USB_UnhandledControlPacket);
124
125 /* Function Prototypes: */
126 void UpdateStatus(uint8_t CurrentStatus);
127
128 #endif