Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update stack adaption layer for zblue. #28

Merged
merged 8 commits into from
Jan 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -402,8 +402,6 @@ if(CONFIG_BLUETOOTH)

list(APPEND INCDIR ${BLUETOOTH_DIR}/service/vendor)

list(APPEND INCDIR ${BLUETOOTH_DIR}/service/stacks/include)

if(CONFIG_BLUETOOTH_SERVICE)
if(CONFIG_BLUETOOTH_STACK_BREDR_BLUELET
OR CONFIG_BLUETOOTH_STACK_LE_BLUELET)
Expand All @@ -417,6 +415,7 @@ if(CONFIG_BLUETOOTH)
endif()

if(CONFIG_BLUETOOTH_STACK_BREDR_ZBLUE OR CONFIG_BLUETOOTH_STACK_LE_ZBLUE)
list(APPEND INCDIR ${BLUETOOTH_DIR}/service/stacks/zephyr/include)
list(APPEND INCDIR ${NUTTX_APPS_DIR}/external/zblue/zblue/include/zephyr)
list(APPEND INCDIR ${NUTTX_APPS_DIR}/external/zblue/zblue/port/include/)
list(APPEND INCDIR
Expand Down
3 changes: 1 addition & 2 deletions Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ config BLUETOOTH_AVRCP_CONTROL
config BLUETOOTH_AVRCP_ABSOLUTE_VOLUME
bool "Audio/Video Remote Control Profile support absolute volume"
default n
depends on (BLUETOOTH_AVRCP_CONTROL || BLUETOOTH_AVRCP_TARGET) && BLUELET_AVRCP_TG_ABSVOL_SUPPORT
depends on (BLUETOOTH_AVRCP_CONTROL || BLUETOOTH_AVRCP_TARGET) && ((BLUETOOTH_STACK_BREDR_BLUELET && BLUELET_AVRCP_TG_ABSVOL_SUPPORT) || (BLUETOOTH_STACK_BREDR_ZBLUE))

config BLUETOOTH_A2DP
bool "Advanced Audio Distribution Profile"
Expand All @@ -199,7 +199,6 @@ if BLUETOOTH_A2DP
config BLUETOOTH_A2DP_AAC_CODEC
bool "Bluetooth A2dp AAC codec support"
default n
select AAC_ENABLED

config BLUETOOTH_A2DP_MAX_CONNECTIONS
int "Maximum A2dp connections"
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,6 @@ CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/frameworks/connectivity/bluetooth/service/pr
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/frameworks/connectivity/bluetooth/service/stacks
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/frameworks/connectivity/bluetooth/service/stacks/include
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/frameworks/connectivity/bluetooth/service/vendor
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/frameworks/connectivity/bluetooth/service/stacks/include

ifeq ($(CONFIG_BLUETOOTH_SERVICE), y)
ifneq ($(CONFIG_BLUETOOTH_STACK_BREDR_BLUELET)$(CONFIG_BLUETOOTH_STACK_LE_BLUELET),)
Expand All @@ -290,6 +289,7 @@ ifneq ($(CONFIG_BLUETOOTH_STACK_BREDR_BLUELET)$(CONFIG_BLUETOOTH_STACK_LE_BLUELE
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/vendor/xiaomi/vela/bluelet/inc
endif
ifneq ($(CONFIG_BLUETOOTH_STACK_BREDR_ZBLUE)$(CONFIG_BLUETOOTH_STACK_LE_ZBLUE),)
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/frameworks/connectivity/bluetooth/service/stacks/zephyr/include
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/external/zblue/zblue/include/zephyr
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/external/zblue/zblue/port/include/
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/external/zblue/zblue/port/include/kernel/include
Expand Down
4 changes: 2 additions & 2 deletions framework/include/bt_avrcp.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,10 @@ typedef enum {
PLAY_STATUS_ERROR,
} avrcp_play_status_t;

enum {
typedef enum {
AVRCP_CAPABILITY_ID_COMPANY_ID = 2,
AVRCP_CAPABILITY_ID_EVENTS_SUPPORTED,
};
} avrcp_capability_id_t;

typedef enum {
NOTIFICATION_EVT_PALY_STATUS_CHANGED = 0x01,
Expand Down
2 changes: 2 additions & 0 deletions framework/include/bt_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
extern "C" {
#endif

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#endif

#define CASE_RETURN_STR(const) \
case const: \
Expand Down
34 changes: 17 additions & 17 deletions service/profiles/a2dp/a2dp_state_machine.c
Original file line number Diff line number Diff line change
Expand Up @@ -416,9 +416,9 @@ static bool idle_process_event(state_machine_t* sm, uint32_t event, void* p_data
case CONNECT_REQ: {
bt_status_t status;
if (a2dp_sm->peer_sep == SEP_SNK)
status = bt_sal_a2dp_source_connect(&data->bd_addr);
status = bt_sal_a2dp_source_connect(PRIMARY_ADAPTER, &data->bd_addr);
else
status = bt_sal_a2dp_sink_connect(&data->bd_addr);
status = bt_sal_a2dp_sink_connect(PRIMARY_ADAPTER, &data->bd_addr);
if (status != BT_STATUS_SUCCESS) {
a2dp_report_connection_state(a2dp_sm, &a2dp_sm->addr,
PROFILE_STATE_DISCONNECTED);
Expand All @@ -436,7 +436,7 @@ static bool idle_process_event(state_machine_t* sm, uint32_t event, void* p_data
case PEER_PARTIAL_RECONN_EVT:
if (a2dp_sm->peer_sep == SEP_SNK) {
bt_status_t status;
status = bt_sal_a2dp_source_connect(&data->bd_addr);
status = bt_sal_a2dp_source_connect(PRIMARY_ADAPTER, &data->bd_addr);
if (status != BT_STATUS_SUCCESS) {
a2dp_report_connection_state(a2dp_sm, &a2dp_sm->addr,
PROFILE_STATE_DISCONNECTED);
Expand Down Expand Up @@ -487,9 +487,9 @@ static bool opening_process_event(state_machine_t* sm, uint32_t event, void* p_d
switch (event) {
case DISCONNECT_REQ: {
if (a2dp_sm->peer_sep == SEP_SNK)
status = bt_sal_a2dp_source_disconnect(&data->bd_addr);
status = bt_sal_a2dp_source_disconnect(PRIMARY_ADAPTER, &data->bd_addr);
else
status = bt_sal_a2dp_sink_disconnect(&data->bd_addr);
status = bt_sal_a2dp_sink_disconnect(PRIMARY_ADAPTER, &data->bd_addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Disconnect failed");
}
Expand Down Expand Up @@ -527,7 +527,7 @@ static void avrcp_start_timeout_callback(service_timer_t* timer, void* data)
a2dp_state_machine_t* a2dp_sm = (a2dp_state_machine_t*)data;
a2dp_sm->avrcp_timer = NULL;
if (a2dp_state_machine_get_connection_state(a2dp_sm) == PROFILE_STATE_CONNECTED) {
bt_sal_avrcp_control_connect(&a2dp_sm->addr); /* nothing happens if AVRCP already connected */
bt_sal_avrcp_control_connect(PRIMARY_ADAPTER, &a2dp_sm->addr); /* nothing happens if AVRCP already connected */
}
}
#endif
Expand Down Expand Up @@ -569,7 +569,7 @@ static void opened_enter(state_machine_t* sm)
#ifdef CONFIG_BLUETOOTH_AVRCP_CONTROL
if (a2dp_sm->peer_sep == SEP_SRC) {
/* local is sink, try AVRCP connection as CT */
bt_sal_avrcp_control_connect(&a2dp_sm->addr);
bt_sal_avrcp_control_connect(PRIMARY_ADAPTER, &a2dp_sm->addr);
}
#endif
ret = a2dp_audio_on_connection_changed(a2dp_sm->peer_sep, true);
Expand All @@ -584,7 +584,7 @@ static void opened_enter(state_machine_t* sm)
}
#ifdef CONFIG_BLUETOOTH_A2DP_SOURCE
else if (prev_state == &started_state) {
bt_sal_avrcp_target_play_status_notify(&a2dp_sm->addr, PLAY_STATUS_PAUSED);
bt_sal_avrcp_target_play_status_notify(PRIMARY_ADAPTER, &a2dp_sm->addr, PLAY_STATUS_PAUSED);
}
#endif
}
Expand All @@ -607,14 +607,14 @@ static bool opened_process_event(state_machine_t* sm, uint32_t event, void* p_da
bt_status_t status;

if (a2dp_sm->peer_sep == SEP_SNK)
status = bt_sal_a2dp_source_disconnect(&a2dp_sm->addr);
status = bt_sal_a2dp_source_disconnect(PRIMARY_ADAPTER, &a2dp_sm->addr);
else
status = bt_sal_a2dp_sink_disconnect(&a2dp_sm->addr);
status = bt_sal_a2dp_sink_disconnect(PRIMARY_ADAPTER, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("A2dp disconnect failed");
}
#if defined(CONFIG_BLUETOOTH_AVRCP_CONTROL) || defined(CONFIG_BLUETOOTH_AVRCP_TARTGET)
status = bt_sal_avrcp_control_disconnect(&a2dp_sm->addr);
status = bt_sal_avrcp_control_disconnect(PRIMARY_ADAPTER, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Avrc disconnect failed");
}
Expand All @@ -636,7 +636,7 @@ static bool opened_process_event(state_machine_t* sm, uint32_t event, void* p_da
break;
}
bt_pm_busy(PROFILE_A2DP, &a2dp_sm->addr);
status = bt_sal_a2dp_source_start_stream(&a2dp_sm->addr);
status = bt_sal_a2dp_source_start_stream(PRIMARY_ADAPTER, &a2dp_sm->addr);
bt_pm_idle(PROFILE_A2DP, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Stream start failed");
Expand All @@ -654,7 +654,7 @@ static bool opened_process_event(state_machine_t* sm, uint32_t event, void* p_da
a2dp_sm->delay_start_timer = NULL;
if (flag_isset(a2dp_sm, PENDING_START))
break;
status = bt_sal_a2dp_source_start_stream(&a2dp_sm->addr);
status = bt_sal_a2dp_source_start_stream(PRIMARY_ADAPTER, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Stream delay start failed");
break;
Expand Down Expand Up @@ -870,14 +870,14 @@ static bool started_process_event(state_machine_t* sm, uint32_t event, void* p_d
case DISCONNECT_REQ: {
bt_status_t status;
if (a2dp_sm->peer_sep == SEP_SNK)
status = bt_sal_a2dp_source_disconnect(&a2dp_sm->addr);
status = bt_sal_a2dp_source_disconnect(PRIMARY_ADAPTER, &a2dp_sm->addr);
else
status = bt_sal_a2dp_sink_disconnect(&a2dp_sm->addr);
status = bt_sal_a2dp_sink_disconnect(PRIMARY_ADAPTER, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Disconnect failed");
}
#if defined(CONFIG_BLUETOOTH_AVRCP_CONTROL) || defined(CONFIG_BLUETOOTH_AVRCP_TARTGET)
status = bt_sal_avrcp_control_disconnect(&a2dp_sm->addr);
status = bt_sal_avrcp_control_disconnect(PRIMARY_ADAPTER, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Avrc disconnect failed");
}
Expand Down Expand Up @@ -914,7 +914,7 @@ static bool started_process_event(state_machine_t* sm, uint32_t event, void* p_d
break;
}
flag_set(a2dp_sm, PENDING_STOP);
status = bt_sal_a2dp_source_suspend_stream(&a2dp_sm->addr);
status = bt_sal_a2dp_source_suspend_stream(PRIMARY_ADAPTER, &a2dp_sm->addr);
if (status != BT_STATUS_SUCCESS) {
BT_LOGE("Stream suspend failed");
a2dp_audio_on_stopped(a2dp_sm->peer_sep);
Expand Down
4 changes: 3 additions & 1 deletion service/profiles/a2dp/sink/a2dp_sink_service.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <kvdb.h>
#endif

#include "a2dp_audio.h"
#include "a2dp_device.h"
#include "a2dp_sink_service.h"
#include "adapter_internel.h"
#include "bt_addr.h"
Expand Down Expand Up @@ -136,7 +138,7 @@ static void a2dp_snk_service_handle_event(void* data)
break;
}
case PEER_STREAM_START_REQ:
bt_sal_a2dp_sink_start_stream(&event->event_data.bd_addr);
bt_sal_a2dp_sink_start_stream(PRIMARY_ADAPTER, &event->event_data.bd_addr);
break;
default: {
a2dp_state_machine_t* a2dp_sm;
Expand Down
3 changes: 2 additions & 1 deletion service/profiles/a2dp/source/a2dp_source_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <nuttx/circbuf.h>

#include "sal_a2dp_source_interface.h"
#include "sal_interface.h"

#include "a2dp_codec.h"
#include "a2dp_control.h"
Expand Down Expand Up @@ -220,7 +221,7 @@ static void a2dp_source_send_callback(uint8_t* buf, uint16_t nbytes, uint8_t nb_
return;
}

bt_sal_a2dp_source_send_data(a2dp_source_active_peer()->bd_addr,
bt_sal_a2dp_source_send_data(PRIMARY_ADAPTER, a2dp_source_active_peer()->bd_addr,
buf, nbytes, nb_frames, timestamp, a2dp_src_stream.sequence_number++);
}

Expand Down
2 changes: 2 additions & 0 deletions service/profiles/a2dp/source/a2dp_source_service.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <kvdb.h>
#endif

#include "a2dp_audio.h"
#include "a2dp_device.h"
#include "a2dp_source_service.h"
#include "adapter_internel.h"
#include "bt_a2dp_source.h"
Expand Down
27 changes: 15 additions & 12 deletions service/profiles/avrcp/control/avrcp_control_service.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <unistd.h>

#include "adapter_internel.h"
#include "avrcp_msg.h"
#include "avrcp_control_service.h"
#include "bt_addr.h"
#include "bt_list.h"
Expand Down Expand Up @@ -160,8 +161,8 @@ static void avrcp_controller_service_handle_event(void* data)

static void send_pass_through_cmd(avrcp_ct_device_t* device, avrcp_passthr_cmd_t cmd)
{
bt_sal_avrcp_control_send_pass_through_cmd(&device->addr, cmd, AVRCP_KEY_PRESSED);
bt_sal_avrcp_control_send_pass_through_cmd(&device->addr, cmd, AVRCP_KEY_RELEASED);
bt_sal_avrcp_control_send_pass_through_cmd(PRIMARY_ADAPTER, &device->addr, cmd, AVRCP_KEY_PRESSED);
bt_sal_avrcp_control_send_pass_through_cmd(PRIMARY_ADAPTER, &device->addr, cmd, AVRCP_KEY_RELEASED);
}

static void avrcp_ct_on_play(bt_media_player_t* player, void* context)
Expand Down Expand Up @@ -221,7 +222,8 @@ static void bt_avrcp_absolute_volume_changed_notification(void* context, int vol
uv_mutex_unlock(&device->lock);

avrcp_volume = bt_media_volume_media_to_avrcp(volume);
status = bt_sal_avrcp_control_volume_changed_notify(&device->addr, avrcp_volume);
status = bt_sal_avrcp_control_volume_changed_notify(PRIMARY_ADAPTER, &device->addr,
avrcp_volume);
if (status != BT_STATUS_SUCCESS) {
BT_LOGW("notified absolute volume failed, status: %d, volume: %d.", status, volume);
}
Expand All @@ -242,7 +244,8 @@ static void handle_avrcp_register_absolute_volume_notification(bt_address_t* add
media_volume = 0;
}

bt_sal_avrcp_control_volume_changed_notify(addr, bt_media_volume_media_to_avrcp(media_volume));
bt_sal_avrcp_control_volume_changed_notify(PRIMARY_ADAPTER, addr,
bt_media_volume_media_to_avrcp(media_volume));

if (g_avrc_controller.volume_listener == NULL) {
g_avrc_controller.volume_listener = bt_media_listen_music_volume_change(bt_avrcp_absolute_volume_changed_notification, (void*)device);
Expand Down Expand Up @@ -311,7 +314,7 @@ static void handle_avrcp_connection_state(avrcp_msg_t* msg)
}

bt_pm_conn_open(PROFILE_AVRCP_CT, &device->addr);
bt_sal_avrcp_control_get_capabilities(addr, AVRCP_CAPABILITY_ID_EVENTS_SUPPORTED);
bt_sal_avrcp_control_get_capabilities(PRIMARY_ADAPTER, addr, AVRCP_CAPABILITY_ID_EVENTS_SUPPORTED);
device->player = bt_media_player_create(device, &g_player_cb);
} break;
case PROFILE_STATE_DISCONNECTING:
Expand Down Expand Up @@ -355,17 +358,17 @@ static void handle_avrcp_get_capability_response(avrcp_msg_t* msg)
BT_LOGD("capability support event: %d", *cap);
switch (*cap) {
case NOTIFICATION_EVT_PALY_STATUS_CHANGED:
bt_sal_avrcp_control_register_notification(addr, *cap, 0);
bt_sal_avrcp_control_get_playback_state(addr);
bt_sal_avrcp_control_register_notification(PRIMARY_ADAPTER, addr, *cap, 0);
bt_sal_avrcp_control_get_playback_state(PRIMARY_ADAPTER, addr);
break;
case NOTIFICATION_EVT_PLAY_POS_CHANGED:
bt_sal_avrcp_control_register_notification(addr, *cap, 2);
bt_sal_avrcp_control_register_notification(PRIMARY_ADAPTER, addr, *cap, 2);
break;
case NOTIFICATION_EVT_VOLUME_CHANGED:
/* don't work on controller role */
break;
case NOTIFICATION_EVT_TRACK_CHANGED:
bt_sal_avrcp_control_register_notification(addr, *cap, 0);
bt_sal_avrcp_control_register_notification(PRIMARY_ADAPTER, addr, *cap, 0);
break;
default:
break;
Expand Down Expand Up @@ -403,7 +406,7 @@ static void handle_avrcp_register_notification_response(avrcp_msg_t* msg)
bt_media_status_t status = msg->data.notify_rsp.value;
BT_LOGD("playback status changed: %s, get status now...", bt_media_status_str(status));
bt_media_player_set_status(device->player, status);
bt_sal_avrcp_control_get_playback_state(addr);
bt_sal_avrcp_control_get_playback_state(PRIMARY_ADAPTER, addr);
break;
}
case NOTIFICATION_EVT_PLAY_POS_CHANGED: {
Expand All @@ -417,7 +420,7 @@ static void handle_avrcp_register_notification_response(avrcp_msg_t* msg)
}
case NOTIFICATION_EVT_TRACK_CHANGED: {
BT_LOGD("track changed, get track info now...");
bt_sal_avrcp_control_get_element_attributes(addr, 0, NULL);
bt_sal_avrcp_control_get_element_attributes(PRIMARY_ADAPTER, addr, 0, NULL);
break;
}
default:
Expand Down Expand Up @@ -655,7 +658,7 @@ static bool avrcp_control_unregister_callbacks(void** remote, void* cookie)
}
static bt_status_t avrcp_control_get_element_attributes(bt_address_t* remote)
{
return bt_sal_avrcp_control_get_element_attributes(remote, 0, NULL);
return bt_sal_avrcp_control_get_element_attributes(PRIMARY_ADAPTER, remote, 0, NULL);
}
static const avrcp_control_interface_t avrcp_controlInterface = {
.size = sizeof(avrcp_controlInterface),
Expand Down
Loading
Loading