pinebuds/services/bt_profiles_enhanced/inc/avdtp.h

333 lines
7.9 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 __AVDTP_H__
#define __AVDTP_H__
#include "avdtp_i.h"
#include "l2cap_i.h"
#include "btm.h"
#define MAX_SEID 0x3E
#define AVDTP_DISCOVER 0x01
#define AVDTP_GET_CAPABILITIES 0x02
#define AVDTP_SET_CONFIGURATION 0x03
#define AVDTP_GET_CONFIGURATION 0x04
#define AVDTP_RECONFIGURE 0x05
#define AVDTP_OPEN 0x06
#define AVDTP_START 0x07
#define AVDTP_CLOSE 0x08
#define AVDTP_SUSPEND 0x09
#define AVDTP_ABORT 0x0A
#define AVDTP_SECURITY_CONTROL 0x0B
#define AVDTP_GET_ALL_CAPABILITIES 0x0C
#define AVDTP_DELAYREPORT 0x0D
#define AVDTP_PKT_TYPE_SINGLE 0x00
#define AVDTP_PKT_TYPE_START 0x01
#define AVDTP_PKT_TYPE_CONTINUE 0x02
#define AVDTP_PKT_TYPE_END 0x03
#define AVDTP_MSG_TYPE_COMMAND 0x00
#define AVDTP_MSG_TYPE_GENERAL_REJECT 0x01
#define AVDTP_MSG_TYPE_ACCEPT 0x02
#define AVDTP_MSG_TYPE_REJECT 0x03
/* AVDTP error definitions */
#define AVDTP_BAD_HEADER_FORMAT 0x01
#define AVDTP_BAD_LENGTH 0x11
#define AVDTP_BAD_ACP_SEID 0x12
#define AVDTP_SEP_IN_USE 0x13
#define AVDTP_SEP_NOT_IN_USE 0x14
#define AVDTP_BAD_SERV_CATEGORY 0x17
#define AVDTP_BAD_PAYLOAD_FORMAT 0x18
#define AVDTP_NOT_SUPPORTED_COMMAND 0x19
#define AVDTP_INVALID_CAPABILITIES 0x1A
#define AVDTP_BAD_RECOVERY_TYPE 0x22
#define AVDTP_BAD_MEDIA_TRANSPORT_FORMAT 0x23
#define AVDTP_BAD_RECOVERY_FORMAT 0x25
#define AVDTP_BAD_REPORT_FORMAT 0x65
#define AVDTP_BAD_ROHC_FORMAT 0x26
#define AVDTP_BAD_CP_FORMAT 0x27
#define AVDTP_BAD_MULTIPLEXING_FORMAT 0x28
#define AVDTP_UNSUPPORTED_CONFIGURATION 0x29
#define AVDTP_BAD_STATE 0x31
#define AVDTP_CONN_TIMEOUT //(HZ * 30)
#define AVDTP_DISC_TIMEOUT //(HZ * 20)
#define AVDTP_AUTH_TIMEOUT //(HZ * 25)
#define AVDTP_DEFAULT_MTU 127
#define AVDTP_DEFAULT_CREDITS 7
#define AVDTP_MAX_L2CAP_MTU 1013
#define AVDTP_MAX_CREDITS 40
#define AVDTP_PPB_HEAD_RESERVE 8
#define AVDTP_PPB_TAIL_RESERVE 2
#define AVDTP_PPB_RESERVE (AVDTP_PPB_HEAD_RESERVE + AVDTP_PPB_TAIL_RESERVE)
typedef struct
{
U8 version; /* RTP Version */
U8 padding; /* If the padding bit is set, the packet contains
* one or more additional padding octets at the end,
* which are not parts of the payload. The last
* octet of the padding contains a count of how many
* padding octets should be ignored.
*/
U8 marker; /* Profile dependent. Used to mark significant
* events such as frame boundaries in the packet
* stream.
*/
U8 payloadType; /* Profile dependent. Identifies the RTP payload
* type.
*/
U16 sequenceNumber; /* Incremented by one for each packet sent */
U32 timestamp; /* Time stamp of the sample */
U32 ssrc; /* Synchronization source */
U8 csrcCount; /* The number of CSRC (Contributing Source)
* identifiers that follow the fixed header.
*/
U32 csrcList[15]; /* List of CSRC identifiers */
} avdtp_media_header_t;
struct avdtp_header
{
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
// uint32 unused:16;
} __attribute__((packed));
struct seid_req
{
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 rfa1 : 2;
uint32 acp_seid : 6;
uint8 param[0];
// uint32 unused:8;
} __attribute__((packed));
struct discover_resp
{
// struct avdtp_header header;
// struct seid_info *seps;
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 rfa1 : 1;
uint32 inuse : 1;
uint32 seid : 6;
uint32 rfa2 : 3;
uint32 type : 1;
uint32 media_type : 4;
} __attribute__((packed));
struct discover_rej
{
// struct avdtp_header header;
// struct seid_info *seps;
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint8 error_code;
} __attribute__((packed));
struct security_control_req
{
//avdtp hrader
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 rfa2 : 2;
uint32 acp_seid : 6;
//Content Protection Method Dependent Data
uint8 *data;
} __attribute__((packed));
struct security_control_resp
{
struct avdtp_header header;
uint8 *data;
} __attribute__((packed));
struct getcap_resp
{
struct avdtp_header header;
uint8 *caps;
} __attribute__((packed));
struct getcap_req
{
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 rfa2 : 2;
uint32 ACP_seid : 6;
} __attribute__((packed));
struct start_req
{
struct avdtp_header header;
uint8 first_seid;
uint8 *other_seids;
} __attribute__((packed));
struct suspend_req
{
struct avdtp_header header;
uint8 first_seid;
uint8 *other_seids;
} __attribute__((packed));
struct setconf_req
{
// struct avdtp_header header;
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 rfa2 : 2;
uint32 acp_seid : 6;
uint32 rfa1 : 2;
uint32 int_seid : 6;
uint8 *caps;
} __attribute__((packed));
struct reconf_req
{
// struct avdtp_header header;
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 rfa2 : 2;
uint32 acp_seid : 6;
uint8 *caps;
} __attribute__((packed));
struct general_rej
{
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
//uint32 rfa0:8;
uint32 signal_id : 6; //modified by owen.liu, for support version 1.3
uint32 rfa0 : 2;
} __attribute__((packed));
struct seid_rej
{
// struct avdtp_header header;
uint32 message_type : 2;
uint32 packet_type : 2;
uint32 transaction : 4;
uint32 signal_id : 6;
uint32 rfa0 : 2;
uint32 error : 8;
uint32 unused : 8;
} __attribute__((packed));
struct conf_rej
{
struct avdtp_header header;
uint8 category;
uint8 error;
} __attribute__((packed));
struct stream_rej
{
struct avdtp_header header;
uint8 acp_seid;
uint8 error;
} __attribute__((packed));
struct avdtp_session
{
uint32 l2cap_handle;
uint8 state;
} __attribute__((packed));
enum avdtp_session_state_enum
{
AVDTP_SESSION_CLOSE, /* l2cap connection closed, wait for openning, and then can send out sabm request */
AVDTP_SESSION_CONNECTED, /* l2cap channel created */
AVDTP_SESSION_OPEN /* avdtp session open, ready for start stream */
};
//int8 avdtp_open(struct avdtp_session *session, struct avdtp_stream *stream);
/* flow control states */
#define AVDTP_CFC_DISABLED 0
#define AVDTP_CFC_ENABLED AVDTP_DEFAULT_CREDITS
#define AVDTP_CFG_SESSIONS_MAX 5 /* means how many l2cap channel */
#if defined(__cplusplus)
extern "C" {
#endif
int8 avdtp_send(uint32 avdtp_handle, uint8 *data, uint32 datalen);
int avdtp_l2cap_notify_callback(enum l2cap_event_enum event, uint32 l2cap_handle, void *pdata, uint8 reason);
void avdtp_l2cap_datarecv_callback(uint32 l2cap_handle, struct pp_buff *ppb);
struct avdtp_control_t *avdtp_ctl_search_l2caphandle(uint32 l2cap_handle);
void avdtp_free_remote_sep_list(void);
struct avdtp_local_sep* avdtp_find_same_device_other_sep(struct avdtp_local_sep *sep);
#if defined(__cplusplus)
}
#endif
#endif /* __AVDTP_H__ */