/*
* Copyright (C) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file l2cap_le.h
*
* @brief Implement LE part of bluetooth l2cap protocol
*
*/
#ifndef L2CAP_LE_H
#define L2CAP_LE_H
#include "l2cap_def.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/**
* @brief Initialize l2cap for LE
*
* @param traceLevel debug log level.
*/
void L2CAP_LeInitialize(int traceLevel);
/**
* @brief Finalize l2cap for LE
*
*/
void L2CAP_LeFinalize();
/**
* @brief Register l2cap le_psm for LE Credit Based Connection
*
* @param lpsm protocol psm
* @param svc callback for protocol psm
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeRegisterService(uint16_t lpsm, const L2capLeService *svc, void *context);
/**
* @brief Deregister l2cap le_psm for LE Credit Based Connection
*
* @param lpsm protocol psm
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeDeregisterService(uint16_t lpsm);
/**
* @brief Send LE Credit Based Connection Request packet
*
* @param addr remote bluetooth address
* @param cfg config parameter
* @param lcid OUT parameter, local channel id
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeCreditBasedConnectionReq(
const BtAddr *addr, uint16_t lpsm, uint16_t rpsm, const L2capLeConfigInfo *cfg, uint16_t *lcid);
/**
* @briefSend LE Credit Based Connection Response packet
*
* @param lcid local channel id
* @param id identifier of l2cap command
* @param cfg config parameter
* @param result result of connection
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeCreditBasedConnectionRsp(uint16_t lcid, uint8_t id, const L2capLeConfigInfo *cfg, uint16_t result);
/**
* @brief Send Disconnection Request packet
*
* @param lcid local channel id
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeDisconnectionReq(uint16_t lcid);
/**
* @brief Send Disconnection Response packet
*
* @param lcid local channel id
* @param id identifier of l2cap command
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeDisconnectionRsp(uint16_t lcid, uint8_t id);
/**
* @brief Send Le data packet for LE Credit Based Connection
*
* @param lcid local channel id
* @param pkt packet of data
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeSendData(uint16_t lcid, Packet *pkt);
/**
* @brief Register LE Fix Channel data callback
*
* @param cid fix channel id
* @param chan callback of fix channel
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeRegisterFixChannel(uint16_t cid, const L2capLeFixChannel *chan);
/**
* @brief Deregister LE Fix Channel data callback
*
* @param cid fix channel id
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeDeregisterFixChannel(uint16_t cid);
/**
* @brief Create Le ACL connection
*
* @param addr remote bluetooth address
* @param param connection parameter
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeConnect(const BtAddr *addr, const L2capLeConnectionParameter *param);
/**
* @brief Cancel Le ACL connection
*
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeConnectCancel(const BtAddr *addr);
/**
* @brief Destroy Le ACL connection
*
* @param aclHandle ACL handle
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeDisconnect(uint16_t aclHandle);
/**
* @brief Send LE Fix Channel data
*
* @param aclHandle ACL handle
* @param cid fix channel id
* @param pkt packet of data
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeSendFixChannelData(uint16_t aclHandle, uint16_t cid, const Packet *pkt);
/**
* @brief Register LE connection parameter update
*
* @param cb callback for connection parameter update
* @param context context of caller
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeRegisterConnectionParameterUpdate(const L2capLeConnectionParameterUpdate *cb, void *context);
/**
* @brief Deregister LE connection parameter update
*
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeDeregisterConnectionParameterUpdate();
/**
* @brief Send Connection Parameter Update Request packet,
* This command shall only be sent from the LE peripheral device to the LE center.
*
* @param aclHandle ACL handle
* @param param connection parameter
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeConnectionParameterUpdateReq(uint16_t aclHandle, const L2capLeConnectionParameter *param);
/**
* @brief Send Connection Parameter Update Response packet
*
* @param aclHandle ACL handle
* @param id cidentifier of l2cap command
* @param result result of the request
* @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails.
*/
int L2CAP_LeConnectionParameterUpdateRsp(uint16_t aclHandle, uint8_t id, uint16_t result);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // L2CAP_LE_H