]>
code.delx.au - pulseaudio/blob - src/modules/bluetooth/ipc.c
3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2004-2008 Marcel Holtmann <marcel@holtmann.org>
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 /* This table contains the string representation for messages */
26 static const char *strmsg
[] = {
27 "BT_GETCAPABILITIES_REQ",
28 "BT_GETCAPABILITIES_RSP",
29 "BT_SETCONFIGURATION_REQ",
30 "BT_SETCONFIGURATION_RSP",
35 "BT_STREAMSUSPEND_IND",
36 "BT_STREAMRESUME_IND",
43 int bt_audio_service_open(void)
47 struct sockaddr_un addr
= {
48 AF_UNIX
, BT_IPC_SOCKET_NAME
51 sk
= socket(PF_LOCAL
, SOCK_STREAM
, 0);
54 fprintf(stderr
, "%s: Cannot open socket: %s (%d)\n",
55 __FUNCTION__
, strerror(err
), err
);
60 if (connect(sk
, (struct sockaddr
*) &addr
, sizeof(addr
)) < 0) {
62 fprintf(stderr
, "%s: connect() failed: %s (%d)\n",
63 __FUNCTION__
, strerror(err
), err
);
72 int bt_audio_service_close(int sk
)
77 int bt_audio_service_get_data_fd(int sk
)
79 char cmsg_b
[CMSG_SPACE(sizeof(int))], m
;
81 struct iovec iov
= { &m
, sizeof(m
) };
85 memset(&msgh
, 0, sizeof(msgh
));
88 msgh
.msg_control
= &cmsg_b
;
89 msgh
.msg_controllen
= CMSG_LEN(sizeof(int));
91 ret
= (int) recvmsg(sk
, &msgh
, 0);
94 fprintf(stderr
, "%s: Unable to receive fd: %s (%d)\n",
95 __FUNCTION__
, strerror(err
), err
);
100 /* Receive auxiliary data in msgh */
101 for (cmsg
= CMSG_FIRSTHDR(&msgh
); cmsg
!= NULL
;
102 cmsg
= CMSG_NXTHDR(&msgh
, cmsg
)) {
103 if (cmsg
->cmsg_level
== SOL_SOCKET
104 && cmsg
->cmsg_type
== SCM_RIGHTS
)
105 return (*(int *) CMSG_DATA(cmsg
));
112 const char *bt_audio_strmsg(int type
)
114 if (type
< 0 || (size_t) type
> (sizeof(strmsg
) / sizeof(strmsg
[0])))