mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-03 23:51:39 +01:00 
			
		
		
		
	
		
			
	
	
		
			363 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			363 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/******************************************************************************
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Copyright (C) 2009-2012 Broadcom Corporation
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  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.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 ******************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BT_VENDOR_LIB_H
							 | 
						||
| 
								 | 
							
								#define BT_VENDOR_LIB_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdint.h>
							 | 
						||
| 
								 | 
							
								//#include <sys/cdefs.h>
							 | 
						||
| 
								 | 
							
								//#include <sys/types.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Struct types */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Typedefs and defines */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Vendor specific operations OPCODE */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Power on or off the BT Controller.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      A pointer to int type with content of bt_vendor_power_state_t.
							 | 
						||
| 
								 | 
							
								     *      Typecasting conversion: (int *) param.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_POWER_CTRL,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Perform any vendor specific initialization or configuration
							 | 
						||
| 
								 | 
							
								     *      on the BT Controller. This is called before stack initialization.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      Must call fwcfg_cb to notify the stack of the completion of vendor
							 | 
						||
| 
								 | 
							
								     *      specific initialization once it has been done.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_FW_CFG,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Perform any vendor specific SCO/PCM configuration on the BT Controller.
							 | 
						||
| 
								 | 
							
								     *      This is called after stack initialization.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      Must call scocfg_cb to notify the stack of the completion of vendor
							 | 
						||
| 
								 | 
							
								     *      specific SCO configuration once it has been done.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_SCO_CFG,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Open UART port on where the BT Controller is attached.
							 | 
						||
| 
								 | 
							
								     *      This is called before stack initialization.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      A pointer to int array type for open file descriptors.
							 | 
						||
| 
								 | 
							
								     *      The mapping of HCI channel to fd slot in the int array is given in
							 | 
						||
| 
								 | 
							
								     *      bt_vendor_hci_channels_t.
							 | 
						||
| 
								 | 
							
								     *      And, it requires the vendor lib to fill up the content before returning
							 | 
						||
| 
								 | 
							
								     *      the call.
							 | 
						||
| 
								 | 
							
								     *      Typecasting conversion: (int (*)[]) param.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      Numbers of opened file descriptors.
							 | 
						||
| 
								 | 
							
								     *      Valid number:
							 | 
						||
| 
								 | 
							
								     *          1 - CMD/EVT/ACL-In/ACL-Out via the same fd (e.g. UART)
							 | 
						||
| 
								 | 
							
								     *          2 - CMD/EVT on one fd, and ACL-In/ACL-Out on the other fd
							 | 
						||
| 
								 | 
							
								     *          4 - CMD, EVT, ACL-In, ACL-Out are on their individual fd
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_USERIAL_OPEN,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Close the previously opened UART port.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_USERIAL_CLOSE,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Get the LPM idle timeout in milliseconds.
							 | 
						||
| 
								 | 
							
								     *      The stack uses this information to launch a timer delay before it
							 | 
						||
| 
								 | 
							
								     *      attempts to de-assert LPM WAKE signal once downstream HCI packet
							 | 
						||
| 
								 | 
							
								     *      has been delivered.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      A pointer to uint32_t type which is passed in by the stack. And, it
							 | 
						||
| 
								 | 
							
								     *      requires the vendor lib to fill up the content before returning
							 | 
						||
| 
								 | 
							
								     *      the call.
							 | 
						||
| 
								 | 
							
								     *      Typecasting conversion: (uint32_t *) param.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_GET_LPM_IDLE_TIMEOUT,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Enable or disable LPM mode on BT Controller.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      A pointer to uint8_t type with content of bt_vendor_lpm_mode_t.
							 | 
						||
| 
								 | 
							
								     *      Typecasting conversion: (uint8_t *) param.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      Must call lpm_cb to notify the stack of the completion of LPM
							 | 
						||
| 
								 | 
							
								     *      disable/enable process once it has been done.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_LPM_SET_MODE,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Assert or Deassert LPM WAKE on BT Controller.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      A pointer to uint8_t type with content of bt_vendor_lpm_wake_state_t.
							 | 
						||
| 
								 | 
							
								     *      Typecasting conversion: (uint8_t *) param.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_LPM_WAKE_SET_STATE,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      Perform any vendor specific commands related to audio state changes.
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      a pointer to bt_vendor_op_audio_state_t indicating what audio state is
							 | 
						||
| 
								 | 
							
								     *      set.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_SET_AUDIO_STATE,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*  [operation]
							 | 
						||
| 
								 | 
							
								     *      The epilog call to the vendor module so that it can perform any
							 | 
						||
| 
								 | 
							
								     *      vendor-specific processes (e.g. send a HCI_RESET to BT Controller)
							 | 
						||
| 
								 | 
							
								     *      before the caller calls for cleanup().
							 | 
						||
