diff --git a/audio/audio.c b/audio/audio.c index 25371770f8..6c1f018979 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -760,6 +760,39 @@ static inline void audio_complete(FAR struct audio_upperhalf_s *upper, } } +/**************************************************************************** + * Name: audio_message + * + * Description: + * Send an custom message to the client to indicate that the + * active message has delivered. The lower-half driver initiates this + * call via its callback pointer to our upper-half driver. + * + ****************************************************************************/ + +#ifdef CONFIG_AUDIO_MULTI_SESSION +static inline void audio_message(FAR struct audio_upperhalf_s *upper, + FAR struct ap_buffer_s *apb, uint16_t status, + FAR void *session) +#else +static inline void audio_message(FAR struct audio_upperhalf_s *upper, + FAR struct ap_buffer_s *apb, uint16_t status) +#endif +{ + struct audio_msg_s *msg = (FAR struct audio_msg_s *)apb; + + /* Send a message to the user if a message queue is registered */ + + if (upper->usermq != NULL) + { +#ifdef CONFIG_AUDIO_MULTI_SESSION + msg.session = session; +#endif + (void)nxmq_send(upper->usermq, (FAR const char *)msg, sizeof(*msg), + CONFIG_AUDIO_BUFFER_DEQUEUE_PRIO); + } +} + /**************************************************************************** * Name: audio_callback * @@ -831,6 +864,16 @@ static void audio_callback(FAR void *handle, uint16_t reason, } break; + case AUDIO_CALLBACK_MESSAGE: + { +#ifdef CONFIG_AUDIO_MULTI_SESSION + audio_message(upper, apb, status, session); +#else + audio_message(upper, apb, status); +#endif + } + break; + default: { auderr("ERROR: Unknown callback reason code %d\n", reason); diff --git a/include/nuttx/audio/audio.h b/include/nuttx/audio/audio.h index 50753ab4c0..fd80f8f0f3 100644 --- a/include/nuttx/audio/audio.h +++ b/include/nuttx/audio/audio.h @@ -1,7 +1,7 @@ /**************************************************************************** * include/nuttx/audio/audio.h * - * Copyright (C) 2017 Gregory Nutt. All rights reserved. + * Copyright (C) 2017, 2019 Gregory Nutt. All rights reserved. * Copyright (C) 2013 Ken Pettit. All rights reserved. * Author: Ken Pettit * @@ -283,6 +283,7 @@ /* Extension Unit controls **************************************************/ #define AUDIO_EU_HW_FORMAT 0x0001 +#define AUDIO_EU_LOAD_MODULE 0x0002 /* Audio Callback Reasons ***************************************************/ @@ -290,6 +291,7 @@ #define AUDIO_CALLBACK_DEQUEUE 0x01 #define AUDIO_CALLBACK_IOERR 0x02 #define AUDIO_CALLBACK_COMPLETE 0x03 +#define AUDIO_CALLBACK_MESSAGE 0x04 /* Audio Pipeline Buffer (AP Buffer) flags **********************************/ @@ -316,6 +318,9 @@ #define AUDIO_MSG_DATA_REQUEST 6 #define AUDIO_MSG_ENQUEUE 7 #define AUDIO_MSG_COMPLETE 8 +#define AUDIO_MSG_WAKEUP 9 +#define AUDIO_MSG_COMMAND 10 +#define AUDIO_MSG_SLIENCE 11 #define AUDIO_MSG_USER 64 /* Audio Pipeline Buffer flags */ @@ -357,6 +362,9 @@ struct audio_caps_s uint8_t b[4]; /* by this lower-half driver. */ uint16_t hw[2]; uint32_t w; +ifdef CONFIG_HAVE_LONG_LONG + uint64_t qw; +endif } ac_controls; };