1/******************************************************************************
2 *
3 *  Copyright (C) 2003-2012 Broadcom Corporation
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18
19/******************************************************************************
20 *
21 *  This is the public interface file for the BTA system manager.
22 *
23 ******************************************************************************/
24#ifndef NFA_SYS_H
25#define NFA_SYS_H
26
27#include "nfc_target.h"
28#include "gki.h"
29#include "nfa_api.h"
30
31/*****************************************************************************
32**  Constants and data types
33*****************************************************************************/
34
35/* SW sub-systems */
36enum {
37    NFA_ID_SYS,         /* system manager                      */
38    NFA_ID_DM,          /* device manager                      */
39    NFA_ID_EE,          /* NFCEE sub-system                    */
40    NFA_ID_P2P,         /* Peer-to-Peer sub-system             */
41    NFA_ID_CHO,         /* Connection Handover sub-system      */
42    NFA_ID_SNEP,        /* SNEP sub-system                     */
43    NFA_ID_RW,          /* Reader/writer sub-system            */
44    NFA_ID_CE,          /* Card-emulation sub-system           */
45    NFA_ID_HCI,         /* Host controller interface sub-system*/
46#if (NFA_DTA_INCLUDED == TRUE)
47    NFA_ID_DTA,         /* Device Test Application sub-system  */
48#endif
49    NFA_ID_MAX
50};
51typedef UINT8 tNFA_SYS_ID;
52
53/* enable function type */
54typedef void (tNFA_SYS_ENABLE) (void);
55
56/* event handler function type */
57typedef BOOLEAN (tNFA_SYS_EVT_HDLR) (BT_HDR *p_msg);
58
59/* disable function type */
60typedef void (tNFA_SYS_DISABLE) (void);
61
62/* function type for processing the change of NFCC power mode */
63typedef void (tNFA_SYS_PROC_NFCC_PWR_MODE) (UINT8 nfcc_power_mode);
64
65typedef void (tNFA_SYS_CBACK) (void);
66typedef void (tNFA_SYS_ENABLE_CBACK) (void);
67typedef void (tNFA_SYS_PROC_NFCC_PWR_MODE_CMPL) (void);
68
69/* registration structure */
70typedef struct
71{
72    tNFA_SYS_ENABLE                 *enable;
73    tNFA_SYS_EVT_HDLR               *evt_hdlr;
74    tNFA_SYS_DISABLE                *disable;
75    tNFA_SYS_PROC_NFCC_PWR_MODE     *proc_nfcc_pwr_mode;
76} tNFA_SYS_REG;
77
78/* system manager configuration structure */
79typedef struct
80{
81    UINT16          mbox_evt;                       /* GKI mailbox event */
82    UINT8           mbox;                           /* GKI mailbox id */
83    UINT8           timer;                          /* GKI timer id */
84    UINT8           trace_level;                    /* initial trace level */
85} tNFA_SYS_CFG;
86
87
88/*****************************************************************************
89**  Global data
90*****************************************************************************/
91
92/*****************************************************************************
93**  Macros
94*****************************************************************************/
95
96/* Calculate start of event enumeration; id is top 8 bits of event */
97#define NFA_SYS_EVT_START(id)       ((id) << 8)
98
99
100/*****************************************************************************
101**  Function declarations
102*****************************************************************************/
103
104#ifdef __cplusplus
105extern "C" {
106#endif
107
108NFC_API extern void nfa_sys_init (void);
109NFC_API extern void nfa_sys_event (BT_HDR *p_msg);
110NFC_API extern void nfa_sys_timer_update (void);
111NFC_API extern void nfa_sys_disable_timers (void);
112NFC_API extern void nfa_sys_set_trace_level (UINT8 level);
113
114extern void nfa_sys_register (UINT8 id, const tNFA_SYS_REG *p_reg);
115extern void nfa_sys_deregister (UINT8 id);
116extern void nfa_sys_check_disabled (void);
117extern BOOLEAN nfa_sys_is_register (UINT8 id);
118extern void nfa_sys_disable_subsystems (BOOLEAN graceful);
119extern void nfa_sys_enable_subsystems (void);
120
121extern BOOLEAN nfa_sys_is_graceful_disable (void);
122extern void nfa_sys_sendmsg (void *p_msg);
123extern void nfa_sys_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, INT32 timeout);
124extern void nfa_sys_stop_timer (TIMER_LIST_ENT *p_tle);
125
126extern void nfa_sys_cback_reg_enable_complete (tNFA_SYS_ENABLE_CBACK *p_cback);
127extern void nfa_sys_cback_notify_enable_complete (UINT8 id);
128
129extern void nfa_sys_notify_nfcc_power_mode (UINT8 nfcc_power_mode);
130extern void nfa_sys_cback_reg_nfcc_power_mode_proc_complete (tNFA_SYS_PROC_NFCC_PWR_MODE_CMPL *p_cback);
131extern void nfa_sys_cback_notify_nfcc_power_mode_proc_complete (UINT8 id);
132
133#ifdef __cplusplus
134}
135#endif
136
137#endif /* NFA_SYS_H */
138