1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
35c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen *  Copyright (C) 2010-2013 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Entry point for NFC_TASK
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h>
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "gki.h"
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_target.h"
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "bt_types.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_INCLUDED == TRUE)
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_hal_api.h"
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_int.h"
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h"
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "rw_int.h"
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "ce_int.h"
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "llcp_int.h"
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define llcp_cleanup()
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (NFA_INCLUDED) && NFA_INCLUDED == TRUE)
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h"
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h"
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_start_timer
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Start a timer for the specified amount of time.
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NOTE: The timeout resolution is in SECONDS! (Even
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                          though the timer structure field is ticks)
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout)
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR *p_msg;
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if timer list is currently empty, start periodic GKI timer */
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.timer_queue.p_first == NULL)
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* if timer starts on other than NFC task (scritp wrapper) */
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (GKI_get_taskid () != NFC_TASK)
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* post event to start timer in NFC task */
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if ((p_msg = (BT_HDR *) GKI_getbuf (BT_HDR_SIZE)) != NULL)
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_msg->event = BT_EVT_TO_START_TIMER;
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg);
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Start nfc_task 1-sec resolution timer */
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_start_timer (NFC_TIMER_ID, GKI_SECS_TO_TICKS (1), TRUE);
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_remove_from_timer_list (&nfc_cb.timer_queue, p_tle);
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_tle->event = type;
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_tle->ticks = timeout;         /* Save the number of seconds for the timer */
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_add_to_timer_list (&nfc_cb.timer_queue, p_tle);
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_remaining_time
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Return amount of time to expire
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          time in second
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 nfc_remaining_time (TIMER_LIST_ENT *p_tle)
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (GKI_get_remaining_ticks (&nfc_cb.timer_queue, p_tle));
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_process_timer_evt
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process nfc GKI timer event
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_process_timer_evt (void)
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    TIMER_LIST_ENT  *p_tle;
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_update_timer_list (&nfc_cb.timer_queue, 1);
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    while ((nfc_cb.timer_queue.p_first) && (!nfc_cb.timer_queue.p_first->ticks))
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_tle = nfc_cb.timer_queue.p_first;
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_remove_from_timer_list (&nfc_cb.timer_queue, p_tle);
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        switch (p_tle->event)
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_NCI_WAIT_RSP:
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_ncif_cmd_timeout();
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_WAIT_2_DEACTIVATE:
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_wait_2_deactivate_timeout ();
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        default:
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_DEBUG2 ("nfc_process_timer_evt: timer:0x%x event (0x%04x)", p_tle, p_tle->event);
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_DEBUG1 ("nfc_process_timer_evt: unhandled timer event (0x%04x)", p_tle->event);
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if timer list is empty stop periodic GKI timer */
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.timer_queue.p_first == NULL)
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFC_TIMER_ID);
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_stop_timer
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Stop a timer.
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_stop_timer (TIMER_LIST_ENT *p_tle)
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_remove_from_timer_list (&nfc_cb.timer_queue, p_tle);
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if timer list is empty stop periodic GKI timer */
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.timer_queue.p_first == NULL)
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFC_TIMER_ID);
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_start_quick_timer
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Start a timer for the specified amount of time.
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NOTE: The timeout resolution depends on including modules.
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  QUICK_TIMER_TICKS_PER_SEC should be used to convert from
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  time to ticks.
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout)
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR *p_msg;
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if timer list is currently empty, start periodic GKI timer */
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.quick_timer_queue.p_first == NULL)
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* if timer starts on other than NFC task (scritp wrapper) */
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (GKI_get_taskid () != NFC_TASK)
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* post event to start timer in NFC task */
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if ((p_msg = (BT_HDR *) GKI_getbuf (BT_HDR_SIZE)) != NULL)
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_msg->event = BT_EVT_TO_START_QUICK_TIMER;
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg);
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Quick-timer is required for LLCP */
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_start_timer (NFC_QUICK_TIMER_ID, ((GKI_SECS_TO_TICKS (1) / QUICK_TIMER_TICKS_PER_SEC)), TRUE);
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_remove_from_timer_list (&nfc_cb.quick_timer_queue, p_tle);
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_tle->event = type;
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_tle->ticks = timeout; /* Save the number of ticks for the timer */
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_add_to_timer_list (&nfc_cb.quick_timer_queue, p_tle);
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_stop_quick_timer
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Stop a timer.
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_stop_quick_timer (TIMER_LIST_ENT *p_tle)
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_remove_from_timer_list (&nfc_cb.quick_timer_queue, p_tle);
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if timer list is empty stop periodic GKI timer */
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.quick_timer_queue.p_first == NULL)
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFC_QUICK_TIMER_ID);
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_process_quick_timer_evt
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process quick timer event
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_process_quick_timer_evt (void)
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    TIMER_LIST_ENT  *p_tle;
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_update_timer_list (&nfc_cb.quick_timer_queue, 1);
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    while ((nfc_cb.quick_timer_queue.p_first) && (!nfc_cb.quick_timer_queue.p_first->ticks))
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_tle = nfc_cb.quick_timer_queue.p_first;
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_remove_from_timer_list (&nfc_cb.quick_timer_queue, p_tle);
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        switch (p_tle->event)
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_LLCP_LINK_MANAGER:
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_LLCP_LINK_INACT:
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_LLCP_DATA_LINK:
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_LLCP_DELAY_FIRST_PDU:
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            llcp_process_timeout (p_tle);
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_RW_T1T_RESPONSE:
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rw_t1t_process_timeout (p_tle);
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_RW_T2T_RESPONSE:
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rw_t2t_process_timeout (p_tle);
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_RW_T3T_RESPONSE:
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rw_t3t_process_timeout (p_tle);
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_RW_T4T_RESPONSE:
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rw_t4t_process_timeout (p_tle);
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_RW_I93_RESPONSE:
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rw_i93_process_timeout (p_tle);
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFC_TTYPE_CE_T4T_UPDATE:
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ce_t4t_process_timeout (p_tle);
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        default:
2875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen            NFC_TRACE_DEBUG1 ("nfc_process_quick_timer_evt: unhandled timer event (0x%04x)", p_tle->event);
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if timer list is empty stop periodic GKI timer */
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.quick_timer_queue.p_first == NULL)
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFC_QUICK_TIMER_ID);
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_task_shutdown_nfcc
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Handle NFC shutdown
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          nothing
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_task_shutdown_nfcc (void)
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR        *p_msg;
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Free any messages still in the mbox */
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    while ((p_msg = (BT_HDR *) GKI_read_mbox (NFC_MBOX_ID)) != NULL)
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (p_msg);
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_gen_cleanup ();
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.flags & NFC_FL_POWER_OFF_SLEEP)
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_W4_HAL_CLOSE);
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_hal->close();
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (nfc_cb.flags & NFC_FL_POWER_CYCLE_NFCC)
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_W4_HAL_OPEN);
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_hal->power_cycle();
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_W4_HAL_CLOSE);
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_hal->close();
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Perform final clean up */
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        llcp_cleanup ();
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Stop the timers */
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFC_TIMER_ID);
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFC_QUICK_TIMER_ID);
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (NFA_INCLUDED) && NFA_INCLUDED == TRUE)
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_stop_timer (NFA_TIMER_ID);
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_task
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      NFC event processing task
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          nothing
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 nfc_task (UINT32 param)
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16  event;
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR  *p_msg;
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN free_buf;
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Initialize the nfc control block */
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    memset (&nfc_cb, 0, sizeof (tNFC_CB));
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.trace_level = NFC_INITIAL_TRACE_LEVEL;
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG0 ("NFC_TASK started.");
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* main loop */
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    while (TRUE)
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        event = GKI_wait (0xFFFF, 0);
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Handle NFC_TASK_EVT_TRANSPORT_READY from NFC HAL */
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event & NFC_TASK_EVT_TRANSPORT_READY)
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_DEBUG0 ("NFC_TASK got NFC_TASK_EVT_TRANSPORT_READY.");
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Reset the NFC controller. */
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_set_state (NFC_STATE_CORE_INIT);
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nci_snd_core_reset (NCI_RESET_TYPE_RESET_CFG);
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event & NFC_MBOX_EVT_MASK)
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Process all incoming NCI messages */
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            while ((p_msg = (BT_HDR *) GKI_read_mbox (NFC_MBOX_ID)) != NULL)
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                free_buf = TRUE;
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* Determine the input message type. */
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                switch (p_msg->event & BT_EVT_MASK)
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    case BT_EVT_TO_NFC_NCI:
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        free_buf = nfc_ncif_process_event (p_msg);
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        break;
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    case BT_EVT_TO_START_TIMER :
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        /* Start nfc_task 1-sec resolution timer */
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        GKI_start_timer (NFC_TIMER_ID, GKI_SECS_TO_TICKS (1), TRUE);
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        break;
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    case BT_EVT_TO_START_QUICK_TIMER :
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        /* Quick-timer is required for LLCP */
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        GKI_start_timer (NFC_QUICK_TIMER_ID, ((GKI_SECS_TO_TICKS (1) / QUICK_TIMER_TICKS_PER_SEC)), TRUE);
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        break;
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    case BT_EVT_TO_NFC_MSGS:
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        nfc_main_handle_hal_evt ((tNFC_HAL_EVT_MSG*)p_msg);
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        break;
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    default:
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        NFC_TRACE_DEBUG1 ("nfc_task: unhandle mbox message, event=%04x", p_msg->event);
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        break;
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (free_buf)
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    GKI_freebuf (p_msg);
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Process gki timer tick */
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event & NFC_TIMER_EVT_MASK)
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_process_timer_evt ();
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Process quick timer tick */
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event & NFC_QUICK_TIMER_EVT_MASK)
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_process_quick_timer_evt ();
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (NFA_INCLUDED) && NFA_INCLUDED == TRUE)
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event & NFA_MBOX_EVT_MASK)
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            while ((p_msg = (BT_HDR *) GKI_read_mbox (NFA_MBOX_ID)) != NULL)
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_sys_event (p_msg);
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event & NFA_TIMER_EVT_MASK)
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_sys_timer_update ();
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG0 ("nfc_task terminated");
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_exit_task (GKI_get_taskid ());
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return 0;
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INCLUDED == TRUE */
460