OTG_AVR8.h 5.32 KB
 Dean Camera committed May 08, 2010 1 2 /* LUFA Library  Dean Camera committed Jan 01, 2011 3  Copyright (C) Dean Camera, 2011.  4   Dean Camera committed May 08, 2010 5  dean [at] fourwalledcubicle [dot] com  Dean Camera committed Oct 28, 2010 6  www.lufa-lib.org  Dean Camera committed May 08, 2010 7 8 9 */ /*  Dean Camera committed Jan 01, 2011 10  Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)  Dean Camera committed May 08, 2010 11   12  Permission to use, copy, modify, distribute, and sell this  Dean Camera committed May 08, 2010 13  software and its documentation for any purpose is hereby granted  14  without fee, provided that the above copyright notice appear in  Dean Camera committed May 08, 2010 15  all copies and that both that the copyright notice and this  16 17 18  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  Dean Camera committed May 08, 2010 19 20 21 22 23 24 25 26 27 28 29  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. */  30   Dean Camera committed May 08, 2010 31 /** \file  Dean Camera committed Feb 20, 2011 32 33  * \brief USB OTG definitions for the AVR8 microcontrollers. * \copydetails Group_OTG_AVR8  Dean Camera committed May 08, 2010 34 35 36 37 38  * * \note This file should not be included directly. It is automatically included as needed by the USB driver * dispatch header located in LUFA/Drivers/USB/USB.h. */  Dean Camera committed Feb 19, 2011 39 40 /** \ingroup Group_OTG * \defgroup Group_OTG_AVR8 USB On The Go (OTG) Management (AVR8)  Dean Camera committed Feb 20, 2011 41  * \brief USB OTG definitions for the AVR8 microcontrollers.  Dean Camera committed May 08, 2010 42  *  Dean Camera committed Feb 20, 2011 43  * Architecture specific USB OTG definitions for the Atmel 8-bit AVR microcontrollers.  Dean Camera committed May 08, 2010 44 45 46 47  * * @{ */  Dean Camera committed Feb 19, 2011 48 49 #ifndef __USBOTG_AVR8_H__ #define __USBOTG_AVR8_H__  Dean Camera committed May 08, 2010 50 51  /* Includes: */  Dean Camera committed Feb 19, 2011 52  #include "../../../../Common/Common.h"  Dean Camera committed May 08, 2010 53 54 55 56 57  /* Preprocessor Checks: */ #if !defined(__INCLUDE_FROM_USB_DRIVER) #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead. #endif  58   Dean Camera committed May 08, 2010 59 60 61 62  /* Public Interface - May be used in end-application: */ /* Macros: */ /** Mask for the VBUS pulsing method of SRP, supported by some OTG devices. *  Dean Camera committed Jun 17, 2010 63  * \see \ref USB_OTG_Device_InitiateSRP().  64  */  Dean Camera committed May 08, 2010 65 66 67 68  #define USB_OTG_SRP_VBUS (1 << SRPSEL) /** Mask for the Data + pulsing method of SRP, supported by some OTG devices. *  Dean Camera committed Jun 17, 2010 69  * \see \ref USB_OTG_Device_InitiateSRP().  70  */  Dean Camera committed May 08, 2010 71 72  #define USB_OTG_STP_DATA 0  Dean Camera committed Jul 22, 2010 73 74 75 76 77 78 79 80 81  /* Inline Functions: */ /** Initiate a Host Negotiation Protocol request. This indicates to the other connected device * that the device wishes to change device/host roles. */ static inline void USB_OTG_Device_RequestHNP(void) ATTR_ALWAYS_INLINE; static inline void USB_OTG_Device_RequestHNP(void) { OTGCON |= (1 << HNPREQ); }  82   Dean Camera committed Jul 22, 2010 83 84 85 86 87 88 89 90  /** Cancel a Host Negotiation Protocol request. This stops a pending HNP request to the other * connected device. */ static inline void USB_OTG_Device_CancelHNPRequest(void) ATTR_ALWAYS_INLINE; static inline void USB_OTG_Device_CancelHNPRequest(void) { OTGCON &= ~(1 << HNPREQ); }  91   Dean Camera committed Jul 22, 2010 92 93  /** Determines if the device is currently sending a HNP to an attached host. *  Dean Camera committed Jan 08, 2011 94  * \return Boolean \c true if currently sending a HNP to the other connected device, \c false otherwise  Dean Camera committed Jul 22, 2010 95  */  96  static inline bool USB_OTG_Device_IsSendingHNP(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;  Dean Camera committed Jul 22, 2010 97 98 99 100  static inline bool USB_OTG_Device_IsSendingHNP(void) { return ((OTGCON & (1 << HNPREQ)) ? true : false); }  101   Dean Camera committed Jul 22, 2010 102 103 104 105 106 107 108 109 110 111 112 113 114  /** Initiates a Session Request Protocol request. Most OTG devices turn off VBUS when the USB * interface is not in use, to conserve power. Sending a SRP to a USB OTG device running in * host mode indicates that VBUS should be applied and a session started. * * There are two different methods of sending a SRP - either pulses on the VBUS line, or by * pulsing the Data + line via the internal pull-up resistor. * * \param[in] SRPTypeMask Mask indicating the type of SRP to use, either \ref USB_OTG_SRP_VBUS or * \ref USB_OTG_STP_DATA. */ static inline void USB_OTG_Device_InitiateSRP(const uint8_t SRPTypeMask) ATTR_ALWAYS_INLINE; static inline void USB_OTG_Device_InitiateSRP(const uint8_t SRPTypeMask) {  Dean Camera committed Oct 12, 2010 115  OTGCON = ((OTGCON & ~(1 << SRPSEL)) | (SRPTypeMask | (1 << SRPREQ)));  Dean Camera committed Jul 22, 2010 116  }  Dean Camera committed May 08, 2010 117   Dean Camera committed Jul 22, 2010 118 119 120 121 122 123 124 125  /** Accepts a HNP from a connected device, indicating that both devices should exchange * device/host roles. */ static inline void USB_OTG_Host_AcceptHNP(void) ATTR_ALWAYS_INLINE; static inline void USB_OTG_Host_AcceptHNP(void) { OTGCON |= (1 << HNPREQ); }  126   Dean Camera committed Jul 22, 2010 127 128 129 130 131 132 133 134  /** Rejects a HNP from a connected device, indicating that both devices should remain in their * current device/host roles. */ static inline void USB_OTG_Host_RejectHNP(void) ATTR_ALWAYS_INLINE; static inline void USB_OTG_Host_RejectHNP(void) { OTGCON &= ~(1 << HNPREQ); }  135   Dean Camera committed Jul 22, 2010 136 137  /** Indicates if the connected device is not currently sending a HNP request. *  Dean Camera committed Jan 08, 2011 138  * \return Boolean \c true if a HNP is currently being issued by the connected device, \c false otherwise.  Dean Camera committed Jul 22, 2010 139 140 141 142 143 144  */ static inline bool USB_OTG_Host_IsHNPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool USB_OTG_Host_IsHNPReceived(void) { return ((OTGCON & (1 << HNPREQ)) ? true : false); }  145   Dean Camera committed May 08, 2010 146 #endif  147   Dean Camera committed May 08, 2010 148 /** @} */  149