1b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/******************************************************************************
2b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
3b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  Copyright (C) 2012 Broadcom Corporation
4b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
5b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  Licensed under the Apache License, Version 2.0 (the "License");
6b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  you may not use this file except in compliance with the License.
7b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  You may obtain a copy of the License at:
8b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
9b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  http://www.apache.org/licenses/LICENSE-2.0
10b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
11b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  Unless required by applicable law or agreed to in writing, software
12b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  distributed under the License is distributed on an "AS IS" BASIS,
13b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  See the License for the specific language governing permissions and
15b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  limitations under the License.
16b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
17b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/
18b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu
19b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/******************************************************************************
20b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
21b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *  NFC Hardware Abstraction Layer API
22b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
23b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/
24eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#ifndef NFC_HAL_API_H
25eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#define NFC_HAL_API_H
26eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#include <hardware/nfc.h>
27eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#include "data_types.h"
28eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
29eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/****************************************************************************
30eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** NFC_HDR header definition for NFC messages
31eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*****************************************************************************/
32eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef struct
33eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{
34eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    UINT16          event;
35eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    UINT16          len;
36eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    UINT16          offset;
37eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    UINT16          layer_specific;
38eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} NFC_HDR;
39eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#define NFC_HDR_SIZE (sizeof (NFC_HDR))
40eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
41eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef UINT8 tHAL_NFC_STATUS;
42eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
43ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chutypedef void (tHAL_NFC_STATUS_CBACK) (tHAL_NFC_STATUS status);
44ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chutypedef void (tHAL_NFC_CBACK) (UINT8 event, tHAL_NFC_STATUS status);
45ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chutypedef void (tHAL_NFC_DATA_CBACK) (UINT16 data_len, UINT8   *p_data);
46eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
47eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
48eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** tHAL_NFC_ENTRY HAL entry-point lookup table
49eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
50eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
51eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_INITIALIZE) (void);
52eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_TERMINATE) (void);
53ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chutypedef void (tHAL_API_OPEN) (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
54eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_CLOSE) (void);
55eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_CORE_INITIALIZED) (UINT8 *p_core_init_rsp_params);
56eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_WRITE) (UINT16 data_len, UINT8 *p_data);
57eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef BOOLEAN (tHAL_API_PREDISCOVER) (void);
58eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_CONTROL_GRANTED) (void);
59eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef void (tHAL_API_POWER_CYCLE) (void);
60eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
61eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
62eb190654c5fbaea2f396bb5523f57062f291879aEvan Chutypedef struct
63eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{
64eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_INITIALIZE *initialize;
65eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_TERMINATE *terminate;
66eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_OPEN *open;
67eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_CLOSE *close;
68eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_CORE_INITIALIZED *core_initialized;
69eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_WRITE *write;
70eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_PREDISCOVER *prediscover;
71eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_CONTROL_GRANTED *control_granted;
72eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    tHAL_API_POWER_CYCLE *power_cycle;
73eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
74eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
75eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} tHAL_NFC_ENTRY;
76eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
77eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
78eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
79eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** HAL API Function Prototypes
80eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
81eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#ifdef __cplusplus
82eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuextern "C"
83eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{
84eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#endif
85eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
86eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/* Toolset-specific macro for exporting API funcitons */
87eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#if (defined(NFC_HAL_TARGET) && (NFC_HAL_TARGET == TRUE)) && (defined(_WINDLL))
88eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#define EXPORT_HAL_API  __declspec(dllexport)
89eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#else
90eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#define EXPORT_HAL_API
91eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#endif
92eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
93eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
94eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
95eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcInitialize
96eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
97eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Called when HAL library is loaded.
98eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
99eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  Initialize GKI and start the HCIT task
100eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
101eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
102eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
103eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
104eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcInitialize(void);
105eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
106eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
107eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
108eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcTerminate
109eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
110eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Called to terminate NFC HAL
111eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
112eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
113eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
114eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
115eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcTerminate(void);
116eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
117eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
118eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
119eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcOpen
120eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
121eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Open transport and intialize the NFCC, and
122eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  Register callback for HAL event notifications,
123eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
124eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
125eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
126eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
127eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
128eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
129ba4c17ee1d31e1b9f396292711f1414d449dd361Evan ChuEXPORT_HAL_API void HAL_NfcOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
130eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
131eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
132eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
133eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcClose
134eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
135eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Prepare for shutdown. A HAL_CLOSE_CPLT_EVT will be
136eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  reported when complete.
137eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
138eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
139eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
140eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
141eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcClose (void);
142eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
143eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
144eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
145eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcCoreInitialized
146eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
147eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Called after the CORE_INIT_RSP is received from the NFCC.
148eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  At this time, the HAL can do any chip-specific configuration,
149eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  and when finished signal the libnfc-nci with event
150eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  HAL_POST_INIT_CPLT_EVT.
151eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
152eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
153eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
154eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
155eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcCoreInitialized (UINT8 *p_core_init_rsp_params);
156eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
157eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
158eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
159eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcWrite
160eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
161eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Send an NCI control message or data packet to the
162eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  transport. If an NCI command message exceeds the transport
163eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  size, HAL is responsible for fragmenting it, Data packets
164eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  must be of the correct size.
165eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
166eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
167eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
168eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
169eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcWrite (UINT16 data_len, UINT8 *p_data);
170eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
171eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
172eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
173eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcPreDiscover
174eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
175eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Perform any vendor-specific pre-discovery actions (if needed)
176eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  If any actions were performed TRUE will be returned, and
177eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are
178eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  completed.
179eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
180eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          TRUE if vendor-specific pre-discovery actions initialized
181eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  FALSE if no vendor-specific pre-discovery actions are needed.
182eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
183eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
184eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API BOOLEAN HAL_NfcPreDiscover (void);
185eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
186eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
187eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
188eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcControlGranted
189eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
190eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Grant control to HAL control for sending NCI commands.
191eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
192eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  Call in response to HAL_REQUEST_CONTROL_EVT.
193eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
194eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  Must only be called when there are no NCI commands pending.
195eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
196eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  HAL_RELEASE_CONTROL_EVT will notify when HAL no longer
197eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  needs control of NCI.
198eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
199eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
200eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
201eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
202eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
203eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcControlGranted (void);
204eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
205eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/*******************************************************************************
206eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
207eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function         HAL_NfcPowerCycle
208eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
209eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description      Restart NFCC by power cyle
210eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
211eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
212eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
213eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns          void
214eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
215eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/
216eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuEXPORT_HAL_API void HAL_NfcPowerCycle (void);
217eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
218eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
219eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#ifdef __cplusplus
220eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu}
221eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#endif
222eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
223eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu#endif /* NFC_HAL_API_H  */
224