333 lines
7.9 KiB
C
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__ */
|