pinebuds/services/bt_profiles_enhanced/inc/besaud.h
2022-08-15 17:20:27 +08:00

198 lines
No EOL
5.3 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 __BESAUD_H__
#define __BESAUD_H__
#include "bluetooth.h"
#include "bt_co_list.h"
#include "btm.h"
#include "btlib_type.h"
#define BESAUD_PACKET_COUNT (5)
typedef struct _BesaudCallbackParms BesaudCallbackParms;
typedef struct _BesaudChannel BesaudChannel;
typedef struct _BesaudConn BesaudConn;
typedef struct _BesaudConnCallbackParms BesaudConnCallbackParms;
typedef void (*BesaudConnCallback)(BesaudConn *Conn, BesaudConnCallbackParms *Parms);
/* Connection State */
struct _BesaudConn {
uint32 l2cap_handle;
uint8 state;
BesaudConnCallback callback;
};
struct _BesaudConnCallbackParms {
uint8 event;
int8 status;
uint16 dataLen;
union {
struct btm_conn_item_t *remDev;
uint8 *data;
} ptrs;
};
int8 BesaudDisconnect(struct btm_conn_item_t *RemDev);
BOOL BesaudIsConnected(BesaudConn *Conn);
int8 BesaudConnect(BesaudChannel *chnl, struct btm_conn_item_t *RemDev);
typedef uint16 BesaudEvent;
typedef struct
{
struct list_node node;
uint8* pBuf;
uint16 pDataLength;
} BesaudPacket;
struct _BesaudCallbackParms{
BesaudEvent event;
int8 status;
int8 errCode;
BesaudChannel *chnl;
union{
struct btm_conn_item_t *remDev;
BesaudPacket Packet;
}p;
};
/*--------------------------------------------------------------------------
* BESAUDChannelStates type
*
* This type enumerates the possible BESAUD channel connection
* states.
*/
typedef uint8 BesaudChannelStates;
/* End of HfChannelStates */
typedef void (*BesaudCallback)(BesaudChannel *Chan, BesaudCallbackParms *Info);
struct _BesaudChannel{
struct list_node node;
struct btm_conn_item_t *remDev;
BesaudCallback callback; /* Application callback*/
BesaudConn besaudc_conn;
BesaudChannelStates state; /* Current connection state */
uint16 flags; /* Current connection flags */
struct list_node freeTxPacketList;
struct list_node pendingTxPacketList;
uint8 initiator;
uint8 tx_state;
BesaudPacket *curr_tx_packet;
};
#ifndef BESAUDC_MAX_MTU
#define BESAUDC_MAX_MTU L2CAP_MTU
#endif
#ifndef BESAUDI_MAX_MTU
#define BESAUDI_MAX_MTU L2CAP_MTU
#endif
////besaud channel state
#define BESAUD_STATE_DISCONNECTED 0
#define BESAUD_STATE_CONN_PENDING 1
#define BESAUD_STATE_CONN_INCOMING 2
#define BESAUD_STATE_DISC_PENDING 3
#define BESAUD_STATE_DISC_INCOMING 4
#define BESAUD_STATE_CONNECTED 5
////channel tx state
#define BESAUD_TX_STATE_IDLE 0
#define BESAUD_TX_STATE_IN_TX 1
#define BESAUD_REPORT_TYPE_INPUT 1
#define BESAUD_REPORT_TYPE_OUTPUT 2
#define BESAUD_REPORT_TYPE_FEATURE 3
#define BESAUD_TRANS_TYPE_HANDSHAKE 0
#define BESAUD_TRANS_TYPE_CONTROL 1
#define BESAUD_TRANS_TYPE_GET_REPORT 4
#define BESAUD_TRANS_TYPE_SET_REPORT 5
#define BESAUD_TRANS_TYPE_GET_PROTOCAL 6
#define BESAUD_TRANS_TYPE_SET_PROTOCAL 7
#define BESAUD_TRANS_TYPE_GET_IDLE 8
#define BESAUD_TRANS_TYPE_SET_IDLE 9
#define BESAUD_TRANS_TYPE_DATA 10
#define BESAUD_TRANS_TYPE_DATAC 11
#define BESAUD_HANDSHAKE_SUCCESS 0
#define BESAUD_HANDSHAKE_NOT_READY 1
#define BESAUD_HANDSHAKE_INVALID_REPORTID 2
#define BESAUD_HANDSHAKE_UNSUPPORT_REQUEST 3
#define BESAUD_HANDSHAKE_INVALID_PARAM 4
#define BESAUD_HANDSHAKE_ERROR_UNKNOWN 0xe
#define BESAUD_HANDSHAKE_ERROR_FATAL 0xF
#define BESAUD_CONTROL_NOP 0
#define BESAUD_CONTROL_HARD_RESET 1
#define BESAUD_CONTROL_SOFT_RESET 2
#define BESAUD_CONTROL_SUSPEND 3
#define BESAUD_CONTROL_EXIT_SUSPEND 4
#define BESAUD_CONTROL_VIRTUAL_CABLE_UNPLUG 5
#define BESAUD_CHANNEL_TYPE_INTERRUPT 0
#define BESAUD_CHANNEL_TYPE_CONTROL 1
#define BESAUD_DATA_TXSTATE_IDLE 0
#define BESAUD_DATA_TXSTATE_SEND 1
#define BESAUD_EVENT_CONTROL_CONNECTED 0x21
#define BESAUD_EVENT_CONTROL_DISCONNECTED 0x22
#define BESAUD_EVENT_CONTROL_DATA_IND 0x23
#define BESAUD_EVENT_CONTROL_DATA_SENT 0x24
#define BESAUD_EVENT_CONTROL_SET_IDLE 0x30
#if defined(__cplusplus)
extern "C" {
#endif
int8 BESAUD_Init(void);
int8 Besaud_Register(BesaudChannel *chnl,
BesaudCallback callback
);
int8 Besaud_Connect(BesaudChannel *chnl, struct btm_conn_item_t *RemDev);
int8 Besaud_Disconnect(BesaudChannel *chnl);
int8 Besaud_Send_packet(BesaudChannel *chnl, char *buffer, uint16 nBytes);
int8 Besaud_Send_cmd_packet(BesaudChannel *chnl, char *buffer, uint16 nBytes);
#if defined(__cplusplus)
}
#endif
#endif /* __BESAUD_H__ */