zephyr/subsys/bluetooth/host/classic/a2dp_codec_sbc.c
Mark Wang bdca41d0bf Bluetooth: A2DP: Implement the a2dp and avdtp
implement a2dp.c and avdtp.c
add a2dp related Kconfig:
BT_AVDTP_RTP_VERSION, BT_A2DP_SOURCE and BT_A2DP_SINK
a2dp_codec_sbc.c/h are used to provide some APIs to get
A2DP SBC codec information. (like: channel num).

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
2024-05-28 12:56:42 +02:00

52 lines
1.2 KiB
C

/*
* Copyright 2024 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <string.h>
#include <errno.h>
#include <zephyr/sys/atomic.h>
#include <zephyr/sys/byteorder.h>
#include <zephyr/sys/util.h>
#include <zephyr/sys/printk.h>
#include <zephyr/bluetooth/classic/a2dp_codec_sbc.h>
#include <zephyr/bluetooth/classic/a2dp.h>
uint8_t bt_a2dp_sbc_get_channel_num(struct bt_a2dp_codec_sbc_params *sbc_codec)
{
__ASSERT_NO_MSG(sbc_codec != NULL);
if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_MONO) {
return 1U;
} else if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_DUAL) {
return 2U;
} else if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_STREO) {
return 2U;
} else if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_JOINT) {
return 2U;
} else {
return 0U;
}
}
uint32_t bt_a2dp_sbc_get_sampling_frequency(struct bt_a2dp_codec_sbc_params *sbc_codec)
{
__ASSERT_NO_MSG(sbc_codec != NULL);
if (sbc_codec->config[0] & A2DP_SBC_SAMP_FREQ_16000) {
return 16000U;
} else if (sbc_codec->config[0] & A2DP_SBC_SAMP_FREQ_32000) {
return 32000U;
} else if (sbc_codec->config[0] & A2DP_SBC_SAMP_FREQ_44100) {
return 44100U;
} else if (sbc_codec->config[0] & A2DP_SBC_SAMP_FREQ_48000) {
return 48000U;
} else {
return 0U;
}
}