123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- /** @file
- bt_a2dp_demo.c
- @brief
- This file is demo of bt a2dp.
- */
- /*================================================================
- Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
- Quectel Wireless Solution Proprietary and Confidential.
- =================================================================*/
- /*=================================================================
- EDIT HISTORY FOR MODULE
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
- WHEN WHO WHAT, WHERE, WHY
- ------------ ------- -------------------------------------------------------------------------------
- =================================================================*/
- /*===========================================================================
- * include files
- ===========================================================================*/
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "ql_api_osi.h"
- #include "ql_api_bt.h"
- #include "ql_api_bt_a2dp.h"
- #include "ql_api_bt_avrcp.h"
- #include "ql_log.h"
- #include "bt_a2dp_avrcp_demo.h"
- #include "ql_audio.h"
- /*===========================================================================
- * Macro Definition
- ===========================================================================*/
-
- #define QL_A2DP_AVRCP_DEMO_LOG_LEVEL QL_LOG_LEVEL_INFO
- #define QL_A2DP_AVRCP_DEMO_LOG(msg, ...) QL_LOG(QL_A2DP_AVRCP_DEMO_LOG_LEVEL, "QL_A2DP_AVRCP_DEMO", msg, ##__VA_ARGS__)
- #define QL_A2DP_AVRCP_DEMO_LOG_PUSH(msg, ...) QL_LOG_PUSH("QL_A2DP_AVRCP_DEMO", msg, ##__VA_ARGS__)
- #define QL_A2DP_AVRCP_TASK_STACK_SIZE (4*1024)
- #define QL_A2DP_AVRCP_TASK_PRIO APP_PRIORITY_NORMAL
- #define QL_A2DP_AVRCP_TASK_EVENT_CNT 5
- /*===========================================================================
- * Struct
- ===========================================================================*/
- /*===========================================================================
- * Enum
- ===========================================================================*/
- /*===========================================================================
- * Variate
- ===========================================================================*/
- ql_task_t bt_a2dp_avrcp_task = NULL;
- ql_bt_addr_s bt_local_addr = {{0x7e, 0x5c, 0x91, 0xa4, 0x40, 0xb4}};
- /*===========================================================================
- * Functions
- ===========================================================================*/
- static void ql_bt_a2dp_avrcp_notify_cb(void *ind_msg_buf, void *ctx)
- {
- ql_event_t *ql_event = NULL;
-
-
- if (ind_msg_buf == NULL)
- {
- return ;
-
- }
- ql_event = (ql_event_t *)ind_msg_buf;
- if (ql_event->id != 0)
- {
- //ql_rtos_event_send(bt_a2dp_avrcp_task,ql_event);
- }
- }
- static void ql_a2dp_avrcp_demo_thread(void *argv)
- {
- QlOSStatus err = QL_OSI_SUCCESS;
- ql_errcode_bt_e ret;
- QUEC_AVRCP_PLAYBACK_STATUS_e avrcp_state;
- ql_bt_ble_local_name_s bt_name={0};
- int set_vol;
- uint8_t get_vol;
- ql_bt_visible_mode_e scanmode = QL_BT_PAGE_AND_INQUIRY_ENABLE;
- unsigned char str_ptr[32];
- ql_set_audio_path_speaker();
- ret = ql_bt_a2dp_avrcp_init(ql_bt_a2dp_avrcp_notify_cb);
- if (ret != QL_BT_SUCCESS)
- {
- QL_A2DP_AVRCP_DEMO_LOG("init error");
- goto QL_BT_A2DP_AVRCP_NOT_INIT_EXIT;
- }
- ret = ql_bt_start();
- if (ret != QL_BT_SUCCESS)
- {
- QL_A2DP_AVRCP_DEMO_LOG("start error");
- goto QL_BT_A2DP_AVRCP_INIT_EXIT;
- }
- ql_rtos_task_sleep_ms(2000);
- memcpy(bt_name.name, "QL_A2DP_AVRCP_DEMO", 18);
- ret = ql_bt_ble_set_localname(bt_name);
- if (ret != QL_BT_SUCCESS)
- {
- QL_A2DP_AVRCP_DEMO_LOG("set name error");
- goto QL_BT_A2DP_AVRCP_INIT_EXIT;
- }
-
- ret = ql_classic_bt_set_scanmode(scanmode);
- if (ret != QL_BT_SUCCESS)
- {
- QL_A2DP_AVRCP_DEMO_LOG("set scanmode error");
- goto QL_BT_A2DP_AVRCP_INIT_EXIT;
- }
- while (1)
- {
- QL_A2DP_AVRCP_DEMO_LOG("checking connect");
-
- if((ql_bt_avrcp_connection_state_get() == QUEC_BTAVRCP_CONNECTION_STATE_CONNECTED) && (ql_bt_a2dp_connection_state_get() == QUEC_BTA2DP_CONNECTION_STATE_CONNECTED))
- {
- QL_A2DP_AVRCP_DEMO_LOG("connect success");
- QL_A2DP_AVRCP_DEMO_LOG("get address");
- ret = ql_bt_a2dp_get_addr(&bt_local_addr);
- if (ret == QL_BT_SUCCESS)
- {
- memset(str_ptr,0x00,sizeof(str_ptr));
- sprintf((char *)str_ptr, "%02x:%02x:%02x:%02x:%02x:%02x", bt_local_addr.addr[0], bt_local_addr.addr[1], bt_local_addr.addr[2], bt_local_addr.addr[3], bt_local_addr.addr[4], bt_local_addr.addr[5]);
- QL_A2DP_AVRCP_DEMO_LOG("addr=%s",str_ptr);
- }
- else
- {
- QL_A2DP_AVRCP_DEMO_LOG("error=%x", ret);
- }
-
- while(1)
- {
- if((ql_bt_avrcp_connection_state_get() != QUEC_BTAVRCP_CONNECTION_STATE_CONNECTED) || (ql_bt_a2dp_connection_state_get() != QUEC_BTA2DP_CONNECTION_STATE_CONNECTED))
- {
- QL_A2DP_AVRCP_DEMO_LOG("disconnect");
- break;
- }
- QL_A2DP_AVRCP_DEMO_LOG("checking paly");
- ql_bt_avrcp_play_state_get(&avrcp_state);
- if(avrcp_state == QUEC_AVRCP_PLAYBACK_STATUS_PLAYING)
- {
- QL_A2DP_AVRCP_DEMO_LOG("playing");
- ql_rtos_task_sleep_ms(3000);
- QL_A2DP_AVRCP_DEMO_LOG("pause");
- ql_bt_avrcp_pause();
- ql_rtos_task_sleep_ms(3000);
- QL_A2DP_AVRCP_DEMO_LOG("start");
- ql_bt_avrcp_start();
- ql_rtos_task_sleep_ms(3000);
- QL_A2DP_AVRCP_DEMO_LOG("previ");
- ql_bt_avrcp_previ();
- ql_rtos_task_sleep_ms(3000);
- QL_A2DP_AVRCP_DEMO_LOG("next");
- ql_bt_avrcp_next();
- ql_rtos_task_sleep_ms(3000);
- ql_bt_avrcp_vol_get(&get_vol);
- QL_A2DP_AVRCP_DEMO_LOG("get vol %d", get_vol);
- ql_rtos_task_sleep_ms(3000);
- set_vol = 11;
- ql_bt_avrcp_vol_set(set_vol);
- QL_A2DP_AVRCP_DEMO_LOG("set vol %d", set_vol);
- ql_rtos_task_sleep_ms(3000);
- set_vol = 5;
- ql_bt_avrcp_vol_set(set_vol);
- QL_A2DP_AVRCP_DEMO_LOG("set vol %d", set_vol);
- ql_rtos_task_sleep_ms(3000);
- QL_A2DP_AVRCP_DEMO_LOG("end");
- ql_bt_a2dp_disconnect(bt_local_addr);
- ql_bt_a2dp_avrcp_release();
- ql_bt_a2dp_avrcp_init(ql_bt_a2dp_avrcp_notify_cb);
- break;
- }
- ql_rtos_task_sleep_s(1);
- }
- }
- ql_rtos_task_sleep_s(1);
- }
- QL_BT_A2DP_AVRCP_INIT_EXIT:
- ql_bt_a2dp_avrcp_release();
- ql_bt_stop();
- QL_BT_A2DP_AVRCP_NOT_INIT_EXIT:
- err = ql_rtos_task_delete(NULL);
- if(err != QL_OSI_SUCCESS)
- {
- QL_A2DP_AVRCP_DEMO_LOG("deleted failed");
- }
- }
- void ql_bt_a2dp_avrcp_app_init(void)
- {
- QlOSStatus err = QL_OSI_SUCCESS;
-
- err = ql_rtos_task_create(&bt_a2dp_avrcp_task, QL_A2DP_AVRCP_TASK_STACK_SIZE, QL_A2DP_AVRCP_TASK_PRIO, "bt a2dp avrcp", ql_a2dp_avrcp_demo_thread, NULL, QL_A2DP_AVRCP_TASK_EVENT_CNT);
- if (err != QL_OSI_SUCCESS)
- {
- QL_A2DP_AVRCP_DEMO_LOG("Create bt audio task Fail");
- }
- }
|