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