LPCOpen Platform
LPCOpen Platform for NXP LPC Microcontrollers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
AudioClassDevice.h
Go to the documentation of this file.
1 /*
2  * @brief Device mode driver for the library USB Audio 1.0 Class driver
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2012
6  * Copyright(C) Dean Camera, 2011, 2012
7  * All rights reserved.
8  *
9  * @par
10  * Software that is described herein is for illustrative purposes only
11  * which provides customers with programming information regarding the
12  * LPC products. This software is supplied "AS IS" without any warranties of
13  * any kind, and NXP Semiconductors and its licensor disclaim any and
14  * all warranties, express or implied, including all implied warranties of
15  * merchantability, fitness for a particular purpose and non-infringement of
16  * intellectual property rights. NXP Semiconductors assumes no responsibility
17  * or liability for the use of the software, conveys no license or rights under any
18  * patent, copyright, mask work right, or any other intellectual property rights in
19  * or to any products. NXP Semiconductors reserves the right to make changes
20  * in the software without notification. NXP Semiconductors also makes no
21  * representation or warranty that such application will be suitable for the
22  * specified use without further testing or modification.
23  *
24  * @par
25  * Permission to use, copy, modify, and distribute this software and its
26  * documentation is hereby granted, under NXP Semiconductors' and its
27  * licensor's relevant copyrights in the software, without fee, provided that it
28  * is used in conjunction with NXP Semiconductors microcontrollers. This
29  * copyright, permission, and disclaimer notice must appear in all copies of
30  * this code.
31  */
32 
46 #ifndef _AUDIO_CLASS_DEVICE_H_
47 #define _AUDIO_CLASS_DEVICE_H_
48 
49  /* Includes: */
50  #include "../../USB.h"
51  #include "../Common/AudioClassCommon.h"
52 
53  /* Enable C linkage for C++ Compilers: */
54  #if defined(__cplusplus)
55  extern "C" {
56  #endif
57 
58  /* Preprocessor Checks: */
59  #if !defined(__INCLUDE_FROM_AUDIO_DRIVER)
60  #error Do not include this file directly. Include LPCUSBlib/Drivers/USB.h instead.
61  #endif
62 
63  /* Public Interface - May be used in end-application: */
64  /* Type Defines: */
71  typedef struct
72  {
73  const struct
74  {
75  uint8_t StreamingInterfaceNumber;
79  uint8_t DataINEndpointNumber;
82  uint16_t DataINEndpointSize;
86  uint8_t DataOUTEndpointNumber;
89  uint16_t DataOUTEndpointSize;
92  } Config;
95  struct
96  {
97  bool InterfaceEnabled;
100  } State;
104 
105  /* Function Prototypes: */
106 
116 
125 
149  const uint8_t EndpointProperty,
150  const uint8_t EndpointAddress,
151  const uint8_t EndpointControl,
152  uint16_t* const DataLength,
153  uint8_t* Data);
154 
164 
165  /* Inline Functions: */
174  static inline void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
176  static inline void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
177  {
178  (void)AudioInterfaceInfo;
179  }
180 
192  static inline bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
194  static inline bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
195  {
196  if ((USB_DeviceState != DEVICE_STATE_Configured) || !(AudioInterfaceInfo->State.InterfaceEnabled))
197  return false;
198 
199  Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataOUTEndpointNumber);
200  return Endpoint_IsOUTReceived();
201  }
202 
214  static inline bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
216  static inline bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
217  {
218  if ((USB_DeviceState != DEVICE_STATE_Configured) || !(AudioInterfaceInfo->State.InterfaceEnabled))
219  return false;
220 
221  Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataINEndpointNumber);
222  return Endpoint_IsINReady();
223  }
224 
235  static inline int8_t Audio_Device_ReadSample8(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
237  static inline int8_t Audio_Device_ReadSample8(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
238  {
239  int8_t Sample;
240 
241  (void)AudioInterfaceInfo;
242 
243  Sample = Endpoint_Read_8();
244 
245  if (!(Endpoint_BytesInEndpoint()))
247 
248  return Sample;
249  }
250 
261  static inline int16_t Audio_Device_ReadSample16(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
263  static inline int16_t Audio_Device_ReadSample16(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
264  {
265  int16_t Sample;
266 
267  (void)AudioInterfaceInfo;
268 
269  Sample = (int16_t)Endpoint_Read_16_LE();
270 
271  if (!(Endpoint_BytesInEndpoint()))
273 
274  return Sample;
275  }
276 
287  static inline int32_t Audio_Device_ReadSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
289  static inline int32_t Audio_Device_ReadSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
290  {
291  int32_t Sample;
292 
293  (void)AudioInterfaceInfo;
294 
295  Sample = (((uint32_t)Endpoint_Read_8() << 16) | Endpoint_Read_16_LE());
296 
297  if (!(Endpoint_BytesInEndpoint()))
299 
300  return Sample;
301  }
302 
314  static inline void Audio_Device_WriteSample8(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
315  const int8_t Sample) ATTR_NON_NULL_PTR_ARG(1);
316  static inline void Audio_Device_WriteSample8(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
317  const int8_t Sample)
318  {
319  Endpoint_Write_8(Sample);
320 
321  if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize)
323  }
324 
336  static inline void Audio_Device_WriteSample16(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
337  const int16_t Sample) ATTR_NON_NULL_PTR_ARG(1) ATTR_ALWAYS_INLINE;
338  static inline void Audio_Device_WriteSample16(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
339  const int16_t Sample)
340  {
341  Endpoint_Write_16_LE(Sample);
342 
343  if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize)
345  }
346 
358  static inline void Audio_Device_WriteSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
359  const int32_t Sample) ATTR_NON_NULL_PTR_ARG(1) ATTR_ALWAYS_INLINE;
360  static inline void Audio_Device_WriteSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
361  const int32_t Sample)
362  {
363  Endpoint_Write_16_LE(Sample);
364  Endpoint_Write_8(Sample >> 16);
365 
366  if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize)
368  }
369 
370  /* Private Interface - For use in library only: */
371  #if !defined(__DOXYGEN__)
372  /* Function Prototypes: */
373  #if defined(__INCLUDE_FROM_AUDIO_DEVICE_C)
374  void Audio_Device_Event_Stub(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_CONST;
378  #endif
379 
380  #endif
381 
382  /* Disable C linkage for C++ Compilers: */
383  #if defined(__cplusplus)
384  }
385  #endif
386 
387 #endif
388