blob: a885ff2e69e4eb7818370d99858ec593665523ee [file] [log] [blame]
/******************************************************************************
*
* 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 */