From b0d39caa141e2ff68255263fff07982641a4f656 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 28 Oct 2013 12:11:52 -0600 Subject: Add for audio sub-format in audion system. From Ken Pettit --- nuttx/ChangeLog | 29 +++++++++++---------- nuttx/drivers/audio/vs1053.c | 47 ++++++++++++++++++++++++---------- nuttx/include/nuttx/audio/audio.h | 54 +++++++++++++++++++++++---------------- 3 files changed, 82 insertions(+), 48 deletions(-) (limited to 'nuttx') diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index d63386c38..e376bdbf8 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -5559,7 +5559,7 @@ are just hacked out and gutted versions of the corresponding STM32 files (2013-9-13). -6.31 2013-xx-xx Gregory Nutt +6.31 2013-10-28 Gregory Nutt * nuttx/fs/romfs/fs_romfsutil.c: Back out part of a recent ROMFS change (2013-9-14). @@ -5571,7 +5571,7 @@ * configs/ and a few Ethernet drivers: Add the prefix ETH0 to all PHY configuration selections. This will allow us to support to Ethernet MAC drivers with two different - PHYS (identified with ETH0 and ETH1) (2013-9-17). + PHYs (identified with ETH0 and ETH1) (2013-9-17). * net/Kconfig and drivers/net/Kconfig: Move PHY selections from net/Kconfig to drivers/net/Kconfig where they belong. Add the previx ETH0_ to each PHY selection. And a new configuration @@ -5617,7 +5617,7 @@ endpoint from 0xff (invalid) to 10. This is not a critical change but will avoid a complaint from the Linux driver when it overrides the 0xff value (2013-9-22). - * configs/zkit-arm-1769: LED1 is not user controllable after booting. + * configs/zkit-arm-1769: LED1 is now user controllable after booting. From Rashid Fatah (2013-9-23). * arch/arm/src/sama5/sam_hsmci.c: TX DMA disabled. It is just not reliable. No idea why. RX DMA is still used (2013-9-23). @@ -5654,9 +5654,9 @@ next outgoing packet from the TX done interrupt handling. From Max Holtzberg (2013-9-27) * sched/os_start.c: Should not call group_setupidlefiles() if there - are not file descriptors (and, hence, no file system) (2013-9-27). + are no file descriptors (and, hence, no file system) (2013-9-27). * arch/arm/src/sama5/sam_gmac.c: GMAC driver and GMII logic is - code complete and readay for test (2013-9-27) + code complete and ready for test (2013-9-27) * configs/compal_e86: Basic board support for the Motorola C139 (Compal E86) phone. From Craig Comstock (2013-9-27). * configs/compal_e86: Converted to use the kconfig-frontends @@ -5686,14 +5686,14 @@ From Alan Carvalho de Assis. (2013-9-30). * net/net_sendfile: The high performance sendfile logic is now functional. From Max Holtzberg (2013-9-30). - * tools/define.sh: 'cut' long because as it once did. Script + * tools/define.sh: 'cut' no longer works as it once did. Script adapted to observed behavior (2013-9-30). * include/nuttx/net/route.h and net/net_*route.c: Partial implementation of a routing table. Not yet hooked into the build system (2013-10-1) * include/net/route.h: Defines the application interface to the routing table (2013-10-2). - * configs/spark: Add configuratino for the Spark Core. The + * configs/spark: Add configuration for the Spark Core. The initial check-in is basically the Maple Mini board (2013-10-2). * include/net/route.h and libc/net/lib_addroute.c and delroute.c: Add an application interface to manage the routing table @@ -5724,7 +5724,7 @@ Max Holtzberg (2013-10-8). * arch/arm/src/sama5/sam_lcd.c: LCDC driver is code complete and incorporated into the build system (but still untested (2013-10-8). - * configs/sama5d3x-ek/nx: Add an examples/nx configuratino that + * configs/sama5d3x-ek/nx: Add an examples/nx configuration that will be used for the SAMA5 LCD bring-up (2013-10-8). * configs/arduino-due/Kconfig and include/board.h: Add configuration to select revision 3 of the Arduino Due which has some small @@ -5749,7 +5749,7 @@ uip/uip_udpconn.c, uip/uip_udpinput.c: Changed the meaning of the uip_*input functions. They now return success when a packet is dropped; This is needed for the ENCX24J600 driver that must make - a decision to return the packet or not: It should not retai + a decision to return the packet or not: It should not retry dropped packets. From Max Holtzberg (2013-10-11). * drivers/net/encx24j600.c and Kconfig: ENCX24J600: Improved descriptor handling, free packets on rx abort interrupt. From Max Holtzberg @@ -5768,7 +5768,7 @@ * configs/sama5d3x-ek/nxwm/defconfig: Now uses scaled icons in the the NxWM taskbar (2013-10-15). * configs/sama5d3x-ek/nxwm/defconfig: Use the 320x320 NuttX logo as - the NxWM backgroun (2013-10-15). + the NxWM background (2013-10-15). * arch/arm/src/stm32/chip/stm32f103c_pinmap.h: Pinmapping corrections from David Sidrane (2013-10-16). * configs/spark: The Spark device configuration is receiving some @@ -5826,7 +5826,7 @@ driver into the build system; Verify the correct operation of the SAMA5 RTC driver (2013-10-19). * arch/arm/src/sama5/sam_wdt.c and .h: Add a SAMA5 watchdog timer - drvier. Untested on initial check-in (2013-10-19). + driver. Untested on initial check-in (2013-10-19). * arch/arm/src/sama5/sam_trng.c, sam_trng.h, and chip/sam_trng.h: Add a /dev/random driver based on the SAMA5D3 TRNG peripheral (2013-10-20). * configs/sama5d3x-3k/demo: The TRNG and /dev/random are now enabled @@ -5893,8 +5893,8 @@ * drivers/audio/ and include/nuttx/audio/vs1053.h: Updated VS1053 driver from ken Pettit (2013-10-27). * configs/mikroe-stm32f4/: Updated configuration for the - Mikrow STM32F4 board from Ken Pettit (2013-10-27). - * arch/arm/src/stm32/stm32_spi.c: DMA-related fixe from Ken + Mikroe STM32F4 board from Ken Pettit (2013-10-27). + * arch/arm/src/stm32/stm32_spi.c: DMA-related fixes from Ken Pettit (2013-10-27). * sched/sched_releasetcb.c: Fix a cornercase: If sched_releasetcb() is called as part of a failed pthread startup before the flags @@ -5904,4 +5904,7 @@ modes: single channel or multiple channel with sequencer support. software trigger or timer trigger; ADC channel interrupts or DMA (2013-10-28). + * nuttx/drivers/audio/vs1053.c and nuttx/include/nuttx/audio/audio.h: + Add logic to verify the audio sub-format. From Ken Pettit (2013-10-28). +6.32 2013-xx-xx Gregory Nutt diff --git a/nuttx/drivers/audio/vs1053.c b/nuttx/drivers/audio/vs1053.c index 3e56c2019..76be87991 100644 --- a/nuttx/drivers/audio/vs1053.c +++ b/nuttx/drivers/audio/vs1053.c @@ -583,34 +583,54 @@ static int vs1053_getcaps(FAR struct audio_lowerhalf_s *lower, int type, pCaps->ac_channels = 2; /* Stereo output */ - /* The input formats we can decode / accept */ + switch (pCaps->ac_subtype) + { + case AUDIO_TYPE_QUERY: + /* The input formats we can decode / accept */ - pCaps->ac_format[0] = 0 + *((uint16_t *) &pCaps->ac_format[0]) = 0 #ifdef CONFIG_AUDIO_FORMAT_AC3 - | AUDIO_FMT_AC3 + | (1 << (AUDIO_FMT_AC3 - 1)) #endif #ifdef CONFIG_AUDIO_FORMAT_MP3 - | AUDIO_FMT_MP3 + | (1 << (AUDIO_FMT_MP3 - 1)) #endif #ifdef CONFIG_AUDIO_FORMAT_WMA - | AUDIO_FMT_WMA + | (1 << (AUDIO_FMT_WMA - 1)) #endif #ifdef CONFIG_AUDIO_FORMAT_MIDI - | AUDIO_FMT_MIDI + | (1 << (AUDIO_FMT_MIDI - 1)) #endif #ifdef CONFIG_AUDIO_FORMAT_PCM - | AUDIO_FMT_PCM + | (1 << (AUDIO_FMT_PCM - 1)) #endif - ; - #ifdef CONFIG_AUDIO_FORMAT_OGG_VORBIS - pCaps->ac_format[1] = (AUDIO_FMT_OGG_VORBIS) >> 8; + | (1 << (AUDIO_FMT_OGG_VORBIS - 1)) #endif + ; + + /* The types of audio units we implement */ + + pCaps->ac_controls[0] = AUDIO_TYPE_OUTPUT | AUDIO_TYPE_FEATURE | + AUDIO_TYPE_PROCESSING; + + break; - /* The types of audio units we implement */ + /* Report sub-formats for MIDI if requested */ - pCaps->ac_controls[0] = AUDIO_TYPE_OUTPUT | AUDIO_TYPE_FEATURE | - AUDIO_TYPE_PROCESSING; +#ifdef CONFIG_AUDIO_FORMAT_MIDI + case AUDIO_FMT_MIDI: + /* We only support Format 0 */ + + pCaps->ac_controls[0] = AUDIO_SUBFMT_MIDI_0; + pCaps->ac_controls[1] = AUDIO_SUBFMT_END; + break; +#endif + + default: + pCaps->ac_controls[0] = AUDIO_SUBFMT_END; + break; + } break; @@ -663,6 +683,7 @@ static int vs1053_getcaps(FAR struct audio_lowerhalf_s *lower, int type, /* Fill in the ac_controls section with the Feature Units we have */ pCaps->ac_controls[0] = AUDIO_FU_VOLUME | AUDIO_FU_BASS | AUDIO_FU_TREBLE; + pCaps->ac_controls[1] = AUDIO_FU_BALANCE >> 8; } else { diff --git a/nuttx/include/nuttx/audio/audio.h b/nuttx/include/nuttx/audio/audio.h index be03cc71e..6f1afc7f8 100644 --- a/nuttx/include/nuttx/audio/audio.h +++ b/nuttx/include/nuttx/audio/audio.h @@ -129,33 +129,40 @@ * is a list of bit-field definitons for defining the device type. */ -#define AUDIO_TYPE_QUERY 0x0000 -#define AUDIO_TYPE_INPUT 0x0002 -#define AUDIO_TYPE_OUTPUT 0x0004 -#define AUDIO_TYPE_MIXER 0x0008 -#define AUDIO_TYPE_SELECTOR 0x0010 -#define AUDIO_TYPE_FEATURE 0x0020 -#define AUDIO_TYPE_EFFECT 0x0040 -#define AUDIO_TYPE_PROCESSING 0x0080 -#define AUDIO_TYPE_EXTENSION 0x0100 +#define AUDIO_TYPE_QUERY 0x00 +#define AUDIO_TYPE_INPUT 0x02 +#define AUDIO_TYPE_OUTPUT 0x02 +#define AUDIO_TYPE_MIXER 0x04 +#define AUDIO_TYPE_SELECTOR 0x08 +#define AUDIO_TYPE_FEATURE 0x10 +#define AUDIO_TYPE_EFFECT 0x20 +#define AUDIO_TYPE_PROCESSING 0x40 +#define AUDIO_TYPE_EXTENSION 0x80 /* Audio Format Types *******************************************************/ -/* The following defines the audio data format types in NuttX. */ - -#define AUDIO_FMT_UNDEF 0x000 -#define AUDIO_FMT_OTHER 0x001 -#define AUDIO_FMT_MPEG 0x002 -#define AUDIO_FMT_AC3 0x004 -#define AUDIO_FMT_WMA 0x008 -#define AUDIO_FMT_DTS 0x010 -#define AUDIO_FMT_PCM 0x020 -#define AUDIO_FMT_WAV 0x020 -#define AUDIO_FMT_MP3 0x040 -#define AUDIO_FMT_MIDI 0x080 -#define AUDIO_FMT_OGG_VORBIS 0x100 +/* The following defines the audio data format types in NuttX. During a + * format query, these will be converted to bit positions withing the + * ac_format field, meaning we currently only support up to 16 formats. To + * support more than that, we will use the FMT_OTHER entry, and the + * interfacing software can perform a second query to get the other formats. + */ + +#define AUDIO_FMT_UNDEF 0x00 +#define AUDIO_FMT_OTHER 0x01 +#define AUDIO_FMT_MPEG 0x02 +#define AUDIO_FMT_AC3 0x03 +#define AUDIO_FMT_WMA 0x04 +#define AUDIO_FMT_DTS 0x05 +#define AUDIO_FMT_PCM 0x06 +#define AUDIO_FMT_WAV 0x07 +#define AUDIO_FMT_MP3 0x08 +#define AUDIO_FMT_MIDI 0x09 +#define AUDIO_FMT_OGG_VORBIS 0x0A +#define AUDIO_FMT_FLAC 0x0B /* Audio Sub-Format Types ***************************************************/ +#define AUDIO_SUBFMT_END 0x00 #define AUDIO_SUBFMT_PCM_MP1 0x01 #define AUDIO_SUBFMT_PCM_MP2 0x02 #define AUDIO_SUBFMT_PCM_MP3 0x03 @@ -167,6 +174,9 @@ #define AUDIO_SUBFMT_PCM_S16_BE 0x09 #define AUDIO_SUBFMT_PCM_S16_LE 0x0A #define AUDIO_SUBFMT_PCM_U16_BE 0x0B +#define AUDIO_SUBFMT_MIDI_0 0x0C +#define AUDIO_SUBFMT_MIDI_1 0x0D +#define AUDIO_SUBFMT_MIDI_2 0x0E /* Supported Sampling Rates *************************************************/ -- cgit v1.2.3