summaryrefslogtreecommitdiffstats
path: root/include/bte_appl.h
blob: 45f677190d767c22401e6ec949750d92fc5de7e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/*****************************************************************************
**                                                                           *
**  Name:          bte_appl.h                                                *
**                                                                           *
**  Description:   This is the interface file for the bte application task   *
**                                                                           *
**  Copyright (c) 2002-2009 Broadcom Corp., All Rights Reserved.             *
**  WIDCOMM Bluetooth Core. Proprietary and confidential.                    *
******************************************************************************/

#ifndef BTE_APPL_H
#define BTE_APPL_H

#include "btm_int.h"
#include "bta_api.h"
#include "bta_sys.h"
#include "bte.h"

/* Maximum length for serial port device name */
#ifndef BTE_APPL_MAX_USERIAL_DEV_NAME
#define BTE_APPL_MAX_USERIAL_DEV_NAME       (256)
#endif
#ifndef BTAPP_AHF_API_SUPPORT
#define BTAPP_AHF_API_SUPPORT FALSE
#endif

/* BTA APP_IDs */
#define UI_DM_ID    1
#define UI_PRM_ID   20
/* this defines the enabled BTA modules. client may not be defined as those are enabled at run time.
 * they are defined for completeness. please check with bta_sys.h for new modules.
 * BTA_ID_DM serves as flag for BTA_EnableBluetooth()
 * BTA_ID_RES can be used to fs ID in bte_appl.
 */

#define BTAPP_NUM_ID_BLOCKS ((BTA_ID_MAX/32)+1)        /* number of 32 bit required to store one bit per
                                                            btapp id */

#define BTAPP_APPL_MAIL_EVENT(x)  (x<<8)    /* define bte_appl task mail box event. LSB contains
                                                BTA_ID_xxx (see bta_sys.h) */
#define BTAPP_APPL_MAIL_EVT       0xff00    /* high byte contains bitmap of application module event */

/* helper macro to copy BTA callack data y into message buffer x, for event data structure z */
#define MEMCPY_APPL_MSG(x, y, z)  memcpy( (void *)(((UINT8 *)x)+sizeof(BT_HDR)), (void *)y, sizeof(z) )

/* Event masks for BTE_APPL_TASK */
#define BTE_APPL_STARTUP_EVT    EVENT_MASK(APPL_EVT_0)      /* Bluetooth has started */
#define BTE_APPL_SHUTDOWN_EVT   EVENT_MASK(APPL_EVT_1)      /* Bluetooth is shutting down */
#define BTE_APPL_SOCKET_RX_EVT  EVENT_MASK(APPL_EVT_2)      /* Socket data ready to be read */
#define BTE_APPL_DBUS_RX_EVT    EVENT_MASK(APPL_EVT_3)      /* DBUS message ready to be read */
#define BTE_APPL_BTA_ENABLE_EVT EVENT_MASK(APPL_EVT_4)      /* BTA Enabled event */


/* Application configuration */
#define BTE_APPL_PATCHRAM_PATH_MAXLEN   128
#define BTE_APPL_CONTACTS_DB_PATH       256

typedef struct {
    char    patchram_path[BTE_APPL_PATCHRAM_PATH_MAXLEN+1];
    UINT32  patchram_addr;
    UINT32  reconfig_baud;
    UINT32  clock_rate;             /* clock rate (for uart baud calculation) */
    BD_ADDR local_addr;             /* local bd addr */
    BD_ADDR rem_addr;
    UINT8   lpm_enabled;
    UINT8   bt_wake_polarity;
    UINT8   host_wake_polarity;
    BOOLEAN ag_enable_3way_conf;
    UINT16  ag_voice_settings;
    UINT8   ag_vsc_pcm_config[5];
    UINT8   ag_vsc_sco_pcm[5];
    /*tBTM_CMPL_CB*/ tBTM_DEV_STATUS_CB *p_reset_cplt_cb;  /* Current reset_cplt_cb */
    char    contacts_db[BTE_APPL_CONTACTS_DB_PATH+1];
    UINT32  bta_module_state[BTAPP_NUM_ID_BLOCKS]; /* state of enabled bta modules */
#if (BTAPP_AHF_API_SUPPORT==TRUE)
    UINT8   afh_first;
    UINT8   afh_last;
#endif
} tBTE_APPL_CFG;

extern tBTE_APPL_CFG bte_appl_cfg;

typedef struct {
    pthread_mutex_t     mutex;  /* mutex to protect below signal condition */
    pthread_cond_t      cond;   /* signal event */
} tBTAPP_SEMAPHORE;

/* helper functions to handle pthread conditions event from outside GKI */
extern void bte_create_semaphore( tBTAPP_SEMAPHORE * p_sema );
extern void bte_wait_semaphore( tBTAPP_SEMAPHORE * p_sema, unsigned msecs_to );
extern void bte_signal_semaphore( tBTAPP_SEMAPHORE * p_sema );
extern void bte_destroy_semaphore( tBTAPP_SEMAPHORE * p_sema );

