X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/fc92f9969c1fcc2f952f0bd6d09a309a9b3ce02f..5517f96e86b9447780a3e27bb455697f9fc65eea:/LUFA/Drivers/USB/Class/Device/MIDI.h diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.h b/LUFA/Drivers/USB/Class/Device/MIDI.h index 45791f1a8..5af6e18a2 100644 --- a/LUFA/Drivers/USB/Class/Device/MIDI.h +++ b/LUFA/Drivers/USB/Class/Device/MIDI.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, 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 + 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 @@ -42,7 +42,7 @@ * * \section Sec_Dependencies Module Source Dependencies * The following files must be built with any user project that uses this module: - * - LUFA/Drivers/USB/Class/Device/MIDI.c + * - LUFA/Drivers/USB/Class/Device/MIDI.c (Makefile source module name: LUFA_SRC_USBCLASS) * * \section Module Description * Device Mode USB Class driver framework interface, for the MIDI USB Class driver. @@ -81,72 +81,76 @@ { const struct { - uint8_t StreamingInterfaceNumber; /**< Index of the Audio Streaming interface within the device this structure controls */ + uint8_t StreamingInterfaceNumber; /**< Index of the Audio Streaming interface within the device this structure controls. */ - uint8_t DataINEndpointNumber; /**< Endpoint number of the incoming MIDI data, if available (zero if unused) */ - uint16_t DataINEndpointSize; /**< Size in bytes of the incoming MIDI data endpoint, if available (zero if unused) */ - bool DataINEndpointDoubleBank; /**< Indicates if the MIDI interface's IN data endpoint should use double banking */ + uint8_t DataINEndpointNumber; /**< Endpoint number of the incoming MIDI data, if available (zero if unused). */ + uint16_t DataINEndpointSize; /**< Size in bytes of the incoming MIDI data endpoint, if available (zero if unused). */ + bool DataINEndpointDoubleBank; /**< Indicates if the MIDI interface's IN data endpoint should use double banking. */ - uint8_t DataOUTEndpointNumber; /**< Endpoint number of the outgoing MIDI data, if available (zero if unused) */ - uint16_t DataOUTEndpointSize; /**< Size in bytes of the outgoing MIDI data endpoint, if available (zero if unused) */ - bool DataOUTEndpointDoubleBank; /**< Indicates if the MIDI interface's IN data endpoint should use double banking */ + uint8_t DataOUTEndpointNumber; /**< Endpoint number of the outgoing MIDI data, if available (zero if unused). */ + uint16_t DataOUTEndpointSize; /**< Size in bytes of the outgoing MIDI data endpoint, if available (zero if unused). */ + bool DataOUTEndpointDoubleBank; /**< Indicates if the MIDI interface's IN data endpoint should use double banking. */ } Config; /**< Config data for the USB class interface within the device. All elements in this section * must be set or the interface will fail to enumerate and operate correctly. - */ + */ struct { - // No state information for this class yet + // No state information for this class } State; /**< State data for the USB class interface within the device. All elements in this section * are reset to their defaults when the interface is enumerated. */ - } USB_ClassInfo_MIDI_Device_t; - + } USB_ClassInfo_MIDI_Device_t; + /* Function Prototypes: */ /** Configures the endpoints of a given MIDI interface, ready for use. This should be linked to the library * \ref EVENT_USB_Device_ConfigurationChanged() event so that the endpoints are configured when the configuration * containing the given MIDI interface is selected. * - * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state + * \note The endpoint index numbers as given in the interface's configuration structure must not overlap with any other + * interface, or endpoint bank corruption will occur. Gaps in the allocated endpoint numbers or non-sequential indexes + * within a single interface is allowed, but no two interfaces of any type have have interleaved endpoint indexes. + * + * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state. * - * \return Boolean true if the endpoints were successfully configured, false otherwise + * \return Boolean true if the endpoints were successfully configured, false otherwise. */ bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); - + /** Sends a MIDI event packet to the host. If no host is connected, the event packet is discarded. Events are queued into the * endpoint bank until either the endpoint bank is full, or \ref MIDI_Device_Flush() is called. This allows for multiple * MIDI events to be packed into a single endpoint packet, increasing data throughput. * - * \note This function must only be called when the Device state machine is in the DEVICE_STATE_Configured state or - * the call will fail. + * \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the + * call will fail. * - * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state - * \param[in] Event Pointer to a populated USB_MIDI_EventPacket_t structure containing the MIDI event to send + * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state. + * \param[in] Event Pointer to a populated \ref MIDI_EventPacket_t structure containing the MIDI event to send. * - * \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum + * \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum. */ uint8_t MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo, - MIDI_EventPacket_t* const Event) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2); + const MIDI_EventPacket_t* const Event) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2); /** Flushes the MIDI send buffer, sending any queued MIDI events to the host. This should be called to override the * \ref MIDI_Device_SendEventPacket() function's packing behaviour, to flush queued events. * - * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state + * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state. * - * \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum + * \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum. */ - uint8_t MIDI_Device_Flush(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo); + uint8_t MIDI_Device_Flush(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); /** Receives a MIDI event packet from the host. Events are unpacked from the endpoint, thus if the endpoint bank contains * multiple MIDI events from the host in the one packet, multiple calls to this function will return each individual event. * - * \note This function must only be called when the Device state machine is in the DEVICE_STATE_Configured state or - * the call will fail. + * \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the + * call will fail. * - * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state - * \param[out] Event Pointer to a USB_MIDI_EventPacket_t structure where the received MIDI event is to be placed + * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state. + * \param[out] Event Pointer to a USB_MIDI_EventPacket_t structure where the received MIDI event is to be placed. * - * \return Boolean true if a MIDI event packet was received, false otherwise + * \return Boolean true if a MIDI event packet was received, false otherwise. */ bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo, MIDI_EventPacket_t* const Event) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2); @@ -155,19 +159,19 @@ /** General management task for a given MIDI class interface, required for the correct operation of the interface. This should * be called frequently in the main program loop, before the master USB management task \ref USB_USBTask(). * - * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state + * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state. */ - static inline void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo); + static inline void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); static inline void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo) { (void)MIDIInterfaceInfo; } - + /** Processes incoming control requests from the host, that are directed to the given MIDI class interface. This should be * linked to the library \ref EVENT_USB_Device_UnhandledControlRequest() event. * - * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state - */ + * \param[in,out] MIDIInterfaceInfo Pointer to a structure containing a MIDI Class configuration and state. + */ static inline void MIDI_Device_ProcessControlRequest(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); static inline void MIDI_Device_ProcessControlRequest(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo) { @@ -178,7 +182,8 @@ #if defined(__cplusplus) } #endif - + #endif /** @} */ +