| 
								 | 
							
								     *  [input param]
							 | 
						||
| 
								 | 
							
								     *      None.
							 | 
						||
| 
								 | 
							
								     *  [return]
							 | 
						||
| 
								 | 
							
								     *      0 - default, don't care.
							 | 
						||
| 
								 | 
							
								     *  [callback]
							 | 
						||
| 
								 | 
							
								     *      Must call epilog_cb to notify the stack of the completion of vendor
							 | 
						||
| 
								 | 
							
								     *      specific epilog process once it has been done.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_EPILOG,
							 | 
						||
| 
								 | 
							
								} bt_vendor_opcode_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Power on/off control states */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    BT_VND_PWR_OFF,
							 | 
						||
| 
								 | 
							
								    BT_VND_PWR_ON,
							 | 
						||
| 
								 | 
							
								}  bt_vendor_power_state_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Define HCI channel identifier in the file descriptors array
							 | 
						||
| 
								 | 
							
								    used in BT_VND_OP_USERIAL_OPEN operation.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    CH_CMD,     // HCI Command channel
							 | 
						||
| 
								 | 
							
								    CH_EVT,     // HCI Event channel
							 | 
						||
| 
								 | 
							
								    CH_ACL_OUT, // HCI ACL downstream channel
							 | 
						||
| 
								 | 
							
								    CH_ACL_IN,  // HCI ACL upstream channel
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    CH_MAX      // Total channels
							 | 
						||
| 
								 | 
							
								}  bt_vendor_hci_channels_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** LPM disable/enable request */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    BT_VND_LPM_DISABLE,
							 | 
						||
| 
								 | 
							
								    BT_VND_LPM_ENABLE,
							 | 
						||
| 
								 | 
							
								} bt_vendor_lpm_mode_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** LPM WAKE set state request */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    BT_VND_LPM_WAKE_ASSERT,
							 | 
						||
| 
								 | 
							
								    BT_VND_LPM_WAKE_DEASSERT,
							 | 
						||
| 
								 | 
							
								} bt_vendor_lpm_wake_state_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Callback result values */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_RESULT_SUCCESS,
							 | 
						||
| 
								 | 
							
								    BT_VND_OP_RESULT_FAIL,
							 | 
						||
| 
								 | 
							
								} bt_vendor_op_result_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** audio (SCO) state changes triggering VS commands for configuration */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    uint16_t    handle;
							 | 
						||
| 
								 | 
							
								    uint16_t    peer_codec;
							 | 
						||
| 
								 | 
							
								    uint16_t    state;
							 | 
						||
| 
								 | 
							
								} bt_vendor_op_audio_state_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Bluetooth Host/Controller Vendor callback structure.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* vendor initialization/configuration callback */
							 | 
						||