/* global application control block storing global application states and variables */
typedef struct tBTE_APPL_CB_tag {
    sigset_t            signal_handler_set;        /* signal handler set used by signal handler thread */
#if ( TRUE == BTE_RESET_BAUD_ON_BT_DISABLE )
    tBTAPP_SEMAPHORE    shutdown_semaphore;   /* used to sync with  terminate handler initated ops */
#endif
    BOOLEAN amp_enabled;                        /* TRUE if AMP is in use */
} tBTE_APPL_CB;

extern tBTE_APPL_CB bte_appl_cb;

/* Exports the application task */
extern void BTE_appl_task(UINT32 params);
extern int BTAPP_enable_bta( const UINT32 bta_module_state[BTAPP_NUM_ID_BLOCKS], int includingFM );
extern int BTAPP_disable_bta( const UINT32 bta_module_state[BTAPP_NUM_ID_BLOCKS], int includingFM );

extern UINT8 appl_trace_level;
#define BT_PCM_CLK_IDX 1
#ifndef BT_PCM_DEF_CLK
#define BT_PCM_DEF_CLK 4       /* defaults to 2048khz PCM clk */
#endif
#define BT_PCM_SYNC_MS_ROLE_IDX 3
#define BT_PCM_CLK_MS_ROLE_IDX  4
#ifndef BT_PCM_DEF_ROLE
#define BT_PCM_DEF_ROLE    0x00     /* assume slave as default */
#endif

/* helper macros to set, clear and get current BTA module id in a 32bit ARRAY!! */
/* set bit id to 1 in UINT32 a[] NO RANGE CHECK!*/
#define BTAPP_SET_BTA_MOD(id, a)    { a[id/32] |= (UINT32)(1<<(id % 32)); }

/* set bit id to 0 (cleared) in UINT32 a[] NO RANGE CHECK */
#define BTAPP_CLEAR_BTA_MOD(id, a)  { a[id/32] &= (UINT32)!(1<<(id % 32)); }

/* tests if bit id is 1 in UINT32 a[] NO RANGE CHECK */
#define BTAPP_BTA_MOD_IS_SET(id, a) (a[id/32] & (UINT32)(1<<(id % 32)))

/* update this list either via btld.txt or directly here by adding the new profiles as per bta_sys.h.
 * each xxx_LISTx may only contain 32 bits */
#ifndef BTAPP_BTA_MODULES_LIST0
#define BTAPP_BTA_MODULES_LIST0 (\
        ( 1<<BTA_ID_DM ) | \
        ( 1<<BTA_ID_DG ) | \
        ( 1<<BTA_ID_AG ) | \
        ( 1<<BTA_ID_OPC )| \
        ( 1<<BTA_ID_OPS )| \
        ( 1<<BTA_ID_FTS )| \
        ( 1<<BTA_ID_PAN )| \
        ( 1<<BTA_ID_PR ) | \
        ( 1<<BTA_ID_SC)  | \
        ( 1<<BTA_ID_AV ) | \
        ( 1<<BTA_ID_HH ) | \
        ( 1<<BTA_ID_PBS) | \
        ( 1<<BTA_ID_FMTX)| \
        ( 1<<BTA_ID_JV) | \
        ( 1<<BTA_ID_MSE) \
        )
#endif

#define BTAPP_LIST1_BLOCK 32    /* next 32 bit block */
#ifndef BTAPP_BTA_MODULES_LIST1
#define BTAPP_BTA_MODULES_LIST1 (\
        ( 1<<(BTA_ID_MAX-BTAPP_LIST1_BLOCK) ) | \
        ( 1<<(BTA_ID_MSE-BTAPP_LIST1_BLOCK) ) | \
        0 \
        )
#endif
/* for future GPS etc support. goes int LIST1 above */
#if 0
    ( 1<<(BTA_ID_SSR-BTAPP_LIST1_BLOCK) ) \
    ( 1<<(BTA_ID_MSE-BTAPP_LIST1_BLOCK) ) \
    ( 1<<(BTA_ID_MCE-BTAPP_LIST1_BLOCK) )
#endif

/* used application init default in bte_main.c, bte_appl_cfg */
#ifndef BTAPP_DEFAULT_MODULES
#if (1==BTAPP_NUM_ID_BLOCKS)
#define BTAPP_DEFAULT_MODULES {BTAPP_BTA_MODULES_LIST0} /* max 32 modules IDs */
#elif (2==BTAPP_NUM_ID_BLOCKS)
#define BTAPP_DEFAULT_MODULES {BTAPP_BTA_MODULES_LIST0, BTAPP_BTA_MODULES_LIST1} /* 64 module IDs max */
#else
#error "Define more BTAPP_BTA_MODULES_LISTx"
#endif
#endif

#endif  /* BTE_APPL_H */