/****************************************************************************** * * Copyright (C) 2023 The Android Open Source Project. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /****************************************************************************** * * This is the private interface file for NFA_WLC * ******************************************************************************/ #ifndef NFA_WLC_INT_H #define NFA_WLC_INT_H #include "nfa_api.h" #include "nfa_sys.h" #include "nfa_wlc_api.h" #include "nfc_api.h" /***************************************************************************** ** Constants and data types *****************************************************************************/ #define WPT_DURATION_INT_MASK 0xC0 #define WPT_DURATION_INT_MAX 0x13 #define POWER_ADJ_REQ_INC_MAX 0x14 #define POWER_ADJ_REQ_DEC_MIN 0xF6 #define NCI_WPT_START_CMD_SIZE 6 /* NFA_WLC flags */ /* WLC is enabled */ #define NFA_WLC_FLAGS_NON_AUTO_MODE_ENABLED 0x00000001 /* Waiting for end of power transfer phase */ #define NFA_WLC_FLAGS_WPT_NTF_PENDING 0x00000002 /* WLC events */ enum { /* device manager local device API events */ NFA_WLC_API_ENABLE_EVT = NFA_SYS_EVT_START(NFA_ID_WLC), NFA_WLC_API_START_EVT, // NFA_WLC_API_STOP_EVT, NFA_WLC_API_NON_AUTO_START_WPT_EVT, NFA_WLC_API_REMOVE_EP_EVT, }; /* WLC control block */ typedef struct { uint32_t flags; /* NFA_WLC flags (see definitions for NFA_WLC_FLAGS_*) */ tNFA_WLC_CBACK* p_wlc_cback; /* NFA WLC callback */ /* NFCC power mode */ uint8_t wlc_mode; } tNFA_WLC_CB; extern tNFA_WLC_CB nfa_wlc_cb; /* data type for NFA_DM_API_ENABLE_EVT */ typedef struct { NFC_HDR hdr; // tNFA_DM_CBACK* p_dm_cback; tNFA_WLC_CBACK* p_wlc_cback; } tNFA_WLC_API_ENABLE; /* data type for NFA_WLC_API_START_EVT */ typedef struct { NFC_HDR hdr; tNFA_WLC_MODE mode; } tNFA_WLC_API_START; /* data type for NFA_WLC_API_NON_AUTO_START_WPT_EVT */ typedef struct { NFC_HDR hdr; uint8_t power_adj_req; uint8_t wpt_time_int; } tNFA_WLC_API_NON_AUTO_START_WPT; /* union of all data types */ typedef union { /* GKI event buffer header */ NFC_HDR hdr; /* For NFA_WLC_API_STOP_EVT */ tNFA_WLC_API_ENABLE enable; tNFA_WLC_API_START start; tNFA_WLC_API_NON_AUTO_START_WPT non_auto_start_wpt; } tNFA_WLC_MSG; /* type definition for action functions */ typedef bool (*tNFA_WLC_ACTION)(tNFA_WLC_MSG* p_data); /* Action function prototypes */ extern bool nfa_wlc_enable(tNFA_WLC_MSG* p_data); extern bool nfa_wlc_start(tNFA_WLC_MSG* p_data); extern bool nfa_wlc_non_auto_start_wpt(tNFA_WLC_MSG* p_data); extern void nfa_wlc_init(void); extern void nfa_wlc_event_notify(tNFA_WLC_EVT event, tNFA_WLC_EVT_DATA* p_data); #endif /* NFA_WLC_INT_H */