From patchwork Fri Feb 12 18:57:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Koegler X-Patchwork-Id: 8295421 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5874AC02AA for ; Fri, 12 Feb 2016 18:58:08 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6AC6120444 for ; Fri, 12 Feb 2016 18:58:07 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 07E5320211 for ; Fri, 12 Feb 2016 18:58:06 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 183302606CF; Fri, 12 Feb 2016 19:58:05 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 73723260831; Fri, 12 Feb 2016 19:57:43 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 058B426109C; Fri, 12 Feb 2016 19:57:42 +0100 (CET) Received: from vie01a-dmta-pe03-2.mx.upcmail.net (vie01a-dmta-pe03-2.mx.upcmail.net [62.179.121.161]) by alsa0.perex.cz (Postfix) with ESMTP id 978D72606A0 for ; Fri, 12 Feb 2016 19:57:24 +0100 (CET) Received: from [172.31.216.43] (helo=vie01a-pemc-psmtp-pe01) by vie01a-dmta-pe03.mx.upcmail.net with esmtp (Exim 4.72) (envelope-from ) id 1aUIuC-00058m-Ed for alsa-devel@alsa-project.org; Fri, 12 Feb 2016 19:57:24 +0100 Received: from master.zuhause ([80.108.242.240]) by vie01a-pemc-psmtp-pe01 with SMTP @ mailcloud.upcmail.net id HWxP1s00E5BuuEg01WxQw7; Fri, 12 Feb 2016 19:57:24 +0100 X-SourceIP: 80.108.242.240 Received: by master.zuhause (Postfix, from userid 1006) id 509594AFBF0E; Fri, 12 Feb 2016 19:57:23 +0100 (CET) From: Martin Koegler To: alsa-devel@alsa-project.org Date: Fri, 12 Feb 2016 19:57:21 +0100 Message-Id: <1455303441-13962-1-git-send-email-martin@mail.zuhause> X-Mailer: git-send-email 2.1.4 Cc: Martin Koegler Subject: [alsa-devel] [PATCH] Provide sequencer sound card number / PID via alsa-lib X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP From: Martin Koegler Signed-off-by: Martin Koegler --- include/seq.h | 1 + include/sound/asequencer.h | 5 +++-- src/seq/seq.c | 11 +++++++++++ src/seq/seq_hw.c | 8 +++++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/seq.h b/include/seq.h index 9576822..77996e5 100644 --- a/include/seq.h +++ b/include/seq.h @@ -143,6 +143,7 @@ snd_seq_client_type_t snd_seq_client_info_get_type(const snd_seq_client_info_t * const char *snd_seq_client_info_get_name(snd_seq_client_info_t *info); int snd_seq_client_info_get_broadcast_filter(const snd_seq_client_info_t *info); int snd_seq_client_info_get_error_bounce(const snd_seq_client_info_t *info); +int snd_seq_client_info_get_owner(const snd_seq_client_info_t *info); const unsigned char *snd_seq_client_info_get_event_filter(const snd_seq_client_info_t *info); int snd_seq_client_info_get_num_ports(const snd_seq_client_info_t *info); int snd_seq_client_info_get_event_lost(const snd_seq_client_info_t *info); diff --git a/include/sound/asequencer.h b/include/sound/asequencer.h index 09c8a00..7ebf7fd 100644 --- a/include/sound/asequencer.h +++ b/include/sound/asequencer.h @@ -24,7 +24,7 @@ /** version of the sequencer */ -#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1) +#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 2) /** * definition of sequencer event types @@ -356,7 +356,8 @@ struct snd_seq_client_info { unsigned char event_filter[32]; /* event filter bitmap */ int num_ports; /* RO: number of ports */ int event_lost; /* number of lost events */ - char reserved[64]; /* for future use */ + int owner; /* RO: card number[kernel] / PID[user] */ + char reserved[64 - sizeof(int)]; /* for future use */ }; diff --git a/src/seq/seq.c b/src/seq/seq.c index 620ca3f..2505293 100644 --- a/src/seq/seq.c +++ b/src/seq/seq.c @@ -1522,6 +1522,17 @@ int snd_seq_client_info_get_error_bounce(const snd_seq_client_info_t *info) } /** + * \brief Get the sound card number (kernel) or owning PID + * \param info client_info container + * \return card number/PID/-1 if value is not available. + */ +int snd_seq_client_info_get_owner(const snd_seq_client_info_t *info) +{ + assert(info); + return info->owner; +} + +/** * \brief (DEPRECATED) Get the event filter bitmap of a client_info container * \param info client_info container * \return NULL if no event filter, or pointer to event filter bitmap diff --git a/src/seq/seq_hw.c b/src/seq/seq_hw.c index d033367..a4c083a 100644 --- a/src/seq/seq_hw.c +++ b/src/seq/seq_hw.c @@ -32,10 +32,11 @@ const char *_snd_module_seq_hw = ""; #ifndef DOC_HIDDEN #define SNDRV_FILE_SEQ ALSA_DEVICE_DIRECTORY "seq" #define SNDRV_FILE_ALOADSEQ ALOAD_DEVICE_DIRECTORY "aloadSEQ" -#define SNDRV_SEQ_VERSION_MAX SNDRV_PROTOCOL_VERSION(1, 0, 1) +#define SNDRV_SEQ_VERSION_MAX SNDRV_PROTOCOL_VERSION(1, 0, 2) typedef struct { int fd; + int micro_version; } snd_seq_hw_t; #endif /* DOC_HIDDEN */ @@ -100,6 +101,8 @@ static int snd_seq_hw_get_client_info(snd_seq_t *seq, snd_seq_client_info_t * in /*SYSERR("SNDRV_SEQ_IOCTL_GET_CLIENT_INFO failed");*/ return -errno; } + if (hw->micro_version < SNDRV_PROTOCOL_MICRO(SNDRV_SEQ_VERSION_MAX)) + info->owner = -1; return 0; } @@ -368,6 +371,8 @@ static int snd_seq_hw_query_next_client(snd_seq_t *seq, snd_seq_client_info_t *i /*SYSERR("SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT failed");*/ return -errno; } + if (hw->micro_version < SNDRV_PROTOCOL_MICRO(SNDRV_SEQ_VERSION_MAX)) + info->owner = -1; return 0; } @@ -480,6 +485,7 @@ int snd_seq_hw_open(snd_seq_t **handle, const char *name, int streams, int mode) return -ENOMEM; } hw->fd = fd; + hw->micro_version = SNDRV_PROTOCOL_MICRO(ver); if (streams & SND_SEQ_OPEN_OUTPUT) { seq->obuf = (char *) malloc(seq->obufsize = SND_SEQ_OBUF_SIZE); if (!seq->obuf) {