| 
								 | 
							
								typedef void (*cfg_result_cb)(bt_vendor_op_result_t result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* datapath buffer allocation callback (callout)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Vendor lib needs to request a buffer through the alloc callout function
							 | 
						||
| 
								 | 
							
								 *  from HCI lib if the buffer is for constructing a HCI Command packet which
							 | 
						||
| 
								 | 
							
								 *  will be sent through xmit_cb to BT Controller.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  For each buffer allocation, the requested size needs to be big enough to
							 | 
						||
| 
								 | 
							
								 *  accommodate the below header plus a complete HCI packet --
							 | 
						||
| 
								 | 
							
								 *      typedef struct
							 | 
						||
| 
								 | 
							
								 *      {
							 | 
						||
| 
								 | 
							
								 *          uint16_t          event;
							 | 
						||
| 
								 | 
							
								 *          uint16_t          len;
							 | 
						||
| 
								 | 
							
								 *          uint16_t          offset;
							 | 
						||
| 
								 | 
							
								 *          uint16_t          layer_specific;
							 | 
						||
| 
								 | 
							
								 *      } HC_BT_HDR;
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  HCI lib returns a pointer to the buffer where Vendor lib should use to
							 | 
						||
| 
								 | 
							
								 *  construct a HCI command packet as below format:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  --------------------------------------------
							 | 
						||
| 
								 | 
							
								 *  |  HC_BT_HDR  |  HCI command               |
							 | 
						||
| 
								 | 
							
								 *  --------------------------------------------
							 | 
						||
| 
								 | 
							
								 *  where
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.event = 0x2000;
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.len = Length of HCI command;
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.offset = 0;
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.layer_specific = 0;
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  For example, a HCI_RESET Command will be formed as
							 | 
						||
| 
								 | 
							
								 *  ------------------------
							 | 
						||
| 
								 | 
							
								 *  |  HC_BT_HDR  |03|0c|00|
							 | 
						||
| 
								 | 
							
								 *  ------------------------
							 | 
						||
| 
								 | 
							
								 *  with
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.event = 0x2000;
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.len = 3;
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.offset = 0;
							 | 
						||
| 
								 | 
							
								 *      HC_BT_HDR.layer_specific = 0;
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef void *(*malloc_cb)(int size);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* datapath buffer deallocation callback (callout) */
							 | 
						||
| 
								 | 
							
								typedef void (*mdealloc_cb)(void *p_buf);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define callback of the cmd_xmit_cb
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  The callback function which HCI lib will call with the return of command
							 | 
						||
| 
								 | 
							
								 *  complete packet. Vendor lib is responsible for releasing the buffer passed
							 | 
						||
| 
								 | 
							
								 *  in at the p_mem parameter by calling dealloc callout function.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef void (*tINT_CMD_CBACK)(void *p_mem);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* hci command packet transmit callback (callout)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Vendor lib calls xmit_cb callout function in order to send a HCI Command
							 | 
						||
| 
								 | 
							
								 *  packet to BT Controller. The buffer carrying HCI Command packet content
							 | 
						||
| 
								 | 
							
								 *  needs to be first allocated through the alloc callout function.
							 | 
						||
| 
								 | 
							
								 *  HCI lib will release the buffer for Vendor lib once it has delivered the
							 | 
						||
| 
								 | 
							
								 *  packet content to BT Controller.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Vendor lib needs also provide a callback function (p_cback) which HCI lib
							 | 
						||
| 
								 | 
							
								 *  will call with the return of command complete packet.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  The opcode parameter gives the HCI OpCode (combination of OGF and OCF) of
							 | 
						||
| 
								 | 
							
								 *  HCI Command packet. For example, opcode = 0x0c03 for the HCI_RESET command
							 | 
						||
| 
								 | 
							
								 *  packet.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef uint8_t (*cmd_xmit_cb)(uint16_t opcode, void *p_buf, tINT_CMD_CBACK p_cback);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /** set to sizeof(bt_vendor_callbacks_t) */
							 | 
						||
| 
								 | 
							
								    size_t         size;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*
							 | 
						||
| 
								 | 
							
								     * Callback and callout functions have implemented in HCI libray
							 | 
						||
| 
								 | 
							
								     * (libbt-hci.so).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* notifies caller result of firmware configuration request */
							 | 
						||
| 
								 | 
							
								    cfg_result_cb  fwcfg_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* notifies caller result of sco configuration request */
							 | 
						||
| 
								 | 
							
								    cfg_result_cb  scocfg_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* notifies caller result of lpm enable/disable */
							 | 
						||
| 
								 | 
							
								    cfg_result_cb  lpm_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* notifies the result of codec setting */
							 | 
						||
| 
								 | 
							
								    cfg_result_cb audio_state_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* buffer allocation request */
							 | 
						||
| 
								 | 
							
								    malloc_cb   alloc;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* buffer deallocation request */
							 | 
						||
| 
								 | 
							
								    mdealloc_cb dealloc;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* hci command packet transmit request */
							 | 
						||
| 
								 | 
							
								    cmd_xmit_cb xmit_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* notifies caller completion of epilog process */
							 | 
						||
| 
								 | 
							
								    cfg_result_cb epilog_cb;
							 | 
						||
| 
								 | 
							
								} bt_vendor_callbacks_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Bluetooth Host/Controller VENDOR Interface
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /** Set to sizeof(bt_vndor_interface_t) */
							 | 
						||
| 
								 | 
							
								    size_t          size;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*
							 | 
						||
| 
								 | 
							
								     * Functions need to be implemented in Vendor libray (libbt-vendor.so).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Caller will open the interface and pass in the callback routines
							 | 
						||
| 
								 | 
							
								     * to the implemenation of this interface.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    int   (*init)(const bt_vendor_callbacks_t *p_cb, unsigned char *local_bdaddr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**  Vendor specific operations */
							 | 
						||
| 
								 | 
							
								    int (*op)(bt_vendor_opcode_t opcode, void *param);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Closes the interface */
							 | 
						||
| 
								 | 
							
								    void  (*cleanup)(void);
							 | 
						||
| 
								 | 
							
								} bt_vendor_interface_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * External shared lib functions/data
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Entry point of DLib --
							 | 
						||
| 
								 | 
							
								 *      Vendor library needs to implement the body of bt_vendor_interface_t
							 | 
						||
| 
								 | 
							
								 *      structure and uses the below name as the variable name. HCI library
							 | 
						||
| 
								 | 
							
								 *      will use this symbol name to get address of the object through the
							 | 
						||
| 
								 | 
							
								 *      dlsym call.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								//extern const bt_vendor_interface_t BLUETOOTH_VENDOR_LIB_INTERFACE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* BT_VENDOR_LIB_H */
							 | 
						||
| 
								 | 
							
								
							 |