pinebuds/services/bt_profiles_enhanced/inc/a2dp_i.h

180 lines
5.7 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef __A2DP_I_H__
#define __A2DP_I_H__
#include "btlib_type.h"
#include "btm_i.h"
#include "avdtp.h"
#include "avdtp_i.h"
#include "sdp.h"
#define A2DP_RECVDATA_BUF_SIZE 48
/* notify upper layer */
enum a2dp_event_t
{
/* user command event*/
AV_CONNECT_REQ = 1,
AV_DISCONNECT_REQ, //210
AV_TRANS_REQ,
AV_SUSPEND_REQ,
AV_START_REQ,
AV_ABORT_REQ,
AV_SET_CONFIG_REQ,
AV_RECONF_REQ,
/* internal event */
// AV_EVNT_BEGIN,
AV_CONN_OPENED, //217
AV_CONN_CLOSED,
AV_MEDIA_GET_CAP_IND,
AV_MEDIA_SET_CFG_IND,
AV_MEDIA_GET_CFG_CFM,
AV_MEDIA_STREAM_CLOSE, //219
AV_MEDIA_STREAM_ABORT, //219
AV_MEDIA_RECONF_IND,
AV_MEDIA_DISCOVERY_COMPLETE,
AV_MEDIA_OPENED, //219
AV_MEDIA_STREAM_START, //219
AV_MEDIA_STREAM_DATA_IND, //219
AV_MEDIA_STREAM_SUSPEND, //219
AV_MEDIA_FREQ_CHANGED, //219
AV_CONN_REQ_FAIL,
AV_MEDIA_SECURITY_CONTROL_CMD,
AV_MEDIA_SECURITY_CONTROL_CFM
};
enum av_conn_state_enum
{
AV_STOP,
AV_STANDBY = 1, //ready
AV_QUERING, //sdp quering
AV_CONNECTING, //initializing
AV_OPEN, //AV_SIG_ACTIVE,
AV_CONNECTED,
AV_STREAMING
};
struct a2dp_control_t
{
struct bdaddr_t remote;
bool cp_enable;
uint8 disc_reason;
uint32 l2capSignalHandle;
uint32 l2capMediaHandle;
uint32 freq;
uint16 avdtp_local_version;
uint16 avdtp_remote_version;
uint16 a2dp_remote_features;
uint8 channel_mode;
enum av_conn_state_enum state; /*check if it is connecting now, if it is connecting,the hf_connect_req will not work */
struct a2dp_sep *sep; //bind to lsep
struct avdtp_control_t *avdtp;
//struct avdtp_stream *stream;
void *avdtp_codec_req;
void *avdtp_cp_req;
struct avdtp_media_codec_capability *avdtp_codec_cap;
struct avdtp_media_content_protect_capability *avdtp_content_protect_cap;
uint8 type;
struct avdtp_local_sep *lsep;
void (*indicate)(struct a2dp_control_t *stream, uint8 event, void *pData);
void (*data_cb)(struct a2dp_control_t *stream,struct pp_buff *ppb);
uint8 sep_prio;
struct a2dp_control_t* next;
avdtp_media_header_t media_header;
struct sdp_request sdp_request;
uint8 device_id;
};
struct a2dp_ctx_input {
struct ctx_content ctx;
struct bdaddr_t *remote;
struct a2dp_control_t *a2dp_ctl;
struct avdtp_control_t *avdtp_ctl;
struct avdtp_local_sep *local_sep;
uint32 l2capSignalHandle;
uint32 l2capMediaHandle;
void (*indicate_callback)(struct a2dp_control_t *stream, uint8 event, void *pData);
void (*data_callback)(struct a2dp_control_t *stream, struct pp_buff *ppb);
};
struct a2dp_ctx_output {
};
extern struct a2dp_control_t *a2dp_ctl_list;
//int8 av_register_datacallback(struct a2dp_control_t *stream,void (*data_callback)(struct a2dp_control_t* stream, struct pp_buff *ppb));
#if defined(__cplusplus)
extern "C" {
#endif
void a2dp_stack_init(void);
/*---- a2dp_app.c ----*/
//void app_callback(struct a2dp_control_t* stream, uint8 event, void *pData);
void data_callback_av(struct a2dp_control_t *stream, struct pp_buff *ppb);
/*----a2dp.c----*/
int8 a2dp_register(struct a2dp_control_t *stream,
void (*indicate_callback)(struct a2dp_control_t *stream, uint8 event, void *pData),
void (*data_callback)(struct a2dp_control_t *stream, struct pp_buff *ppb));
int a2dp_unregister(struct a2dp_control_t *ctl);
enum av_conn_state_enum av_getState(struct a2dp_control_t*stream) ;
void av_setState( struct a2dp_control_t *stream, enum av_conn_state_enum state);
int8 av_turnOn(struct a2dp_control_t *stream);
int8 av_turnOff(struct a2dp_control_t * stream);
int8 av_connectReq(struct a2dp_control_t *stream, struct bdaddr_t *peer);
int8 av_disconnectReq(struct a2dp_control_t *stream);
//int8 av_sendData(uint8 *data, uint32 datalen);
void av_reset_a2dp_state(struct a2dp_control_t * stream);
const char *a2dp_state2str(enum av_conn_state_enum state);
int8 av_suspendReq(struct a2dp_control_t *stream);
int8 av_startReq( struct a2dp_control_t *stream);
int8 av_abortReq( struct a2dp_control_t *stream);
int8 av_setConfReq( struct a2dp_control_t *stream); ///
int8 av_reconfReq( struct a2dp_control_t *stream ); ///
void av_discoverCap(struct a2dp_control_t *stream);
int8 av_setSinkDelay(struct a2dp_control_t *stream, uint16 delay_ms);
int8 av_security_control_req(struct a2dp_control_t *stream, uint8_t *data, uint16_t len);
int8 av_security_control_resp(struct a2dp_control_t *stream, uint8_t *data, uint16_t len, uint8 error);
uint32 av_getFreq( struct a2dp_control_t *stream);
void av_setFreq( struct a2dp_control_t *stream, uint32 frequency);
uint8 av_getChannelMode(struct a2dp_control_t *stream);
struct avdtp_control_t *a2dp_get_avdtp_control(struct a2dp_control_t *stream);
uint32 a2dp_save_ctx(struct a2dp_control_t *a2dp_ctl, uint8_t *buf, uint32_t buf_len);
uint32 a2dp_restore_ctx(struct a2dp_ctx_input *input, struct a2dp_ctx_output *output);
#if defined(__cplusplus)
}
#endif
#endif /* __A2DP_I_H__ */