/******************************************************************************
 *
 *  Copyright (C) 2001-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.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  this file contains constants and definitions for the bte project
 *
 ******************************************************************************/
#ifndef BTE_H
#define BTE_H

#include <pthread.h>
#include <semaphore.h>
#include <signal.h>
#include "bt_target.h"

#ifdef __cplusplus
extern "C" {
#endif

/* By default on shutdown, the baud rate is reset to 115kbits. This should NOT
 * be needed for platforms that kill the BTE driver and remove/reset BT chip.
 */
#ifndef BTE_RESET_BAUD_ON_BT_DISABLE
#define BTE_RESET_BAUD_ON_BT_DISABLE TRUE
#endif

/* Target Modes (based on jumper settings on hardware [see user manual])
 *                           BTE                  BBY
 *                           J3   J4              SW3-3   SW3-2   SW3-1
 *                          --------------------------------------------
 * BTE_MODE_SERIAL_APP,      OUT  OUT             OFF     OFF     OFF
 * BTE_MODE_APPL,            IN   OUT             OFF     OFF     ON
 * BTE_MODE_RESERVED,        OUT  IN              OFF     ON      OFF
 * BTE_MODE_SAMPLE_APPS,     IN   IN              OFF     ON      ON
 * BTE_MODE_DONGLE,          not yet supported    ON      OFF     OFF
 * BTE_MODE_APPL_PROTOCOL_TRACE,     * this is a fake mode *
 * BTE_MODE_INVALID
 */
enum {
  BTE_MODE_SERIAL_APP,          /* Sample serial port application      */
  BTE_MODE_APPL,                /* Target used with Tester through RPC */
  BTE_MODE_RESERVED,            /* Reserved                            */
  BTE_MODE_SAMPLE_APPS,         /* Sample applications (ICP/HSP)       */
  BTE_MODE_DONGLE,              /* Dongle mode                         */
  BTE_MODE_APPL_PROTOCOL_TRACE, /* Allow protocol tracing without rpc */
  BTE_MODE_INVALID
};

extern volatile uint8_t
    bte_target_mode; /* indicates the mode that the board is running in */

/* Startup options */
extern uint32_t bte_startup_options; /* Switch and jumper settings at startup */
void bte_get_startup_options(
    uint32_t*
        p_options); /* Platform specific function for getting startup options */

#define BTE_OPTIONS_TARGET_MODE_MASK                                         \
  0x00000007 /* bits 2-0 indicate target mode (QuickConnect: jp3 & jp4, BBY: \
                SW3-1 & SW3-2)*/

/****************************************************************************
 * Definitions to define which type of application gets built
 ****************************************************************************/
#define BUILD_HCITOOL FALSE
#define BUILD_L2PING FALSE

#define LINUX_FM_DRIVER_INCLUDED FALSE

/* hcisu userial operations. should probably go into bt_types to avoid
 * collisions! */
#define BT_EVT_TO_HCISU_USERIAL_OP (0x0080 | BT_EVT_HCISU)
/* operation for above hcisu event */
#define BT_HCISU_USERIAL_OPEN (0)  /* open serial port calling USERIAL_Open() \
                                      */
#define BT_HCISU_USERIAL_CLOSE (1) /* close userial port */
/* options associated with close op */
#define BT_HCISU_USERIAL_CL_NO_DIS_BT \
  0 /* do not touch bt_wake and power gpio */
#define BT_HCISU_USERIAL_CL_DIS_BT                              \
  1 /* put power and bt_wake into defined off state to preserve \
       power */
/* status codes for callback */
#define BTE_HCISU_USERIAL_FAIL 0
#define BTE_HCISU_USERIAL_OK 1
typedef void(tUSERIAL_MSG_CBACK)(int status);
typedef struct tHCISU_USERIAL_MSG_tag {
  BT_HDR hdr;
  tUSERIAL_MSG_CBACK* p_cback;
  uint8_t port; /* port number */
  uint8_t op;
  uint8_t option; /* option for operation. depends on operation */
} tHCISU_USERIAL_MSG;

extern void bte_hcisu_userial_oper(tUSERIAL_MSG_CBACK* p_cback, uint8_t port,
                                   uint8_t op, uint8_t option);

/* Pointer to function for sending HCI commands and data to the HCI tranport */
extern int (*p_bte_hci_send)(uint16_t port, BT_HDR* p_msg);

// Initialize control block memory for each stack component.
extern void BTE_InitStack(void);

/* Protocol trace mask */
extern uint32_t bte_proto_trace_mask;

typedef struct tBAUD_REG_tag {
  uint8_t DHBR;
  uint8_t DLBR;
  uint8_t ExplicitBaudRate0;
  uint8_t ExplicitBaudRate1;
  uint8_t ExplicitBaudRate2;
  uint8_t ExplicitBaudRate3;
} tBAUD_REG;

extern const tBAUD_REG baud_rate_regs[];

#ifdef __cplusplus
}
#endif

#endif /* BTE_H */
