?? ipc.h
字號:
/* * * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2004-2008 Marcel Holtmann <marcel@holtmann.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *//* Message sequence chart of streaming sequence for A2DP transport Audio daemon User on snd_pcm_open <--BT_GETCAPABILITIES_REQ BT_GETCAPABILITIES_RSP--> on snd_pcm_hw_params <--BT_SETCONFIGURATION_REQ BT_SETCONFIGURATION_RSP--> on snd_pcm_prepare <--BT_STREAMSTART_REQ <Moves to streaming state> BT_STREAMSTART_RSP--> BT_STREAMFD_IND --> < streams data > .......... on snd_pcm_drop/snd_pcm_drain <--BT_STREAMSTOP_REQ <Moves to open state> BT_STREAMSTOP_RSP--> on IPC close or appl crash <Moves to idle> */#ifndef BT_AUDIOCLIENT_H#define BT_AUDIOCLIENT_H#ifdef __cplusplusextern "C" {#endif#include <stdint.h>#include <stdio.h>#include <unistd.h>#include <sys/socket.h>#include <sys/un.h>#include <errno.h>#define BT_AUDIO_IPC_PACKET_SIZE 128#define BT_IPC_SOCKET_NAME "\0/org/bluez/audio"/* Generic message header definition, except for RSP messages */typedef struct { uint8_t msg_type;} __attribute__ ((packed)) bt_audio_msg_header_t;/* Generic message header definition, for all RSP messages */typedef struct { bt_audio_msg_header_t msg_h; uint8_t posix_errno;} __attribute__ ((packed)) bt_audio_rsp_msg_header_t;/* Messages list */#define BT_GETCAPABILITIES_REQ 0#define BT_GETCAPABILITIES_RSP 1#define BT_SETCONFIGURATION_REQ 2#define BT_SETCONFIGURATION_RSP 3#define BT_STREAMSTART_REQ 4#define BT_STREAMSTART_RSP 5#define BT_STREAMSTOP_REQ 6#define BT_STREAMSTOP_RSP 7#define BT_STREAMSUSPEND_IND 8#define BT_STREAMRESUME_IND 9#define BT_CONTROL_REQ 10#define BT_CONTROL_RSP 11#define BT_CONTROL_IND 12#define BT_STREAMFD_IND 13/* BT_GETCAPABILITIES_REQ */#define BT_CAPABILITIES_TRANSPORT_A2DP 0#define BT_CAPABILITIES_TRANSPORT_SCO 1#define BT_CAPABILITIES_TRANSPORT_ANY 2#define BT_CAPABILITIES_ACCESS_MODE_READ 1#define BT_CAPABILITIES_ACCESS_MODE_WRITE 2#define BT_CAPABILITIES_ACCESS_MODE_READWRITE 3#define BT_FLAG_AUTOCONNECT 1struct bt_getcapabilities_req { bt_audio_msg_header_t h; char device[18]; /* Address of the remote Device */ uint8_t transport; /* Requested transport */ uint8_t flags; /* Requested flags */} __attribute__ ((packed));/* BT_GETCAPABILITIES_RSP *//** * SBC Codec parameters as per A2DP profile 1.0 § 4.3 */#define BT_SBC_SAMPLING_FREQ_16000 (1 << 3)#define BT_SBC_SAMPLING_FREQ_32000 (1 << 2)#define BT_SBC_SAMPLING_FREQ_44100 (1 << 1)#define BT_SBC_SAMPLING_FREQ_48000 1#define BT_A2DP_CHANNEL_MODE_MONO (1 << 3)#define BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL (1 << 2)#define BT_A2DP_CHANNEL_MODE_STEREO (1 << 1)#define BT_A2DP_CHANNEL_MODE_JOINT_STEREO 1#define BT_A2DP_BLOCK_LENGTH_4 (1 << 3)#define BT_A2DP_BLOCK_LENGTH_8 (1 << 2)#define BT_A2DP_BLOCK_LENGTH_12 (1 << 1)#define BT_A2DP_BLOCK_LENGTH_16 1#define BT_A2DP_SUBBANDS_4 (1 << 1)#define BT_A2DP_SUBBANDS_8 1#define BT_A2DP_ALLOCATION_SNR (1 << 1)#define BT_A2DP_ALLOCATION_LOUDNESS 1#define BT_MPEG_SAMPLING_FREQ_16000 (1 << 5)#define BT_MPEG_SAMPLING_FREQ_22050 (1 << 4)#define BT_MPEG_SAMPLING_FREQ_24000 (1 << 3)#define BT_MPEG_SAMPLING_FREQ_32000 (1 << 2)#define BT_MPEG_SAMPLING_FREQ_44100 (1 << 1)#define BT_MPEG_SAMPLING_FREQ_48000 1#define BT_MPEG_LAYER_1 (1 << 2)#define BT_MPEG_LAYER_2 (1 << 1)#define BT_MPEG_LAYER_3 1typedef struct { uint8_t channel_mode; uint8_t frequency; uint8_t allocation_method; uint8_t subbands; uint8_t block_length; uint8_t min_bitpool; uint8_t max_bitpool;} __attribute__ ((packed)) sbc_capabilities_t;typedef struct { uint8_t channel_mode; uint8_t crc; uint8_t layer; uint8_t frequency; uint8_t mpf; uint16_t bitrate;} __attribute__ ((packed)) mpeg_capabilities_t;struct bt_getcapabilities_rsp { bt_audio_rsp_msg_header_t rsp_h; uint8_t transport; /* Granted transport */ sbc_capabilities_t sbc_capabilities; /* A2DP only */ mpeg_capabilities_t mpeg_capabilities; /* A2DP only */ uint16_t sampling_rate; /* SCO only */} __attribute__ ((packed));/* BT_SETCONFIGURATION_REQ */struct bt_setconfiguration_req { bt_audio_msg_header_t h; char device[18]; /* Address of the remote Device */ uint8_t transport; /* Requested transport */ uint8_t access_mode; /* Requested access mode */ sbc_capabilities_t sbc_capabilities; /* A2DP only - only one of this field and next one must be filled */ mpeg_capabilities_t mpeg_capabilities; /* A2DP only */} __attribute__ ((packed));/* BT_SETCONFIGURATION_RSP */struct bt_setconfiguration_rsp { bt_audio_rsp_msg_header_t rsp_h; uint8_t transport; /* Granted transport */ uint8_t access_mode; /* Granted access mode */ uint16_t link_mtu; /* Max length that transport supports */} __attribute__ ((packed));/* BT_STREAMSTART_REQ */#define BT_STREAM_ACCESS_READ 0#define BT_STREAM_ACCESS_WRITE 1#define BT_STREAM_ACCESS_READWRITE 2struct bt_streamstart_req { bt_audio_msg_header_t h;} __attribute__ ((packed));/* BT_STREAMSTART_RSP */struct bt_streamstart_rsp { bt_audio_rsp_msg_header_t rsp_h;} __attribute__ ((packed));/* BT_STREAMFD_IND *//* This message is followed by one byte of data containing the stream data fd as ancilliary data */struct bt_streamfd_ind { bt_audio_msg_header_t h;} __attribute__ ((packed));/* BT_STREAMSTOP_REQ */struct bt_streamstop_req { bt_audio_msg_header_t h;} __attribute__ ((packed));/* BT_STREAMSTOP_RSP */struct bt_streamstop_rsp { bt_audio_rsp_msg_header_t rsp_h;} __attribute__ ((packed));/* BT_STREAMSUSPEND_IND */struct bt_streamsuspend_ind { bt_audio_msg_header_t h;} __attribute__ ((packed));/* BT_STREAMRESUME_IND */struct bt_streamresume_ind { bt_audio_msg_header_t h;} __attribute__ ((packed));/* BT_CONTROL_REQ */#define BT_CONTROL_KEY_POWER 0x40#define BT_CONTROL_KEY_VOL_UP 0x41#define BT_CONTROL_KEY_VOL_DOWN 0x42#define BT_CONTROL_KEY_MUTE 0x43#define BT_CONTROL_KEY_PLAY 0x44#define BT_CONTROL_KEY_STOP 0x45#define BT_CONTROL_KEY_PAUSE 0x46#define BT_CONTROL_KEY_RECORD 0x47#define BT_CONTROL_KEY_REWIND 0x48#define BT_CONTROL_KEY_FAST_FORWARD 0x49#define BT_CONTROL_KEY_EJECT 0x4A#define BT_CONTROL_KEY_FORWARD 0x4B#define BT_CONTROL_KEY_BACKWARD 0x4Cstruct bt_control_req { bt_audio_msg_header_t h; uint8_t mode; /* Control Mode */ uint8_t key; /* Control Key */} __attribute__ ((packed));/* BT_CONTROL_RSP */struct bt_control_rsp { bt_audio_rsp_msg_header_t rsp_h; uint8_t mode; /* Control Mode */ uint8_t key; /* Control Key */} __attribute__ ((packed));/* BT_CONTROL_IND */struct bt_control_ind { bt_audio_msg_header_t h; uint8_t mode; /* Control Mode */ uint8_t key; /* Control Key */} __attribute__ ((packed));/* Function declaration *//* Opens a connection to the audio service: return a socket descriptor */int bt_audio_service_open();/* Closes a connection to the audio service */int bt_audio_service_close(int sk);/* Receives stream data file descriptor : must be called after aBT_STREAMFD_IND message is returned */int bt_audio_service_get_data_fd(int sk);/* Human readable message type string */const char *bt_audio_strmsg(int type);#ifdef __cplusplus}#endif#endif /* BT_AUDIOCLIENT_H */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -