119e95205Sopenharmony_ci/* 219e95205Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 319e95205Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 419e95205Sopenharmony_ci * you may not use this file except in compliance with the License. 519e95205Sopenharmony_ci * You may obtain a copy of the License at 619e95205Sopenharmony_ci * 719e95205Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 819e95205Sopenharmony_ci * 919e95205Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1019e95205Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1119e95205Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1219e95205Sopenharmony_ci * See the License for the specific language governing permissions and 1319e95205Sopenharmony_ci * limitations under the License. 1419e95205Sopenharmony_ci */ 1519e95205Sopenharmony_ci/** 1619e95205Sopenharmony_ci * @addtogroup Bluetooth 1719e95205Sopenharmony_ci * @{ 1819e95205Sopenharmony_ci * 1919e95205Sopenharmony_ci * @brief This file is a part of BTStack. 2019e95205Sopenharmony_ci * @since 6.0 2119e95205Sopenharmony_ci */ 2219e95205Sopenharmony_ci 2319e95205Sopenharmony_ci/** 2419e95205Sopenharmony_ci * @file avctp.h 2519e95205Sopenharmony_ci * 2619e95205Sopenharmony_ci * @brief AVCT protocal Interface. 2719e95205Sopenharmony_ci * 2819e95205Sopenharmony_ci * @since 6.0 2919e95205Sopenharmony_ci */ 3019e95205Sopenharmony_ci#ifndef AVCTP_H 3119e95205Sopenharmony_ci#define AVCTP_H 3219e95205Sopenharmony_ci 3319e95205Sopenharmony_ci#include <stdint.h> 3419e95205Sopenharmony_ci 3519e95205Sopenharmony_ci#include "btstack.h" 3619e95205Sopenharmony_ci#include "gap_if.h" 3719e95205Sopenharmony_ci#include "packet.h" 3819e95205Sopenharmony_ci 3919e95205Sopenharmony_ci#ifdef __cplusplus 4019e95205Sopenharmony_ciextern "C" { 4119e95205Sopenharmony_ci#endif 4219e95205Sopenharmony_ci 4319e95205Sopenharmony_ci/***************************************************************************** 4419e95205Sopenharmony_ci * Constants 4519e95205Sopenharmony_ci ****************************************************************************/ 4619e95205Sopenharmony_ci/** PSM for AVCT. */ 4719e95205Sopenharmony_ci#define AVCT_PSM 0x0017 4819e95205Sopenharmony_ci#define AVCT_BR_PSM 0x001B 4919e95205Sopenharmony_ci 5019e95205Sopenharmony_ci/** Protocol Revision Numbers */ 5119e95205Sopenharmony_ci#define AVCT_REV_1_4 0x0104 5219e95205Sopenharmony_ci 5319e95205Sopenharmony_ci/** The role to create the connection. */ 5419e95205Sopenharmony_ci#define AVCT_INIT 0 // Initiator 5519e95205Sopenharmony_ci#define AVCT_ACPT 1 // Acceptor 5619e95205Sopenharmony_ci#define AVCT_CT 0 // Control Role 5719e95205Sopenharmony_ci#define AVCT_TG 1 // Target Role 5819e95205Sopenharmony_ci 5919e95205Sopenharmony_ci/** The Channel Type */ 6019e95205Sopenharmony_ci#define AVCT_DATA_CTRL 0x01 // The control channel 6119e95205Sopenharmony_ci#define AVCT_DATA_BR 0x02 // The browse channel 6219e95205Sopenharmony_ci 6319e95205Sopenharmony_ci/** The C/R value. */ 6419e95205Sopenharmony_ci#define AVCT_COMMAND 0 // command 6519e95205Sopenharmony_ci#define AVCT_RESPONSE 1 // response 6619e95205Sopenharmony_ci 6719e95205Sopenharmony_ci/** Control channel callback events. */ 6819e95205Sopenharmony_citypedef enum { 6919e95205Sopenharmony_ci AVCT_CONNECT_IND_EVT = 0, // Connection indication 7019e95205Sopenharmony_ci AVCT_CONNECT_CFM_EVT, // Connection confirm 7119e95205Sopenharmony_ci AVCT_DISCONNECT_IND_EVT, // Disconnect indication 7219e95205Sopenharmony_ci AVCT_DISCONNECT_CFM_EVT, // Disconnect confirm 7319e95205Sopenharmony_ci AVCT_CHANNEL_BUSY_EVT, // Channel is busy on Enhance Mode 7419e95205Sopenharmony_ci AVCT_CHANNEL_UNBUSY_EVT, // Channel is unbusy on Enhance Mode 7519e95205Sopenharmony_ci AVCT_BR_CONNECT_IND_EVT, // Browse Connection indication, Browser auto connect in background,so it's unused. 7619e95205Sopenharmony_ci AVCT_BR_CONNECT_CFM_EVT, // Browse Connection confirm 7719e95205Sopenharmony_ci AVCT_BR_DISCONNECT_IND_EVT, // Browse Disconnect indication 7819e95205Sopenharmony_ci AVCT_BR_DISCONNECT_CFM_EVT, // Browse Disconnect confirm 7919e95205Sopenharmony_ci AVCT_BR_CHANNEL_BUSY_EVT, // Browse Channel is busy on Enhance Mode 8019e95205Sopenharmony_ci AVCT_BR_CHANNEL_UNBUSY_EVT, // Browse Channel is unbusy on Enhance Mode 8119e95205Sopenharmony_ci} AvctCallbackEvt; 8219e95205Sopenharmony_ci 8319e95205Sopenharmony_ci/** API function return value result codes. */ 8419e95205Sopenharmony_citypedef enum { 8519e95205Sopenharmony_ci AVCT_SUCCESS = 0, // Function Success 8619e95205Sopenharmony_ci AVCT_ERR_NO_RESOURCES, // Not enough resources 8719e95205Sopenharmony_ci AVCT_ERR_CONN_BAD, // Bad channel can't be used 8819e95205Sopenharmony_ci AVCT_ERR_CONN_NOT_OPEN, // Connection not open 8919e95205Sopenharmony_ci AVCT_ERR_PID_USED, // PID already in used 9019e95205Sopenharmony_ci AVCT_ERR_PARAM, // Paramas error 9119e95205Sopenharmony_ci AVCT_FAILED, // Function Failed 9219e95205Sopenharmony_ci} AvctRet; 9319e95205Sopenharmony_ci/*********************************************************************************** 9419e95205Sopenharmony_ci * Type Definitions 9519e95205Sopenharmony_ci ***********************************************************************************/ 9619e95205Sopenharmony_ci/** @brief HCI Event callback function. 9719e95205Sopenharmony_ci * @details The aim of this primitive is to request an application callback when the selected indication Event 9819e95205Sopenharmony_ci * occurs. Each profile shall register for being called back separately. 9919e95205Sopenharmony_ci * @param[in] connId Connection channel Id 10019e95205Sopenharmony_ci * @param[in] event Control link callback events 10119e95205Sopenharmony_ci * @param[in] result Control link callback result 10219e95205Sopenharmony_ci * @param[in] peerAddr Peer device address 10319e95205Sopenharmony_ci * @reutrn @c void 10419e95205Sopenharmony_ci */ 10519e95205Sopenharmony_citypedef void (*AvctChannelEventCallback)( 10619e95205Sopenharmony_ci uint8_t connId, uint8_t event, uint16_t result, const BtAddr *peerAddr, void *context); 10719e95205Sopenharmony_ci 10819e95205Sopenharmony_ci/** @brief Protocal Message data callback function 10919e95205Sopenharmony_ci * @details This is the callback function used by AVCTP to report received AV control messages. 11019e95205Sopenharmony_ci * @param[in] connId Connection channel Id 11119e95205Sopenharmony_ci * @param[in] lable Message lable from app 11219e95205Sopenharmony_ci * @param[in] cr Command/Response 11319e95205Sopenharmony_ci * @param[in] ch_type Message come from (AVCT_DATA_CTRL or AVCT_DATA_BROWSE) 11419e95205Sopenharmony_ci * @param[in] pkt The point of message data 11519e95205Sopenharmony_ci * @reutrn @c void 11619e95205Sopenharmony_ci */ 11719e95205Sopenharmony_citypedef void (*AvctMsgCallback)(uint8_t connId, uint8_t label, uint8_t cr, uint8_t ch_type, Packet *pkt, void *context); 11819e95205Sopenharmony_ci 11919e95205Sopenharmony_ci/** 12019e95205Sopenharmony_ci * @brief Connect parameter used by avct_connect_req. 12119e95205Sopenharmony_ci */ 12219e95205Sopenharmony_citypedef struct { 12319e95205Sopenharmony_ci AvctChannelEventCallback chEvtCallback; // HCI Event callback 12419e95205Sopenharmony_ci AvctMsgCallback msgCallback; // Message Data callback 12519e95205Sopenharmony_ci uint16_t pid; // Profile ID 12619e95205Sopenharmony_ci uint8_t role; // Initiator/Acceptor 12719e95205Sopenharmony_ci void *context; // context from app 12819e95205Sopenharmony_ci} AvctConnectParam; 12919e95205Sopenharmony_ci 13019e95205Sopenharmony_ci/*********************************************************************************** 13119e95205Sopenharmony_ci * External Function Declarations 13219e95205Sopenharmony_ci ***********************************************************************************/ 13319e95205Sopenharmony_ci 13419e95205Sopenharmony_ci/** 13519e95205Sopenharmony_ci * @brief Function AVCT_Register 13619e95205Sopenharmony_ci * 13719e95205Sopenharmony_ci * @details This is the system level registration function for the AVCTP 13819e95205Sopenharmony_ci * protocol. This function initializes AVCTP protocal and prepares 13919e95205Sopenharmony_ci * the protocol stack for its use. This function must be called 14019e95205Sopenharmony_ci * once by the system before the other functions of the API can be 14119e95205Sopenharmony_ci * used. 14219e95205Sopenharmony_ci * 14319e95205Sopenharmony_ci * @param[in] mtu Max transcation unit for control. 14419e95205Sopenharmony_ci * @param[in] mtuBr Max transcation unit for browser. 14519e95205Sopenharmony_ci * 14619e95205Sopenharmony_ci * @return @c void 14719e95205Sopenharmony_ci * 14819e95205Sopenharmony_ci */ 14919e95205Sopenharmony_ciBTSTACK_API void AVCT_Register(uint16_t mtu, uint16_t mtuBr, uint16_t role); 15019e95205Sopenharmony_ci 15119e95205Sopenharmony_ci/** 15219e95205Sopenharmony_ci * 15319e95205Sopenharmony_ci * @brief Function AVCT_Deregister 15419e95205Sopenharmony_ci * 15519e95205Sopenharmony_ci * @details This function is called to deregister AVCTP protocol. 15619e95205Sopenharmony_ci * It is called when AVCTP is no longer being used by any 15719e95205Sopenharmony_ci * application in the system. All connections must be 15819e95205Sopenharmony_ci * disconned in advance. 15919e95205Sopenharmony_ci * 16019e95205Sopenharmony_ci * @param[in] void 16119e95205Sopenharmony_ci * 16219e95205Sopenharmony_ci * @return @c void 16319e95205Sopenharmony_ci * 16419e95205Sopenharmony_ci */ 16519e95205Sopenharmony_ciBTSTACK_API void AVCT_Deregister(void); 16619e95205Sopenharmony_ci 16719e95205Sopenharmony_ci/** 16819e95205Sopenharmony_ci * 16919e95205Sopenharmony_ci * @brief Function AVCT_ConnectReq 17019e95205Sopenharmony_ci * 17119e95205Sopenharmony_ci * @details This function is called to create an avctp control connection 17219e95205Sopenharmony_ci * session for peer device. 17319e95205Sopenharmony_ci * AVCT.ICS #Table 2/11 3/11 Connect Request. 17419e95205Sopenharmony_ci * AVCT.ICS #Table 3/9 Event register for connection request. 17519e95205Sopenharmony_ci * AVCT Profile #11.2.1 #11.1. 17619e95205Sopenharmony_ci * 17719e95205Sopenharmony_ci * @param[in] connParam The point to the param of the connection request. 17819e95205Sopenharmony_ci * Such as the Role、Profile ID、Callback func point. 17919e95205Sopenharmony_ci * @param[in] peerAddr The peer address to be connected. 18019e95205Sopenharmony_ci * @param[out] connId The point of the connection session handle. 18119e95205Sopenharmony_ci * 18219e95205Sopenharmony_ci * @return @c AVCT_SUCCESS Success @c otherwise Error 18319e95205Sopenharmony_ci * 18419e95205Sopenharmony_ci */ 18519e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_ConnectReq(uint8_t *connId, const AvctConnectParam *connParam, const BtAddr *peerAddr); 18619e95205Sopenharmony_ci 18719e95205Sopenharmony_ci/** 18819e95205Sopenharmony_ci * 18919e95205Sopenharmony_ci * @brief Function AVCT_DisconnectReq 19019e95205Sopenharmony_ci * 19119e95205Sopenharmony_ci * @details This function is called to disconnect the avctp control 19219e95205Sopenharmony_ci * connection session. AVCT.ICS #Table 2/12 3/12 Disconnect Request. AVCT.ICS 19319e95205Sopenharmony_ci * #Table 3/10 Event register for disconnection request. AVCT Profile #11.2.2 19419e95205Sopenharmony_ci * #11.2.3 #11.1. 19519e95205Sopenharmony_ci * 19619e95205Sopenharmony_ci * @param[in] connId The id of the connection session to be disconnected. 19719e95205Sopenharmony_ci * 19819e95205Sopenharmony_ci * @return @c AVCT_SUCCESS Success @c otherwise Error 19919e95205Sopenharmony_ci * 20019e95205Sopenharmony_ci */ 20119e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_DisconnectReq(uint8_t connId); 20219e95205Sopenharmony_ci 20319e95205Sopenharmony_ci/** 20419e95205Sopenharmony_ci * 20519e95205Sopenharmony_ci * @brief Function AVCT_SendMsgReq 20619e95205Sopenharmony_ci * 20719e95205Sopenharmony_ci * @details This function is called to send an message to the control 20819e95205Sopenharmony_ci * connection session. AVCT.ICS #Table 2/13 3/13 Send Message AVCT.ICS #Table 20919e95205Sopenharmony_ci * 3/10 Event register for message reception. AVCT Profile #11.2.3 #11.2.4 21019e95205Sopenharmony_ci * #11.1 21119e95205Sopenharmony_ci * 21219e95205Sopenharmony_ci * @param[in] connId The id of the connection session which the message is send to. 21319e95205Sopenharmony_ci * @param[in] label Message label from application. 21419e95205Sopenharmony_ci * @param[in] cr Command/Tesponse 21519e95205Sopenharmony_ci * @param[in] msg The point of Message data. 21619e95205Sopenharmony_ci * 21719e95205Sopenharmony_ci * @return @c AVCT_SUCCESS Success @c otherwise Error 21819e95205Sopenharmony_ci * 21919e95205Sopenharmony_ci */ 22019e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_SendMsgReq(uint8_t connId, uint8_t label, uint8_t cr, const Packet *msg); 22119e95205Sopenharmony_ci 22219e95205Sopenharmony_ci/** 22319e95205Sopenharmony_ci * 22419e95205Sopenharmony_ci * @brief Function AVCT_GetMtu 22519e95205Sopenharmony_ci * 22619e95205Sopenharmony_ci * @details This function is called to get the mtu of the control connection session. 22719e95205Sopenharmony_ci * 22819e95205Sopenharmony_ci * @param[in] connId The id of the connection session. 22919e95205Sopenharmony_ci * 23019e95205Sopenharmony_ci * @return @c MTU 23119e95205Sopenharmony_ci * 23219e95205Sopenharmony_ci */ 23319e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_GetPeerMtu(uint8_t connId); 23419e95205Sopenharmony_ci 23519e95205Sopenharmony_ci/** 23619e95205Sopenharmony_ci * 23719e95205Sopenharmony_ci * @brief Function AVCT_BrConnectReq 23819e95205Sopenharmony_ci * 23919e95205Sopenharmony_ci * @details This function is called to create an avctp browse connection session if the peer device has. 24019e95205Sopenharmony_ci * 24119e95205Sopenharmony_ci * @param[in] connId The control connection session id. 24219e95205Sopenharmony_ci * @param[in] role The connection session role. 24319e95205Sopenharmony_ci * 24419e95205Sopenharmony_ci * @return @c AVCT_SUCCESS Success @c otherwise Error 24519e95205Sopenharmony_ci * 24619e95205Sopenharmony_ci */ 24719e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_BrConnectReq(uint8_t connId, uint8_t role); 24819e95205Sopenharmony_ci 24919e95205Sopenharmony_ci/** 25019e95205Sopenharmony_ci * 25119e95205Sopenharmony_ci * @brief Function AVCT_BrDisconnectReq 25219e95205Sopenharmony_ci * 25319e95205Sopenharmony_ci * @details Remove an AVCTP browse connection session. 25419e95205Sopenharmony_ci * 25519e95205Sopenharmony_ci * @param[in] connId The connection session id. 25619e95205Sopenharmony_ci * 25719e95205Sopenharmony_ci * @return @c AVCT_SUCCESS Success @c otherwise Error 25819e95205Sopenharmony_ci * 25919e95205Sopenharmony_ci */ 26019e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_BrDisconnectReq(uint8_t connId); 26119e95205Sopenharmony_ci 26219e95205Sopenharmony_ci/** 26319e95205Sopenharmony_ci * 26419e95205Sopenharmony_ci * @brief Function AVCT_BrSendMsgReq 26519e95205Sopenharmony_ci * 26619e95205Sopenharmony_ci * @details This function is called to send an message to the browse session. 26719e95205Sopenharmony_ci * AVCT.ICS #Table 2/13 3/13 Send Message. 26819e95205Sopenharmony_ci * AVCT.ICS #Table 3/10 Event register for message reception. 26919e95205Sopenharmony_ci * AVCT Profile #11.2.3 #11.2.4 #11.1. 27019e95205Sopenharmony_ci * 27119e95205Sopenharmony_ci * @param[in] connId The id of the connection session which the message is send to. 27219e95205Sopenharmony_ci * @param[in] label Message label from application. 27319e95205Sopenharmony_ci * @param[in] cr Command/Tesponse 27419e95205Sopenharmony_ci * @param[in] msg Message data point. 27519e95205Sopenharmony_ci * 27619e95205Sopenharmony_ci * @return @c AVCT_SUCCESS Success @c otherwise Error 27719e95205Sopenharmony_ci * 27819e95205Sopenharmony_ci */ 27919e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_BrSendMsgReq(uint8_t connId, uint8_t label, uint8_t cr, const Packet *msg); 28019e95205Sopenharmony_ci 28119e95205Sopenharmony_ci/** 28219e95205Sopenharmony_ci * 28319e95205Sopenharmony_ci * @brief Function AVCT_BrGetMtu 28419e95205Sopenharmony_ci * 28519e95205Sopenharmony_ci * @details This function is called to get the mtu of the browse connection session. 28619e95205Sopenharmony_ci * 28719e95205Sopenharmony_ci * @param[in] connId The id of the connection session. 28819e95205Sopenharmony_ci * 28919e95205Sopenharmony_ci * @return @c MTU 29019e95205Sopenharmony_ci * 29119e95205Sopenharmony_ci */ 29219e95205Sopenharmony_ciBTSTACK_API uint16_t AVCT_BrGetPeerMtu(uint8_t connId); 29319e95205Sopenharmony_ci 29419e95205Sopenharmony_ci#ifdef __cplusplus 29519e95205Sopenharmony_ci} 29619e95205Sopenharmony_ci#endif 29719e95205Sopenharmony_ci 29819e95205Sopenharmony_ci#endif /* AVCTP_H */ 299