KT24-1110_65E-HA-651B/include_lib/btctrler/classic/tws_api.h
2024-11-10 18:44:17 +08:00

239 lines
5.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TWS_API_H
#define TWS_API_H
#include "typedef.h"
#include "classic/tws_event.h"
#include "classic/tws_local_media_sync.h"
#include "classic/tws_data_trans.h"
#define TWS_ROLE_MASTER 0
#define TWS_ROLE_SLAVE 1
/*
* tws 状态
*/
#define TWS_STA_SIBLING_DISCONNECTED 0x00000001 //tws未连接
#define TWS_STA_SIBLING_CONNECTED 0x00000002 //tws已连接
#define TWS_STA_PHONE_DISCONNECTED 0x00000004 //手机未连接
#define TWS_STA_PHONE_CONNECTED 0x00000008 //手机已连接
#define TWS_STA_ESCO_OPEN 0x00000010 //正在打电话
#define TWS_STA_SBC_OPEN 0x00000020 //正在播歌
#define TWS_STA_MONITOR_START 0x00000040 //tws从机开始监听手机链路
#define TWS_STA_LOCAL_TWS_OPEN 0x00000080 //开启local_tws
#define TWS_STA_ESCO_OPEN_LINK 0x00000100 //正在打电话create link
#define TWS_SYNC_CALL_TX 1
#define TWS_SYNC_CALL_RX 2
struct tws_sync_call {
int uuid;
void (*func)(int priv, int err);
const char *task_name;
};
extern const struct tws_sync_call tws_sync_call_begin[];
extern const struct tws_sync_call tws_sync_call_end[];
#define list_for_each_tws_sync_call(p) \
for (p = tws_sync_call_begin; p < tws_sync_call_end; p++)
#define TWS_SYNC_CALL_REGISTER(sync_call) \
static const struct tws_sync_call __tws_##sync_call sec(.tws_sync_call)
#define TWS_FUNC_ID(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
typedef void (*tws_func_t)(void *data, u16 len, bool rx);
struct tws_func_stub {
u32 func_id;
tws_func_t func; //call from irq
};
#define REGISTER_TWS_FUNC_STUB(stub) \
static const struct tws_func_stub stub sec(.tws_func_stub)
extern const struct tws_func_stub tws_func_stub_begin[];
extern const struct tws_func_stub tws_func_stub_end[];
static inline tws_func_t tws_function_get_by_id(u32 id)
{
const struct tws_func_stub *p;
for (p = tws_func_stub_begin; p < tws_func_stub_end; p++) {
if (p->func_id == id) {
return p->func;
}
}
return NULL;
}
static inline void tws_function_call_by_id(u32 id, void *data, u16 len, bool rx)
{
const struct tws_func_stub *p;
for (p = tws_func_stub_begin; p < tws_func_stub_end; p++) {
if (p->func_id == id) {
p->func(data, len, rx);
break;
}
}
}
/*
* 通过搜索码搜索tws设备
*/
int tws_api_search_sibling_by_code(u16 code, int timeout_ms);
/*
*打开可发现, 可连接可被手机和tws搜索到
*/
int tws_api_wait_pair_by_code(u16 code, const char *name, int timeout_ms);
int tws_api_wait_pair_by_ble(u16 code, const char *name, int timeout_ms);
int tws_api_wait_tws_pair(int code, const char *name);
int tws_api_wait_phone_pair(int code, const char *name);
int tws_wait_tws_pair(u16 code, const char *name);
int tws_wait_phone_pair(u16 code, const char *name);
/*
*取消可发现, 可连接可被tws搜索到
*/
int tws_api_cancle_wait_pair();
/*
* 搜索并连接已经配对过的tws
* timeout: 单位ms 0 表示不超时
* 返回值: 0: 函数调用成功
*/
int tws_api_create_connection(int timeout);
/*
* 取消搜索已配对的tws
*/
int tws_api_cancle_create_connection();
/*
* 打开可发现,可连接, 可以被手机和已配对过的tws连接
*/
int tws_api_wait_connection();
/*
* 断开tws直接的连接
* reason: 断开原因
*/
int tws_api_detach(enum tws_detach_reason reason);
/*
* 获取主从, 播歌和打电话状态下结果不可靠,请勿调用
*/
int tws_api_get_role();
/*
* 获取tws 连接的状态
* 返回值: 详见顶部TWS_STA_**
*/
int tws_api_get_tws_state();
/*
* 设置tws对方地址
*/
int tws_api_set_sibling_addr(u8 *addr);
/*
* 获取tws对方地址
*/
int tws_api_get_sibling_addr(u8 *addr);
/*
* 获取tws本地地址
*/
int tws_api_get_local_addr(u8 *addr);
/*
*发送解除配对命令给对方, 成功后会收到TWS_EVENT_REMOVE_PAIRS事件
*/
int tws_api_remove_pairs();
/*
* 设置本地声道
* 'L': 左声道
* 'R': 右声道
* 'U': 双声道合并
*/
void tws_api_set_local_channel(char channel);
/*
* 获取本地声道
*/
char tws_api_get_local_channel();
/*
* 通过uuid主从同步调用相同函数
*/
int tws_api_sync_call_by_uuid(int uuid, int priv, int delay_ms);
/*
* tws 数据发送函数, 要求 len <= 512
*/
int tws_api_send_data_to_sibling(void *data, u16 len, u32 func_id);
int tws_api_send_data_to_slave(void *data, int len, u32 func_id);
int tws_profile_init();
int tws_profile_exit();
int tws_api_connect_in_esco();
int tws_api_cancle_connect_in_esco();
/*
* 使能对耳自动主从切换
*/
void tws_api_auto_role_switch_enable();
/*
* 关闭对耳自动主从切换
*/
void tws_api_auto_role_switch_disable();
int tws_api_get_low_latency_state();
int tws_api_low_latency_enable(bool enable);
void tws_api_set_quick_connect_addr(u8 *addr);
u8 *tws_api_get_quick_connect_addr();
void tws_api_common_addr_en(u8 en);
void tws_api_pair_all_way(u8 en);
int tws_api_power_saving_mode_enable();
int tws_api_power_saving_mode_disable();
int tws_api_enter_pure_monitor_mode();
void tws_try_connect_disable(void);
extern void tws_conn_switch_role();
#endif