Latest NFC stack-drop from Broadcom.
Patches provided by Evan Chu <evanchu@broadcom.com> and
Paul Chaisson <pchaisson@broadcom.com>.
Most important changes:
- Support for BCM20793B4 and BCM20793B5 revisions in the HAL.
- Remove connection handover and SNEP implementations, since
we already have them in java-land.
- Fix issue where the NFCC is not woken for HCI writes.
- Remove a lot of duplicated code in the HAL.
- Various small fixes.
Change-Id: I00f7457fe7ec23602071532a15bf2be9d7706b37
diff --git a/Android.mk b/Android.mk
index a953849..fa5d6e8 100755
--- a/Android.mk
+++ b/Android.mk
@@ -1,3 +1,4 @@
+# function to find all *.cpp files under a directory
define all-cpp-files-under
$(patsubst ./%,%, \
$(shell cd $(LOCAL_PATH) ; \
@@ -7,70 +8,70 @@
LOCAL_PATH:= $(call my-dir)
-NFA:=src/nfa
-NFC:=src/nfc
-UDRV:=src/udrv
+NFA := src/nfa
+NFC := src/nfc
+HAL := src/hal
+UDRV := src/udrv
+HALIMPL := halimpl/bcm2079x
+D_CFLAGS := -DANDROID -DBUILDCFG=1
-#gki
-GKI_FILES:=$(call all-c-files-under, src/gki)
-#
-# libnfc-nci
-#
-#nfa
-NFA_ADAP_FILES:= \
- $(call all-c-files-under, src/adaptation) \
- $(call all-cpp-files-under, src/adaptation)
-
-#nfa
-NFA_FILES:= $(call all-c-files-under, $(NFA))
-NFC_FILES:= $(call all-c-files-under, $(NFC))
-
-COMMON_CFLAGS += -DANDROID -DANDROID_USE_LOGCAT=TRUE
-
-NFA_CFLAGS += -DNFC_CONTROLLER_ID=1
-D_CFLAGS += -DDEBUG -D_DEBUG -O0 -g
-
-ifeq ($(findstring maguro,$(TARGET_PRODUCT)),)
-ifeq ($(findstring crespo,$(TARGET_PRODUCT)),)
-D_CFLAGS += -DGENERIC_TARGET=1
-endif
-endif
-
-D_CFLAGS += -DBUILDCFG=1
-D_CFLAGS += -DNFA_APP_DOWNLOAD_NFC_PATCHRAM=TRUE
-
-#NTAL includes
-NTAL_CFLAGS += -I$(LOCAL_PATH)/src/include
-NTAL_CFLAGS += -I$(LOCAL_PATH)/src/gki/ulinux
-NTAL_CFLAGS += -I$(LOCAL_PATH)/src/gki/common
-
-#NFA NFC includes
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/gki/ulinux
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/gki/common
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFA)/brcm
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFA)/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFA)/int
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFC)/brcm
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFC)/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFC)/int
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(UDRV)/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/hal/include
-
-ifneq ($(NCI_VERSION),)
-NFA_CFLAGS += -DNCI_VERSION=$(NCI_VERSION)
-endif
+######################################
+# Build shared library system/lib/libnfc-nci.so for stack code.
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_ARM_MODE := arm
-LOCAL_MODULE:= libnfc-nci
+LOCAL_MODULE := libnfc-nci
LOCAL_MODULE_TAGS := optional
LOCAL_SHARED_LIBRARIES := libhardware_legacy libcutils libdl libstlport libhardware
-LOCAL_CFLAGS := $(COMMON_CFLAGS) $(D_CFLAGS) $(NFA_CFLAGS)
-LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include
-LOCAL_SRC_FILES := $(NFA_ADAP_FILES) $(GKI_FILES) $(NFA_FILES) $(NFC_FILES) $(LOG_FILES)
+LOCAL_CFLAGS := $(D_CFLAGS)
+LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include \
+ $(LOCAL_PATH)/src/include \
+ $(LOCAL_PATH)/src/gki/ulinux \
+ $(LOCAL_PATH)/src/gki/common \
+ $(LOCAL_PATH)/$(NFA)/include \
+ $(LOCAL_PATH)/$(NFA)/int \
+ $(LOCAL_PATH)/$(NFC)/include \
+ $(LOCAL_PATH)/$(NFC)/int \
+ $(LOCAL_PATH)/src/hal/include \
+ $(LOCAL_PATH)/src/hal/int
+LOCAL_SRC_FILES := \
+ $(call all-c-files-under, $(NFA)/ce $(NFA)/dm $(NFA)/ee) \
+ $(call all-c-files-under, $(NFA)/hci $(NFA)/int $(NFA)/p2p $(NFA)/rw $(NFA)/sys) \
+ $(call all-c-files-under, $(NFC)/int $(NFC)/llcp $(NFC)/nci $(NFC)/ndef $(NFC)/nfc $(NFC)/tags) \
+ $(call all-c-files-under, src/adaptation) \
+ $(call all-cpp-files-under, src/adaptation) \
+ $(call all-c-files-under, src/gki) \
+ src/nfca_version.c
include $(BUILD_SHARED_LIBRARY)
+
+######################################
+# Build shared library system/lib/hw/nfc_nci.*.so for Hardware Abstraction Layer.
+# Android's generic HAL (libhardware.so) dynamically loads this shared library.
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := nfc_nci.$(TARGET_DEVICE)
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
+LOCAL_SRC_FILES := $(call all-c-files-under, $(HALIMPL)) \
+ $(call all-cpp-files-under, $(HALIMPL))
+LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware_legacy libstlport
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include \
+ $(LOCAL_PATH)/$(HALIMPL)/include \
+ $(LOCAL_PATH)/$(HALIMPL)/gki/ulinux \
+ $(LOCAL_PATH)/$(HALIMPL)/gki/common \
+ $(LOCAL_PATH)/$(HAL)/include \
+ $(LOCAL_PATH)/$(HAL)/int \
+ $(LOCAL_PATH)/src/include \
+ $(LOCAL_PATH)/$(NFC)/include \
+ $(LOCAL_PATH)/$(NFA)/include \
+ $(LOCAL_PATH)/$(UDRV)/include
+LOCAL_CFLAGS := $(D_CFLAGS) -DNFC_HAL_TARGET=TRUE -DNFC_RW_ONLY=TRUE
+LOCAL_CPPFLAGS := $(LOCAL_CFLAGS)
+include $(BUILD_SHARED_LIBRARY)
+
+
+######################################
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/halimpl/Android.mk b/halimpl/Android.mk
deleted file mode 100644
index cfd03be..0000000
--- a/halimpl/Android.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/halimpl/bcm2079x/Android.mk b/halimpl/bcm2079x/Android.mk
deleted file mode 100644
index 99cf768..0000000
--- a/halimpl/bcm2079x/Android.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (C) 2011 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.
-
-
-# function to find all *.cpp files under a directory
-define all-cpp-files-under
-$(patsubst ./%,%, \
- $(shell cd $(LOCAL_PATH) ; \
- find $(1) -name "*.cpp" -and -not -name ".*") \
- )
-endef
-
-
-HAL_SUFFIX := $(TARGET_DEVICE)
-ifeq ($(TARGET_DEVICE),crespo)
- HAL_SUFFIX := herring
-endif
-
-
-######################################
-######################################
-# build shared library system/lib/hw/nfc_nci.*.so
-# which is linked by libhardware.so
-
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := nfc_nci.$(HAL_SUFFIX)
-LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
-LOCAL_SRC_FILES := $(call all-c-files-under, .) $(call all-cpp-files-under, .)
-LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware_legacy libstlport
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/gki/ulinux \
- $(LOCAL_PATH)/gki/common \
- $(LOCAL_PATH)/udrv/include \
- $(LOCAL_PATH)/hal/include \
- $(LOCAL_PATH)/hal/int
-
-LOCAL_CFLAGS += -DANDROID \
- -DBUILDCFG=1 -DNFC_HAL_TARGET=TRUE -DNFC_RW_ONLY=TRUE
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/halimpl/bcm2079x/adaptation/HalAdaptation.cpp b/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
index 54b1ae8..3ed508f 100644
--- a/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
+++ b/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
@@ -32,6 +32,12 @@
#include "nfc_hal_post_reset.h"
#include <errno.h>
#include <pthread.h>
+#include "buildcfg.h"
+extern void delete_hal_non_volatile_store ();
+extern "C"
+{
+#include "userial.h"
+}
///////////////////////////////////////
@@ -59,27 +65,94 @@
int retval = EACCES;
unsigned long freq = 0;
unsigned long num = 0;
+ char temp[120];
+ UINT8 logLevel = 0;
- InitializeGlobalAppLogLevel ();
+ logLevel = InitializeGlobalAppLogLevel ();
- //initialize the crystal frequency
- if (GetNumValue((char*)NAME_XTAL_FREQUENCY, &freq, sizeof(freq)))
- {
- ALOGD("%s: setting xtal frequency=%lu", __FUNCTION__, freq);
- nfc_post_reset_cb.dev_init_config.xtal_freq = (UINT16) freq;
- nfc_post_reset_cb.dev_init_config.flags |= NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ;
- }
+ if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
+ (num == 1) )
+ ALOGD ("%s: preserve HAL NV store", __FUNCTION__);
+ else
+ delete_hal_non_volatile_store ();
// Initialize protocol logging level
if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
ScrProtocolTraceFlag = num;
- HAL_NfcInitialize ();
+ tUSERIAL_OPEN_CFG cfg;
+ struct tUART_CONFIG uart;
- // Initialize appliation logging level
- if ( GetNumValue ( NAME_APPL_TRACE_LEVEL, &num, sizeof ( num ) ) ) {
- HAL_NfcSetTraceLevel(num);
+ if ( GetStrValue ( NAME_UART_PARITY, temp, sizeof ( temp ) ) )
+ {
+ if ( strcmp ( temp, "even" ) == 0 )
+ uart.m_iParity = USERIAL_PARITY_EVEN;
+ else if ( strcmp ( temp, "odd" ) == 0 )
+ uart.m_iParity = USERIAL_PARITY_ODD;
+ else if ( strcmp ( temp, "none" ) == 0 )
+ uart.m_iParity = USERIAL_PARITY_NONE;
}
+ else
+ uart.m_iParity = USERIAL_PARITY_NONE;
+
+ if ( GetStrValue ( NAME_UART_STOPBITS, temp, sizeof ( temp ) ) )
+ {
+ if ( strcmp ( temp, "1" ) == 0 )
+ uart.m_iStopbits = USERIAL_STOPBITS_1;
+ else if ( strcmp ( temp, "2" ) == 0 )
+ uart.m_iStopbits = USERIAL_STOPBITS_2;
+ else if ( strcmp ( temp, "1.5" ) == 0 )
+ uart.m_iStopbits = USERIAL_STOPBITS_1_5;
+ }
+ else if ( GetNumValue ( NAME_UART_STOPBITS, &num, sizeof ( num ) ) )
+ {
+ if ( num == 1 )
+ uart.m_iStopbits = USERIAL_STOPBITS_1;
+ else if ( num == 2 )
+ uart.m_iStopbits = USERIAL_STOPBITS_2;
+ }
+ else
+ uart.m_iStopbits = USERIAL_STOPBITS_1;
+
+ if ( GetNumValue ( NAME_UART_DATABITS, &num, sizeof ( num ) ) )
+ {
+ if ( 5 <= num && num <= 8 )
+ uart.m_iDatabits = ( 1 << ( num + 1 ) );
+ }
+ else
+ uart.m_iDatabits = USERIAL_DATABITS_8;
+
+ if ( GetNumValue ( NAME_UART_BAUD, &num, sizeof ( num ) ) )
+ {
+ if ( num == 300 ) uart.m_iBaudrate = USERIAL_BAUD_300;
+ else if ( num == 600 ) uart.m_iBaudrate = USERIAL_BAUD_600;
+ else if ( num == 1200 ) uart.m_iBaudrate = USERIAL_BAUD_1200;
+ else if ( num == 2400 ) uart.m_iBaudrate = USERIAL_BAUD_2400;
+ else if ( num == 9600 ) uart.m_iBaudrate = USERIAL_BAUD_9600;
+ else if ( num == 19200 ) uart.m_iBaudrate = USERIAL_BAUD_19200;
+ else if ( num == 57600 ) uart.m_iBaudrate = USERIAL_BAUD_57600;
+ else if ( num == 115200 ) uart.m_iBaudrate = USERIAL_BAUD_115200;
+ else if ( num == 230400 ) uart.m_iBaudrate = USERIAL_BAUD_230400;
+ else if ( num == 460800 ) uart.m_iBaudrate = USERIAL_BAUD_460800;
+ else if ( num == 921600 ) uart.m_iBaudrate = USERIAL_BAUD_921600;
+ }
+ else if ( GetStrValue ( NAME_UART_BAUD, temp, sizeof ( temp ) ) )
+ {
+ if ( strcmp ( temp, "auto" ) == 0 )
+ uart.m_iBaudrate = USERIAL_BAUD_AUTO;
+ }
+ else
+ uart.m_iBaudrate = USERIAL_BAUD_115200;
+
+ memset (&cfg, 0, sizeof(tUSERIAL_OPEN_CFG));
+ cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits;
+ cfg.baud = uart.m_iBaudrate;
+
+ ALOGD ("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud);
+ USERIAL_Init(&cfg);
+
+ HAL_NfcInitialize ();
+ HAL_NfcSetTraceLevel (logLevel); // Initialize HAL's logging level
retval = 0;
ALOGD ("%s: exit %d", __FUNCTION__, retval);
@@ -253,3 +326,4 @@
ALOGD ("%s: exit %d", __FUNCTION__, retval);
return retval;
}
+
diff --git a/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp b/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
index e007a2e..a8c9a86 100644
--- a/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
+++ b/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
@@ -16,6 +16,7 @@
*
******************************************************************************/
#include "OverrideLog.h"
+#define LOG_TAG "NfcNciHal"
#include "gki.h"
extern "C"
{
@@ -23,6 +24,7 @@
}
#include "nfc_hal_nv_ci.h"
#include "nfc_hal_int.h"
+#include "config.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -31,8 +33,9 @@
//directory of HAL's non-volatile storage
-static const char* bcm_nfc_location = "/data/nfc";
+static const char* default_location = "/data/nfc";
static const char* filename_prefix = "/halStorage.bin";
+static const std::string get_storage_location ();
/*******************************************************************************
@@ -57,7 +60,7 @@
*******************************************************************************/
void nfc_hal_nv_co_read (UINT8 *p_buf, UINT16 nbytes, UINT8 block)
{
- std::string fn (bcm_nfc_location);
+ std::string fn = get_storage_location();
char filename[256];
fn.append (filename_prefix);
@@ -70,7 +73,7 @@
ALOGD ("%s: buffer len=%u; file=%s", __FUNCTION__, nbytes, filename);
int fileStream = open (filename, O_RDONLY);
- if (fileStream > 0)
+ if (fileStream >= 0)
{
size_t actualRead = read (fileStream, p_buf, nbytes);
if (actualRead > 0)
@@ -113,7 +116,7 @@
*******************************************************************************/
void nfc_hal_nv_co_write (const UINT8 *p_buf, UINT16 nbytes, UINT8 block)
{
- std::string fn (bcm_nfc_location);
+ std::string fn = get_storage_location();
char filename[256];
int fileStream = 0;
@@ -127,7 +130,7 @@
ALOGD ("%s: bytes=%u; file=%s", __FUNCTION__, nbytes, filename);
fileStream = open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
- if (fileStream > 0)
+ if (fileStream >= 0)
{
size_t actualWritten = write (fileStream, p_buf, nbytes);
ALOGD ("%s: %d bytes written", __FUNCTION__, actualWritten);
@@ -147,3 +150,67 @@
nfc_hal_nv_ci_write (NFC_HAL_NV_CO_FAIL);
}
}
+
+
+/*******************************************************************************
+**
+** Function get_storage_location
+**
+** Description Get the absolute directory path of the HAL's storage location.
+**
+** Parameters none
+**
+** Returns Absolute path.
+**
+*******************************************************************************/
+const std::string get_storage_location ()
+{
+ char buffer [100];
+ memset (buffer, 0, sizeof(buffer));
+ if (!GetStrValue (NAME_NFA_STORAGE, buffer, sizeof(buffer)))
+ return default_location;
+ else
+ return std::string (buffer);
+}
+
+
+/*******************************************************************************
+**
+** Function delete_hal_non_volatile_store
+**
+** Description Delete all the content of the HAL's storage location.
+**
+** Parameters none
+**
+** Returns none
+**
+*******************************************************************************/
+void delete_hal_non_volatile_store ()
+{
+ static bool firstTime = true;
+ std::string fn = get_storage_location();
+ char filename[256];
+ int stat = 0;
+
+ if (firstTime == false)
+ return;
+ firstTime = false;
+
+ ALOGD ("%s", __FUNCTION__);
+
+ fn.append (filename_prefix);
+ if (fn.length() > 200)
+ {
+ ALOGE ("%s: filename too long", __FUNCTION__);
+ return;
+ }
+
+ sprintf (filename, "%s%u", fn.c_str(), DH_NV_BLOCK);
+ remove (filename);
+ sprintf (filename, "%s%u", fn.c_str(), HC_F3_NV_BLOCK);
+ remove (filename);
+ sprintf (filename, "%s%u", fn.c_str(), HC_F4_NV_BLOCK);
+ remove (filename);
+ sprintf (filename, "%s%u", fn.c_str(), HC_F2_NV_BLOCK);
+ remove (filename);
+}
diff --git a/halimpl/bcm2079x/adaptation/StartupConfig.cpp b/halimpl/bcm2079x/adaptation/StartupConfig.cpp
new file mode 100644
index 0000000..529361b
--- /dev/null
+++ b/halimpl/bcm2079x/adaptation/StartupConfig.cpp
@@ -0,0 +1,177 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1999-2012 Broadcom Corporation
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ * Construct a buffer that contains multiple Type-Length-Value contents
+ * that is used by the HAL in a CORE_SET_CONFIG NCI command.
+ ******************************************************************************/
+
+#define LOG_TAG "NfcNciHal"
+#include "OverrideLog.h"
+#include "StartupConfig.h"
+
+
+const UINT8 StartupConfig::mMaxLength = 255;
+
+
+/*******************************************************************************
+**
+** Function: initialize
+**
+** Description: Initialize all member variables.
+**
+** Returns: None
+**
+*******************************************************************************/
+StartupConfig::StartupConfig ()
+{
+ //set first byte to 0, which is length of payload
+ mBuffer.append ((uint8_string::size_type) 1, (uint8_string::value_type) 0);
+}
+
+
+/*******************************************************************************
+**
+** Function: initialize
+**
+** Description: Reset all member variables.
+**
+** Returns: None
+**
+*******************************************************************************/
+void StartupConfig::initialize ()
+{
+ mBuffer.clear ();
+ //set first byte to 0, which is length of payload
+ mBuffer.append ((uint8_string::size_type) 1, (uint8_string::value_type) 0);
+}
+
+
+/*******************************************************************************
+**
+** Function: getInternalBuffer
+**
+** Description: Get the pointer to buffer that contains multiple
+** Type-Length-Value contents.
+**
+** Returns: Pointer to buffer.
+**
+*******************************************************************************/
+const UINT8* StartupConfig::getInternalBuffer ()
+{
+ return mBuffer.data ();
+}
+
+
+/*******************************************************************************
+**
+** Function: append
+**
+** Description: Append new config data to internal buffer.
+** newContent: buffer containing new content; newContent[0] is
+** payload length; newContent[1..end] is payload.
+**
+** Returns: True if ok.
+**
+*******************************************************************************/
+bool StartupConfig::append (const UINT8* newContent)
+{
+ static const char fn [] = "StartupConfig::append";
+ if ((newContent[0]+mBuffer.size()) > mMaxLength)
+ {
+ ALOGE ("%s: exceed max length", fn);
+ return false;
+ }
+ ALOGD ("%s: try append %u bytes", fn, (uint8_string::size_type) (newContent[0]));
+ //append new payload into private buffer
+ mBuffer.append (newContent+1, (uint8_string::size_type) (newContent[0]));
+ //increase size counter of payload in private buffer
+ mBuffer[0] = mBuffer[0] + newContent[0];
+ ALOGD ("%s: new size %u bytes", fn, mBuffer[0]);
+ return true;
+};
+
+
+/*******************************************************************************
+**
+** Function: append
+**
+** Description: Append new config data to internal buffer.
+** newContent: buffer containing new content; newContent[0] is
+** payload length; newContent[1..end] is payload.
+** newContentLen: total length of newContent.
+**
+** Returns: True if ok.
+**
+*******************************************************************************/
+bool StartupConfig::append (const UINT8* newContent, UINT8 newContentLen)
+{
+ static const char fn [] = "StartupConfig::append";
+ if ((newContent[0]+1) != newContentLen)
+ {
+ ALOGE ("%s: invalid length at newContent[0]", fn);
+ return false;
+ }
+ return append (newContent);
+};
+
+
+/*******************************************************************************
+**
+** Function: disableSecureElement
+**
+** Description: Adjust a TLV to disable secure element(s). The TLV's type is 0xC2.
+** bitmask: 0xC0 = do not detect any secure element.
+** 0x40 = do not detect secure element in slot 0.
+** 0x80 = do not detect secure element in slot 1.
+**
+** Returns: True if ok.
+**
+*******************************************************************************/
+bool StartupConfig::disableSecureElement (UINT8 bitmask)
+{
+ const UINT8 maxLen = mBuffer[0];
+ UINT8 index = 1, tlvType = 0, tlvLen = 0;
+ bool found0xC2 = false;
+
+ while (true)
+ {
+ if (index > maxLen)
+ break;
+ tlvType = mBuffer [index];
+ index++;
+ tlvLen = mBuffer [index];
+ index++;
+ if (tlvType == 0xC2) //this TLV controls secure elements
+ {
+ index++; //index of second byte in TLV's value
+ mBuffer [index] = mBuffer [index] | bitmask; //turn on certain bits
+ found0xC2 = true;
+ }
+ else
+ index += tlvLen;
+ }
+
+ if (found0xC2 == false)
+ {
+ UINT8 tlv [] = {0x04, 0xC2, 0x02, 0x61, 0x00};
+ tlv [4] = tlv [4] | bitmask;
+ found0xC2 = append (tlv);
+ }
+ return found0xC2;
+}
diff --git a/halimpl/bcm2079x/adaptation/config.cpp b/halimpl/bcm2079x/adaptation/config.cpp
index c96fdd2..11ef297 100644
--- a/halimpl/bcm2079x/adaptation/config.cpp
+++ b/halimpl/bcm2079x/adaptation/config.cpp
@@ -24,12 +24,7 @@
#define LOG_TAG "NfcNciHal"
-#if GENERIC_TARGET
-const char alternative_config_path[] = "/data/nfc/";
-#else
const char alternative_config_path[] = "";
-#endif
-
const char transport_config_path[] = "/etc/";
#define config_name "libnfc-brcm.conf"
@@ -61,7 +56,7 @@
static CNfcConfig& GetInstance();
friend void readOptionalConfig(const char* optional);
- bool getValue(const char* name, char* pValue, size_t len) const;
+ bool getValue(const char* name, char* pValue, size_t& len) const;
bool getValue(const char* name, unsigned long& rValue) const;
bool getValue(const char* name, unsigned short & rValue) const;
const CNfcParam* find(const char* p_name) const;
@@ -413,7 +408,7 @@
** false if setting does not exist
**
*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t len) const
+bool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const
{
const CNfcParam* pParam = find(name);
if (pParam == NULL)
@@ -422,7 +417,9 @@
if (pParam->str_len() > 0)
{
memset(pValue, 0, len);
- memcpy(pValue, pParam->str_value(), pParam->str_len());
+ if (len > pParam->str_len())
+ len = pParam->str_len();
+ memcpy(pValue, pParam->str_value(), len);
return true;
}
return false;
@@ -658,11 +655,13 @@
** Returns: none
**
*******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long len)
+extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l)
{
+ size_t len = l;
CNfcConfig& rConfig = CNfcConfig::GetInstance();
- return rConfig.getValue(name, pValue, len);
+ bool b = rConfig.getValue(name, pValue, len);
+ return b ? len : 0;
}
/*******************************************************************************
diff --git a/halimpl/bcm2079x/adaptation/patchram.cpp b/halimpl/bcm2079x/adaptation/patchram.cpp
index 273de90..343eab2 100644
--- a/halimpl/bcm2079x/adaptation/patchram.cpp
+++ b/halimpl/bcm2079x/adaptation/patchram.cpp
@@ -24,18 +24,14 @@
#include "nfc_hal_post_reset.h"
}
#include <string>
+#include <cutils/properties.h>
#include "spdhelper.h"
+#include "StartupConfig.h"
#define LOG_TAG "NfcNciHal"
-/* Location of patchfiles */
-#ifndef NFCA_PATCHFILE_LOCATION
-#define NFCA_PATCHFILE_LOCATION ("/system/vendor/firmware/")
-#endif
-
#define FW_PRE_PATCH "FW_PRE_PATCH"
#define FW_PATCH "FW_PATCH"
-#define NFA_CONFIG_FORMAT "NFA_CONFIG_FORMAT"
#define MAX_RF_DATA_CREDITS "MAX_RF_DATA_CREDITS"
#define MAX_BUFFER (512)
@@ -44,33 +40,64 @@
static void * sPrmBuf = NULL;
static void * sI2cFixPrmBuf = NULL;
-#define NFA_DM_START_UP_CFG_PARAM_MAX_LEN 100
-static UINT8 nfa_dm_start_up_cfg[NFA_DM_START_UP_CFG_PARAM_MAX_LEN];
-extern UINT8 *p_nfc_hal_dm_start_up_cfg;
-static UINT8 nfa_dm_start_up_vsc_cfg[NFA_DM_START_UP_CFG_PARAM_MAX_LEN];
-extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg;
-extern UINT8 *p_nfc_hal_dm_lptd_cfg;
-static UINT8 nfa_dm_lptd_cfg[LPTD_PARAM_LEN];
+#define CONFIG_MAX_LEN 256
+static UINT8 sConfig [CONFIG_MAX_LEN];
+static StartupConfig sStartupConfig;
+static StartupConfig sLptdConfig;
+extern UINT8 *p_nfc_hal_dm_start_up_cfg; //defined in the HAL
+static UINT8 nfa_dm_start_up_vsc_cfg[CONFIG_MAX_LEN];
+extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg; //defined in the HAL
+extern UINT8 *p_nfc_hal_dm_lptd_cfg; //defined in the HAL
extern tSNOOZE_MODE_CONFIG gSnoozeModeCfg;
-extern BOOLEAN nfc_hal_prm_nvm_required; //true: don't download firmware if controller cannot detect EERPOM
-static void HalNciCallback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
+static void mayDisableSecureElement (StartupConfig& config);
+/* Default patchfile (in NCD format) */
+#ifndef NFA_APP_DEFAULT_PATCHFILE_NAME
+#define NFA_APP_DEFAULT_PATCHFILE_NAME "\0"
+#endif
+
+/* Default patchfile (in NCD format) */
+#ifndef NFA_APP_DEFAULT_I2C_PATCHFILE_NAME
+#define NFA_APP_DEFAULT_I2C_PATCHFILE_NAME "\0"
+#endif
+
+#define BRCM_43341B0_ID 0x43341b00
tNFC_POST_RESET_CB nfc_post_reset_cb =
{
- "/vendor/firmware/bcm2079x_firmware.ncd",
+ /* Default Patch & Pre-Patch */
+ NFA_APP_DEFAULT_PATCHFILE_NAME,
NULL,
- "/vendor/firmware/bcm2079x_pre_firmware.ncd",
+ NFA_APP_DEFAULT_I2C_PATCHFILE_NAME,
NULL,
+
+ /* Default UART baud rate */
NFC_HAL_DEFAULT_BAUD,
- {0, 0}, /* tBRCM_DEV_INIT_CONFIG dev_init_config */
+ /* Default tNFC_HAL_DEV_INIT_CFG (flags, num_xtal_cfg, {brcm_hw_id, xtal-freq, xtal-index} ) */
+ {
+ 1, /* number of valid entries */
+ {
+ {BRCM_43341B0_ID, 37400, NFC_HAL_XTAL_INDEX_37400},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ }
+ },
+ /* Default low power mode settings */
NFC_HAL_LP_SNOOZE_MODE_NONE, /* Snooze Mode */
NFC_HAL_LP_IDLE_THRESHOLD_HOST, /* Idle Threshold Host */
NFC_HAL_LP_IDLE_THRESHOLD_HC, /* Idle Threshold HC */
NFC_HAL_LP_ACTIVE_LOW, /* NFC_WAKE Active Mode */
- NFC_HAL_LP_ACTIVE_HIGH /* DH_WAKE Active Mode */
+ NFC_HAL_LP_ACTIVE_HIGH, /* DH_WAKE Active Mode */
+
+ NFA_APP_MAX_NUM_REINIT, /* max retry to get NVM type */
+ 0, /* current retry count */
+ TRUE, /* debug mode for downloading patchram */
+ FALSE /* skip downloading patchram after reinit because of patch download failure */
};
@@ -276,21 +303,34 @@
*******************************************************************************/
static void getNfaValues()
{
- unsigned long num;
+ unsigned long num = 0;
+ int actualLen = 0;
- if ( GetStrValue ( NAME_NFA_DM_START_UP_CFG, (char*)nfa_dm_start_up_cfg, sizeof ( nfa_dm_start_up_cfg ) ) )
+ p_nfc_hal_cfg->nfc_hal_prm_nvm_required = TRUE; //don't download firmware if controller cannot detect EERPOM
+ sStartupConfig.initialize ();
+ sLptdConfig.initialize ();
+
+
+ actualLen = GetStrValue (NAME_NFA_DM_START_UP_CFG, (char*)sConfig, sizeof(sConfig));
+ if (actualLen >= 8)
{
- p_nfc_hal_dm_start_up_cfg = &nfa_dm_start_up_cfg[0];
ALOGD ( "START_UP_CFG[0] = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
- nfa_dm_start_up_cfg[0],
- nfa_dm_start_up_cfg[1],
- nfa_dm_start_up_cfg[2],
- nfa_dm_start_up_cfg[3],
- nfa_dm_start_up_cfg[4],
- nfa_dm_start_up_cfg[5],
- nfa_dm_start_up_cfg[6],
- nfa_dm_start_up_cfg[7] );
+ sConfig[0],
+ sConfig[1],
+ sConfig[2],
+ sConfig[3],
+ sConfig[4],
+ sConfig[5],
+ sConfig[6],
+ sConfig[7] );
+ sStartupConfig.append (sConfig, actualLen);
}
+
+ // Set antenna tuning configuration if configured.
+ actualLen = GetStrValue(NAME_PREINIT_DSP_CFG, (char*)sConfig, sizeof(sConfig));
+ if (actualLen)
+ sStartupConfig.append (sConfig, actualLen);
+
if ( GetStrValue ( NAME_NFA_DM_START_UP_VSC_CFG, (char*)nfa_dm_start_up_vsc_cfg, sizeof (nfa_dm_start_up_vsc_cfg) ) )
{
p_nfc_hal_dm_start_up_vsc_cfg = &nfa_dm_start_up_vsc_cfg[0];
@@ -304,8 +344,16 @@
nfa_dm_start_up_vsc_cfg[6],
nfa_dm_start_up_vsc_cfg[7] );
}
- if ( GetStrValue ( NAME_LPTD_CFG, (char*)&nfa_dm_lptd_cfg[0], sizeof( nfa_dm_lptd_cfg ) ) )
- p_nfc_hal_dm_lptd_cfg = &nfa_dm_lptd_cfg[0];
+
+ actualLen = GetStrValue(NAME_LPTD_CFG, (char*)sConfig, sizeof(sConfig));
+ if (actualLen)
+ {
+ sLptdConfig.append (sConfig, actualLen);
+ p_nfc_hal_dm_lptd_cfg = const_cast<UINT8*> (sLptdConfig.getInternalBuffer ());
+ }
+
+ mayDisableSecureElement (sStartupConfig);
+ p_nfc_hal_dm_start_up_cfg = const_cast<UINT8*> (sStartupConfig.getInternalBuffer ());
}
/*******************************************************************************
@@ -376,11 +424,7 @@
if ((fd = fopen(sPatchFn, "rb")) != NULL)
{
UINT32 lenPrmBuffer = getFileLength(fd);
- tNFC_HAL_PRM_FORMAT patch_format = NFC_HAL_PRM_FORMAT_NCD;
-
- GetNumValue((char*)NFA_CONFIG_FORMAT, &patch_format, sizeof(patch_format));
-
- ALOGD("%s Downloading patchfile %s (size: %lu) format=%u", __FUNCTION__, sPatchFn, lenPrmBuffer, patch_format);
+ ALOGD("%s Downloading patchfile %s (size: %lu) format=%u", __FUNCTION__, sPatchFn, lenPrmBuffer, NFC_HAL_PRM_FORMAT_NCD);
if ((sPrmBuf = malloc(lenPrmBuffer)) != NULL)
{
fread(sPrmBuf, lenPrmBuffer, 1, fd);
@@ -388,7 +432,7 @@
if (!SpdHelper::isPatchBad((UINT8*)sPrmBuf, lenPrmBuffer))
{
/* Download patch using static memeory mode */
- HAL_NfcPrmDownloadStart(patch_format, 0, (UINT8*)sPrmBuf, lenPrmBuffer, 0, prmCallback);
+ HAL_NfcPrmDownloadStart(NFC_HAL_PRM_FORMAT_NCD, 0, (UINT8*)sPrmBuf, lenPrmBuffer, 0, prmCallback);
bDownloadStarted = true;
}
}
@@ -430,7 +474,7 @@
*******************************************************************************/
void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type)
{
- ALOGD("%s: brcm_hw_id=0x%x, nvm_type=%d", __FUNCTION__, brcm_hw_id, nvm_type);
+ ALOGD("%s: brcm_hw_id=0x%lx, nvm_type=%d", __FUNCTION__, brcm_hw_id, nvm_type);
tHAL_NFC_STATUS stat = HAL_NFC_STATUS_FAILED;
UINT8 max_credits = 1;
@@ -438,7 +482,7 @@
{
ALOGD("%s: No NVM detected, FAIL the init stage to force a retry", __FUNCTION__);
USERIAL_PowerupDevice (0);
- stat = HAL_NfcReInit (HalNciCallback);
+ stat = HAL_NfcReInit ();
}
else
{
@@ -456,46 +500,27 @@
/*******************************************************************************
**
-** Function: HalNciCallback
+** Function: mayDisableSecureElement
**
-** Description: Determine whether controller has detected EEPROM.
+** Description: Optionally adjust a TLV to disable secure element. This feature
+** is enabled by setting the system property
+** nfc.disable_secure_element to a bit mask represented by a hex
+** octet: C0 = do not detect any secure element.
+** 40 = do not detect secure element in slot 0.
+** 80 = do not detect secure element in slot 1.
**
-** Returns: none
+** config: a sequence of TLV's.
**
*******************************************************************************/
-void HalNciCallback (tNFC_HAL_NCI_EVT event, UINT16 dataLen, UINT8* data)
+void mayDisableSecureElement (StartupConfig& config)
{
- ALOGD ("%s: enter; event=%X; data len=%u", __FUNCTION__, event, dataLen);
- if (event == NFC_VS_GET_PATCH_VERSION_EVT)
+ unsigned int bitmask = 0;
+ char valueStr [PROPERTY_VALUE_MAX] = {0};
+ int len = property_get ("nfc.disable_secure_element", valueStr, "");
+ if (len > 0)
{
- if (dataLen <= NCI_GET_PATCH_VERSION_NVM_OFFSET)
- {
- ALOGE("%s: response too short to detect NVM type", __FUNCTION__);
- HAL_NfcPreInitDone (HAL_NFC_STATUS_FAILED);
- }
- else
- {
- UINT8 nvramType = *(data + NCI_GET_PATCH_VERSION_NVM_OFFSET);
- if (nvramType == NCI_SPD_NVM_TYPE_NONE)
- {
- //controller did not find EEPROM, so re-initialize
- ALOGD("%s: no nvram, try again", __FUNCTION__);
- USERIAL_PowerupDevice (0);
- HAL_NfcReInit (HalNciCallback);
- }
- else
- {
- UINT8 max_credits = 1;
- ALOGD("%s: found nvram", __FUNCTION__, nvramType);
- if (GetNumValue(MAX_RF_DATA_CREDITS, &max_credits, sizeof(max_credits)) && (max_credits > 0))
- {
- ALOGD("%s : max_credits=%d", __FUNCTION__, max_credits);
- HAL_NfcSetMaxRfDataCredits(max_credits);
- }
- HAL_NfcPreInitDone (HAL_NFC_STATUS_OK);
- }
- }
+ sscanf (valueStr, "%x", &bitmask); //read system property as a hex octet
+ ALOGD ("%s: disable 0x%02X", __FUNCTION__, (UINT8) bitmask);
+ config.disableSecureElement ((UINT8) (bitmask & 0xC0));
}
- ALOGD("%s: exit", __FUNCTION__);
}
-
diff --git a/halimpl/bcm2079x/adaptation/spdhelper.cpp b/halimpl/bcm2079x/adaptation/spdhelper.cpp
index 00e9567..bf6342f 100644
--- a/halimpl/bcm2079x/adaptation/spdhelper.cpp
+++ b/halimpl/bcm2079x/adaptation/spdhelper.cpp
@@ -1,3 +1,4 @@
+#define LOG_TAG "NfcNciHal"
#include "OverrideLog.h"
#include "spdhelper.h"
#include "config.h"
diff --git a/halimpl/bcm2079x/adaptation/userial_linux.c b/halimpl/bcm2079x/adaptation/userial_linux.c
index ebecf95..9110349 100755
--- a/halimpl/bcm2079x/adaptation/userial_linux.c
+++ b/halimpl/bcm2079x/adaptation/userial_linux.c
@@ -41,6 +41,7 @@
#define default_transport "/dev/bcm2079x"
#define NUM_RESET_ATTEMPTS 5
+#define NFC_WAKE_ASSERTED_ON_POR UPIO_OFF
#ifndef BTE_APPL_MAX_USERIAL_DEV_NAME
#define BTE_APPL_MAX_USERIAL_DEV_NAME (256)
@@ -158,7 +159,7 @@
void userial_close_thread(UINT32 params);
-static UINT8 device_name[20];
+static UINT8 device_name[BTE_APPL_MAX_USERIAL_DEV_NAME+1];
static int bSerialPortDevice = FALSE;
static int _timeout = POLL_TIMEOUT;
static BOOLEAN is_close_thread_is_waiting = FALSE;
@@ -1011,8 +1012,39 @@
}
}
}
+ if ( bSerialPortDevice )
+ {
+ tcflush(linux_cb.sock, TCIOFLUSH);
+ tcgetattr(linux_cb.sock, &termios);
- USERIAL_PowerupDevice(port);
+ termios.c_cflag &= ~(CSIZE | PARENB);
+ termios.c_cflag = CLOCAL|CREAD|data_bits|stop_bits|parity;
+ if (!parity)
+ termios.c_cflag |= IGNPAR;
+ // termios.c_cflag &= ~CRTSCTS;
+ termios.c_oflag = 0;
+ termios.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
+ termios.c_iflag &= ~(BRKINT | ICRNL | INLCR | ISTRIP | IXON | IGNBRK | PARMRK | INPCK);
+ termios.c_lflag = 0;
+ termios.c_iflag = 0;
+ cfsetospeed(&termios, baud);
+ cfsetispeed(&termios, baud);
+
+ termios.c_cc[VTIME] = 0;
+ termios.c_cc[VMIN] = 1;
+ tcsetattr(linux_cb.sock, TCSANOW, &termios);
+
+ tcflush(linux_cb.sock, TCIOFLUSH);
+
+#if (USERIAL_USE_IO_BT_WAKE==TRUE)
+ userial_io_init_bt_wake( linux_cb.sock, &linux_cb.bt_wake_state );
+#endif
+ GKI_delay(gPowerOnDelay);
+ }
+ else
+ {
+ USERIAL_PowerupDevice(port);
+ }
}
linux_cb.ser_cb = p_cback;
@@ -1158,24 +1190,38 @@
int i = 0;
clock_t t;
+ /* Ensure we wake up the chip before writing to it */
+ if (!isWake(UPIO_ON))
+ UPIO_Set(UPIO_GENERAL, NFC_HAL_LP_NFC_WAKE_GPIO, UPIO_OFF);
+
+ ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write: (%d bytes)", len);
+ pthread_mutex_lock(&close_thread_mutex);
+
doWriteDelay();
- ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write: (%d bytes) - \n", len);
t = clock();
- while (len != 0)
+ while (len != 0 && linux_cb.sock != -1)
{
ret = write(linux_cb.sock, p_data + total, len);
if (ret < 0)
+ {
+ ALOGE("USERIAL_Write len = %d, ret = %d, errno = %d", len, ret, errno);
break;
+ }
+ else
+ {
+ ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write len = %d, ret = %d", len, ret);
+ }
+
total += ret;
len -= ret;
}
perf_update(&perf_write, clock() - t, total);
- ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write len = %d, ret = %d, errno = %d\n", len, ret, errno);
-
- /* register a delay for next write
- */
+ /* register a delay for next write */
setWriteDelay(total * nfc_write_delay / 1000);
+
+ pthread_mutex_unlock(&close_thread_mutex);
+
return ((UINT16)total);
}
@@ -1307,6 +1353,23 @@
return;
}
+
+/*******************************************************************************
+**
+** Function USERIAL_SetPowerOffDelays
+**
+** Description Set power off delays used during USERIAL_Close(). The
+** values in the conf. file setting override these if set.
+**
+** Returns None.
+**
+*******************************************************************************/
+UDRV_API void USERIAL_SetPowerOffDelays(int pre_poweroff_delay, int post_poweroff_delay)
+{
+ gPrePowerOffDelay = pre_poweroff_delay;
+ gPostPowerOffDelay = post_poweroff_delay;
+}
+
/*******************************************************************************
**
** Function USERIAL_Close
@@ -1368,7 +1431,7 @@
if (linux_cb.sock <= 0)
{
- ALOGD( "%s: already closed (%d)\n", __FUNCTION__, linux_cb.sock);
+ ALOGD( "%s: already closed (%d)\n", __FUNCTION__, linux_cb.sock);
pthread_mutex_unlock(&close_thread_mutex);
return;
}
@@ -1545,6 +1608,8 @@
unsigned int resetSuccess = 0;
unsigned int numTries = 0;
unsigned char spi_negotiation[64];
+ int delay = gPowerOnDelay;
+ ALOGD("%s: enter", __FUNCTION__);
if ( GetNumValue ( NAME_READ_MULTI_PACKETS, &num, sizeof ( num ) ) )
bcmi2cnfc_read_multi_packets = num;
@@ -1558,11 +1623,11 @@
}
if (linux_cb.sock_power_control > 0)
{
+ current_nfc_wake_state = NFC_WAKE_ASSERTED_ON_POR;
+ ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL, NFC_WAKE_ASSERTED_ON_POR);
ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 0);
GKI_delay(10);
- ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 1);
- current_nfc_wake_state = wake_state();
- ret = ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL, current_nfc_wake_state);
+ ret = ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 1);
}
ret = GetStrValue ( NAME_SPI_NEGOTIATION, (char*)spi_negotiation, sizeof ( spi_negotiation ) );
@@ -1580,12 +1645,15 @@
0x07 < bcmi2cnfc_client_addr &&
bcmi2cnfc_client_addr < 0x78)
{
+ /* Delay needed after turning on chip */
+ GKI_delay(delay);
ALOGD( "Change client address to %x\n", bcmi2cnfc_client_addr);
- GKI_delay(gPowerOnDelay);
ret = ioctl(linux_cb.sock, BCMNFC_CHANGE_ADDR, bcmi2cnfc_client_addr);
if (!ret) {
resetSuccess = 1;
linux_cb.client_device_address = bcmi2cnfc_client_addr;
+ /* Delay long enough for address change */
+ delay = 200;
}
} else {
resetSuccess = 1;
@@ -1595,5 +1663,7 @@
if (!resetSuccess) {
ALOGE("BCM2079x: failed to initialize NFC controller");
}
- GKI_delay(gPowerOnDelay);
+
+ GKI_delay(delay);
+ ALOGD("%s: exit", __FUNCTION__);
}
diff --git a/halimpl/bcm2079x/gki/common/gki_buffer.c b/halimpl/bcm2079x/gki/common/gki_buffer.c
index 067c7ba..10a816a 100644
--- a/halimpl/bcm2079x/gki/common/gki_buffer.c
+++ b/halimpl/bcm2079x/gki/common/gki_buffer.c
@@ -29,6 +29,8 @@
#if GKI_BUFFER_DEBUG
#define LOG_TAG "GKI_DEBUG"
+#include <android/log.h>
+#include <cutils/log.h>
#define LOGD(format, ...) LogMsg (TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC, format, ## __VA_ARGS__)
#endif
/*******************************************************************************
@@ -100,7 +102,9 @@
{
FREE_QUEUE_T *Q;
tGKI_COM_CB *p_cb = &gki_cb.com;
- printf("\ngki_alloc_free_queue in, id:%d \n", id);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue in, id:%d \n", id);
+ #endif
Q = &p_cb->freeq[p_cb->pool_list[id]];
@@ -110,14 +114,20 @@
if(p_mem)
{
//re-initialize the queue with allocated memory
- printf("\ngki_alloc_free_queue calling gki_init_free_queue, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue calling gki_init_free_queue, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #endif
gki_init_free_queue(id, Q->size, Q->total, p_mem);
- printf("\ngki_alloc_free_queue ret OK, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue ret OK, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #endif
return TRUE;
}
GKI_exception (GKI_ERROR_BUF_SIZE_TOOBIG, "gki_alloc_free_queue: Not enough memory");
}
- printf("\ngki_alloc_free_queue out failed, id:%d\n", id);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue out failed, id:%d\n", id);
+ #endif
return FALSE;
}
#endif
@@ -400,6 +410,14 @@
return NULL;
}
#endif
+
+ if(Q->p_first == 0)
+ {
+ /* gki_alloc_free_queue() failed to alloc memory */
+ GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
+ return NULL;
+ }
+
p_hdr = Q->p_first;
Q->p_first = p_hdr->p_next;
@@ -504,6 +522,14 @@
if(Q->p_first == 0 && gki_alloc_free_queue(pool_id) != TRUE)
return NULL;
#endif
+
+ if(Q->p_first == 0)
+ {
+ /* gki_alloc_free_queue() failed to alloc memory */
+ GKI_TRACE_ERROR_0("GKI_getpoolbuf() fail alloc free queue");
+ return NULL;
+ }
+
p_hdr = Q->p_first;
Q->p_first = p_hdr->p_next;
diff --git a/halimpl/bcm2079x/gki/common/gki_time.c b/halimpl/bcm2079x/gki/common/gki_time.c
index 10377f6..e840a36 100644
--- a/halimpl/bcm2079x/gki/common/gki_time.c
+++ b/halimpl/bcm2079x/gki/common/gki_time.c
@@ -444,6 +444,12 @@
/* Check for OS Task Timers */
for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++)
{
+ if (gki_cb.com.OSRdyTbl[task_id] == TASK_DEAD)
+ {
+ // task is shutdown do not try to service timers
+ continue;
+ }
+
if (gki_cb.com.OSWaitTmr[task_id] > 0) /* If timer is running */
{
gki_cb.com.OSWaitTmr[task_id] -= gki_cb.com.OSNumOrigTicks;
diff --git a/halimpl/bcm2079x/gki/ulinux/data_types.h b/halimpl/bcm2079x/gki/ulinux/data_types.h
index 0768494..27ae561 100644
--- a/halimpl/bcm2079x/gki/ulinux/data_types.h
+++ b/halimpl/bcm2079x/gki/ulinux/data_types.h
@@ -34,7 +34,7 @@
typedef signed char INT8;
typedef signed short INT16;
typedef unsigned char BOOLEAN;
-
+typedef UINT32 UINTPTR;
typedef UINT32 TIME_STAMP;
#ifndef TRUE
diff --git a/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c b/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
index 39eb3e1..6351dcc 100644
--- a/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
+++ b/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
@@ -1254,6 +1254,7 @@
void GKI_sched_lock(void)
{
GKI_TRACE_0("GKI_sched_lock");
+ GKI_disable ();
return;
}
@@ -1274,6 +1275,7 @@
void GKI_sched_unlock(void)
{
GKI_TRACE_0("GKI_sched_unlock");
+ GKI_enable ();
}
/*******************************************************************************
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_api.c b/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
index 06c970c..742f542 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,12 +16,14 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFC Hardware Abstraction Layer API: Implementation for Broadcom NFC
* controllers
*
******************************************************************************/
+#include <string.h>
#include "gki.h"
#include "nfc_hal_target.h"
#include "nfc_hal_api.h"
@@ -47,16 +49,17 @@
*******************************************************************************/
void HAL_NfcInitialize (void)
{
- NCI_TRACE_API0 ("HAL_NfcInitialize ()");
-
/* Initialize HAL control block */
nfc_hal_main_init ();
- /* Initialize OS */
- GKI_init ();
+ HAL_TRACE_API1 ("HAL_NfcInitialize (): NFC_HAL_TASK id=%i", NFC_HAL_TASK);
- /* Enable interrupts */
+
+#ifndef NFC_HAL_SHARED_GKI
+ /* Initialize GKI (not needed if using shared NFC/HAL GKI resources) */
+ GKI_init ();
GKI_enable ();
+#endif
/* Create the NCI transport task */
GKI_create_task ((TASKPTR)nfc_hal_main_task,
@@ -65,8 +68,10 @@
(UINT16 *) ((UINT8 *)nfc_hal_task_stack + NFC_HAL_TASK_STACK_SIZE),
sizeof(nfc_hal_task_stack), NULL, NULL);
- /* Start tasks */
+#ifndef NFC_HAL_SHARED_GKI
+ /* Start GKI scheduler (not needed if using shared NFC/HAL GKI resources) */
GKI_run (0);
+#endif
}
/*******************************************************************************
@@ -80,7 +85,7 @@
*******************************************************************************/
void HAL_NfcTerminate(void)
{
- NCI_TRACE_API0 ("HAL_NfcTerminate ()");
+ HAL_TRACE_API0 ("HAL_NfcTerminate ()");
}
@@ -98,7 +103,7 @@
*******************************************************************************/
void HAL_NfcOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback)
{
- NCI_TRACE_API0 ("HAL_NfcOpen ()");
+ HAL_TRACE_API0 ("HAL_NfcOpen ()");
/* Only handle if HAL is not opened (stack cback is NULL) */
if (p_hal_cback)
@@ -124,7 +129,7 @@
*******************************************************************************/
void HAL_NfcClose (void)
{
- NCI_TRACE_API0 ("HAL_NfcClose ()");
+ HAL_TRACE_API0 ("HAL_NfcClose ()");
/* Only handle if HAL is opened (stack cback is not-NULL) */
if (nfc_hal_cb.p_stack_cback)
@@ -151,7 +156,7 @@
NFC_HDR *p_msg;
UINT16 size;
- NCI_TRACE_API0 ("HAL_NfcCoreInitialized ()");
+ HAL_TRACE_API0 ("HAL_NfcCoreInitialized ()");
/* NCI payload len + NCI header size */
size = p_core_init_rsp_params[2] + NCI_MSG_HDR_SIZE;
@@ -186,11 +191,11 @@
NFC_HDR *p_msg;
UINT8 mt;
- NCI_TRACE_API0 ("HAL_NfcWrite ()");
+ HAL_TRACE_API0 ("HAL_NfcWrite ()");
if (data_len > (NCI_MAX_CTRL_SIZE + NCI_MSG_HDR_SIZE))
{
- NCI_TRACE_ERROR1 ("HAL_NfcWrite (): too many bytes (%d)", data_len);
+ HAL_TRACE_ERROR1 ("HAL_NfcWrite (): too many bytes (%d)", data_len);
return;
}
@@ -228,7 +233,7 @@
{
BOOLEAN status = FALSE;
- NCI_TRACE_API1 ("HAL_NfcPreDiscover status:%d", status);
+ HAL_TRACE_API1 ("HAL_NfcPreDiscover status:%d", status);
return status;
}
@@ -252,7 +257,7 @@
void HAL_NfcControlGranted (void)
{
NFC_HDR *p_msg;
- NCI_TRACE_API0 ("HAL_NfcControlGranted ()");
+ HAL_TRACE_API0 ("HAL_NfcControlGranted ()");
/* Send message to NFC_HAL_TASK */
if ((p_msg = (NFC_HDR *)GKI_getpoolbuf (NFC_HAL_NCI_POOL_ID)) != NULL)
@@ -275,7 +280,7 @@
*******************************************************************************/
void HAL_NfcPowerCycle (void)
{
- NCI_TRACE_API0 ("HAL_NfcPowerCycle ()");
+ HAL_TRACE_API0 ("HAL_NfcPowerCycle ()");
/* Only handle if HAL is opened (stack cback is not-NULL) */
if (nfc_hal_cb.p_stack_cback)
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
index d52119a..77fdc25 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains function of the NFC unit to receive/process NFC VS
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
index c4d4a3f..2b4aba6 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,11 +16,13 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Vendor-specific handler for DM events
*
******************************************************************************/
+#include <string.h>
#include "nfc_hal_int.h"
#include "nfc_hal_post_reset.h"
#include "userial.h"
@@ -53,14 +55,6 @@
};
#define NCI_SET_FWFSM_OFFSET_ENABLE 3
-const UINT8 nfc_hal_dm_core_reset_cmd[NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET] =
-{
- NCI_MTS_CMD|NCI_GID_CORE,
- NCI_MSG_CORE_RESET,
- NCI_CORE_PARAM_SIZE_RESET,
- NCI_RESET_TYPE_RESET_CFG
-};
-
#define NCI_PROP_PARAM_SIZE_XTAL_INDEX 3 /* length of parameters in XTAL_INDEX CMD */
const UINT8 nfc_hal_dm_get_build_info_cmd[NCI_MSG_HDR_SIZE] =
@@ -77,7 +71,19 @@
NCI_MSG_GET_PATCH_VERSION,
0x00
};
-#define NCI_PATCH_INFO_OFFSET_NVMTYPE 35 /* NVM Type offset in patch info RSP */
+#define NCI_PATCH_INFO_VERSION_LEN 16 /* Length of patch version string in PATCH_INFO */
+
+/* Version string for BCM20791B3 */
+const UINT8 NFC_HAL_DM_BCM20791B3_STR[] = "20791B3";
+#define NFC_HAL_DM_BCM20791B3_STR_LEN (sizeof (NFC_HAL_DM_BCM20791B3_STR)-1)
+
+/* Version string for BCM20791B4 */
+const UINT8 NFC_HAL_DM_BCM20791B4_STR[] = "20791B4";
+#define NFC_HAL_DM_BCM20791B4_STR_LEN (sizeof (NFC_HAL_DM_BCM20791B4_STR)-1)
+
+/* Version string for BCM43341B0 */
+const UINT8 NFC_HAL_DM_BCM43341B0_STR[] = "43341B0";
+#define NFC_HAL_DM_BCM43341B0_STR_LEN (sizeof (NFC_HAL_DM_BCM43341B0_STR)-1)
/*****************************************************************************
** Extern function prototypes
@@ -86,6 +92,7 @@
extern UINT8 *p_nfc_hal_dm_pll_325_cfg;
extern UINT8 *p_nfc_hal_dm_start_up_cfg;
extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg;
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
/*****************************************************************************
** Local function prototypes
@@ -159,7 +166,7 @@
}
else
{
- NCI_TRACE_ERROR0 ("nfc_hal_dm_set_config ():Bad TLV");
+ HAL_TRACE_ERROR0 ("nfc_hal_dm_set_config ():Bad TLV");
}
GKI_freebuf (p_buff);
@@ -170,38 +177,6 @@
/*******************************************************************************
**
-** Function nfc_hal_dm_get_xtal_index
-**
-** Description Convert xtal frequency to index
-**
-** Returns xtal index
-**
-*******************************************************************************/
-static tNFC_HAL_XTAL_INDEX nfc_hal_dm_get_xtal_index (UINT16 xtal_freq)
-{
- tNFC_HAL_XTAL_INDEX xtal_index;
-
- switch (xtal_freq)
- {
- case 9600: xtal_index = NFC_HAL_XTAL_INDEX_9600; break;
- case 13000: xtal_index = NFC_HAL_XTAL_INDEX_13000; break;
- case 16200: xtal_index = NFC_HAL_XTAL_INDEX_16200; break;
- case 19200: xtal_index = NFC_HAL_XTAL_INDEX_19200; break;
- case 24000: xtal_index = NFC_HAL_XTAL_INDEX_24000; break;
- case 26000: xtal_index = NFC_HAL_XTAL_INDEX_26000; break;
- case 38400: xtal_index = NFC_HAL_XTAL_INDEX_38400; break;
- case 52000: xtal_index = NFC_HAL_XTAL_INDEX_52000; break;
- case 37400: xtal_index = NFC_HAL_XTAL_INDEX_37400; break;
- default : xtal_index = NFC_HAL_XTAL_INDEX_MAX;
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_get_xtal_index ():No matched index for %d", xtal_freq);
- break;
- }
-
- return xtal_index;
-}
-
-/*******************************************************************************
-**
** Function nfc_hal_dm_set_fw_fsm
**
** Description Enable or disable FW FSM
@@ -254,7 +229,7 @@
UINT8 *p, *p_end;
UINT16 len;
- NCI_TRACE_DEBUG0 ("nfc_hal_dm_send_startup_vsc ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_dm_send_startup_vsc ()");
/* VSC must have NCI header at least */
if (nfc_hal_cb.dev_cb.next_startup_vsc + NCI_MSG_HDR_SIZE - 1 <= *p_nfc_hal_dm_start_up_vsc_cfg)
@@ -277,7 +252,7 @@
}
}
- NCI_TRACE_ERROR0 ("nfc_hal_dm_send_startup_vsc (): Bad start-up VSC");
+ HAL_TRACE_ERROR0 ("nfc_hal_dm_send_startup_vsc (): Bad start-up VSC");
NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
@@ -294,10 +269,7 @@
*******************************************************************************/
void nfc_hal_dm_config_nfcc (void)
{
- UINT8 *p;
- UINT8 xtal_index;
-
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_config_nfcc (): next_dm_config = %d", nfc_hal_cb.dev_cb.next_dm_config);
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_config_nfcc (): next_dm_config = %d", nfc_hal_cb.dev_cb.next_dm_config);
if ((p_nfc_hal_dm_lptd_cfg[0]) && (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_LPTD))
{
@@ -319,23 +291,19 @@
if ((p_nfc_hal_dm_pll_325_cfg) && (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_PLL_325))
{
- xtal_index = nfc_hal_dm_get_xtal_index (nfc_post_reset_cb.dev_init_config.xtal_freq);
- if (xtal_index < NFC_HAL_XTAL_INDEX_MAX)
+ nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_START_UP;
+
+ if (nfc_hal_dm_set_config (NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN,
+ p_nfc_hal_dm_pll_325_cfg,
+ nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK)
{
- nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_START_UP;
- p = p_nfc_hal_dm_pll_325_cfg + (xtal_index * NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN);
- if (nfc_hal_dm_set_config (NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN,
- p,
- nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK)
- {
- return;
- }
- else
- {
- NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
- nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
- return;
- }
+ return;
+ }
+ else
+ {
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
+ nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
+ return;
}
}
@@ -399,6 +367,35 @@
/*******************************************************************************
**
+** Function: nfc_hal_dm_get_xtal_index
+**
+** Description: Return Xtal index and frequency
+**
+** Returns: tNFC_HAL_XTAL_INDEX
+**
+*******************************************************************************/
+tNFC_HAL_XTAL_INDEX nfc_hal_dm_get_xtal_index (UINT32 brcm_hw_id, UINT16 *p_xtal_freq)
+{
+ UINT8 xx;
+
+ HAL_TRACE_DEBUG1("nfc_hal_dm_get_xtal_index() brcm_hw_id:0x%x", brcm_hw_id);
+
+ for (xx = 0; xx < nfc_post_reset_cb.dev_init_config.num_xtal_cfg; xx++)
+ {
+ if (brcm_hw_id == nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].brcm_hw_id)
+ {
+ *p_xtal_freq = nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].xtal_freq;
+ return (nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].xtal_index);
+ }
+ }
+
+ /* if not found */
+ *p_xtal_freq = 0;
+ return (NFC_HAL_XTAL_INDEX_MAX);
+}
+
+/*******************************************************************************
+**
** Function nfc_hal_dm_set_xtal_freq_index
**
** Description Set crystal frequency index
@@ -411,37 +408,18 @@
UINT8 nci_brcm_xtal_index_cmd[NCI_MSG_HDR_SIZE + NCI_PROP_PARAM_SIZE_XTAL_INDEX];
UINT8 *p;
tNFC_HAL_XTAL_INDEX xtal_index;
+ UINT16 xtal_freq;
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_set_xtal_freq_index (): xtal_freq = %d", nfc_post_reset_cb.dev_init_config.xtal_freq);
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_set_xtal_freq_index (): brcm_hw_id = 0x%x", nfc_hal_cb.dev_cb.brcm_hw_id);
- xtal_index = nfc_hal_dm_get_xtal_index (nfc_post_reset_cb.dev_init_config.xtal_freq);
-
- switch (xtal_index)
- {
- case NFC_HAL_XTAL_INDEX_9600:
- case NFC_HAL_XTAL_INDEX_13000:
- case NFC_HAL_XTAL_INDEX_19200:
- case NFC_HAL_XTAL_INDEX_26000:
- case NFC_HAL_XTAL_INDEX_38400:
- case NFC_HAL_XTAL_INDEX_52000:
-
- {
- /* no need to set xtal index for these frequency */
- NCI_TRACE_DEBUG0 ("nfc_hal_dm_set_xtal_freq_index (): no need to set xtal index");
-
- nfc_post_reset_cb.dev_init_config.flags &= ~NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ;
- nfc_hal_dm_send_reset_cmd ();
- return;
- }
- break;
- }
+ xtal_index = nfc_hal_dm_get_xtal_index (nfc_hal_cb.dev_cb.brcm_hw_id, &xtal_freq);
p = nci_brcm_xtal_index_cmd;
UINT8_TO_STREAM (p, (NCI_MTS_CMD|NCI_GID_PROP));
UINT8_TO_STREAM (p, NCI_MSG_GET_XTAL_INDEX_FROM_DH);
UINT8_TO_STREAM (p, NCI_PROP_PARAM_SIZE_XTAL_INDEX);
UINT8_TO_STREAM (p, xtal_index);
- UINT16_TO_STREAM (p, nfc_post_reset_cb.dev_init_config.xtal_freq);
+ UINT16_TO_STREAM (p, xtal_freq);
NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_XTAL_SET);
@@ -450,19 +428,19 @@
/*******************************************************************************
**
-** Function nfc_hal_dm_send_reset_cmd
+** Function nfc_hal_dm_send_get_build_info_cmd
**
-** Description Send CORE RESET CMD
+** Description Send NCI_MSG_GET_BUILD_INFO CMD
**
** Returns void
**
*******************************************************************************/
-void nfc_hal_dm_send_reset_cmd (void)
+void nfc_hal_dm_send_get_build_info_cmd (void)
{
- /* Proceed with start up sequence: send CORE_RESET_CMD */
- NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_RESET);
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_BUILD_INFO);
- nfc_hal_dm_send_nci_cmd (nfc_hal_dm_core_reset_cmd, NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET, NULL);
+ /* get build information to find out HW */
+ nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_build_info_cmd, NCI_MSG_HDR_SIZE, NULL);
}
/*******************************************************************************
@@ -480,9 +458,13 @@
UINT8 reset_reason, reset_type;
UINT8 mt, pbf, gid, op_code;
UINT8 *p_old, old_gid, old_oid, old_mt;
+ UINT8 u8;
tNFC_HAL_NCI_CBACK *p_cback = NULL;
+ UINT8 chipverlen;
+ UINT8 chipverstr[NCI_SPD_HEADER_CHIPVER_LEN];
+ UINT16 xtal_freq;
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_proc_msg_during_init(): init state:%d", nfc_hal_cb.dev_cb.initializing_state);
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_proc_msg_during_init(): init state:%d", nfc_hal_cb.dev_cb.initializing_state);
p = (UINT8 *) (p_msg + 1) + p_msg->offset;
@@ -513,29 +495,29 @@
{
if (op_code == NCI_MSG_CORE_RESET)
{
- if (mt == NCI_MT_RSP)
+ if (mt == NCI_MT_NTF)
{
- if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_RE_INIT)
+ if ( (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_NFCC_ENABLE)
+ ||(nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_POST_XTAL_SET) )
{
- NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
- nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, nfc_hal_cb.p_reinit_cback);
+ /*
+ ** Core reset ntf in the following cases;
+ ** 1) after power up (raising REG_PU)
+ ** 2) after setting xtal index
+ ** Start pre-initializing NFCC
+ */
+ nfc_hal_main_stop_quick_timer (&nfc_hal_cb.timer);
+ nfc_hal_dm_pre_init_nfcc ();
}
else
{
- NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_BUILD_INFO);
-
- /* get build information to find out HW */
- nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_build_info_cmd, NCI_MSG_HDR_SIZE, NULL);
+ /* Core reset ntf after post-patch download, Call reset notification callback */
+ p++; /* Skip over param len */
+ STREAM_TO_UINT8 (reset_reason, p);
+ STREAM_TO_UINT8 (reset_type, p);
+ nfc_hal_prm_spd_reset_ntf (reset_reason, reset_type);
}
}
- else
- {
- /* Call reset notification callback */
- p++; /* Skip over param len */
- STREAM_TO_UINT8 (reset_reason, p);
- STREAM_TO_UINT8 (reset_type, p);
- nfc_hal_prm_spd_reset_ntf (reset_reason, reset_type);
- }
}
else if (p_cback)
{
@@ -555,11 +537,11 @@
{
if (op_code == (NCI_RSP_BIT|NCI_MSG_GET_XTAL_INDEX_FROM_DH))
{
- /* wait for crystal setting in NFCC */
- GKI_delay (100);
+ /* start timer in case that NFCC doesn't send RESET NTF after loading patch from NVM */
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_POST_XTAL_SET);
- /* Crytal frequency configured. Proceed with start up sequence: send CORE_RESET_CMD */
- nfc_hal_dm_send_reset_cmd ();
+ nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
+ ((p_nfc_hal_cfg->nfc_hal_post_xtal_timeout)*QUICK_TIMER_TICKS_PER_SEC)/1000);
}
}
else if ( (op_code == NFC_VS_GET_BUILD_INFO_EVT)
@@ -569,6 +551,41 @@
STREAM_TO_UINT32 (nfc_hal_cb.dev_cb.brcm_hw_id, p);
+ STREAM_TO_UINT8 (chipverlen, p);
+ memset (chipverstr, 0, NCI_SPD_HEADER_CHIPVER_LEN);
+
+ STREAM_TO_ARRAY (chipverstr, p, chipverlen);
+
+ if ((chipverlen == NFC_HAL_DM_BCM20791B3_STR_LEN) && (memcmp (NFC_HAL_DM_BCM20791B3_STR, chipverstr, NFC_HAL_DM_BCM20791B3_STR_LEN) == 0))
+ {
+ /* BCM2079B3 FW - eSE restarted for patch download */
+ nfc_hal_cb.hci_cb.hci_fw_workaround = TRUE;
+ nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = TRUE;
+ }
+ else if ( ((chipverlen == NFC_HAL_DM_BCM20791B4_STR_LEN) && (memcmp (NFC_HAL_DM_BCM20791B4_STR, chipverstr, NFC_HAL_DM_BCM20791B4_STR_LEN) == 0))
+ ||((chipverlen == NFC_HAL_DM_BCM43341B0_STR_LEN) && (memcmp (NFC_HAL_DM_BCM43341B0_STR, chipverstr, NFC_HAL_DM_BCM43341B0_STR_LEN) == 0)) )
+ {
+ /* BCM43341B0/BCM2079B4 FW - eSE restarted for patch download */
+ nfc_hal_cb.hci_cb.hci_fw_workaround = TRUE;
+ nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = FALSE;
+ }
+ else
+ {
+ /* BCM2079B5 FW - eSE not be restarted for patch download from UICC */
+ nfc_hal_cb.hci_cb.hci_fw_workaround = FALSE;
+ nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = FALSE;
+ }
+
+ /* if NFCC needs to set Xtal frequency before getting patch version */
+ if (nfc_hal_dm_get_xtal_index (nfc_hal_cb.dev_cb.brcm_hw_id, &xtal_freq) < NFC_HAL_XTAL_INDEX_MAX)
+ {
+ {
+ /* set Xtal index before getting patch version */
+ nfc_hal_dm_set_xtal_freq_index ();
+ return;
+ }
+ }
+
NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_PATCH_INFO);
nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, NULL);
@@ -576,12 +593,66 @@
else if ( (op_code == NFC_VS_GET_PATCH_VERSION_EVT)
&&(nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_PATCH_INFO) )
{
- p += NCI_PATCH_INFO_OFFSET_NVMTYPE;
+ /* Store NVM info to control block */
- NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
+ /* Skip over rsp len */
+ p++;
+
+ /* Get project id */
+ STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.project_id, p);
+
+ /* RFU */
+ p++;
+
+ /* Get chip version string */
+ STREAM_TO_UINT8 (u8, p);
+ p += NCI_PATCH_INFO_VERSION_LEN;
+
+ /* Get major/minor version */
+ STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.ver_major, p);
+ STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.ver_minor, p);
+
+ /* Skip over max_size and patch_max_size */
+ p += 4;
+
+ /* Get current lpm patch size */
+ STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.lpm_size, p);
+ STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.fpm_size, p);
+
+ /* clear all flags which may be set during previous initialization */
+ nfc_hal_cb.nvm_cb.flags = 0;
+
+ /* Set patch present flag */
+ if ((nfc_hal_cb.nvm_cb.fpm_size) || (nfc_hal_cb.nvm_cb.lpm_size))
+ nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_PATCH_PRESENT;
+
+ /* LPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
+ STREAM_TO_UINT8 (u8, p);
+ if (u8)
+ {
+ /* LPM patch in NVM fails CRC check */
+ nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_LPM_BAD;
+ }
+
+
+ /* FPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
+ STREAM_TO_UINT8 (u8, p);
+ if (u8)
+ {
+ /* FPM patch in NVM fails CRC check */
+ nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_FPM_BAD;
+ }
+
+ /* Check if downloading patch to RAM only (no NVM) */
+ STREAM_TO_UINT8 (nfc_hal_cb.nvm_cb.nvm_type, p);
+ if (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_NONE)
+ {
+ nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_NO_NVM;
+ }
/* let platform update baudrate or download patch */
- nfc_hal_post_reset_init (nfc_hal_cb.dev_cb.brcm_hw_id, *p);
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
+ nfc_hal_post_reset_init (nfc_hal_cb.dev_cb.brcm_hw_id, nfc_hal_cb.nvm_cb.nvm_type);
}
else if (p_cback)
{
@@ -591,7 +662,7 @@
}
else if (op_code == NFC_VS_SEC_PATCH_AUTH_EVT)
{
- NCI_TRACE_DEBUG0 ("signature!!");
+ HAL_TRACE_DEBUG0 ("signature!!");
nfc_hal_prm_nci_command_complete_cback ((tNFC_HAL_NCI_EVT) (op_code),
p_msg->len,
(UINT8 *) (p_msg + 1) + p_msg->offset);
@@ -613,11 +684,11 @@
NFC_HDR *p_buf;
UINT8 *ps;
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_send_nci_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_send_nci_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE)
{
- NCI_TRACE_ERROR0 ("nfc_hal_dm_send_nci_cmd(): no command window");
+ HAL_TRACE_ERROR0 ("nfc_hal_dm_send_nci_cmd(): no command window");
return;
}
@@ -714,11 +785,11 @@
{
NFC_HDR *p_buf;
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_send_bt_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_send_bt_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE)
{
- NCI_TRACE_ERROR0 ("nfc_hal_dm_send_bt_cmd(): no command window");
+ HAL_TRACE_ERROR0 ("nfc_hal_dm_send_bt_cmd(): no command window");
return;
}
@@ -757,7 +828,7 @@
*******************************************************************************/
void nfc_hal_dm_set_nfc_wake (UINT8 cmd)
{
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_set_nfc_wake () %s",
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_set_nfc_wake () %s",
(cmd == NFC_HAL_ASSERT_NFC_WAKE ? "ASSERT" : "DEASSERT"));
/*
@@ -790,7 +861,7 @@
{
BOOLEAN send_to_nfcc = FALSE;
- NCI_TRACE_DEBUG1 ("nfc_hal_dm_power_mode_execute () event = %d", event);
+ HAL_TRACE_DEBUG1 ("nfc_hal_dm_power_mode_execute () event = %d", event);
if (nfc_hal_cb.dev_cb.power_mode == NFC_HAL_POWER_MODE_FULL)
{
@@ -834,7 +905,7 @@
*******************************************************************************/
static void nci_brcm_lp_timeout_cback (void *p_tle)
{
- NCI_TRACE_DEBUG0 ("nci_brcm_lp_timeout_cback ()");
+ HAL_TRACE_DEBUG0 ("nci_brcm_lp_timeout_cback ()");
nfc_hal_dm_power_mode_execute (NFC_HAL_LP_TIMEOUT_EVT);
}
@@ -851,16 +922,22 @@
*******************************************************************************/
void nfc_hal_dm_pre_init_nfcc (void)
{
- NCI_TRACE_DEBUG0 ("nfc_hal_dm_pre_init_nfcc ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_dm_pre_init_nfcc ()");
- if (nfc_post_reset_cb.dev_init_config.flags & NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ)
+ /* if it was waiting for core reset notification after raising REG_PU */
+ if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_NFCC_ENABLE)
{
- nfc_hal_dm_set_xtal_freq_index ();
+ nfc_hal_dm_send_get_build_info_cmd ();
}
- else
+ /* if it was waiting for core reset notification after setting Xtal */
+ else if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_POST_XTAL_SET)
{
- /* Send RESET CMD if application registered callback for device initialization */
- nfc_hal_dm_send_reset_cmd ();
+ {
+ /* Core reset ntf after xtal setting indicating NFCC loaded patch from NVM */
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_PATCH_INFO);
+
+ nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, NULL);
+ }
}
}
@@ -876,7 +953,7 @@
*******************************************************************************/
void nfc_hal_dm_shutting_down_nfcc (void)
{
- NCI_TRACE_DEBUG0 ("nfc_hal_dm_shutting_down_nfcc ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_dm_shutting_down_nfcc ()");
nfc_hal_cb.dev_cb.initializing_state = NFC_HAL_INIT_STATE_CLOSING;
@@ -888,7 +965,7 @@
}
nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
- nfc_hal_cb.hci_cb.b_check_clear_all_pipe_cmd = FALSE;
+ nfc_hal_cb.hci_cb.hcp_conn_id = 0;
nfc_hal_cb.dev_cb.power_mode = NFC_HAL_POWER_MODE_FULL;
nfc_hal_cb.dev_cb.snooze_mode = NFC_HAL_LP_SNOOZE_MODE_NONE;
@@ -898,6 +975,7 @@
nfc_hal_main_stop_quick_timer (&nfc_hal_cb.dev_cb.lp_timer);
nfc_hal_main_stop_quick_timer (&nfc_hal_cb.prm.timer);
nfc_hal_main_stop_quick_timer (&nfc_hal_cb.hci_cb.hci_timer);
+ nfc_hal_main_stop_quick_timer (&nfc_hal_cb.timer);
}
/*******************************************************************************
@@ -912,7 +990,7 @@
*******************************************************************************/
void nfc_hal_dm_init (void)
{
- NCI_TRACE_DEBUG0 ("nfc_hal_dm_init ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_dm_init ()");
nfc_hal_cb.dev_cb.lp_timer.p_cback = nci_brcm_lp_timeout_cback;
@@ -920,6 +998,9 @@
nfc_hal_cb.hci_cb.hci_timer.p_cback = nfc_hal_hci_timeout_cback;
+ nfc_post_reset_cb.spd_nvm_detection_cur_count = 0;
+ nfc_post_reset_cb.spd_skip_on_power_cycle = FALSE;
+
}
/*******************************************************************************
@@ -933,7 +1014,7 @@
*******************************************************************************/
void HAL_NfcPreInitDone (tHAL_NFC_STATUS status)
{
- NCI_TRACE_DEBUG1 ("HAL_NfcPreInitDone () status=%d", status);
+ HAL_TRACE_DEBUG1 ("HAL_NfcPreInitDone () status=%d", status);
if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_APP_COMPLETE)
{
@@ -947,11 +1028,8 @@
**
** Function HAL_NfcReInit
**
-** Description This function is called to send an RESET and GET_PATCH_VERSION
-** command to NFCC.
-**
-** p_cback - The callback function to receive the command
-** status
+** Description This function is called to restart initialization after REG_PU
+** toggled because of failure to detect NVM type or download patchram.
**
** Note This function should be called only during the HAL init process
**
@@ -959,17 +1037,22 @@
** HAL_NFC_STATUS_FAILED otherwise
**
*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit (tNFC_HAL_NCI_CBACK *p_cback)
+tHAL_NFC_STATUS HAL_NfcReInit (void)
{
tHAL_NFC_STATUS status = HAL_NFC_STATUS_FAILED;
- NCI_TRACE_DEBUG1 ("HAL_NfcReInit () init st=0x%x", nfc_hal_cb.dev_cb.initializing_state);
+
+ HAL_TRACE_DEBUG1 ("HAL_NfcReInit () init st=0x%x", nfc_hal_cb.dev_cb.initializing_state);
if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_APP_COMPLETE)
{
- /* Proceed with start up sequence: send CORE_RESET_CMD */
- NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_RE_INIT);
- nfc_hal_cb.p_reinit_cback = p_cback;
+ {
+ /* Wait for NFCC to enable - Core reset notification */
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_NFCC_ENABLE);
- nfc_hal_dm_send_nci_cmd (nfc_hal_dm_core_reset_cmd, NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET, NULL);
+ /* NFCC Enable timeout */
+ nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
+ ((p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout)*QUICK_TIMER_TICKS_PER_SEC)/1000);
+ }
+
status = HAL_NFC_STATUS_OK;
}
return status;
@@ -1056,7 +1139,7 @@
UINT8 cmd[NFC_HAL_BT_HCI_CMD_HDR_SIZE + HCI_BRCM_WRITE_SLEEP_MODE_LENGTH];
UINT8 *p;
- NCI_TRACE_API1 ("HAL_NfcSetSnoozeMode (): snooze_mode = %d", snooze_mode);
+ HAL_TRACE_API1 ("HAL_NfcSetSnoozeMode (): snooze_mode = %d", snooze_mode);
nfc_hal_cb.dev_cb.new_snooze_mode = snooze_mode;
nfc_hal_cb.dev_cb.nfc_wake_active_mode = nfc_wake_active_mode;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c b/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
index f16aae7..68ee089 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2011-2012 Broadcom Corporation
+ * Copyright (C) 2011-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains compile-time configurable constants for BRCM HAL
@@ -28,7 +29,7 @@
/* the SetConfig at start up*/
UINT8 nfc_hal_start_up_cfg[] = {
- /* TLV len */ 28,
+ /* TLV len */ 31,
/* B0 */ NCI_PARAM_ID_EMVCO_ENABLE,
/* B1 */ 1,
/* B2 */ 1, /* (1 = enable emvco mode, 0 = disable emvco mode) Default = 0.*/
@@ -41,12 +42,12 @@
/* B9 */ 0x00,
/* B10*/ 0x00,
/* B11*/ 0x00,
- /* B12*/ 0x02,
+ /* B12*/ 0x0E,
/* B13*/ 0xE8,
- /* B14*/ 0x03,
- /* B15*/ 0x00,
+ /* B14*/ 0xF0,
+ /* B15*/ 0x55,
/* B16*/ 0x00,
- /* B17*/ 0x00,
+ /* B17*/ 0x0F, /* CE3 SO delay in sec */
/* B18*/ 0x00,
/* B19*/ 0x00,
/* B20*/ 0x00,
@@ -56,7 +57,10 @@
/* B24*/ 0x00,
/* B25*/ 0x00,
/* B26*/ 0x00,
- /* B27*/ 0x00
+ /* B27*/ 0x00,
+ /* B28*/ NCI_PARAM_ID_ACT_ORDER, /* polling sequence */
+ /* B29*/ 1,
+ /* B30*/ 1, /* (1 = active mode polling before passive, 0 = passive polling first) Default = 0.*/
};
UINT8 *p_nfc_hal_dm_start_up_cfg = (UINT8 *) nfc_hal_start_up_cfg;
@@ -112,22 +116,25 @@
UINT8 *p_nfc_hal_dm_lptd_cfg = (UINT8 *) &nfc_hal_dm_lptd_cfg[0];
-/* This must be configured before setting reader mode for 20791. No need to configure for 43341. */
-const UINT8 nfc_hal_dm_pll_325_cfg[NFC_HAL_XTAL_INDEX_MAX][NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN] =
+/*
+** NFCC has a table which has 9 XTAL frequencies: 9.6, 13, 16.2, 19.2, 24, 26, 38.4, 52 and 37.4 in MHz.
+** For these 9 xtal frequencies, host doesn't need to configure PLL325.
+** For 43341, host doesn't need to configure it at all.
+*/
+UINT8 *p_nfc_hal_dm_pll_325_cfg = NULL;
+
+tNFC_HAL_CFG nfc_hal_cfg =
{
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x9A, 0x99, 0x99, 0x99, 0xD7, 0x03, 0x00, 0x87, 0x04, 0x1C, 0x0F, 0x00, 0x0B, FALSE}, /* 9.6 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xEF, 0x90, 0xA8, 0x22, 0xD0, 0x03, 0x00, 0x64, 0x06, 0x26, 0x0F, 0x00, 0x08, FALSE}, /* 13.0 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x5B, 0xB0, 0x05, 0x5B, 0xD8, 0x03, 0x00, 0x50, 0x07, 0x30, 0x0F, 0x00, 0x06, FALSE}, /* 16.2 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xCD, 0xCC, 0xCC, 0xCC, 0xD7, 0x03, 0x00, 0x43, 0x09, 0x39, 0x0F, 0x00, 0x04, FALSE}, /* 19.2 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xD7, 0xA3, 0x70, 0x3D, 0xD0, 0x03, 0x00, 0x36, 0x0B, 0x47, 0x0F, 0x00, 0x03, FALSE}, /* 24.0 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x78, 0x48, 0x54, 0x11, 0xD0, 0x03, 0x00, 0x32, 0x0C, 0x4D, 0x0F, 0x00, 0x02, FALSE}, /* 26.0 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xCD, 0xCC, 0xCC, 0xCC, 0xD7, 0x03, 0x00, 0x43, 0x09, 0x39, 0x0F, 0x00, 0x04, TRUE}, /* 38.4 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x78, 0x48, 0x54, 0x11, 0xD0, 0x03, 0x00, 0x32, 0x0C, 0x4D, 0x0F, 0x00, 0x02, TRUE}, /* 52.0 MHz */
- {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x29, 0xB4, 0xE2, 0x9C, 0xCF, 0x03, 0x00, 0x45, 0x08, 0x37, 0x0F, 0x00, 0x04, TRUE} /* 37.4 MHz */
+ FALSE, /* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
+ (UINT16) NFC_HAL_NFCC_ENABLE_TIMEOUT, /* max time to wait for RESET NTF after setting REG_PU to high
+ ** If NFCC doesn't have NVM or cannot load patch from NVM without Xtal setting
+ ** then set it to short to optimize bootup time because NFCC cannot send RESET NTF.
+ ** Otherwise, it depends on NVM type and size of patchram.
+ */
+ (UINT16) NFC_HAL_NFCC_ENABLE_TIMEOUT, /* max time to wait for RESET NTF after setting Xtal frequency
+ ** It depends on NVM type and size of patchram.
+ */
+ (HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST) /* Set bit(s) for supported UICC(s) */
};
-UINT8 *p_nfc_hal_dm_pll_325_cfg = (UINT8 *) nfc_hal_dm_pll_325_cfg;
-
-
-/* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
-BOOLEAN nfc_hal_prm_nvm_required = FALSE;
+tNFC_HAL_CFG *p_nfc_hal_cfg= (tNFC_HAL_CFG *) &nfc_hal_cfg;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
index 3035123..af42d77 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Vendor-specific handler for HCI events
@@ -38,7 +39,19 @@
#define NFC_HAL_HCI_NFCC_RSP_TIMEOUT 3000
#endif
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET 0x0C
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET 0x32
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET 0x7F
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET 0xB4
+
+#define NFC_HAL_HCI_PIPE_VALID_MASK 0x80
+
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
+/****************************************************************************
+** Internal function prototypes
+****************************************************************************/
static void nfc_hal_hci_set_next_hci_netwk_config (UINT8 block);
+static void nfc_hal_hci_remove_dyn_pipe_to_uicc1 (void);
static void nfc_hal_hci_handle_nv_read (UINT8 block, tHAL_NFC_STATUS status, UINT16 size);
static void nfc_hal_hci_init_complete (tHAL_NFC_STATUS status);
static void nfc_hal_hci_vsc_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
@@ -57,7 +70,16 @@
switch (p_evt_data->hdr.event)
{
case NFC_HAL_HCI_RSP_NV_READ_EVT:
+ if ( (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf && (p_evt_data->nv_read.block == HC_F3_NV_BLOCK || p_evt_data->nv_read.block == HC_F4_NV_BLOCK))
+ ||(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf && p_evt_data->nv_read.block == HC_F2_NV_BLOCK) )
+ {
nfc_hal_hci_handle_nv_read (p_evt_data->nv_read.block, p_evt_data->nv_read.status, p_evt_data->nv_read.size);
+ }
+ else
+ {
+ /* Invalid block or no buffer, Ignore */
+ HAL_TRACE_ERROR1 ("nfc_hal_hci_evt_hdlr: No buffer for handling read NV block: 0x%02x", p_evt_data->nv_read.block);
+ }
break;
case NFC_HAL_HCI_RSP_NV_WRITE_EVT:
@@ -83,6 +105,13 @@
UINT8 *p_hci_netwk_cmd;
+ if (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_NONE)
+ {
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_enable (): No HCI NETWK CMD to send for NVM Type: 0x%02x", nfc_hal_cb.nvm_cb.nvm_type);
+ nfc_hal_hci_init_complete (HAL_NFC_STATUS_OK);
+ return;
+ }
+
if (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf)
{
p_hci_netwk_cmd = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE);
@@ -97,18 +126,36 @@
nfc_hal_cb.hci_cb.p_hci_netwk_info_buf = NULL;
}
- if ((p_hci_netwk_cmd = (UINT8 *) GKI_getbuf (NCI_MSG_HDR_SIZE + NFC_HAL_HCI_NETWK_INFO_SIZE)) == NULL)
+ if ( (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC0_HOST)
+ ||((p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC1_HOST) && ((!nfc_hal_cb.hci_cb.hci_fw_workaround) || (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_EEPROM))) )
{
- NCI_TRACE_ERROR0 ("nfc_hal_hci_enable: unable to allocate buffer for reading hci network info from nvram");
- nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
+ if ((p_hci_netwk_cmd = (UINT8 *) GKI_getbuf (NCI_MSG_HDR_SIZE + NFC_HAL_HCI_NETWK_INFO_SIZE)) == NULL)
+ {
+ HAL_TRACE_ERROR0 ("nfc_hal_hci_enable: unable to allocate buffer for reading hci network info from nvram");
+ nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
+ }
+ else
+ {
+ nfc_hal_cb.hci_cb.p_hci_netwk_info_buf = (UINT8 *) (p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
+ nfc_hal_cb.hci_cb.hci_netwk_config_block = 0;
+ if (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC0_HOST)
+ {
+ memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
+ nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F3_NV_BLOCK);
+ nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
+ }
+ else
+ {
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_enable (): Skip send F3 HCI NETWK CMD for UICC Mask: 0x%02x", p_nfc_hal_cfg->nfc_hal_hci_uicc_support);
+ nfc_hal_hci_set_next_hci_netwk_config (HC_F3_NV_BLOCK);
+ }
+
+ }
}
else
{
- nfc_hal_cb.hci_cb.p_hci_netwk_info_buf = (UINT8 *) (p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
- nfc_hal_cb.hci_cb.hci_netwk_config_block = 0;
- memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
- nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F3_NV_BLOCK);
- nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
+ HAL_TRACE_DEBUG2 ("nfc_hal_hci_enable (): No HCI NETWK CMD to send for UICC Mask: 0x%02x & NVM Type: 0x%02x", p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
+ nfc_hal_hci_set_next_hci_netwk_config (HC_F2_NV_BLOCK);
}
}
@@ -128,7 +175,7 @@
UINT8 target_handle;
UINT8 hci_netwk_cmd[1 + NFC_HAL_HCI_SESSION_ID_LEN];
- NCI_TRACE_DEBUG0 ("nfc_hal_hci_handle_hci_netwk_info()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_hci_handle_hci_netwk_info()");
/* skip NCI header byte0 (MT,GID), byte1 (OID) */
p += 2;
@@ -137,18 +184,22 @@
target_handle = *(UINT8 *) p;
if (target_handle == NFC_HAL_HCI_DH_TARGET_HANDLE)
- nfc_hal_nv_co_write (p, data_len,HC_DH_NV_BLOCK);
+ nfc_hal_nv_co_write (p, data_len, HC_F2_NV_BLOCK);
else if (target_handle == NFC_HAL_HCI_UICC0_TARGET_HANDLE)
{
- if (p[12] & 0x80)
+ if ( (!nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK) )
{
/* HCI Network notification received for UICC 0, Update nv data */
nfc_hal_nv_co_write (p, data_len,HC_F3_NV_BLOCK);
}
else
{
- NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[12]);
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET]);
hci_netwk_cmd[0] = NFC_HAL_HCI_UICC0_TARGET_HANDLE;
memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
nfc_hal_nv_co_write (hci_netwk_cmd, 1, HC_F3_NV_BLOCK);
@@ -156,14 +207,18 @@
}
else if (target_handle == NFC_HAL_HCI_UICC1_TARGET_HANDLE)
{
- if (p[12] & 0x80)
+ if ( (!nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+ ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK) )
{
/* HCI Network notification received for UICC 1, Update nv data */
nfc_hal_nv_co_write (p, data_len,HC_F4_NV_BLOCK);
}
else
{
- NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[12]);
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET]);
hci_netwk_cmd[0] = NFC_HAL_HCI_UICC1_TARGET_HANDLE;
/* Reset Session ID */
memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
@@ -174,14 +229,126 @@
/*******************************************************************************
**
-** Function nfc_hal_hci_handle_hcp_pkt
+** Function nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh
**
-** Description Handle HCP Packet
+** Description Fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to nfc task
**
** Returns None
**
*******************************************************************************/
-void nfc_hal_hci_handle_hcp_pkt (UINT8 *p_data)
+void nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh (void)
+{
+ NFC_HDR *p_msg;
+ UINT8 *p, *ps;
+
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh (): Fake ADM_NOTIFY_ALL_PIPE_CLEARED (0x%02x) from HAL", NFC_HAL_HCI_HOST_ID_UICC1);
+
+ /* Start of new message. Allocate a buffer for message */
+ if ((p_msg = (NFC_HDR *) GKI_getpoolbuf (NFC_HAL_NCI_POOL_ID)) != NULL)
+ {
+ /* Initialize NFC_HDR */
+ p_msg->len = NCI_DATA_HDR_SIZE + 0x03;
+ p_msg->event = 0;
+ p_msg->offset = 0;
+ p_msg->layer_specific = 0;
+
+ p = (UINT8 *) (p_msg + 1) + p_msg->offset;
+ ps = p;
+ NCI_DATA_BLD_HDR (p, nfc_hal_cb.hci_cb.hcp_conn_id, 0x03);
+ /* HCP header with ADMIN pipe id and chaining bit set */
+ *p++ = ((1 << 0x07) | (NFC_HAL_HCI_ADMIN_PIPE & 0x7F));
+ /* HCP Message header with Command type instruction and ADM_NOTIFY_ALL_PIPE_CLEARED command */
+ *p++ = ((NFC_HAL_HCI_COMMAND_TYPE << 6) | (NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED & 0x3F));
+ /* HCP Data with UICC1 host id */
+ *p = NFC_HAL_HCI_HOST_ID_UICC1;
+
+#ifdef DISP_NCI
+ DISP_NCI (ps, (UINT16) p_msg->len, TRUE);
+#endif
+ nfc_hal_send_nci_msg_to_nfc_task (p_msg);
+
+ }
+ else
+ {
+ HAL_TRACE_ERROR0 ("Unable to allocate buffer for faking ADM_NOTIFY_ALL_PIPE_CLEARED cmd from HAL to stack");
+ }
+}
+
+/*******************************************************************************
+**
+** Function nfc_hal_hci_handle_hcp_pkt_to_hc
+**
+** Description Handle HCP Packet from NFC task to Host Controller
+**
+** Returns FALSE to send the packet to host controller
+** TRUE to drop the packet and fake credit ntf for hcp connection
+**
+*******************************************************************************/
+BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data)
+{
+ UINT8 chaining_bit;
+ UINT8 pipe;
+ UINT8 type;
+ UINT8 inst;
+ UINT8 index;
+
+ HAL_TRACE_DEBUG0 ("nfc_hal_hci_handle_hcp_pkt_to_hc ()");
+
+ if ( (!nfc_hal_cb.hci_cb.hci_fw_workaround)
+ ||(nfc_hal_cb.nvm_cb.nvm_type != NCI_SPD_NVM_TYPE_UICC) )
+ {
+ /* Do nothing, just forward the stack hcp packet to host controller */
+ return FALSE;
+ }
+
+ chaining_bit = ((*p_data) >> 0x07) & 0x01;
+ pipe = (*p_data++) & 0x7F;
+
+ if ( (chaining_bit)
+ &&(pipe == NFC_HAL_HCI_ADMIN_PIPE) )
+ {
+ type = ((*p_data) >> 0x06) & 0x03;
+
+ if (type == NFC_HAL_HCI_COMMAND_TYPE)
+ {
+ inst = (*p_data++ & 0x3F);
+ if (inst == NFC_HAL_HCI_ANY_SET_PARAMETER)
+ {
+ index = *(p_data++);
+ if (index == NFC_HAL_HCI_WHITELIST_INDEX)
+ {
+ /* Set flag to fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to nfc task after
+ * response from host controller to set whitelist cmd
+ */
+ nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1 = TRUE;
+ }
+ }
+ }
+ else if (type == NFC_HAL_HCI_RESPONSE_TYPE)
+ {
+ if (nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1)
+ {
+ /* Got response to the fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd sent by HAL to nfc task */
+ nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1 = FALSE;
+ /* return TRUE to drop this hcp without forwarding to host controller */
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+/*******************************************************************************
+**
+** Function nfc_hal_hci_handle_hcp_pkt_from_hc
+**
+** Description Handle HCP Packet from Host controller to Terminal Host
+**
+** Returns None
+**
+*******************************************************************************/
+void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data)
{
UINT8 chaining_bit;
UINT8 pipe;
@@ -190,6 +357,9 @@
UINT8 hci_netwk_cmd[1 + NFC_HAL_HCI_SESSION_ID_LEN];
UINT8 source_host;
+ if (!nfc_hal_cb.hci_cb.hci_fw_workaround)
+ return;
+
chaining_bit = ((*p_data) >> 0x07) & 0x01;
pipe = (*p_data++) & 0x7F;
@@ -207,14 +377,14 @@
STREAM_TO_UINT8 (source_host, p_data);
- NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt(): Received Clear All pipe command for UICC: 0x%02x", source_host);
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt_from_hc (): Received ADM_NOTIFY_ALL_PIPE_CLEARED command for UICC: 0x%02x", source_host);
if (source_host == NFC_HAL_HCI_HOST_ID_UICC0)
{
hci_netwk_cmd[0] = NFC_HAL_HCI_UICC0_TARGET_HANDLE;
/* Reset Session ID */
memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
nfc_hal_nv_co_write (hci_netwk_cmd, 1, HC_F3_NV_BLOCK);
- NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt(): Sent command to reset nv file for block: 0x%02x", HC_F3_NV_BLOCK);
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt_from_hc (): Sent command to reset nv file for block: 0x%02x", HC_F3_NV_BLOCK);
}
else if (source_host == NFC_HAL_HCI_HOST_ID_UICC1)
{
@@ -222,10 +392,21 @@
/* Reset Session ID */
memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
nfc_hal_nv_co_write (hci_netwk_cmd, 1, HC_F4_NV_BLOCK);
- NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt(): Sent command to reset nv file for block: 0x%02x", HC_F4_NV_BLOCK);
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt_from_hc (): Sent command to reset nv file for block: 0x%02x", HC_F4_NV_BLOCK);
}
}
}
+ else if (type == NFC_HAL_HCI_RESPONSE_TYPE)
+ {
+ if (nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1)
+ {
+ /* NVM Type is UICC and got response from host controller
+ * to Set whitelist command. Now fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to
+ * NFC Task and then forward the whitelist cmd response
+ */
+ nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh ();
+ }
+ }
}
}
@@ -240,7 +421,6 @@
*******************************************************************************/
void nfc_hal_hci_handle_nv_read (UINT8 block, tHAL_NFC_STATUS status, UINT16 size)
{
- NFC_HDR *p_data = NULL;
UINT8 *p;
UINT8 *p_hci_netwk_info = NULL;
@@ -252,9 +432,11 @@
case HC_F3_NV_BLOCK:
case HC_F4_NV_BLOCK:
if ( (status != HAL_NFC_STATUS_OK)
- ||(size > NFC_HAL_HCI_NETWK_INFO_SIZE) )
+ ||(size > NFC_HAL_HCI_NETWK_INFO_SIZE)
+ ||(size < NFC_HAL_HCI_MIN_NETWK_INFO_SIZE)
+ ||((nfc_hal_cb.hci_cb.hci_fw_workaround) && (block == HC_F4_NV_BLOCK) && (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC)) )
{
- NCI_TRACE_DEBUG0 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set DEFAULT Configuration!");
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set DEFAULT Configuration for block:0x%02x", block);
memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[0] = (block == HC_F3_NV_BLOCK) ? NFC_HAL_HCI_UICC0_TARGET_HANDLE : NFC_HAL_HCI_UICC1_TARGET_HANDLE;
memset (&nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
@@ -264,15 +446,31 @@
p_hci_netwk_info = (UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf - NCI_MSG_HDR_SIZE;
break;
- case HC_DH_NV_BLOCK:
- if ( (status == HAL_NFC_STATUS_OK)
- &&(size <= NFC_HAL_HCI_DH_NETWK_INFO_SIZE) )
+ case HC_F2_NV_BLOCK:
+
+ if ( (status != HAL_NFC_STATUS_OK)
+ ||(size > NFC_HAL_HCI_DH_NETWK_INFO_SIZE)
+ ||(size < NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE) )
{
- p_hci_netwk_info = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE);
+ HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set DEFAULT Configuration for block:0x%02x", block);
+ memset (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, 0, NFC_HAL_HCI_DH_NETWK_INFO_SIZE);
+ nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[0] = NFC_HAL_HCI_DH_TARGET_HANDLE;
+ memset (&nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
+ size = NFC_HAL_HCI_DH_NETWK_INFO_SIZE;
+ p_hci_netwk_info = (UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE;
}
else
{
- NCI_TRACE_ERROR0 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Skip DH Configuration!");
+ if ((nfc_hal_cb.hci_cb.hci_fw_workaround) && (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC))
+ {
+ /* if NVM Type is UICC, then UICC1 will find session id mismatch when activated for patch download,
+ * and will remove pipes connected to DH even before DH is enabled, So DH will update NFCC
+ * control block by removing all dynamic pipes connected to UICC1 */
+
+ nfc_hal_hci_remove_dyn_pipe_to_uicc1 ();
+ size = NFC_HAL_HCI_DH_NETWK_INFO_SIZE;
+ }
+ p_hci_netwk_info = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE);
}
break;
@@ -280,8 +478,6 @@
return;
}
- if (p_hci_netwk_info)
- {
p = p_hci_netwk_info;
/* Send HCI Network ntf command using nv data */
NCI_MSG_BLD_HDR0 (p, NCI_MT_CMD, NCI_GID_PROP);
@@ -291,12 +487,48 @@
nfc_hal_dm_send_nci_cmd (p_hci_netwk_info, (UINT16) (NCI_MSG_HDR_SIZE + size), nfc_hal_hci_vsc_cback);
nfc_hal_cb.hci_cb.hci_netwk_config_block = block;
- }
- else
+}
+
+/*******************************************************************************
+**
+** Function nfc_hal_hci_remove_dyn_pipe_to_uicc1
+**
+** Description Prepare hci network command read from nv file removing
+** all pipes connected to UICC1
+**
+** Returns None
+**
+*******************************************************************************/
+void nfc_hal_hci_remove_dyn_pipe_to_uicc1 (void)
+{
+ UINT8 *p, *np;
+ UINT8 num_dyn_pipes = 0, new_num_dyn_pipes = 0;
+ UINT8 xx;
+ UINT8 source_host, dest_host, pipe_id;
+
+ p = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf + NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE);
+ np = p;
+ num_dyn_pipes = *(p - 1);
+
+ for (xx = 0; xx < num_dyn_pipes; xx++,p += NFC_HAL_HCI_PIPE_INFO_SIZE)
{
- /* Set next HCI Network configuration */
- nfc_hal_hci_set_next_hci_netwk_config (block);
+ source_host = *(UINT8 *) (p);
+ dest_host = *(UINT8 *) (p + 1);
+ pipe_id = *(UINT8 *) (p + 4);
+
+ if ((source_host != NFC_HAL_HCI_HOST_ID_UICC1) && (dest_host != NFC_HAL_HCI_HOST_ID_UICC1))
+ {
+ memcpy (np, p, NFC_HAL_HCI_PIPE_INFO_SIZE);
+ np += NFC_HAL_HCI_PIPE_INFO_SIZE;
+ new_num_dyn_pipes++;
+ }
}
+
+ memset ((UINT8 *) (np), 0, NFC_HAL_HCI_PIPE_INFO_SIZE * (20 - new_num_dyn_pipes));
+
+ /* Update number of pipes after removing pipes connected to UICC1 */
+ p = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf + NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE);
+ *(p - 1) = new_num_dyn_pipes;
}
/*******************************************************************************
@@ -327,6 +559,7 @@
}
NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
+
nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_OK);
}
@@ -346,16 +579,21 @@
switch (block)
{
case HC_F3_NV_BLOCK:
- /* Send command to read nvram data for 0xF4 */
- memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
- nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F4_NV_BLOCK);
- nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
- break;
+ if ( (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC1_HOST)
+ &&((!nfc_hal_cb.hci_cb.hci_fw_workaround) || (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_EEPROM)) )
+ {
+ /* Send command to read nvram data for 0xF4 */
+ memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
+ nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F4_NV_BLOCK);
+ nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
+ break;
+ }
+ HAL_TRACE_DEBUG2 ("nfc_hal_hci_set_next_hci_netwk_config (): Skip send F4 HCI NETWK CMD for UICC Mask: 0x%02x & NVM Type: 0x%02x", p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
case HC_F4_NV_BLOCK:
if ((p_hci_netwk_cmd = (UINT8 *) GKI_getbuf (NCI_MSG_HDR_SIZE + NFC_HAL_HCI_DH_NETWK_INFO_SIZE)) == NULL)
{
- NCI_TRACE_ERROR0 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer for reading hci network info from nvram");
+ HAL_TRACE_ERROR0 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer for reading hci network info from nvram");
nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
}
else
@@ -363,17 +601,17 @@
nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf = (UINT8 *) (p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
/* Send command to read nvram data for 0xF2 */
memset (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, 0, NFC_HAL_HCI_DH_NETWK_INFO_SIZE);
- nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, NFC_HAL_HCI_DH_NETWK_INFO_SIZE, HC_DH_NV_BLOCK);
+ nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, NFC_HAL_HCI_DH_NETWK_INFO_SIZE, HC_F2_NV_BLOCK);
nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
}
break;
- case HC_DH_NV_BLOCK:
+ case HC_F2_NV_BLOCK:
nfc_hal_hci_init_complete (HAL_NFC_STATUS_OK);
break;
default:
- NCI_TRACE_ERROR1 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer to send VSC 0x%02x", block);
+ HAL_TRACE_ERROR1 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer to send VSC 0x%02x", block);
/* Brcm initialization failed */
nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
break;
@@ -407,7 +645,7 @@
{
case HC_F3_NV_BLOCK:
case HC_F4_NV_BLOCK:
- case HC_DH_NV_BLOCK:
+ case HC_F2_NV_BLOCK:
nfc_hal_hci_set_next_hci_netwk_config (nfc_hal_cb.hci_cb.hci_netwk_config_block);
break;
@@ -430,11 +668,11 @@
{
TIMER_LIST_ENT *p_tlent = (TIMER_LIST_ENT *)p_tle;
- NCI_TRACE_DEBUG0 ("nfc_hal_hci_timeout_cback ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_hci_timeout_cback ()");
if (p_tlent->event == NFC_HAL_HCI_VSC_TIMEOUT_EVT)
{
- NCI_TRACE_ERROR0 ("nfc_hal_hci_timeout_cback: Timeout - NFC HAL HCI BRCM Initialization Failed!");
+ HAL_TRACE_ERROR0 ("nfc_hal_hci_timeout_cback: Timeout - NFC HAL HCI BRCM Initialization Failed!");
nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
}
}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
index d9e999e..6c600bf 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,12 +16,14 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the call-in functions for NFC HAL HCI
*
******************************************************************************/
#include <string.h>
+#include "gki.h"
#include "nfc_hal_api.h"
#include "nfc_hal_int.h"
#include "nfc_hal_nv_ci.h"
@@ -29,7 +31,7 @@
/*******************************************************************************
**
-** Function nfa_nv_ci_read
+** Function nfc_hal_nv_ci_read
**
** Description call-in function for non volatile memory read acess
**
@@ -63,7 +65,7 @@
/*******************************************************************************
**
-** Function nfa_nv_ci_write
+** Function nfc_hal_nv_ci_write
**
** Description call-in function for non volatile memory write acess
**
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_main.c b/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
index 82e696f..a3fb215 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Functions for handling NFC HAL NCI Transport events
@@ -23,6 +24,7 @@
******************************************************************************/
#include <string.h>
#include "nfc_hal_int.h"
+#include "nfc_hal_post_reset.h"
#include "userial.h"
#include "upio.h"
@@ -43,11 +45,13 @@
tNFC_HAL_CB nfc_hal_cb;
#endif
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
/****************************************************************************
** Internal function prototypes
****************************************************************************/
static void nfc_hal_main_userial_cback (tUSERIAL_PORT port, tUSERIAL_EVT evt, tUSERIAL_EVT_DATA *p_data);
static void nfc_hal_main_handle_terminate (void);
+static void nfc_hal_main_timeout_cback (void *p_tle);
#if (NFC_HAL_DEBUG == TRUE)
@@ -55,14 +59,14 @@
{
"IDLE", /* Initialization is done */
"W4_XTAL_SET", /* Waiting for crystal setting rsp */
- "W4_RESET", /* Waiting for reset rsp */
+ "POST_XTAL_SET", /* Waiting for reset ntf after xtal set */
+ "W4_NFCC_ENABLE", /* Waiting for reset ntf atter REG_PU up */
"W4_BUILD_INFO", /* Waiting for build info rsp */
"W4_PATCH_INFO", /* Waiting for patch info rsp */
"W4_APP_COMPL", /* Waiting for complete from application */
"W4_POST_INIT", /* Waiting for complete of post init */
"W4_CONTROL", /* Waiting for control release */
"W4_PREDISC", /* Waiting for complete of prediscover */
- "W4_RE_INIT", /* Waiting for reset rsp on ReInit */
"CLOSING" /* Shutting down */
};
#endif
@@ -83,6 +87,7 @@
nfc_hal_cb.ncit_cb.nci_ctrl_size = NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE;
nfc_hal_cb.trace_level = NFC_HAL_INITIAL_TRACE_LEVEL;
+ nfc_hal_cb.timer.p_cback = nfc_hal_main_timeout_cback;
}
/*******************************************************************************
@@ -115,8 +120,14 @@
USERIAL_Open (USERIAL_NFC_PORT, &open_cfg, nfc_hal_main_userial_cback);
- /* notify transport openned */
- nfc_hal_dm_pre_init_nfcc ();
+ {
+ /* Wait for NFCC to enable - Core reset notification */
+ NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_NFCC_ENABLE);
+
+ /* NFCC Enable timeout */
+ nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
+ ((p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout)*QUICK_TIMER_TICKS_PER_SEC)/1000);
+ }
}
/*******************************************************************************
@@ -157,7 +168,7 @@
}
else if (evt == USERIAL_ERR_EVT)
{
- NCI_TRACE_ERROR0 ("nfc_hal_main_userial_cback: USERIAL_ERR_EVT. Notifying NFC_TASK of transport error");
+ HAL_TRACE_ERROR0 ("nfc_hal_main_userial_cback: USERIAL_ERR_EVT. Notifying NFC_TASK of transport error");
if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE)
{
nfc_hal_main_stop_quick_timer (&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
@@ -170,11 +181,11 @@
}
else if (evt == USERIAL_WAKEUP_EVT)
{
- NCI_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: USERIAL_WAKEUP_EVT: %d", p_data->sigs);
+ HAL_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: USERIAL_WAKEUP_EVT: %d", p_data->sigs);
}
else
{
- NCI_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: unhandled userial evt: %i", evt);
+ HAL_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: unhandled userial evt: %i", evt);
}
}
@@ -189,7 +200,7 @@
*******************************************************************************/
void nfc_hal_main_pre_init_done (tHAL_NFC_STATUS status)
{
- NCI_TRACE_DEBUG1 ("nfc_hal_main_pre_init_done () status = %d", status);
+ HAL_TRACE_DEBUG1 ("nfc_hal_main_pre_init_done () status = %d", status);
if (status != HAL_NFC_STATUS_OK)
{
@@ -216,7 +227,7 @@
{
TIMER_LIST_ENT *p_tlent = (TIMER_LIST_ENT *) p_tle;
- NCI_TRACE_DEBUG0 ("nfc_hal_main_timeout_cback ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_main_timeout_cback ()");
switch (p_tlent->event)
{
@@ -224,8 +235,13 @@
nfc_hal_main_open_transport ();
break;
+ case NFC_HAL_TTYPE_NFCC_ENABLE:
+ /* NFCC should have enabled now, notify transport openned */
+ nfc_hal_dm_pre_init_nfcc ();
+ break;
+
default:
- NCI_TRACE_DEBUG1 ("nfc_hal_main_timeout_cback: unhandled timer event (0x%04x)", p_tlent->event);
+ HAL_TRACE_DEBUG1 ("nfc_hal_main_timeout_cback: unhandled timer event (0x%04x)", p_tlent->event);
break;
}
}
@@ -373,6 +389,76 @@
/*******************************************************************************
**
+** Function nfc_hal_send_nci_msg_to_nfc_task
+**
+** Description This function is called to send nci message to nfc task
+**
+** Returns void
+**
+*******************************************************************************/
+void nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg)
+{
+#ifdef NFC_HAL_SHARED_GKI
+ /* Using shared NFC/HAL GKI resources - send message buffer directly to NFC_TASK for processing */
+ p_msg->event = BT_EVT_TO_NFC_NCI;
+ GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg);
+#else
+ /* Send NCI message to the stack */
+ nfc_hal_cb.p_data_cback (p_msg->len, (UINT8 *) ((p_msg + 1)
+ + p_msg->offset));
+ GKI_freebuf(p_msg);
+#endif
+}
+
+/*******************************************************************************
+**
+** Function nfc_hal_send_credit_ntf_for_cid
+**
+** Description This function is called to send credit ntf
+** for the specified connection id to nfc task
+**
+** Returns void
+**
+*******************************************************************************/
+static void nfc_hal_send_credit_ntf_for_cid (UINT8 cid)
+{
+ NFC_HDR *p_msg;
+ UINT8 *p, *ps;
+
+ /* Start of new message. Allocate a buffer for message */
+ if ((p_msg = (NFC_HDR *) GKI_getpoolbuf (NFC_HAL_NCI_POOL_ID)) != NULL)
+ {
+ /* Initialize NFC_HDR */
+ p_msg->len = NCI_DATA_HDR_SIZE + 0x03;
+ p_msg->event = 0;
+ p_msg->offset = 0;
+ p_msg->layer_specific = 0;
+
+ p = (UINT8 *) (p_msg + 1) + p_msg->offset;
+ ps = p;
+ NCI_MSG_BLD_HDR0(p, NCI_MT_NTF, NCI_GID_CORE);
+ NCI_MSG_BLD_HDR1(p, NCI_MSG_CORE_CONN_CREDITS);
+ UINT8_TO_STREAM (p, 0x03);
+
+ /* Number of credit entries */
+ *p++ = 0x01;
+ /* Connection id of the credit ntf */
+ *p++ = cid;
+ /* Number of credits */
+ *p = 0x01;
+#ifdef DISP_NCI
+ DISP_NCI (ps, (UINT16) p_msg->len, TRUE);
+#endif
+ nfc_hal_send_nci_msg_to_nfc_task (p_msg);
+ }
+ else
+ {
+ HAL_TRACE_ERROR0 ("Unable to allocate buffer for Sending credit ntf to stack");
+ }
+}
+
+/*******************************************************************************
+**
** Function nfc_hal_main_send_message
**
** Description This function is calledto send an NCI message.
@@ -382,13 +468,14 @@
*******************************************************************************/
static void nfc_hal_main_send_message (NFC_HDR *p_msg)
{
- UINT8 *ps;
+ UINT8 *ps, *pp, cid, pbf;
UINT16 len = p_msg->len;
+ UINT16 data_len;
#ifdef DISP_NCI
UINT8 delta;
#endif
- NCI_TRACE_DEBUG1 ("nfc_hal_main_send_message() ls:0x%x", p_msg->layer_specific);
+ HAL_TRACE_DEBUG1 ("nfc_hal_main_send_message() ls:0x%x", p_msg->layer_specific);
if ( (p_msg->layer_specific == NFC_HAL_WAIT_RSP_CMD)
||(p_msg->layer_specific == NFC_HAL_WAIT_RSP_VSC) )
{
@@ -404,11 +491,35 @@
/* send this packet to transport */
ps = (UINT8 *) (p_msg + 1) + p_msg->offset;
+ pp = ps + 1;
#ifdef DISP_NCI
delta = p_msg->len - len;
DISP_NCI (ps + delta, (UINT16) (p_msg->len - delta), FALSE);
#endif
- USERIAL_Write (USERIAL_NFC_PORT, ps, p_msg->len);
+ if (nfc_hal_cb.hci_cb.hcp_conn_id)
+ {
+ NCI_DATA_PRS_HDR(pp, pbf, cid, data_len);
+ if (cid == nfc_hal_cb.hci_cb.hcp_conn_id)
+ {
+ if (nfc_hal_hci_handle_hcp_pkt_to_hc (pp))
+ {
+ HAL_TRACE_DEBUG0 ("nfc_hal_main_send_message() - Drop rsp to Fake cmd, Fake credit ntf");
+ GKI_freebuf (p_msg);
+ nfc_hal_send_credit_ntf_for_cid (cid);
+ return;
+ }
+ }
+
+ }
+ /* check low power mode state */
+ if (nfc_hal_dm_power_mode_execute (NFC_HAL_LP_TX_DATA_EVT))
+ {
+ USERIAL_Write (USERIAL_NFC_PORT, ps, p_msg->len);
+ }
+ else
+ {
+ HAL_TRACE_ERROR0 ("nfc_hal_main_send_message(): drop data in low power mode");
+ }
GKI_freebuf (p_msg);
}
}
@@ -431,7 +542,7 @@
NFC_HDR *p_msg;
BOOLEAN free_msg;
- NCI_TRACE_DEBUG0 ("NFC_HAL_TASK started");
+ HAL_TRACE_DEBUG0 ("NFC_HAL_TASK started");
/* Main loop */
while (TRUE)
@@ -441,7 +552,7 @@
/* Handle NFC_HAL_TASK_EVT_INITIALIZE (for initializing NCI transport) */
if (event & NFC_HAL_TASK_EVT_INITIALIZE)
{
- NCI_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_INITIALIZE signal. Opening NFC transport...");
+ HAL_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_INITIALIZE signal. Opening NFC transport...");
nfc_hal_main_open_transport ();
}
@@ -449,28 +560,30 @@
/* Check for terminate event */
if (event & NFC_HAL_TASK_EVT_TERMINATE)
{
- NCI_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_TERMINATE");
+ HAL_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_TERMINATE");
nfc_hal_main_handle_terminate ();
/* Close uart */
USERIAL_Close (USERIAL_NFC_PORT);
- nfc_hal_cb.p_stack_cback (HAL_NFC_CLOSE_CPLT_EVT, HAL_NFC_STATUS_OK);
- nfc_hal_cb.p_stack_cback = NULL;
+ if (nfc_hal_cb.p_stack_cback)
+ {
+ nfc_hal_cb.p_stack_cback (HAL_NFC_CLOSE_CPLT_EVT, HAL_NFC_STATUS_OK);
+ nfc_hal_cb.p_stack_cback = NULL;
+ }
continue;
}
/* Check for power cycle event */
if (event & NFC_HAL_TASK_EVT_POWER_CYCLE)
{
- NCI_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_POWER_CYCLE");
+ HAL_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_POWER_CYCLE");
nfc_hal_main_handle_terminate ();
/* Close uart */
USERIAL_Close (USERIAL_NFC_PORT);
/* power cycle timeout */
- nfc_hal_cb.timer.p_cback = nfc_hal_main_timeout_cback;
nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_POWER_CYCLE,
(NFC_HAL_POWER_CYCLE_DELAY*QUICK_TIMER_TICKS_PER_SEC)/1000);
continue;
@@ -549,15 +662,13 @@
if (nfc_hal_nci_preproc_rx_nci_msg (nfc_hal_cb.ncit_cb.p_rcv_msg))
{
/* Send NCI message to the stack */
- nfc_hal_cb.p_data_cback(nfc_hal_cb.ncit_cb.p_rcv_msg->len, (UINT8 *)((nfc_hal_cb.ncit_cb.p_rcv_msg + 1)
- + nfc_hal_cb.ncit_cb.p_rcv_msg->offset));
-
+ nfc_hal_send_nci_msg_to_nfc_task (nfc_hal_cb.ncit_cb.p_rcv_msg);
}
- }
-
- if (nfc_hal_cb.ncit_cb.p_rcv_msg)
- {
- GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
+ else
+ {
+ if (nfc_hal_cb.ncit_cb.p_rcv_msg)
+ GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
+ }
nfc_hal_cb.ncit_cb.p_rcv_msg = NULL;
}
}
@@ -571,7 +682,7 @@
}
}
- NCI_TRACE_DEBUG0 ("nfc_hal_main_task terminated");
+ HAL_TRACE_DEBUG0 ("nfc_hal_main_task terminated");
GKI_exit_task (GKI_get_taskid ());
return 0;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
index 977d7a4..87c96ee 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains function of the NFC unit to receive/process NCI/VS
@@ -91,7 +92,7 @@
if (nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific != p_msg->layer_specific)
{
/* check if these fragments are of the same NCI message */
- NCI_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() - different messages 0x%x, 0x%x!!", nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific, p_msg->layer_specific);
+ HAL_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() - different messages 0x%x, 0x%x!!", nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific, p_msg->layer_specific);
nfc_hal_cb.ncit_cb.nci_ras |= NFC_HAL_NCI_RAS_ERROR;
}
else if (nfc_hal_cb.ncit_cb.nci_ras == 0)
@@ -116,7 +117,7 @@
else
{
nfc_hal_cb.ncit_cb.nci_ras |= NFC_HAL_NCI_RAS_TOO_BIG;
- NCI_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() buffer overrun (%d + %d)!!", nfc_hal_cb.ncit_cb.p_frag_msg->len, p_msg->len);
+ HAL_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() buffer overrun (%d + %d)!!", nfc_hal_cb.ncit_cb.p_frag_msg->len, p_msg->len);
}
}
/* we are done with this new fragment, free it */
@@ -141,7 +142,7 @@
if (nfc_hal_cb.ncit_cb.nci_ras & NFC_HAL_NCI_RAS_ERROR)
{
/* NFCC reported NCI fragments for different NCI messages and this is the last fragment - drop it */
- NCI_TRACE_ERROR0 ("nfc_hal_nci_assemble_nci_msg() clearing NCI_RAS_ERROR");
+ HAL_TRACE_ERROR0 ("nfc_hal_nci_assemble_nci_msg() clearing NCI_RAS_ERROR");
GKI_freebuf (p_msg);
p_msg = NULL;
}
@@ -200,7 +201,7 @@
}
else
{
- NCI_TRACE_ERROR0 ("Unable to allocate buffer for incoming NCI message.");
+ HAL_TRACE_ERROR0 ("Unable to allocate buffer for incoming NCI message.");
}
p_cb->rcv_len--;
break;
@@ -296,7 +297,7 @@
}
else
{
- NCI_TRACE_ERROR0 ("[nfc] Unable to allocate buffer for incoming NCI message.");
+ HAL_TRACE_ERROR0 ("[nfc] Unable to allocate buffer for incoming NCI message.");
}
p_cb->rcv_len--;
break;
@@ -321,7 +322,7 @@
GKI_freebuf (p_cb->p_rcv_msg);
p_cb->p_rcv_msg = NULL;
- NCI_TRACE_ERROR0 ("Invalid length for incoming BT HCI message.");
+ HAL_TRACE_ERROR0 ("Invalid length for incoming BT HCI message.");
}
/* Message length is valid */
@@ -364,13 +365,13 @@
}
/* If we received entire message */
- if (msg_received)
+#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
+ if (msg_received && p_cb->p_rcv_msg)
{
/* Display protocol trace message */
-#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
DispHciEvt (p_cb->p_rcv_msg);
-#endif
}
+#endif
return (msg_received);
}
@@ -399,8 +400,8 @@
if (nfc_hal_cb.ncit_cb.p_rcv_msg)
{
p_msg = nfc_hal_cb.ncit_cb.p_rcv_msg;
- NCI_TRACE_DEBUG1 ("nfc_hal_nci_proc_rx_bt_msg (): GOT an BT msgs init_sta:%d", nfc_hal_cb.dev_cb.initializing_state);
- NCI_TRACE_DEBUG2 ("event: 0x%x, wait_rsp:0x%x", p_msg->event, nfc_hal_cb.ncit_cb.nci_wait_rsp);
+ HAL_TRACE_DEBUG1 ("nfc_hal_nci_proc_rx_bt_msg (): GOT an BT msgs init_sta:%d", nfc_hal_cb.dev_cb.initializing_state);
+ HAL_TRACE_DEBUG2 ("event: 0x%x, wait_rsp:0x%x", p_msg->event, nfc_hal_cb.ncit_cb.nci_wait_rsp);
/* increase the cmd window here */
if (nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_PROP)
{
@@ -491,7 +492,7 @@
}
else
{
- NCI_TRACE_ERROR1 ("Unknown packet type drop this byte 0x%x", byte);
+ HAL_TRACE_ERROR1 ("Unknown packet type drop this byte 0x%x", byte);
}
}
else if (p_cb->rcv_state <= NFC_HAL_RCV_NCI_PAYLOAD_ST)
@@ -527,7 +528,7 @@
UINT8 payload_len;
UINT16 data_len;
- NCI_TRACE_DEBUG0 ("nfc_hal_nci_preproc_rx_nci_msg()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_nci_preproc_rx_nci_msg()");
/* if initializing BRCM NFCC */
if (nfc_hal_cb.dev_cb.initializing_state != NFC_HAL_INIT_STATE_IDLE)
@@ -546,12 +547,12 @@
if (mt == NCI_MT_DATA)
{
- if (nfc_hal_cb.hci_cb.b_check_clear_all_pipe_cmd)
+ if (nfc_hal_cb.hci_cb.hcp_conn_id)
{
NCI_DATA_PRS_HDR(pp, pbf, cid, data_len);
if (cid == nfc_hal_cb.hci_cb.hcp_conn_id)
{
- nfc_hal_hci_handle_hcp_pkt (pp);
+ nfc_hal_hci_handle_hcp_pkt_from_hc (pp);
}
}
@@ -579,7 +580,7 @@
p += 5; /* skip RF disc id, interface, protocol, tech&mode, payload size */
if (*p > nfc_hal_cb.max_rf_credits)
{
- NCI_TRACE_DEBUG2 ("RfDataCredits %d->%d", *p, nfc_hal_cb.max_rf_credits);
+ HAL_TRACE_DEBUG2 ("RfDataCredits %d->%d", *p, nfc_hal_cb.max_rf_credits);
*p = nfc_hal_cb.max_rf_credits;
}
}
@@ -599,7 +600,6 @@
p++; /* skip buff size */
p++; /* num of buffers */
nfc_hal_cb.hci_cb.hcp_conn_id = *p;
- nfc_hal_cb.hci_cb.b_check_clear_all_pipe_cmd = TRUE;
}
}
}
@@ -630,7 +630,6 @@
void nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg)
{
UINT8 *p;
- BOOLEAN send_to_nfcc = TRUE;
UINT8 hcit;
/* add packet type in front of NCI header */
@@ -644,7 +643,7 @@
}
else
{
- NCI_TRACE_ERROR0 ("nfc_hal_nci_add_nfc_pkt_type () : No space for packet type");
+ HAL_TRACE_ERROR0 ("nfc_hal_nci_add_nfc_pkt_type () : No space for packet type");
hcit = HCIT_TYPE_NFC;
USERIAL_Write (USERIAL_NFC_PORT, &hcit, 1);
}
@@ -719,7 +718,9 @@
UINT8 nci_ctrl_size = nfc_hal_cb.ncit_cb.nci_ctrl_size;
UINT8 delta = 0;
- nci_brcm_check_cmd_create_hcp_connection ((NFC_HDR*) p_buf);
+ if ( (nfc_hal_cb.hci_cb.hcp_conn_id == 0)
+ &&(nfc_hal_cb.nvm_cb.nvm_type != NCI_SPD_NVM_TYPE_NONE) )
+ nci_brcm_check_cmd_create_hcp_connection ((NFC_HDR*) p_buf);
/* check low power mode state */
continue_to_process = nfc_hal_dm_power_mode_execute (NFC_HAL_LP_TX_DATA_EVT);
@@ -745,7 +746,7 @@
memcpy (hdr, ps, NCI_MSG_HDR_SIZE);
while (buf_len > max_len)
{
- NCI_TRACE_DEBUG2 ("buf_len (%d) > max_len (%d)", buf_len, max_len);
+ HAL_TRACE_DEBUG2 ("buf_len (%d) > max_len (%d)", buf_len, max_len);
/* the NCI command is bigger than the NFCC Max Control Packet Payload Length
* fragment the command */
@@ -772,7 +773,7 @@
/* adjust the len and offset to reflect that part of the command is already sent */
buf_len -= nci_ctrl_size;
offset += nci_ctrl_size;
- NCI_TRACE_DEBUG2 ("p_buf->len: %d buf_len (%d)", p_buf->len, buf_len);
+ HAL_TRACE_DEBUG2 ("p_buf->len: %d buf_len (%d)", p_buf->len, buf_len);
p_buf->len = buf_len;
p_buf->offset = offset;
pd = (UINT8 *) (p_buf + 1) + p_buf->offset;
@@ -782,7 +783,7 @@
*pd = (UINT8) (p_buf->len - NCI_MSG_HDR_SIZE);
}
- NCI_TRACE_DEBUG1 ("p_buf->len: %d", p_buf->len);
+ HAL_TRACE_DEBUG1 ("p_buf->len: %d", p_buf->len);
/* add NCI packet type in front of message */
nfc_hal_nci_add_nfc_pkt_type (p_buf);
@@ -812,7 +813,7 @@
{
TIMER_LIST_ENT *p_tlent = (TIMER_LIST_ENT *)p_tle;
- NCI_TRACE_DEBUG0 ("nfc_hal_nci_cmd_timeout_cback ()");
+ HAL_TRACE_DEBUG0 ("nfc_hal_nci_cmd_timeout_cback ()");
nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
@@ -866,6 +867,6 @@
*******************************************************************************/
void HAL_NfcSetMaxRfDataCredits (UINT8 max_credits)
{
- NCI_TRACE_DEBUG2 ("HAL_NfcSetMaxRfDataCredits %d->%d", nfc_hal_cb.max_rf_credits, max_credits);
+ HAL_TRACE_DEBUG2 ("HAL_NfcSetMaxRfDataCredits %d->%d", nfc_hal_cb.max_rf_credits, max_credits);
nfc_hal_cb.max_rf_credits = max_credits;
}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
index d928884..862cdec 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
@@ -15,6 +15,7 @@
* limitations under the License.
*
******************************************************************************/
+
#include <string.h>
#include "nfc_hal_int.h"
#include "userial.h"
@@ -28,16 +29,10 @@
#define NFC_HAL_PRM_FLAGS_RFU 0x02 /* Reserved for future use */
#define NFC_HAL_PRM_FLAGS_SIGNATURE_SENT 0x04 /* Signature sent to NFCC */
#define NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED 0x08 /* PreI2C patch required */
-#define NFC_HAL_PRM_FLAGS_NO_NVM 0x10 /* Not NVM available (patch downloaded to SRAM) */
-#define NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF 0x20 /* Support RESET_NTF from NFCC after sending signature */
-#define NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED 0x40 /* FPM patch in NVM failed CRC check */
-#define NFC_HAL_PRM_FLAGS_NVM_LPM_CORRUPTED 0x80 /* LPM patch in NVM failed CRC check */
+#define NFC_HAL_PRM_FLAGS_BCM20791B3 0x10 /* B3 Patch (no RESET_NTF after patch download) */
/* Secure patch download definitions */
#define NFC_HAL_PRM_NCD_PATCHFILE_HDR_LEN 7 /* PRJID + MAJORVER + MINORVER + COUNT */
-#define NFC_HAL_PRM_NCD_PATCH_VERSION_LEN 16
-
-#define NFC_HAL_PRM_SPD_PRE_DOWNLOAD_DELAY (500) /* Delay before starting to patch download (in ms) */
/* Enumeration of power modes IDs */
#define NFC_HAL_PRM_SPD_POWER_MODE_LPM 0
@@ -50,16 +45,8 @@
#define NFC_HAL_PRM_SPD_TOUT (6000) /* timeout for SPD events (in ms) */
#define NFC_HAL_PRM_END_DELAY (250) /* delay before sending any new command (ms)*/
-/* command to get currently downloaded patch version */
-static UINT8 nfc_hal_prm_get_patch_version_cmd [NCI_MSG_HDR_SIZE] =
-{
- NCI_MTS_CMD|NCI_GID_PROP,
- NCI_MSG_GET_PATCH_VERSION,
- 0x00
-};
-
#if (NFC_HAL_PRM_DEBUG == TRUE)
-#define NFC_HAL_PRM_STATE(str) NCI_TRACE_DEBUG2 ("%s st: %d", str, nfc_hal_cb.prm.state)
+#define NFC_HAL_PRM_STATE(str) HAL_TRACE_DEBUG2 ("%s st: %d", str, nfc_hal_cb.prm.state)
#else
#define NFC_HAL_PRM_STATE(str)
#endif
@@ -69,7 +56,7 @@
/*****************************************************************************
** Extern variable from nfc_hal_dm_cfg.c
*****************************************************************************/
-extern BOOLEAN nfc_hal_prm_nvm_required;
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
/*******************************************************************************
**
@@ -110,7 +97,7 @@
/* Validate that segment is at least big enought to have NCI_MSG_HDR_SIZE + 1 (hcit) */
if (nfc_hal_cb.prm.cur_patch_len_remaining < patch_hdr_size)
{
- NCI_TRACE_ERROR0 ("Unexpected end of patch.");
+ HAL_TRACE_ERROR0 ("Unexpected end of patch.");
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
return;
}
@@ -146,12 +133,12 @@
if (memcmp (NFC_HAL_PRM_BCM20791B3_STR, chipverstr, NFC_HAL_PRM_BCM20791B3_STR_LEN) == 0)
{
/* Patch is for BCM2079B3 - do not wait for RESET_NTF after patch download */
- nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF;
+ nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_BCM20791B3;
}
else
{
/* Patch is for BCM2079B4 or newer - wait for RESET_NTF after patch download */
- nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF;
+ nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_BCM20791B3;
}
}
@@ -189,7 +176,7 @@
else
{
/* Do not need to download this patch. Skip to next patch */
- NCI_TRACE_DEBUG1 ("Skipping patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
+ HAL_TRACE_DEBUG1 ("Skipping patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
nfc_hal_cb.prm.spd_cur_patch_idx++;
if (nfc_hal_cb.prm.spd_cur_patch_idx >= nfc_hal_cb.prm.spd_patch_count)
@@ -215,7 +202,7 @@
/* Begin downloading patch */
- NCI_TRACE_DEBUG1 ("Downloading patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
+ HAL_TRACE_DEBUG1 ("Downloading patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_DOWNLOADING;
nfc_hal_prm_spd_send_next_segment ();
}
@@ -239,7 +226,7 @@
UINT16 patchfile_patchsize;
UINT8 u8;
- NCI_TRACE_DEBUG0 ("Downloading I2C fix...");
+ HAL_TRACE_DEBUG0 ("Downloading I2C fix...");
/* Save pointer and offset of patchfile, so we can resume after downloading the i2c fix */
nfc_hal_cb.prm.spd_patch_offset = nfc_hal_cb.prm.cur_patch_offset;
@@ -269,7 +256,7 @@
/* Should only be one patch */
if (u8 > 1)
{
- NCI_TRACE_ERROR1 ("Invalid i2c fix: invalid number of patches (%i)", u8);
+ HAL_TRACE_ERROR1 ("Invalid i2c fix: invalid number of patches (%i)", u8);
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
return;
}
@@ -292,7 +279,7 @@
else
{
/* ERROR: Bad length for patchfile */
- NCI_TRACE_ERROR0 ("Invalid i2c fix: unexpected end of patch");
+ HAL_TRACE_ERROR0 ("Invalid i2c fix: unexpected end of patch");
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
}
}
@@ -311,9 +298,9 @@
{
UINT8 *p, *p_start, i;
UINT32 patchfile_patch_present_mask;
- UINT16 patchfile_project_id;
+ UINT16 patchfile_project_id = 0;
UINT16 patchfile_ver_major = 0;
- UINT16 patchfile_ver_minor;
+ UINT16 patchfile_ver_minor = 0;
UINT16 patchfile_patchsize;
UINT8 return_code = NFC_HAL_PRM_COMPLETE_EVT;
@@ -340,7 +327,7 @@
if (nfc_hal_cb.prm.spd_patch_count > NFC_HAL_PRM_MAX_PATCH_COUNT)
{
- NCI_TRACE_ERROR2 ("Unsupported patchfile (number of patches (%i) exceeds maximum (%i)",
+ HAL_TRACE_ERROR2 ("Unsupported patchfile (number of patches (%i) exceeds maximum (%i)",
nfc_hal_cb.prm.spd_patch_count, NFC_HAL_PRM_MAX_PATCH_COUNT);
}
@@ -371,7 +358,7 @@
nfc_hal_cb.prm.cur_patch_len_remaining -= (UINT16) (p - p_start); /* Adjust size of patchfile */
- NCI_TRACE_DEBUG6 ("Patchfile info: ProjID=0x%04x, Ver=%i.%i, Num patches=%i, PatchMask=0x%08x, PatchSize=%i",
+ HAL_TRACE_DEBUG6 ("Patchfile info: ProjID=0x%04x, Ver=%i.%i, Num patches=%i, PatchMask=0x%08x, PatchSize=%i",
patchfile_project_id, patchfile_ver_major, patchfile_ver_minor,
nfc_hal_cb.prm.spd_patch_count, patchfile_patch_present_mask, patchfile_patchsize);
@@ -381,34 +368,34 @@
#if (!defined (NFC_HAL_PRM_SKIP_VERSION_CHECK) || (NFC_HAL_PRM_SKIP_VERSION_CHECK == FALSE))
/* Download the patchfile if no patches in NVM */
- if ((nfc_hal_cb.prm.spd_project_id == 0) || (nfc_hal_cb.prm.spd_nvm_patch_mask == 0))
+ if ((nfc_hal_cb.nvm_cb.project_id == 0) || !(nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_PATCH_PRESENT))
{
/* No patch in NVM, need to download all */
nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
- NCI_TRACE_DEBUG2 ("No previous patch detected. Downloading patch %i.%i",
+ HAL_TRACE_DEBUG2 ("No previous patch detected. Downloading patch %i.%i",
patchfile_ver_major, patchfile_ver_minor);
}
/* Skip download if project ID of patchfile does not match NVM */
- else if (nfc_hal_cb.prm.spd_project_id != patchfile_project_id)
+ else if (nfc_hal_cb.nvm_cb.project_id != patchfile_project_id)
{
/* Project IDs mismatch */
- NCI_TRACE_DEBUG2 ("Patch download skipped: Mismatched Project ID (NVM ProjId: 0x%04x, Patchfile ProjId: 0x%04x)",
- nfc_hal_cb.prm.spd_project_id, patchfile_project_id);
+ HAL_TRACE_DEBUG2 ("Patch download skipped: Mismatched Project ID (NVM ProjId: 0x%04x, Patchfile ProjId: 0x%04x)",
+ nfc_hal_cb.nvm_cb.project_id, patchfile_project_id);
return_code = NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT;
}
/* Skip download if version of patchfile older or equal to version in NVM */
/* unless NVM is corrupted (then don't skip download if patchfile has the same major ver)*/
- else if ( (nfc_hal_cb.prm.spd_ver_major > patchfile_ver_major)
- ||( (nfc_hal_cb.prm.spd_ver_major == patchfile_ver_major) && (nfc_hal_cb.prm.spd_ver_minor == patchfile_ver_minor)
- && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM)) && (nfc_hal_cb.prm.spd_lpm_patch_size == 0)) /* Do not skip download: patchfile has LPM, but NVM does not */
- && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM)) && (nfc_hal_cb.prm.spd_fpm_patch_size == 0)) /* Do not skip download: patchfile has FPM, but NVM does not */
- && !(nfc_hal_cb.prm.flags & (NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED |NFC_HAL_PRM_FLAGS_NVM_LPM_CORRUPTED)) ) )
+ else if ( (nfc_hal_cb.nvm_cb.ver_major > patchfile_ver_major)
+ ||( (nfc_hal_cb.nvm_cb.ver_major == patchfile_ver_major) && (nfc_hal_cb.nvm_cb.ver_minor == patchfile_ver_minor)
+ && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM)) && (nfc_hal_cb.nvm_cb.lpm_size == 0)) /* Do not skip download: patchfile has LPM, but NVM does not */
+ && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM)) && (nfc_hal_cb.nvm_cb.fpm_size == 0)) /* Do not skip download: patchfile has FPM, but NVM does not */
+ && !(nfc_hal_cb.nvm_cb.flags & (NFC_HAL_NVM_FLAGS_FPM_BAD |NFC_HAL_NVM_FLAGS_LPM_BAD)) ) )
{
/* NVM version is newer than patchfile */
- NCI_TRACE_DEBUG2 ("Patch download skipped. NVM patch (version %i.%i) is newer than the patchfile ",
- nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+ HAL_TRACE_DEBUG2 ("Patch download skipped. NVM patch (version %i.%i) is newer than the patchfile ",
+ nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
return_code = NFC_HAL_PRM_COMPLETE_EVT;
}
@@ -418,9 +405,9 @@
{
nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
- NCI_TRACE_DEBUG4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
+ HAL_TRACE_DEBUG4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
patchfile_ver_major, patchfile_ver_minor,
- nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+ nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
}
#else /* NFC_HAL_PRM_SKIP_VERSION_CHECK */
nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
@@ -429,7 +416,7 @@
else
{
/* Invalid patch file header */
- NCI_TRACE_ERROR0 ("Invalid patch file header.");
+ HAL_TRACE_ERROR0 ("Invalid patch file header.");
return_code = NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT;
}
@@ -437,22 +424,24 @@
/* If we need to download anything, get the first patch to download */
if (nfc_hal_cb.prm.spd_patch_needed_mask)
{
- NCI_TRACE_ERROR4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
+ HAL_TRACE_ERROR4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
patchfile_ver_major, patchfile_ver_minor,
- nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+ nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
#if (defined (NFC_HAL_PRE_I2C_PATCH_INCLUDED) && (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE))
/* Check if I2C patch is needed: if */
/* - I2C patch file was provided using HAL_NfcPrmSetI2cPatch, and */
/* - current patch in NVM has ProjectID=0, or */
/* FPM is not present or corrupted, or */
/* or patchfile is major-ver 76+ */
+ /* or patchfile is not for B3 (always download for B4 onward) */
if ( (nfc_hal_cb.prm_i2c.p_patch)
- &&( (nfc_hal_cb.prm.spd_project_id == 0)
- ||(nfc_hal_cb.prm.spd_fpm_patch_size == 0)
- ||(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED)
- ||(patchfile_ver_major >= 76)))
+ &&( (nfc_hal_cb.nvm_cb.project_id == 0)
+ ||(nfc_hal_cb.nvm_cb.fpm_size == 0)
+ ||(nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_FPM_BAD)
+ ||(patchfile_ver_major >= 76)
+ ||(!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3)) ))
{
- NCI_TRACE_DEBUG0 ("I2C patch fix required.");
+ HAL_TRACE_DEBUG0 ("I2C patch fix required.");
nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED;
/* Download i2c fix first */
@@ -476,9 +465,10 @@
else
{
static BOOLEAN firstTime = TRUE;
- if (firstTime) {
- NCI_TRACE_ERROR2 ("BCM2079x: NVM patch version is %d.%d",
- nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+ if (firstTime)
+ {
+ HAL_TRACE_ERROR2 ("NVM patch version is %d.%d",
+ nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
firstTime = FALSE;
}
/* Download complete */
@@ -576,82 +566,8 @@
/* Skip over NCI header */
p = p_data + NCI_MSG_HDR_SIZE;
- /* Handle GET_PATCH_VERSION Rsp */
- if (event == NFC_VS_GET_PATCH_VERSION_EVT)
- {
- /* Get project id */
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_project_id, p);
-
- /* RFU */
- p++;
-
- /* Get chip version string */
- STREAM_TO_UINT8 (u8, p);
- p += NFC_HAL_PRM_NCD_PATCH_VERSION_LEN;
-
- /* Get major/minor version */
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_ver_major, p);
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_ver_minor, p);
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_nvm_max_size, p);
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_patch_max_size, p);
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_lpm_patch_size, p);
- STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_fpm_patch_size, p);
-
- /* LPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
- STREAM_TO_UINT8 (u8, p);
- if (!u8)
- {
- nfc_hal_cb.prm.spd_nvm_patch_mask |= (1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM);
- }
- else
- {
- /* LPM patch in NVM fails CRC check */
- nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_NVM_LPM_CORRUPTED;
- }
-
-
- /* FPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
- STREAM_TO_UINT8 (u8, p);
- if (!u8)
- {
- nfc_hal_cb.prm.spd_nvm_patch_mask |= (1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM);
- }
- else
- {
- /* FPM patch in NVM fails CRC check */
- nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED;
- }
-
- /* Check if downloading patch to RAM only (no NVM) */
- STREAM_TO_UINT8 (u8, p);
- if (!u8)
- {
- if (nfc_hal_prm_nvm_required)
- {
- NCI_TRACE_ERROR0 ("This platform requires NVM and the NVM is not available - Abort");
- nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_NO_NVM_EVT);
- return;
- }
- nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_NO_NVM;
- }
-
- /* Get patchfile version number */
- nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_COMPARE_VERSION;
-
- if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF)
- {
- /* If patch is in a buffer, get patch version from buffer */
- nfc_hal_prm_spd_check_version ();
- }
- else
- {
- /* Notify adaptation layer to send patch version (via HAL_NfcPrmDownloadContinue) */
- (nfc_hal_cb.prm.p_cback) (NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT);
- }
-
- }
/* Handle SECURE_PATCH_DOWNLOAD Rsp */
- else if (event == NFC_VS_SEC_PATCH_DOWNLOAD_EVT)
+ if (event == NFC_VS_SEC_PATCH_DOWNLOAD_EVT)
{
/* Status and error code */
STREAM_TO_UINT8 (status, p);
@@ -660,9 +576,9 @@
if (status != NCI_STATUS_OK)
{
#if (NFC_HAL_TRACE_VERBOSE == TRUE)
- NCI_TRACE_ERROR2 ("Patch download failed, reason code=0x%X (%s)", status, nfc_hal_prm_spd_status_str (status));
+ HAL_TRACE_ERROR2 ("Patch download failed, reason code=0x%X (%s)", status, nfc_hal_prm_spd_status_str (status));
#else
- NCI_TRACE_ERROR1 ("Patch download failed, reason code=0x%X", status);
+ HAL_TRACE_ERROR1 ("Patch download failed, reason code=0x%X", status);
#endif
/* Notify application */
@@ -673,10 +589,10 @@
/* If last segment (SIGNATURE) sent */
if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SIGNATURE_SENT)
{
- /* Wait for authentication complate (SECURE_PATCH_DOWNLOAD NTF) */
+ /* Wait for authentication complete (SECURE_PATCH_DOWNLOAD NTF), including time to commit to NVM (for BCM43341B0) */
nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_AUTHENTICATING;
nfc_hal_main_start_quick_timer (&nfc_hal_cb.prm.timer, 0x00,
- (NFC_HAL_PRM_SPD_TOUT * QUICK_TIMER_TICKS_PER_SEC) / 1000);
+ (NFC_HAL_PRM_COMMIT_DELAY * QUICK_TIMER_TICKS_PER_SEC) / 1000);
return;
}
/* Download next segment */
@@ -694,7 +610,7 @@
/* Handle SECURE_PATCH_DOWNLOAD NTF */
else if (event == NFC_VS_SEC_PATCH_AUTH_EVT)
{
- NCI_TRACE_DEBUG1 ("prm flags:0x%x.", nfc_hal_cb.prm.flags);
+ HAL_TRACE_DEBUG1 ("prm flags:0x%x.", nfc_hal_cb.prm.flags);
/* Status and error code */
STREAM_TO_UINT8 (status, p);
STREAM_TO_UINT8 (u8, p);
@@ -704,7 +620,7 @@
{
if (status != NCI_STATUS_OK)
{
- NCI_TRACE_ERROR0 ("Patch authentication failed");
+ HAL_TRACE_ERROR0 ("Patch authentication failed");
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT);
return;
}
@@ -712,7 +628,7 @@
#if (defined (NFC_HAL_PRE_I2C_PATCH_INCLUDED) && (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE))
if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED)
{
- NCI_TRACE_DEBUG1 ("PreI2C patch downloaded...waiting %i ms for NFCC to reboot.", nfc_hal_cb.prm_i2c.prei2c_delay);
+ HAL_TRACE_DEBUG1 ("PreI2C patch downloaded...waiting %i ms for NFCC to reboot.", nfc_hal_cb.prm_i2c.prei2c_delay);
/* Restore pointers to patchfile */
nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED;
@@ -733,18 +649,18 @@
/* Wait for NFCC to save the patch to NVM */
- if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF)
+ if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3))
{
- /* 20791B4 or newer - wait for RESET_NTF */
- post_signature_delay = NFC_HAL_PRM_RESET_NTF_DELAY;
- NCI_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for RESET NTF...", post_signature_delay);
+ /* 20791B4 or newer - wait for RESET_NTF; including time to commit to NVM (for BCM20791B4+) */
+ post_signature_delay = NFC_HAL_PRM_COMMIT_DELAY;
+ HAL_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for RESET NTF...", post_signature_delay);
}
- else if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_NO_NVM)
+ else if (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_NO_NVM)
{
/* No NVM. Wait for NFCC to restart */
post_signature_delay = NFC_HAL_PRM_END_DELAY;
- NCI_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NFCC to restart...", post_signature_delay);
+ HAL_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NFCC to restart...", post_signature_delay);
}
else
{
@@ -752,7 +668,7 @@
post_signature_delay = nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].len;
if (post_signature_delay < nfc_hal_cb.prm.patchram_delay)
post_signature_delay = nfc_hal_cb.prm.patchram_delay;
- NCI_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NVM update to complete...", post_signature_delay);
+ HAL_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NVM update to complete...", post_signature_delay);
}
nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_AUTH_DONE;
@@ -762,14 +678,19 @@
}
else
{
- NCI_TRACE_ERROR0 ("Got unexpected SECURE_PATCH_DOWNLOAD NTF");
+ HAL_TRACE_ERROR0 ("Got unexpected SECURE_PATCH_DOWNLOAD NTF");
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_EVT);
}
}
+ /* Handle NCI_MSG_GET_PATCH_VERSION RSP */
+ else if (event == NFC_VS_GET_PATCH_VERSION_EVT)
+ {
+ nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_COMPLETE_EVT);
+ }
else
{
/* Invalid response from NFCC during patch download */
- NCI_TRACE_ERROR1 ("Invalid response from NFCC during patch download (opcode=0x%02X)", event);
+ HAL_TRACE_ERROR1 ("Invalid response from NFCC during patch download (opcode=0x%02X)", event);
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
}
@@ -787,6 +708,13 @@
*******************************************************************************/
void nfc_hal_prm_nfcc_ready_to_continue (void)
{
+ UINT8 get_patch_version_cmd [NCI_MSG_HDR_SIZE] =
+ {
+ NCI_MTS_CMD|NCI_GID_PROP,
+ NCI_MSG_GET_PATCH_VERSION,
+ 0x00
+ };
+
/* Clear the bit for the patch we just downloaded */
nfc_hal_cb.prm.spd_patch_needed_mask &= ~ ((UINT32) 1 << nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
@@ -812,8 +740,10 @@
else
{
/* Done downloading */
- NCI_TRACE_DEBUG0 ("Patch downloaded and authenticated.");
- nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_COMPLETE_EVT);
+ HAL_TRACE_DEBUG0 ("Patch downloaded and authenticated. Get new patch version.");
+ /* add get patch info again to verify the effective FW version */
+ nfc_hal_dm_send_nci_cmd (get_patch_version_cmd, NCI_MSG_HDR_SIZE, nfc_hal_prm_nci_command_complete_cback);
+ nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_W4_GET_VERSION;
}
}
@@ -832,19 +762,27 @@
/* Check if we were expecting a RESET NTF */
if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE)
{
- NCI_TRACE_DEBUG2 ("Received RESET NTF after patch download (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
+ HAL_TRACE_DEBUG2 ("Received RESET NTF after patch download (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
/* Stop waiting for RESET NTF */
nfc_hal_main_stop_quick_timer (&nfc_hal_cb.prm.timer);
{
- /* Continue with patch download */
- nfc_hal_prm_nfcc_ready_to_continue ();
+ /* Continue with patch download */
+ nfc_hal_prm_nfcc_ready_to_continue ();
+ }
}
+ else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER)
+ {
+ HAL_TRACE_DEBUG0 ("Received RESET NTF after pre-I2C patch download. Proceeding with patch download...");
+
+ /* Stop waiting for RESET NTF */
+ nfc_hal_main_stop_quick_timer (&nfc_hal_cb.prm.timer);
+ nfc_hal_prm_spd_handle_next_patch_start ();
}
else
{
- NCI_TRACE_ERROR2 ("Received unexpected RESET NTF (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
+ HAL_TRACE_ERROR2 ("Received unexpected RESET NTF (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
}
}
@@ -881,19 +819,12 @@
{
NFC_HAL_PRM_STATE ("nfc_hal_prm_process_timeout");
- if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_IDLE)
+ if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE)
{
- nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_GET_VERSION;
-
- /* Get currently downloaded patch version */
- nfc_hal_dm_send_nci_cmd (nfc_hal_prm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, nfc_hal_prm_nci_command_complete_cback);
- }
- else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE)
- {
- if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF)
+ if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3))
{
/* Timeout waiting for RESET NTF after signature sent */
- NCI_TRACE_ERROR0 ("Timeout waiting for RESET NTF after patch download");
+ HAL_TRACE_ERROR0 ("Timeout waiting for RESET NTF after patch download");
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_EVT);
}
else
@@ -903,12 +834,17 @@
}
else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER)
{
- NCI_TRACE_DEBUG0 ("Delay after PreI2C patch download...proceeding to download firmware patch");
+ HAL_TRACE_DEBUG0 ("Delay after PreI2C patch download...proceeding to download firmware patch");
nfc_hal_prm_spd_handle_next_patch_start ();
}
+ else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_W4_GET_VERSION)
+ {
+ HAL_TRACE_DEBUG0 ("get patch version timeout???");
+ nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_COMPLETE_EVT);
+ }
else
{
- NCI_TRACE_ERROR1 ("Patch download: command timeout (state=%i)", nfc_hal_cb.prm.state);
+ HAL_TRACE_ERROR1 ("Patch download: command timeout (state=%i)", nfc_hal_cb.prm.state);
nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_EVT);
}
@@ -955,7 +891,7 @@
UINT32 patchram_delay,
tNFC_HAL_PRM_CBACK *p_cback)
{
- NCI_TRACE_API0 ("HAL_NfcPrmDownloadStart ()");
+ HAL_TRACE_API0 ("HAL_NfcPrmDownloadStart ()");
memset (&nfc_hal_cb.prm, 0, sizeof (tNFC_HAL_PRM_CB));
@@ -984,13 +920,30 @@
nfc_hal_cb.prm.spd_patch_len_remaining = (UINT16)patchram_len;
nfc_hal_cb.prm.spd_patch_offset = 0;
- /* Need delay for controller to finish resetting */
- nfc_hal_main_start_quick_timer (&nfc_hal_cb.prm.timer, 0x00,
- (NFC_HAL_PRM_SPD_PRE_DOWNLOAD_DELAY * QUICK_TIMER_TICKS_PER_SEC) / 1000);
+ /* If patch download is required, but no NVM is available, then abort */
+ if ((p_nfc_hal_cfg->nfc_hal_prm_nvm_required) && (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_NO_NVM))
+ {
+ HAL_TRACE_ERROR0 ("This platform requires NVM and the NVM is not available - Abort");
+ nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_NO_NVM_EVT);
+ return FALSE;
+ }
+
+ /* Compare patch version in NVM with version in patchfile */
+ nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_COMPARE_VERSION;
+ if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF)
+ {
+ /* If patchfile is in a buffer, get patch version from buffer */
+ nfc_hal_prm_spd_check_version ();
+ }
+ else
+ {
+ /* If patchfile is not in a buffer, then request patchfile header from adaptation layer. */
+ (nfc_hal_cb.prm.p_cback) (NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT);
+ }
}
else
{
- NCI_TRACE_ERROR0 ("Unexpected patch format.");
+ HAL_TRACE_ERROR0 ("Unexpected patch format.");
return FALSE;
}
@@ -1016,7 +969,7 @@
BOOLEAN HAL_NfcPrmDownloadContinue (UINT8 *p_patch_data,
UINT16 patch_data_len)
{
- NCI_TRACE_API2 ("HAL_NfcPrmDownloadContinue ():state = %d, patch_data_len=%d",
+ HAL_TRACE_API2 ("HAL_NfcPrmDownloadContinue ():state = %d, patch_data_len=%d",
nfc_hal_cb.prm.state, patch_data_len);
/* Check if we are in a valid state for this API */
@@ -1047,7 +1000,7 @@
}
else
{
- NCI_TRACE_ERROR1 ("Unexpected patch state:%d.", nfc_hal_cb.prm.state);
+ HAL_TRACE_ERROR1 ("Unexpected patch state:%d.", nfc_hal_cb.prm.state);
}
return TRUE;
@@ -1073,7 +1026,7 @@
void HAL_NfcPrmSetI2cPatch (UINT8 *p_i2c_patchfile_buf, UINT16 i2c_patchfile_len, UINT32 prei2c_delay)
{
#if (defined (NFC_HAL_PRE_I2C_PATCH_INCLUDED) && (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE))
- NCI_TRACE_API0 ("HAL_NfcPrmSetI2cPatch ()");
+ HAL_TRACE_API0 ("HAL_NfcPrmSetI2cPatch ()");
nfc_hal_cb.prm_i2c.prei2c_delay = NFC_HAL_PRM_POST_I2C_FIX_DELAY;
if (prei2c_delay)
@@ -1108,12 +1061,12 @@
/* Validate: minimum size is NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE */
if (max_payload_size < NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE)
{
- NCI_TRACE_ERROR2 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: invalid size (%i). Must be between %i and 255", max_payload_size, NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE);
+ HAL_TRACE_ERROR2 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: invalid size (%i). Must be between %i and 255", max_payload_size, NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE);
return (HAL_NFC_STATUS_FAILED);
}
else
{
- NCI_TRACE_API1 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: new message size during download: %i", max_payload_size);
+ HAL_TRACE_API1 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: new message size during download: %i", max_payload_size);
nfc_hal_cb.ncit_cb.nci_ctrl_size = max_payload_size;
return (HAL_NFC_STATUS_OK);
}
diff --git a/halimpl/bcm2079x/hal/include/gki_hal_target.h b/halimpl/bcm2079x/hal/include/gki_hal_target.h
deleted file mode 100644
index 9a9aec9..0000000
--- a/halimpl/bcm2079x/hal/include/gki_hal_target.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef GKI_HAL_TARGET_H
-#define GKI_HAL_TARGET_H
-
-#ifdef BUILDCFG
-#include "buildcfg_hal.h"
-#endif
-
-#include "data_types.h"
-
-/* Define export prefixes for modules exported by HAL */
-#ifndef GKI_API
-#define GKI_API
-#endif
-
-#ifndef UDRV_API
-#define UDRV_API
-#endif
-
-#ifndef EXPORT_API
-#define EXPORT_API
-#endif
-
-
-/******************************************************************************
-**
-** Task configuration
-**
-******************************************************************************/
-
-/* Definitions of task IDs for inter-task messaging */
-#ifndef NFC_HAL_TASK
-#define NFC_HAL_TASK 0
-#endif
-
-/* The number of GKI tasks in the software system. */
-#ifndef GKI_MAX_TASKS
-#define GKI_MAX_TASKS 1
-#endif
-
-/******************************************************************************
-**
-** Timer configuration
-**
-******************************************************************************/
-
-/* The number of GKI timers in the software system. */
-#ifndef GKI_NUM_TIMERS
-#define GKI_NUM_TIMERS 2
-#endif
-
-/* A conversion value for translating ticks to calculate GKI timer. */
-#ifndef TICKS_PER_SEC
-#define TICKS_PER_SEC 100
-#endif
-
-/************************************************************************
-** Utility macros converting ticks to time with user define OS ticks per sec
-**/
-#ifndef GKI_MS_TO_TICKS
-#define GKI_MS_TO_TICKS(x) ((x) / (1000 / TICKS_PER_SEC))
-#endif
-
-#ifndef GKI_SECS_TO_TICKS
-#define GKI_SECS_TO_TICKS(x) ((x) * (TICKS_PER_SEC))
-#endif
-
-#ifndef GKI_TICKS_TO_MS
-#define GKI_TICKS_TO_MS(x) ((x) * 1000 / TICKS_PER_SEC)
-#endif
-
-#ifndef GKI_TICKS_TO_SECS
-#define GKI_TICKS_TO_SECS(x) ((x) / TICKS_PER_SEC)
-#endif
-
-
-
-/* TICK per second from OS (OS dependent change this macro accordingly to various OS) */
-#ifndef OS_TICKS_PER_SEC
-#define OS_TICKS_PER_SEC 1000
-#endif
-
-/************************************************************************
-** Utility macros converting ticks to time with user define OS ticks per sec
-**/
-
-#ifndef GKI_OS_TICKS_TO_MS
-#define GKI_OS_TICKS_TO_MS(x) ((x) * 1000 / OS_TICKS_PER_SEC)
-#endif
-
-
-#ifndef GKI_OS_TICKS_TO_SECS
-#define GKI_OS_TICKS_TO_SECS(x) ((x) / OS_TICKS_PER_SEC))
-#endif
-
-
-/* delay in ticks before stopping system tick. */
-#ifndef GKI_DELAY_STOP_SYS_TICK
-#define GKI_DELAY_STOP_SYS_TICK 10
-#endif
-
-/* Option to guarantee no preemption during timer expiration (most system don't need this) */
-#ifndef GKI_TIMER_LIST_NOPREEMPT
-#define GKI_TIMER_LIST_NOPREEMPT FALSE
-#endif
-
-/******************************************************************************
-**
-** Buffer configuration
-**
-******************************************************************************/
-
-/* TRUE if GKI uses dynamic buffers. */
-#ifndef GKI_USE_DYNAMIC_BUFFERS
-#define GKI_USE_DYNAMIC_BUFFERS FALSE
-#endif
-
-/* The size of the buffers in pool 0. */
-#ifndef GKI_BUF0_SIZE
-#define GKI_BUF0_SIZE 64
-#endif
-
-/* The number of buffers in buffer pool 0. */
-#ifndef GKI_BUF0_MAX
-#define GKI_BUF0_MAX 8
-#endif
-
-/* The ID of buffer pool 0. */
-#ifndef GKI_POOL_ID_0
-#define GKI_POOL_ID_0 0
-#endif
-
-/* The size of the buffers in pool 1. */
-#ifndef GKI_BUF1_SIZE
-#define GKI_BUF1_SIZE 288
-#endif
-
-/* The number of buffers in buffer pool 1. */
-#ifndef GKI_BUF1_MAX
-#define GKI_BUF1_MAX 8
-#endif
-
-/* The ID of buffer pool 1. */
-#ifndef GKI_POOL_ID_1
-#define GKI_POOL_ID_1 1
-#endif
-
-/* The size of the largest PUBLIC fixed buffer in system. */
-#ifndef GKI_MAX_BUF_SIZE
-#define GKI_MAX_BUF_SIZE GKI_BUF1_SIZE
-#endif
-
-/* The pool ID of the largest PUBLIC fixed buffer in system. */
-#ifndef GKI_MAX_BUF_SIZE_POOL_ID
-#define GKI_MAX_BUF_SIZE_POOL_ID GKI_POOL_ID_1
-#endif
-
-/* buffer size for USERIAL, it must large enough to hold NFC_HDR and max packet size */
-#ifndef USERIAL_POOL_BUF_SIZE
-#define USERIAL_POOL_BUF_SIZE GKI_BUF1_SIZE
-#endif
-
-/* buffer pool ID for USERIAL */
-#ifndef USERIAL_POOL_ID
-#define USERIAL_POOL_ID GKI_POOL_ID_1
-#endif
-
-#ifndef GKI_NUM_FIXED_BUF_POOLS
-#define GKI_NUM_FIXED_BUF_POOLS 2
-#endif
-
-/* The number of fixed and dynamic buffer pools */
-#ifndef GKI_NUM_TOTAL_BUF_POOLS
-#define GKI_NUM_TOTAL_BUF_POOLS 2
-#endif
-
-/* The buffer pool usage mask. */
-#ifndef GKI_DEF_BUFPOOL_PERM_MASK
-#define GKI_DEF_BUFPOOL_PERM_MASK 0xfff0
-#endif
-
-/* The buffer corruption check flag. */
-#ifndef GKI_ENABLE_BUF_CORRUPTION_CHECK
-#define GKI_ENABLE_BUF_CORRUPTION_CHECK TRUE
-#endif
-
-/* The GKI severe error macro. */
-#ifndef GKI_SEVERE
-#define GKI_SEVERE(code)
-#endif
-
-/* TRUE if GKI includes debug functionality. */
-#ifndef GKI_DEBUG
-#define GKI_DEBUG FALSE
-#endif
-
-/* Maximum number of exceptions logged. */
-#ifndef GKI_MAX_EXCEPTION
-#define GKI_MAX_EXCEPTION 8
-#endif
-
-/* Maximum number of chars stored for each exception message. */
-#ifndef GKI_MAX_EXCEPTION_MSGLEN
-#define GKI_MAX_EXCEPTION_MSGLEN 64
-#endif
-
-#ifndef GKI_SEND_MSG_FROM_ISR
-#define GKI_SEND_MSG_FROM_ISR FALSE
-#endif
-
-
-#define GKI_TRACE_0(m)
-#define GKI_TRACE_1(m,p1)
-#define GKI_TRACE_2(m,p1,p2)
-#define GKI_TRACE_3(m,p1,p2,p3)
-#define GKI_TRACE_4(m,p1,p2,p3,p4)
-#define GKI_TRACE_5(m,p1,p2,p3,p4,p5)
-#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#define GKI_TRACE_ERROR_0(m) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m)
-#define GKI_TRACE_ERROR_1(m,p1) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1)
-#define GKI_TRACE_ERROR_2(m,p1,p2) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2)
-#define GKI_TRACE_ERROR_3(m,p1,p2,p3) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3)
-#define GKI_TRACE_ERROR_4(m,p1,p2,p3,p4) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4)
-#define GKI_TRACE_ERROR_5(m,p1,p2,p3,p4,p5) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5)
-#define GKI_TRACE_ERROR_6(m,p1,p2,p3,p4,p5,p6) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6)
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GKI_TARGET_H */
diff --git a/halimpl/bcm2079x/hal/include/nci_defs.h b/halimpl/bcm2079x/hal/include/nci_defs.h
deleted file mode 100644
index befffd9..0000000
--- a/halimpl/bcm2079x/hal/include/nci_defs.h
+++ /dev/null
@@ -1,851 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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 file contains the definition from NCI specification
- *
- ******************************************************************************/
-
-#ifndef NFC_NCI_DEFS_H
-#define NFC_NCI_DEFS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NCI_BRCM_CO_ID 0x2E
-
-/* Define the message header size for all NCI Commands and Notifications.
-*/
-#define NCI_MSG_HDR_SIZE 3 /* per NCI spec */
-#define NCI_DATA_HDR_SIZE 3 /* per NCI spec */
-#define NCI_MAX_PAYLOAD_SIZE 0xFE
-#define NCI_MAX_CTRL_SIZE 0xFF/* max control message size */
-#define NCI_CTRL_INIT_SIZE 32 /* initial NFCC control payload size */
-#define NCI_MAX_VSC_SIZE 0xFF
-#define NCI_VSC_MSG_HDR_SIZE 12 /* NCI header (3) + callback function pointer(8; use 8 to be safe) + HCIT (1 byte) */
-#define NCI_TL_SIZE 2
-
-#define NCI_ISO_DEP_MAX_INFO 253 /* Max frame size (256) - Prologue (1) - Epilogue (2) in ISO-DEP, CID and NAD are not used*/
-#define NCI_NFC_DEP_MAX_DATA 251 /* Max payload (254) - Protocol Header (3) in NFC-DEP, DID and NAD are not used */
-
-/* NCI Command and Notification Format:
- * 3 byte message header:
- * byte 0: MT PBF GID
- * byte 1: OID
- * byte 2: Message Length */
-/* MT: Message Type (byte 0) */
-#define NCI_MT_MASK 0xE0
-#define NCI_MT_SHIFT 5
-#define NCI_MT_DATA 0x00
-#define NCI_MT_CMD 1 /* (NCI_MT_CMD << NCI_MT_SHIFT) = 0x20 */
-#define NCI_MT_RSP 2 /* (NCI_MT_RSP << NCI_MT_SHIFT) = 0x40 */
-#define NCI_MT_NTF 3 /* (NCI_MT_NTF << NCI_MT_SHIFT) = 0x60 */
-#define NCI_MT_CFG 4 /* (NCI_MT_CFG << NCI_MT_SHIFT) = 0x80 */
-
-#define NCI_MTS_CMD 0x20
-#define NCI_MTS_RSP 0x40
-#define NCI_MTS_NTF 0x60
-#define NCI_MTS_CFG 0x80
-
-#define NCI_NTF_BIT 0x80 /* the tNFC_VS_EVT is a notification */
-#define NCI_RSP_BIT 0x40 /* the tNFC_VS_EVT is a response */
-
-/* for internal use only; not from specification */
-/* the following 2 flags are used in layer_specific for fragmentation/reassembly of data packets */
-#define NCI_LS_DATA 0x00
-#define NCI_LS_DATA_PBF 0x01
-
-/* PBF: Packet Boundary Flag (byte 0) */
-#define NCI_PBF_MASK 0x10
-#define NCI_PBF_SHIFT 4
-#define NCI_PBF_NO_OR_LAST 0x00 /* not fragmented or last fragment */
-#define NCI_PBF_ST_CONT 0x10 /* start or continuing fragment */
-
-/* GID: Group Identifier (byte 0) */
-#define NCI_GID_MASK 0x0F
-#define NCI_GID_SHIFT 0
-#define NCI_GID_CORE 0x00 /* 0000b NCI Core group */
-#define NCI_GID_RF_MANAGE 0x01 /* 0001b RF Management group */
-#define NCI_GID_EE_MANAGE 0x02 /* 0010b NFCEE Management group */
-#define NCI_GID_PROP 0x0F /* 1111b Proprietary */
-/* 0111b - 1110b RFU */
-
-/* OID: Opcode Identifier (byte 1) */
-#define NCI_OID_MASK 0x3F
-#define NCI_OID_SHIFT 0
-
-/* For routing */
-#define NCI_DH_ID 0 /* for DH */
-/* To identify the loopback test */
-#define NCI_TEST_ID 0xFE/* for loopback test */
-
-/* Destination Type */
-#define NCI_DEST_TYPE_NFCC 1 /* NFCC - loopback */
-#define NCI_DEST_TYPE_REMOTE 2 /* Remote NFC Endpoint */
-#define NCI_DEST_TYPE_NFCEE 3 /* NFCEE */
-
-/* builds byte0 of NCI Command and Notification packet */
-#define NCI_MSG_BLD_HDR0(p, mt, gid) \
- *(p)++ = (UINT8) (((mt) << NCI_MT_SHIFT) | (gid));
-
-#define NCI_MSG_PBLD_HDR0(p, mt, pbf, gid) \
- *(p)++ = (UINT8) (((mt) << NCI_MT_SHIFT) | ((pbf) << NCI_PBF_SHIFT) | (gid));
-
-/* builds byte1 of NCI Command and Notification packet */
-#define NCI_MSG_BLD_HDR1(p, oid) \
- *(p)++ = (UINT8) (((oid) << NCI_OID_SHIFT));
-
-/* parse byte0 of NCI packet */
-#define NCI_MSG_PRS_HDR0(p, mt, pbf, gid) \
- mt = (*(p) & NCI_MT_MASK) >> NCI_MT_SHIFT; \
- pbf = (*(p) & NCI_PBF_MASK) >> NCI_PBF_SHIFT; \
- gid = *(p)++ & NCI_GID_MASK;
-
-/* parse MT and PBF bits of NCI packet */
-#define NCI_MSG_PRS_MT_PBF(p, mt, pbf) \
- mt = (*(p) & NCI_MT_MASK) >> NCI_MT_SHIFT; \
- pbf = (*(p) & NCI_PBF_MASK) >> NCI_PBF_SHIFT;
-
-/* parse byte1 of NCI Cmd/Ntf */
-#define NCI_MSG_PRS_HDR1(p, oid) \
- oid = (*(p) & NCI_OID_MASK); (p)++;
-
-/* NCI Data Format:
- * byte 0: MT(0) PBF CID
- * byte 1: RFU
- * byte 2: Data Length */
-/* CID: Connection Identifier (byte 0) 1-0xF Dynamically assigned (by NFCC), 0 is predefined */
-#define NCI_CID_MASK 0x0F
-
-/* builds 3-byte message header of NCI Data packet */
-#define NCI_DATA_BLD_HDR(p, cid, len) \
- *(p)++ = (UINT8) (cid); *(p)++ = 0; *(p)++ = (UINT8) (len);
-
-#define NCI_DATA_PBLD_HDR(p, pbf, cid, len) \
- *(p)++ = (UINT8) (((pbf) << NCI_PBF_SHIFT) | (cid)); *(p)++=0; *(p)++ = (len);
-
-#define NCI_DATA_PRS_HDR(p, pbf, cid, len) \
- (pbf) = (*(p) & NCI_PBF_MASK) >> NCI_PBF_SHIFT; (cid) = (*(p) & NCI_CID_MASK); p++; p++; (len) = *(p)++;
-
-
-/* Logical target ID 0x01-0xFE */
-
-
-
-/* Status Codes */
-#define NCI_STATUS_OK 0x00
-#define NCI_STATUS_REJECTED 0x01
-#define NCI_STATUS_MESSAGE_CORRUPTED 0x02
-#define NCI_STATUS_BUFFER_FULL 0xE0
-#define NCI_STATUS_FAILED 0x03
-#define NCI_STATUS_NOT_INITIALIZED 0x04
-#define NCI_STATUS_SYNTAX_ERROR 0x05
-#define NCI_STATUS_SEMANTIC_ERROR 0x06
-#define NCI_STATUS_UNKNOWN_GID 0x07
-#define NCI_STATUS_UNKNOWN_OID 0x08
-#define NCI_STATUS_INVALID_PARAM 0x09
-#define NCI_STATUS_MSG_SIZE_TOO_BIG 0x0A
-/* discovery */
-#define NCI_STATUS_ALREADY_STARTED 0xA0
-#define NCI_STATUS_ACTIVATION_FAILED 0xA1
-#define NCI_STATUS_TEAR_DOWN 0xA2
-/* RF Interface */
-#define NCI_STATUS_RF_TRANSMISSION_ERR 0xB0
-#define NCI_STATUS_RF_PROTOCOL_ERR 0xB1
-#define NCI_STATUS_TIMEOUT 0xB2
-/* NFCEE Interface */
-#define NCI_STATUS_EE_INTF_ACTIVE_FAIL 0xC0
-#define NCI_STATUS_EE_TRANSMISSION_ERR 0xC1
-#define NCI_STATUS_EE_PROTOCOL_ERR 0xC2
-#define NCI_STATUS_EE_TIMEOUT 0xC3
-
-
-typedef UINT8 tNCI_STATUS;
-
-/* RF Technologies */
-#define NCI_RF_TECHNOLOGY_A 0x00
-#define NCI_RF_TECHNOLOGY_B 0x01
-#define NCI_RF_TECHNOLOGY_F 0x02
-#define NCI_RF_TECHNOLOGY_15693 0x03
-
-/* Bit Rates */
-#define NCI_BIT_RATE_106 0x00/* 106 kbit/s */
-#define NCI_BIT_RATE_212 0x01/* 212 kbit/s */
-#define NCI_BIT_RATE_424 0x02/* 424 kbit/s */
-#define NCI_BIT_RATE_848 0x03/* 848 Kbit/s */
-#define NCI_BIT_RATE_1696 0x04/* 1696 Kbit/s*/
-#define NCI_BIT_RATE_3392 0x05/* 3392 Kbit/s*/
-#define NCI_BIT_RATE_6784 0x06/* 6784 Kbit/s*/
-
-/**********************************************
- * NCI Core Group Opcode - 0
- **********************************************/
-#define NCI_MSG_CORE_RESET 0
-#define NCI_MSG_CORE_INIT 1
-#define NCI_MSG_CORE_SET_CONFIG 2
-#define NCI_MSG_CORE_GET_CONFIG 3
-#define NCI_MSG_CORE_CONN_CREATE 4
-#define NCI_MSG_CORE_CONN_CLOSE 5
-#define NCI_MSG_CORE_CONN_CREDITS 6
-#define NCI_MSG_CORE_GEN_ERR_STATUS 7
-#define NCI_MSG_CORE_INTF_ERR_STATUS 8
-
-/**********************************************
- * RF MANAGEMENT Group Opcode - 1
- **********************************************/
-#define NCI_MSG_RF_DISCOVER_MAP 0
-#define NCI_MSG_RF_SET_ROUTING 1
-#define NCI_MSG_RF_GET_ROUTING 2
-#define NCI_MSG_RF_DISCOVER 3
-#define NCI_MSG_RF_DISCOVER_SELECT 4
-#define NCI_MSG_RF_INTF_ACTIVATED 5
-#define NCI_MSG_RF_DEACTIVATE 6
-#define NCI_MSG_RF_FIELD 7
-#define NCI_MSG_RF_T3T_POLLING 8
-#define NCI_MSG_RF_EE_ACTION 9
-#define NCI_MSG_RF_EE_DISCOVERY_REQ 10
-#define NCI_MSG_RF_PARAMETER_UPDATE 11
-
-/**********************************************
- * NFCEE MANAGEMENT Group Opcode - 2
- **********************************************/
-#define NCI_MSG_NFCEE_DISCOVER 0
-#define NCI_MSG_NFCEE_MODE_SET 1
-
-/**********************************************
- * NCI Proprietary Group - F
- **********************************************/
-
-/**********************************************
- * NCI Core Group Params
- **********************************************/
-#define NCI_CORE_PARAM_SIZE_RESET 0x01
-#define NCI_CORE_PARAM_SIZE_RESET_RSP 0x03
-#define NCI_CORE_PARAM_SIZE_RESET_NTF 0x02
-
-#define NCI_CORE_PARAM_SIZE_INIT 0x00 /* no payload */
-#define NCI_CORE_PARAM_SIZE_INIT_RSP 0x11
-#define NCI_CORE_INIT_RSP_OFFSET_NUM_INTF 0x05
-
-#define NCI_CORE_PARAM_SIZE_SET_CONFIG_RSP 0x02 /* Status (1 octet) and number of params */
-
-
-/* octet 0 */
-#define NCI_FEAT_DISCOVERY_FREG 0x00000001
-#define NCI_FEAT_DISCOVERY_CFGM 0x00000006
-/* octet 1 */
-#define NCI_FEAT_TECHNOLOGY_ROUTING 0x00000200
-#define NCI_FEAT_PROTOCOL_ROUTING 0x00000400
-#define NCI_FEAT_AID_ROUTING 0x00000800
-/* octet 2 */
-#define NCI_FEAT_BATTERY_OFF_MD 0x00010000
-#define NCI_FEAT_SWITCH_OFF_MD 0x00020000
-
-
-/* supported Interfaces */
-#define NCI_SUP_INTF_FRAME 0x0001
-#define NCI_SUP_INTF_ISO_DEP 0x0002
-#define NCI_SUP_INTF_NFC_DEP 0x0004
-
-
-
-#define NCI_CORE_PARAM_SIZE_CON_CREATE 0x02 /* handle, num_tlv, (tlv) */
-#define NCI_CORE_PARAM_SIZE_CON_CREATE_RSP 0x04 /* status, size, credits, conn_id */
-#define NCI_CON_CREATE_TAG_EE_INTF 0x00 /* old */
-#define NCI_CON_CREATE_TAG_RF_DISC_ID 0x00
-#define NCI_CON_CREATE_TAG_NFCEE_VAL 0x01
-
-#define NCI_CORE_PARAM_SIZE_CON_CLOSE 0x01 /* Conn ID (1 octet) */
-#define NCI_CORE_PARAM_SIZE_CON_CLOSE_RSP 0x01 /* Status (1 octet) */
-
-#define NCI_CORE_PARAM_SIZE_RF_FIELD_NTF 0x01 /* RF Field Status (1 octet) */
-
-#define NCI_RESET_TYPE_KEEP_CFG 0x00 /* Keep the NCI configuration (if possible) and perform NCI initialization. */
-#define NCI_RESET_TYPE_RESET_CFG 0x01 /* Reset the NCI configuration, and perform NCI initialization. */
-
-#define NCI_RESET_STATUS_KEPT_CFG 0x00 /* NCI Configuration has been kept */
-#define NCI_RESET_STATUS_RESET_CFG 0x01 /* NCI Configuration has been reset */
-
-#define NCI_RF_STS_NO_REMOTE 0x00 /* No operating field generated by remote device */
-#define NCI_RF_STS_REMOTE 0x01 /* Operating field generated by remote device */
-
-
-#define NCI_PARAM_SIZE_DISCOVER_NFCEE 0x01 /* Discovery Action (1 octet) */
-#define NCI_PARAM_SIZE_DISCOVER_NFCEE_RSP 0x02 /* Status (1 octet)Number of NFCEEs (1 octet) */
-
-#define NCI_DISCOVER_ACTION_DISABLE 0
-#define NCI_DISCOVER_ACTION_ENABLE 1
-
-#define NCI_EE_DISCOVER_REQ_TYPE_LISTEN 0x01
-#define NCI_EE_DISCOVER_REQ_TYPE_POLL 0x02
-
-#define NCI_RF_PARAM_ID_TECH_N_MODE 0x00 /* RF Technology and Mode */
-#define NCI_RF_PARAM_ID_TX_BIT_RATE 0x01 /* Transmit Bit Rate */
-#define NCI_RF_PARAM_ID_RX_BIT_RATE 0x02 /* Receive Bit Rate */
-#define NCI_RF_PARAM_ID_B_DATA_EX_PARAM 0x03 /* B Data Exchange config param */
-
-
-#define NCI_NFCEE_INTERFACE_APDU 0x00
-#define NCI_NFCEE_INTERFACE_HCI_ACCESS 0x01
-#define NCI_NFCEE_INTERFACE_T3T 0x02
-#define NCI_NFCEE_INTERFACE_TRANSPARENT 0x03
-#define NCI_NFCEE_INTERFACE_PROPRIETARY 0x80
-
-#define NCI_NFCEE_STS_CONN_ACTIVE 0x00
-#define NCI_NFCEE_STS_CONN_INACTIVE 0x01
-#define NCI_NFCEE_STS_REMOVED 0x02
-#define NCI_NUM_NFCEE_STS 3
-
-#define NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET 0x02 /* Logical Target ID (1 octet)NFCEE Mode (1 octet) */
-#define NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET_RSP 0x01 /* Status (1 octet) */
-
-#define NCI_NFCEE_MD_DEACTIVATE 0x00 /* Deactivate the connected NFCEE */
-#define NCI_NFCEE_MD_ACTIVATE 0x01 /* Activate the connected NFCEE */
-#define NCI_NUM_NFCEE_MODE 2
-
-/**********************************************
- * NCI Deactivation Type
- **********************************************/
-#define NCI_DEACTIVATE_TYPE_IDLE 0 /* Idle Mode */
-#define NCI_DEACTIVATE_TYPE_SLEEP 1 /* Sleep Mode */
-#define NCI_DEACTIVATE_TYPE_SLEEP_AF 2 /* Sleep_AF Mode */
-#define NCI_DEACTIVATE_TYPE_DISCOVERY 3 /* Discovery */
-
-/**********************************************
- * NCI Deactivation Reasons
- **********************************************/
-#define NCI_DEACTIVATE_REASON_DH_REQ 0 /* DH Request */
-#define NCI_DEACTIVATE_REASON_ENDPOINT_REQ 1 /* Endpoint Request */
-#define NCI_DEACTIVATE_REASON_RF_LINK_LOSS 2 /* RF Link Loss */
-#define NCI_DEACTIVATE_REASON_NFCB_BAD_AFI 3 /* NFC-B Bad AFI */
-
- /**********************************************
- * NCI Interface Mode
- **********************************************/
-#define NCI_INTERFACE_MODE_POLL 1
-#define NCI_INTERFACE_MODE_LISTEN 2
-#define NCI_INTERFACE_MODE_POLL_N_LISTEN 3
-
-/**********************************************
- * NCI Interface Types
- **********************************************/
-#define NCI_INTERFACE_EE_DIRECT_RF 0
-#define NCI_INTERFACE_FRAME 1
-#define NCI_INTERFACE_ISO_DEP 2
-#define NCI_INTERFACE_NFC_DEP 3
-#define NCI_INTERFACE_MAX NCI_INTERFACE_NFC_DEP
-#define NCI_INTERFACE_FIRST_VS 0x80
-typedef UINT8 tNCI_INTF_TYPE;
-
-/**********************************************
- * NCI RF Management / DISCOVERY Group Params
- **********************************************/
-#define NCI_DISCOVER_PARAM_SIZE_RSP 0x01
-
-#define NCI_DISCOVER_PARAM_SIZE_SELECT 0x03 /* ID, protocol, interface */
-#define NCI_DISCOVER_PARAM_SIZE_SELECT_RSP 0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_STOP 0x00 /* */
-#define NCI_DISCOVER_PARAM_SIZE_STOP_RSP 0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT 0x01 /* type */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT_RSP 0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT_NTF 0x01 /* type */
-
-/**********************************************
- * Supported Protocols
- **********************************************/
-#define NCI_PROTOCOL_UNKNOWN 0x00
-#define NCI_PROTOCOL_T1T 0x01
-#define NCI_PROTOCOL_T2T 0x02
-#define NCI_PROTOCOL_T3T 0x03
-#define NCI_PROTOCOL_ISO_DEP 0x04
-#define NCI_PROTOCOL_NFC_DEP 0x05
-/**********************************************
- * Proprietary Protocols
- **********************************************/
-#ifndef NCI_PROTOCOL_18092_ACTIVE
-#define NCI_PROTOCOL_18092_ACTIVE 0x80
-#endif
-#ifndef NCI_PROTOCOL_B_PRIME
-#define NCI_PROTOCOL_B_PRIME 0x81
-#endif
-#ifndef NCI_PROTOCOL_DUAL
-#define NCI_PROTOCOL_DUAL 0x82
-#endif
-#ifndef NCI_PROTOCOL_15693
-#define NCI_PROTOCOL_15693 0x83
-#endif
-#ifndef NCI_PROTOCOL_KOVIO
-#define NCI_PROTOCOL_KOVIO 0x8a
-#endif
-
-
-/* Discovery Types/Detected Technology and Mode */
-#define NCI_DISCOVERY_TYPE_POLL_A 0x00
-#define NCI_DISCOVERY_TYPE_POLL_B 0x01
-#define NCI_DISCOVERY_TYPE_POLL_F 0x02
-#define NCI_DISCOVERY_TYPE_POLL_A_ACTIVE 0x03
-#define NCI_DISCOVERY_TYPE_POLL_F_ACTIVE 0x05
-#define NCI_DISCOVERY_TYPE_POLL_B_PRIME 0x74
-#define NCI_DISCOVERY_TYPE_POLL_KOVIO 0x77
-#define NCI_DISCOVERY_TYPE_LISTEN_A 0x80
-#define NCI_DISCOVERY_TYPE_LISTEN_B 0x81
-#define NCI_DISCOVERY_TYPE_LISTEN_F 0x82
-#define NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE 0x83
-#define NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE 0x85
-#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME 0xF4
-#define NCI_DISCOVERY_TYPE_POLL_ISO15693 0x06
-#define NCI_DISCOVERY_TYPE_LISTEN_ISO15693 0x86
-#define NCI_DISCOVERY_TYPE_MAX NCI_DISCOVERY_TYPE_LISTEN_ISO15693
-
-typedef UINT8 tNCI_DISCOVERY_TYPE;
-
-#define NCI_EE_TRIG_7816_SELECT 0x00
-#define NCI_EE_TRIG_RF_PROTOCOL 0x01
-#define NCI_EE_TRIG_RF_TECHNOLOGY 0x02
-#define NCI_EE_TRIG_APP_INIT 0x10
-
-#define NCI_EE_ACT_TAG_AID 0xC0 /* AID */
-#define NCI_EE_ACT_TAG_PROTO 0xC1 /* RF protocol */
-#define NCI_EE_ACT_TAG_TECH 0xC2 /* RF technology */
-#define NCI_EE_ACT_TAG_DATA 0xC3 /* hex data for app */
-#define NCI_EE_ACT_TAG_DEBUG 0xC4 /* debug trace */
-
-#define NCI_ROUTE_TAG_TECH 0x00 /* Technology based routing */
-#define NCI_ROUTE_TAG_PROTO 0x01 /* Protocol based routing */
-#define NCI_ROUTE_TAG_AID 0x02 /* AID routing */
-
-#define NCI_ROUTE_PWR_STATE_ON 0x01 /* The device is on */
-#define NCI_ROUTE_PWR_STATE_SWITCH_OFF 0x02 /* The device is switched off */
-#define NCI_ROUTE_PWR_STATE_BATT_OFF 0x04 /* The device's battery is removed */
-
-#define NCI_NFCEE_TAG_HW_ID 0x00 /* Hardware / Registration Identification */
-#define NCI_NFCEE_TAG_ATR_BYTES 0x01 /* ATR Bytes */
-#define NCI_NFCEE_TAG_T3T_INFO 0x02 /* T3T Command Set Interface Supplementary Info */
-#define NCI_NFCEE_TAG_HCI_HOST_ID 0xA0 /* HCI host ID */
-
-#define NCI_DISCOVER_NTF_LAST 0x00
-#define NCI_DISCOVER_NTF_LAST_ABORT 0x01
-#define NCI_DISCOVER_NTF_MORE 0x02
-
-
-/* NCI RF Management Group Params */
-#define NCI_RF_PARAM_SIZE_T3T_POLLING 0x04 /* System Code, RC, TSN */
-
-/**********************************************
- * NCI Parameter IDs
- **********************************************/
-
-#define NCI_PARAM_ID_TOTAL_DURATION 0x00
-#define NCI_PARAM_ID_CON_DEVICES_LIMIT 0x01
-#define NCI_PARAM_ID_PA_BAILOUT 0x08
-#define NCI_PARAM_ID_PB_AFI 0x10
-#define NCI_PARAM_ID_PB_BAILOUT 0x11
-#define NCI_PARAM_ID_PB_ATTRIB_PARAM1 0x12
-#define NCI_PARAM_ID_PF_BIT_RATE 0x18
-#define NCI_PARAM_ID_PB_H_INFO 0x20
-#define NCI_PARAM_ID_PI_BIT_RATE 0x21
-
-#define NCI_PARAM_ID_BITR_NFC_DEP 0x28
-#define NCI_PARAM_ID_ATR_REQ_GEN_BYTES 0x29
-#define NCI_PARAM_ID_ATR_REQ_CONFIG 0x2A
-
-#define NCI_PARAM_ID_LA_BIT_FRAME_SDD 0x30
-#define NCI_PARAM_ID_LA_PLATFORM_CONFIG 0x31
-#define NCI_PARAM_ID_LA_SEL_INFO 0x32
-#define NCI_PARAM_ID_LA_NFCID1 0x33
-#define NCI_PARAM_ID_LB_SENSB_INFO 0x38
-#define NCI_PARAM_ID_LB_NFCID0 0x39
-#define NCI_PARAM_ID_LB_APPDATA 0x3A
-#define NCI_PARAM_ID_LB_SFGI 0x3B
-#define NCI_PARAM_ID_LB_ADC_FO 0x3C
-#define NCI_PARAM_ID_LB_PROTOCOL NCI_PARAM_ID_LB_SENSB_INFO
-
-#define NCI_PARAM_ID_LF_T3T_ID1 0x40
-#define NCI_PARAM_ID_LF_T3T_ID2 0x41
-#define NCI_PARAM_ID_LF_T3T_ID3 0x42
-#define NCI_PARAM_ID_LF_T3T_ID4 0x43
-#define NCI_PARAM_ID_LF_T3T_ID5 0x44
-#define NCI_PARAM_ID_LF_T3T_ID6 0x45
-#define NCI_PARAM_ID_LF_T3T_ID7 0x46
-#define NCI_PARAM_ID_LF_T3T_ID8 0x47
-#define NCI_PARAM_ID_LF_T3T_ID9 0x48
-#define NCI_PARAM_ID_LF_T3T_ID10 0x49
-#define NCI_PARAM_ID_LF_T3T_ID11 0x4A
-#define NCI_PARAM_ID_LF_T3T_ID12 0x4B
-#define NCI_PARAM_ID_LF_T3T_ID13 0x4C
-#define NCI_PARAM_ID_LF_T3T_ID14 0x4D
-#define NCI_PARAM_ID_LF_T3T_ID15 0x4E
-#define NCI_PARAM_ID_LF_T3T_ID16 0x4F
-#define NCI_PARAM_ID_LF_PROTOCOL 0x50
-#define NCI_PARAM_ID_LF_T3T_PMM 0x51
-#define NCI_PARAM_ID_LF_T3T_MAX 0x52 /* max num of LF_T3T_ID supported by NFCC (1 for now) */
-#define NCI_PARAM_ID_LF_T3T_FLAGS2 0x53
-#define NCI_PARAM_ID_LF_CON_BITR_F 0x54
-#define NCI_PARAM_ID_FWI 0x58
-#define NCI_PARAM_ID_LA_HIST_BY 0x59
-#define NCI_PARAM_ID_LB_H_INFO_RSP 0x5A
-#define NCI_PARAM_ID_LI_BIT_RATE 0x5B
-
-#define NCI_PARAM_ID_WT 0x60
-#define NCI_PARAM_ID_ATR_RES_GEN_BYTES 0x61
-#define NCI_PARAM_ID_ATR_RSP_CONFIG 0x62
-
-#define NCI_PARAM_ID_RF_FIELD_INFO 0x80
-#define NCI_PARAM_ID_RF_NFCEE_ACTION 0x81
-#define NCI_PARAM_ID_NFC_DEP_OP 0x82
-
-
-
-/* NCI_PARAM_ID_HOST_LISTEN_MASK (byte1 for DH, byte2 for UICC) */
-#define NCI_LISTEN_MASK_A 0x01 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_A_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_B 0x02 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_B_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_F 0x04 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_F_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_A_ACTIVE 0x08 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_B_PRIME 0x10 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_B_PRIME & 0x0F)) */
-#define NCI_LISTEN_MASK_F_ACTIVE 0x20 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_ISO15693 0x40 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_ISO15693 & 0x0F)) */
-
-/* Type A Parameters */
-#define NCI_PARAM_PLATFORM_T1T 0x0C
-#define NCI_PARAM_SEL_INFO_ISODEP 0x20
-#define NCI_PARAM_SEL_INFO_NFCDEP 0x40
-/**********************************************
- * NCI Parameter ID Lens
- **********************************************/
-#define NCI_PARAM_LEN_TOTAL_DURATION 2
-
-#define NCI_PARAM_LEN_PA_FSDI 1
-
-#define NCI_PARAM_LEN_LA_BIT_FRAME_SDD 1
-#define NCI_PARAM_LEN_LA_PLATFORM_CONFIG 1
-#define NCI_PARAM_LEN_LA_SEL_INFO 1
-
-#define NCI_PARAM_LEN_LB_SENSB_INFO 1
-#define NCI_PARAM_LEN_LB_NFCID0 4
-#define NCI_PARAM_LEN_LB_APPDATA 4
-#define NCI_PARAM_LEN_LB_ADC_FO 1
-
-#define NCI_PARAM_LEN_LF_PROTOCOL 1
-#define NCI_PARAM_LEN_LF_T3T_FLAGS2 2
-#define NCI_PARAM_LEN_LF_T3T_PMM 8
-#define NCI_PARAM_LEN_LF_T3T_ID 10
-
-#define NCI_PARAM_LEN_FWI 1
-#define NCI_PARAM_LEN_WT 1
-/* GEN_BYTES - variable */
-
-/* Listen protocol bits - NCI_PARAM_ID_LF_PROTOCOL and NCI_PARAM_ID_LB_SENSB_INFO */
-#define NCI_LISTEN_PROTOCOL_ISO_DEP 0x01
-#define NCI_LISTEN_PROTOCOL_NFC_DEP 0x02
-
-#define NCI_DISCOVER_PARAM_SIZE_TEST_RF 0x06
-
-
-/* LF_T3T_FLAGS2 listen bits all-disabled definition */
-#define NCI_LF_T3T_FLAGS2_ALL_DISABLED 0x0000
-#define NCI_LF_T3T_FLAGS2_ID1_ENABLED 0x0001
-
-typedef struct
-{
- UINT16 addr;
- UINT8 len;
- UINT8 *data;
-} NCIP_T1T_SETMEM_CMD_t;
-
-typedef struct
-{
- UINT8 status;
-} NCIP_T1T_SETMEM_RSP_t;
-
-typedef struct
-{
- UINT16 addr;
-} NCIP_T1T_GETMEM_CMD_t;
-
-typedef struct
-{
- UINT8 status;
- UINT8 *data;
-} NCIP_T1T_GETMEM_RSP_t;
-
-typedef struct
-{
- UINT8 hr0;
- UINT8 hr1;
-} NCIP_T1T_SETHR_CMD_t;
-
-typedef struct
-{
- UINT8 status;
-} NCIP_T1T_SETHR_RSP_t;
-
-
-#ifndef NCI_GET_CMD_BUF
-#if (!defined (HCI_USE_VARIABLE_SIZE_CMD_BUF) || (HCI_USE_VARIABLE_SIZE_CMD_BUF == FALSE))
-/* Allocate fixed-size buffer from HCI_CMD_POOL (default case) */
-#define NCI_GET_CMD_BUF(paramlen) ((BT_HDR *) GKI_getpoolbuf (NFC_NCI_POOL_ID))
-#else
-/* Allocate smallest possible buffer (for platforms with limited RAM) */
-#define NCI_GET_CMD_BUF(paramlen) ((BT_HDR *) GKI_getbuf ((UINT16) (BT_HDR_SIZE + NCI_MSG_HDR_SIZE + NCI_MSG_OFFSET_SIZE + (paramlen))))
-#endif
-#endif /* NCI_GET_CMD_BUF */
-
-
-#define NCI_MAX_AID_LEN 16
-
-
-typedef struct
-{
- UINT8 type;
- UINT8 frequency;
-} tNCI_DISCOVER_PARAMS;
-
-typedef struct
-{
- UINT8 protocol;
- UINT8 mode;
- UINT8 intf_type;
-} tNCI_DISCOVER_MAPS;
-
-#define NCI_NFCID1_MAX_LEN 10
-typedef struct
-{
- UINT8 sens_res[2];/* SENS_RES Response (ATQA). Available after Technology Detection */
- UINT8 nfcid1_len; /* 4, 7 or 10 */
- UINT8 nfcid1[NCI_NFCID1_MAX_LEN]; /* AKA NFCID1 */
- UINT8 sel_rsp; /* SEL_RSP (SAK) Available after Collision Resolution */
-} tNCI_RF_PA_PARAMS;
-
-
-#define NCI_MAX_SENSB_RES_LEN 12
-typedef struct
-{
- UINT8 sensb_res_len;/* Length of SENSB_RES Response (Byte 2 - Byte 12 or 13) Available after Technology Detection */
- UINT8 sensb_res[NCI_MAX_SENSB_RES_LEN]; /* SENSB_RES Response (ATQ) */
-} tNCI_RF_PB_PARAMS;
-
-#define NCI_MAX_SENSF_RES_LEN 18
-#define NCI_SENSF_RES_OFFSET_PAD0 8
-#define NCI_SENSF_RES_OFFSET_RD 16
-#define NCI_NFCID2_LEN 8
-#define NCI_T3T_PMM_LEN 8
-#define NCI_SYSTEMCODE_LEN 2
-#define NCI_RF_F_UID_LEN NCI_NFCID2_LEN
-#define NCI_MRTI_CHECK_INDEX 13
-#define NCI_MRTI_UPDATE_INDEX 14
-typedef struct
-{
- UINT8 bit_rate;/* NFC_BIT_RATE_212 or NFC_BIT_RATE_424 */
- UINT8 sensf_res_len;/* Length of SENSF_RES Response (Byte 2 - Byte 17 or 19) Available after Technology Detection */
- UINT8 sensf_res[NCI_MAX_SENSF_RES_LEN]; /* SENSB_RES Response */
-} tNCI_RF_PF_PARAMS;
-
-typedef struct
-{
- UINT8 nfcid2[NCI_NFCID2_LEN]; /* NFCID2 generated by the Local NFCC for NFC-DEP Protocol.Available for Frame Interface */
-} tNCI_RF_LF_PARAMS;
-
-typedef struct
-{
- tNCI_DISCOVERY_TYPE mode;
- union
- {
- tNCI_RF_PA_PARAMS pa;
- tNCI_RF_PB_PARAMS pb;
- tNCI_RF_PF_PARAMS pf;
- tNCI_RF_LF_PARAMS lf;
- } param; /* Discovery Type specific parameters */
-} tNCI_RF_TECH_PARAMS;
-
-
-#ifndef NCI_MAX_ATS_LEN
-#define NCI_MAX_ATS_LEN 60
-#endif
-#ifndef NCI_MAX_HIS_BYTES_LEN
-#define NCI_MAX_HIS_BYTES_LEN 50
-#endif
-#ifndef NCI_MAX_GEN_BYTES_LEN
-#define NCI_MAX_GEN_BYTES_LEN 48
-#endif
-
-#define NCI_ATS_T0_INDEX 0
-#define NCI_ATS_TC_MASK 0x40
-#define NCI_ATS_TB_MASK 0x20
-#define NCI_ATS_TA_MASK 0x10
-#define NCI_ATS_FSCI_MASK 0x0F
-typedef struct
-{
- UINT8 ats_res_len; /* Length of ATS RES */
- UINT8 ats_res[NCI_MAX_ATS_LEN]; /* ATS RES defined in [DIGPROT] */
-} tNCI_INTF_PA_ISO_DEP;
-
-typedef struct
-{
- UINT8 rats; /* RATS */
-} tNCI_INTF_LA_ISO_DEP;
-
-#define NCI_P_GEN_BYTE_INDEX 15
-#define NCI_L_GEN_BYTE_INDEX 14
-#define NCI_L_NFC_DEP_TO_INDEX 13
-typedef struct
-{
- UINT8 atr_res_len; /* Length of ATR_RES */
- UINT8 atr_res[NCI_MAX_ATS_LEN]; /* ATR_RES (Byte 3 - Byte 17+n) as defined in [DIGPROT] */
-} tNCI_INTF_PA_NFC_DEP;
-
-/* Note: keep tNCI_INTF_PA_NFC_DEP data member in the same order as tNCI_INTF_LA_NFC_DEP */
-typedef struct
-{
- UINT8 atr_req_len; /* Length of ATR_REQ */
- UINT8 atr_req[NCI_MAX_ATS_LEN]; /* ATR_REQ (Byte 3 - Byte 18+n) as defined in [DIGPROT] */
-} tNCI_INTF_LA_NFC_DEP;
-typedef tNCI_INTF_LA_NFC_DEP tNCI_INTF_LF_NFC_DEP;
-typedef tNCI_INTF_PA_NFC_DEP tNCI_INTF_PF_NFC_DEP;
-
-#define NCI_MAX_ATTRIB_LEN (10 + NCI_MAX_GEN_BYTES_LEN)
-
-typedef struct
-{
- UINT8 attrib_res_len; /* Length of ATTRIB RES */
- UINT8 attrib_res[NCI_MAX_ATTRIB_LEN]; /* ATTRIB RES as defined in [DIGPROT] */
-} tNCI_INTF_PB_ISO_DEP;
-
-typedef struct
-{
- UINT8 attrib_req_len; /* Length of ATTRIB REQ */
- UINT8 attrib_req[NCI_MAX_ATTRIB_LEN]; /* ATTRIB REQ (Byte 2 - Byte 10+k) as defined in [DIGPROT] */
-} tNCI_INTF_LB_ISO_DEP;
-
-typedef struct
-{
- tNCI_INTF_TYPE type; /* Interface Type 1 Byte See Table 67 */
- union
- {
- tNCI_INTF_LA_ISO_DEP la_iso;
- tNCI_INTF_PA_ISO_DEP pa_iso;
- tNCI_INTF_LB_ISO_DEP lb_iso;
- tNCI_INTF_PB_ISO_DEP pb_iso;
- tNCI_INTF_LA_NFC_DEP la_nfc;
- tNCI_INTF_PA_NFC_DEP pa_nfc;
- tNCI_INTF_LF_NFC_DEP lf_nfc;
- tNCI_INTF_PF_NFC_DEP pf_nfc;
- } intf_param; /* Activation Parameters 0 - n Bytes */
-} tNCI_INTF_PARAMS;
-
-/*
-** HCI Network CMD/NTF structure
-*/
-typedef struct
-{
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
- UINT8 mode; /* Type A card emulation enabled indicator, 0x02:enabled */
- UINT8 sak;
- UINT8 uid_reg_len;
- UINT8 uid_reg[10];
- UINT8 atqa[2]; /* ATQA response code */
- UINT8 app_data_len;
- UINT8 app_data[15]; /* 15 bytes optional storage for historic data, use 2 slots */
- UINT8 fwi_sfgi; /* FRAME WAITING TIME, START-UP FRAME GUARD TIME */
- UINT8 cid_support;
- UINT8 datarate_max[3];
- UINT8 clt_support;
-} tNCI_HCI_CE_RF_A;
-
-typedef struct
-{
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
- UINT8 mode; /* Type B card emulation enabled indicator, 0x02:enabled */
- UINT8 pupi_len;
- UINT8 pupi_reg[4];
- UINT8 afi;
- UINT8 atqb[4]; /* 4 bytes ATQB application data */
- UINT8 higherlayer_resp[61]; /* 0~ 61 bytes ATRB_INF use 1~4 personality slots */
- UINT8 datarate_max[3];
- UINT8 natrb;
-} tNCI_HCI_CE_RF_B;
-
-typedef struct
-{
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
- UINT8 mode; /* Type B prime card emulation enabled indicator, 0x02:enabled */
- UINT8 pat_in_len;
- UINT8 pat_in[8];
- UINT8 dat_out_len;
- UINT8 dat_out[40]; /* ISO7816-3 <=64 byte, and other fields are 9 bytes */
- UINT8 natr;
-} tNCI_HCI_CE_RF_BP;
-
-typedef struct
-{
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
- UINT8 mode; /* Type F card emulation enabled indicator, 0x02:enabled */
- UINT8 speed_cap;
- UINT8 clt_support;
-} tNCI_HCI_CE_RF_F;
-
-typedef struct
-{
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
- UINT8 datarate_max;
-} tNCI_HCI_RD_RF_A;
-
-typedef struct
-{
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
- UINT8 afi;
- UINT8 hldata_len;
- UINT8 high_layer_data[61]; /* INF field in ATTRIB command */
-} tNCI_HCI_RD_RF_B;
-
-typedef struct
-{
- UINT8 source_host;
- UINT8 dest_host;
- UINT8 source_gate;
- UINT8 dest_gate;
- UINT8 pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-} tNCI_HCI_DYN_PIPE_INFO;
-
-typedef struct
-{
- UINT8 target_handle;
- UINT8 session_id[8];
- UINT8 sync_id[2];
- UINT8 static_pipe_info;
- tNCI_HCI_CE_RF_A ce_rf_a;
- tNCI_HCI_CE_RF_B ce_rf_b;
- tNCI_HCI_CE_RF_BP ce_rf_bp;
- tNCI_HCI_CE_RF_F ce_rf_f;
-} tNCI_HCI_NETWK;
-
-typedef struct
-{
- UINT8 target_handle;
- UINT8 session_id[8];
- UINT8 static_pipe_info;
- UINT8 num_dyn_pipes;
- tNCI_HCI_DYN_PIPE_INFO dyn_pipe_info[20];
-} tNCI_HCI_NETWK_DH;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_NCI_DEFS_H */
diff --git a/halimpl/bcm2079x/hal/include/nfc_hal_api.h b/halimpl/bcm2079x/hal/include/nfc_hal_api.h
deleted file mode 100644
index d147527..0000000
--- a/halimpl/bcm2079x/hal/include/nfc_hal_api.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * NFC Hardware Abstraction Layer API
- *
- ******************************************************************************/
-#ifndef NFC_HAL_API_H
-#define NFC_HAL_API_H
-#include <hardware/nfc.h>
-#include "data_types.h"
-
-/****************************************************************************
-** NFC_HDR header definition for NFC messages
-*****************************************************************************/
-typedef struct
-{
- UINT16 event;
- UINT16 len;
- UINT16 offset;
- UINT16 layer_specific;
-} NFC_HDR;
-#define NFC_HDR_SIZE (sizeof (NFC_HDR))
-
-typedef UINT8 tHAL_NFC_STATUS;
-
-typedef void (tHAL_NFC_STATUS_CBACK) (tHAL_NFC_STATUS status);
-typedef void (tHAL_NFC_CBACK) (UINT8 event, tHAL_NFC_STATUS status);
-typedef void (tHAL_NFC_DATA_CBACK) (UINT16 data_len, UINT8 *p_data);
-
-/*******************************************************************************
-** tHAL_NFC_ENTRY HAL entry-point lookup table
-*******************************************************************************/
-
-typedef void (tHAL_API_INITIALIZE) (void);
-typedef void (tHAL_API_TERMINATE) (void);
-typedef void (tHAL_API_OPEN) (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
-typedef void (tHAL_API_CLOSE) (void);
-typedef void (tHAL_API_CORE_INITIALIZED) (UINT8 *p_core_init_rsp_params);
-typedef void (tHAL_API_WRITE) (UINT16 data_len, UINT8 *p_data);
-typedef BOOLEAN (tHAL_API_PREDISCOVER) (void);
-typedef void (tHAL_API_CONTROL_GRANTED) (void);
-typedef void (tHAL_API_POWER_CYCLE) (void);
-
-
-typedef struct
-{
- tHAL_API_INITIALIZE *initialize;
- tHAL_API_TERMINATE *terminate;
- tHAL_API_OPEN *open;
- tHAL_API_CLOSE *close;
- tHAL_API_CORE_INITIALIZED *core_initialized;
- tHAL_API_WRITE *write;
- tHAL_API_PREDISCOVER *prediscover;
- tHAL_API_CONTROL_GRANTED *control_granted;
- tHAL_API_POWER_CYCLE *power_cycle;
-
-
-} tHAL_NFC_ENTRY;
-
-
-/*******************************************************************************
-** HAL API Function Prototypes
-*******************************************************************************/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Toolset-specific macro for exporting API funcitons */
-#if (defined(NFC_HAL_TARGET) && (NFC_HAL_TARGET == TRUE)) && (defined(_WINDLL))
-#define EXPORT_HAL_API __declspec(dllexport)
-#else
-#define EXPORT_HAL_API
-#endif
-
-/*******************************************************************************
-**
-** Function HAL_NfcInitialize
-**
-** Description Called when HAL library is loaded.
-**
-** Initialize GKI and start the HCIT task
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcInitialize(void);
-
-/*******************************************************************************
-**
-** Function HAL_NfcTerminate
-**
-** Description Called to terminate NFC HAL
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcTerminate(void);
-
-/*******************************************************************************
-**
-** Function HAL_NfcOpen
-**
-** Description Open transport and intialize the NFCC, and
-** Register callback for HAL event notifications,
-**
-** HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
-
-/*******************************************************************************
-**
-** Function HAL_NfcClose
-**
-** Description Prepare for shutdown. A HAL_CLOSE_CPLT_EVT will be
-** reported when complete.
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcClose (void);
-
-/*******************************************************************************
-**
-** Function HAL_NfcCoreInitialized
-**
-** Description Called after the CORE_INIT_RSP is received from the NFCC.
-** At this time, the HAL can do any chip-specific configuration,
-** and when finished signal the libnfc-nci with event
-** HAL_POST_INIT_CPLT_EVT.
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcCoreInitialized (UINT8 *p_core_init_rsp_params);
-
-/*******************************************************************************
-**
-** Function HAL_NfcWrite
-**
-** Description Send an NCI control message or data packet to the
-** transport. If an NCI command message exceeds the transport
-** size, HAL is responsible for fragmenting it, Data packets
-** must be of the correct size.
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcWrite (UINT16 data_len, UINT8 *p_data);
-
-/*******************************************************************************
-**
-** Function HAL_NfcPreDiscover
-**
-** Description Perform any vendor-specific pre-discovery actions (if needed)
-** If any actions were performed TRUE will be returned, and
-** HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are
-** completed.
-**
-** Returns TRUE if vendor-specific pre-discovery actions initialized
-** FALSE if no vendor-specific pre-discovery actions are needed.
-**
-*******************************************************************************/
-EXPORT_HAL_API BOOLEAN HAL_NfcPreDiscover (void);
-
-/*******************************************************************************
-**
-** Function HAL_NfcControlGranted
-**
-** Description Grant control to HAL control for sending NCI commands.
-**
-** Call in response to HAL_REQUEST_CONTROL_EVT.
-**
-** Must only be called when there are no NCI commands pending.
-**
-** HAL_RELEASE_CONTROL_EVT will notify when HAL no longer
-** needs control of NCI.
-**
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcControlGranted (void);
-
-/*******************************************************************************
-**
-** Function HAL_NfcPowerCycle
-**
-** Description Restart NFCC by power cyle
-**
-** HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcPowerCycle (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_API_H */
diff --git a/halimpl/bcm2079x/hal/include/nfc_hal_target.h b/halimpl/bcm2079x/hal/include/nfc_hal_target.h
deleted file mode 100644
index b6eedc9..0000000
--- a/halimpl/bcm2079x/hal/include/nfc_hal_target.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_TARGET_H
-#define NFC_HAL_TARGET_H
-
-#include "data_types.h"
-
-#ifdef BUILDCFG
-#include "buildcfg_hal.h"
-#endif
-
-/****************************************************************************
-** NCI related configuration
-****************************************************************************/
-
-/* GKI pool for NCI messages */
-#ifndef NFC_HAL_NCI_POOL_ID
-#define NFC_HAL_NCI_POOL_ID GKI_POOL_ID_1
-#endif
-
-#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
-#define NFC_HAL_NCI_POOL_BUF_SIZE GKI_BUF1_SIZE
-#endif
-
-/* Initial Max Control Packet Payload Size (until receiving payload size in INIT_CORE_RSP) */
-#ifndef NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE
-#define NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE 0xFF
-#endif
-
-/* Number of bytes to reserve in front of NCI messages (e.g. for transport header) */
-#ifndef NFC_HAL_NCI_MSG_OFFSET_SIZE
-#define NFC_HAL_NCI_MSG_OFFSET_SIZE 1
-#endif
-
-/* NFC-WAKE */
-#ifndef NFC_HAL_LP_NFC_WAKE_GPIO
-#define NFC_HAL_LP_NFC_WAKE_GPIO UPIO_GENERAL3
-#endif
-
-/* NFCC snooze mode idle timeout before deassert NFC_WAKE in ms */
-#ifndef NFC_HAL_LP_IDLE_TIMEOUT
-#define NFC_HAL_LP_IDLE_TIMEOUT 100
-#endif
-
-/* NFC snooze mode */
-#ifndef NFC_HAL_LP_SNOOZE_MODE
-#define NFC_HAL_LP_SNOOZE_MODE NFC_HAL_LP_SNOOZE_MODE_UART
-#endif
-
-/* Idle Threshold Host in 100ms unit */
-#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HOST
-#define NFC_HAL_LP_IDLE_THRESHOLD_HOST 0
-#endif
-
-/* Idle Threshold HC in 100ms unit */
-#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HC
-#define NFC_HAL_LP_IDLE_THRESHOLD_HC 0
-#endif
-
-
-/* Default NFCC power-up baud rate */
-#ifndef NFC_HAL_DEFAULT_BAUD
-#define NFC_HAL_DEFAULT_BAUD USERIAL_BAUD_115200
-#endif
-
-/* time (in ms) between power off and on NFCC */
-#ifndef NFC_HAL_POWER_CYCLE_DELAY
-#define NFC_HAL_POWER_CYCLE_DELAY 100
-#endif
-
-#ifndef NFC_HAL_PRM_DEBUG
-#define NFC_HAL_PRM_DEBUG TRUE
-#endif
-
-/* max patch data length (Can be overridden by platform for ACL HCI command size) */
-#ifndef NFC_HAL_PRM_HCD_CMD_MAXLEN
-#define NFC_HAL_PRM_HCD_CMD_MAXLEN 250
-#endif
-
-/* Require PreI2C patch by default */
-#ifndef NFC_HAL_PRE_I2C_PATCH_INCLUDED
-#define NFC_HAL_PRE_I2C_PATCH_INCLUDED TRUE
-#endif
-
-/* Set to TRUE to always download patch regardless of version */
-#ifndef NFC_HAL_PRM_SKIP_VERSION_CHECK
-#define NFC_HAL_PRM_SKIP_VERSION_CHECK FALSE
-#endif
-
-/* Mininum payload size for SPD NCI commands (used to validate HAL_NfcPrmSetSpdNciCmdPayloadSize) */
-/* Default is 32, as required by the NCI specifications; however this value may be */
-/* over-riden for platforms that have transport packet limitations */
-#ifndef NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE
-#define NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE (32)
-#endif
-
-/* amount of time to wait for RESET NTF after patch download */
-#ifndef NFC_HAL_PRM_RESET_NTF_DELAY
-#define NFC_HAL_PRM_RESET_NTF_DELAY (10000)
-#endif
-
-/* amount of time to wait after downloading preI2C patch before downloading LPM/FPM patch */
-#ifndef NFC_HAL_PRM_POST_I2C_FIX_DELAY
-#define NFC_HAL_PRM_POST_I2C_FIX_DELAY (200)
-#endif
-
-/* NFCC will respond to more than one technology during listen discovery */
-#ifndef NFC_HAL_DM_MULTI_TECH_RESP
-#define NFC_HAL_DM_MULTI_TECH_RESP TRUE
-#endif
-
-/* Data rate for 15693 command/response, it must be same as RW_I93_FLAG_DATA_RATE in nfc_target.h */
-#define NFC_HAL_I93_FLAG_DATA_RATE_LOW 0x00
-#define NFC_HAL_I93_FLAG_DATA_RATE_HIGH 0x02
-
-#ifndef NFC_HAL_I93_FLAG_DATA_RATE
-#define NFC_HAL_I93_FLAG_DATA_RATE NFC_HAL_I93_FLAG_DATA_RATE_HIGH
-#endif
-
-/* Quick Timer */
-#ifndef QUICK_TIMER_TICKS_PER_SEC
-#define QUICK_TIMER_TICKS_PER_SEC 100 /* 10ms timer */
-#endif
-
-#ifndef NFC_HAL_SHARED_TRANSPORT_ENABLED
-#define NFC_HAL_SHARED_TRANSPORT_ENABLED FALSE
-#endif
-
-/* Enable verbose tracing by default */
-#ifndef NFC_HAL_TRACE_VERBOSE
-#define NFC_HAL_TRACE_VERBOSE TRUE
-#endif
-
-#ifndef NFC_HAL_INITIAL_TRACE_LEVEL
-#define NFC_HAL_INITIAL_TRACE_LEVEL 5
-#endif
-
-/* Map NFC serial port to USERIAL_PORT_6 by default */
-#ifndef USERIAL_NFC_PORT
-#define USERIAL_NFC_PORT (USERIAL_PORT_6)
-#endif
-
-/* Restore NFCC baud rate to default on shutdown if baud rate was updated */
-#ifndef NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN
-#define NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN TRUE
-#endif
-
-/* Enable protocol tracing by default */
-#ifndef NFC_HAL_TRACE_PROTOCOL
-#define NFC_HAL_TRACE_PROTOCOL TRUE
-#endif
-#define BT_TRACE_PROTOCOL (NFC_HAL_TRACE_PROTOCOL)
-
-#define LogMsg_0 LogMsg
-#define LogMsg_1 LogMsg
-#define LogMsg_2 LogMsg
-#define LogMsg_3 LogMsg
-#define LogMsg_4 LogMsg
-#define LogMsg_5 LogMsg
-#define LogMsg_6 LogMsg
-
-/* Trace macros */
-#define BT_TRACE_0(l,t,m) LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
-#define BT_TRACE_1(l,t,m,p1) LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1))
-#define BT_TRACE_2(l,t,m,p1,p2) LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2))
-#define BT_TRACE_3(l,t,m,p1,p2,p3) LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3))
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4) LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4))
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5) LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
- (UINT32)(p5))
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6) LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
- (UINT32)(p5),(UINT32)(p6))
-
-#define NCI_TRACE_ERROR0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m);}
-#define NCI_TRACE_ERROR1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1);}
-#define NCI_TRACE_ERROR2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NCI_TRACE_ERROR3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_WARNING0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m);}
-#define NCI_TRACE_WARNING1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1);}
-#define NCI_TRACE_WARNING2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NCI_TRACE_WARNING3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_API0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m);}
-#define NCI_TRACE_API1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1);}
-#define NCI_TRACE_API2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2);}
-#define NCI_TRACE_API3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NCI_TRACE_API4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_EVENT0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m);}
-#define NCI_TRACE_EVENT1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1);}
-#define NCI_TRACE_EVENT2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NCI_TRACE_EVENT3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_DEBUG0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m);}
-#define NCI_TRACE_DEBUG1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1);}
-#define NCI_TRACE_DEBUG2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GKI_TARGET_H */
diff --git a/halimpl/bcm2079x/hal/include/nfc_types.h b/halimpl/bcm2079x/hal/include/nfc_types.h
deleted file mode 100644
index c4a963f..0000000
--- a/halimpl/bcm2079x/hal/include/nfc_types.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-#ifndef NFC_TYPES_H
-#define NFC_TYPES_H
-
-/* Mask for NFC_HDR event field */
-#define NFC_EVT_MASK 0xFF00
-#define NFC_SUB_EVT_MASK 0x00FF
-
-/****************************************************************************
-** NFC_HAL_TASK definitions
-*****************************************************************************/
-
-/* NFC_HAL_TASK event messages */
-#define NFC_HAL_EVT_TO_NFC_NCI 0x0100 /* NCI message for sending to NFCC */
-#define NFC_HAL_EVT_POST_CORE_RESET 0x0200 /* Request to start NCIT quick timer */
-#define NFC_HAL_EVT_TO_START_QUICK_TIMER 0x0300 /* Request to start chip-specific config */
-#define NFC_HAL_EVT_HCI 0x0400 /* NCI message for hci persistency data */
-#define NFC_HAL_EVT_PRE_DISCOVER 0x0500 /* NCI message to issue prediscover config */
-#define NFC_HAL_EVT_CONTROL_GRANTED 0x0600 /* permission to send commands queued in HAL*/
-
-/* NFC_HAL_TASK sub event messages */
-#define NFC_HAL_HCI_RSP_NV_READ_EVT (0x01 | NFC_HAL_EVT_HCI)
-#define NFC_HAL_HCI_RSP_NV_WRITE_EVT (0x02 | NFC_HAL_EVT_HCI)
-#define NFC_HAL_HCI_VSC_TIMEOUT_EVT (0x03 | NFC_HAL_EVT_HCI)
-
-
-/* Event masks for NFC_TASK messages */
-#define NFC_EVT_TO_NFC_NCI 0x4000 /* NCI message for sending to host stack */
-#define NFC_EVT_TO_NFC_ERR 0x4100 /* Error notification to NFC Task */
-#define NFC_EVT_TO_NFC_MSGS 0x4200 /* Messages between NFC and NCI task */
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a stream (Little Endian format).
-*****************************************************************************/
-
-#define UINT32_TO_STREAM(p, u32) {*(p)++ = (UINT8)(u32); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 24);}
-#define UINT24_TO_STREAM(p, u24) {*(p)++ = (UINT8)(u24); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)((u24) >> 16);}
-#define UINT16_TO_STREAM(p, u16) {*(p)++ = (UINT8)(u16); *(p)++ = (UINT8)((u16) >> 8);}
-#define UINT8_TO_STREAM(p, u8) {*(p)++ = (UINT8)(u8);}
-#define INT8_TO_STREAM(p, u8) {*(p)++ = (INT8)(u8);}
-#define ARRAY32_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < 32; ijk++) *(p)++ = (UINT8) a[31 - ijk];}
-#define ARRAY16_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < 16; ijk++) *(p)++ = (UINT8) a[15 - ijk];}
-#define ARRAY8_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < 8; ijk++) *(p)++ = (UINT8) a[7 - ijk];}
-#define BDADDR_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *(p)++ = (UINT8) a[BD_ADDR_LEN - 1 - ijk];}
-#define LAP_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < LAP_LEN; ijk++) *(p)++ = (UINT8) a[LAP_LEN - 1 - ijk];}
-#define DEVCLASS_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < DEV_CLASS_LEN;ijk++) *(p)++ = (UINT8) a[DEV_CLASS_LEN - 1 - ijk];}
-#define ARRAY_TO_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
-#define REVERSE_ARRAY_TO_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[len - 1 - ijk];}
-
-#define STREAM_TO_UINT8(u8, p) {u8 = (UINT8)(*(p)); (p) += 1;}
-#define STREAM_TO_UINT16(u16, p) {u16 = ((UINT16)(*(p)) + (((UINT16)(*((p) + 1))) << 8)); (p) += 2;}
-#define STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) ); (p) += 3;}
-#define STREAM_TO_UINT32(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) + ((((UINT32)(*((p) + 3)))) << 24)); (p) += 4;}
-#define STREAM_TO_BDADDR(a, p) {register int ijk; register UINT8 *pbda = (UINT8 *)a + BD_ADDR_LEN - 1; for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *pbda-- = *p++;}
-#define STREAM_TO_ARRAY32(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + 31; for (ijk = 0; ijk < 32; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY16(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + 15; for (ijk = 0; ijk < 16; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY8(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + 7; for (ijk = 0; ijk < 8; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_DEVCLASS(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + DEV_CLASS_LEN - 1; for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_LAP(a, p) {register int ijk; register UINT8 *plap = (UINT8 *)a + LAP_LEN - 1; for (ijk = 0; ijk < LAP_LEN; ijk++) *plap-- = *p++;}
-#define STREAM_TO_ARRAY(a, p, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-#define REVERSE_STREAM_TO_ARRAY(a, p, len) {register int ijk; register UINT8 *_pa = (UINT8 *)a + len - 1; for (ijk = 0; ijk < len; ijk++) *_pa-- = *p++;}
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a field (Little Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*****************************************************************************/
-
-#define UINT32_TO_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)(u32); *((UINT8 *)(p)+1) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+3) = (UINT8)((u32) >> 24);}
-#define UINT24_TO_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)(u24); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u24) >> 16);}
-#define UINT16_TO_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)(u16); *((UINT8 *)(p)+1) = (UINT8)((u16) >> 8);}
-#define UINT8_TO_FIELD(p, u8) {*(UINT8 *)(p) = (UINT8)(u8);}
-
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a stream (Big Endian format)
-*****************************************************************************/
-
-#define UINT32_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 24); *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
-#define UINT24_TO_BE_STREAM(p, u24) {*(p)++ = (UINT8)((u24) >> 16); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)(u24);}
-#define UINT16_TO_BE_STREAM(p, u16) {*(p)++ = (UINT8)((u16) >> 8); *(p)++ = (UINT8)(u16);}
-#define UINT8_TO_BE_STREAM(p, u8) {*(p)++ = (UINT8)(u8);}
-#define ARRAY_TO_BE_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
-
-#define BE_STREAM_TO_UINT8(u8, p) {u8 = (UINT8)(*(p)); (p) += 1;}
-#define BE_STREAM_TO_UINT16(u16, p) {u16 = (UINT16)(((UINT16)(*(p)) << 8) + (UINT16)(*((p) + 1))); (p) += 2;}
-#define BE_STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*((p) + 2))) + ((UINT32)(*((p) + 1)) << 8) + ((UINT32)(*(p)) << 16)); (p) += 3;}
-#define BE_STREAM_TO_UINT32(u32, p) {u32 = ((UINT32)(*((p) + 3)) + ((UINT32)(*((p) + 2)) << 8) + ((UINT32)(*((p) + 1)) << 16) + ((UINT32)(*(p)) << 24)); (p) += 4;}
-#define BE_STREAM_TO_ARRAY(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a field (Big Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*****************************************************************************/
-
-#define UINT32_TO_BE_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)((u32) >> 24); *((UINT8 *)(p)+1) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+3) = (UINT8)(u32); }
-#define UINT24_TO_BE_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)((u24) >> 16); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)(u24);}
-#define UINT16_TO_BE_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)((u16) >> 8); *((UINT8 *)(p)+1) = (UINT8)(u16);}
-#define UINT8_TO_BE_FIELD(p, u8) {*(UINT8 *)(p) = (UINT8)(u8);}
-
-/*****************************************************************************
-** Define trace levels
-*****************************************************************************/
-
-#define BT_TRACE_LEVEL_NONE 0 /* No trace messages to be generated */
-#define BT_TRACE_LEVEL_ERROR 1 /* Error condition trace messages */
-#define BT_TRACE_LEVEL_WARNING 2 /* Warning condition trace messages */
-#define BT_TRACE_LEVEL_API 3 /* API traces */
-#define BT_TRACE_LEVEL_EVENT 4 /* Debug messages for events */
-#define BT_TRACE_LEVEL_DEBUG 5 /* Full debug messages */
-
-
-#define TRACE_CTRL_GENERAL 0x00000000
-#define TRACE_LAYER_NCI 0x00280000
-#define TRACE_LAYER_GKI 0x001a0000
-#define TRACE_ORG_STACK 0x00000000
-#define TRACE_ORG_GKI 0x00000400
-
-#define TRACE_TYPE_ERROR 0x00000000
-#define TRACE_TYPE_WARNING 0x00000001
-#define TRACE_TYPE_API 0x00000002
-#define TRACE_TYPE_EVENT 0x00000003
-#define TRACE_TYPE_DEBUG 0x00000004
-
-
-/* Define a function for logging */
-typedef void (BT_LOG_FUNC) (int trace_type, const char *fmt_str, ...);
-
-#endif /* NFC_TYPES_H */
-
diff --git a/halimpl/bcm2079x/hal/int/nfc_brcm_defs.h b/halimpl/bcm2079x/hal/int/nfc_brcm_defs.h
deleted file mode 100644
index 9ce68e3..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_brcm_defs.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2012 Broadcom Corporation
- *
- * 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 file contains the Broadcom-specific defintions that are shared
- * between HAL, nfc stack, adaptation layer and applications.
- *
- ******************************************************************************/
-
-#ifndef NFC_BRCM_DEFS_H
-#define NFC_BRCM_DEFS_H
-
-/*****************************************************************************
-** Broadcom-specific NCI definitions
-*****************************************************************************/
-
-/**********************************************
- * NCI Message Proprietary Group - F
- **********************************************/
-#define NCI_MSG_TAG_SET_MEM 0x00
-#define NCI_MSG_TAG_GET_MEM 0x01
-#define NCI_MSG_T1T_SET_HR 0x02
-#define NCI_MSG_SET_CLF_REGISTERS 0x03
-#define NCI_MSG_GET_BUILD_INFO 0x04
-#define NCI_MSG_HCI_NETWK 0x05
-#define NCI_MSG_SET_FWFSM 0x06
-#define NCI_MSG_SET_UICCRDRF 0x07
-#define NCI_MSG_POWER_LEVEL 0x08
-#define NCI_MSG_FRAME_LOG 0x09
-#define NCI_MSG_UICC_READER_ACTION 0x0A
-#define NCI_MSG_SET_PPSE_RESPONSE 0x0B
-#define NCI_MSG_PRBS_SET 0x0C
-#define NCI_MSG_RESET_ALL_UICC_CFG 0x0D /* reset HCI network/close all pipes (S,D) register */
-#define NCI_MSG_GET_NFCEE_INFO 0x0E
-#define NCI_MSG_DISABLE_INIT_CHECK 0x0F
-#define NCI_MSG_ANTENNA_SELF_TEST 0x10
-#define NCI_MSG_SET_MAX_PKT_SIZE 0x11
-#define NCI_MSG_NCIP_CLK_REQ_OR_CAR_DET 0x12
-#define NCI_MSG_NCIP_CONFIG_DBUART 0x13
-#define NCI_MSG_NCIP_ENABLE_DVT_DRIVER 0x14
-#define NCI_MSG_SET_ASWP 0x15
-#define NCI_MSG_ENCAPSULATE_NCI 0x16
-#define NCI_MSG_CONFIGURE_ARM_JTAG 0x17
-#define NCI_MSG_STATISTICS 0x18
-#define NCI_MSG_SET_DSP_TABLE 0x19
-#define NCI_MSG_GET_DSP_TABLE 0x1a
-#define NCI_MSG_READY_RX_CMD 0x1b
-#define NCI_MSG_GET_VBAT 0x1c
-#define NCI_MSG_GET_XTAL_INDEX_FROM_DH 0x1d
-#define NCI_MSG_SWP_LOG 0x1e
-#define NCI_MSG_GET_PWRLEVEL 0x1f
-#define NCI_MSG_SET_VBAT_MONITOR 0x20
-#define NCI_MSG_SET_TINT_MODE 0x21
-#define NCI_MSG_ACCESS_APP 0x22
-#define NCI_MSG_SET_SECURE_MODE 0x23
-#define NCI_MSG_GET_NV_DEVICE 0x24
-#define NCI_MSG_LPTD 0x25
-#define NCI_MSG_SET_CE4_AS_SNOOZE 0x26
-#define NCI_MSG_NFCC_SEND_HCI 0x27
-#define NCI_MSG_CE4_PATCH_DOWNLOAD_DONE 0x28
-#define NCI_MSG_EEPROM_RW 0x29
-#define NCI_MSG_GET_CLF_REGISTERS 0x2A
-#define NCI_MSG_RF_TEST 0x2B
-#define NCI_MSG_DEBUG_PRINT 0x2C
-#define NCI_MSG_GET_PATCH_VERSION 0x2D
-#define NCI_MSG_SECURE_PATCH_DOWNLOAD 0x2E
-#define NCI_MSG_SPD_FORMAT_NVM 0x2F
-#define NCI_MSG_SPD_READ_NVM 0x30
-
-/**********************************************
- * Proprietary NCI status codes
- **********************************************/
-#define NCI_STATUS_SPD_ERROR_ORDER 0xE0
-#define NCI_STATUS_SPD_ERROR_DEST 0xE1
-#define NCI_STATUS_SPD_ERROR_PROJECTID 0xE2
-#define NCI_STATUS_SPD_ERROR_CHIPVER 0xE3
-#define NCI_STATUS_SPD_ERROR_MAJORVER 0xE4
-#define NCI_STATUS_SPD_ERROR_INVALID_PARAM 0xE5
-#define NCI_STATUS_SPD_ERROR_INVALID_SIG 0xE6
-#define NCI_STATUS_SPD_ERROR_NVM_CORRUPTED 0xE7
-#define NCI_STATUS_SPD_ERROR_PWR_MODE 0xE8
-#define NCI_STATUS_SPD_ERROR_MSG_LEN 0xE9
-#define NCI_STATUS_SPD_ERROR_PATCHSIZE 0xEA
-
-
-
-#define NCI_NV_DEVICE_NONE 0x00
-#define NCI_NV_DEVICE_EEPROM 0x08
-#define NCI_NV_DEVICE_UICC1 0x10
-
-/* The events reported on tNFC_VS_CBACK */
-/* The event is (NCI_NTF_BIT|oid) or (NCI_RSP_BIT|oid) */
-#define NFC_VS_HCI_NETWK_EVT (NCI_NTF_BIT|NCI_MSG_HCI_NETWK)
-#define NFC_VS_HCI_NETWK_RSP (NCI_RSP_BIT|NCI_MSG_HCI_NETWK)
-#define NFC_VS_UICC_READER_ACTION_EVT (NCI_NTF_BIT|NCI_MSG_UICC_READER_ACTION)
-#define NFC_VS_POWER_LEVEL_RSP (NCI_RSP_BIT|NCI_MSG_POWER_LEVEL)
-#define NFC_VS_GET_NV_DEVICE_EVT (NCI_RSP_BIT|NCI_MSG_GET_NV_DEVICE)
-#define NFC_VS_LPTD_EVT (NCI_NTF_BIT|NCI_MSG_LPTD)
-#define NFC_VS_GET_BUILD_INFO_EVT (NCI_RSP_BIT|NCI_MSG_GET_BUILD_INFO)
-#define NFC_VS_GET_PATCH_VERSION_EVT (NCI_RSP_BIT|NCI_MSG_GET_PATCH_VERSION)
-#define NFC_VS_SEC_PATCH_DOWNLOAD_EVT (NCI_RSP_BIT|NCI_MSG_SECURE_PATCH_DOWNLOAD)
-#define NFC_VS_SEC_PATCH_AUTH_EVT (NCI_NTF_BIT|NCI_MSG_SECURE_PATCH_DOWNLOAD)
-
-#define NCI_GET_PATCH_VERSION_NVM_OFFSET 37
-
-
-#define NCI_NFCC_PIPE_INFO_NV_SIZE 24 /* Static and dynamic pipe id and status for each pipe to uicc0 and uicc1. */
-#define NCI_PERSONALITY_SLOT_SIZE 19
-#define NCI_DYNAMIC_PIPE_SIZE 8
-
-#define NCI_SWP_INTERFACE_TYPE 0xFF /* Type of TLV in NCI_MSG_HCI_NETWK */
-#define NCI_HCI_GATE_TYPE 0xFE /* Type of TLV in NCI_MSG_HCI_NETWK */
-
-/* Secure Patch Download definitions (patch type definitions) */
-#define NCI_SPD_TYPE_HEADER 0x00
-#define NCI_SPD_TYPE_SRAM 0x01
-#define NCI_SPD_TYPE_AON 0x02
-#define NCI_SPD_TYPE_PATCH_TABLE 0x03
-#define NCI_SPD_TYPE_SECURE_CONFIG 0x04
-#define NCI_SPD_TYPE_CONTROLLED_CONFIG 0x05
-#define NCI_SPD_TYPE_SIGNATURE 0x06
-#define NCI_SPD_TYPE_SIGCHEK 0x07
-
-/* Secure Patch Download definitions (NCI_SPD_TYPE_HEADER definitions) */
-#define NCI_SPD_HEADER_OFFSET_CHIPVERLEN 0x18
-#define NCI_SPD_HEADER_CHIPVER_LEN 16
-
-/* NVM Type (in GET_PATCH_VERSION RSP) */
-#define NCI_SPD_NVM_TYPE_NONE 0x00
-#define NCI_SPD_NVM_TYPE_EEPROM 0x01
-#define NCI_SPD_NVM_TYPE_UICC 0x02
-
-/**********************************************
- * NCI NFCC proprietary features in octet 3
- **********************************************/
-#define NCI_FEAT_SIGNED_PATCH 0x01000000
-
-/**********************************************
- * NCI Interface Types
- **********************************************/
-#define NCI_INTERFACE_VS_CALYPSO_CE 0x81
-#define NCI_INTERFACE_VS_T2T_CE 0x82 /* for Card Emulation side */
-#define NCI_INTERFACE_VS_15693 0x83 /* for both Reader/Writer and Card Emulation side */
-#define NCI_INTERFACE_VS_T1T_CE 0x84 /* for Card Emulation side */
-
-/**********************************************
- * NCI Proprietary Parameter IDs
- **********************************************/
-#define NCI_PARAM_ID_LA_FSDI 0xA0
-#define NCI_PARAM_ID_LB_FSDI 0xA1
-#define NCI_PARAM_ID_HOST_LISTEN_MASK 0xA2
-#define NCI_PARAM_ID_CHIP_TYPE 0xA3 /* NFCDEP */
-#define NCI_PARAM_ID_PA_ANTICOLL 0xA4
-#define NCI_PARAM_ID_CONTINUE_MODE 0xA5
-#define NCI_PARAM_ID_LBP 0xA6
-#define NCI_PARAM_ID_T1T_RDR_ONLY 0xA7
-#define NCI_PARAM_ID_LA_SENS_RES 0xA8
-#define NCI_PARAM_ID_PWR_SETTING_BITMAP 0xA9
-#define NCI_PARAM_ID_WI_NTF_ENABLE 0xAA
-#define NCI_PARAM_ID_LN_BITRATE 0xAB /* NFCDEP Listen Bitrate */
-#define NCI_PARAM_ID_LF_BITRATE 0xAC /* FeliCa */
-#define NCI_PARAM_ID_SWP_BITRATE_MASK 0xAD
-#define NCI_PARAM_ID_KOVIO 0xAE
-#define NCI_PARAM_ID_UICC_NTF_TO 0xAF
-#define NCI_PARAM_ID_NFCDEP 0xB0
-#define NCI_PARAM_ID_CLF_REGS_CFG 0xB1
-#define NCI_PARAM_ID_NFCDEP_TRANS_TIME 0xB2
-#define NCI_PARAM_ID_CREDIT_TIMER 0xB3
-#define NCI_PARAM_ID_CORRUPT_RX 0xB4
-#define NCI_PARAM_ID_ISODEP 0xB5
-#define NCI_PARAM_ID_LF_CONFIG 0xB6
-#define NCI_PARAM_ID_I93_DATARATE 0xB7
-#define NCI_PARAM_ID_CREDITS_THRESHOLD 0xB8
-#define NCI_PARAM_ID_TAGSNIFF_CFG 0xB9
-#define NCI_PARAM_ID_PA_FSDI 0xBA /* ISODEP */
-#define NCI_PARAM_ID_PB_FSDI 0xBB /* ISODEP */
-#define NCI_PARAM_ID_FRAME_INTF_RETXN 0xBC
-
-#define NCI_PARAM_ID_UICC_RDR_PRIORITY 0xBD
-#define NCI_PARAM_ID_GUARD_TIME 0xBE
-#define NCI_PARAM_ID_STDCONFIG 0xBF /* dont not use this config item */
-#define NCI_PARAM_ID_PROPCFG 0xC0 /* dont not use this config item */
-#define NCI_PARAM_ID_MAXTRY2ACTIVATE 0xC1
-#define NCI_PARAM_ID_SWPCFG 0xC2
-#define NCI_PARAM_ID_CLF_LPM_CFG 0xC3
-#define NCI_PARAM_ID_DCLB 0xC4
-#define NCI_PARAM_ID_ACT_ORDER 0xC5
-#define NCI_PARAM_ID_DEP_DELAY_ACT 0xC6
-#define NCI_PARAM_ID_DH_PARITY_CRC_CTL 0xC7
-#define NCI_PARAM_ID_PREINIT_DSP_CFG 0xC8
-#define NCI_PARAM_ID_FW_WORKAROUND 0xC9
-#define NCI_PARAM_ID_RFU_CONFIG 0xCA
-#define NCI_PARAM_ID_EMVCO_ENABLE 0xCB
-#define NCI_PARAM_ID_ANTDRIVER_PARAM 0xCC
-#define NCI_PARAM_ID_PLL325_CFG_PARAM 0xCD
-#define NCI_PARAM_ID_OPNLP_ADPLL_ENABLE 0xCE
-#define NCI_PARAM_ID_CONFORMANCE_MODE 0xCF
-
-#define NCI_PARAM_ID_LPO_ON_OFF_ENABLE 0xD0
-#define NCI_PARAM_ID_FORCE_VANT 0xD1
-#define NCI_PARAM_ID_COEX_CONFIG 0xD2
-#define NCI_PARAM_ID_INTEL_MODE 0xD3
-
-#define NCI_PARAM_ID_AID 0xFF
-
-/**********************************************
- * NCI Parameter ID Lens
- **********************************************/
-#define NCI_PARAM_LEN_PWR_SETTING_BITMAP 3
-#define NCI_PARAM_LEN_HOST_LISTEN_MASK 2
-#define NCI_PARAM_LEN_PLL325_CFG_PARAM 14
-
-/**********************************************
- * Snooze Mode
- **********************************************/
-#define NFC_SNOOZE_MODE_NONE 0x00 /* Snooze mode disabled */
-#define NFC_SNOOZE_MODE_UART 0x01 /* Snooze mode for UART */
-#define NFC_SNOOZE_MODE_SPI_I2C 0x08 /* Snooze mode for SPI/I2C */
-
-#define NFC_SNOOZE_ACTIVE_LOW 0x00 /* high to low voltage is asserting */
-#define NFC_SNOOZE_ACTIVE_HIGH 0x01 /* low to high voltage is asserting */
-
-#endif /* NFC_BRCM_DEFS_H */
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_int.h b/halimpl/bcm2079x/hal/int/nfc_hal_int.h
deleted file mode 100644
index ca8dc20..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_int.h
+++ /dev/null
@@ -1,473 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2009-2012 Broadcom Corporation
- *
- * 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 file contains the NCI transport internal definitions and functions.
- *
- ******************************************************************************/
-
-#ifndef NFC_HAL_INT_H
-#define NFC_HAL_INT_H
-
-#include "nfc_hal_target.h"
-#include "gki.h"
-#include "nci_defs.h"
-#include "nfc_brcm_defs.h"
-#include "nfc_hal_api.h"
-#include "nfc_hal_int_api.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****************************************************************************
-** NFC HAL TASK transport definitions
-****************************************************************************/
-/* NFC HAL Task event masks */
-#define NFC_HAL_TASK_EVT_DATA_RDY EVENT_MASK (APPL_EVT_0)
-#define NFC_HAL_TASK_EVT_INITIALIZE EVENT_MASK (APPL_EVT_5)
-#define NFC_HAL_TASK_EVT_TERMINATE EVENT_MASK (APPL_EVT_6)
-#define NFC_HAL_TASK_EVT_POWER_CYCLE EVENT_MASK (APPL_EVT_7)
-
-#define NFC_HAL_TASK_EVT_MBOX (TASK_MBOX_0_EVT_MASK)
-
-/* NFC HAL Task mailbox definitions */
-#define NFC_HAL_TASK_MBOX (TASK_MBOX_0)
-
-/* NFC HAL Task Timer events */
-#ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
-#define NFC_HAL_QUICK_TIMER_EVT_MASK (TIMER_0_EVT_MASK)
-#endif
-
-#ifndef NFC_HAL_QUICK_TIMER_ID
-#define NFC_HAL_QUICK_TIMER_ID (TIMER_0)
-#endif
-
-/* NFC HAL Task Timer types */
-#define NFC_HAL_TTYPE_NCI_WAIT_RSP 0
-#define NFC_HAL_TTYPE_POWER_CYCLE 1
-
-/* NFC HAL Task Wait Response flag */
-#define NFC_HAL_WAIT_RSP_CMD 0x10 /* wait response on an NCI command */
-#define NFC_HAL_WAIT_RSP_VSC 0x20 /* wait response on an NCI vendor specific command */
-#define NFC_HAL_WAIT_RSP_PROP 0x40 /* wait response on a proprietary command */
-#define NFC_HAL_WAIT_RSP_NONE 0x00 /* not waiting for anything */
-
-typedef UINT8 tNFC_HAL_WAIT_RSP;
-
-typedef UINT16 tNFC_HAL_HCI_EVT;
-
-
-#define NFC_HAL_HCI_DH_TARGET_HANDLE 0xF2
-#define NFC_HAL_HCI_UICC0_TARGET_HANDLE 0xF3
-#define NFC_HAL_HCI_UICC1_TARGET_HANDLE 0xF4
-
-#define NFC_HAL_HCI_SESSION_ID_LEN 0x08
-#define NFC_HAL_HCI_NETWK_INFO_SIZE 184
-#define NFC_HAL_HCI_DH_NETWK_INFO_SIZE 111
-
-#define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
-#define NFC_HAL_HCI_ADMIN_PIPE 0x01
-#define NFC_HAL_HCI_HOST_ID_UICC0 0x02 /* Host ID for UICC 0 */
-#define NFC_HAL_HCI_HOST_ID_UICC1 0x03 /* Host ID for UICC 1 */
-#define NFC_HAL_HCI_COMMAND_TYPE 0x00
-
-/* NFC HAL transport configuration */
-typedef struct
-{
- BOOLEAN shared_transport; /* TRUE if using shared HCI/NCI transport */
- UINT8 userial_baud;
- UINT8 userial_fc;
-} tNFC_HAL_TRANS_CFG;
-
-#ifdef TESTER
-#define NFC_HAL_TRANS_CFG_QUALIFIER /* For Insight, ncit_cfg is runtime-configurable */
-#else
-#define NFC_HAL_TRANS_CFG_QUALIFIER const /* For all other platforms, ncit_cfg is constant */
-#endif
-extern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
-
-/*****************************************************************************
-* BT HCI definitions
-*****************************************************************************/
-#define BT_HDR NFC_HDR
-
-/* Tranport message type */
-#define HCIT_TYPE_COMMAND 0x01
-#define HCIT_TYPE_EVENT 0x04
-#define HCIT_TYPE_NFC 0x10
-
-/* Vendor-Specific BT HCI definitions */
-#define HCI_SUCCESS 0x00
-#define HCI_GRP_VENDOR_SPECIFIC (0x3F << 10) /* 0xFC00 */
-#define HCI_BRCM_WRITE_SLEEP_MODE (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_GRP_HOST_CONT_BASEBAND_CMDS (0x03 << 10) /* 0x0C00 */
-#define HCI_RESET (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_COMMAND_COMPLETE_EVT 0x0E
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH 12
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH 0x06
-#define HCIE_PREAMBLE_SIZE 2
-
-/****************************************************************************
-** Internal constants and definitions
-****************************************************************************/
-
-/* NFC HAL receiving states */
-enum
-{
- NFC_HAL_RCV_IDLE_ST, /* waiting for packet type byte */
- NFC_HAL_RCV_NCI_MSG_ST, /* waiting for the first byte of NCI header */
- NFC_HAL_RCV_NCI_HDR_ST, /* reading NCI header */
- NFC_HAL_RCV_NCI_PAYLOAD_ST, /* reading NCI payload */
- NFC_HAL_RCV_BT_MSG_ST, /* waiting for the first byte of BT header */
- NFC_HAL_RCV_BT_HDR_ST, /* reading BT HCI header */
- NFC_HAL_RCV_BT_PAYLOAD_ST /* reading BT HCI payload */
-};
-
-/* errors during NCI packet reassembly process */
-#define NFC_HAL_NCI_RAS_TOO_BIG 0x01
-#define NFC_HAL_NCI_RAS_ERROR 0x02
-typedef UINT8 tNFC_HAL_NCI_RAS;
-
-/* NFC HAL power mode */
-enum
-{
- NFC_HAL_POWER_MODE_FULL, /* NFCC is full power mode */
- NFC_HAL_POWER_MODE_LAST
-};
-typedef UINT8 tNFC_HAL_POWER_MODE;
-
-
-/* NFC HAL event for low power mode */
-enum
-{
- NFC_HAL_LP_TX_DATA_EVT, /* DH is sending data to NFCC */
- NFC_HAL_LP_RX_DATA_EVT, /* DH received data from NFCC */
- NFC_HAL_LP_TIMEOUT_EVT, /* Timeout */
- NFC_HAL_LP_LAST_EVT
-};
-typedef UINT8 tNFC_HAL_LP_EVT;
-
-#define NFC_HAL_ASSERT_NFC_WAKE 0x00 /* assert NFC_WAKE */
-#define NFC_HAL_DEASSERT_NFC_WAKE 0x01 /* deassert NFC_WAKE */
-
-#define NFC_HAL_BT_HCI_CMD_HDR_SIZE 3 /* opcode (2) + length (1) */
-#define NFC_HAL_CMD_TOUT (2000) /* timeout for NCI CMD (in ms) */
-
-#define NFC_HAL_SAVED_HDR_SIZE (2)
-#define NFC_HAL_SAVED_CMD_SIZE (2)
-
-#ifndef NFC_HAL_DEBUG
-#define NFC_HAL_DEBUG TRUE
-#endif
-
-#if (NFC_HAL_DEBUG == TRUE)
-extern const char * const nfc_hal_init_state_str[];
-#define NFC_HAL_SET_INIT_STATE(state) NCI_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
-#else
-#define NFC_HAL_SET_INIT_STATE(state) nfc_hal_cb.dev_cb.initializing_state = state;
-#endif
-
-
-/* NFC HAL - NFCC initializing state */
-enum
-{
- NFC_HAL_INIT_STATE_IDLE, /* Initialization is done */
- NFC_HAL_INIT_STATE_W4_XTAL_SET, /* Waiting for crystal setting rsp */
- NFC_HAL_INIT_STATE_W4_RESET, /* Waiting for reset rsp */
- NFC_HAL_INIT_STATE_W4_BUILD_INFO, /* Waiting for build info rsp */
- NFC_HAL_INIT_STATE_W4_PATCH_INFO, /* Waiting for patch info rsp */
- NFC_HAL_INIT_STATE_W4_APP_COMPLETE, /* Waiting for complete from application */
- NFC_HAL_INIT_STATE_W4_POST_INIT_DONE, /* Waiting for complete of post init */
- NFC_HAL_INIT_STATE_W4_CONTROL_DONE, /* Waiting for control release */
- NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE,/* Waiting for complete of prediscover */
- NFC_HAL_INIT_STATE_W4_RE_INIT, /* Waiting for reset rsp on ReInit */
- NFC_HAL_INIT_STATE_CLOSING /* Shutting down */
-};
-typedef UINT8 tNFC_HAL_INIT_STATE;
-
-/* NFC HAL - NFCC config items during post initialization */
-enum
-{
- NFC_HAL_DM_CONFIG_LPTD,
- NFC_HAL_DM_CONFIG_PLL_325,
- NFC_HAL_DM_CONFIG_START_UP,
- NFC_HAL_DM_CONFIG_I93_DATA_RATE,
- NFC_HAL_DM_CONFIG_FW_FSM,
- NFC_HAL_DM_CONFIG_START_UP_VSC,
- NFC_HAL_DM_CONFIG_NONE
-};
-typedef UINT8 tNFC_HAL_DM_CONFIG;
-
-/* callback function prototype */
-typedef struct
-{
- UINT16 opcode;
- UINT16 param_len;
- UINT8 *p_param_buf;
-} tNFC_HAL_BTVSC_CPLT;
-
-typedef void (tNFC_HAL_BTVSC_CPLT_CBACK) (tNFC_HAL_BTVSC_CPLT *p1);
-
-
-/* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
-typedef struct
-{
- NFC_HDR hdr;
- UINT8 block;
- UINT16 size;
- tHAL_NFC_STATUS status;
-} tNFC_HAL_HCI_RSP_NV_READ_EVT;
-
-/* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
-typedef struct
-{
- NFC_HDR hdr;
- tHAL_NFC_STATUS status;
-} tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
-
-
-/* union of all event data types */
-typedef union
-{
- NFC_HDR hdr;
- /* Internal events */
- tNFC_HAL_HCI_RSP_NV_READ_EVT nv_read;
- tNFC_HAL_HCI_RSP_NV_WRITE_EVT nv_write;
-} tNFC_HAL_HCI_EVENT_DATA;
-
-/*****************************************************************************
-** Control block for NFC HAL
-*****************************************************************************/
-
-/* Patch RAM Download Control block */
-
-/* PRM states */
-enum
-{
- NFC_HAL_PRM_ST_IDLE,
-
- /* Secure patch download stated */
- NFC_HAL_PRM_ST_SPD_GET_VERSION,
- NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
- NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
- NFC_HAL_PRM_ST_SPD_DOWNLOADING,
- NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
- NFC_HAL_PRM_ST_SPD_AUTH_DONE
-};
-typedef UINT8 tNFC_HAL_PRM_STATE;
-
-/* Maximum number of patches (currently 2: LPM and FPM) */
-#define NFC_HAL_PRM_MAX_PATCH_COUNT 2
-#define NFC_HAL_PRM_PATCH_MASK_ALL 0xFFFFFFFF
-
-/* Structures for PRM Control Block */
-typedef struct
-{
- UINT8 power_mode;
- UINT16 len;
-} tNFC_HAL_PRM_PATCHDESC;
-
-typedef struct
-{
- tNFC_HAL_PRM_STATE state; /* download state */
- UINT32 flags; /* internal flags */
- UINT16 cur_patch_len_remaining;/* bytes remaining in patchfile to process */
- const UINT8* p_cur_patch_data; /* pointer to patch currently being downloaded */
- UINT16 cur_patch_offset; /* offset of next byte to process */
- UINT32 dest_ram;
- TIMER_LIST_ENT timer; /* Timer for patch download */
-
- /* Secure Patch Download */
- UINT32 spd_patch_needed_mask; /* Mask of patches that need to be downloaded */
- UINT32 spd_nvm_patch_mask; /* Mask of patches currently in NVM */
- UINT16 spd_project_id; /* Current project_id of patch in nvm */
- UINT16 spd_nvm_max_size;
- UINT16 spd_patch_max_size;
- UINT16 spd_fpm_patch_size;
- UINT16 spd_lpm_patch_size;
-
- UINT8 spd_patch_count; /* Number of patches left to download */
- UINT8 spd_cur_patch_idx; /* Current patch being downloaded */
- UINT16 spd_ver_major; /* Current major version of patch in nvm */
- UINT16 spd_ver_minor; /* Current minor version of patch in nvm */
- tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
-
- /* I2C-patch */
- UINT8 *p_spd_patch; /* pointer to spd patch */
- UINT16 spd_patch_len_remaining;/* patch length */
- UINT16 spd_patch_offset; /* offset of next byte to process */
-
- tNFC_HAL_PRM_FORMAT format; /* format of patch ram */
- tNFC_HAL_PRM_CBACK *p_cback; /* Callback for download status notifications */
- UINT32 patchram_delay; /* the dealy after patch */
-} tNFC_HAL_PRM_CB;
-
-/* Patch for I2C fix */
-typedef struct
-{
- UINT8 *p_patch; /* patch for i2c fix */
- UINT32 prei2c_delay; /* the dealy after preI2C patch */
- UINT16 len; /* i2c patch length */
-} tNFC_HAL_PRM_I2C_FIX_CB;
-
-/* Control block for NCI transport */
-typedef struct
-{
- UINT8 nci_ctrl_size; /* Max size for NCI messages */
- UINT8 rcv_state; /* current rx state */
- UINT16 rcv_len; /* bytes remaining to be received in current rx state */
- NFC_HDR *p_rcv_msg; /* buffer to receive NCI message */
- NFC_HDR *p_frag_msg; /* fragmented NCI message; waiting for last fragment */
- NFC_HDR *p_pend_cmd; /* pending NCI message; waiting for NFCC state to be free */
- tNFC_HAL_NCI_RAS nci_ras; /* nci reassembly error status */
- TIMER_LIST_ENT nci_wait_rsp_timer; /* Timer for waiting for nci command response */
- tNFC_HAL_WAIT_RSP nci_wait_rsp; /* nci wait response flag */
- UINT8 last_hdr[NFC_HAL_SAVED_HDR_SIZE];/* part of last NCI command header */
- UINT8 last_cmd[NFC_HAL_SAVED_CMD_SIZE];/* part of last NCI command payload */
- void *p_vsc_cback; /* the callback function for last VSC command */
-} tNFC_HAL_NCIT_CB;
-
-/* Control block for device initialization */
-typedef struct
-{
- tNFC_HAL_INIT_STATE initializing_state; /* state of initializing NFCC */
-
- UINT32 brcm_hw_id; /* BRCM NFCC HW ID */
- tNFC_HAL_DM_CONFIG next_dm_config; /* next config in post initialization */
- UINT8 next_startup_vsc; /* next start-up VSC offset in post init */
-
- tNFC_HAL_POWER_MODE power_mode; /* NFCC power mode */
- UINT8 snooze_mode; /* current snooze mode */
- UINT8 new_snooze_mode; /* next snooze mode after receiving cmpl */
- UINT8 nfc_wake_active_mode; /* NFC_HAL_LP_ACTIVE_LOW/HIGH */
- TIMER_LIST_ENT lp_timer; /* timer for low power mode */
-
-
- tHAL_NFC_STATUS_CBACK *p_prop_cback; /* callback to notify complete of proprietary update */
-} tNFC_HAL_DEV_CB;
-
-/* data members for NFC_HAL-HCI */
-typedef struct
-{
- TIMER_LIST_ENT hci_timer; /* Timer to avoid indefinitely waiting for response */
- UINT8 *p_hci_netwk_info_buf; /* Buffer for reading HCI Network information */
- UINT8 *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
- UINT8 hci_netwk_config_block; /* Rsp awaiting for hci network configuration block */
- BOOLEAN b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
- BOOLEAN b_check_clear_all_pipe_cmd;
- UINT8 hcp_conn_id;
-} tNFC_HAL_HCI_CB;
-
-typedef struct
-{
- tHAL_NFC_CBACK *p_stack_cback; /* Callback for HAL event notification */
- tHAL_NFC_DATA_CBACK *p_data_cback; /* Callback for data event notification */
-
- TIMER_LIST_Q quick_timer_queue; /* timer list queue */
- TIMER_LIST_ENT timer; /* timer for NCI transport task */
-
- tNFC_HAL_NCIT_CB ncit_cb; /* NCI transport */
- tNFC_HAL_DEV_CB dev_cb; /* device initialization */
-
- /* Patchram control block */
- tNFC_HAL_PRM_CB prm;
- tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
-
- /* data members for NFC_HAL-HCI */
- tNFC_HAL_HCI_CB hci_cb;
-
-
- tNFC_HAL_NCI_CBACK *p_reinit_cback;
- UINT8 max_rf_credits; /* NFC Max RF data credits */
- UINT8 trace_level; /* NFC HAL trace level */
-} tNFC_HAL_CB;
-
-/* Global NCI data */
-#if NFC_DYNAMIC_MEMORY == FALSE
-extern tNFC_HAL_CB nfc_hal_cb;
-#else
-#define nfc_hal_cb (*nfc_hal_cb_ptr)
-extern tNFC_HAL_CB *nfc_hal_cb_ptr;
-#endif
-
-/****************************************************************************
-** Internal nfc functions
-****************************************************************************/
-
-/* From nfc_hal_main.c */
-UINT32 nfc_hal_main_task (UINT32 param);
-void nfc_hal_main_init (void);
-void nfc_hal_main_pre_init_done (tHAL_NFC_STATUS);
-void nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
-void nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
-void nfc_hal_main_send_error (tHAL_NFC_STATUS status);
-
-/* nfc_hal_nci.c */
-BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
-BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
-void nfc_hal_nci_assemble_nci_msg (void);
-void nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
-void nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
-void nfc_hal_nci_cmd_timeout_cback (void *p_tle);
-
-/* nfc_hal_dm.c */
-void nfc_hal_dm_init (void);
-void nfc_hal_dm_set_xtal_freq_index (void);
-void nfc_hal_dm_send_reset_cmd (void);
-void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
-void nfc_hal_dm_config_nfcc (void);
-void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
-void nfc_hal_dm_send_bt_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_BTVSC_CPLT_CBACK *p_cback);
-void nfc_hal_dm_set_nfc_wake (UINT8 cmd);
-void nfc_hal_dm_pre_init_nfcc (void);
-void nfc_hal_dm_shutting_down_nfcc (void);
-BOOLEAN nfc_hal_dm_power_mode_execute (tNFC_HAL_LP_EVT event);
-void nfc_hal_dm_send_pend_cmd (void);
-
-/* nfc_hal_prm.c */
-void nfc_hal_prm_spd_reset_ntf (UINT8 reset_reason, UINT8 reset_type);
-void nfc_hal_prm_nci_command_complete_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
-void nfc_hal_prm_process_timeout (void *p_tle);
-
-/* nfc_hal_hci.c */
-void nfc_hal_hci_enable (void);
-void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
-void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
-void nfc_hal_hci_handle_hcp_pkt (UINT8 *p_data);
-void nfc_hal_hci_timeout_cback (void *p_tle);
-
-
-/* Define default NCI protocol trace function (if protocol tracing is enabled) */
-#if (defined(NFC_HAL_TRACE_PROTOCOL) && (NFC_HAL_TRACE_PROTOCOL == TRUE))
-#if !defined (DISP_NCI)
-#define DISP_NCI (DispNci)
-void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
-#endif /* DISP_NCI */
-
-/* For displaying vendor-specific HCI commands */
-void DispHciCmd (BT_HDR *p_buf);
-void DispHciEvt (BT_HDR *p_buf);
-#endif /* NFC_HAL_TRACE_PROTOCOL */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_INT_H */
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_int_api.h b/halimpl/bcm2079x/hal/int/nfc_hal_int_api.h
deleted file mode 100644
index 5385bb4..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_int_api.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2009-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Internal NFC HAL API functions.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_INT_API_H
-#define NFC_HAL_INT_API_H
-
-/****************************************************************************
-** Device Configuration definitions
-****************************************************************************/
-
-#define NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN (2 + NCI_PARAM_LEN_PLL325_CFG_PARAM)
-
-/* Crystal Frequency Index (in 1 KHz) */
-enum
-{
- NFC_HAL_XTAL_INDEX_9600,
- NFC_HAL_XTAL_INDEX_13000,
- NFC_HAL_XTAL_INDEX_16200,
- NFC_HAL_XTAL_INDEX_19200,
- NFC_HAL_XTAL_INDEX_24000,
- NFC_HAL_XTAL_INDEX_26000,
- NFC_HAL_XTAL_INDEX_38400,
- NFC_HAL_XTAL_INDEX_52000,
- NFC_HAL_XTAL_INDEX_37400,
- NFC_HAL_XTAL_INDEX_MAX
-};
-typedef UINT8 tNFC_HAL_XTAL_INDEX;
-
-/* Broadcom specific device initialization before sending NCI reset */
-#define NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ 0x02 /* set crystal frequency */
-typedef UINT8 tNFC_HAL_DEV_INIT_FLAGS;
-
-typedef struct
-{
- tNFC_HAL_DEV_INIT_FLAGS flags;
- UINT16 xtal_freq;
-} tNFC_HAL_DEV_INIT_CFG;
-
-/*****************************************************************************
-** Low Power Mode definitions
-*****************************************************************************/
-
-#define NFC_HAL_LP_SNOOZE_MODE_NONE NFC_SNOOZE_MODE_NONE /* Snooze mode disabled */
-#define NFC_HAL_LP_SNOOZE_MODE_UART NFC_SNOOZE_MODE_UART /* Snooze mode for UART */
-#define NFC_HAL_LP_SNOOZE_MODE_SPI_I2C NFC_SNOOZE_MODE_SPI_I2C /* Snooze mode for SPI/I2C */
-
-#define NFC_HAL_LP_ACTIVE_LOW NFC_SNOOZE_ACTIVE_LOW /* high to low voltage is asserting */
-#define NFC_HAL_LP_ACTIVE_HIGH NFC_SNOOZE_ACTIVE_HIGH /* low to high voltage is asserting */
-
-/*****************************************************************************
-** Patch RAM Constants
-*****************************************************************************/
-
-/* patch format type */
-#define NFC_HAL_PRM_FORMAT_BIN 0x00
-#define NFC_HAL_PRM_FORMAT_HCD 0x01
-#define NFC_HAL_PRM_FORMAT_NCD 0x02
-typedef UINT8 tNFC_HAL_PRM_FORMAT;
-
-/*****************************************************************************
-** Patch RAM Callback for event notificaton
-*****************************************************************************/
-/* Events for tNFC_HAL_PRM_CBACK */
-enum
-{
- NFC_HAL_PRM_CONTINUE_EVT,
- NFC_HAL_PRM_COMPLETE_EVT,
- NFC_HAL_PRM_ABORT_EVT,
- NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT, /* Patch is invalid (bad version, project id, or chip) */
- NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT, /* Patch has invalid signature */
- NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT, /* Secure Patch Download: request for patchfile header */
- NFC_HAL_PRM_SPD_GET_NEXT_PATCH, /* Get first command of next patch in patchfile */
- NFC_HAL_PRM_ABORT_NO_NVM_EVT /* nfc_hal_prm_nvm_required is TRUE and NVM is unavail */
-};
-
-typedef void (tNFC_HAL_PRM_CBACK) (UINT8 event);
-
-typedef UINT8 tNFC_HAL_NCI_EVT; /* MT + Opcode */
-typedef void (tNFC_HAL_NCI_CBACK) (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-**
-** Function HAL_NfcPreInitDone
-**
-** Description Notify that pre-initialization of NFCC is complete
-**
-** Returns void
-**
-*******************************************************************************/
-void HAL_NfcPreInitDone (tHAL_NFC_STATUS status);
-
-/*******************************************************************************
-**
-** Function HAL_NfcReInit
-**
-** Description This function is called to send an RESET and GET_PATCH_VERSION
-** command to NFCC.
-**
-** p_cback - The callback function to receive the command
-** status
-**
-** Note This function should be called only during the HAL init process
-**
-** Returns HAL_NFC_STATUS_OK if successfully initiated
-** HAL_NFC_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit (tNFC_HAL_NCI_CBACK *p_cback);
-
-/*******************************************************************************
-**
-** Function HAL_NfcSetSnoozeMode
-**
-** Description Set snooze mode
-** snooze_mode
-** NFC_HAL_LP_SNOOZE_MODE_NONE - Snooze mode disabled
-** NFC_HAL_LP_SNOOZE_MODE_UART - Snooze mode for UART
-** NFC_HAL_LP_SNOOZE_MODE_SPI_I2C - Snooze mode for SPI/I2C
-**
-** idle_threshold_dh/idle_threshold_nfcc
-** Idle Threshold Host in 100ms unit
-**
-** nfc_wake_active_mode/dh_wake_active_mode
-** NFC_HAL_LP_ACTIVE_LOW - high to low voltage is asserting
-** NFC_HAL_LP_ACTIVE_HIGH - low to high voltage is asserting
-**
-** p_snooze_cback
-** Notify status of operation
-**
-** Returns tHAL_NFC_STATUS
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcSetSnoozeMode (UINT8 snooze_mode,
- UINT8 idle_threshold_dh,
- UINT8 idle_threshold_nfcc,
- UINT8 nfc_wake_active_mode,
- UINT8 dh_wake_active_mode,
- tHAL_NFC_STATUS_CBACK *p_snooze_cback);
-
-/*******************************************************************************
-**
-** Function HAL_NfcPrmDownloadStart
-**
-** Description Initiate patch download
-**
-** Input Params
-** format_type patch format type
-** (NFC_HAL_PRM_FORMAT_BIN, NFC_HAL_PRM_FORMAT_HCD, or
-** NFC_HAL_PRM_FORMAT_NCD)
-**
-** dest_address destination adderess (needed for BIN format only)
-**
-** p_patchram_buf pointer to patchram buffer. If NULL,
-** then app must call HAL_NfcPrmDownloadContinue when
-** NFC_HAL_PRM_CONTINUE_EVT is received, to send the next
-** segment of patchram
-**
-** patchram_len size of p_patchram_buf (if non-NULL)
-**
-** patchram_delay The delay after each patch.
-** If the given value is less than the size of the patchram,
-** the size of patchram is used instead.
-**
-** p_cback callback for download status
-**
-**
-** Returns TRUE if successful, otherwise FALSE
-**
-**
-*******************************************************************************/
-BOOLEAN HAL_NfcPrmDownloadStart (tNFC_HAL_PRM_FORMAT format_type,
- UINT32 dest_address,
- UINT8 *p_patchram_buf,
- UINT32 patchram_len,
- UINT32 patchram_delay,
- tNFC_HAL_PRM_CBACK *p_cback);
-
-/*******************************************************************************
-**
-** Function HAL_NfcPrmDownloadContinue
-**
-** Description Send next segment of patchram to controller. Called when
-** NFC_HAL_PRM_CONTINUE_EVT is received.
-**
-** Only needed if HAL_NfcPrmDownloadStart was called with
-** p_patchram_buf=NULL
-**
-** Input Params p_patch_data pointer to patch data
-** patch_data_len patch data len
-**
-** Returns TRUE if successful, otherwise FALSE
-**
-*******************************************************************************/
-BOOLEAN HAL_NfcPrmDownloadContinue (UINT8 *p_patch_data,
- UINT16 patch_data_len);
-
-/*******************************************************************************
-**
-** Function HAL_NfcPrmSetI2cPatch
-**
-** Description Specify patchfile for BCM20791B3 I2C fix. This fix
-** must be downloaded prior to initial patch download for I2C
-** transport
-**
-** Input Params p_i2c_patchfile_buf: pointer to patch for i2c fix
-** i2c_patchfile_len: length of patch
-** prei2c_delay: the delay before downloading main patch
-** if 0 is given, NFC_HAL_PRM_POST_I2C_FIX_DELAY is used instead.
-**
-** Returns Nothing
-**
-**
-*******************************************************************************/
-void HAL_NfcPrmSetI2cPatch (UINT8 *p_i2c_patchfile_buf,
- UINT16 i2c_patchfile_len, UINT32 prei2c_delay);
-
-/*******************************************************************************
-**
-** Function HAL_NfcPrmSetSpdNciCmdPayloadSize
-**
-** Description Set Host-to-NFCC NCI message size for secure patch download
-**
-** This API must be called before calling HAL_NfcPrmDownloadStart.
-** If the API is not called, then PRM will use the default
-** message size.
-**
-** Typically, this API is only called for platforms that have
-** message-size limitations in the transport/driver.
-**
-** Valid message size range: NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255.
-**
-** Returns HAL_NFC_STATUS_OK if successful
-** HAL_NFC_STATUS_FAILED otherwise
-**
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize (UINT8 max_payload_size);
-
-/*******************************************************************************
-**
-** Function HAL_NfcSetMaxRfDataCredits
-**
-** Description This function sets the maximum RF data credit for HAL.
-** If 0, use the value reported from NFCC.
-**
-** Returns none
-**
-*******************************************************************************/
-void HAL_NfcSetMaxRfDataCredits (UINT8 max_credits);
-
-/*******************************************************************************
-**
-** Function HAL_NfcSetTraceLevel
-**
-** Description This function sets the trace level for HAL. If called with
-** a value of 0xFF, it simply returns the current trace level.
-**
-** Returns The new or current trace level
-**
-*******************************************************************************/
-UINT8 HAL_NfcSetTraceLevel (UINT8 new_level);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_INT_API_H */
-
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_nv_ci.h b/halimpl/bcm2079x/hal/int/nfc_hal_nv_ci.h
deleted file mode 100644
index a77c207..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_nv_ci.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2003-2012 Broadcom Corporation
- *
- * 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 interface file for non valtile memory call-in functions.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_NV_CI_H
-#define NFC_HAL_NV_CI_H
-
-#include "nfc_hal_nv_co.h"
-
-
-/*****************************************************************************
-** Function Declarations
-*****************************************************************************/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*******************************************************************************
-**
-** Function nfc_hal_nv_ci_write
-**
-** Description This function sends an event to NFAA indicating the phone
-** has written the number of bytes specified in the call-out
-** function, nfa_nv_co_write (), and is ready for more data.
-** This function is used to control the TX data flow.
-** Note: The data buffer is released by the stack aioer
-** calling this function.
-**
-** Parameters status - NFA_NV_CO_OK, NFA_NV_CO_NOSPACE, or NFA_NV_CO_FAIL
-** evt - Used Internally by NFA -> MUST be same value passed
-** in call-out function.
-**
-** Returns void
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_write (tNFC_HAL_NV_CO_STATUS status);
-
-/*******************************************************************************
-**
-** Function nfc_hal_nv_ci_read
-**
-** Description This function sends an event to NCIT indicating the phone has
-** read in the requested amount of data specified in the
-** nfa_nv_co_read () call-out function. It should only be called
-** when the requested number of bytes has been read.
-**
-** Parameters num_bytes_read - number of bytes read into the buffer
-** specified in the read callout-function.
-** status - NFC_HAL_NV_CO_OK if full buffer of data,
-** NFC_HAL_NV_CO_EOF if the end of file has been reached,
-** NFC_HAL_NV_CO_FAIL if an error has occurred.
-** evt - Used Internally by NFA -> MUST be same value passed
-** in call-out function.
-**
-** Returns void
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_read (UINT16 num_bytes_read,
- tNFC_HAL_NV_CO_STATUS status,
- UINT8 block);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_NV_CI_H */
-
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_nv_co.h b/halimpl/bcm2079x/hal/int/nfc_hal_nv_co.h
deleted file mode 100644
index 2264cfe..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_nv_co.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2003-2012 Broadcom Corporation
- *
- * 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 interface file for storing nv data
- *
- ******************************************************************************/
-#ifndef NFC_HAL_NV_CO_H
-#define NFC_HAL_NV_CO_H
-
-#include <time.h>
-
-
-/*****************************************************************************
-** Constants and Data Types
-*****************************************************************************/
-
-
-/**************************
-** Common Definitions
-***************************/
-
-/* Status codes returned by call-out functions, or in call-in functions as status */
-#define NFC_HAL_NV_CO_OK 0x00
-#define NFC_HAL_NV_CO_FAIL 0x01 /* Used to pass all other errors */
-#define NFC_HAL_NV_CO_EACCES 0x02
-#define NFC_HAL_NV_CO_ENOTEMPTY 0x03
-#define NFC_HAL_NV_CO_EOF 0x04
-#define NFC_HAL_NV_CO_EODIR 0x05
-#define NFC_HAL_NV_CO_ENOSPACE 0x06 /* Returned in nfa_nv_ci_open if no room */
-#define NFC_HAL_NV_CO_EIS_DIR 0x07
-#define NFC_HAL_NV_CO_RESUME 0x08 /* used in nfa_nv_ci_open, on resume */
-#define NFC_HAL_NV_CO_NONE 0x09 /* used in nfa_nv_ci_open, on resume (no file to resume) */
-
-typedef UINT8 tNFC_HAL_NV_CO_STATUS;
-
-#define DH_NV_BLOCK 0x01
-#define HC_F3_NV_BLOCK 0x02
-#define HC_F4_NV_BLOCK 0x03
-#define HC_DH_NV_BLOCK 0x04
-
-/*****************************************************************************
-** Function Declarations
-*****************************************************************************/
-/**************************
-** Common Functions
-***************************/
-
-/*******************************************************************************
-**
-** Function nfc_hal_nv_co_read
-**
-** Description This function is called by NFA to read in data from the
-** previously opened file.
-**
-** Parameters p_buf - buffer to read the data into.
-** nbytes - number of bytes to read into the buffer.
-**
-** Returns void
-**
-** Note: Upon completion of the request, nfa_nv_ci_read () is
-** called with the buffer of data, along with the number
-** of bytes read into the buffer, and a status. The
-** call-in function should only be called when ALL requested
-** bytes have been read, the end of file has been detected,
-** or an error has occurred.
-**
-*******************************************************************************/
-void nfc_hal_nv_co_read (UINT8 *p_buf, UINT16 nbytes, UINT8 block);
-
-/*******************************************************************************
-**
-** Function nfc_hal_nv_co_write
-**
-** Description This function is called by io to send file data to the
-** phone.
-**
-** Parameters p_buf - buffer to read the data from.
-** nbytes - number of bytes to write out to the file.
-**
-** Returns void
-**
-** Note: Upon completion of the request, nfa_nv_ci_write () is
-** called with the file descriptor and the status. The
-** call-in function should only be called when ALL requested
-** bytes have been written, or an error has been detected,
-**
-*******************************************************************************/
-void nfc_hal_nv_co_write (const UINT8 *p_buf, UINT16 nbytes, UINT8 block);
-
-
-#endif /* NFC_HAL_NV_CO_H */
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_post_reset.h b/halimpl/bcm2079x/hal/int/nfc_hal_post_reset.h
deleted file mode 100644
index 95da455..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_post_reset.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2009-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Post NCI reset routines
- *
- ******************************************************************************/
-#ifndef NFC_HAL_POST_RESET_H
-#define NFC_HAL_POST_RESET_H
-
-
-/*****************************************************************************
-** Application control block definitions
-******************************************************************************/
-#define NFA_APP_PATCHFILE_MAX_PATH 255
-
-typedef struct
-{
- UINT8 prm_file[NFA_APP_PATCHFILE_MAX_PATH+1]; /* Filename of patchram */
- UINT8 *p_prm_buf; /* Pointer to buffer for holding patchram data */
-
- /* Patchfile for I2C fix */
- UINT8 prm_i2c_patchfile[NFA_APP_PATCHFILE_MAX_PATH+1];
- UINT8 *p_prm_i2c_buf;
-
- UINT8 userial_baud;
-
- tNFC_HAL_DEV_INIT_CFG dev_init_config;
-
- /* snooze mode setting */
- UINT8 snooze_mode;
- UINT8 idle_threshold_dh;
- UINT8 idle_threshold_nfcc;
- UINT8 nfc_wake_active_mode;
- UINT8 dh_wake_active_mode;
-
-} tNFC_POST_RESET_CB;
-extern tNFC_POST_RESET_CB nfc_post_reset_cb;
-
-/*
-** Post NCI reset handler
-**
-** This function is called to start device pre-initialization after NCI CORE-RESET.
-** When pre-initialization is completed,
-** HAL_NfcPreInitDone() must be called to proceed with stack start up.
-*/
-void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type);
-
-
-#endif /* NFC_HAL_POST_RESET_H */
diff --git a/halimpl/bcm2079x/include/StartupConfig.h b/halimpl/bcm2079x/include/StartupConfig.h
new file mode 100644
index 0000000..137371c
--- /dev/null
+++ b/halimpl/bcm2079x/include/StartupConfig.h
@@ -0,0 +1,107 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1999-2012 Broadcom Corporation
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ * Construct a buffer that contains multiple Type-Length-Value contents
+ * that is used by the HAL in a CORE_SET_CONFIG NCI command.
+ ******************************************************************************/
+
+#pragma once
+#include "bt_types.h"
+#include <string>
+
+
+class StartupConfig
+{
+public:
+ typedef std::basic_string<UINT8> uint8_string;
+ StartupConfig ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: initialize
+ **
+ ** Description: Reset all member variables.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void initialize ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: getInternalBuffer
+ **
+ ** Description: Get the pointer to buffer that contains multiple
+ ** Type-Length-Value contents.
+ **
+ ** Returns: Pointer to buffer.
+ **
+ *******************************************************************************/
+ const UINT8* getInternalBuffer ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: append
+ **
+ ** Description: Append new config data to internal buffer.
+ ** newContent: buffer containing new content; newContent[0] is
+ ** payload length; newContent[1..end] is payload.
+ **
+ ** Returns: True if ok.
+ **
+ *******************************************************************************/
+ bool append (const UINT8* newContent);
+
+
+ /*******************************************************************************
+ **
+ ** Function: append
+ **
+ ** Description: Append new config data to internal buffer.
+ ** newContent: buffer containing new content; newContent[0] is
+ ** payload length; newContent[1..end] is payload.
+ ** newContentLen: total length of newContent.
+ **
+ ** Returns: True if ok.
+ **
+ *******************************************************************************/
+ bool append (const UINT8* newContent, UINT8 newContentLen);
+
+
+ /*******************************************************************************
+ **
+ ** Function: disableSecureElement
+ **
+ ** Description: Adjust a TLV to disable secure element(s). The TLV's type is 0xC2.
+ ** bitmask: 0xC0 = do not detect any secure element.
+ ** 0x40 = do not detect secure element in slot 0.
+ ** 0x80 = do not detect secure element in slot 1.
+ **
+ ** Returns: True if ok.
+ **
+ *******************************************************************************/
+ bool disableSecureElement (UINT8 bitmask);
+
+private:
+ static const UINT8 mMaxLength;
+ uint8_string mBuffer;
+};
diff --git a/halimpl/bcm2079x/include/bt_trace.h b/halimpl/bcm2079x/include/bt_trace.h
deleted file mode 100644
index d9c58dd..0000000
--- a/halimpl/bcm2079x/include/bt_trace.h
+++ /dev/null
@@ -1,4837 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef BT_TRACE_H
-#define BT_TRACE_H
-
-#ifndef BTTRC_INCLUDED
-#define BTTRC_INCLUDED FALSE
-#endif
-#ifndef BTTRC_PARSER_INCLUDED
-#define BTTRC_PARSER_INCLUDED FALSE
-#endif
-#ifndef MAX_TRACE_RAM_SIZE
-#define MAX_TRACE_RAM_SIZE 10000
-#endif
-
-/* BTE tracing IDs for debug purposes */
-/* LayerIDs for stack */
-#define BTTRC_ID_STK_GKI 1
-#define BTTRC_ID_STK_BTU 2
-#define BTTRC_ID_STK_HCI 3
-#define BTTRC_ID_STK_L2CAP 4
-#define BTTRC_ID_STK_RFCM_MX 5
-#define BTTRC_ID_STK_RFCM_PRT 6
-#define BTTRC_ID_STK_OBEX_C 7
-#define BTTRC_ID_STK_OBEX_S 8
-#define BTTRC_ID_STK_AVCT 9
-#define BTTRC_ID_STK_AVDT 10
-#define BTTRC_ID_STK_AVRC 11
-#define BTTRC_ID_STK_BIC 12
-#define BTTRC_ID_STK_BIS 13
-#define BTTRC_ID_STK_BNEP 14
-#define BTTRC_ID_STK_BPP 15
-#define BTTRC_ID_STK_BTM_ACL 16
-#define BTTRC_ID_STK_BTM_PM 17
-#define BTTRC_ID_STK_BTM_DEV_CTRL 18
-#define BTTRC_ID_STK_BTM_SVC_DSC 19
-#define BTTRC_ID_STK_BTM_INQ 20
-#define BTTRC_ID_STK_BTM_SCO 21
-#define BTTRC_ID_STK_BTM_SEC 22
-#define BTTRC_ID_STK_DUN 23
-#define BTTRC_ID_STK_HID 24
-#define BTTRC_ID_STK_HSP2 25
-#define BTTRC_ID_STK_CTP 26
-#define BTTRC_ID_STK_FTC 27
-#define BTTRC_ID_STK_FTS 28
-#define BTTRC_ID_STK_GAP 29
-#define BTTRC_ID_STK_GOEP 30
-#define BTTRC_ID_STK_HCRP 31
-#define BTTRC_ID_STK_ICP 32
-#define BTTRC_ID_STK_OPC 33
-#define BTTRC_ID_STK_OPS 34
-#define BTTRC_ID_STK_PAN 35
-#define BTTRC_ID_STK_SAP 36
-#define BTTRC_ID_STK_SDP 37
-#define BTTRC_ID_STK_SLIP 38
-#define BTTRC_ID_STK_SPP 39
-#define BTTRC_ID_STK_TCS 40
-#define BTTRC_ID_STK_VDP 41
-#define BTTRC_ID_STK_AMP 42
-#define BTTRC_ID_STK_MCAP 43
-#define BTTRC_ID_STK_GATT 44
-#define BTTRC_ID_STK_SMP 45
-#define BTTRC_ID_STK_NFC 46
-#define BTTRC_ID_STK_NCI 47
-#define BTTRC_ID_STK_IDEP 48
-#define BTTRC_ID_STK_NDEP 49
-#define BTTRC_ID_STK_LLCP 50
-#define BTTRC_ID_STK_RW 51
-#define BTTRC_ID_STK_CE 52
-#define BTTRC_ID_STK_SNEP 53
-#define BTTRC_ID_STK_NDEF 54
-
-
-/* LayerIDs for BTA */
-#define BTTRC_ID_BTA_ACC 55 /* Advanced Camera Client */
-#define BTTRC_ID_BTA_AG 56 /* audio gateway */
-#define BTTRC_ID_BTA_AV 57 /* Advanced audio */
-#define BTTRC_ID_BTA_BIC 58 /* Basic Imaging Client */
-#define BTTRC_ID_BTA_BIS 59 /* Basic Imaging Server */
-#define BTTRC_ID_BTA_BP 60 /* Basic Printing Client */
-#define BTTRC_ID_BTA_CG 61
-#define BTTRC_ID_BTA_CT 62 /* cordless telephony terminal */
-#define BTTRC_ID_BTA_DG 63 /* data gateway */
-#define BTTRC_ID_BTA_DM 64 /* device manager */
-#define BTTRC_ID_BTA_DM_SRCH 65 /* device manager search */
-#define BTTRC_ID_BTA_DM_SEC 66 /* device manager security */
-#define BTTRC_ID_BTA_FM 67
-#define BTTRC_ID_BTA_FTC 68 /* file transfer client */
-#define BTTRC_ID_BTA_FTS 69 /* file transfer server */
-#define BTTRC_ID_BTA_HIDH 70
-#define BTTRC_ID_BTA_HIDD 71
-#define BTTRC_ID_BTA_JV 72
-#define BTTRC_ID_BTA_OPC 73 /* object push client */
-#define BTTRC_ID_BTA_OPS 74 /* object push server */
-#define BTTRC_ID_BTA_PAN 75 /* Personal Area Networking */
-#define BTTRC_ID_BTA_PR 76 /* Printer client */
-#define BTTRC_ID_BTA_SC 77 /* SIM Card Access server */
-#define BTTRC_ID_BTA_SS 78 /* synchronization server */
-#define BTTRC_ID_BTA_SYS 79 /* system manager */
-#define BTTRC_ID_AVDT_SCB 80 /* avdt scb */
-#define BTTRC_ID_AVDT_CCB 81 /* avdt ccb */
-
-/* LayerIDs for BT APP */
-#define BTTRC_ID_BTAPP 82
-#define BTTRC_ID_MAX_ID BTTRC_ID_BTAPP
-#define BTTRC_ID_ALL_LAYERS 0xFF /* all trace layers */
-typedef UINT8 tBTTRC_LAYER_ID;
-
-/* Trace type definitions. Note that these are mutually exclusive in a trace. This
-means that any trace can be either error,warning,api,event or dbg */
-#if (BTU_STACK_LITE_ENABLED == TRUE)
-#define BTTRC_TYPE_ERROR 0x81
-#define BTTRC_TYPE_WARNING 0x82
-#define BTTRC_TYPE_API 0x84
-#define BTTRC_TYPE_EVENT 0x88
-#define BTTRC_TYPE_ACTION 0x90
-#define BTTRC_TYPE_DBG 0xA0
-#else
-#define BTTRC_TYPE_ERROR 0x01 /* Traces for error situation */
-#define BTTRC_TYPE_WARNING 0x02 /* Traces for warning situation */
-#define BTTRC_TYPE_API 0x04 /* Traces for API */
-#define BTTRC_TYPE_EVENT 0x08 /* Traces for EVENT */
-#define BTTRC_TYPE_ACTION 0x10 /* Traces for Action functions */
-#define BTTRC_TYPE_DBG 0x20 /* Traces for debugging purpose */
-#endif
-typedef UINT8 tBTTRC_TYPE;
-
-/* Masks to identify the stack that originated the trace */
-#define BTTRC_TRACE_LITE 0x80 /* MM Lite stack */
-#define BTTRC_TRACE_EMBD 0x40 /* Embedded host stack */
-
-/* Parameter datatypes used in Trace APIs */
-#define BTTRC_PARAM_UINT8 1
-#define BTTRC_PARAM_UINT16 2
-#define BTTRC_PARAM_UINT32 3
-typedef UINT8 tBTTRC_PARAM_TYPE;
-
-/* Special token definitions */
-#define BTTRC_TOKEN_SM_STATE 0xFFFF /* Token indicating the State of a State m/c */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* External declaration for appl_trace_level here to avoid to add the declaration in all the files using APPL_TRACExxx macros */
-extern UINT8 appl_trace_level ;
-
-/* Prototype for message logging function. */
-EXPORT_API extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-extern void LogMsg_0 (UINT32 trace_set_mask, const char *p_str);
-extern void LogMsg_1 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1);
-extern void LogMsg_2 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2);
-extern void LogMsg_3 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
- UINT32 p3);
-extern void LogMsg_4 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
- UINT32 p3, UINT32 p4);
-extern void LogMsg_5 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
- UINT32 p3, UINT32 p4, UINT32 p5);
-extern void LogMsg_6 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
- UINT32 p3, UINT32 p4, UINT32 p5, UINT32 p6);
-
-/* Prototype for stack tracing function. */
-EXPORT_API extern void BTTRC_StackTrace0(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token);
-EXPORT_API extern void BTTRC_StackTrace1(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token,
- tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val);
-EXPORT_API extern void BTTRC_StackTrace2(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token,
- tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
- tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val);
-EXPORT_API extern void BTTRC_StackTrace3(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token,
- tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
- tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
- tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val);
-EXPORT_API extern void BTTRC_StackTrace4(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token,
- tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
- tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
- tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val,
- tBTTRC_PARAM_TYPE p4_type, UINT32 p4_val);
-EXPORT_API extern void BTTRC_StackTrace5(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token,
- tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
- tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
- tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val,
- tBTTRC_PARAM_TYPE p4_type, UINT32 p4_val,
- tBTTRC_PARAM_TYPE p5_type, UINT32 p5_val);
-EXPORT_API extern void BTTRC_StackTrace6(tBTTRC_LAYER_ID layer_id,
- tBTTRC_TYPE type,
- UINT16 token,
- tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
- tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
- tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val,
- tBTTRC_PARAM_TYPE p4_type, UINT32 p4_val,
- tBTTRC_PARAM_TYPE p5_type, UINT32 p5_val,
- tBTTRC_PARAM_TYPE p6_type, UINT32 p6_val);
-
-#ifdef __cplusplus
-}
-#endif
-
-/******************************************************************************
-**
-** Trace configurable parameters
-**
-******************************************************************************/
-
-/* Enables or disables verbose trace information. */
-#ifndef BT_TRACE_VERBOSE
-#define BT_TRACE_VERBOSE FALSE
-#endif
-
-/* Enables or disables all trace messages. */
-#ifndef BT_USE_TRACES
-#define BT_USE_TRACES TRUE
-#endif
-
-/* Enables or disables protocol trace information. */
-#ifndef BT_TRACE_PROTOCOL
-#define BT_TRACE_PROTOCOL TRUE /* Android requires TRUE */
-#endif
-
-/******************************************************************************
-**
-** Trace Levels
-**
-** The following values may be used for different levels:
-** BT_TRACE_LEVEL_NONE 0 * No trace messages to be generated
-** BT_TRACE_LEVEL_ERROR 1 * Error condition trace messages
-** BT_TRACE_LEVEL_WARNING 2 * Warning condition trace messages
-** BT_TRACE_LEVEL_API 3 * API traces
-** BT_TRACE_LEVEL_EVENT 4 * Debug messages for events
-** BT_TRACE_LEVEL_DEBUG 5 * Debug messages (general)
-******************************************************************************/
-
-/* Core Stack default trace levels */
-#ifndef HCI_INITIAL_TRACE_LEVEL
-#define HCI_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BTM_INITIAL_TRACE_LEVEL
-#define BTM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef L2CAP_INITIAL_TRACE_LEVEL
-#define L2CAP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef LLCP_INITIAL_TRACE_LEVEL
-#define LLCP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AMP_INITIAL_TRACE_LEVEL
-#define AMP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef RFCOMM_INITIAL_TRACE_LEVEL
-#define RFCOMM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef OBX_INITIAL_TRACE_LEVEL
-#define OBX_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SDP_INITIAL_TRACE_LEVEL
-#define SDP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef TCS_INITIAL_TRACE_LEVEL
-#define TCS_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-/* Profile default trace levels */
-#ifndef DUN_INITIAL_TRACE_LEVEL
-#define DUN_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef GAP_INITIAL_TRACE_LEVEL
-#define GAP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef GOEP_INITIAL_TRACE_LEVEL
-#define GOEP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HSP2_INITIAL_TRACE_LEVEL
-#define HSP2_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SPP_INITIAL_TRACE_LEVEL
-#define SPP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef ICP_INITIAL_TRACE_LEVEL
-#define ICP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef CTP_INITIAL_TRACE_LEVEL
-#define CTP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HCRP_INITIAL_TRACE_LEVEL
-#define HCRP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HCRPM_INITIAL_TRACE_LEVEL
-#define HCRPM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BPP_INITIAL_TRACE_LEVEL
-#define BPP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BIP_INITIAL_TRACE_LEVEL
-#define BIP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BNEP_INITIAL_TRACE_LEVEL
-#define BNEP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef PAN_INITIAL_TRACE_LEVEL
-#define PAN_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SAP_INITIAL_TRACE_LEVEL
-#define SAP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef FTP_INITIAL_TRACE_LEVEL
-#define FTP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef OPP_INITIAL_TRACE_LEVEL
-#define OPP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HFP_INITIAL_TRACE_LEVEL
-#define HFP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef A2D_INITIAL_TRACE_LEVEL
-#define A2D_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef VDP_INITIAL_TRACE_LEVEL
-#define VDP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AVDT_INITIAL_TRACE_LEVEL
-#define AVDT_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AVCT_INITIAL_TRACE_LEVEL
-#define AVCT_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AVRC_INITIAL_TRACE_LEVEL
-#define AVRC_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef MCA_INITIAL_TRACE_LEVEL
-#define MCA_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HID_INITIAL_TRACE_LEVEL
-#define HID_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-/* Application and other default trace levels */
-#ifndef RPC_INITIAL_TRACE_LEVEL
-#define RPC_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef APPL_INITIAL_TRACE_LEVEL
-#define APPL_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BT_TRACE_APPL
-#define BT_TRACE_APPL BT_USE_TRACES
-#endif
-
-#ifndef NFC_INITIAL_TRACE_LEVEL
-#define NFC_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef GATT_INITIAL_TRACE_LEVEL
-#define GATT_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SMP_INITIAL_TRACE_LEVEL
-#define SMP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-
-#if (BTTRC_INCLUDED == TRUE)
-/***************************************************************************************/
-/* BTTRC MACROS */
-
-#define BTTRC_EVENT(lid, event, state) \
- {BTTRC_StackTrace1(lid, BTTRC_TYPE_EVENT, event, BTTRC_PARAM_UINT8, state);}
-#define BTTRC_ACTION(lid, action) \
- {BTTRC_StackTrace0(lid, BTTRC_TYPE_ACTION, action);}
-#define BTTRC_STATE(lid, state) \
- {BTTRC_StackTrace1(lid, BTTRC_TYPE_EVENT, BTTRC_TOKEN_SM_STATE, BTTRC_PARAM_UINT8, state);}
-
-#define BTTRC_API0(lid, api) \
- {BTTRC_StackTrace0(lid, BTTRC_TYPE_API, api);}
-#define BTTRC_API1(lid, api, p1_t,p1_v) \
- {BTTRC_StackTrace1(lid, BTTRC_TYPE_API, api, p1_t,p1_v);}
-#define BTTRC_API2(lid, api, p1_t,p1_v,p2_t,p2_v) \
- {BTTRC_StackTrace2(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v);}
-#define BTTRC_API3(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v) \
- {BTTRC_StackTrace3(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v);}
-#define BTTRC_API4(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v) \
- {BTTRC_StackTrace4(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v);}
-#define BTTRC_API5(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v) \
- {BTTRC_StackTrace5(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v);}
-#define BTTRC_API6(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v) \
- {BTTRC_StackTrace6(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v);}
-
-
-#define BTTRC_DBG0(lid, dbg) \
- {BTTRC_StackTrace0(lid, BTTRC_TYPE_DBG, dbg);}
-#define BTTRC_DBG1(lid, dbg, p1_t,p1_v) \
- {BTTRC_StackTrace1(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v);}
-#define BTTRC_DBG2(lid, dbg, p1_t,p1_v,p2_t,p2_v) \
- {BTTRC_StackTrace2(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v);}
-#define BTTRC_DBG3(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v) \
- {BTTRC_StackTrace3(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v);}
-#define BTTRC_DBG4(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v) \
- {BTTRC_StackTrace4(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v);}
-#define BTTRC_DBG5(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v) \
- {BTTRC_StackTrace5(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v);}
-#define BTTRC_DBG6(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v) \
- {BTTRC_StackTrace6(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v);}
-
-/***************************************************************************************/
-/*AVDT MACROS */
-
-#define BTTRC_AVDT_API0(api) \
- BTTRC_API0(BTTRC_ID_STK_AVDT, api)
-#define BTTRC_AVDT_API1(api, p1_t, p1_v) \
- BTTRC_API1(BTTRC_ID_STK_AVDT, api, p1_t, p1_v)
-#define BTTRC_AVDT_API2(api, p1_t, p1_v, p2_t, p2_v) \
- BTTRC_API2(BTTRC_ID_STK_AVDT, api, p1_t, p1_v, p2_t, p2_v)
-/***************************************************************************************/
-/*AVDT_SCB MACROS */
-
-#define BTTRC_AVDT_SCB_EVENT(event, state) \
- BTTRC_EVENT(BTTRC_ID_AVDT_SCB, event, state)
-#define BTTRC_AVDT_SCB_ACTION(action) \
- BTTRC_ACTION(BTTRC_ID_AVDT_SCB, action)
-#define BTTRC_AVDT_SCB_STATE(next_state) \
- BTTRC_STATE(BTTRC_ID_AVDT_SCB, next_state)
-
-#define BTTRC_AVDT_SCB_DBG0(dbg) \
- BTTRC_DBG0(BTTRC_ID_AVDT_SCB, dbg)
-#define BTTRC_AVDT_SCB_DBG1(dbg, p1_t,p1_v) \
- BTTRC_DBG1(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v)
-#define BTTRC_AVDT_SCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v) \
- BTTRC_DBG2(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_SCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v) \
- BTTRC_DBG3(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_SCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v) \
- BTTRC_DBG4(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_SCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v) \
- BTTRC_DBG5(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_SCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v) \
- BTTRC_DBG6(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-/***************************************************************************************/
-/*AVDT_CCB MACROS */
-
-#define BTTRC_AVDT_CCB_EVENT(event, state) \
- BTTRC_EVENT(BTTRC_ID_AVDT_CCB, event, state)
-#define BTTRC_AVDT_CCB_ACTION(action) \
- BTTRC_ACTION(BTTRC_ID_AVDT_CCB, action)
-#define BTTRC_AVDT_CCB_STATE(next_state) \
- BTTRC_STATE(BTTRC_ID_AVDT_CCB, next_state)
-
-#define BTTRC_AVDT_CCB_DBG0(dbg) \
- BTTRC_DBG0(BTTRC_ID_AVDT_CCB, dbg)
-#define BTTRC_AVDT_CCB_DBG1(dbg, p1_t,p1_v) \
- BTTRC_DBG1(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v)
-#define BTTRC_AVDT_CCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v) \
- BTTRC_DBG2(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_CCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v) \
- BTTRC_DBG3(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_CCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v) \
- BTTRC_DBG4(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_CCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v) \
- BTTRC_DBG5(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_CCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v) \
- BTTRC_DBG6(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-/***************************************************************************************/
-
-#else /*BTTRC_INCLUDED*/
-
-/***************************************************************************************/
-/* BTTRC MACROS */
-
-#define BTTRC_EVENT(lid, event, state)
-#define BTTRC_ACTION(lid, action)
-#define BTTRC_STATE(lid, state)
-
-#define BTTRC_API0(lid, api)
-#define BTTRC_API1(lid, api, p1_t, p1_v)
-#define BTTRC_API2(lid, api, p1_t, p1_v, p2_t, p2_v)
-#define BTTRC_API3(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_API4(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_API5(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_API6(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-
-#define BTTRC_DBG0(lid, dbg)
-#define BTTRC_DBG1(lid, dbg, p1_t,p1_v)
-#define BTTRC_DBG2(lid, dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_DBG3(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_DBG4(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_DBG5(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_DBG6(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-/***************************************************************************************/
-/*AVDT MACROS */
-#define BTTRC_AVDT_API0(api)
-#define BTTRC_AVDT_API1(api, p1_t,p1_v)
-#define BTTRC_AVDT_API2(api, p1_t,p1_v,p2_t,p2_v)
-/***************************************************************************************/
-/*AVDT_SCB MACROS */
-
-#define BTTRC_AVDT_SCB_EVENT(event, state)
-#define BTTRC_AVDT_SCB_ACTION(action)
-#define BTTRC_AVDT_SCB_STATE(next_state)
-
-#define BTTRC_AVDT_SCB_DBG0(dbg)
-#define BTTRC_AVDT_SCB_DBG1(dbg, p1_t,p1_v)
-#define BTTRC_AVDT_SCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_SCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_SCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_SCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_SCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-/***************************************************************************************/
-/*AVDT_CCB MACROS */
-
-#define BTTRC_AVDT_CCB_EVENT(event, state)
-#define BTTRC_AVDT_CCB_ACTION(action)
-#define BTTRC_AVDT_CCB_STATE(next_state)
-
-#define BTTRC_AVDT_CCB_DBG0(dbg)
-#define BTTRC_AVDT_CCB_DBG1(dbg, p1_t,p1_v)
-#define BTTRC_AVDT_CCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_CCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_CCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_CCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_CCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-/***************************************************************************************/
-
-#endif /*BTTRC_INCLUDED*/
-
-
-#if (BT_USE_TRACES == TRUE)
-
-#define BT_TRACE_0(l,t,m) LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
-#define BT_TRACE_1(l,t,m,p1) LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1))
-#define BT_TRACE_2(l,t,m,p1,p2) LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2))
-#define BT_TRACE_3(l,t,m,p1,p2,p3) LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3))
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4) LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4))
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5) LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
- (UINT32)(p5))
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6) LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
- (UINT32)(p5),(UINT32)(p6))
-
-#define BT_ERROR_TRACE_0(l,m) LogMsg_0(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m))
-#define BT_ERROR_TRACE_1(l,m,p1) LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m),(UINT32)(p1))
-#define BT_ERROR_TRACE_2(l,m,p1,p2) LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m),(UINT32)(p1),(UINT32)(p2))
-#define BT_ERROR_TRACE_3(l,m,p1,p2,p3) LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m),(UINT32)(p1),(UINT32)(p2),(UINT32)(p3))
-
-/* Define tracing for the HCI unit
-*/
-#define HCI_TRACE_ERROR0(m) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m);}
-#define HCI_TRACE_ERROR1(m,p1) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1);}
-#define HCI_TRACE_ERROR2(m,p1,p2) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HCI_TRACE_ERROR3(m,p1,p2,p3) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HCI_TRACE_ERROR4(m,p1,p2,p3,p4) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCI_TRACE_WARNING0(m) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m);}
-#define HCI_TRACE_WARNING1(m,p1) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1);}
-#define HCI_TRACE_WARNING2(m,p1,p2) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HCI_TRACE_WARNING3(m,p1,p2,p3) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HCI_TRACE_WARNING4(m,p1,p2,p3,p4) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCI_TRACE_EVENT0(m) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m);}
-#define HCI_TRACE_EVENT1(m,p1) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m, p1);}
-#define HCI_TRACE_EVENT2(m,p1,p2) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HCI_TRACE_EVENT3(m,p1,p2,p3) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HCI_TRACE_EVENT4(m,p1,p2,p3,p4) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCI_TRACE_DEBUG0(m) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m);}
-#define HCI_TRACE_DEBUG1(m,p1) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1);}
-#define HCI_TRACE_DEBUG2(m,p1,p2) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HCI_TRACE_DEBUG3(m,p1,p2,p3) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HCI_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for BTM
-*/
-#define BTM_TRACE_ERROR0(m) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m);}
-#define BTM_TRACE_ERROR1(m,p1) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1);}
-#define BTM_TRACE_ERROR2(m,p1,p2) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BTM_TRACE_ERROR3(m,p1,p2,p3) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BTM_TRACE_ERROR4(m,p1,p2,p3,p4) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BTM_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_WARNING0(m) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m);}
-#define BTM_TRACE_WARNING1(m,p1) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1);}
-#define BTM_TRACE_WARNING2(m,p1,p2) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BTM_TRACE_WARNING3(m,p1,p2,p3) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BTM_TRACE_WARNING4(m,p1,p2,p3,p4) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BTM_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_API0(m) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_API, m);}
-#define BTM_TRACE_API1(m,p1) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_API, m, p1);}
-#define BTM_TRACE_API2(m,p1,p2) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2);}
-#define BTM_TRACE_API3(m,p1,p2,p3) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BTM_TRACE_API4(m,p1,p2,p3,p4) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BTM_TRACE_API5(m,p1,p2,p3,p4,p5) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_EVENT0(m) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m);}
-#define BTM_TRACE_EVENT1(m,p1) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m, p1);}
-#define BTM_TRACE_EVENT2(m,p1,p2) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BTM_TRACE_EVENT3(m,p1,p2,p3) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BTM_TRACE_EVENT4(m,p1,p2,p3,p4) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BTM_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_DEBUG0(m) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m);}
-#define BTM_TRACE_DEBUG1(m,p1) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1);}
-#define BTM_TRACE_DEBUG2(m,p1,p2) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BTM_TRACE_DEBUG3(m,p1,p2,p3) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BTM_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BTM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for the L2CAP unit
-*/
-#define L2CAP_TRACE_ERROR0(m) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m);}
-#define L2CAP_TRACE_ERROR1(m,p1) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1);}
-#define L2CAP_TRACE_ERROR2(m,p1,p2) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define L2CAP_TRACE_ERROR3(m,p1,p2,p3) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define L2CAP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_WARNING0(m) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m);}
-#define L2CAP_TRACE_WARNING1(m,p1) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1);}
-#define L2CAP_TRACE_WARNING2(m,p1,p2) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define L2CAP_TRACE_WARNING3(m,p1,p2,p3) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define L2CAP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_API0(m) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m);}
-#define L2CAP_TRACE_API1(m,p1) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1);}
-#define L2CAP_TRACE_API2(m,p1,p2) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2);}
-#define L2CAP_TRACE_API3(m,p1,p2,p3) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define L2CAP_TRACE_API4(m,p1,p2,p3,p4) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_EVENT0(m) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m);}
-#define L2CAP_TRACE_EVENT1(m,p1) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m, p1);}
-#define L2CAP_TRACE_EVENT2(m,p1,p2) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define L2CAP_TRACE_EVENT3(m,p1,p2,p3) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define L2CAP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_DEBUG0(m) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m);}
-#define L2CAP_TRACE_DEBUG1(m,p1) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1);}
-#define L2CAP_TRACE_DEBUG2(m,p1,p2) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define L2CAP_TRACE_DEBUG3(m,p1,p2,p3) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define L2CAP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the LLCP unit
-*/
-#define LLCP_TRACE_ERROR0(m) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m);}
-#define LLCP_TRACE_ERROR1(m,p1) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1);}
-#define LLCP_TRACE_ERROR2(m,p1,p2) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define LLCP_TRACE_ERROR3(m,p1,p2,p3) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define LLCP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_WARNING0(m) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m);}
-#define LLCP_TRACE_WARNING1(m,p1) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1);}
-#define LLCP_TRACE_WARNING2(m,p1,p2) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define LLCP_TRACE_WARNING3(m,p1,p2,p3) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define LLCP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_API0(m) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_API, m);}
-#define LLCP_TRACE_API1(m,p1) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1);}
-#define LLCP_TRACE_API2(m,p1,p2) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2);}
-#define LLCP_TRACE_API3(m,p1,p2,p3) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define LLCP_TRACE_API4(m,p1,p2,p3,p4) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_EVENT0(m) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m);}
-#define LLCP_TRACE_EVENT1(m,p1) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1);}
-#define LLCP_TRACE_EVENT2(m,p1,p2) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define LLCP_TRACE_EVENT3(m,p1,p2,p3) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define LLCP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_DEBUG0(m) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m);}
-#define LLCP_TRACE_DEBUG1(m,p1) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1);}
-#define LLCP_TRACE_DEBUG2(m,p1,p2) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define LLCP_TRACE_DEBUG3(m,p1,p2,p3) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define LLCP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the SDP unit
-*/
-#define SDP_TRACE_ERROR0(m) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m);}
-#define SDP_TRACE_ERROR1(m,p1) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1);}
-#define SDP_TRACE_ERROR2(m,p1,p2) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SDP_TRACE_ERROR3(m,p1,p2,p3) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SDP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_WARNING0(m) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m);}
-#define SDP_TRACE_WARNING1(m,p1) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1);}
-#define SDP_TRACE_WARNING2(m,p1,p2) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SDP_TRACE_WARNING3(m,p1,p2,p3) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SDP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_API0(m) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_API, m);}
-#define SDP_TRACE_API1(m,p1) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1);}
-#define SDP_TRACE_API2(m,p1,p2) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2);}
-#define SDP_TRACE_API3(m,p1,p2,p3) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SDP_TRACE_API4(m,p1,p2,p3,p4) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SDP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_EVENT0(m) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m);}
-#define SDP_TRACE_EVENT1(m,p1) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m, p1);}
-#define SDP_TRACE_EVENT2(m,p1,p2) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SDP_TRACE_EVENT3(m,p1,p2,p3) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SDP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_DEBUG0(m) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m);}
-#define SDP_TRACE_DEBUG1(m,p1) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1);}
-#define SDP_TRACE_DEBUG2(m,p1,p2) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SDP_TRACE_DEBUG3(m,p1,p2,p3) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SDP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the RFCOMM unit
-*/
-#define RFCOMM_TRACE_ERROR0(m) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m);}
-#define RFCOMM_TRACE_ERROR1(m,p1) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1);}
-#define RFCOMM_TRACE_ERROR2(m,p1,p2) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2);}
-#define RFCOMM_TRACE_ERROR3(m,p1,p2,p3) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define RFCOMM_TRACE_ERROR4(m,p1,p2,p3,p4) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_WARNING0(m) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m);}
-#define RFCOMM_TRACE_WARNING1(m,p1) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1);}
-#define RFCOMM_TRACE_WARNING2(m,p1,p2) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2);}
-#define RFCOMM_TRACE_WARNING3(m,p1,p2,p3) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define RFCOMM_TRACE_WARNING4(m,p1,p2,p3,p4) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_API0(m) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m);}
-#define RFCOMM_TRACE_API1(m,p1) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1);}
-#define RFCOMM_TRACE_API2(m,p1,p2) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2);}
-#define RFCOMM_TRACE_API3(m,p1,p2,p3) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3);}
-#define RFCOMM_TRACE_API4(m,p1,p2,p3,p4) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_API5(m,p1,p2,p3,p4,p5) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_EVENT0(m) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m);}
-#define RFCOMM_TRACE_EVENT1(m,p1) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m, p1);}
-#define RFCOMM_TRACE_EVENT2(m,p1,p2) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2);}
-#define RFCOMM_TRACE_EVENT3(m,p1,p2,p3) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define RFCOMM_TRACE_EVENT4(m,p1,p2,p3,p4) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_DEBUG0(m) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m);}
-#define RFCOMM_TRACE_DEBUG1(m,p1) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1);}
-#define RFCOMM_TRACE_DEBUG2(m,p1,p2) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define RFCOMM_TRACE_DEBUG3(m,p1,p2,p3) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define RFCOMM_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for Serial Port Profile
-*/
-#define SPP_TRACE_ERROR0(m) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m);}
-#define SPP_TRACE_ERROR1(m,p1) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1);}
-#define SPP_TRACE_ERROR2(m,p1,p2) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SPP_TRACE_ERROR3(m,p1,p2,p3) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SPP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_WARNING0(m) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m);}
-#define SPP_TRACE_WARNING1(m,p1) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1);}
-#define SPP_TRACE_WARNING2(m,p1,p2) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SPP_TRACE_WARNING3(m,p1,p2,p3) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SPP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_EVENT0(m) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m);}
-#define SPP_TRACE_EVENT1(m,p1) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m, p1);}
-#define SPP_TRACE_EVENT2(m,p1,p2) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SPP_TRACE_EVENT3(m,p1,p2,p3) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SPP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_API0(m) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_API, m);}
-#define SPP_TRACE_API1(m,p1) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_API, m, p1);}
-#define SPP_TRACE_API2(m,p1,p2) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2);}
-#define SPP_TRACE_API3(m,p1,p2,p3) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SPP_TRACE_API4(m,p1,p2,p3,p4) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SPP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_DEBUG0(m) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m);}
-#define SPP_TRACE_DEBUG1(m,p1) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1);}
-#define SPP_TRACE_DEBUG2(m,p1,p2) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SPP_TRACE_DEBUG3(m,p1,p2,p3) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SPP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Generic Access Profile traces */
-#define GAP_TRACE_ERROR0(m) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m);}
-#define GAP_TRACE_ERROR1(m,p1) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m, p1);}
-#define GAP_TRACE_ERROR2(m,p1,p2) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define GAP_TRACE_ERROR3(m,p1,p2,p3) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define GAP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define GAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define GAP_TRACE_EVENT0(m) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m);}
-#define GAP_TRACE_EVENT1(m,p1) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m, p1);}
-#define GAP_TRACE_EVENT2(m,p1,p2) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define GAP_TRACE_EVENT3(m,p1,p2,p3) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define GAP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define GAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define GAP_TRACE_API0(m) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_API, m);}
-#define GAP_TRACE_API1(m,p1) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_API, m, p1);}
-#define GAP_TRACE_API2(m,p1,p2) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2);}
-#define GAP_TRACE_API3(m,p1,p2,p3) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define GAP_TRACE_API4(m,p1,p2,p3,p4) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define GAP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define GAP_TRACE_WARNING0(m) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m);}
-#define GAP_TRACE_WARNING1(m,p1) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m, p1);}
-#define GAP_TRACE_WARNING2(m,p1,p2) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define GAP_TRACE_WARNING3(m,p1,p2,p3) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define GAP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define GAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for OBX
-*/
-#define OBX_TRACE_ERROR0(m) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m);}
-#define OBX_TRACE_ERROR1(m,p1) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1);}
-#define OBX_TRACE_ERROR2(m,p1,p2) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2);}
-#define OBX_TRACE_ERROR3(m,p1,p2,p3) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define OBX_TRACE_ERROR4(m,p1,p2,p3,p4) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define OBX_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_WARNING0(m) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m);}
-#define OBX_TRACE_WARNING1(m,p1) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1);}
-#define OBX_TRACE_WARNING2(m,p1,p2) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2);}
-#define OBX_TRACE_WARNING3(m,p1,p2,p3) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define OBX_TRACE_WARNING4(m,p1,p2,p3,p4) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define OBX_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_EVENT0(m) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m);}
-#define OBX_TRACE_EVENT1(m,p1) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m, p1);}
-#define OBX_TRACE_EVENT2(m,p1,p2) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2);}
-#define OBX_TRACE_EVENT3(m,p1,p2,p3) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define OBX_TRACE_EVENT4(m,p1,p2,p3,p4) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define OBX_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_DEBUG0(m) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m);}
-#define OBX_TRACE_DEBUG1(m,p1) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1);}
-#define OBX_TRACE_DEBUG2(m,p1,p2) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define OBX_TRACE_DEBUG3(m,p1,p2,p3) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define OBX_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define OBX_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_API0(m) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_API, m);}
-#define OBX_TRACE_API1(m,p1) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_API, m, p1);}
-#define OBX_TRACE_API2(m,p1,p2) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2);}
-#define OBX_TRACE_API3(m,p1,p2,p3) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3);}
-#define OBX_TRACE_API4(m,p1,p2,p3,p4) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define OBX_TRACE_API5(m,p1,p2,p3,p4,p5) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for OBEX application profiles
-*/
-#define GOEP_TRACE_ERROR0(m) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m);}
-#define GOEP_TRACE_ERROR1(m,p1) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1);}
-#define GOEP_TRACE_ERROR2(m,p1,p2) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define GOEP_TRACE_ERROR3(m,p1,p2,p3) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define GOEP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_WARNING0(m) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m);}
-#define GOEP_TRACE_WARNING1(m,p1) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1);}
-#define GOEP_TRACE_WARNING2(m,p1,p2) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define GOEP_TRACE_WARNING3(m,p1,p2,p3) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define GOEP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_EVENT0(m) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m);}
-#define GOEP_TRACE_EVENT1(m,p1) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m, p1);}
-#define GOEP_TRACE_EVENT2(m,p1,p2) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define GOEP_TRACE_EVENT3(m,p1,p2,p3) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define GOEP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_DEBUG0(m) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m);}
-#define GOEP_TRACE_DEBUG1(m,p1) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1);}
-#define GOEP_TRACE_DEBUG2(m,p1,p2) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define GOEP_TRACE_DEBUG3(m,p1,p2,p3) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define GOEP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_API0(m) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_API, m);}
-#define GOEP_TRACE_API1(m,p1) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_API, m, p1);}
-#define GOEP_TRACE_API2(m,p1,p2) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2);}
-#define GOEP_TRACE_API3(m,p1,p2,p3) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define GOEP_TRACE_API4(m,p1,p2,p3,p4) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the BPP profile
-*/
-#define BPP_TRACE_ERROR0(m) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m);}
-#define BPP_TRACE_ERROR1(m,p1) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1);}
-#define BPP_TRACE_ERROR2(m,p1,p2) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BPP_TRACE_ERROR3(m,p1,p2,p3) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BPP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_WARNING0(m) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m);}
-#define BPP_TRACE_WARNING1(m,p1) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1);}
-#define BPP_TRACE_WARNING2(m,p1,p2) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BPP_TRACE_WARNING3(m,p1,p2,p3) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BPP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_EVENT0(m) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m);}
-#define BPP_TRACE_EVENT1(m,p1) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m, p1);}
-#define BPP_TRACE_EVENT2(m,p1,p2) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BPP_TRACE_EVENT3(m,p1,p2,p3) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BPP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_DEBUG0(m) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m);}
-#define BPP_TRACE_DEBUG1(m,p1) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1);}
-#define BPP_TRACE_DEBUG2(m,p1,p2) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BPP_TRACE_DEBUG3(m,p1,p2,p3) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BPP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_API0(m) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_API, m);}
-#define BPP_TRACE_API1(m,p1) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_API, m, p1);}
-#define BPP_TRACE_API2(m,p1,p2) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2);}
-#define BPP_TRACE_API3(m,p1,p2,p3) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BPP_TRACE_API4(m,p1,p2,p3,p4) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BPP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the BIP profile
-*/
-#define BIP_TRACE_ERROR0(m) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m);}
-#define BIP_TRACE_ERROR1(m,p1) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1);}
-#define BIP_TRACE_ERROR2(m,p1,p2) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BIP_TRACE_ERROR3(m,p1,p2,p3) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BIP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BIP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_WARNING0(m) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m);}
-#define BIP_TRACE_WARNING1(m,p1) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1);}
-#define BIP_TRACE_WARNING2(m,p1,p2) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BIP_TRACE_WARNING3(m,p1,p2,p3) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BIP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BIP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_EVENT0(m) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m);}
-#define BIP_TRACE_EVENT1(m,p1) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m, p1);}
-#define BIP_TRACE_EVENT2(m,p1,p2) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BIP_TRACE_EVENT3(m,p1,p2,p3) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BIP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BIP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_DEBUG0(m) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m);}
-#define BIP_TRACE_DEBUG1(m,p1) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1);}
-#define BIP_TRACE_DEBUG2(m,p1,p2) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BIP_TRACE_DEBUG3(m,p1,p2,p3) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BIP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BIP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_API0(m) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_API, m);}
-#define BIP_TRACE_API1(m,p1) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_API, m, p1);}
-#define BIP_TRACE_API2(m,p1,p2) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2);}
-#define BIP_TRACE_API3(m,p1,p2,p3) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BIP_TRACE_API4(m,p1,p2,p3,p4) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BIP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for TCS
-*/
-#define TCS_TRACE_ERROR0(m) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m);}
-#define TCS_TRACE_ERROR1(m,p1) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1);}
-#define TCS_TRACE_ERROR2(m,p1,p2) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2);}
-#define TCS_TRACE_ERROR3(m,p1,p2,p3) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define TCS_TRACE_ERROR4(m,p1,p2,p3,p4) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define TCS_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_WARNING0(m) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m);}
-#define TCS_TRACE_WARNING1(m,p1) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1);}
-#define TCS_TRACE_WARNING2(m,p1,p2) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2);}
-#define TCS_TRACE_WARNING3(m,p1,p2,p3) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define TCS_TRACE_WARNING4(m,p1,p2,p3,p4) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define TCS_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_EVENT0(m) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m);}
-#define TCS_TRACE_EVENT1(m,p1) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m, p1);}
-#define TCS_TRACE_EVENT2(m,p1,p2) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2);}
-#define TCS_TRACE_EVENT3(m,p1,p2,p3) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define TCS_TRACE_EVENT4(m,p1,p2,p3,p4) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define TCS_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_DEBUG0(m) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m);}
-#define TCS_TRACE_DEBUG1(m,p1) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1);}
-#define TCS_TRACE_DEBUG2(m,p1,p2) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define TCS_TRACE_DEBUG3(m,p1,p2,p3) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define TCS_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define TCS_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_API0(m) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_API, m);}
-#define TCS_TRACE_API1(m,p1) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_API, m, p1);}
-#define TCS_TRACE_API2(m,p1,p2) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2);}
-#define TCS_TRACE_API3(m,p1,p2,p3) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3);}
-#define TCS_TRACE_API4(m,p1,p2,p3,p4) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define TCS_TRACE_API5(m,p1,p2,p3,p4,p5) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for ICP
-*/
-#define ICP_TRACE_ERROR0(m) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m);}
-#define ICP_TRACE_ERROR1(m,p1) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1);}
-#define ICP_TRACE_ERROR2(m,p1,p2) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define ICP_TRACE_ERROR3(m,p1,p2,p3) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define ICP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define ICP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_WARNING0(m) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m);}
-#define ICP_TRACE_WARNING1(m,p1) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1);}
-#define ICP_TRACE_WARNING2(m,p1,p2) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define ICP_TRACE_WARNING3(m,p1,p2,p3) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define ICP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define ICP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_EVENT0(m) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m);}
-#define ICP_TRACE_EVENT1(m,p1) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m, p1);}
-#define ICP_TRACE_EVENT2(m,p1,p2) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define ICP_TRACE_EVENT3(m,p1,p2,p3) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define ICP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define ICP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_DEBUG0(m) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m);}
-#define ICP_TRACE_DEBUG1(m,p1) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1);}
-#define ICP_TRACE_DEBUG2(m,p1,p2) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define ICP_TRACE_DEBUG3(m,p1,p2,p3) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define ICP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define ICP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_API0(m) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_API, m);}
-#define ICP_TRACE_API1(m,p1) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_API, m, p1);}
-#define ICP_TRACE_API2(m,p1,p2) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2);}
-#define ICP_TRACE_API3(m,p1,p2,p3) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define ICP_TRACE_API4(m,p1,p2,p3,p4) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define ICP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* CTP */
-#define CTP_TRACE_ERROR0(m) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m);}
-#define CTP_TRACE_ERROR1(m,p1) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1);}
-#define CTP_TRACE_ERROR2(m,p1,p2) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define CTP_TRACE_ERROR3(m,p1,p2,p3) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define CTP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define CTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define CTP_TRACE_WARNING0(m) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m);}
-#define CTP_TRACE_WARNING1(m,p1) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1);}
-#define CTP_TRACE_WARNING2(m,p1,p2) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define CTP_TRACE_WARNING3(m,p1,p2,p3) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define CTP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define CTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define CTP_TRACE_EVENT0(m) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m);}
-#define CTP_TRACE_EVENT1(m,p1) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m, p1);}
-#define CTP_TRACE_EVENT2(m,p1,p2) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define CTP_TRACE_EVENT3(m,p1,p2,p3) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define CTP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define CTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define CTP_TRACE_DEBUG0(m) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m);}
-#define CTP_TRACE_DEBUG1(m,p1) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1);}
-#define CTP_TRACE_DEBUG2(m,p1,p2) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define CTP_TRACE_DEBUG3(m,p1,p2,p3) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define CTP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define CTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* define traces for HID Host */
-#define HIDH_TRACE_ERROR0(m) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m);}
-#define HIDH_TRACE_ERROR1(m,p1) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m, p1);}
-#define HIDH_TRACE_ERROR2(m,p1,p2) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HIDH_TRACE_ERROR3(m,p1,p2,p3) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HIDH_TRACE_ERROR4(m,p1,p2,p3,p4) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_WARNING0(m) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m);}
-#define HIDH_TRACE_WARNING1(m,p1) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1);}
-#define HIDH_TRACE_WARNING2(m,p1,p2) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HIDH_TRACE_WARNING3(m,p1,p2,p3) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HIDH_TRACE_WARNING4(m,p1,p2,p3,p4) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_API0(m) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_API, m);}
-#define HIDH_TRACE_API1(m,p1) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_API, m, p1);}
-#define HIDH_TRACE_API2(m,p1,p2) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2);}
-#define HIDH_TRACE_API3(m,p1,p2,p3) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HIDH_TRACE_API4(m,p1,p2,p3,p4) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_API5(m,p1,p2,p3,p4,p5) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_EVENT0(m) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m);}
-#define HIDH_TRACE_EVENT1(m,p1) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m, p1);}
-#define HIDH_TRACE_EVENT2(m,p1,p2) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HIDH_TRACE_EVENT3(m,p1,p2,p3) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HIDH_TRACE_EVENT4(m,p1,p2,p3,p4) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_DEBUG0(m) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m);}
-#define HIDH_TRACE_DEBUG1(m,p1) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1);}
-#define HIDH_TRACE_DEBUG2(m,p1,p2) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HIDH_TRACE_DEBUG3(m,p1,p2,p3) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HIDH_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for HID Device */
-#define HIDD_TRACE_ERROR0(m) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m);}
-#define HIDD_TRACE_ERROR1(m,p1) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m, p1);}
-#define HIDD_TRACE_ERROR2(m,p1,p2) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HIDD_TRACE_ERROR3(m,p1,p2,p3) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HIDD_TRACE_ERROR4(m,p1,p2,p3,p4) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_WARNING0(m) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m);}
-#define HIDD_TRACE_WARNING1(m,p1) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1);}
-#define HIDD_TRACE_WARNING2(m,p1,p2) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HIDD_TRACE_WARNING3(m,p1,p2,p3) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HIDD_TRACE_WARNING4(m,p1,p2,p3,p4) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_API0(m) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_API, m);}
-#define HIDD_TRACE_API1(m,p1) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_API, m, p1);}
-#define HIDD_TRACE_API2(m,p1,p2) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2);}
-#define HIDD_TRACE_API3(m,p1,p2,p3) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HIDD_TRACE_API4(m,p1,p2,p3,p4) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_API5(m,p1,p2,p3,p4,p5) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_EVENT0(m) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m);}
-#define HIDD_TRACE_EVENT1(m,p1) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m, p1);}
-#define HIDD_TRACE_EVENT2(m,p1,p2) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HIDD_TRACE_EVENT3(m,p1,p2,p3) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HIDD_TRACE_EVENT4(m,p1,p2,p3,p4) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_DEBUG0(m) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m);}
-#define HIDD_TRACE_DEBUG1(m,p1) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1);}
-#define HIDD_TRACE_DEBUG2(m,p1,p2) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HIDD_TRACE_DEBUG3(m,p1,p2,p3) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HIDD_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for headset profile */
-#define HSP2_TRACE_ERROR0(pcb,m) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m);}
-#define HSP2_TRACE_ERROR1(pcb,m,p1) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m, p1);}
-#define HSP2_TRACE_ERROR2(pcb,m,p1,p2) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HSP2_TRACE_ERROR3(pcb,m,p1,p2,p3) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HSP2_TRACE_ERROR4(pcb,m,p1,p2,p3,p4) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_ERROR5(pcb,m,p1,p2,p3,p4,p5) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_ERROR6(pcb,m,p1,p2,p3,p4,p5,p6) {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_WARNING0(pcb,m) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m);}
-#define HSP2_TRACE_WARNING1(pcb,m,p1) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1);}
-#define HSP2_TRACE_WARNING2(pcb,m,p1,p2) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HSP2_TRACE_WARNING3(pcb,m,p1,p2,p3) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HSP2_TRACE_WARNING4(pcb,m,p1,p2,p3,p4) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_WARNING5(pcb,m,p1,p2,p3,p4,p5) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_WARNING6(pcb,m,p1,p2,p3,p4,p5,p6) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_API0(pcb,m) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_API, m);}
-#define HSP2_TRACE_API1(pcb,m,p1) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_API, m, p1);}
-#define HSP2_TRACE_API2(pcb,m,p1,p2) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2);}
-#define HSP2_TRACE_API3(pcb,m,p1,p2,p3) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HSP2_TRACE_API4(pcb,m,p1,p2,p3,p4) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_API5(pcb,m,p1,p2,p3,p4,p5) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_API6(pcb,m,p1,p2,p3,p4,p5,p6) {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_EVENT0(pcb,m) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m);}
-#define HSP2_TRACE_EVENT1(pcb,m,p1) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m, p1);}
-#define HSP2_TRACE_EVENT2(pcb,m,p1,p2) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HSP2_TRACE_EVENT3(pcb,m,p1,p2,p3) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HSP2_TRACE_EVENT4(pcb,m,p1,p2,p3,p4) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_EVENT5(pcb,m,p1,p2,p3,p4,p5) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_EVENT6(pcb,m,p1,p2,p3,p4,p5,p6) {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_DEBUG0(pcb,m) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m);}
-#define HSP2_TRACE_DEBUG1(pcb,m,p1) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1);}
-#define HSP2_TRACE_DEBUG2(pcb,m,p1,p2) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HSP2_TRACE_DEBUG3(pcb,m,p1,p2,p3) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HSP2_TRACE_DEBUG4(pcb,m,p1,p2,p3,p4) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_DEBUG5(pcb,m,p1,p2,p3,p4,p5) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_DEBUG6(pcb,m,p1,p2,p3,p4,p5,p6) {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFC unit
-*/
-#define NFC_TRACE_ERROR0(m) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m);}
-#define NFC_TRACE_ERROR1(m,p1) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1);}
-#define NFC_TRACE_ERROR2(m,p1,p2) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NFC_TRACE_ERROR3(m,p1,p2,p3) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NFC_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NFC_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_WARNING0(m) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m);}
-#define NFC_TRACE_WARNING1(m,p1) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1);}
-#define NFC_TRACE_WARNING2(m,p1,p2) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NFC_TRACE_WARNING3(m,p1,p2,p3) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NFC_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NFC_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_API0(m) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_API, m);}
-#define NFC_TRACE_API1(m,p1) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1);}
-#define NFC_TRACE_API2(m,p1,p2) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2);}
-#define NFC_TRACE_API3(m,p1,p2,p3) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NFC_TRACE_API4(m,p1,p2,p3,p4) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NFC_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_EVENT0(m) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m);}
-#define NFC_TRACE_EVENT1(m,p1) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1);}
-#define NFC_TRACE_EVENT2(m,p1,p2) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NFC_TRACE_EVENT3(m,p1,p2,p3) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NFC_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NFC_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_DEBUG0(m) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m);}
-#define NFC_TRACE_DEBUG1(m,p1) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1);}
-#define NFC_TRACE_DEBUG2(m,p1,p2) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NFC_TRACE_DEBUG3(m,p1,p2,p3) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NFC_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NFC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_ERROR0(m) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m);}
-#define NCI_TRACE_ERROR1(m,p1) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1);}
-#define NCI_TRACE_ERROR2(m,p1,p2) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NCI_TRACE_ERROR3(m,p1,p2,p3) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_WARNING0(m) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m);}
-#define NCI_TRACE_WARNING1(m,p1) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1);}
-#define NCI_TRACE_WARNING2(m,p1,p2) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NCI_TRACE_WARNING3(m,p1,p2,p3) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_API0(m) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m);}
-#define NCI_TRACE_API1(m,p1) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1);}
-#define NCI_TRACE_API2(m,p1,p2) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2);}
-#define NCI_TRACE_API3(m,p1,p2,p3) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NCI_TRACE_API4(m,p1,p2,p3,p4) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_EVENT0(m) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m);}
-#define NCI_TRACE_EVENT1(m,p1) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1);}
-#define NCI_TRACE_EVENT2(m,p1,p2) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NCI_TRACE_EVENT3(m,p1,p2,p3) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_DEBUG0(m) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m);}
-#define NCI_TRACE_DEBUG1(m,p1) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1);}
-#define NCI_TRACE_DEBUG2(m,p1,p2) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_ERROR0(m) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m);}
-#define RW_TRACE_ERROR1(m,p1) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1);}
-#define RW_TRACE_ERROR2(m,p1,p2) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2);}
-#define RW_TRACE_ERROR3(m,p1,p2,p3) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define RW_TRACE_ERROR4(m,p1,p2,p3,p4) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define RW_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_WARNING0(m) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m);}
-#define RW_TRACE_WARNING1(m,p1) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1);}
-#define RW_TRACE_WARNING2(m,p1,p2) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2);}
-#define RW_TRACE_WARNING3(m,p1,p2,p3) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define RW_TRACE_WARNING4(m,p1,p2,p3,p4) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define RW_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_API0(m) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_API, m);}
-#define RW_TRACE_API1(m,p1) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1);}
-#define RW_TRACE_API2(m,p1,p2) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2);}
-#define RW_TRACE_API3(m,p1,p2,p3) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3);}
-#define RW_TRACE_API4(m,p1,p2,p3,p4) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define RW_TRACE_API5(m,p1,p2,p3,p4,p5) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_EVENT0(m) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m);}
-#define RW_TRACE_EVENT1(m,p1) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1);}
-#define RW_TRACE_EVENT2(m,p1,p2) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2);}
-#define RW_TRACE_EVENT3(m,p1,p2,p3) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define RW_TRACE_EVENT4(m,p1,p2,p3,p4) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define RW_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_DEBUG0(m) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m);}
-#define RW_TRACE_DEBUG1(m,p1) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1);}
-#define RW_TRACE_DEBUG2(m,p1,p2) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define RW_TRACE_DEBUG3(m,p1,p2,p3) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define RW_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define RW_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_ERROR0(m) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m);}
-#define CE_TRACE_ERROR1(m,p1) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1);}
-#define CE_TRACE_ERROR2(m,p1,p2) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2);}
-#define CE_TRACE_ERROR3(m,p1,p2,p3) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define CE_TRACE_ERROR4(m,p1,p2,p3,p4) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define CE_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_WARNING0(m) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m);}
-#define CE_TRACE_WARNING1(m,p1) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1);}
-#define CE_TRACE_WARNING2(m,p1,p2) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2);}
-#define CE_TRACE_WARNING3(m,p1,p2,p3) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define CE_TRACE_WARNING4(m,p1,p2,p3,p4) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define CE_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_API0(m) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_API, m);}
-#define CE_TRACE_API1(m,p1) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1);}
-#define CE_TRACE_API2(m,p1,p2) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2);}
-#define CE_TRACE_API3(m,p1,p2,p3) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3);}
-#define CE_TRACE_API4(m,p1,p2,p3,p4) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define CE_TRACE_API5(m,p1,p2,p3,p4,p5) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_EVENT0(m) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m);}
-#define CE_TRACE_EVENT1(m,p1) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1);}
-#define CE_TRACE_EVENT2(m,p1,p2) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2);}
-#define CE_TRACE_EVENT3(m,p1,p2,p3) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define CE_TRACE_EVENT4(m,p1,p2,p3,p4) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define CE_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_DEBUG0(m) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m);}
-#define CE_TRACE_DEBUG1(m,p1) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1);}
-#define CE_TRACE_DEBUG2(m,p1,p2) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define CE_TRACE_DEBUG3(m,p1,p2,p3) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define CE_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define CE_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_ERROR0(m) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m);}
-#define NDEF_TRACE_ERROR1(m,p1) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1);}
-#define NDEF_TRACE_ERROR2(m,p1,p2) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NDEF_TRACE_ERROR3(m,p1,p2,p3) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NDEF_TRACE_ERROR4(m,p1,p2,p3,p4) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_WARNING0(m) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m);}
-#define NDEF_TRACE_WARNING1(m,p1) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1);}
-#define NDEF_TRACE_WARNING2(m,p1,p2) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NDEF_TRACE_WARNING3(m,p1,p2,p3) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NDEF_TRACE_WARNING4(m,p1,p2,p3,p4) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_API0(m) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_API, m);}
-#define NDEF_TRACE_API1(m,p1) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1);}
-#define NDEF_TRACE_API2(m,p1,p2) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2);}
-#define NDEF_TRACE_API3(m,p1,p2,p3) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NDEF_TRACE_API4(m,p1,p2,p3,p4) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_API5(m,p1,p2,p3,p4,p5) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_EVENT0(m) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m);}
-#define NDEF_TRACE_EVENT1(m,p1) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1);}
-#define NDEF_TRACE_EVENT2(m,p1,p2) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NDEF_TRACE_EVENT3(m,p1,p2,p3) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NDEF_TRACE_EVENT4(m,p1,p2,p3,p4) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_DEBUG0(m) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m);}
-#define NDEF_TRACE_DEBUG1(m,p1) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1);}
-#define NDEF_TRACE_DEBUG2(m,p1,p2) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NDEF_TRACE_DEBUG3(m,p1,p2,p3) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NDEF_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA unit
-*/
-#define NFA_TRACE_ERROR0(m) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m);}
-#define NFA_TRACE_ERROR1(m,p1) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1);}
-#define NFA_TRACE_ERROR2(m,p1,p2) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NFA_TRACE_ERROR3(m,p1,p2,p3) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NFA_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NFA_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_WARNING0(m) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m);}
-#define NFA_TRACE_WARNING1(m,p1) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1);}
-#define NFA_TRACE_WARNING2(m,p1,p2) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NFA_TRACE_WARNING3(m,p1,p2,p3) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NFA_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NFA_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_API0(m) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_API, m);}
-#define NFA_TRACE_API1(m,p1) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1);}
-#define NFA_TRACE_API2(m,p1,p2) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2);}
-#define NFA_TRACE_API3(m,p1,p2,p3) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NFA_TRACE_API4(m,p1,p2,p3,p4) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NFA_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_EVENT0(m) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m);}
-#define NFA_TRACE_EVENT1(m,p1) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1);}
-#define NFA_TRACE_EVENT2(m,p1,p2) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NFA_TRACE_EVENT3(m,p1,p2,p3) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NFA_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NFA_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_DEBUG0(m) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m);}
-#define NFA_TRACE_DEBUG1(m,p1) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1);}
-#define NFA_TRACE_DEBUG2(m,p1,p2) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NFA_TRACE_DEBUG3(m,p1,p2,p3) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NFA_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NFA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA P2P unit
-*/
-#define P2P_TRACE_ERROR0(m) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m);}
-#define P2P_TRACE_ERROR1(m,p1) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1);}
-#define P2P_TRACE_ERROR2(m,p1,p2) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2);}
-#define P2P_TRACE_ERROR3(m,p1,p2,p3) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define P2P_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define P2P_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_WARNING0(m) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m);}
-#define P2P_TRACE_WARNING1(m,p1) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1);}
-#define P2P_TRACE_WARNING2(m,p1,p2) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2);}
-#define P2P_TRACE_WARNING3(m,p1,p2,p3) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define P2P_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define P2P_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_API0(m) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_API, m);}
-#define P2P_TRACE_API1(m,p1) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1);}
-#define P2P_TRACE_API2(m,p1,p2) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2);}
-#define P2P_TRACE_API3(m,p1,p2,p3) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3);}
-#define P2P_TRACE_API4(m,p1,p2,p3,p4) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define P2P_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_EVENT0(m) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m);}
-#define P2P_TRACE_EVENT1(m,p1) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1);}
-#define P2P_TRACE_EVENT2(m,p1,p2) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2);}
-#define P2P_TRACE_EVENT3(m,p1,p2,p3) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define P2P_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define P2P_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_DEBUG0(m) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m);}
-#define P2P_TRACE_DEBUG1(m,p1) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1);}
-#define P2P_TRACE_DEBUG2(m,p1,p2) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define P2P_TRACE_DEBUG3(m,p1,p2,p3) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define P2P_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define P2P_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA CHO unit
-*/
-#define CHO_TRACE_ERROR0(m) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m);}
-#define CHO_TRACE_ERROR1(m,p1) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1);}
-#define CHO_TRACE_ERROR2(m,p1,p2) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2);}
-#define CHO_TRACE_ERROR3(m,p1,p2,p3) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define CHO_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define CHO_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_WARNING0(m) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m);}
-#define CHO_TRACE_WARNING1(m,p1) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1);}
-#define CHO_TRACE_WARNING2(m,p1,p2) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2);}
-#define CHO_TRACE_WARNING3(m,p1,p2,p3) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define CHO_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define CHO_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_API0(m) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_API, m);}
-#define CHO_TRACE_API1(m,p1) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1);}
-#define CHO_TRACE_API2(m,p1,p2) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2);}
-#define CHO_TRACE_API3(m,p1,p2,p3) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3);}
-#define CHO_TRACE_API4(m,p1,p2,p3,p4) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define CHO_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_EVENT0(m) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m);}
-#define CHO_TRACE_EVENT1(m,p1) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m, p1);}
-#define CHO_TRACE_EVENT2(m,p1,p2) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2);}
-#define CHO_TRACE_EVENT3(m,p1,p2,p3) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define CHO_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define CHO_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_DEBUG0(m) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m);}
-#define CHO_TRACE_DEBUG1(m,p1) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1);}
-#define CHO_TRACE_DEBUG2(m,p1,p2) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define CHO_TRACE_DEBUG3(m,p1,p2,p3) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define CHO_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define CHO_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA SNEP unit
-*/
-#define SNEP_TRACE_ERROR0(m) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m);}
-#define SNEP_TRACE_ERROR1(m,p1) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1);}
-#define SNEP_TRACE_ERROR2(m,p1,p2) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SNEP_TRACE_ERROR3(m,p1,p2,p3) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SNEP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_WARNING0(m) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m);}
-#define SNEP_TRACE_WARNING1(m,p1) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1);}
-#define SNEP_TRACE_WARNING2(m,p1,p2) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SNEP_TRACE_WARNING3(m,p1,p2,p3) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SNEP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_API0(m) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_API, m);}
-#define SNEP_TRACE_API1(m,p1) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1);}
-#define SNEP_TRACE_API2(m,p1,p2) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2);}
-#define SNEP_TRACE_API3(m,p1,p2,p3) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SNEP_TRACE_API4(m,p1,p2,p3,p4) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_EVENT0(m) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m);}
-#define SNEP_TRACE_EVENT1(m,p1) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m, p1);}
-#define SNEP_TRACE_EVENT2(m,p1,p2) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SNEP_TRACE_EVENT3(m,p1,p2,p3) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SNEP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_DEBUG0(m) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m);}
-#define SNEP_TRACE_DEBUG1(m,p1) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1);}
-#define SNEP_TRACE_DEBUG2(m,p1,p2) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SNEP_TRACE_DEBUG3(m,p1,p2,p3) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SNEP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define MMI_TRACE_0(m)
-#define MMI_TRACE_1(m,p1)
-#define MMI_TRACE_2(m,p1,p2)
-#define MMI_TRACE_3(m,p1,p2,p3)
-#define MMI_TRACE_4(m,p1,p2,p3,p4)
-#define MMI_TRACE_5(m,p1,p2,p3,p4,p5)
-#define MMI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#define MMI_DEBUG_0(m) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m)
-#define MMI_DEBUG_1(m,p1) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1)
-#define MMI_DEBUG_2(m,p1,p2) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2)
-#define MMI_DEBUG_3(m,p1,p2,p3) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3)
-#define MMI_DEBUG_4(m,p1,p2,p3,p4) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4)
-#define MMI_DEBUG_5(m,p1,p2,p3,p4,p5) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5)
-#define MMI_DEBUG_6(m,p1,p2,p3,p4,p5,p6) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6)
-
-#define MMI_WARNING_0(m) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m)
-#define MMI_WARNING_1(m,p1) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1)
-#define MMI_WARNING_2(m,p1,p2) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2)
-#define MMI_WARNING_3(m,p1,p2,p3) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3)
-#define MMI_WARNING_4(m,p1,p2,p3,p4) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4)
-#define MMI_WARNING_5(m,p1,p2,p3,p4,p5) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5)
-#define MMI_WARNING_6(m,p1,p2,p3,p4,p5,p6) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6)
-
-#define MMI_ERROR_0(m) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m)
-#define MMI_ERROR_1(m,p1) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1)
-#define MMI_ERROR_2(m,p1,p2) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2)
-#define MMI_ERROR_3(m,p1,p2,p3) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3)
-#define MMI_ERROR_4(m,p1,p2,p3,p4) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4)
-#define MMI_ERROR_5(m,p1,p2,p3,p4,p5) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5)
-#define MMI_ERROR_6(m,p1,p2,p3,p4,p5,p6) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6)
-
-#define TAK_TRACE_0(m) MMI_Echo(m)
-
-/* hid mouse module traces */
-
-#define MSKB_TRACE_0(m) MMI_Echo(m)
-#define MSKB_TRACE_1(m,p1) MMI_Echo(m,p1)
-#define MSKB_TRACE_2(m,p1,p2) MMI_Echo(m,p1,p2)
-#define MSKB_TRACE_3(m,p1,p2,p3) MMI_Echo(m,p1,p2,p3)
-#define MSKB_TRACE_4(m,p1,p2,p3,p4) MMI_Echo(m,p1,p2,p3,p4)
-#define MSKB_TRACE_5(m,p1,p2,p3,p4,p5) MMI_Echo(m,p1,p2,p3,p4,p5)
-#define MSKB_TRACE_6(m,p1,p2,p3,p4,p5,p6) MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_DEBUG_0(m) MMI_Echo(m)
-#define MSKB_DEBUG_1(m,p1) MMI_Echo(m,p1)
-#define MSKB_DEBUG_2(m,p1,p2) MMI_Echo(m,p1,p2)
-#define MSKB_DEBUG_3(m,p1,p2,p3) MMI_Echo(m,p1,p2,p3)
-#define MSKB_DEBUG_4(m,p1,p2,p3,p4) MMI_Echo(m,p1,p2,p3,p4)
-#define MSKB_DEBUG_5(m,p1,p2,p3,p4,p5) MMI_Echo(m,p1,p2,p3,p4,p5)
-#define MSKB_DEBUG_6(m,p1,p2,p3,p4,p5,p6) MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_ERROR_0(m) MMI_Echo(m)
-#define MSKB_ERROR_1(m,p1) MMI_Echo(m,p1)
-#define MSKB_ERROR_2(m,p1,p2) MMI_Echo(m,p1,p2)
-#define MSKB_ERROR_3(m,p1,p2,p3) MMI_Echo(m,p1,p2,p3)
-#define MSKB_ERROR_4(m,p1,p2,p3,p4) MMI_Echo(m,p1,p2,p3,p4)
-#define MSKB_ERROR_5(m,p1,p2,p3,p4,p5) MMI_Echo(m,p1,p2,p3,p4,p5)
-#define MSKB_ERROR_6(m,p1,p2,p3,p4,p5,p6) MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for DUN */
-
-#define DUN_TRACE_ERROR0(m) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m);}
-#define DUN_TRACE_ERROR1(m,p1) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m, p1);}
-#define DUN_TRACE_ERROR2(m,p1,p2) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2);}
-#define DUN_TRACE_ERROR3(m,p1,p2,p3) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define DUN_TRACE_ERROR4(m,p1,p2,p3,p4) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define DUN_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_WARNING0(m) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m);}
-#define DUN_TRACE_WARNING1(m,p1) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1);}
-#define DUN_TRACE_WARNING2(m,p1,p2) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2);}
-#define DUN_TRACE_WARNING3(m,p1,p2,p3) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define DUN_TRACE_WARNING4(m,p1,p2,p3,p4) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define DUN_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_API0(m) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_API, m);}
-#define DUN_TRACE_API1(m,p1) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_API, m, p1);}
-#define DUN_TRACE_API2(m,p1,p2) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2);}
-#define DUN_TRACE_API3(m,p1,p2,p3) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3);}
-#define DUN_TRACE_API4(m,p1,p2,p3,p4) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define DUN_TRACE_API5(m,p1,p2,p3,p4,p5) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_EVENT0(m) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m);}
-#define DUN_TRACE_EVENT1(m,p1) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m, p1);}
-#define DUN_TRACE_EVENT2(m,p1,p2) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2);}
-#define DUN_TRACE_EVENT3(m,p1,p2,p3) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define DUN_TRACE_EVENT4(m,p1,p2,p3,p4) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define DUN_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_DEBUG0(m) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m);}
-#define DUN_TRACE_DEBUG1(m,p1) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1);}
-#define DUN_TRACE_DEBUG2(m,p1,p2) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define DUN_TRACE_DEBUG3(m,p1,p2,p3) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define DUN_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define DUN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for hardcopy cable replacement profile */
-
-#define HCRP_TRACE_ERROR0(m) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m);}
-#define HCRP_TRACE_ERROR1(m,p1) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m, p1);}
-#define HCRP_TRACE_ERROR2(m,p1,p2) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HCRP_TRACE_ERROR3(m,p1,p2,p3) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HCRP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_WARNING0(m) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m);}
-#define HCRP_TRACE_WARNING1(m,p1) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1);}
-#define HCRP_TRACE_WARNING2(m,p1,p2) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HCRP_TRACE_WARNING3(m,p1,p2,p3) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HCRP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_API0(m) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_API, m);}
-#define HCRP_TRACE_API1(m,p1) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_API, m, p1);}
-#define HCRP_TRACE_API2(m,p1,p2) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2);}
-#define HCRP_TRACE_API3(m,p1,p2,p3) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HCRP_TRACE_API4(m,p1,p2,p3,p4) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_EVENT0(m) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m);}
-#define HCRP_TRACE_EVENT1(m,p1) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m, p1);}
-#define HCRP_TRACE_EVENT2(m,p1,p2) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HCRP_TRACE_EVENT3(m,p1,p2,p3) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HCRP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_DEBUG0(m) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m);}
-#define HCRP_TRACE_DEBUG1(m,p1) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1);}
-#define HCRP_TRACE_DEBUG2(m,p1,p2) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HCRP_TRACE_DEBUG3(m,p1,p2,p3) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HCRP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for multi-client server hardcopy cable replacement profile */
-
-#define HCRPM_TRACE_ERROR0(m) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m);}
-#define HCRPM_TRACE_ERROR1(m,p1) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m, p1);}
-#define HCRPM_TRACE_ERROR2(m,p1,p2) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HCRPM_TRACE_ERROR3(m,p1,p2,p3) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HCRPM_TRACE_ERROR4(m,p1,p2,p3,p4) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_WARNING0(m) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m);}
-#define HCRPM_TRACE_WARNING1(m,p1) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1);}
-#define HCRPM_TRACE_WARNING2(m,p1,p2) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HCRPM_TRACE_WARNING3(m,p1,p2,p3) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HCRPM_TRACE_WARNING4(m,p1,p2,p3,p4) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_API0(m) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_API, m);}
-#define HCRPM_TRACE_API1(m,p1) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_API, m, p1);}
-#define HCRPM_TRACE_API2(m,p1,p2) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2);}
-#define HCRPM_TRACE_API3(m,p1,p2,p3) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HCRPM_TRACE_API4(m,p1,p2,p3,p4) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_API5(m,p1,p2,p3,p4,p5) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_EVENT0(m) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m);}
-#define HCRPM_TRACE_EVENT1(m,p1) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m, p1);}
-#define HCRPM_TRACE_EVENT2(m,p1,p2) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HCRPM_TRACE_EVENT3(m,p1,p2,p3) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HCRPM_TRACE_EVENT4(m,p1,p2,p3,p4) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_DEBUG0(m) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m);}
-#define HCRPM_TRACE_DEBUG1(m,p1) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1);}
-#define HCRPM_TRACE_DEBUG2(m,p1,p2) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HCRPM_TRACE_DEBUG3(m,p1,p2,p3) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HCRPM_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for RPC */
-
-#define RPC_TRACE_ERROR0(m) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, (m));}
-#define RPC_TRACE_ERROR1(m,p1) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1));}
-#define RPC_TRACE_ERROR2(m,p1,p2) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_ERROR3(m,p1,p2,p3) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_ERROR4(m,p1,p2,p3,p4) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_WARNING0(m) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, (m));}
-#define RPC_TRACE_WARNING1(m,p1) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1));}
-#define RPC_TRACE_WARNING2(m,p1,p2) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_WARNING3(m,p1,p2,p3) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_WARNING4(m,p1,p2,p3,p4) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_API0(m) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, (m));}
-#define RPC_TRACE_API1(m,p1) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
- (m), (UINT32)(p1));}
-#define RPC_TRACE_API2(m,p1,p2) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_API3(m,p1,p2,p3) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_API4(m,p1,p2,p3,p4) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_API5(m,p1,p2,p3,p4,p5) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_EVENT0(m) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, (m));}
-#define RPC_TRACE_EVENT1(m,p1) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1));}
-#define RPC_TRACE_EVENT2(m,p1,p2) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_EVENT3(m,p1,p2,p3) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_EVENT4(m,p1,p2,p3,p4) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_DEBUG0(m) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, (m));}
-#define RPC_TRACE_DEBUG1(m,p1) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1));}
-#define RPC_TRACE_DEBUG2(m,p1,p2) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_DEBUG3(m,p1,p2,p3) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-/* define traces for BNEP */
-
-#define BNEP_TRACE_ERROR0(m) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m);}
-#define BNEP_TRACE_ERROR1(m,p1) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m, p1);}
-#define BNEP_TRACE_ERROR2(m,p1,p2) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BNEP_TRACE_ERROR3(m,p1,p2,p3) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BNEP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_WARNING0(m) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m);}
-#define BNEP_TRACE_WARNING1(m,p1) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1);}
-#define BNEP_TRACE_WARNING2(m,p1,p2) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BNEP_TRACE_WARNING3(m,p1,p2,p3) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BNEP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_API0(m) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_API, m);}
-#define BNEP_TRACE_API1(m,p1) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_API, m, p1);}
-#define BNEP_TRACE_API2(m,p1,p2) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2);}
-#define BNEP_TRACE_API3(m,p1,p2,p3) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BNEP_TRACE_API4(m,p1,p2,p3,p4) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_EVENT0(m) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m);}
-#define BNEP_TRACE_EVENT1(m,p1) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m, p1);}
-#define BNEP_TRACE_EVENT2(m,p1,p2) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BNEP_TRACE_EVENT3(m,p1,p2,p3) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BNEP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_DEBUG0(m) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m);}
-#define BNEP_TRACE_DEBUG1(m,p1) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1);}
-#define BNEP_TRACE_DEBUG2(m,p1,p2) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BNEP_TRACE_DEBUG3(m,p1,p2,p3) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BNEP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for PAN */
-
-#define PAN_TRACE_ERROR0(m) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m);}
-#define PAN_TRACE_ERROR1(m,p1) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m, p1);}
-#define PAN_TRACE_ERROR2(m,p1,p2) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2);}
-#define PAN_TRACE_ERROR3(m,p1,p2,p3) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define PAN_TRACE_ERROR4(m,p1,p2,p3,p4) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define PAN_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_WARNING0(m) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m);}
-#define PAN_TRACE_WARNING1(m,p1) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1);}
-#define PAN_TRACE_WARNING2(m,p1,p2) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2);}
-#define PAN_TRACE_WARNING3(m,p1,p2,p3) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define PAN_TRACE_WARNING4(m,p1,p2,p3,p4) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define PAN_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_API0(m) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_API, m);}
-#define PAN_TRACE_API1(m,p1) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_API, m, p1);}
-#define PAN_TRACE_API2(m,p1,p2) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2);}
-#define PAN_TRACE_API3(m,p1,p2,p3) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3);}
-#define PAN_TRACE_API4(m,p1,p2,p3,p4) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define PAN_TRACE_API5(m,p1,p2,p3,p4,p5) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_EVENT0(m) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m);}
-#define PAN_TRACE_EVENT1(m,p1) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m, p1);}
-#define PAN_TRACE_EVENT2(m,p1,p2) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2);}
-#define PAN_TRACE_EVENT3(m,p1,p2,p3) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define PAN_TRACE_EVENT4(m,p1,p2,p3,p4) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define PAN_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_DEBUG0(m) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m);}
-#define PAN_TRACE_DEBUG1(m,p1) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1);}
-#define PAN_TRACE_DEBUG2(m,p1,p2) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define PAN_TRACE_DEBUG3(m,p1,p2,p3) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define PAN_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define PAN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for SIM */
-
-#define SAP_TRACE_ERROR0(m) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m);}
-#define SAP_TRACE_ERROR1(m,p1) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m, p1);}
-#define SAP_TRACE_ERROR2(m,p1,p2) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SAP_TRACE_ERROR3(m,p1,p2,p3) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SAP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_WARNING0(m) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m);}
-#define SAP_TRACE_WARNING1(m,p1) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1);}
-#define SAP_TRACE_WARNING2(m,p1,p2) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SAP_TRACE_WARNING3(m,p1,p2,p3) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SAP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_API0(m) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_API, m);}
-#define SAP_TRACE_API1(m,p1) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_API, m, p1);}
-#define SAP_TRACE_API2(m,p1,p2) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2);}
-#define SAP_TRACE_API3(m,p1,p2,p3) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SAP_TRACE_API4(m,p1,p2,p3,p4) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SAP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_EVENT0(m) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m);}
-#define SAP_TRACE_EVENT1(m,p1) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m, p1);}
-#define SAP_TRACE_EVENT2(m,p1,p2) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SAP_TRACE_EVENT3(m,p1,p2,p3) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SAP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_DEBUG0(m) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m);}
-#define SAP_TRACE_DEBUG1(m,p1) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1);}
-#define SAP_TRACE_DEBUG2(m,p1,p2) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SAP_TRACE_DEBUG3(m,p1,p2,p3) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SAP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for OPP profile
-*/
-#define OPP_TRACE_ERROR0(m) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m);}
-#define OPP_TRACE_ERROR1(m,p1) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1);}
-#define OPP_TRACE_ERROR2(m,p1,p2) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define OPP_TRACE_ERROR3(m,p1,p2,p3) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define OPP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define OPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define OPP_TRACE_WARNING0(m) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m);}
-#define OPP_TRACE_WARNING1(m,p1) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1);}
-#define OPP_TRACE_WARNING2(m,p1,p2) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define OPP_TRACE_WARNING3(m,p1,p2,p3) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define OPP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define OPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define OPP_TRACE_EVENT0(m) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m);}
-#define OPP_TRACE_EVENT1(m,p1) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m, p1);}
-#define OPP_TRACE_EVENT2(m,p1,p2) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define OPP_TRACE_EVENT3(m,p1,p2,p3) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define OPP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define OPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define OPP_TRACE_DEBUG0(m) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m);}
-#define OPP_TRACE_DEBUG1(m,p1) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1);}
-#define OPP_TRACE_DEBUG2(m,p1,p2) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define OPP_TRACE_DEBUG3(m,p1,p2,p3) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define OPP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define OPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for FTP profile
-*/
-#define FTP_TRACE_ERROR0(m) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m);}
-#define FTP_TRACE_ERROR1(m,p1) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1);}
-#define FTP_TRACE_ERROR2(m,p1,p2) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define FTP_TRACE_ERROR3(m,p1,p2,p3) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define FTP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define FTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define FTP_TRACE_WARNING0(m) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m);}
-#define FTP_TRACE_WARNING1(m,p1) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1);}
-#define FTP_TRACE_WARNING2(m,p1,p2) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define FTP_TRACE_WARNING3(m,p1,p2,p3) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define FTP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define FTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define FTP_TRACE_EVENT0(m) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m);}
-#define FTP_TRACE_EVENT1(m,p1) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m, p1);}
-#define FTP_TRACE_EVENT2(m,p1,p2) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define FTP_TRACE_EVENT3(m,p1,p2,p3) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define FTP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define FTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define FTP_TRACE_DEBUG0(m) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m);}
-#define FTP_TRACE_DEBUG1(m,p1) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1);}
-#define FTP_TRACE_DEBUG2(m,p1,p2) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define FTP_TRACE_DEBUG3(m,p1,p2,p3) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define FTP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define FTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the A2DP profile
-*/
-#define A2D_TRACE_ERROR0(m) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m);}
-#define A2D_TRACE_ERROR1(m,p1) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1);}
-#define A2D_TRACE_ERROR2(m,p1,p2) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2);}
-#define A2D_TRACE_ERROR3(m,p1,p2,p3) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3);}
-#define A2D_TRACE_ERROR4(m,p1,p2,p3,p4) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3,p4);}
-#define A2D_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_WARNING0(m) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m);}
-#define A2D_TRACE_WARNING1(m,p1) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1);}
-#define A2D_TRACE_WARNING2(m,p1,p2) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2);}
-#define A2D_TRACE_WARNING3(m,p1,p2,p3) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3);}
-#define A2D_TRACE_WARNING4(m,p1,p2,p3,p4) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3,p4);}
-#define A2D_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_EVENT0(m) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m);}
-#define A2D_TRACE_EVENT1(m,p1) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m, p1);}
-#define A2D_TRACE_EVENT2(m,p1,p2) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2);}
-#define A2D_TRACE_EVENT3(m,p1,p2,p3) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3);}
-#define A2D_TRACE_EVENT4(m,p1,p2,p3,p4) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3,p4);}
-#define A2D_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_DEBUG0(m) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m);}
-#define A2D_TRACE_DEBUG1(m,p1) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1);}
-#define A2D_TRACE_DEBUG2(m,p1,p2) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2);}
-#define A2D_TRACE_DEBUG3(m,p1,p2,p3) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3);}
-#define A2D_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4);}
-#define A2D_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_API0(m) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_API,m);}
-#define A2D_TRACE_API1(m,p1) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_API,m, p1);}
-#define A2D_TRACE_API2(m,p1,p2) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2);}
-#define A2D_TRACE_API3(m,p1,p2,p3) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3);}
-#define A2D_TRACE_API4(m,p1,p2,p3,p4) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3,p4);}
-#define A2D_TRACE_API5(m,p1,p2,p3,p4,p5) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the VDP profile
-*/
-#define VDP_TRACE_ERROR0(m) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m);}
-#define VDP_TRACE_ERROR1(m,p1) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1);}
-#define VDP_TRACE_ERROR2(m,p1,p2) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2);}
-#define VDP_TRACE_ERROR3(m,p1,p2,p3) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3);}
-#define VDP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4);}
-#define VDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_WARNING0(m) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m);}
-#define VDP_TRACE_WARNING1(m,p1) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1);}
-#define VDP_TRACE_WARNING2(m,p1,p2) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2);}
-#define VDP_TRACE_WARNING3(m,p1,p2,p3) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3);}
-#define VDP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4);}
-#define VDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_EVENT0(m) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m);}
-#define VDP_TRACE_EVENT1(m,p1) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m, p1);}
-#define VDP_TRACE_EVENT2(m,p1,p2) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2);}
-#define VDP_TRACE_EVENT3(m,p1,p2,p3) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3);}
-#define VDP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4);}
-#define VDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_DEBUG0(m) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m);}
-#define VDP_TRACE_DEBUG1(m,p1) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1);}
-#define VDP_TRACE_DEBUG2(m,p1,p2) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2);}
-#define VDP_TRACE_DEBUG3(m,p1,p2,p3) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3);}
-#define VDP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4);}
-#define VDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_API0(m) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API,m);}
-#define VDP_TRACE_API1(m,p1) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API,m, p1);}
-#define VDP_TRACE_API2(m,p1,p2) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2);}
-#define VDP_TRACE_API3(m,p1,p2,p3) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3);}
-#define VDP_TRACE_API4(m,p1,p2,p3,p4) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4);}
-#define VDP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for the LM unit
-*/
-#define LMP_TRACE_ERROR0(m) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m);}
-#define LMP_TRACE_ERROR1(m,p1) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1);}
-#define LMP_TRACE_ERROR2(m,p1,p2) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2);}
-#define LMP_TRACE_ERROR3(m,p1,p2,p3) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define LMP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define LMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define LMP_TRACE_WARNING0(m) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m);}
-#define LMP_TRACE_WARNING1(m,p1) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1);}
-#define LMP_TRACE_WARNING2(m,p1,p2) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2);}
-#define LMP_TRACE_WARNING3(m,p1,p2,p3) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define LMP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define LMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define LMP_TRACE_EVENT0(m) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m);}
-#define LMP_TRACE_EVENT1(m,p1) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m, p1);}
-#define LMP_TRACE_EVENT2(m,p1,p2) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2);}
-#define LMP_TRACE_EVENT3(m,p1,p2,p3) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define LMP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define LMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define LMP_TRACE_DEBUG0(m) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m);}
-#define LMP_TRACE_DEBUG1(m,p1) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1);}
-#define LMP_TRACE_DEBUG2(m,p1,p2) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define LMP_TRACE_DEBUG3(m,p1,p2,p3) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define LMP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define LMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the LC unit
-*/
-#define LC_TRACE_ERROR0(m) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m);}
-#define LC_TRACE_ERROR1(m,p1) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1);}
-#define LC_TRACE_ERROR2(m,p1,p2) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2);}
-#define LC_TRACE_ERROR3(m,p1,p2,p3) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define LC_TRACE_ERROR4(m,p1,p2,p3,p4) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_4(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define LC_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define LC_TRACE_WARNING0(m) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m);}
-#define LC_TRACE_WARNING1(m,p1) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1);}
-#define LC_TRACE_WARNING2(m,p1,p2) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2);}
-#define LC_TRACE_WARNING3(m,p1,p2,p3) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define LC_TRACE_WARNING4(m,p1,p2,p3,p4) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_4(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define LC_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define LC_TRACE_EVENT0(m) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m);}
-#define LC_TRACE_EVENT1(m,p1) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m, p1);}
-#define LC_TRACE_EVENT2(m,p1,p2) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2);}
-#define LC_TRACE_EVENT3(m,p1,p2,p3) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define LC_TRACE_EVENT4(m,p1,p2,p3,p4) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_4(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define LC_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define LC_TRACE_DEBUG0(m) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m);}
-#define LC_TRACE_DEBUG1(m,p1) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1);}
-#define LC_TRACE_DEBUG2(m,p1,p2) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define LC_TRACE_DEBUG3(m,p1,p2,p3) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define LC_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the Serial Dongle Application SDA
-*/
-#define SDA_TRACE_ERROR0(m) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(m);}
-#define SDA_TRACE_ERROR1(m,p1) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(m,p1);}
-#define SDA_TRACE_ERROR2(m,p1,p2) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_ERROR3(m,p1,p2,p3) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_ERROR4(m,p1,p2,p3,p4) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-#define SDA_TRACE_WARNING0(m) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(m);}
-#define SDA_TRACE_WARNING1(m,p1) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(m,p1);}
-#define SDA_TRACE_WARNING2(m,p1,p2) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_WARNING3(m,p1,p2,p3) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_WARNING4(m,p1,p2,p3,p4) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-#define SDA_TRACE_EVENT0(m) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(m);}
-#define SDA_TRACE_EVENT1(m,p1) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(m, p1);}
-#define SDA_TRACE_EVENT2(m,p1,p2) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_EVENT3(m,p1,p2,p3) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_EVENT4(m,p1,p2,p3,p4) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-#define SDA_TRACE_DEBUG0(m) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(m);}
-#define SDA_TRACE_DEBUG1(m,p1) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(m,p1);}
-#define SDA_TRACE_DEBUG2(m,p1,p2) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_DEBUG3(m,p1,p2,p3) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-/* AVDTP
-*/
-#define AVDT_TRACE_ERROR0(m) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m);}
-#define AVDT_TRACE_ERROR1(m,p1) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1);}
-#define AVDT_TRACE_ERROR2(m,p1,p2) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define AVDT_TRACE_ERROR3(m,p1,p2,p3) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define AVDT_TRACE_ERROR4(m,p1,p2,p3,p4) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_WARNING0(m) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m);}
-#define AVDT_TRACE_WARNING1(m,p1) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1);}
-#define AVDT_TRACE_WARNING2(m,p1,p2) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define AVDT_TRACE_WARNING3(m,p1,p2,p3) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define AVDT_TRACE_WARNING4(m,p1,p2,p3,p4) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_EVENT0(m) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m);}
-#define AVDT_TRACE_EVENT1(m,p1) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m, p1);}
-#define AVDT_TRACE_EVENT2(m,p1,p2) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define AVDT_TRACE_EVENT3(m,p1,p2,p3) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define AVDT_TRACE_EVENT4(m,p1,p2,p3,p4) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_DEBUG0(m) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m);}
-#define AVDT_TRACE_DEBUG1(m,p1) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1);}
-#define AVDT_TRACE_DEBUG2(m,p1,p2) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define AVDT_TRACE_DEBUG3(m,p1,p2,p3) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define AVDT_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_API0(m) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API, m);}
-#define AVDT_TRACE_API1(m,p1) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1);}
-#define AVDT_TRACE_API2(m,p1,p2) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2);}
-#define AVDT_TRACE_API3(m,p1,p2,p3) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define AVDT_TRACE_API4(m,p1,p2,p3,p4) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_API5(m,p1,p2,p3,p4,p5) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the AVCTP protocol
-*/
-#define AVCT_TRACE_ERROR0(m) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m);}
-#define AVCT_TRACE_ERROR1(m,p1) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1);}
-#define AVCT_TRACE_ERROR2(m,p1,p2) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define AVCT_TRACE_ERROR3(m,p1,p2,p3) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define AVCT_TRACE_ERROR4(m,p1,p2,p3,p4) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_WARNING0(m) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m);}
-#define AVCT_TRACE_WARNING1(m,p1) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1);}
-#define AVCT_TRACE_WARNING2(m,p1,p2) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define AVCT_TRACE_WARNING3(m,p1,p2,p3) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define AVCT_TRACE_WARNING4(m,p1,p2,p3,p4) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_EVENT0(m) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m);}
-#define AVCT_TRACE_EVENT1(m,p1) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m, p1);}
-#define AVCT_TRACE_EVENT2(m,p1,p2) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define AVCT_TRACE_EVENT3(m,p1,p2,p3) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define AVCT_TRACE_EVENT4(m,p1,p2,p3,p4) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_DEBUG0(m) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m);}
-#define AVCT_TRACE_DEBUG1(m,p1) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1);}
-#define AVCT_TRACE_DEBUG2(m,p1,p2) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define AVCT_TRACE_DEBUG3(m,p1,p2,p3) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define AVCT_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_API0(m) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API, m);}
-#define AVCT_TRACE_API1(m,p1) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1);}
-#define AVCT_TRACE_API2(m,p1,p2) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2);}
-#define AVCT_TRACE_API3(m,p1,p2,p3) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define AVCT_TRACE_API4(m,p1,p2,p3,p4) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_API5(m,p1,p2,p3,p4,p5) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for the AVRCP profile
-*/
-#define AVRC_TRACE_ERROR0(m) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m);}
-#define AVRC_TRACE_ERROR1(m,p1) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1);}
-#define AVRC_TRACE_ERROR2(m,p1,p2) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2);}
-#define AVRC_TRACE_ERROR3(m,p1,p2,p3) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3);}
-#define AVRC_TRACE_ERROR4(m,p1,p2,p3,p4) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_WARNING0(m) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m);}
-#define AVRC_TRACE_WARNING1(m,p1) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1);}
-#define AVRC_TRACE_WARNING2(m,p1,p2) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2);}
-#define AVRC_TRACE_WARNING3(m,p1,p2,p3) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3);}
-#define AVRC_TRACE_WARNING4(m,p1,p2,p3,p4) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_EVENT0(m) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m);}
-#define AVRC_TRACE_EVENT1(m,p1) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m, p1);}
-#define AVRC_TRACE_EVENT2(m,p1,p2) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2);}
-#define AVRC_TRACE_EVENT3(m,p1,p2,p3) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3);}
-#define AVRC_TRACE_EVENT4(m,p1,p2,p3,p4) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_DEBUG0(m) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m);}
-#define AVRC_TRACE_DEBUG1(m,p1) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1);}
-#define AVRC_TRACE_DEBUG2(m,p1,p2) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2);}
-#define AVRC_TRACE_DEBUG3(m,p1,p2,p3) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3);}
-#define AVRC_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_API0(m) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API,m);}
-#define AVRC_TRACE_API1(m,p1) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API,m, p1);}
-#define AVRC_TRACE_API2(m,p1,p2) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2);}
-#define AVRC_TRACE_API3(m,p1,p2,p3) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3);}
-#define AVRC_TRACE_API4(m,p1,p2,p3,p4) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_API5(m,p1,p2,p3,p4,p5) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5,p6);}
-
-/* MCAP
-*/
-#define MCA_TRACE_ERROR0(m) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m);}
-#define MCA_TRACE_ERROR1(m,p1) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1);}
-#define MCA_TRACE_ERROR2(m,p1,p2) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2);}
-#define MCA_TRACE_ERROR3(m,p1,p2,p3) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define MCA_TRACE_ERROR4(m,p1,p2,p3,p4) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define MCA_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_WARNING0(m) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m);}
-#define MCA_TRACE_WARNING1(m,p1) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1);}
-#define MCA_TRACE_WARNING2(m,p1,p2) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2);}
-#define MCA_TRACE_WARNING3(m,p1,p2,p3) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define MCA_TRACE_WARNING4(m,p1,p2,p3,p4) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define MCA_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_EVENT0(m) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m);}
-#define MCA_TRACE_EVENT1(m,p1) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m, p1);}
-#define MCA_TRACE_EVENT2(m,p1,p2) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2);}
-#define MCA_TRACE_EVENT3(m,p1,p2,p3) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define MCA_TRACE_EVENT4(m,p1,p2,p3,p4) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define MCA_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_DEBUG0(m) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m);}
-#define MCA_TRACE_DEBUG1(m,p1) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1);}
-#define MCA_TRACE_DEBUG2(m,p1,p2) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define MCA_TRACE_DEBUG3(m,p1,p2,p3) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define MCA_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define MCA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_API0(m) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_API, m);}
-#define MCA_TRACE_API1(m,p1) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1);}
-#define MCA_TRACE_API2(m,p1,p2) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2);}
-#define MCA_TRACE_API3(m,p1,p2,p3) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3);}
-#define MCA_TRACE_API4(m,p1,p2,p3,p4) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define MCA_TRACE_API5(m,p1,p2,p3,p4,p5) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the AMP unit
-*/
-#define AMP_TRACE_ERROR0(m) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m);}
-#define AMP_TRACE_ERROR1(m,p1) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1);}
-#define AMP_TRACE_ERROR2(m,p1,p2) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define AMP_TRACE_ERROR3(m,p1,p2,p3) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define AMP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define AMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_WARNING0(m) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m);}
-#define AMP_TRACE_WARNING1(m,p1) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1);}
-#define AMP_TRACE_WARNING2(m,p1,p2) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define AMP_TRACE_WARNING3(m,p1,p2,p3) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define AMP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define AMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_API0(m) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_API, m);}
-#define AMP_TRACE_API1(m,p1) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1);}
-#define AMP_TRACE_API2(m,p1,p2) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2);}
-#define AMP_TRACE_API3(m,p1,p2,p3) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define AMP_TRACE_API4(m,p1,p2,p3,p4) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define AMP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_EVENT0(m) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m);}
-#define AMP_TRACE_EVENT1(m,p1) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m, p1);}
-#define AMP_TRACE_EVENT2(m,p1,p2) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define AMP_TRACE_EVENT3(m,p1,p2,p3) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define AMP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define AMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_DEBUG0(m) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m);}
-#define AMP_TRACE_DEBUG1(m,p1) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1);}
-#define AMP_TRACE_DEBUG2(m,p1,p2) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define AMP_TRACE_DEBUG3(m,p1,p2,p3) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define AMP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define AMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the ATT/GATT unit
-*/
-#define GATT_TRACE_ERROR0(m) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m);}
-#define GATT_TRACE_ERROR1(m,p1) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1);}
-#define GATT_TRACE_ERROR2(m,p1,p2) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2);}
-#define GATT_TRACE_ERROR3(m,p1,p2,p3) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define GATT_TRACE_ERROR4(m,p1,p2,p3,p4) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define GATT_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_WARNING0(m) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m);}
-#define GATT_TRACE_WARNING1(m,p1) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1);}
-#define GATT_TRACE_WARNING2(m,p1,p2) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2);}
-#define GATT_TRACE_WARNING3(m,p1,p2,p3) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define GATT_TRACE_WARNING4(m,p1,p2,p3,p4) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define GATT_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_API0(m) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_API, m);}
-#define GATT_TRACE_API1(m,p1) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1);}
-#define GATT_TRACE_API2(m,p1,p2) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2);}
-#define GATT_TRACE_API3(m,p1,p2,p3) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3);}
-#define GATT_TRACE_API4(m,p1,p2,p3,p4) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define GATT_TRACE_API5(m,p1,p2,p3,p4,p5) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_EVENT0(m) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m);}
-#define GATT_TRACE_EVENT1(m,p1) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m, p1);}
-#define GATT_TRACE_EVENT2(m,p1,p2) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2);}
-#define GATT_TRACE_EVENT3(m,p1,p2,p3) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define GATT_TRACE_EVENT4(m,p1,p2,p3,p4) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define GATT_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_DEBUG0(m) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m);}
-#define GATT_TRACE_DEBUG1(m,p1) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1);}
-#define GATT_TRACE_DEBUG2(m,p1,p2) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define GATT_TRACE_DEBUG3(m,p1,p2,p3) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define GATT_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define GATT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the SMP unit
-*/
-#define SMP_TRACE_ERROR0(m) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m);}
-#define SMP_TRACE_ERROR1(m,p1) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1);}
-#define SMP_TRACE_ERROR2(m,p1,p2) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SMP_TRACE_ERROR3(m,p1,p2,p3) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SMP_TRACE_ERROR4(m,p1,p2,p3,p4) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_WARNING0(m) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m);}
-#define SMP_TRACE_WARNING1(m,p1) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1);}
-#define SMP_TRACE_WARNING2(m,p1,p2) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SMP_TRACE_WARNING3(m,p1,p2,p3) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SMP_TRACE_WARNING4(m,p1,p2,p3,p4) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_API0(m) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_API, m);}
-#define SMP_TRACE_API1(m,p1) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1);}
-#define SMP_TRACE_API2(m,p1,p2) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2);}
-#define SMP_TRACE_API3(m,p1,p2,p3) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SMP_TRACE_API4(m,p1,p2,p3,p4) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SMP_TRACE_API5(m,p1,p2,p3,p4,p5) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_EVENT0(m) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m);}
-#define SMP_TRACE_EVENT1(m,p1) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m, p1);}
-#define SMP_TRACE_EVENT2(m,p1,p2) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SMP_TRACE_EVENT3(m,p1,p2,p3) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SMP_TRACE_EVENT4(m,p1,p2,p3,p4) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_DEBUG0(m) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m);}
-#define SMP_TRACE_DEBUG1(m,p1) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1);}
-#define SMP_TRACE_DEBUG2(m,p1,p2) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SMP_TRACE_DEBUG3(m,p1,p2,p3) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SMP_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* END OF USE TRACES */
-#else
-
-#define BT_TRACE_0(l,t,m)
-#define BT_TRACE_1(l,t,m,p1)
-#define BT_TRACE_2(l,t,m,p1,p2)
-#define BT_TRACE_3(l,t,m,p1,p2,p3)
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4)
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5)
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)
-
-#define BT_ERROR_TRACE_0(l,m)
-#define BT_ERROR_TRACE_1(l,m,p1)
-#define BT_ERROR_TRACE_2(l,m,p1,p2)
-#define BT_ERROR_TRACE_3(l,m,p1,p2,p3)
-
-/* Define tracing for the HCI unit
-*/
-#define HCI_TRACE_ERROR0(m)
-#define HCI_TRACE_ERROR1(m,p1)
-#define HCI_TRACE_ERROR2(m,p1,p2)
-#define HCI_TRACE_ERROR3(m,p1,p2,p3)
-#define HCI_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCI_TRACE_WARNING0(m)
-#define HCI_TRACE_WARNING1(m,p1)
-#define HCI_TRACE_WARNING2(m,p1,p2)
-#define HCI_TRACE_WARNING3(m,p1,p2,p3)
-#define HCI_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCI_TRACE_EVENT0(m)
-#define HCI_TRACE_EVENT1(m,p1)
-#define HCI_TRACE_EVENT2(m,p1,p2)
-#define HCI_TRACE_EVENT3(m,p1,p2,p3)
-#define HCI_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCI_TRACE_DEBUG0(m)
-#define HCI_TRACE_DEBUG1(m,p1)
-#define HCI_TRACE_DEBUG2(m,p1,p2)
-#define HCI_TRACE_DEBUG3(m,p1,p2,p3)
-#define HCI_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for BTM
-*/
-#define BTM_TRACE_ERROR0(m)
-#define BTM_TRACE_ERROR1(m,p1)
-#define BTM_TRACE_ERROR2(m,p1,p2)
-#define BTM_TRACE_ERROR3(m,p1,p2,p3)
-#define BTM_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BTM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_WARNING0(m)
-#define BTM_TRACE_WARNING1(m,p1)
-#define BTM_TRACE_WARNING2(m,p1,p2)
-#define BTM_TRACE_WARNING3(m,p1,p2,p3)
-#define BTM_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BTM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_API0(m)
-#define BTM_TRACE_API1(m,p1)
-#define BTM_TRACE_API2(m,p1,p2)
-#define BTM_TRACE_API3(m,p1,p2,p3)
-#define BTM_TRACE_API4(m,p1,p2,p3,p4)
-#define BTM_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_EVENT0(m)
-#define BTM_TRACE_EVENT1(m,p1)
-#define BTM_TRACE_EVENT2(m,p1,p2)
-#define BTM_TRACE_EVENT3(m,p1,p2,p3)
-#define BTM_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BTM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_DEBUG0(m)
-#define BTM_TRACE_DEBUG1(m,p1)
-#define BTM_TRACE_DEBUG2(m,p1,p2)
-#define BTM_TRACE_DEBUG3(m,p1,p2,p3)
-#define BTM_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BTM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the L2CAP unit
-*/
-#define L2CAP_TRACE_ERROR0(m)
-#define L2CAP_TRACE_ERROR1(m,p1)
-#define L2CAP_TRACE_ERROR2(m,p1,p2)
-#define L2CAP_TRACE_ERROR3(m,p1,p2,p3)
-#define L2CAP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_WARNING0(m)
-#define L2CAP_TRACE_WARNING1(m,p1)
-#define L2CAP_TRACE_WARNING2(m,p1,p2)
-#define L2CAP_TRACE_WARNING3(m,p1,p2,p3)
-#define L2CAP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_API0(m)
-#define L2CAP_TRACE_API1(m,p1)
-#define L2CAP_TRACE_API2(m,p1,p2)
-#define L2CAP_TRACE_API3(m,p1,p2,p3)
-#define L2CAP_TRACE_API4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_EVENT0(m)
-#define L2CAP_TRACE_EVENT1(m,p1)
-#define L2CAP_TRACE_EVENT2(m,p1,p2)
-#define L2CAP_TRACE_EVENT3(m,p1,p2,p3)
-#define L2CAP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_DEBUG0(m)
-#define L2CAP_TRACE_DEBUG1(m,p1)
-#define L2CAP_TRACE_DEBUG2(m,p1,p2)
-#define L2CAP_TRACE_DEBUG3(m,p1,p2,p3)
-#define L2CAP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the LLCP unit
-*/
-#define LLCP_TRACE_ERROR0(m)
-#define LLCP_TRACE_ERROR1(m,p1)
-#define LLCP_TRACE_ERROR2(m,p1,p2)
-#define LLCP_TRACE_ERROR3(m,p1,p2,p3)
-#define LLCP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_WARNING0(m)
-#define LLCP_TRACE_WARNING1(m,p1)
-#define LLCP_TRACE_WARNING2(m,p1,p2)
-#define LLCP_TRACE_WARNING3(m,p1,p2,p3)
-#define LLCP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_API0(m)
-#define LLCP_TRACE_API1(m,p1)
-#define LLCP_TRACE_API2(m,p1,p2)
-#define LLCP_TRACE_API3(m,p1,p2,p3)
-#define LLCP_TRACE_API4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_EVENT0(m)
-#define LLCP_TRACE_EVENT1(m,p1)
-#define LLCP_TRACE_EVENT2(m,p1,p2)
-#define LLCP_TRACE_EVENT3(m,p1,p2,p3)
-#define LLCP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_DEBUG0(m)
-#define LLCP_TRACE_DEBUG1(m,p1)
-#define LLCP_TRACE_DEBUG2(m,p1,p2)
-#define LLCP_TRACE_DEBUG3(m,p1,p2,p3)
-#define LLCP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the SDP unit
-*/
-#define SDP_TRACE_ERROR0(m)
-#define SDP_TRACE_ERROR1(m,p1)
-#define SDP_TRACE_ERROR2(m,p1,p2)
-#define SDP_TRACE_ERROR3(m,p1,p2,p3)
-#define SDP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_WARNING0(m)
-#define SDP_TRACE_WARNING1(m,p1)
-#define SDP_TRACE_WARNING2(m,p1,p2)
-#define SDP_TRACE_WARNING3(m,p1,p2,p3)
-#define SDP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_API0(m)
-#define SDP_TRACE_API1(m,p1)
-#define SDP_TRACE_API2(m,p1,p2)
-#define SDP_TRACE_API3(m,p1,p2,p3)
-#define SDP_TRACE_API4(m,p1,p2,p3,p4)
-#define SDP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_EVENT0(m)
-#define SDP_TRACE_EVENT1(m,p1)
-#define SDP_TRACE_EVENT2(m,p1,p2)
-#define SDP_TRACE_EVENT3(m,p1,p2,p3)
-#define SDP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_DEBUG0(m)
-#define SDP_TRACE_DEBUG1(m,p1)
-#define SDP_TRACE_DEBUG2(m,p1,p2)
-#define SDP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SDP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the RFCOMM unit
-*/
-#define RFCOMM_TRACE_ERROR0(m)
-#define RFCOMM_TRACE_ERROR1(m,p1)
-#define RFCOMM_TRACE_ERROR2(m,p1,p2)
-#define RFCOMM_TRACE_ERROR3(m,p1,p2,p3)
-#define RFCOMM_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_WARNING0(m)
-#define RFCOMM_TRACE_WARNING1(m,p1)
-#define RFCOMM_TRACE_WARNING2(m,p1,p2)
-#define RFCOMM_TRACE_WARNING3(m,p1,p2,p3)
-#define RFCOMM_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_API0(m)
-#define RFCOMM_TRACE_API1(m,p1)
-#define RFCOMM_TRACE_API2(m,p1,p2)
-#define RFCOMM_TRACE_API3(m,p1,p2,p3)
-#define RFCOMM_TRACE_API4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_EVENT0(m)
-#define RFCOMM_TRACE_EVENT1(m,p1)
-#define RFCOMM_TRACE_EVENT2(m,p1,p2)
-#define RFCOMM_TRACE_EVENT3(m,p1,p2,p3)
-#define RFCOMM_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_DEBUG0(m)
-#define RFCOMM_TRACE_DEBUG1(m,p1)
-#define RFCOMM_TRACE_DEBUG2(m,p1,p2)
-#define RFCOMM_TRACE_DEBUG3(m,p1,p2,p3)
-#define RFCOMM_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for Serial Port Profile
-*/
-#define SPP_TRACE_ERROR0(m)
-#define SPP_TRACE_ERROR1(m,p1)
-#define SPP_TRACE_ERROR2(m,p1,p2)
-#define SPP_TRACE_ERROR3(m,p1,p2,p3)
-#define SPP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_WARNING0(m)
-#define SPP_TRACE_WARNING1(m,p1)
-#define SPP_TRACE_WARNING2(m,p1,p2)
-#define SPP_TRACE_WARNING3(m,p1,p2,p3)
-#define SPP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_EVENT0(m)
-#define SPP_TRACE_EVENT1(m,p1)
-#define SPP_TRACE_EVENT2(m,p1,p2)
-#define SPP_TRACE_EVENT3(m,p1,p2,p3)
-#define SPP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_API0(m)
-#define SPP_TRACE_API1(m,p1)
-#define SPP_TRACE_API2(m,p1,p2)
-#define SPP_TRACE_API3(m,p1,p2,p3)
-#define SPP_TRACE_API4(m,p1,p2,p3,p4)
-#define SPP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_DEBUG0(m)
-#define SPP_TRACE_DEBUG1(m,p1)
-#define SPP_TRACE_DEBUG2(m,p1,p2)
-#define SPP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SPP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Generic Access Profile traces */
-#define GAP_TRACE_ERROR0(m)
-#define GAP_TRACE_ERROR1(m,p1)
-#define GAP_TRACE_ERROR2(m,p1,p2)
-#define GAP_TRACE_ERROR3(m,p1,p2,p3)
-#define GAP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define GAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define GAP_TRACE_EVENT0(m)
-#define GAP_TRACE_EVENT1(m,p1)
-#define GAP_TRACE_EVENT2(m,p1,p2)
-#define GAP_TRACE_EVENT3(m,p1,p2,p3)
-#define GAP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define GAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define GAP_TRACE_API0(m)
-#define GAP_TRACE_API1(m,p1)
-#define GAP_TRACE_API2(m,p1,p2)
-#define GAP_TRACE_API3(m,p1,p2,p3)
-#define GAP_TRACE_API4(m,p1,p2,p3,p4)
-#define GAP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define GAP_TRACE_WARNING0(m)
-#define GAP_TRACE_WARNING1(m,p1)
-#define GAP_TRACE_WARNING2(m,p1,p2)
-#define GAP_TRACE_WARNING3(m,p1,p2,p3)
-#define GAP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define GAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for OBX
-*/
-#define OBX_TRACE_ERROR0(m)
-#define OBX_TRACE_ERROR1(m,p1)
-#define OBX_TRACE_ERROR2(m,p1,p2)
-#define OBX_TRACE_ERROR3(m,p1,p2,p3)
-#define OBX_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define OBX_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_WARNING0(m)
-#define OBX_TRACE_WARNING1(m,p1)
-#define OBX_TRACE_WARNING2(m,p1,p2)
-#define OBX_TRACE_WARNING3(m,p1,p2,p3)
-#define OBX_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define OBX_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_EVENT0(m)
-#define OBX_TRACE_EVENT1(m,p1)
-#define OBX_TRACE_EVENT2(m,p1,p2)
-#define OBX_TRACE_EVENT3(m,p1,p2,p3)
-#define OBX_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define OBX_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_DEBUG0(m)
-#define OBX_TRACE_DEBUG1(m,p1)
-#define OBX_TRACE_DEBUG2(m,p1,p2)
-#define OBX_TRACE_DEBUG3(m,p1,p2,p3)
-#define OBX_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define OBX_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_API0(m)
-#define OBX_TRACE_API1(m,p1)
-#define OBX_TRACE_API2(m,p1,p2)
-#define OBX_TRACE_API3(m,p1,p2,p3)
-#define OBX_TRACE_API4(m,p1,p2,p3,p4)
-#define OBX_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for GOEP application profiles
-*/
-#define GOEP_TRACE_ERROR0(m)
-#define GOEP_TRACE_ERROR1(m,p1)
-#define GOEP_TRACE_ERROR2(m,p1,p2)
-#define GOEP_TRACE_ERROR3(m,p1,p2,p3)
-#define GOEP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_WARNING0(m)
-#define GOEP_TRACE_WARNING1(m,p1)
-#define GOEP_TRACE_WARNING2(m,p1,p2)
-#define GOEP_TRACE_WARNING3(m,p1,p2,p3)
-#define GOEP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_EVENT0(m)
-#define GOEP_TRACE_EVENT1(m,p1)
-#define GOEP_TRACE_EVENT2(m,p1,p2)
-#define GOEP_TRACE_EVENT3(m,p1,p2,p3)
-#define GOEP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_DEBUG0(m)
-#define GOEP_TRACE_DEBUG1(m,p1)
-#define GOEP_TRACE_DEBUG2(m,p1,p2)
-#define GOEP_TRACE_DEBUG3(m,p1,p2,p3)
-#define GOEP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_API0(m)
-#define GOEP_TRACE_API1(m,p1)
-#define GOEP_TRACE_API2(m,p1,p2)
-#define GOEP_TRACE_API3(m,p1,p2,p3)
-#define GOEP_TRACE_API4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the BPP profile
-*/
-#define BPP_TRACE_ERROR0(m)
-#define BPP_TRACE_ERROR1(m,p1)
-#define BPP_TRACE_ERROR2(m,p1,p2)
-#define BPP_TRACE_ERROR3(m,p1,p2,p3)
-#define BPP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_WARNING0(m)
-#define BPP_TRACE_WARNING1(m,p1)
-#define BPP_TRACE_WARNING2(m,p1,p2)
-#define BPP_TRACE_WARNING3(m,p1,p2,p3)
-#define BPP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_EVENT0(m)
-#define BPP_TRACE_EVENT1(m,p1)
-#define BPP_TRACE_EVENT2(m,p1,p2)
-#define BPP_TRACE_EVENT3(m,p1,p2,p3)
-#define BPP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_DEBUG0(m)
-#define BPP_TRACE_DEBUG1(m,p1)
-#define BPP_TRACE_DEBUG2(m,p1,p2)
-#define BPP_TRACE_DEBUG3(m,p1,p2,p3)
-#define BPP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_API0(m)
-#define BPP_TRACE_API1(m,p1)
-#define BPP_TRACE_API2(m,p1,p2)
-#define BPP_TRACE_API3(m,p1,p2,p3)
-#define BPP_TRACE_API4(m,p1,p2,p3,p4)
-#define BPP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the BIP profile
-*/
-#define BIP_TRACE_ERROR0(m)
-#define BIP_TRACE_ERROR1(m,p1)
-#define BIP_TRACE_ERROR2(m,p1,p2)
-#define BIP_TRACE_ERROR3(m,p1,p2,p3)
-#define BIP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BIP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_WARNING0(m)
-#define BIP_TRACE_WARNING1(m,p1)
-#define BIP_TRACE_WARNING2(m,p1,p2)
-#define BIP_TRACE_WARNING3(m,p1,p2,p3)
-#define BIP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BIP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_EVENT0(m)
-#define BIP_TRACE_EVENT1(m,p1)
-#define BIP_TRACE_EVENT2(m,p1,p2)
-#define BIP_TRACE_EVENT3(m,p1,p2,p3)
-#define BIP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BIP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_DEBUG0(m)
-#define BIP_TRACE_DEBUG1(m,p1)
-#define BIP_TRACE_DEBUG2(m,p1,p2)
-#define BIP_TRACE_DEBUG3(m,p1,p2,p3)
-#define BIP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BIP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_API0(m)
-#define BIP_TRACE_API1(m,p1)
-#define BIP_TRACE_API2(m,p1,p2)
-#define BIP_TRACE_API3(m,p1,p2,p3)
-#define BIP_TRACE_API4(m,p1,p2,p3,p4)
-#define BIP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for TCS
-*/
-#define TCS_TRACE_ERROR0(m)
-#define TCS_TRACE_ERROR1(m,p1)
-#define TCS_TRACE_ERROR2(m,p1,p2)
-#define TCS_TRACE_ERROR3(m,p1,p2,p3)
-#define TCS_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define TCS_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_WARNING0(m)
-#define TCS_TRACE_WARNING1(m,p1)
-#define TCS_TRACE_WARNING2(m,p1,p2)
-#define TCS_TRACE_WARNING3(m,p1,p2,p3)
-#define TCS_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define TCS_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_EVENT0(m)
-#define TCS_TRACE_EVENT1(m,p1)
-#define TCS_TRACE_EVENT2(m,p1,p2)
-#define TCS_TRACE_EVENT3(m,p1,p2,p3)
-#define TCS_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define TCS_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_DEBUG0(m)
-#define TCS_TRACE_DEBUG1(m,p1)
-#define TCS_TRACE_DEBUG2(m,p1,p2)
-#define TCS_TRACE_DEBUG3(m,p1,p2,p3)
-#define TCS_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define TCS_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_API0(m)
-#define TCS_TRACE_API1(m,p1)
-#define TCS_TRACE_API2(m,p1,p2)
-#define TCS_TRACE_API3(m,p1,p2,p3)
-#define TCS_TRACE_API4(m,p1,p2,p3,p4)
-#define TCS_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for ICP
-*/
-#define ICP_TRACE_ERROR0(m)
-#define ICP_TRACE_ERROR1(m,p1)
-#define ICP_TRACE_ERROR2(m,p1,p2)
-#define ICP_TRACE_ERROR3(m,p1,p2,p3)
-#define ICP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define ICP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_WARNING0(m)
-#define ICP_TRACE_WARNING1(m,p1)
-#define ICP_TRACE_WARNING2(m,p1,p2)
-#define ICP_TRACE_WARNING3(m,p1,p2,p3)
-#define ICP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define ICP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_EVENT0(m)
-#define ICP_TRACE_EVENT1(m,p1)
-#define ICP_TRACE_EVENT2(m,p1,p2)
-#define ICP_TRACE_EVENT3(m,p1,p2,p3)
-#define ICP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define ICP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_DEBUG0(m)
-#define ICP_TRACE_DEBUG1(m,p1)
-#define ICP_TRACE_DEBUG2(m,p1,p2)
-#define ICP_TRACE_DEBUG3(m,p1,p2,p3)
-#define ICP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define ICP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_API0(m)
-#define ICP_TRACE_API1(m,p1)
-#define ICP_TRACE_API2(m,p1,p2)
-#define ICP_TRACE_API3(m,p1,p2,p3)
-#define ICP_TRACE_API4(m,p1,p2,p3,p4)
-#define ICP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for CTP
-*/
-#define CTP_TRACE_ERROR0(m)
-#define CTP_TRACE_ERROR1(m,p1)
-#define CTP_TRACE_ERROR2(m,p1,p2)
-#define CTP_TRACE_ERROR3(m,p1,p2,p3)
-#define CTP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define CTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_WARNING0(m)
-#define CTP_TRACE_WARNING1(m,p1)
-#define CTP_TRACE_WARNING2(m,p1,p2)
-#define CTP_TRACE_WARNING3(m,p1,p2,p3)
-#define CTP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define CTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_EVENT0(m)
-#define CTP_TRACE_EVENT1(m,p1)
-#define CTP_TRACE_EVENT2(m,p1,p2)
-#define CTP_TRACE_EVENT3(m,p1,p2,p3)
-#define CTP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define CTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_DEBUG0(m)
-#define CTP_TRACE_DEBUG1(m,p1)
-#define CTP_TRACE_DEBUG2(m,p1,p2)
-#define CTP_TRACE_DEBUG3(m,p1,p2,p3)
-#define CTP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define CTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_API0(m)
-#define CTP_TRACE_API1(m,p1)
-#define CTP_TRACE_API2(m,p1,p2)
-#define CTP_TRACE_API3(m,p1,p2,p3)
-#define CTP_TRACE_API4(m,p1,p2,p3,p4)
-#define CTP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for headset profile */
-
-#define HSP2_TRACE_ERROR0(pcb,m)
-#define HSP2_TRACE_ERROR1(pcb,m,p1)
-#define HSP2_TRACE_ERROR2(pcb,m,p1,p2)
-#define HSP2_TRACE_ERROR3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_ERROR4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_ERROR5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_ERROR6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_WARNING0(pcb,m)
-#define HSP2_TRACE_WARNING1(pcb,m,p1)
-#define HSP2_TRACE_WARNING2(pcb,m,p1,p2)
-#define HSP2_TRACE_WARNING3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_WARNING4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_WARNING5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_WARNING6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_API0(pcb,m)
-#define HSP2_TRACE_API1(pcb,m,p1)
-#define HSP2_TRACE_API2(pcb,m,p1,p2)
-#define HSP2_TRACE_API3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_API4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_API5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_API6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_EVENT0(pcb,m)
-#define HSP2_TRACE_EVENT1(pcb,m,p1)
-#define HSP2_TRACE_EVENT2(pcb,m,p1,p2)
-#define HSP2_TRACE_EVENT3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_EVENT4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_EVENT5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_EVENT6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_DEBUG0(pcb,m)
-#define HSP2_TRACE_DEBUG1(pcb,m,p1)
-#define HSP2_TRACE_DEBUG2(pcb,m,p1,p2)
-#define HSP2_TRACE_DEBUG3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_DEBUG4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_DEBUG5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_DEBUG6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFC unit
-*/
-#define NFC_TRACE_ERROR0(m)
-#define NFC_TRACE_ERROR1(m,p1)
-#define NFC_TRACE_ERROR2(m,p1,p2)
-#define NFC_TRACE_ERROR3(m,p1,p2,p3)
-#define NFC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NFC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_WARNING0(m)
-#define NFC_TRACE_WARNING1(m,p1)
-#define NFC_TRACE_WARNING2(m,p1,p2)
-#define NFC_TRACE_WARNING3(m,p1,p2,p3)
-#define NFC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NFC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_API0(m)
-#define NFC_TRACE_API1(m,p1)
-#define NFC_TRACE_API2(m,p1,p2)
-#define NFC_TRACE_API3(m,p1,p2,p3)
-#define NFC_TRACE_API4(m,p1,p2,p3,p4)
-#define NFC_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_EVENT0(m)
-#define NFC_TRACE_EVENT1(m,p1)
-#define NFC_TRACE_EVENT2(m,p1,p2)
-#define NFC_TRACE_EVENT3(m,p1,p2,p3)
-#define NFC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NFC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_DEBUG0(m)
-#define NFC_TRACE_DEBUG1(m,p1)
-#define NFC_TRACE_DEBUG2(m,p1,p2)
-#define NFC_TRACE_DEBUG3(m,p1,p2,p3)
-#define NFC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NFC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_ERROR0(m)
-#define NCI_TRACE_ERROR1(m,p1)
-#define NCI_TRACE_ERROR2(m,p1,p2)
-#define NCI_TRACE_ERROR3(m,p1,p2,p3)
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_WARNING0(m)
-#define NCI_TRACE_WARNING1(m,p1)
-#define NCI_TRACE_WARNING2(m,p1,p2)
-#define NCI_TRACE_WARNING3(m,p1,p2,p3)
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_API0(m)
-#define NCI_TRACE_API1(m,p1)
-#define NCI_TRACE_API2(m,p1,p2)
-#define NCI_TRACE_API3(m,p1,p2,p3)
-#define NCI_TRACE_API4(m,p1,p2,p3,p4)
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_EVENT0(m)
-#define NCI_TRACE_EVENT1(m,p1)
-#define NCI_TRACE_EVENT2(m,p1,p2)
-#define NCI_TRACE_EVENT3(m,p1,p2,p3)
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_DEBUG0(m)
-#define NCI_TRACE_DEBUG1(m,p1)
-#define NCI_TRACE_DEBUG2(m,p1,p2)
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3)
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_ERROR0(m)
-#define RW_TRACE_ERROR1(m,p1)
-#define RW_TRACE_ERROR2(m,p1,p2)
-#define RW_TRACE_ERROR3(m,p1,p2,p3)
-#define RW_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define RW_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_WARNING0(m)
-#define RW_TRACE_WARNING1(m,p1)
-#define RW_TRACE_WARNING2(m,p1,p2)
-#define RW_TRACE_WARNING3(m,p1,p2,p3)
-#define RW_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define RW_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) }
-
-#define RW_TRACE_API0(m)
-#define RW_TRACE_API1(m,p1)
-#define RW_TRACE_API2(m,p1,p2)
-#define RW_TRACE_API3(m,p1,p2,p3)
-#define RW_TRACE_API4(m,p1,p2,p3,p4)
-#define RW_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_EVENT0(m)
-#define RW_TRACE_EVENT1(m,p1)
-#define RW_TRACE_EVENT2(m,p1,p2)
-#define RW_TRACE_EVENT3(m,p1,p2,p3)
-#define RW_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define RW_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_DEBUG0(m)
-#define RW_TRACE_DEBUG1(m,p1)
-#define RW_TRACE_DEBUG2(m,p1,p2)
-#define RW_TRACE_DEBUG3(m,p1,p2,p3)
-#define RW_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define RW_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_ERROR0(m)
-#define CE_TRACE_ERROR1(m,p1)
-#define CE_TRACE_ERROR2(m,p1,p2)
-#define CE_TRACE_ERROR3(m,p1,p2,p3)
-#define CE_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define CE_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_WARNING0(m)
-#define CE_TRACE_WARNING1(m,p1)
-#define CE_TRACE_WARNING2(m,p1,p2)
-#define CE_TRACE_WARNING3(m,p1,p2,p3)
-#define CE_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define CE_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_API0(m)
-#define CE_TRACE_API1(m,p1)
-#define CE_TRACE_API2(m,p1,p2)
-#define CE_TRACE_API3(m,p1,p2,p3)
-#define CE_TRACE_API4(m,p1,p2,p3,p4)
-#define CE_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_EVENT0(m)
-#define CE_TRACE_EVENT1(m,p1)
-#define CE_TRACE_EVENT2(m,p1,p2)
-#define CE_TRACE_EVENT3(m,p1,p2,p3)
-#define CE_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define CE_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_DEBUG0(m)
-#define CE_TRACE_DEBUG1(m,p1)
-#define CE_TRACE_DEBUG2(m,p1,p2)
-#define CE_TRACE_DEBUG3(m,p1,p2,p3)
-#define CE_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define CE_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_ERROR0(m)
-#define NDEF_TRACE_ERROR1(m,p1)
-#define NDEF_TRACE_ERROR2(m,p1,p2)
-#define NDEF_TRACE_ERROR3(m,p1,p2,p3)
-#define NDEF_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_WARNING0(m)
-#define NDEF_TRACE_WARNING1(m,p1)
-#define NDEF_TRACE_WARNING2(m,p1,p2)
-#define NDEF_TRACE_WARNING3(m,p1,p2,p3)
-#define NDEF_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_API0(m)
-#define NDEF_TRACE_API1(m,p1)
-#define NDEF_TRACE_API2(m,p1,p2)
-#define NDEF_TRACE_API3(m,p1,p2,p3)
-#define NDEF_TRACE_API4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_EVENT0(m)
-#define NDEF_TRACE_EVENT1(m,p1)
-#define NDEF_TRACE_EVENT2(m,p1,p2)
-#define NDEF_TRACE_EVENT3(m,p1,p2,p3)
-#define NDEF_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_DEBUG0(m)
-#define NDEF_TRACE_DEBUG1(m,p1)
-#define NDEF_TRACE_DEBUG2(m,p1,p2)
-#define NDEF_TRACE_DEBUG3(m,p1,p2,p3)
-#define NDEF_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA unit
-*/
-#define NFA_TRACE_ERROR0(m)
-#define NFA_TRACE_ERROR1(m,p1)
-#define NFA_TRACE_ERROR2(m,p1,p2)
-#define NFA_TRACE_ERROR3(m,p1,p2,p3)
-#define NFA_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NFA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_WARNING0(m)
-#define NFA_TRACE_WARNING1(m,p1)
-#define NFA_TRACE_WARNING2(m,p1,p2)
-#define NFA_TRACE_WARNING3(m,p1,p2,p3)
-#define NFA_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NFA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_API0(m)
-#define NFA_TRACE_API1(m,p1)
-#define NFA_TRACE_API2(m,p1,p2)
-#define NFA_TRACE_API3(m,p1,p2,p3)
-#define NFA_TRACE_API4(m,p1,p2,p3,p4)
-#define NFA_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_EVENT0(m)
-#define NFA_TRACE_EVENT1(m,p1)
-#define NFA_TRACE_EVENT2(m,p1,p2)
-#define NFA_TRACE_EVENT3(m,p1,p2,p3)
-#define NFA_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NFA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_DEBUG0(m)
-#define NFA_TRACE_DEBUG1(m,p1)
-#define NFA_TRACE_DEBUG2(m,p1,p2)
-#define NFA_TRACE_DEBUG3(m,p1,p2,p3)
-#define NFA_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NFA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA P2P unit
-*/
-#define P2P_TRACE_ERROR0(m)
-#define P2P_TRACE_ERROR1(m,p1)
-#define P2P_TRACE_ERROR2(m,p1,p2)
-#define P2P_TRACE_ERROR3(m,p1,p2,p3)
-#define P2P_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define P2P_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_WARNING0(m)
-#define P2P_TRACE_WARNING1(m,p1)
-#define P2P_TRACE_WARNING2(m,p1,p2)
-#define P2P_TRACE_WARNING3(m,p1,p2,p3)
-#define P2P_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define P2P_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_API0(m)
-#define P2P_TRACE_API1(m,p1)
-#define P2P_TRACE_API2(m,p1,p2)
-#define P2P_TRACE_API3(m,p1,p2,p3)
-#define P2P_TRACE_API4(m,p1,p2,p3,p4)
-#define P2P_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_EVENT0(m)
-#define P2P_TRACE_EVENT1(m,p1)
-#define P2P_TRACE_EVENT2(m,p1,p2)
-#define P2P_TRACE_EVENT3(m,p1,p2,p3)
-#define P2P_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define P2P_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_DEBUG0(m)
-#define P2P_TRACE_DEBUG1(m,p1)
-#define P2P_TRACE_DEBUG2(m,p1,p2)
-#define P2P_TRACE_DEBUG3(m,p1,p2,p3)
-#define P2P_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define P2P_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA CHO unit
-*/
-#define CHO_TRACE_ERROR0(m)
-#define CHO_TRACE_ERROR1(m,p1)
-#define CHO_TRACE_ERROR2(m,p1,p2)
-#define CHO_TRACE_ERROR3(m,p1,p2,p3)
-#define CHO_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define CHO_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_WARNING0(m)
-#define CHO_TRACE_WARNING1(m,p1)
-#define CHO_TRACE_WARNING2(m,p1,p2)
-#define CHO_TRACE_WARNING3(m,p1,p2,p3)
-#define CHO_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define CHO_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_API0(m)
-#define CHO_TRACE_API1(m,p1)
-#define CHO_TRACE_API2(m,p1,p2)
-#define CHO_TRACE_API3(m,p1,p2,p3)
-#define CHO_TRACE_API4(m,p1,p2,p3,p4)
-#define CHO_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_EVENT0(m)
-#define CHO_TRACE_EVENT1(m,p1)
-#define CHO_TRACE_EVENT2(m,p1,p2)
-#define CHO_TRACE_EVENT3(m,p1,p2,p3)
-#define CHO_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define CHO_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_DEBUG0(m)
-#define CHO_TRACE_DEBUG1(m,p1)
-#define CHO_TRACE_DEBUG2(m,p1,p2)
-#define CHO_TRACE_DEBUG3(m,p1,p2,p3)
-#define CHO_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define CHO_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA SNEP unit
-*/
-#define SNEP_TRACE_ERROR0(m)
-#define SNEP_TRACE_ERROR1(m,p1)
-#define SNEP_TRACE_ERROR2(m,p1,p2)
-#define SNEP_TRACE_ERROR3(m,p1,p2,p3)
-#define SNEP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_WARNING0(m)
-#define SNEP_TRACE_WARNING1(m,p1)
-#define SNEP_TRACE_WARNING2(m,p1,p2)
-#define SNEP_TRACE_WARNING3(m,p1,p2,p3)
-#define SNEP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_API0(m)
-#define SNEP_TRACE_API1(m,p1)
-#define SNEP_TRACE_API2(m,p1,p2)
-#define SNEP_TRACE_API3(m,p1,p2,p3)
-#define SNEP_TRACE_API4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_EVENT0(m)
-#define SNEP_TRACE_EVENT1(m,p1)
-#define SNEP_TRACE_EVENT2(m,p1,p2)
-#define SNEP_TRACE_EVENT3(m,p1,p2,p3)
-#define SNEP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_DEBUG0(m)
-#define SNEP_TRACE_DEBUG1(m,p1)
-#define SNEP_TRACE_DEBUG2(m,p1,p2)
-#define SNEP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SNEP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* define traces for HID Host */
-#define HIDH_TRACE_ERROR0(m)
-#define HIDH_TRACE_ERROR1(m,p1)
-#define HIDH_TRACE_ERROR2(m,p1,p2)
-#define HIDH_TRACE_ERROR3(m,p1,p2,p3)
-#define HIDH_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_WARNING0(m)
-#define HIDH_TRACE_WARNING1(m,p1)
-#define HIDH_TRACE_WARNING2(m,p1,p2)
-#define HIDH_TRACE_WARNING3(m,p1,p2,p3)
-#define HIDH_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_API0(m)
-#define HIDH_TRACE_API1(m,p1)
-#define HIDH_TRACE_API2(m,p1,p2)
-#define HIDH_TRACE_API3(m,p1,p2,p3)
-#define HIDH_TRACE_API4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_EVENT0(m)
-#define HIDH_TRACE_EVENT1(m,p1)
-#define HIDH_TRACE_EVENT2(m,p1,p2)
-#define HIDH_TRACE_EVENT3(m,p1,p2,p3)
-#define HIDH_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_DEBUG0(m)
-#define HIDH_TRACE_DEBUG1(m,p1)
-#define HIDH_TRACE_DEBUG2(m,p1,p2)
-#define HIDH_TRACE_DEBUG3(m,p1,p2,p3)
-#define HIDH_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for HID Device */
-#define HIDD_TRACE_ERROR0(m)
-#define HIDD_TRACE_ERROR1(m,p1)
-#define HIDD_TRACE_ERROR2(m,p1,p2)
-#define HIDD_TRACE_ERROR3(m,p1,p2,p3)
-#define HIDD_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_WARNING0(m)
-#define HIDD_TRACE_WARNING1(m,p1)
-#define HIDD_TRACE_WARNING2(m,p1,p2)
-#define HIDD_TRACE_WARNING3(m,p1,p2,p3)
-#define HIDD_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_API0(m)
-#define HIDD_TRACE_API1(m,p1)
-#define HIDD_TRACE_API2(m,p1,p2)
-#define HIDD_TRACE_API3(m,p1,p2,p3)
-#define HIDD_TRACE_API4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_EVENT0(m)
-#define HIDD_TRACE_EVENT1(m,p1)
-#define HIDD_TRACE_EVENT2(m,p1,p2)
-#define HIDD_TRACE_EVENT3(m,p1,p2,p3)
-#define HIDD_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_DEBUG0(m)
-#define HIDD_TRACE_DEBUG1(m,p1)
-#define HIDD_TRACE_DEBUG2(m,p1,p2)
-#define HIDD_TRACE_DEBUG3(m,p1,p2,p3)
-#define HIDD_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for DUN */
-
-#define DUN_TRACE_ERROR0(m)
-#define DUN_TRACE_ERROR1(m,p1)
-#define DUN_TRACE_ERROR2(m,p1,p2)
-#define DUN_TRACE_ERROR3(m,p1,p2,p3)
-#define DUN_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define DUN_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_WARNING0(m)
-#define DUN_TRACE_WARNING1(m,p1)
-#define DUN_TRACE_WARNING2(m,p1,p2)
-#define DUN_TRACE_WARNING3(m,p1,p2,p3)
-#define DUN_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define DUN_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_API0(m)
-#define DUN_TRACE_API1(m,p1)
-#define DUN_TRACE_API2(m,p1,p2)
-#define DUN_TRACE_API3(m,p1,p2,p3)
-#define DUN_TRACE_API4(m,p1,p2,p3,p4)
-#define DUN_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_EVENT0(m)
-#define DUN_TRACE_EVENT1(m,p1)
-#define DUN_TRACE_EVENT2(m,p1,p2)
-#define DUN_TRACE_EVENT3(m,p1,p2,p3)
-#define DUN_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define DUN_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_DEBUG0(m)
-#define DUN_TRACE_DEBUG1(m,p1)
-#define DUN_TRACE_DEBUG2(m,p1,p2)
-#define DUN_TRACE_DEBUG3(m,p1,p2,p3)
-#define DUN_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define DUN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for HCRP */
-
-#define HCRP_TRACE_ERROR0(m)
-#define HCRP_TRACE_ERROR1(m,p1)
-#define HCRP_TRACE_ERROR2(m,p1,p2)
-#define HCRP_TRACE_ERROR3(m,p1,p2,p3)
-#define HCRP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_WARNING0(m)
-#define HCRP_TRACE_WARNING1(m,p1)
-#define HCRP_TRACE_WARNING2(m,p1,p2)
-#define HCRP_TRACE_WARNING3(m,p1,p2,p3)
-#define HCRP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_API0(m)
-#define HCRP_TRACE_API1(m,p1)
-#define HCRP_TRACE_API2(m,p1,p2)
-#define HCRP_TRACE_API3(m,p1,p2,p3)
-#define HCRP_TRACE_API4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_EVENT0(m)
-#define HCRP_TRACE_EVENT1(m,p1)
-#define HCRP_TRACE_EVENT2(m,p1,p2)
-#define HCRP_TRACE_EVENT3(m,p1,p2,p3)
-#define HCRP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_DEBUG0(m)
-#define HCRP_TRACE_DEBUG1(m,p1)
-#define HCRP_TRACE_DEBUG2(m,p1,p2)
-#define HCRP_TRACE_DEBUG3(m,p1,p2,p3)
-#define HCRP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* define traces for HCRP */
-
-#define HCRPM_TRACE_ERROR0(m)
-#define HCRPM_TRACE_ERROR1(m,p1)
-#define HCRPM_TRACE_ERROR2(m,p1,p2)
-#define HCRPM_TRACE_ERROR3(m,p1,p2,p3)
-#define HCRPM_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_WARNING0(m)
-#define HCRPM_TRACE_WARNING1(m,p1)
-#define HCRPM_TRACE_WARNING2(m,p1,p2)
-#define HCRPM_TRACE_WARNING3(m,p1,p2,p3)
-#define HCRPM_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_API0(m)
-#define HCRPM_TRACE_API1(m,p1)
-#define HCRPM_TRACE_API2(m,p1,p2)
-#define HCRPM_TRACE_API3(m,p1,p2,p3)
-#define HCRPM_TRACE_API4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_EVENT0(m)
-#define HCRPM_TRACE_EVENT1(m,p1)
-#define HCRPM_TRACE_EVENT2(m,p1,p2)
-#define HCRPM_TRACE_EVENT3(m,p1,p2,p3)
-#define HCRPM_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_DEBUG0(m)
-#define HCRPM_TRACE_DEBUG1(m,p1)
-#define HCRPM_TRACE_DEBUG2(m,p1,p2)
-#define HCRPM_TRACE_DEBUG3(m,p1,p2,p3)
-#define HCRPM_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for RPC */
-
-#define RPC_TRACE_ERROR0(m)
-#define RPC_TRACE_ERROR1(m,p1)
-#define RPC_TRACE_ERROR2(m,p1,p2)
-#define RPC_TRACE_ERROR3(m,p1,p2,p3)
-#define RPC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define RPC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_WARNING0(m)
-#define RPC_TRACE_WARNING1(m,p1)
-#define RPC_TRACE_WARNING2(m,p1,p2)
-#define RPC_TRACE_WARNING3(m,p1,p2,p3)
-#define RPC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define RPC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_API0(m)
-#define RPC_TRACE_API1(m,p1)
-#define RPC_TRACE_API2(m,p1,p2)
-#define RPC_TRACE_API3(m,p1,p2,p3)
-#define RPC_TRACE_API4(m,p1,p2,p3,p4)
-#define RPC_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_EVENT0(m)
-#define RPC_TRACE_EVENT1(m,p1)
-#define RPC_TRACE_EVENT2(m,p1,p2)
-#define RPC_TRACE_EVENT3(m,p1,p2,p3)
-#define RPC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define RPC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_DEBUG0(m)
-#define RPC_TRACE_DEBUG1(m,p1)
-#define RPC_TRACE_DEBUG2(m,p1,p2)
-#define RPC_TRACE_DEBUG3(m,p1,p2,p3)
-#define RPC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define RPC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for BNEP */
-
-#define BNEP_TRACE_ERROR0(m)
-#define BNEP_TRACE_ERROR1(m,p1)
-#define BNEP_TRACE_ERROR2(m,p1,p2)
-#define BNEP_TRACE_ERROR3(m,p1,p2,p3)
-#define BNEP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_WARNING0(m)
-#define BNEP_TRACE_WARNING1(m,p1)
-#define BNEP_TRACE_WARNING2(m,p1,p2)
-#define BNEP_TRACE_WARNING3(m,p1,p2,p3)
-#define BNEP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_API0(m)
-#define BNEP_TRACE_API1(m,p1)
-#define BNEP_TRACE_API2(m,p1,p2)
-#define BNEP_TRACE_API3(m,p1,p2,p3)
-#define BNEP_TRACE_API4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_EVENT0(m)
-#define BNEP_TRACE_EVENT1(m,p1)
-#define BNEP_TRACE_EVENT2(m,p1,p2)
-#define BNEP_TRACE_EVENT3(m,p1,p2,p3)
-#define BNEP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_DEBUG0(m)
-#define BNEP_TRACE_DEBUG1(m,p1)
-#define BNEP_TRACE_DEBUG2(m,p1,p2)
-#define BNEP_TRACE_DEBUG3(m,p1,p2,p3)
-#define BNEP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* hid module traces */
-
-#define MSKB_TRACE_0(m)
-#define MSKB_TRACE_1(m,p1)
-#define MSKB_TRACE_2(m,p1,p2)
-#define MSKB_TRACE_3(m,p1,p2,p3)
-#define MSKB_TRACE_4(m,p1,p2,p3,p4)
-#define MSKB_TRACE_5(m,p1,p2,p3,p4,p5)
-#define MSKB_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_DEBUG_0(m)
-#define MSKB_DEBUG_1(m,p1)
-#define MSKB_DEBUG_2(m,p1,p2)
-#define MSKB_DEBUG_3(m,p1,p2,p3)
-#define MSKB_DEBUG_4(m,p1,p2,p3,p4)
-#define MSKB_DEBUG_5(m,p1,p2,p3,p4,p5)
-#define MSKB_DEBUG_6(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_ERROR_0(m)
-#define MSKB_ERROR_1(m,p1)
-#define MSKB_ERROR_2(m,p1,p2)
-#define MSKB_ERROR_3(m,p1,p2,p3)
-#define MSKB_ERROR_4(m,p1,p2,p3,p4)
-#define MSKB_ERROR_5(m,p1,p2,p3,p4,p5)
-#define MSKB_ERROR_6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for PAN */
-
-#define PAN_TRACE_ERROR0(m)
-#define PAN_TRACE_ERROR1(m,p1)
-#define PAN_TRACE_ERROR2(m,p1,p2)
-#define PAN_TRACE_ERROR3(m,p1,p2,p3)
-#define PAN_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define PAN_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_WARNING0(m)
-#define PAN_TRACE_WARNING1(m,p1)
-#define PAN_TRACE_WARNING2(m,p1,p2)
-#define PAN_TRACE_WARNING3(m,p1,p2,p3)
-#define PAN_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define PAN_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_API0(m)
-#define PAN_TRACE_API1(m,p1)
-#define PAN_TRACE_API2(m,p1,p2)
-#define PAN_TRACE_API3(m,p1,p2,p3)
-#define PAN_TRACE_API4(m,p1,p2,p3,p4)
-#define PAN_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_EVENT0(m)
-#define PAN_TRACE_EVENT1(m,p1)
-#define PAN_TRACE_EVENT2(m,p1,p2)
-#define PAN_TRACE_EVENT3(m,p1,p2,p3)
-#define PAN_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define PAN_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_DEBUG0(m)
-#define PAN_TRACE_DEBUG1(m,p1)
-#define PAN_TRACE_DEBUG2(m,p1,p2)
-#define PAN_TRACE_DEBUG3(m,p1,p2,p3)
-#define PAN_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define PAN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for SIM */
-
-#define SAP_TRACE_ERROR0(m)
-#define SAP_TRACE_ERROR1(m,p1)
-#define SAP_TRACE_ERROR2(m,p1,p2)
-#define SAP_TRACE_ERROR3(m,p1,p2,p3)
-#define SAP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_WARNING0(m)
-#define SAP_TRACE_WARNING1(m,p1)
-#define SAP_TRACE_WARNING2(m,p1,p2)
-#define SAP_TRACE_WARNING3(m,p1,p2,p3)
-#define SAP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_API0(m)
-#define SAP_TRACE_API1(m,p1)
-#define SAP_TRACE_API2(m,p1,p2)
-#define SAP_TRACE_API3(m,p1,p2,p3)
-#define SAP_TRACE_API4(m,p1,p2,p3,p4)
-#define SAP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_EVENT0(m)
-#define SAP_TRACE_EVENT1(m,p1)
-#define SAP_TRACE_EVENT2(m,p1,p2)
-#define SAP_TRACE_EVENT3(m,p1,p2,p3)
-#define SAP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_DEBUG0(m)
-#define SAP_TRACE_DEBUG1(m,p1)
-#define SAP_TRACE_DEBUG2(m,p1,p2)
-#define SAP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SAP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the OPP profile
-*/
-#define OPP_TRACE_ERROR0(m)
-#define OPP_TRACE_ERROR1(m,p1)
-#define OPP_TRACE_ERROR2(m,p1,p2)
-#define OPP_TRACE_ERROR3(m,p1,p2,p3)
-#define OPP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define OPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_WARNING0(m)
-#define OPP_TRACE_WARNING1(m,p1)
-#define OPP_TRACE_WARNING2(m,p1,p2)
-#define OPP_TRACE_WARNING3(m,p1,p2,p3)
-#define OPP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define OPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_EVENT0(m)
-#define OPP_TRACE_EVENT1(m,p1)
-#define OPP_TRACE_EVENT2(m,p1,p2)
-#define OPP_TRACE_EVENT3(m,p1,p2,p3)
-#define OPP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define OPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_DEBUG0(m)
-#define OPP_TRACE_DEBUG1(m,p1)
-#define OPP_TRACE_DEBUG2(m,p1,p2)
-#define OPP_TRACE_DEBUG3(m,p1,p2,p3)
-#define OPP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define OPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_API0(m)
-#define OPP_TRACE_API1(m,p1)
-#define OPP_TRACE_API2(m,p1,p2)
-#define OPP_TRACE_API3(m,p1,p2,p3)
-#define OPP_TRACE_API4(m,p1,p2,p3,p4)
-#define OPP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the FTP profile
-*/
-#define FTP_TRACE_ERROR0(m)
-#define FTP_TRACE_ERROR1(m,p1)
-#define FTP_TRACE_ERROR2(m,p1,p2)
-#define FTP_TRACE_ERROR3(m,p1,p2,p3)
-#define FTP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define FTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_WARNING0(m)
-#define FTP_TRACE_WARNING1(m,p1)
-#define FTP_TRACE_WARNING2(m,p1,p2)
-#define FTP_TRACE_WARNING3(m,p1,p2,p3)
-#define FTP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define FTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_EVENT0(m)
-#define FTP_TRACE_EVENT1(m,p1)
-#define FTP_TRACE_EVENT2(m,p1,p2)
-#define FTP_TRACE_EVENT3(m,p1,p2,p3)
-#define FTP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define FTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_DEBUG0(m)
-#define FTP_TRACE_DEBUG1(m,p1)
-#define FTP_TRACE_DEBUG2(m,p1,p2)
-#define FTP_TRACE_DEBUG3(m,p1,p2,p3)
-#define FTP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define FTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_API0(m)
-#define FTP_TRACE_API1(m,p1)
-#define FTP_TRACE_API2(m,p1,p2)
-#define FTP_TRACE_API3(m,p1,p2,p3)
-#define FTP_TRACE_API4(m,p1,p2,p3,p4)
-#define FTP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the A2DP profile
-*/
-#define A2D_TRACE_ERROR0(m)
-#define A2D_TRACE_ERROR1(m,p1)
-#define A2D_TRACE_ERROR2(m,p1,p2)
-#define A2D_TRACE_ERROR3(m,p1,p2,p3)
-#define A2D_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define A2D_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_WARNING0(m)
-#define A2D_TRACE_WARNING1(m,p1)
-#define A2D_TRACE_WARNING2(m,p1,p2)
-#define A2D_TRACE_WARNING3(m,p1,p2,p3)
-#define A2D_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define A2D_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_EVENT0(m)
-#define A2D_TRACE_EVENT1(m,p1)
-#define A2D_TRACE_EVENT2(m,p1,p2)
-#define A2D_TRACE_EVENT3(m,p1,p2,p3)
-#define A2D_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define A2D_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_DEBUG0(m)
-#define A2D_TRACE_DEBUG1(m,p1)
-#define A2D_TRACE_DEBUG2(m,p1,p2)
-#define A2D_TRACE_DEBUG3(m,p1,p2,p3)
-#define A2D_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define A2D_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_API0(m)
-#define A2D_TRACE_API1(m,p1)
-#define A2D_TRACE_API2(m,p1,p2)
-#define A2D_TRACE_API3(m,p1,p2,p3)
-#define A2D_TRACE_API4(m,p1,p2,p3,p4)
-#define A2D_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the VDP profile
-*/
-#define VDP_TRACE_ERROR0(m)
-#define VDP_TRACE_ERROR1(m,p1)
-#define VDP_TRACE_ERROR2(m,p1,p2)
-#define VDP_TRACE_ERROR3(m,p1,p2,p3)
-#define VDP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define VDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_WARNING0(m)
-#define VDP_TRACE_WARNING1(m,p1)
-#define VDP_TRACE_WARNING2(m,p1,p2)
-#define VDP_TRACE_WARNING3(m,p1,p2,p3)
-#define VDP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define VDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_EVENT0(m)
-#define VDP_TRACE_EVENT1(m,p1)
-#define VDP_TRACE_EVENT2(m,p1,p2)
-#define VDP_TRACE_EVENT3(m,p1,p2,p3)
-#define VDP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define VDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_DEBUG0(m)
-#define VDP_TRACE_DEBUG1(m,p1)
-#define VDP_TRACE_DEBUG2(m,p1,p2)
-#define VDP_TRACE_DEBUG3(m,p1,p2,p3)
-#define VDP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define VDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_API0(m)
-#define VDP_TRACE_API1(m,p1)
-#define VDP_TRACE_API2(m,p1,p2)
-#define VDP_TRACE_API3(m,p1,p2,p3)
-#define VDP_TRACE_API4(m,p1,p2,p3,p4)
-#define VDP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the LM unit
-*/
-#define LMP_TRACE_ERROR0(m)
-#define LMP_TRACE_ERROR1(m,p1)
-#define LMP_TRACE_ERROR2(m,p1,p2)
-#define LMP_TRACE_ERROR3(m,p1,p2,p3)
-#define LMP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define LMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define LMP_TRACE_WARNING0(m)
-#define LMP_TRACE_WARNING1(m,p1)
-#define LMP_TRACE_WARNING2(m,p1,p2)
-#define LMP_TRACE_WARNING3(m,p1,p2,p3)
-#define LMP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define LMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define LMP_TRACE_EVENT0(m)
-#define LMP_TRACE_EVENT1(m,p1)
-#define LMP_TRACE_EVENT2(m,p1,p2)
-#define LMP_TRACE_EVENT3(m,p1,p2,p3)
-#define LMP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define LMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define LMP_TRACE_DEBUG0(m)
-#define LMP_TRACE_DEBUG1(m,p1)
-#define LMP_TRACE_DEBUG2(m,p1,p2)
-#define LMP_TRACE_DEBUG3(m,p1,p2,p3)
-#define LMP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define LMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the LC unit
-*/
-#define LC_TRACE_ERROR0(m)
-#define LC_TRACE_ERROR1(m,p1)
-#define LC_TRACE_ERROR2(m,p1,p2)
-#define LC_TRACE_ERROR3(m,p1,p2,p3)
-#define LC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define LC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define LC_TRACE_WARNING0(m)
-#define LC_TRACE_WARNING1(m,p1)
-#define LC_TRACE_WARNING2(m,p1,p2)
-#define LC_TRACE_WARNING3(m,p1,p2,p3)
-#define LC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define LC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define LC_TRACE_EVENT0(m)
-#define LC_TRACE_EVENT1(m,p1)
-#define LC_TRACE_EVENT2(m,p1,p2)
-#define LC_TRACE_EVENT3(m,p1,p2,p3)
-#define LC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define LC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define LC_TRACE_DEBUG0(m)
-#define LC_TRACE_DEBUG1(m,p1)
-#define LC_TRACE_DEBUG2(m,p1,p2)
-#define LC_TRACE_DEBUG3(m,p1,p2,p3)
-#define LC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define LC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_ERROR0(m)
-#define SDA_TRACE_ERROR1(m,p1)
-#define SDA_TRACE_ERROR2(m,p1,p2)
-#define SDA_TRACE_ERROR3(m,p1,p2,p3)
-#define SDA_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SDA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_WARNING0(m)
-#define SDA_TRACE_WARNING1(m,p1)
-#define SDA_TRACE_WARNING2(m,p1,p2)
-#define SDA_TRACE_WARNING3(m,p1,p2,p3)
-#define SDA_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SDA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_EVENT0(m)
-#define SDA_TRACE_EVENT1(m,p1)
-#define SDA_TRACE_EVENT2(m,p1,p2)
-#define SDA_TRACE_EVENT3(m,p1,p2,p3)
-#define SDA_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SDA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_DEBUG0(m)
-#define SDA_TRACE_DEBUG1(m,p1)
-#define SDA_TRACE_DEBUG2(m,p1,p2)
-#define SDA_TRACE_DEBUG3(m,p1,p2,p3)
-#define SDA_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SDA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* AVDTP
-*/
-#define AVDT_TRACE_ERROR0(m)
-#define AVDT_TRACE_ERROR1(m,p1)
-#define AVDT_TRACE_ERROR2(m,p1,p2)
-#define AVDT_TRACE_ERROR3(m,p1,p2,p3)
-#define AVDT_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_WARNING0(m)
-#define AVDT_TRACE_WARNING1(m,p1)
-#define AVDT_TRACE_WARNING2(m,p1,p2)
-#define AVDT_TRACE_WARNING3(m,p1,p2,p3)
-#define AVDT_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_EVENT0(m)
-#define AVDT_TRACE_EVENT1(m,p1)
-#define AVDT_TRACE_EVENT2(m,p1,p2)
-#define AVDT_TRACE_EVENT3(m,p1,p2,p3)
-#define AVDT_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_DEBUG0(m)
-#define AVDT_TRACE_DEBUG1(m,p1)
-#define AVDT_TRACE_DEBUG2(m,p1,p2)
-#define AVDT_TRACE_DEBUG3(m,p1,p2,p3)
-#define AVDT_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_API0(m)
-#define AVDT_TRACE_API1(m,p1)
-#define AVDT_TRACE_API2(m,p1,p2)
-#define AVDT_TRACE_API3(m,p1,p2,p3)
-#define AVDT_TRACE_API4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the AVCTP protocol
-*/
-#define AVCT_TRACE_ERROR0(m)
-#define AVCT_TRACE_ERROR1(m,p1)
-#define AVCT_TRACE_ERROR2(m,p1,p2)
-#define AVCT_TRACE_ERROR3(m,p1,p2,p3)
-#define AVCT_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_WARNING0(m)
-#define AVCT_TRACE_WARNING1(m,p1)
-#define AVCT_TRACE_WARNING2(m,p1,p2)
-#define AVCT_TRACE_WARNING3(m,p1,p2,p3)
-#define AVCT_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_EVENT0(m)
-#define AVCT_TRACE_EVENT1(m,p1)
-#define AVCT_TRACE_EVENT2(m,p1,p2)
-#define AVCT_TRACE_EVENT3(m,p1,p2,p3)
-#define AVCT_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_DEBUG0(m)
-#define AVCT_TRACE_DEBUG1(m,p1)
-#define AVCT_TRACE_DEBUG2(m,p1,p2)
-#define AVCT_TRACE_DEBUG3(m,p1,p2,p3)
-#define AVCT_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_API0(m)
-#define AVCT_TRACE_API1(m,p1)
-#define AVCT_TRACE_API2(m,p1,p2)
-#define AVCT_TRACE_API3(m,p1,p2,p3)
-#define AVCT_TRACE_API4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the AVRCP profile
-*/
-#define AVRC_TRACE_ERROR0(m)
-#define AVRC_TRACE_ERROR1(m,p1)
-#define AVRC_TRACE_ERROR2(m,p1,p2)
-#define AVRC_TRACE_ERROR3(m,p1,p2,p3)
-#define AVRC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_WARNING0(m)
-#define AVRC_TRACE_WARNING1(m,p1)
-#define AVRC_TRACE_WARNING2(m,p1,p2)
-#define AVRC_TRACE_WARNING3(m,p1,p2,p3)
-#define AVRC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_EVENT0(m)
-#define AVRC_TRACE_EVENT1(m,p1)
-#define AVRC_TRACE_EVENT2(m,p1,p2)
-#define AVRC_TRACE_EVENT3(m,p1,p2,p3)
-#define AVRC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_DEBUG0(m)
-#define AVRC_TRACE_DEBUG1(m,p1)
-#define AVRC_TRACE_DEBUG2(m,p1,p2)
-#define AVRC_TRACE_DEBUG3(m,p1,p2,p3)
-#define AVRC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_API0(m)
-#define AVRC_TRACE_API1(m,p1)
-#define AVRC_TRACE_API2(m,p1,p2)
-#define AVRC_TRACE_API3(m,p1,p2,p3)
-#define AVRC_TRACE_API4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* MCAP
-*/
-#define MCA_TRACE_ERROR0(m)
-#define MCA_TRACE_ERROR1(m,p1)
-#define MCA_TRACE_ERROR2(m,p1,p2)
-#define MCA_TRACE_ERROR3(m,p1,p2,p3)
-#define MCA_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define MCA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_WARNING0(m)
-#define MCA_TRACE_WARNING1(m,p1)
-#define MCA_TRACE_WARNING2(m,p1,p2)
-#define MCA_TRACE_WARNING3(m,p1,p2,p3)
-#define MCA_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define MCA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_EVENT0(m)
-#define MCA_TRACE_EVENT1(m,p1)
-#define MCA_TRACE_EVENT2(m,p1,p2)
-#define MCA_TRACE_EVENT3(m,p1,p2,p3)
-#define MCA_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define MCA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_DEBUG0(m)
-#define MCA_TRACE_DEBUG1(m,p1)
-#define MCA_TRACE_DEBUG2(m,p1,p2)
-#define MCA_TRACE_DEBUG3(m,p1,p2,p3)
-#define MCA_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define MCA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_API0(m)
-#define MCA_TRACE_API1(m,p1)
-#define MCA_TRACE_API2(m,p1,p2)
-#define MCA_TRACE_API3(m,p1,p2,p3)
-#define MCA_TRACE_API4(m,p1,p2,p3,p4)
-#define MCA_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the AMP unit
-*/
-#define AMP_TRACE_ERROR0(m)
-#define AMP_TRACE_ERROR1(m,p1)
-#define AMP_TRACE_ERROR2(m,p1,p2)
-#define AMP_TRACE_ERROR3(m,p1,p2,p3)
-#define AMP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_WARNING0(m)
-#define AMP_TRACE_WARNING1(m,p1)
-#define AMP_TRACE_WARNING2(m,p1,p2)
-#define AMP_TRACE_WARNING3(m,p1,p2,p3)
-#define AMP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_API0(m)
-#define AMP_TRACE_API1(m,p1)
-#define AMP_TRACE_API2(m,p1,p2)
-#define AMP_TRACE_API3(m,p1,p2,p3)
-#define AMP_TRACE_API4(m,p1,p2,p3,p4)
-#define AMP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_EVENT0(m)
-#define AMP_TRACE_EVENT1(m,p1)
-#define AMP_TRACE_EVENT2(m,p1,p2)
-#define AMP_TRACE_EVENT3(m,p1,p2,p3)
-#define AMP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_DEBUG0(m)
-#define AMP_TRACE_DEBUG1(m,p1)
-#define AMP_TRACE_DEBUG2(m,p1,p2)
-#define AMP_TRACE_DEBUG3(m,p1,p2,p3)
-#define AMP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the GATT
-*/
-#define GATT_TRACE_ERROR0(m)
-#define GATT_TRACE_ERROR1(m,p1)
-#define GATT_TRACE_ERROR2(m,p1,p2)
-#define GATT_TRACE_ERROR3(m,p1,p2,p3)
-#define GATT_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define GATT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_WARNING0(m)
-#define GATT_TRACE_WARNING1(m,p1)
-#define GATT_TRACE_WARNING2(m,p1,p2)
-#define GATT_TRACE_WARNING3(m,p1,p2,p3)
-#define GATT_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define GATT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_API0(m)
-#define GATT_TRACE_API1(m,p1)
-#define GATT_TRACE_API2(m,p1,p2)
-#define GATT_TRACE_API3(m,p1,p2,p3)
-#define GATT_TRACE_API4(m,p1,p2,p3,p4)
-#define GATT_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_EVENT0(m)
-#define GATT_TRACE_EVENT1(m,p1)
-#define GATT_TRACE_EVENT2(m,p1,p2)
-#define GATT_TRACE_EVENT3(m,p1,p2,p3)
-#define GATT_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define GATT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_DEBUG0(m)
-#define GATT_TRACE_DEBUG1(m,p1)
-#define GATT_TRACE_DEBUG2(m,p1,p2)
-#define GATT_TRACE_DEBUG3(m,p1,p2,p3)
-#define GATT_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define GATT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the SMP unit
-*/
-#define SMP_TRACE_ERROR0(m)
-#define SMP_TRACE_ERROR1(m,p1)
-#define SMP_TRACE_ERROR2(m,p1,p2)
-#define SMP_TRACE_ERROR3(m,p1,p2,p3)
-#define SMP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_WARNING0(m)
-#define SMP_TRACE_WARNING1(m,p1)
-#define SMP_TRACE_WARNING2(m,p1,p2)
-#define SMP_TRACE_WARNING3(m,p1,p2,p3)
-#define SMP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_API0(m)
-#define SMP_TRACE_API1(m,p1)
-#define SMP_TRACE_API2(m,p1,p2)
-#define SMP_TRACE_API3(m,p1,p2,p3)
-#define SMP_TRACE_API4(m,p1,p2,p3,p4)
-#define SMP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_EVENT0(m)
-#define SMP_TRACE_EVENT1(m,p1)
-#define SMP_TRACE_EVENT2(m,p1,p2)
-#define SMP_TRACE_EVENT3(m,p1,p2,p3)
-#define SMP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_DEBUG0(m)
-#define SMP_TRACE_DEBUG1(m,p1)
-#define SMP_TRACE_DEBUG2(m,p1,p2)
-#define SMP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SMP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#endif
-
-#if (BT_USE_TRACES == TRUE || BT_TRACE_APPL == TRUE)
-
-/* define traces for application */
-#define APPL_TRACE_ERROR0(m) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, (m));}
-#define APPL_TRACE_ERROR1(m,p1) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1));}
-#define APPL_TRACE_ERROR2(m,p1,p2) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_ERROR3(m,p1,p2,p3) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_ERROR4(m,p1,p2,p3,p4) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_WARNING0(m) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, (m));}
-#define APPL_TRACE_WARNING1(m,p1) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1));}
-#define APPL_TRACE_WARNING2(m,p1,p2) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_WARNING3(m,p1,p2,p3) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_WARNING4(m,p1,p2,p3,p4) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_API0(m) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, (m));}
-#define APPL_TRACE_API1(m,p1) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
- (m), (UINT32)(p1));}
-#define APPL_TRACE_API2(m,p1,p2) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_API3(m,p1,p2,p3) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_API4(m,p1,p2,p3,p4) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_API5(m,p1,p2,p3,p4,p5) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_EVENT0(m) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, (m));}
-#define APPL_TRACE_EVENT1(m,p1) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1));}
-#define APPL_TRACE_EVENT2(m,p1,p2) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_EVENT3(m,p1,p2,p3) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_EVENT4(m,p1,p2,p3,p4) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_DEBUG0(m) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, (m));}
-#define APPL_TRACE_DEBUG1(m,p1) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1));}
-#define APPL_TRACE_DEBUG2(m,p1,p2) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_DEBUG3(m,p1,p2,p3) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
- (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-#else
-/* define traces for Application */
-
-#define APPL_TRACE_ERROR0(m)
-#define APPL_TRACE_ERROR1(m,p1)
-#define APPL_TRACE_ERROR2(m,p1,p2)
-#define APPL_TRACE_ERROR3(m,p1,p2,p3)
-#define APPL_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define APPL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_WARNING0(m)
-#define APPL_TRACE_WARNING1(m,p1)
-#define APPL_TRACE_WARNING2(m,p1,p2)
-#define APPL_TRACE_WARNING3(m,p1,p2,p3)
-#define APPL_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define APPL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_API0(m)
-#define APPL_TRACE_API1(m,p1)
-#define APPL_TRACE_API2(m,p1,p2)
-#define APPL_TRACE_API3(m,p1,p2,p3)
-#define APPL_TRACE_API4(m,p1,p2,p3,p4)
-#define APPL_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_EVENT0(m)
-#define APPL_TRACE_EVENT1(m,p1)
-#define APPL_TRACE_EVENT2(m,p1,p2)
-#define APPL_TRACE_EVENT3(m,p1,p2,p3)
-#define APPL_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define APPL_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_DEBUG0(m)
-#define APPL_TRACE_DEBUG1(m,p1)
-#define APPL_TRACE_DEBUG2(m,p1,p2)
-#define APPL_TRACE_DEBUG3(m,p1,p2,p3)
-#define APPL_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define APPL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#endif
-
-#if ((MMI_INCLUDED == TRUE) && (!defined(HID_MSKB_INCLUDED) || (HID_MSKB_INCLUDED == FALSE)))
-/* UI for sample applications */
-#define SAP_TRACE_0(m) MMI_Echo(m)
-#define SAP_TRACE_1(m,p1) MMI_Echo(m,p1)
-#define SAP_TRACE_2(m,p1,p2) MMI_Echo(m,p1,p2)
-#define SAP_TRACE_3(m,p1,p2,p3) MMI_Echo(m,p1,p2,p3)
-#define SAP_TRACE_4(m,p1,p2,p3,p4) MMI_Echo(m,p1,p2,p3,p4)
-#define SAP_TRACE_5(m,p1,p2,p3,p4,p5) MMI_Echo(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_6(m,p1,p2,p3,p4,p5,p6) MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-#else
-#define SAP_TRACE_0(m)
-#define SAP_TRACE_1(m,p1)
-#define SAP_TRACE_2(m,p1,p2)
-#define SAP_TRACE_3(m,p1,p2,p3)
-#define SAP_TRACE_4(m,p1,p2,p3,p4)
-#define SAP_TRACE_5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#endif /* End of MMI_INCLUDED */
-#if defined(DRV_DEBUG_MSG) && (DRV_DEBUG_MSG == TRUE)
-/* Driver Trace macros
-*/
-#define DRV_TRACE_WARNING0(m) APPL_TRACE_WARNING0(m)
-#define DRV_TRACE_WARNING1(m,p1) APPL_TRACE_WARNING1(m,p1)
-#define DRV_TRACE_WARNING2(m,p1,p2) APPL_TRACE_WARNING2(m,p1,p2)
-#define DRV_TRACE_WARNING3(m,p1,p2,p3) APPL_TRACE_WARNING3(m,p1,p2,p3)
-#define DRV_TRACE_WARNING4(m,p1,p2,p3,p4) APPL_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define DRV_TRACE_WARNING5(m,p1,p2,p3,p4,p5) APPL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) APPL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-#else
-/* Driver Trace macros
-*/
-#define DRV_TRACE_WARNING0(m)
-#define DRV_TRACE_WARNING1(m,p1)
-#define DRV_TRACE_WARNING2(m,p1,p2)
-#define DRV_TRACE_WARNING3(m,p1,p2,p3)
-#define DRV_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define DRV_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-#endif
-
-#define DRV_TRACE_ERROR0(m) APPL_TRACE_ERROR0(m)
-#define DRV_TRACE_ERROR1(m,p1) APPL_TRACE_ERROR1(m,p1)
-#define DRV_TRACE_ERROR2(m,p1,p2) APPL_TRACE_ERROR2(m,p1,p2)
-#define DRV_TRACE_ERROR3(m,p1,p2,p3) APPL_TRACE_ERROR3(m,p1,p2,p3)
-#define DRV_TRACE_ERROR4(m,p1,p2,p3,p4) APPL_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define DRV_TRACE_ERROR5(m,p1,p2,p3,p4,p5) APPL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) APPL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-/* Driver Trace macros
-*/
-#define DRV_TRACE_DEBUG0(m) APPL_TRACE_DEBUG0(m)
-#define DRV_TRACE_DEBUG1(m,p1) APPL_TRACE_DEBUG1(m,p1)
-#define DRV_TRACE_DEBUG2(m,p1,p2) APPL_TRACE_DEBUG2(m,p1,p2)
-#define DRV_TRACE_DEBUG3(m,p1,p2,p3) APPL_TRACE_DEBUG3(m,p1,p2,p3)
-#define DRV_TRACE_DEBUG4(m,p1,p2,p3,p4) APPL_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define DRV_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) APPL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) APPL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-#endif /* BT_TRACE_H */
-
-
diff --git a/halimpl/bcm2079x/include/bt_types.h b/halimpl/bcm2079x/include/bt_types.h
deleted file mode 100644
index 2b0e809..0000000
--- a/halimpl/bcm2079x/include/bt_types.h
+++ /dev/null
@@ -1,702 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-#ifndef BT_TYPES_H
-#define BT_TYPES_H
-
-#include "data_types.h"
-
-#ifdef _WIN32
-#ifdef BLUESTACK_TESTER
- #include "bte_stack_entry.h"
-#endif
-#endif
-
-/* READ WELL !!
-**
-** This section defines global events. These are events that cross layers.
-** Any event that passes between layers MUST be one of these events. Tasks
-** can use their own events internally, but a FUNDAMENTAL design issue is
-** that global events MUST be one of these events defined below.
-**
-** The convention used is the the event name contains the layer that the
-** event is going to.
-*/
-#define BT_EVT_MASK 0xFF00
-#define BT_SUB_EVT_MASK 0x00FF
- /* To Bluetooth Upper Layers */
- /************************************/
-#define BT_EVT_TO_BTU_L2C_EVT 0x0900 /* L2CAP event */
-#define BT_EVT_TO_BTU_HCI_EVT 0x1000 /* HCI Event */
-#define BT_EVT_TO_BTU_HCI_BR_EDR_EVT (0x0000 | BT_EVT_TO_BTU_HCI_EVT) /* event from BR/EDR controller */
-#define BT_EVT_TO_BTU_HCI_AMP1_EVT (0x0001 | BT_EVT_TO_BTU_HCI_EVT) /* event from local AMP 1 controller */
-#define BT_EVT_TO_BTU_HCI_AMP2_EVT (0x0002 | BT_EVT_TO_BTU_HCI_EVT) /* event from local AMP 2 controller */
-#define BT_EVT_TO_BTU_HCI_AMP3_EVT (0x0003 | BT_EVT_TO_BTU_HCI_EVT) /* event from local AMP 3 controller */
-
-#define BT_EVT_TO_BTU_HCI_ACL 0x1100 /* ACL Data from HCI */
-#define BT_EVT_TO_BTU_HCI_SCO 0x1200 /* SCO Data from HCI */
-#define BT_EVT_TO_BTU_HCIT_ERR 0x1300 /* HCI Transport Error */
-
-#define BT_EVT_TO_BTU_SP_EVT 0x1400 /* Serial Port Event */
-#define BT_EVT_TO_BTU_SP_DATA 0x1500 /* Serial Port Data */
-
-#define BT_EVT_TO_BTU_HCI_CMD 0x1600 /* HCI command from upper layer */
-
-
-#define BT_EVT_TO_BTU_L2C_SEG_XMIT 0x1900 /* L2CAP segment(s) transmitted */
-
-#define BT_EVT_PROXY_INCOMING_MSG 0x1A00 /* BlueStackTester event: incoming message from target */
-
-#define BT_EVT_BTSIM 0x1B00 /* Insight BTSIM event */
-#define BT_EVT_BTISE 0x1C00 /* Insight Script Engine event */
-
- /* To LM */
- /************************************/
-#define BT_EVT_TO_LM_HCI_CMD 0x2000 /* HCI Command */
-#define BT_EVT_TO_LM_HCI_ACL 0x2100 /* HCI ACL Data */
-#define BT_EVT_TO_LM_HCI_SCO 0x2200 /* HCI SCO Data */
-#define BT_EVT_TO_LM_HCIT_ERR 0x2300 /* HCI Transport Error */
-#define BT_EVT_TO_LM_LC_EVT 0x2400 /* LC event */
-#define BT_EVT_TO_LM_LC_LMP 0x2500 /* LC Received LMP command frame */
-#define BT_EVT_TO_LM_LC_ACL 0x2600 /* LC Received ACL data */
-#define BT_EVT_TO_LM_LC_SCO 0x2700 /* LC Received SCO data (not used) */
-#define BT_EVT_TO_LM_LC_ACL_TX 0x2800 /* LMP data transmit complete */
-#define BT_EVT_TO_LM_LC_LMPC_TX 0x2900 /* LMP Command transmit complete */
-#define BT_EVT_TO_LM_LOCAL_ACL_LB 0x2a00 /* Data to be locally loopbacked */
-#define BT_EVT_TO_LM_HCI_ACL_ACK 0x2b00 /* HCI ACL Data ack (not used) */
-#define BT_EVT_TO_LM_DIAG 0x2c00 /* LM Diagnostics commands */
-
-
-#define BT_EVT_TO_BTM_CMDS 0x2f00
-#define BT_EVT_TO_BTM_PM_MDCHG_EVT (0x0001 | BT_EVT_TO_BTM_CMDS)
-
-#define BT_EVT_TO_TCS_CMDS 0x3000
-
-#define BT_EVT_TO_OBX_CL_MSG 0x3100
-#define BT_EVT_TO_OBX_SR_MSG 0x3200
-
-#define BT_EVT_TO_CTP_CMDS 0x3300
-
-/* Obex Over L2CAP */
-#define BT_EVT_TO_OBX_CL_L2C_MSG 0x3400
-#define BT_EVT_TO_OBX_SR_L2C_MSG 0x3500
-
-/* ftp events */
-#define BT_EVT_TO_FTP_SRVR_CMDS 0x3600
-#define BT_EVT_TO_FTP_CLNT_CMDS 0x3700
-
-#define BT_EVT_TO_BTU_SAP 0x3800 /* SIM Access Profile events */
-
-/* opp events */
-#define BT_EVT_TO_OPP_SRVR_CMDS 0x3900
-#define BT_EVT_TO_OPP_CLNT_CMDS 0x3a00
-
-/* gap events */
-#define BT_EVT_TO_GAP_MSG 0x3b00
-
-/* start timer */
-#define BT_EVT_TO_START_TIMER 0x3c00
-
-/* stop timer */
-#define BT_EVT_TO_STOP_TIMER 0x3d00
-
-/* start quick timer */
-#define BT_EVT_TO_START_QUICK_TIMER 0x3e00
-
-
-/* for NFC */
- /************************************/
-#define BT_EVT_TO_NFC_NCI 0x4000 /* NCI Command, Notification or Data*/
-#define BT_EVT_TO_NFC_NCI_VS 0x4200 /* Vendor specific message */
-#define BT_EVT_TO_NFC_MSGS 0x4300 /* messages between NFC and NCI task */
-
-#define BT_EVT_TO_NFCCSIM_NCI 0x4a00 /* events to NFCC simulation (NCI packets) */
-
-/* HCISU Events */
-
-#define BT_EVT_HCISU 0x5000
-
-#define BT_EVT_TO_HCISU_LP_APP_SLEEPING_EVT (0x0005 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_LP_ALLOW_BT_SLEEP_EVT (0x0006 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_LP_WAKEUP_HOST_EVT (0x0007 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_LP_RCV_H4IBSS_EVT (0x0008 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_H5_RESET_EVT (0x0009 | BT_EVT_HCISU)
-#define BT_EVT_HCISU_START_QUICK_TIMER (0x000a | BT_EVT_HCISU)
-
-#define BT_EVT_DATA_TO_AMP_1 0x5100
-#define BT_EVT_DATA_TO_AMP_15 0x5f00
-
-/* HSP Events */
-
-#define BT_EVT_BTU_HSP2 0x6000
-
-#define BT_EVT_TO_BTU_HSP2_EVT (0x0001 | BT_EVT_BTU_HSP2)
-
-/* BPP Events */
-#define BT_EVT_TO_BPP_PR_CMDS 0x6100 /* Printer Events */
-#define BT_EVT_TO_BPP_SND_CMDS 0x6200 /* BPP Sender Events */
-
-/* BIP Events */
-#define BT_EVT_TO_BIP_CMDS 0x6300
-
-/* HCRP Events */
-
-#define BT_EVT_BTU_HCRP 0x7000
-
-#define BT_EVT_TO_BTU_HCRP_EVT (0x0001 | BT_EVT_BTU_HCRP)
-#define BT_EVT_TO_BTU_HCRPM_EVT (0x0002 | BT_EVT_BTU_HCRP)
-
-
-#define BT_EVT_BTU_HFP 0x8000
-#define BT_EVT_TO_BTU_HFP_EVT (0x0001 | BT_EVT_BTU_HFP)
-
-#define BT_EVT_BTU_IPC_EVT 0x9000
-#define BT_EVT_BTU_IPC_LOGMSG_EVT (0x0000 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_ACL_EVT (0x0001 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BTU_EVT (0x0002 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_L2C_EVT (0x0003 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_L2C_MSG_EVT (0x0004 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BTM_EVT (0x0005 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_AVDT_EVT (0x0006 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_SLIP_EVT (0x0007 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_MGMT_EVT (0x0008 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BTTRC_EVT (0x0009 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BURST_EVT (0x000A | BT_EVT_BTU_IPC_EVT)
-
-/* Define the header of each buffer used in the Bluetooth stack.
-*/
-typedef struct
-{
- UINT16 event;
- UINT16 len;
- UINT16 offset;
- UINT16 layer_specific;
-} BT_HDR;
-
-#define BT_HDR_SIZE (sizeof (BT_HDR))
-
-#define BT_PSM_SDP 0x0001
-#define BT_PSM_RFCOMM 0x0003
-#define BT_PSM_TCS 0x0005
-#define BT_PSM_CTP 0x0007
-#define BT_PSM_BNEP 0x000F
-#define BT_PSM_HIDC 0x0011
-#define BT_PSM_HIDI 0x0013
-#define BT_PSM_UPNP 0x0015
-#define BT_PSM_AVCTP 0x0017
-#define BT_PSM_AVDTP 0x0019
-#define BT_PSM_AVCTP_13 0x001B /* Advanced Control - Browsing */
-#define BT_PSM_UDI_CP 0x001D /* Unrestricted Digital Information Profile C-Plane */
-#define BT_PSM_ATT 0x001F /* Attribute Protocol */
-
-
-/* These macros extract the HCI opcodes from a buffer
-*/
-#define HCI_GET_CMD_HDR_OPCODE(p) (UINT16)((*((UINT8 *)((p) + 1) + p->offset) + \
- (*((UINT8 *)((p) + 1) + p->offset + 1) << 8)))
-#define HCI_GET_CMD_HDR_PARAM_LEN(p) (UINT8) (*((UINT8 *)((p) + 1) + p->offset + 2))
-
-#define HCI_GET_EVT_HDR_OPCODE(p) (UINT8)(*((UINT8 *)((p) + 1) + p->offset))
-#define HCI_GET_EVT_HDR_PARAM_LEN(p) (UINT8) (*((UINT8 *)((p) + 1) + p->offset + 1))
-
-
-/********************************************************************************
-** Macros to get and put bytes to and from a stream (Little Endian format).
-*/
-#define UINT32_TO_STREAM(p, u32) {*(p)++ = (UINT8)(u32); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 24);}
-#define UINT24_TO_STREAM(p, u24) {*(p)++ = (UINT8)(u24); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)((u24) >> 16);}
-#define UINT16_TO_STREAM(p, u16) {*(p)++ = (UINT8)(u16); *(p)++ = (UINT8)((u16) >> 8);}
-#define UINT8_TO_STREAM(p, u8) {*(p)++ = (UINT8)(u8);}
-#define INT8_TO_STREAM(p, u8) {*(p)++ = (INT8)(u8);}
-#define ARRAY32_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < 32; ijk++) *(p)++ = (UINT8) a[31 - ijk];}
-#define ARRAY16_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < 16; ijk++) *(p)++ = (UINT8) a[15 - ijk];}
-#define ARRAY8_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < 8; ijk++) *(p)++ = (UINT8) a[7 - ijk];}
-#define BDADDR_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *(p)++ = (UINT8) a[BD_ADDR_LEN - 1 - ijk];}
-#define LAP_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < LAP_LEN; ijk++) *(p)++ = (UINT8) a[LAP_LEN - 1 - ijk];}
-#define DEVCLASS_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < DEV_CLASS_LEN;ijk++) *(p)++ = (UINT8) a[DEV_CLASS_LEN - 1 - ijk];}
-#define ARRAY_TO_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
-#define REVERSE_ARRAY_TO_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[len - 1 - ijk];}
-
-#define STREAM_TO_UINT8(u8, p) {u8 = (UINT8)(*(p)); (p) += 1;}
-#define STREAM_TO_UINT16(u16, p) {u16 = ((UINT16)(*(p)) + (((UINT16)(*((p) + 1))) << 8)); (p) += 2;}
-#define STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) ); (p) += 3;}
-#define STREAM_TO_UINT32(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) + ((((UINT32)(*((p) + 3)))) << 24)); (p) += 4;}
-#define STREAM_TO_BDADDR(a, p) {register int ijk; register UINT8 *pbda = (UINT8 *)a + BD_ADDR_LEN - 1; for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *pbda-- = *p++;}
-#define STREAM_TO_ARRAY32(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + 31; for (ijk = 0; ijk < 32; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY16(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + 15; for (ijk = 0; ijk < 16; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY8(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + 7; for (ijk = 0; ijk < 8; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_DEVCLASS(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + DEV_CLASS_LEN - 1; for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_LAP(a, p) {register int ijk; register UINT8 *plap = (UINT8 *)a + LAP_LEN - 1; for (ijk = 0; ijk < LAP_LEN; ijk++) *plap-- = *p++;}
-#define STREAM_TO_ARRAY(a, p, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-#define REVERSE_STREAM_TO_ARRAY(a, p, len) {register int ijk; register UINT8 *_pa = (UINT8 *)a + len - 1; for (ijk = 0; ijk < len; ijk++) *_pa-- = *p++;}
-
-/********************************************************************************
-** Macros to get and put bytes to and from a field (Little Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*/
-#define UINT32_TO_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)(u32); *((UINT8 *)(p)+1) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+3) = (UINT8)((u32) >> 24);}
-#define UINT24_TO_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)(u24); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u24) >> 16);}
-#define UINT16_TO_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)(u16); *((UINT8 *)(p)+1) = (UINT8)((u16) >> 8);}
-#define UINT8_TO_FIELD(p, u8) {*(UINT8 *)(p) = (UINT8)(u8);}
-
-
-/********************************************************************************
-** Macros to get and put bytes to and from a stream (Big Endian format)
-*/
-#define UINT32_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 24); *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
-#define UINT24_TO_BE_STREAM(p, u24) {*(p)++ = (UINT8)((u24) >> 16); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)(u24);}
-#define UINT16_TO_BE_STREAM(p, u16) {*(p)++ = (UINT8)((u16) >> 8); *(p)++ = (UINT8)(u16);}
-#define UINT8_TO_BE_STREAM(p, u8) {*(p)++ = (UINT8)(u8);}
-#define ARRAY_TO_BE_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
-
-#define BE_STREAM_TO_UINT8(u8, p) {u8 = (UINT8)(*(p)); (p) += 1;}
-#define BE_STREAM_TO_UINT16(u16, p) {u16 = (UINT16)(((UINT16)(*(p)) << 8) + (UINT16)(*((p) + 1))); (p) += 2;}
-#define BE_STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*((p) + 2))) + ((UINT32)(*((p) + 1)) << 8) + ((UINT32)(*(p)) << 16)); (p) += 3;}
-#define BE_STREAM_TO_UINT32(u32, p) {u32 = ((UINT32)(*((p) + 3)) + ((UINT32)(*((p) + 2)) << 8) + ((UINT32)(*((p) + 1)) << 16) + ((UINT32)(*(p)) << 24)); (p) += 4;}
-#define BE_STREAM_TO_ARRAY(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-
-
-/********************************************************************************
-** Macros to get and put bytes to and from a field (Big Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*/
-#define UINT32_TO_BE_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)((u32) >> 24); *((UINT8 *)(p)+1) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+3) = (UINT8)(u32); }
-#define UINT24_TO_BE_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)((u24) >> 16); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)(u24);}
-#define UINT16_TO_BE_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)((u16) >> 8); *((UINT8 *)(p)+1) = (UINT8)(u16);}
-#define UINT8_TO_BE_FIELD(p, u8) {*(UINT8 *)(p) = (UINT8)(u8);}
-
-
-/* Common Bluetooth field definitions */
-#define BD_ADDR_LEN 6 /* Device address length */
-typedef UINT8 BD_ADDR[BD_ADDR_LEN]; /* Device address */
-typedef UINT8 *BD_ADDR_PTR; /* Pointer to Device Address */
-
-#define AMP_KEY_TYPE_GAMP 0
-#define AMP_KEY_TYPE_WIFI 1
-#define AMP_KEY_TYPE_UWB 2
-typedef UINT8 tAMP_KEY_TYPE;
-
-#define BT_OCTET8_LEN 8
-typedef UINT8 BT_OCTET8[BT_OCTET8_LEN]; /* octet array: size 16 */
-
-#define LINK_KEY_LEN 16
-typedef UINT8 LINK_KEY[LINK_KEY_LEN]; /* Link Key */
-
-#define AMP_LINK_KEY_LEN 32
-typedef UINT8 AMP_LINK_KEY[AMP_LINK_KEY_LEN]; /* Dedicated AMP and GAMP Link Keys */
-
-#define BT_OCTET16_LEN 16
-typedef UINT8 BT_OCTET16[BT_OCTET16_LEN]; /* octet array: size 16 */
-
-#define PIN_CODE_LEN 16
-typedef UINT8 PIN_CODE[PIN_CODE_LEN]; /* Pin Code (upto 128 bits) MSB is 0 */
-typedef UINT8 *PIN_CODE_PTR; /* Pointer to Pin Code */
-
-#define DEV_CLASS_LEN 3
-typedef UINT8 DEV_CLASS[DEV_CLASS_LEN]; /* Device class */
-typedef UINT8 *DEV_CLASS_PTR; /* Pointer to Device class */
-
-#define EXT_INQ_RESP_LEN 3
-typedef UINT8 EXT_INQ_RESP[EXT_INQ_RESP_LEN];/* Extended Inquiry Response */
-typedef UINT8 *EXT_INQ_RESP_PTR; /* Pointer to Extended Inquiry Response */
-
-#define BD_NAME_LEN 248
-typedef UINT8 BD_NAME[BD_NAME_LEN + 1]; /* Device name */
-typedef UINT8 *BD_NAME_PTR; /* Pointer to Device name */
-
-#define BD_FEATURES_LEN 8
-typedef UINT8 BD_FEATURES[BD_FEATURES_LEN]; /* LMP features supported by device */
-
-#define BT_EVENT_MASK_LEN 8
-typedef UINT8 BT_EVENT_MASK[BT_EVENT_MASK_LEN]; /* Event Mask */
-
-#define LAP_LEN 3
-typedef UINT8 LAP[LAP_LEN]; /* IAC as passed to Inquiry (LAP) */
-typedef UINT8 INQ_LAP[LAP_LEN]; /* IAC as passed to Inquiry (LAP) */
-
-#define RAND_NUM_LEN 16
-typedef UINT8 RAND_NUM[RAND_NUM_LEN];
-
-#define ACO_LEN 12
-typedef UINT8 ACO[ACO_LEN]; /* Authenticated ciphering offset */
-
-#define COF_LEN 12
-typedef UINT8 COF[COF_LEN]; /* ciphering offset number */
-
-typedef struct {
- UINT8 qos_flags; /* TBD */
- UINT8 service_type; /* see below */
- UINT32 token_rate; /* bytes/second */
- UINT32 token_bucket_size; /* bytes */
- UINT32 peak_bandwidth; /* bytes/second */
- UINT32 latency; /* microseconds */
- UINT32 delay_variation; /* microseconds */
-} FLOW_SPEC;
-
-/* Values for service_type */
-#define NO_TRAFFIC 0
-#define BEST_EFFORT 1
-#define GUARANTEED 2
-
-/* Service class of the CoD */
-#define SERV_CLASS_NETWORKING (1 << 1)
-#define SERV_CLASS_RENDERING (1 << 2)
-#define SERV_CLASS_CAPTURING (1 << 3)
-#define SERV_CLASS_OBJECT_TRANSFER (1 << 4)
-#define SERV_CLASS_OBJECT_AUDIO (1 << 5)
-#define SERV_CLASS_OBJECT_TELEPHONY (1 << 6)
-#define SERV_CLASS_OBJECT_INFORMATION (1 << 7)
-
-/* Second byte */
-#define SERV_CLASS_LIMITED_DISC_MODE (0x20)
-
-/* Field size definitions. Note that byte lengths are rounded up. */
-#define ACCESS_CODE_BIT_LEN 72
-#define ACCESS_CODE_BYTE_LEN 9
-#define SHORTENED_ACCESS_CODE_BIT_LEN 68
-
-typedef UINT8 ACCESS_CODE[ACCESS_CODE_BYTE_LEN];
-
-#define SYNTH_TX 1 /* want synth code to TRANSMIT at this freq */
-#define SYNTH_RX 2 /* want synth code to RECEIVE at this freq */
-
-#define SYNC_REPS 1 /* repeats of sync word transmitted to start of burst */
-
-/* Bluetooth CLK27 */
-#define BT_CLK27 (2 << 26)
-
-/* Bluetooth CLK12 is 1.28 sec */
-#define BT_CLK12_TO_MS(x) ((x) * 1280)
-#define BT_MS_TO_CLK12(x) ((x) / 1280)
-#define BT_CLK12_TO_SLOTS(x) ((x) << 11)
-
-/* Bluetooth CLK is 0.625 msec */
-#define BT_CLK_TO_MS(x) (((x) * 5 + 3) / 8)
-#define BT_MS_TO_CLK(x) (((x) * 8 + 2) / 5)
-
-#define BT_CLK_TO_MICROSECS(x) (((x) * 5000 + 3) / 8)
-#define BT_MICROSECS_TO_CLK(x) (((x) * 8 + 2499) / 5000)
-
-/* Maximum UUID size - 16 bytes, and structure to hold any type of UUID. */
-#define MAX_UUID_SIZE 16
-typedef struct
-{
-#define LEN_UUID_16 2
-#define LEN_UUID_32 4
-#define LEN_UUID_128 16
-
- UINT16 len;
-
- union
- {
- UINT16 uuid16;
- UINT32 uuid32;
- UINT8 uuid128[MAX_UUID_SIZE];
- } uu;
-
-} tBT_UUID;
-
-#define BT_EIR_FLAGS_TYPE 0x01
-#define BT_EIR_MORE_16BITS_UUID_TYPE 0x02
-#define BT_EIR_COMPLETE_16BITS_UUID_TYPE 0x03
-#define BT_EIR_MORE_32BITS_UUID_TYPE 0x04
-#define BT_EIR_COMPLETE_32BITS_UUID_TYPE 0x05
-#define BT_EIR_MORE_128BITS_UUID_TYPE 0x06
-#define BT_EIR_COMPLETE_128BITS_UUID_TYPE 0x07
-#define BT_EIR_SHORTENED_LOCAL_NAME_TYPE 0x08
-#define BT_EIR_COMPLETE_LOCAL_NAME_TYPE 0x09
-#define BT_EIR_TX_POWER_LEVEL_TYPE 0x0A
-#define BT_EIR_OOB_BD_ADDR_TYPE 0x0C
-#define BT_EIR_OOB_COD_TYPE 0x0D
-#define BT_EIR_OOB_SSP_HASH_C_TYPE 0x0E
-#define BT_EIR_OOB_SSP_RAND_R_TYPE 0x0F
-#define BT_EIR_MANUFACTURER_SPECIFIC_TYPE 0xFF
-
-#define BT_OOB_COD_SIZE 3
-#define BT_OOB_HASH_C_SIZE 16
-#define BT_OOB_RAND_R_SIZE 16
-
-/* Broadcom proprietary UUIDs and reserved PSMs
-**
-** The lowest 4 bytes byte of the UUID or GUID depends on the feature. Typically,
-** the value of those bytes will be the PSM or SCN, but it is up to the features.
-*/
-#define BRCM_PROPRIETARY_UUID_BASE 0xDA, 0x23, 0x41, 0x02, 0xA3, 0xBB, 0xC1, 0x71, 0xBA, 0x09, 0x6f, 0x21
-#define BRCM_PROPRIETARY_GUID_BASE 0xda23, 0x4102, 0xa3, 0xbb, 0xc1, 0x71, 0xba, 0x09, 0x6f, 0x21
-
-/* We will not allocate a PSM in the reserved range to 3rd party apps
-*/
-#define BRCM_RESERVED_PSM_START 0x5AE1
-#define BRCM_RESERVED_PSM_END 0x5AFF
-
-#define BRCM_UTILITY_SERVICE_PSM 0x5AE1
-#define BRCM_MATCHER_PSM 0x5AE3
-
-/* Connection statistics
-*/
-
-/* Structure to hold connection stats */
-#ifndef BT_CONN_STATS_DEFINED
-#define BT_CONN_STATS_DEFINED
-
-/* These bits are used in the bIsConnected field */
-#define BT_CONNECTED_USING_BREDR 1
-#define BT_CONNECTED_USING_AMP 2
-
-typedef struct
-{
- UINT32 is_connected;
- INT32 rssi;
- UINT32 bytes_sent;
- UINT32 bytes_rcvd;
- UINT32 duration;
-} tBT_CONN_STATS;
-
-#endif
-
-/* AMP transport selection criteria definitions.
-** NOTE: if underlying L2CAP connection uses basic mode than it can use only BR/EDR.
-** For such L2CAP connections AMP connection the criteria provided by application
-** is reset by AMP manager to AMP_USE_AMP_NEVER.
-*/
-#define AMP_USE_AMP_NEVER 0 /* Connection only via BR/EDR controller, no AMP allowed */
-#define AMP_USE_AMP_IF_PEER_TRIES_IT 1 /* Allow AMP to be used if the peer tries to use it */
-#define AMP_USE_AMP_IF_PHY_CONN_EXISTS 2 /* Use AMP if there is already a physical connection (default) */
-#define AMP_USE_AMP_IF_LC_POWER_ON 3 /* Only try to use AMP if the Local Controller is powered on */
-#define AMP_USE_AMP_IF_LC_AND_PEER_POWER_ON 4 /* Only try to use AMP if both LC and peer are powered on */
-#define AMP_USE_AMP_IF_POSSIBLE 5 /* Try to use AMP if at all possible */
-#define AMP_USE_AMP_ONLY 6 /* Only use AMP, never use BR/EDR */
-#define AMP_USE_AMP_MAX_DEF AMP_USE_AMP_ONLY /* Maximum enum defined for AMP Criteria */
-
-#define AMP_AUTOSWITCH_ALLOWED 0x80000000 /* flag to indicate that this connection is auto-switch ready */
-#define AMP_USE_CURRENT_CRITERIA 0xFFFFFFFF /* Flag if previous criteria was to be still used */
-
-typedef UINT32 tAMP_CRITERIA;
-
-
-/*****************************************************************************
-** Low Energy definitions
-**
-** Address types
-*/
-#define BLE_ADDR_PUBLIC 0x00
-#define BLE_ADDR_RANDOM 0x01
-#define BLE_ADDR_TYPE_MASK (BLE_ADDR_RANDOM | BLE_ADDR_PUBLIC)
-typedef UINT8 tBLE_ADDR_TYPE;
-
-#define BLE_ADDR_IS_STATIC(x) ((x[0] & 0xC0) == 0xC0)
-
-typedef struct
-{
- tBLE_ADDR_TYPE type;
- BD_ADDR bda;
-} tBLE_BD_ADDR;
-
-/* Device Types
-*/
-#define BT_DEVICE_TYPE_BREDR 0x01
-#define BT_DEVICE_TYPE_BLE 0x02
-#define BT_DEVICE_TYPE_DUMO 0x03
-typedef UINT8 tBT_DEVICE_TYPE;
-/*****************************************************************************/
-
-
-/* Define trace levels */
-#define BT_TRACE_LEVEL_NONE 0 /* No trace messages to be generated */
-#define BT_TRACE_LEVEL_ERROR 1 /* Error condition trace messages */
-#define BT_TRACE_LEVEL_WARNING 2 /* Warning condition trace messages */
-#define BT_TRACE_LEVEL_API 3 /* API traces */
-#define BT_TRACE_LEVEL_EVENT 4 /* Debug messages for events */
-#define BT_TRACE_LEVEL_DEBUG 5 /* Full debug messages */
-
-#define MAX_TRACE_LEVEL 5
-
-
-/* Define New Trace Type Definition */
-/* TRACE_CTRL_TYPE 0x^^000000*/
-#define TRACE_CTRL_MASK 0xff000000
-#define TRACE_GET_CTRL(x) ((((UINT32)(x)) & TRACE_CTRL_MASK) >> 24)
-
-#define TRACE_CTRL_GENERAL 0x00000000
-#define TRACE_CTRL_STR_RESOURCE 0x01000000
-#define TRACE_CTRL_SEQ_FLOW 0x02000000
-#define TRACE_CTRL_MAX_NUM 3
-
-/* LAYER SPECIFIC 0x00^^0000*/
-#define TRACE_LAYER_MASK 0x00ff0000
-#define TRACE_GET_LAYER(x) ((((UINT32)(x)) & TRACE_LAYER_MASK) >> 16)
-
-#define TRACE_LAYER_NONE 0x00000000
-#define TRACE_LAYER_USB 0x00010000
-#define TRACE_LAYER_SERIAL 0x00020000
-#define TRACE_LAYER_SOCKET 0x00030000
-#define TRACE_LAYER_RS232 0x00040000
-#define TRACE_LAYER_TRANS_MAX_NUM 5
-#define TRACE_LAYER_TRANS_ALL 0x007f0000
-#define TRACE_LAYER_LC 0x00050000
-#define TRACE_LAYER_LM 0x00060000
-#define TRACE_LAYER_HCI 0x00070000
-#define TRACE_LAYER_L2CAP 0x00080000
-#define TRACE_LAYER_RFCOMM 0x00090000
-#define TRACE_LAYER_SDP 0x000a0000
-#define TRACE_LAYER_TCS 0x000b0000
-#define TRACE_LAYER_OBEX 0x000c0000
-#define TRACE_LAYER_BTM 0x000d0000
-#define TRACE_LAYER_GAP 0x000e0000
-#define TRACE_LAYER_DUN 0x000f0000
-#define TRACE_LAYER_GOEP 0x00100000
-#define TRACE_LAYER_ICP 0x00110000
-#define TRACE_LAYER_HSP2 0x00120000
-#define TRACE_LAYER_SPP 0x00130000
-#define TRACE_LAYER_CTP 0x00140000
-#define TRACE_LAYER_BPP 0x00150000
-#define TRACE_LAYER_HCRP 0x00160000
-#define TRACE_LAYER_FTP 0x00170000
-#define TRACE_LAYER_OPP 0x00180000
-#define TRACE_LAYER_BTU 0x00190000
-#define TRACE_LAYER_GKI 0x001a0000
-#define TRACE_LAYER_BNEP 0x001b0000
-#define TRACE_LAYER_PAN 0x001c0000
-#define TRACE_LAYER_HFP 0x001d0000
-#define TRACE_LAYER_HID 0x001e0000
-#define TRACE_LAYER_BIP 0x001f0000
-#define TRACE_LAYER_AVP 0x00200000
-#define TRACE_LAYER_A2D 0x00210000
-#define TRACE_LAYER_SAP 0x00220000
-#define TRACE_LAYER_AMP 0x00230000
-#define TRACE_LAYER_MCA 0x00240000
-#define TRACE_LAYER_ATT 0x00250000
-#define TRACE_LAYER_SMP 0x00260000
-#define TRACE_LAYER_NFC 0x00270000
-#define TRACE_LAYER_NCI 0x00280000
-#define TRACE_LAYER_LLCP 0x00290000
-#define TRACE_LAYER_NDEF 0x002a0000
-#define TRACE_LAYER_RW 0x002b0000
-#define TRACE_LAYER_CE 0x002c0000
-#define TRACE_LAYER_P2P 0x002d0000
-#define TRACE_LAYER_SNEP 0x002e0000
-#define TRACE_LAYER_CHO 0x002f0000
-#define TRACE_LAYER_NFA 0x00300000
-
-#define TRACE_LAYER_MAX_NUM 0x0031
-
-
-/* TRACE_ORIGINATOR 0x0000^^00*/
-#define TRACE_ORG_MASK 0x0000ff00
-#define TRACE_GET_ORG(x) ((((UINT32)(x)) & TRACE_ORG_MASK) >> 8)
-
-#define TRACE_ORG_STACK 0x00000000
-#define TRACE_ORG_HCI_TRANS 0x00000100
-#define TRACE_ORG_PROTO_DISP 0x00000200
-#define TRACE_ORG_RPC 0x00000300
-#define TRACE_ORG_GKI 0x00000400
-#define TRACE_ORG_APPL 0x00000500
-#define TRACE_ORG_SCR_WRAPPER 0x00000600
-#define TRACE_ORG_SCR_ENGINE 0x00000700
-#define TRACE_ORG_USER_SCR 0x00000800
-#define TRACE_ORG_TESTER 0x00000900
-#define TRACE_ORG_MAX_NUM 10 /* 32-bit mask; must be < 32 */
-#define TRACE_LITE_ORG_MAX_NUM 6
-#define TRACE_ORG_ALL 0x03ff
-#define TRACE_ORG_RPC_TRANS 0x04
-
-#define TRACE_ORG_REG 0x00000909
-#define TRACE_ORG_REG_SUCCESS 0x0000090a
-
-/* TRACE_TYPE 0x000000^^*/
-#define TRACE_TYPE_MASK 0x000000ff
-#define TRACE_GET_TYPE(x) (((UINT32)(x)) & TRACE_TYPE_MASK)
-
-#define TRACE_TYPE_ERROR 0x00000000
-#define TRACE_TYPE_WARNING 0x00000001
-#define TRACE_TYPE_API 0x00000002
-#define TRACE_TYPE_EVENT 0x00000003
-#define TRACE_TYPE_DEBUG 0x00000004
-#define TRACE_TYPE_STACK_ONLY_MAX TRACE_TYPE_DEBUG
-#define TRACE_TYPE_TX 0x00000005
-#define TRACE_TYPE_RX 0x00000006
-#define TRACE_TYPE_DEBUG_ASSERT 0x00000007
-#define TRACE_TYPE_GENERIC 0x00000008
-#define TRACE_TYPE_REG 0x00000009
-#define TRACE_TYPE_REG_SUCCESS 0x0000000a
-#define TRACE_TYPE_CMD_TX 0x0000000b
-#define TRACE_TYPE_EVT_TX 0x0000000c
-#define TRACE_TYPE_ACL_TX 0x0000000d
-#define TRACE_TYPE_CMD_RX 0x0000000e
-#define TRACE_TYPE_EVT_RX 0x0000000f
-#define TRACE_TYPE_ACL_RX 0x00000010
-#define TRACE_TYPE_TARGET_TRACE 0x00000011
-#define TRACE_TYPE_SCO_TX 0x00000012
-#define TRACE_TYPE_SCO_RX 0x00000013
-
-
-#define TRACE_TYPE_MAX_NUM 20
-#define TRACE_TYPE_ALL 0xffff
-
-/* Define color for script type */
-#define SCR_COLOR_DEFAULT 0
-#define SCR_COLOR_TYPE_COMMENT 1
-#define SCR_COLOR_TYPE_COMMAND 2
-#define SCR_COLOR_TYPE_EVENT 3
-#define SCR_COLOR_TYPE_SELECT 4
-
-/* Define protocol trace flag values */
-#define SCR_PROTO_TRACE_HCI_SUMMARY 0x00000001
-#define SCR_PROTO_TRACE_HCI_DATA 0x00000002
-#define SCR_PROTO_TRACE_L2CAP 0x00000004
-#define SCR_PROTO_TRACE_RFCOMM 0x00000008
-#define SCR_PROTO_TRACE_SDP 0x00000010
-#define SCR_PROTO_TRACE_TCS 0x00000020
-#define SCR_PROTO_TRACE_OBEX 0x00000040
-#define SCR_PROTO_TRACE_OAPP 0x00000080 /* OBEX Application Profile */
-#define SCR_PROTO_TRACE_AMP 0x00000100
-#define SCR_PROTO_TRACE_BNEP 0x00000200
-#define SCR_PROTO_TRACE_AVP 0x00000400
-#define SCR_PROTO_TRACE_MCA 0x00000800
-#define SCR_PROTO_TRACE_ATT 0x00001000
-#define SCR_PROTO_TRACE_SMP 0x00002000
-#define SCR_PROTO_TRACE_NCI 0x00004000
-#define SCR_PROTO_TRACE_LLCP 0x00008000
-#define SCR_PROTO_TRACE_NDEF 0x00010000
-#define SCR_PROTO_TRACE_RW 0x00020000
-#define SCR_PROTO_TRACE_CE 0x00040000
-#define SCR_PROTO_TRACE_SNEP 0x00080000
-#define SCR_PROTO_TRACE_CHO 0x00100000
-#define SCR_PROTO_TRACE_ALL 0x001fffff
-#define SCR_PROTO_TRACE_HCI_LOGGING_VSE 0x0800 /* Brcm vs event for logmsg and protocol traces */
-
-#define MAX_SCRIPT_TYPE 5
-
-#define TCS_PSM_INTERCOM 5
-#define TCS_PSM_CORDLESS 7
-#define BT_PSM_BNEP 0x000F
-/* Define PSMs HID uses */
-#define HID_PSM_CONTROL 0x0011
-#define HID_PSM_INTERRUPT 0x0013
-
-#if defined(UCD_HID_INCLUDED) && (UCD_HID_INCLUDED == TRUE)
-#define UCD_PSM_MIN 0x8003
-#define UCD_PSM_MAX 0x8003
-#define UCD_PSM_HID 0x8003
-#endif
-
-/* Define a function for logging */
-typedef void (BT_LOG_FUNC) (int trace_type, const char *fmt_str, ...);
-
-#endif
-
diff --git a/halimpl/bcm2079x/include/btdisp_lock.h b/halimpl/bcm2079x/include/btdisp_lock.h
deleted file mode 100644
index 97f2cfe..0000000
--- a/halimpl/bcm2079x/include/btdisp_lock.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2001-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Critical section definitions for btdisp functions.
- *
- ******************************************************************************/
-
-#ifndef BTDISP_LOCK
-#define BTDISP_LOCK
-
-
-#ifdef TESTER
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// External function declaration
-extern void btdisp_lock();
-extern void btdisp_unlock();
-extern void btdisp_init();
-extern void btdisp_uninit();
-
-#ifdef __cplusplus
-}
-#endif
-
-// Lock Macros
-#define BTDISP_LOCK_LOG() btdisp_lock();
-#define BTDISP_UNLOCK_LOG() btdisp_unlock();
-#define BTDISP_INIT_LOCK() btdisp_init();
-#define BTDISP_UNINIT_LOCK() btdisp_uninit();
-
-#else
-
-#define BTDISP_LOCK_LOG()
-#define BTDISP_UNLOCK_LOG()
-#define BTDISP_INIT_LOCK()
-#define BTDISP_UNINIT_LOCK()
-
-#endif
-
-
-
-#endif // BTDISP_LOCK
diff --git a/halimpl/bcm2079x/include/buildcfg.h b/halimpl/bcm2079x/include/buildcfg.h
index d3829cc..c49bb60 100644
--- a/halimpl/bcm2079x/include/buildcfg.h
+++ b/halimpl/bcm2079x/include/buildcfg.h
@@ -20,7 +20,6 @@
#include <memory.h>
#include <stdio.h>
#include "data_types.h"
-#include "btdisp_lock.h"
#define BTE_APPL_MAX_USERIAL_DEV_NAME (256)
@@ -31,9 +30,10 @@
extern UINT8 *scru_dump_hex (UINT8 *p, char *p_title, UINT32 len, UINT32 trace_layer, UINT32 trace_type);
+void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
+#define DISP_NCI (DispNci)
#ifdef __cplusplus
};
#endif
-
diff --git a/halimpl/bcm2079x/include/buildcfg_hal.h b/halimpl/bcm2079x/include/buildcfg_hal.h
index e987434..590438b 100644
--- a/halimpl/bcm2079x/include/buildcfg_hal.h
+++ b/halimpl/bcm2079x/include/buildcfg_hal.h
@@ -17,6 +17,8 @@
******************************************************************************/
//override any HAL-specific macros
#pragma once
+
+
#include "bt_types.h"
//NFC_HAL_TASK=0 is already defined in gki_hal_target.h; it executes the Broadcom HAL
diff --git a/halimpl/bcm2079x/include/config.h b/halimpl/bcm2079x/include/config.h
deleted file mode 100644
index 12f54a4..0000000
--- a/halimpl/bcm2079x/include/config.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-int GetStrValue(const char* name, char* p_value, unsigned long len);
-int GetNumValue(const char* name, void* p_value, unsigned long len);
-
-#ifdef __cplusplus
-};
-#endif
-
-#define NAME_USE_NXP_P2P_RC_WORKAROUND "USE_NXP_P2P_RC_WORKAROUND"
-#define NAME_NFA_DM_ENABLE_SLEEP "NFA_DM_ENABLE_SLEEP"
-#define NAME_ENABLE_BRCM_EXTRAS_API "ENABLE_BRCM_EXTRAS_API"
-#define NAME_POLLING_TECH_MASK "POLLING_TECH_MASK"
-#define NAME_REGISTER_VIRTUAL_SE "REGISTER_VIRTUAL_SE"
-#define NAME_APPL_TRACE_LEVEL "APPL_TRACE_LEVEL"
-#define NAME_LPTD_CFG "LPTD_CFG"
-#define NAME_SCREEN_OFF_POWER_STATE "SCREEN_OFF_POWER_STATE"
-#define NAME_UICC_IDLE_TIMEOUT "UICC_IDLE_TIMEOUT"
-#define NAME_PREINIT_DSP_CFG "PREINIT_DSP_CFG"
-#define NAME_DTA_START_CFG "DTA_START_CFG"
-#define NAME_TRANSPORT_DRIVER "TRANSPORT_DRIVER"
-#define NAME_POWER_CONTROL_DRIVER "POWER_CONTROL_DRIVER"
-#define NAME_PROTOCOL_TRACE_LEVEL "PROTOCOL_TRACE_LEVEL"
-#define NAME_UART_PORT "UART_PORT"
-#define NAME_UART_BAUD "UART_BAUD"
-#define NAME_UART_PARITY "UART_PARITY"
-#define NAME_UART_STOPBITS "UART_STOPBITS"
-#define NAME_UART_DATABITS "UART_DATABITS"
-#define NAME_CLIENT_ADDRESS "BCMI2CNFC_ADDRESS"
-#define NAME_NFA_DM_START_UP_CFG "NFA_DM_START_UP_CFG"
-#define NAME_NFA_DM_CFG "NFA_DM_CFG"
-#define NAME_NFA_DM_LP_CFG "NFA_DM_LP_CFG"
-#define NAME_LOW_SPEED_TRANSPORT "LOW_SPEED_TRANSPORT"
-#define NAME_NFC_WAKE_DELAY "NFC_WAKE_DELAY"
-#define NAME_NFC_WRITE_DELAY "NFC_WRITE_DELAY"
-#define NAME_PERF_MEASURE_FREQ "REPORT_PERFORMANCE_MEASURE"
-#define NAME_READ_MULTI_PACKETS "READ_MULTIPLE_PACKETS"
-#define NAME_POWER_ON_DELAY "POWER_ON_DELAY"
-#define NAME_PRE_POWER_OFF_DELAY "PRE_POWER_OFF_DELAY"
-#define NAME_POST_POWER_OFF_DELAY "POST_POWER_OFF_DELAY"
-#define NAME_NFA_STORAGE "NFA_STORAGE"
-#define NAME_NFA_DM_START_UP_VSC_CFG "NFA_DM_START_UP_VSC_CFG"
-#define NAME_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
-#define NAME_SNOOZE_MODE_CFG "SNOOZE_MODE_CFG"
-#define NAME_XTAL_FREQUENCY "XTAL_FREQUENCY"
-#define NAME_SPD_DEBUG "SPD_DEBUG"
-#define NAME_SPD_MAXRETRYCOUNT "SPD_MAX_RETRY_COUNT"
-#define NAME_SPI_NEGOTIATION "SPI_NEGOTIATION"
-
-#define LPTD_PARAM_LEN (40)
-
-// default configuration
-#define default_transport "/dev/bcm2079x"
-#define default_storage_location "/data/nfc"
-
-struct tUART_CONFIG {
- int m_iBaudrate; // 115200
- int m_iDatabits; // 8
- int m_iParity; // 0 - none, 1 = odd, 2 = even
- int m_iStopbits;
-};
-
-extern struct tUART_CONFIG uartConfig;
-#define MAX_CHIPID_LEN (16)
-void readOptionalConfig(const char* option);
-
-/* Snooze mode configuration structure */
-typedef struct
-{
- unsigned char snooze_mode; /* Snooze Mode */
- unsigned char idle_threshold_dh; /* Idle Threshold Host */
- unsigned char idle_threshold_nfcc; /* Idle Threshold NFCC */
- unsigned char nfc_wake_active_mode; /* NFC_LP_ACTIVE_LOW or NFC_LP_ACTIVE_HIGH */
- unsigned char dh_wake_active_mode; /* NFC_LP_ACTIVE_LOW or NFC_LP_ACTIVE_HIGH */
-} tSNOOZE_MODE_CONFIG;
-#endif
diff --git a/halimpl/bcm2079x/include/dyn_mem.h b/halimpl/bcm2079x/include/dyn_mem.h
deleted file mode 100644
index 2ee0169..0000000
--- a/halimpl/bcm2079x/include/dyn_mem.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef DYN_MEM_H
-#define DYN_MEM_H
-
-/****************************************************************************
-** Define memory usage for GKI (if not defined in buildcfg.h)
-** The default for GKI is to use static memory allocation for its control
-** block.
-*/
-#ifndef GKI_DYNAMIC_MEMORY
-#define GKI_DYNAMIC_MEMORY FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for each CORE component (if not defined in buildcfg.h)
-** The default for each component is to use static memory allocations.
-*/
-#ifndef BTU_DYNAMIC_MEMORY
-#define BTU_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef BTM_DYNAMIC_MEMORY
-#define BTM_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef SDP_DYNAMIC_MEMORY
-#define SDP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef L2C_DYNAMIC_MEMORY
-#define L2C_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef A2MP_DYNAMIC_MEMORY
-#define A2MP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef RFC_DYNAMIC_MEMORY
-#define RFC_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef TCS_DYNAMIC_MEMORY
-#define TCS_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef OBX_DYNAMIC_MEMORY
-#define OBX_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef BNEP_DYNAMIC_MEMORY
-#define BNEP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef AVDT_DYNAMIC_MEMORY
-#define AVDT_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef AVCT_DYNAMIC_MEMORY
-#define AVCT_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef MCA_DYNAMIC_MEMORY
-#define MCA_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef GATT_DYNAMIC_MEMORY
-#define GATT_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef SMP_DYNAMIC_MEMORY
-#define SMP_DYNAMIC_MEMORY FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for each PROFILE component (if not defined in buildcfg.h)
-** The default for each component is to use static memory allocations.
-*/
-#ifndef A2D_DYNAMIC_MEMORY
-#define A2D_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef VDP_DYNAMIC_MEMORY
-#define VDP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef AVRC_DYNAMIC_MEMORY
-#define AVRC_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef BIP_DYNAMIC_MEMORY
-#define BIP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef BPP_DYNAMIC_MEMORY
-#define BPP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef CTP_DYNAMIC_MEMORY
-#define CTP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef DUN_DYNAMIC_MEMORY
-#define DUN_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef FTP_DYNAMIC_MEMORY
-#define FTP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef GAP_DYNAMIC_MEMORY
-#define GAP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef GOEP_DYNAMIC_MEMORY
-#define GOEP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef HCRP_DYNAMIC_MEMORY
-#define HCRP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef HFP_DYNAMIC_MEMORY
-#define HFP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef HID_DYNAMIC_MEMORY
-#define HID_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef HSP2_DYNAMIC_MEMORY
-#define HSP2_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef ICP_DYNAMIC_MEMORY
-#define ICP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef OPP_DYNAMIC_MEMORY
-#define OPP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef PAN_DYNAMIC_MEMORY
-#define PAN_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef SPP_DYNAMIC_MEMORY
-#define SPP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef SLIP_DYNAMIC_MEMORY
-#define SLIP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef LLCP_DYNAMIC_MEMORY
-#define LLCP_DYNAMIC_MEMORY FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for BTA (if not defined in buildcfg.h)
-** The default for each component is to use static memory allocations.
-*/
-#ifndef BTA_DYNAMIC_MEMORY
-#define BTA_DYNAMIC_MEMORY FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for BT Trace (if not defined in buildcfg.h)
-** The default is to use static memory allocations.
-*/
-#ifndef BTTRC_DYNAMIC_MEMORY
-#define BTTRC_DYNAMIC_MEMORY FALSE
-#endif
-
-#endif /* #ifdef DYN_MEM_H */
-
diff --git a/halimpl/bcm2079x/include/hcidefs.h b/halimpl/bcm2079x/include/hcidefs.h
deleted file mode 100644
index cc3b09f..0000000
--- a/halimpl/bcm2079x/include/hcidefs.h
+++ /dev/null
@@ -1,2377 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-#ifndef HCIDEFS_H
-#define HCIDEFS_H
-
-#define HCI_PROTO_VERSION 0x01 /* Version for BT spec 1.1 */
-#define HCI_PROTO_VERSION_1_2 0x02 /* Version for BT spec 1.2 */
-#define HCI_PROTO_VERSION_2_0 0x03 /* Version for BT spec 2.0 */
-#define HCI_PROTO_VERSION_2_1 0x04 /* Version for BT spec 2.1 [Lisbon] */
-#define HCI_PROTO_VERSION_3_0 0x05 /* Version for BT spec 3.0 */
-#define HCI_PROTO_REVISION 0x000C /* Current implementation version */
-/*
-** Definitions for HCI groups
-*/
-#define HCI_GRP_LINK_CONTROL_CMDS (0x01 << 10) /* 0x0400 */
-#define HCI_GRP_LINK_POLICY_CMDS (0x02 << 10) /* 0x0800 */
-#define HCI_GRP_HOST_CONT_BASEBAND_CMDS (0x03 << 10) /* 0x0C00 */
-#define HCI_GRP_INFORMATIONAL_PARAMS (0x04 << 10) /* 0x1000 */
-#define HCI_GRP_STATUS_PARAMS (0x05 << 10) /* 0x1400 */
-#define HCI_GRP_TESTING_CMDS (0x06 << 10) /* 0x1800 */
-
-#define HCI_GRP_VENDOR_SPECIFIC (0x3F << 10) /* 0xFC00 */
-
-/* Group occupies high 6 bits of the HCI command rest is opcode itself */
-#define HCI_OGF(p) (UINT8)((0xFC00 & (p)) >> 10)
-#define HCI_OCF(p) ( 0x3FF & (p))
-
-/*
-** Defentions for Link Control Commands
-*/
-/* Following opcode is used only in command complete event for flow control */
-#define HCI_COMMAND_NONE 0x0000
-
-/* Commands of HCI_GRP_LINK_CONTROL_CMDS group */
-#define HCI_INQUIRY (0x0001 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_INQUIRY_CANCEL (0x0002 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_PERIODIC_INQUIRY_MODE (0x0003 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_EXIT_PERIODIC_INQUIRY_MODE (0x0004 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CREATE_CONNECTION (0x0005 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_DISCONNECT (0x0006 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ADD_SCO_CONNECTION (0x0007 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CREATE_CONNECTION_CANCEL (0x0008 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_CONNECTION_REQUEST (0x0009 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REJECT_CONNECTION_REQUEST (0x000A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_LINK_KEY_REQUEST_REPLY (0x000B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_LINK_KEY_REQUEST_NEG_REPLY (0x000C | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_PIN_CODE_REQUEST_REPLY (0x000D | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_PIN_CODE_REQUEST_NEG_REPLY (0x000E | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CHANGE_CONN_PACKET_TYPE (0x000F | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_AUTHENTICATION_REQUESTED (0x0011 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_SET_CONN_ENCRYPTION (0x0013 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CHANGE_CONN_LINK_KEY (0x0015 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_MASTER_LINK_KEY (0x0017 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_RMT_NAME_REQUEST (0x0019 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_RMT_NAME_REQUEST_CANCEL (0x001A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_FEATURES (0x001B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_EXT_FEATURES (0x001C | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_VERSION_INFO (0x001D | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_CLOCK_OFFSET (0x001F | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_LMP_HANDLE (0x0020 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_SETUP_ESCO_CONNECTION (0x0028 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_ESCO_CONNECTION (0x0029 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REJECT_ESCO_CONNECTION (0x002A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_IO_CAPABILITY_RESPONSE (0x002B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_CONF_REQUEST_REPLY (0x002C | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_CONF_VALUE_NEG_REPLY (0x002D | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_PASSKEY_REQ_REPLY (0x002E | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_PASSKEY_REQ_NEG_REPLY (0x002F | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REM_OOB_DATA_REQ_REPLY (0x0030 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REM_OOB_DATA_REQ_NEG_REPLY (0x0033 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_IO_CAP_REQ_NEG_REPLY (0x0034 | HCI_GRP_LINK_CONTROL_CMDS)
-
-/* AMP HCI */
-#define HCI_CREATE_PHYSICAL_LINK (0x0035 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_PHYSICAL_LINK (0x0036 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_DISCONNECT_PHYSICAL_LINK (0x0037 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CREATE_LOGICAL_LINK (0x0038 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_LOGICAL_LINK (0x0039 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_DISCONNECT_LOGICAL_LINK (0x003A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_LOGICAL_LINK_CANCEL (0x003B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_FLOW_SPEC_MODIFY (0x003C | HCI_GRP_LINK_CONTROL_CMDS)
-
-#define HCI_LINK_CTRL_CMDS_FIRST HCI_INQUIRY
-#define HCI_LINK_CTRL_CMDS_LAST HCI_FLOW_SPEC_MODIFY
-
-/* Commands of HCI_GRP_LINK_POLICY_CMDS */
-#define HCI_HOLD_MODE (0x0001 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_SNIFF_MODE (0x0003 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_EXIT_SNIFF_MODE (0x0004 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_PARK_MODE (0x0005 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_EXIT_PARK_MODE (0x0006 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_QOS_SETUP (0x0007 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_ROLE_DISCOVERY (0x0009 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_SWITCH_ROLE (0x000B | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_READ_POLICY_SETTINGS (0x000C | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_WRITE_POLICY_SETTINGS (0x000D | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_READ_DEF_POLICY_SETTINGS (0x000E | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_WRITE_DEF_POLICY_SETTINGS (0x000F | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_FLOW_SPECIFICATION (0x0010 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_SNIFF_SUB_RATE (0x0011 | HCI_GRP_LINK_POLICY_CMDS)
-
-#define HCI_LINK_POLICY_CMDS_FIRST HCI_HOLD_MODE
-#define HCI_LINK_POLICY_CMDS_LAST HCI_SNIFF_SUB_RATE
-
-
-/* Commands of HCI_GRP_HOST_CONT_BASEBAND_CMDS */
-#define HCI_SET_EVENT_MASK (0x0001 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_RESET (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_EVENT_FILTER (0x0005 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_FLUSH (0x0008 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PIN_TYPE (0x0009 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PIN_TYPE (0x000A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_CREATE_NEW_UNIT_KEY (0x000B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_STORED_LINK_KEY (0x000D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_STORED_LINK_KEY (0x0011 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_DELETE_STORED_LINK_KEY (0x0012 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_CHANGE_LOCAL_NAME (0x0013 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCAL_NAME (0x0014 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_CONN_ACCEPT_TOUT (0x0015 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_CONN_ACCEPT_TOUT (0x0016 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGE_TOUT (0x0017 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGE_TOUT (0x0018 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_SCAN_ENABLE (0x0019 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_SCAN_ENABLE (0x001A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_CFG (0x001B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_CFG (0x001C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_INQUIRYSCAN_CFG (0x001D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQUIRYSCAN_CFG (0x001E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_AUTHENTICATION_ENABLE (0x001F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_AUTHENTICATION_ENABLE (0x0020 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_ENCRYPTION_MODE (0x0021 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_ENCRYPTION_MODE (0x0022 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_CLASS_OF_DEVICE (0x0023 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_CLASS_OF_DEVICE (0x0024 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_VOICE_SETTINGS (0x0025 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_VOICE_SETTINGS (0x0026 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_AUTO_FLUSH_TOUT (0x0027 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_AUTO_FLUSH_TOUT (0x0028 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_NUM_BCAST_REXMITS (0x0029 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_NUM_BCAST_REXMITS (0x002A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_HOLD_MODE_ACTIVITY (0x002B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_HOLD_MODE_ACTIVITY (0x002C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_TRANSMIT_POWER_LEVEL (0x002D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_SCO_FLOW_CTRL_ENABLE (0x002E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_SCO_FLOW_CTRL_ENABLE (0x002F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_HC_TO_HOST_FLOW_CTRL (0x0031 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_HOST_BUFFER_SIZE (0x0033 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_HOST_NUM_PACKETS_DONE (0x0035 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LINK_SUPER_TOUT (0x0036 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LINK_SUPER_TOUT (0x0037 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_NUM_SUPPORTED_IAC (0x0038 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_CURRENT_IAC_LAP (0x0039 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_CURRENT_IAC_LAP (0x003A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_PERIOD_MODE (0x003B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_PERIOD_MODE (0x003C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_MODE (0x003D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_MODE (0x003E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_AFH_CHANNELS (0x003F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-
-#define HCI_READ_INQSCAN_TYPE (0x0042 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQSCAN_TYPE (0x0043 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_INQUIRY_MODE (0x0044 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQUIRY_MODE (0x0045 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_TYPE (0x0046 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_TYPE (0x0047 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_AFH_ASSESSMENT_MODE (0x0048 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_AFH_ASSESSMENT_MODE (0x0049 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_EXT_INQ_RESPONSE (0x0051 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_EXT_INQ_RESPONSE (0x0052 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_REFRESH_ENCRYPTION_KEY (0x0053 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_SIMPLE_PAIRING_MODE (0x0055 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_SIMPLE_PAIRING_MODE (0x0056 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCAL_OOB_DATA (0x0057 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_INQ_TX_POWER_LEVEL (0x0058 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQ_TX_POWER_LEVEL (0x0059 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_ERRONEOUS_DATA_RPT (0x005A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_ERRONEOUS_DATA_RPT (0x005B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_ENHANCED_FLUSH (0x005F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SEND_KEYPRESS_NOTIF (0x0060 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-
-
-/* AMP HCI */
-#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0061 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0062 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_EVENT_MASK_PAGE_2 (0x0063 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCATION_DATA (0x0064 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOCATION_DATA (0x0065 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_FLOW_CONTROL_MODE (0x0066 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_FLOW_CONTROL_MODE (0x0067 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_BE_FLUSH_TOUT (0x0069 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_BE_FLUSH_TOUT (0x006A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SHORT_RANGE_MODE (0x006B | HCI_GRP_HOST_CONT_BASEBAND_CMDS) /* 802.11 only */
-
-#define HCI_CONT_BASEBAND_CMDS_FIRST HCI_SET_EVENT_MASK
-#define HCI_CONT_BASEBAND_CMDS_LAST HCI_SHORT_RANGE_MODE
-
-
-/* Commands of HCI_GRP_INFORMATIONAL_PARAMS group */
-#define HCI_READ_LOCAL_VERSION_INFO (0x0001 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_LOCAL_SUPPORTED_CMDS (0x0002 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_LOCAL_FEATURES (0x0003 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_LOCAL_EXT_FEATURES (0x0004 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_BUFFER_SIZE (0x0005 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_COUNTRY_CODE (0x0007 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_BD_ADDR (0x0009 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_DATA_BLOCK_SIZE (0x000A | HCI_GRP_INFORMATIONAL_PARAMS)
-
-#define HCI_INFORMATIONAL_CMDS_FIRST HCI_READ_LOCAL_VERSION_INFO
-#define HCI_INFORMATIONAL_CMDS_LAST HCI_READ_BD_ADDR
-
-
-/* Commands of HCI_GRP_STATUS_PARAMS group */
-#define HCI_READ_FAILED_CONTACT_COUNT (0x0001 | HCI_GRP_STATUS_PARAMS)
-#define HCI_RESET_FAILED_CONTACT_COUNT (0x0002 | HCI_GRP_STATUS_PARAMS)
-#define HCI_GET_LINK_QUALITY (0x0003 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_RSSI (0x0005 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_AFH_CH_MAP (0x0006 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_CLOCK (0x0007 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_ENCR_KEY_SIZE (0x0008 | HCI_GRP_STATUS_PARAMS)
-
-/* AMP HCI */
-#define HCI_READ_LOCAL_AMP_INFO (0x0009 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_LOCAL_AMP_ASSOC (0x000A | HCI_GRP_STATUS_PARAMS)
-#define HCI_WRITE_REMOTE_AMP_ASSOC (0x000B | HCI_GRP_STATUS_PARAMS)
-
-#define HCI_STATUS_PARAMS_CMDS_FIRST HCI_READ_FAILED_CONTACT_COUNT
-#define HCI_STATUS_PARAMS_CMDS_LAST HCI_WRITE_REMOTE_AMP_ASSOC
-
-/* Commands of HCI_GRP_TESTING_CMDS group */
-#define HCI_READ_LOOPBACK_MODE (0x0001 | HCI_GRP_TESTING_CMDS)
-#define HCI_WRITE_LOOPBACK_MODE (0x0002 | HCI_GRP_TESTING_CMDS)
-#define HCI_ENABLE_DEV_UNDER_TEST_MODE (0x0003 | HCI_GRP_TESTING_CMDS)
-#define HCI_WRITE_SIMP_PAIR_DEBUG_MODE (0x0004 | HCI_GRP_TESTING_CMDS)
-
-/* AMP HCI */
-#define HCI_ENABLE_AMP_RCVR_REPORTS (0x0007 | HCI_GRP_TESTING_CMDS)
-#define HCI_AMP_TEST_END (0x0008 | HCI_GRP_TESTING_CMDS)
-#define HCI_AMP_TEST (0x0009 | HCI_GRP_TESTING_CMDS)
-
-#define HCI_TESTING_CMDS_FIRST HCI_READ_LOOPBACK_MODE
-#define HCI_TESTING_CMDS_LAST HCI_AMP_TEST
-
-#define HCI_VENDOR_CMDS_FIRST 0x0001
-#define HCI_VENDOR_CMDS_LAST 0xFFFF
-#define HCI_VSC_MULTI_AV_HANDLE 0x0AAA
-#define HCI_VSC_BURST_MODE_HANDLE 0x0BBB
-
-/* BLE HCI */
-#define HCI_GRP_BLE_CMDS (0x08 << 10)
-/* Commands of BLE Controller setup and configuration */
-#define HCI_BLE_SET_EVENT_MASK (0x0001 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_BUFFER_SIZE (0x0002 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_LOCAL_SPT_FEAT (0x0003 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_LOCAL_SPT_FEAT (0x0004 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_RANDOM_ADDR (0x0005 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_ADV_PARAMS (0x0006 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_ADV_CHNL_TX_POWER (0x0007 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_ADV_DATA (0x0008 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_SCAN_RSP_DATA (0x0009 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_ADV_ENABLE (0x000A | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_SCAN_PARAMS (0x000B | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_SCAN_ENABLE (0x000C | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_CREATE_LL_CONN (0x000D | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_CREATE_CONN_CANCEL (0x000E | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_WHITE_LIST_SIZE (0x000F | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_CLEAR_WHITE_LIST (0x0010 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_ADD_WHITE_LIST (0x0011 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_REMOVE_WHITE_LIST (0x0012 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_UPD_LL_CONN_PARAMS (0x0013 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_SET_HOST_CHNL_CLASS (0x0014 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_CHNL_MAP (0x0015 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_REMOTE_FEAT (0x0016 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_ENCRYPT (0x0017 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_RAND (0x0018 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_START_ENC (0x0019 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_LTK_REQ_REPLY (0x001A | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_LTK_REQ_NEG_REPLY (0x001B | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_SUPPORTED_STATES (0x001C | HCI_GRP_BLE_CMDS)
-
-#define HCI_BLE_RESET (0x0020 | HCI_GRP_BLE_CMDS)
-
-/* LE supported states definition */
-#define HCI_LE_ADV_STATE 0x00000001
-#define HCI_LE_SCAN_STATE 0x00000002
-#define HCI_LE_INIT_STATE 0x00000004
-#define HCI_LE_CONN_SL_STATE 0x00000008
-#define HCI_LE_ADV_SCAN_STATE 0x00000010
-#define HCI_LE_ADV_INIT_STATE 0x00000020
-#define HCI_LE_ADV_MA_STATE 0x00000040
-#define HCI_LE_ADV_SL_STATE 0x00000080
-#define HCI_LE_SCAN_INIT_STATE 0x00000100
-#define HCI_LE_SCAN_MA_STATE 0x00000200
-#define HCI_LE_SCAN_SL_STATE 0x00000400
-#define HCI_LE_INIT_MA_STATE 0x00000800
-
-/* Vendor specific commands for BRCM chipset */
-#define HCI_BRCM_UPDATE_BAUD_RATE_ENCODED_LENGTH 0x02
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH 0x06
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH 12
-#define HCI_BRCM_ENABLE_H4IBSS_LENGTH 7
-#define HCI_BRCM_CUSTOMER_EXT (0x0000 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FM_OPCODE (0x0015 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FMTX_OPCODE (0x0082 | HCI_GRP_VENDOR_SPECIFIC) /* FMTX VSC opcode */
-#define HCI_BRCM_UPDATE_BAUDRATE_CMD (0x0018 | HCI_GRP_VENDOR_SPECIFIC) /* set baudrate of BCM2035 */
-#define HCI_BRCM_WRITE_SCO_PCM_INT_PARAM (0x001C | HCI_GRP_VENDOR_SPECIFIC) /* set SCO interface param */
-#define HCI_BRCM_READ_SCO_PCM_INT_PARAM (0x001D | HCI_GRP_VENDOR_SPECIFIC) /* read SCO interface param */
-#define HCI_BRCM_WRITE_SLEEP_MODE (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_SLEEP_MODE (0x0028 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_H4IBSS_CMD (0x0029 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DOWNLOAD_MINI_DRV (0x002E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_USER_DEFINED_NVRAM (0x0033 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_RADIO (0x0034 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_DIAGNOSTIC_VALUE (0x0035 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GET_HID_DEVICE_LIST (0x0036 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ADD_HID_DEVICE (0x0037 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_HID_DEVICE_NVRAM (0x0038 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DELETE_HID_DEVICE (0x0039 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_USB_HID_EMULATION (0x003B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_RAM (0x004C | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_LAUNCH_RAM (0x004E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_BTW_STARTUP (0x0053 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_ACL_PRIORITY (0x0057 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_SEC_MODE (0x0096 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_H4IBSS (0x00D4 | HCI_GRP_VENDOR_SPECIFIC)
-
-#define HCI_BRCM_SUPER_PEEK_POKE (0x000A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_ARM_MEM_PEEK 0x04
-#define HCI_ARM_MEM_POKE 0x05
-#define HCI_BRCM_SUPER_PEEK_POKE_LENGTH 9
-
-#define HCI_BRCM_WRITE_I2SPCM_INTF_PARAM (0x006D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_CONTROLLER_FEATURES (0x006E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FEATURE_NFC_MASK 0x10
-#define HCI_BRCM_FEATURE_NFC_OFF 0
-
-#define HCI_BRCM_READ_VERBOSE_CFG_VER_INFO (0x0079 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* Dual Stack */
-#define HCI_BRCM_PAUSE_TRANSPORT (0x007A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_RESUME (0x007B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_ERROR_EVT 0x0C
-
-#define HCI_BRCM_TX_POWER_OPCODE (0x007D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_WBS (0x007E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI (0x008B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_AUDIO_ROUTE_INFO (0x00A2 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI_EVT 0x1A
-#define HCI_BRCM_ENCAPSULATED_HCI (0x00A3 | HCI_GRP_VENDOR_SPECIFIC)
-/* VSE subcode - VSE format FF [len] [subcode] [vse params...] */
-#define HCI_BRCM_ENCAPSULATED_HCI_EVT 0x1E
-
-/* PCM2 Setup */
-#define HCI_BRCM_PCM2_SETUP (0x00AE | HCI_GRP_VENDOR_SPECIFIC)
-
-/* BRR */
-#define HCI_BRCM_SET_BRR (0x00AA | HCI_GRP_VENDOR_SPECIFIC)
-
-/* 3DTV */
-#define HCI_BRCM_3D_CTRL (0x00B7 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_3D_OFFSET_DELAY (0x00D6 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* GPS */
-#define HCI_BRCM_GPS_DATA (0x0089 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GPS_SENSOR_OPCODE (0x008F | HCI_GRP_VENDOR_SPECIFIC) /* GPS sensor VSC opcode */
-
-/* MIP: Multicast Individual Polling */
-#define HCI_BRCM_INIT_MIP (0x00DC | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_OPEN_CMD (0x00DD | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_CLOSE_CMD (0x00DE | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_ENC_KEY_CMD (0x00DF | HCI_GRP_VENDOR_SPECIFIC)
-
-/* MIP-related definitions */
-#define BRCM_MIP_ROLE_MASTER 0x00
-#define BRCM_MIP_ROLE_SLAVE 0x01
-
-#define BRCM_MIP_MODE_A2DP 0x00
-#define BRCM_MIP_MODE_3DG 0x01
-#define BRCM_MIP_MODE_CMBO 0x02 /* A2DP + 3DG */
-
-/* Parameter information for HCI_BRCM_SET_ACL_PRIORITY */
-#define HCI_BRCM_ACL_PRIORITY_PARAM_SIZE 3
-#define HCI_BRCM_ACL_PRIORITY_LOW 0x00
-#define HCI_BRCM_ACL_PRIORITY_HIGH 0xFF
-
-#define HCI_BRCM_PAUSE_TRANSPORT_LENGTH 6
-
-/* Parameter information for HCI_BRCM_SCO_PCM_INT_PARAM */
-#define HCI_BRCM_SCO_PCM_PARAM_SIZE 5
-#define HCI_BRCM_SCO_ROUTE_PCM 0
-#define HCI_BRCM_SCO_ROUTE_HCI 1
-
-/* Parameter information for HCI_BRCM_WRITE_I2SPCM_INTF_PARAM */
-#define HCI_BRCM_I2SPCM_PARAM_SIZE 4
-#define HCI_BRCM_I2SPCM_I2S_DISABLE 0
-#define HCI_BRCM_I2SPCM_I2S_ENABLE 1
-#define HCI_BRCM_I2SPCM_IS_SLAVE 0
-#define HCI_BRCM_I2SPCM_IS_MASTER 1
-#define HCI_BRCM_I2SPCM_IS_DEFAULT_ROLE 2
-#define HCI_BRCM_I2SPCM_SAMPLE_8K 0
-#define HCI_BRCM_I2SPCM_SAMPLE_16K 1
-#define HCI_BRCM_I2SPCM_SAMPLE_4K 2
-#define HCI_BRCM_I2SPCM_SAMPLE_DEFAULT 3
-#define HCI_BRCM_I2SPCM_CLOCK_128K 0
-#define HCI_BRCM_I2SPCM_CLOCK_256K 1
-#define HCI_BRCM_I2SPCM_CLOCK_512K 2
-#define HCI_BRCM_I2SPCM_CLOCK_1024K 3
-#define HCI_BRCM_I2SPCM_CLOCK_2048K 4
-#define HCI_BRCM_I2SPCM_CLOCK_DEFAULT 5
-
-/*
-** Definitions for HCI Events
-*/
-#define HCI_INQUIRY_COMP_EVT 0x01
-#define HCI_INQUIRY_RESULT_EVT 0x02
-#define HCI_CONNECTION_COMP_EVT 0x03
-#define HCI_CONNECTION_REQUEST_EVT 0x04
-#define HCI_DISCONNECTION_COMP_EVT 0x05
-#define HCI_AUTHENTICATION_COMP_EVT 0x06
-#define HCI_RMT_NAME_REQUEST_COMP_EVT 0x07
-#define HCI_ENCRYPTION_CHANGE_EVT 0x08
-#define HCI_CHANGE_CONN_LINK_KEY_EVT 0x09
-#define HCI_MASTER_LINK_KEY_COMP_EVT 0x0A
-#define HCI_READ_RMT_FEATURES_COMP_EVT 0x0B
-#define HCI_READ_RMT_VERSION_COMP_EVT 0x0C
-#define HCI_QOS_SETUP_COMP_EVT 0x0D
-#define HCI_COMMAND_COMPLETE_EVT 0x0E
-#define HCI_COMMAND_STATUS_EVT 0x0F
-#define HCI_HARDWARE_ERROR_EVT 0x10
-#define HCI_FLUSH_OCCURED_EVT 0x11
-#define HCI_ROLE_CHANGE_EVT 0x12
-#define HCI_NUM_COMPL_DATA_PKTS_EVT 0x13
-#define HCI_MODE_CHANGE_EVT 0x14
-#define HCI_RETURN_LINK_KEYS_EVT 0x15
-#define HCI_PIN_CODE_REQUEST_EVT 0x16
-#define HCI_LINK_KEY_REQUEST_EVT 0x17
-#define HCI_LINK_KEY_NOTIFICATION_EVT 0x18
-#define HCI_LOOPBACK_COMMAND_EVT 0x19
-#define HCI_DATA_BUF_OVERFLOW_EVT 0x1A
-#define HCI_MAX_SLOTS_CHANGED_EVT 0x1B
-#define HCI_READ_CLOCK_OFF_COMP_EVT 0x1C
-#define HCI_CONN_PKT_TYPE_CHANGE_EVT 0x1D
-#define HCI_QOS_VIOLATION_EVT 0x1E
-#define HCI_PAGE_SCAN_MODE_CHANGE_EVT 0x1F
-#define HCI_PAGE_SCAN_REP_MODE_CHNG_EVT 0x20
-#define HCI_FLOW_SPECIFICATION_COMP_EVT 0x21
-#define HCI_INQUIRY_RSSI_RESULT_EVT 0x22
-#define HCI_READ_RMT_EXT_FEATURES_COMP_EVT 0x23
-#define HCI_ESCO_CONNECTION_COMP_EVT 0x2C
-#define HCI_ESCO_CONNECTION_CHANGED_EVT 0x2D
-#define HCI_SNIFF_SUB_RATE_EVT 0x2E
-#define HCI_EXTENDED_INQUIRY_RESULT_EVT 0x2F
-#define HCI_ENCRYPTION_KEY_REFRESH_COMP_EVT 0x30
-#define HCI_IO_CAPABILITY_REQUEST_EVT 0x31
-#define HCI_IO_CAPABILITY_RESPONSE_EVT 0x32
-#define HCI_USER_CONFIRMATION_REQUEST_EVT 0x33
-#define HCI_USER_PASSKEY_REQUEST_EVT 0x34
-#define HCI_REMOTE_OOB_DATA_REQUEST_EVT 0x35
-#define HCI_SIMPLE_PAIRING_COMPLETE_EVT 0x36
-#define HCI_LINK_SUPER_TOUT_CHANGED_EVT 0x38
-#define HCI_ENHANCED_FLUSH_COMPLETE_EVT 0x39
-#define HCI_USER_PASSKEY_NOTIFY_EVT 0x3B
-#define HCI_KEYPRESS_NOTIFY_EVT 0x3C
-#define HCI_RMT_HOST_SUP_FEAT_NOTIFY_EVT 0x3D
-
-/*#define HCI_GENERIC_AMP_LINK_KEY_NOTIF_EVT 0x3E Removed from spec */
-#define HCI_PHYSICAL_LINK_COMP_EVT 0x40
-#define HCI_CHANNEL_SELECTED_EVT 0x41
-#define HCI_DISC_PHYSICAL_LINK_COMP_EVT 0x42
-#define HCI_PHY_LINK_LOSS_EARLY_WARNING_EVT 0x43
-#define HCI_PHY_LINK_RECOVERY_EVT 0x44
-#define HCI_LOGICAL_LINK_COMP_EVT 0x45
-#define HCI_DISC_LOGICAL_LINK_COMP_EVT 0x46
-#define HCI_FLOW_SPEC_MODIFY_COMP_EVT 0x47
-#define HCI_NUM_COMPL_DATA_BLOCKS_EVT 0x48
-#define HCI_SHORT_RANGE_MODE_COMPLETE_EVT 0x4C
-#define HCI_AMP_STATUS_CHANGE_EVT 0x4D
-
-/* ULP HCI Event */
-#define HCI_BLE_EVENT 0x03E
-/* ULP Event sub code */
-#define HCI_BLE_CONN_COMPLETE_EVT 0x01
-#define HCI_BLE_ADV_PKT_RPT_EVT 0x02
-#define HCI_BLE_LL_CONN_PARAM_UPD_EVT 0x03
-#define HCI_BLE_READ_REMOTE_FEAT_CMPL_EVT 0x04
-#define HCI_BLE_LTK_REQ_EVT 0x05
-
-#define HCI_EVENT_RSP_FIRST HCI_INQUIRY_COMP_EVT
-#define HCI_EVENT_RSP_LAST HCI_AMP_STATUS_CHANGE_EVT
-
-#define HCI_BRCM_H4IBSS_EVT 0xEF /* Vendor specific events for H4IBSS */
-#define HCI_VENDOR_SPECIFIC_EVT 0xFF /* Vendor specific events */
-#define HCI_NAP_TRACE_EVT 0xFF /* was define 0xFE, 0xFD, change to 0xFF
- because conflict w/ TCI_EVT and per
- specification compliant */
-
-
-
-/*
-** Defentions for HCI Error Codes that are past in the events
-*/
-#define HCI_SUCCESS 0x00
-#define HCI_PENDING 0x00
-#define HCI_ERR_ILLEGAL_COMMAND 0x01
-#define HCI_ERR_NO_CONNECTION 0x02
-#define HCI_ERR_HW_FAILURE 0x03
-#define HCI_ERR_PAGE_TIMEOUT 0x04
-#define HCI_ERR_AUTH_FAILURE 0x05
-#define HCI_ERR_KEY_MISSING 0x06
-#define HCI_ERR_MEMORY_FULL 0x07
-#define HCI_ERR_CONNECTION_TOUT 0x08
-#define HCI_ERR_MAX_NUM_OF_CONNECTIONS 0x09
-#define HCI_ERR_MAX_NUM_OF_SCOS 0x0A
-#define HCI_ERR_CONNECTION_EXISTS 0x0B
-#define HCI_ERR_COMMAND_DISALLOWED 0x0C
-#define HCI_ERR_HOST_REJECT_RESOURCES 0x0D
-#define HCI_ERR_HOST_REJECT_SECURITY 0x0E
-#define HCI_ERR_HOST_REJECT_DEVICE 0x0F
-#define HCI_ERR_HOST_TIMEOUT 0x10
-#define HCI_ERR_UNSUPPORTED_VALUE 0x11
-#define HCI_ERR_ILLEGAL_PARAMETER_FMT 0x12
-#define HCI_ERR_PEER_USER 0x13
-#define HCI_ERR_PEER_LOW_RESOURCES 0x14
-#define HCI_ERR_PEER_POWER_OFF 0x15
-#define HCI_ERR_CONN_CAUSE_LOCAL_HOST 0x16
-#define HCI_ERR_REPEATED_ATTEMPTS 0x17
-#define HCI_ERR_PAIRING_NOT_ALLOWED 0x18
-#define HCI_ERR_UNKNOWN_LMP_PDU 0x19
-#define HCI_ERR_UNSUPPORTED_REM_FEATURE 0x1A
-#define HCI_ERR_SCO_OFFSET_REJECTED 0x1B
-#define HCI_ERR_SCO_INTERVAL_REJECTED 0x1C
-#define HCI_ERR_SCO_AIR_MODE 0x1D
-#define HCI_ERR_INVALID_LMP_PARAM 0x1E
-#define HCI_ERR_UNSPECIFIED 0x1F
-#define HCI_ERR_UNSUPPORTED_LMP_FEATURE 0x20
-#define HCI_ERR_ROLE_CHANGE_NOT_ALLOWED 0x21
-#define HCI_ERR_LMP_RESPONSE_TIMEOUT 0x22
-#define HCI_ERR_LMP_ERR_TRANS_COLLISION 0x23
-#define HCI_ERR_LMP_PDU_NOT_ALLOWED 0x24
-#define HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE 0x25
-#define HCI_ERR_UNIT_KEY_USED 0x26
-#define HCI_ERR_QOS_NOT_SUPPORTED 0x27
-#define HCI_ERR_INSTANT_PASSED 0x28
-#define HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29
-#define HCI_ERR_DIFF_TRANSACTION_COLLISION 0x2A
-#define HCI_ERR_UNDEFINED_0x2B 0x2B
-#define HCI_ERR_QOS_UNACCEPTABLE_PARAM 0x2C
-#define HCI_ERR_QOS_REJECTED 0x2D
-#define HCI_ERR_CHAN_CLASSIF_NOT_SUPPORTED 0x2E
-#define HCI_ERR_INSUFFCIENT_SECURITY 0x2F
-#define HCI_ERR_PARAM_OUT_OF_RANGE 0x30
-#define HCI_ERR_UNDEFINED_0x31 0x31
-#define HCI_ERR_ROLE_SWITCH_PENDING 0x32
-#define HCI_ERR_UNDEFINED_0x33 0x33
-#define HCI_ERR_RESERVED_SLOT_VIOLATION 0x34
-#define HCI_ERR_ROLE_SWITCH_FAILED 0x35
-#define HCI_ERR_INQ_RSP_DATA_TOO_LARGE 0x36
-#define HCI_ERR_SIMPLE_PAIRING_NOT_SUPPORTED 0x37
-#define HCI_ERR_HOST_BUSY_PAIRING 0x38
-#define HCI_ERR_REJ_NO_SUITABLE_CHANNEL 0x39
-#define HCI_ERR_CONTROLLER_BUSY 0x3A
-#define HCI_ERR_UNACCEPT_CONN_INTERVAL 0x3B
-#define HCI_ERR_DIRECTED_ADVERTISING_TIMEOUT 0x3C
-#define HCI_ERR_CONN_TOUT_DUE_TO_MIC_FAILURE 0x3D
-#define HCI_ERR_CONN_FAILED_ESTABLISHMENT 0x3E
-#define HCI_ERR_MAC_CONNECTION_FAILED 0x3F
-
-#define HCI_ERR_MAX_ERR 0x40
-
-#define HCI_HINT_TO_RECREATE_AMP_PHYS_LINK 0xFF
-
-/*
-** Definitions for HCI enable event
-*/
-#define HCI_INQUIRY_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00000001)
-#define HCI_INQUIRY_RESULT_EV(p) (*((UINT32 *)(p)) & 0x00000002)
-#define HCI_CONNECTION_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00000004)
-#define HCI_CONNECTION_REQUEST_EV(p) (*((UINT32 *)(p)) & 0x00000008)
-#define HCI_DISCONNECTION_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00000010)
-#define HCI_AUTHENTICATION_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00000020)
-#define HCI_RMT_NAME_REQUEST_COMPL_EV(p) (*((UINT32 *)(p)) & 0x00000040)
-#define HCI_CHANGE_CONN_ENCRPT_ENABLE_EV(p) (*((UINT32 *)(p)) & 0x00000080)
-#define HCI_CHANGE_CONN_LINK_KEY_EV(p) (*((UINT32 *)(p)) & 0x00000100)
-#define HCI_MASTER_LINK_KEY_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00000200)
-#define HCI_READ_RMT_FEATURES_COMPL_EV(p) (*((UINT32 *)(p)) & 0x00000400)
-#define HCI_READ_RMT_VERSION_COMPL_EV(p) (*((UINT32 *)(p)) & 0x00000800)
-#define HCI_QOS_SETUP_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00001000)
-#define HCI_COMMAND_COMPLETE_EV(p) (*((UINT32 *)(p)) & 0x00002000)
-#define HCI_COMMAND_STATUS_EV(p) (*((UINT32 *)(p)) & 0x00004000)
-#define HCI_HARDWARE_ERROR_EV(p) (*((UINT32 *)(p)) & 0x00008000)
-#define HCI_FLASH_OCCURED_EV(p) (*((UINT32 *)(p)) & 0x00010000)
-#define HCI_ROLE_CHANGE_EV(p) (*((UINT32 *)(p)) & 0x00020000)
-#define HCI_NUM_COMPLETED_PKTS_EV(p) (*((UINT32 *)(p)) & 0x00040000)
-#define HCI_MODE_CHANGE_EV(p) (*((UINT32 *)(p)) & 0x00080000)
-#define HCI_RETURN_LINK_KEYS_EV(p) (*((UINT32 *)(p)) & 0x00100000)
-#define HCI_PIN_CODE_REQUEST_EV(p) (*((UINT32 *)(p)) & 0x00200000)
-#define HCI_LINK_KEY_REQUEST_EV(p) (*((UINT32 *)(p)) & 0x00400000)
-#define HCI_LINK_KEY_NOTIFICATION_EV(p) (*((UINT32 *)(p)) & 0x00800000)
-#define HCI_LOOPBACK_COMMAND_EV(p) (*((UINT32 *)(p)) & 0x01000000)
-#define HCI_DATA_BUF_OVERFLOW_EV(p) (*((UINT32 *)(p)) & 0x02000000)
-#define HCI_MAX_SLOTS_CHANGE_EV(p) (*((UINT32 *)(p)) & 0x04000000)
-#define HCI_READ_CLOCK_OFFSET_COMP_EV(p) (*((UINT32 *)(p)) & 0x08000000)
-#define HCI_CONN_PKT_TYPE_CHANGED_EV(p) (*((UINT32 *)(p)) & 0x10000000)
-#define HCI_QOS_VIOLATION_EV(p) (*((UINT32 *)(p)) & 0x20000000)
-#define HCI_PAGE_SCAN_MODE_CHANGED_EV(p) (*((UINT32 *)(p)) & 0x40000000)
-#define HCI_PAGE_SCAN_REP_MODE_CHNG_EV(p) (*((UINT32 *)(p)) & 0x80000000)
-
-/* the default event mask for 2.1+EDR (Lisbon) does not include Lisbon events */
-#define HCI_DEFAULT_EVENT_MASK_0 0xFFFFFFFF
-#define HCI_DEFAULT_EVENT_MASK_1 0x00001FFF
-
-/* the event mask for 2.0 + EDR and later (includes Lisbon events) */
-#define HCI_LISBON_EVENT_MASK_0 0xFFFFFFFF
-#define HCI_LISBON_EVENT_MASK_1 0x1DBFFFFF
-#define HCI_LISBON_EVENT_MASK "\x0D\xBF\xFF\xFF\xFF\xFF\xFF\xFF"
-#define HCI_LISBON_EVENT_MASK_EXT "\x1D\xBF\xFF\xFF\xFF\xFF\xFF\xFF"
-#define HCI_DUMO_EVENT_MASK_EXT "\x3D\xBF\xFF\xFF\xFF\xFF\xFF\xFF"
-/* 0x00001FFF FFFFFFFF Default - no Lisbon events
- 0x00000800 00000000 Synchronous Connection Complete Event
- 0x00001000 00000000 Synchronous Connection Changed Event
- 0x00002000 00000000 Sniff Subrate Event
- 0x00004000 00000000 Extended Inquiry Result Event
- 0x00008000 00000000 Encryption Key Refresh Complete Event
- 0x00010000 00000000 IO Capability Request Event
- 0x00020000 00000000 IO Capability Response Event
- 0x00040000 00000000 User Confirmation Request Event
- 0x00080000 00000000 User Passkey Request Event
- 0x00100000 00000000 Remote OOB Data Request Event
- 0x00200000 00000000 Simple Pairing Complete Event
- 0x00400000 00000000 Generic AMP Link Key Notification Event
- 0x00800000 00000000 Link Supervision Timeout Changed Event
- 0x01000000 00000000 Enhanced Flush Complete Event
- 0x04000000 00000000 User Passkey Notification Event
- 0x08000000 00000000 Keypress Notification Event
- 0x10000000 00000000 Remote Host Supported Features Notification Event
- 0x20000000 00000000 LE Meta Event
- */
-
-
-/* the event mask for AMP controllers */
-#define HCI_AMP_EVENT_MASK_3_0 "\x00\x00\x00\x00\x00\x00\x3F\xFF"
-
-/* 0x0000000000000000 No events specified (default)
- 0x0000000000000001 Physical Link Complete Event
- 0x0000000000000002 Channel Selected Event
- 0x0000000000000004 Disconnection Physical Link Event
- 0x0000000000000008 Physical Link Loss Early Warning Event
- 0x0000000000000010 Physical Link Recovery Event
- 0x0000000000000020 Logical Link Complete Event
- 0x0000000000000040 Disconnection Logical Link Complete Event
- 0x0000000000000080 Flow Spec Modify Complete Event
- 0x0000000000000100 Number of Completed Data Blocks Event
- 0x0000000000000200 AMP Start Test Event
- 0x0000000000000400 AMP Test End Event
- 0x0000000000000800 AMP Receiver Report Event
- 0x0000000000001000 Short Range Mode Change Complete Event
- 0x0000000000002000 AMP Status Change Event
-*/
-
-
-/*
-** Definitions for packet type masks (BT1.2 and BT2.0 definitions)
-*/
-#define HCI_PKT_TYPES_MASK_NO_2_DH1 0x0002
-#define HCI_PKT_TYPES_MASK_NO_3_DH1 0x0004
-#define HCI_PKT_TYPES_MASK_DM1 0x0008
-#define HCI_PKT_TYPES_MASK_DH1 0x0010
-#define HCI_PKT_TYPES_MASK_HV1 0x0020
-#define HCI_PKT_TYPES_MASK_HV2 0x0040
-#define HCI_PKT_TYPES_MASK_HV3 0x0080
-#define HCI_PKT_TYPES_MASK_NO_2_DH3 0x0100
-#define HCI_PKT_TYPES_MASK_NO_3_DH3 0x0200
-#define HCI_PKT_TYPES_MASK_DM3 0x0400
-#define HCI_PKT_TYPES_MASK_DH3 0x0800
-#define HCI_PKT_TYPES_MASK_NO_2_DH5 0x1000
-#define HCI_PKT_TYPES_MASK_NO_3_DH5 0x2000
-#define HCI_PKT_TYPES_MASK_DM5 0x4000
-#define HCI_PKT_TYPES_MASK_DH5 0x8000
-
-/* Packet type should be one of valid but at least one should be specified */
-#define HCI_VALID_SCO_PKT_TYPE(t) (((((t) & ~(HCI_PKT_TYPES_MASK_HV1 \
- | HCI_PKT_TYPES_MASK_HV2 \
- | HCI_PKT_TYPES_MASK_HV3)) == 0)) \
- && ((t) != 0))
-
-
-
-
-
-/* Packet type should not be invalid and at least one should be specified */
-#define HCI_VALID_ACL_PKT_TYPE(t) (((((t) & ~(HCI_PKT_TYPES_MASK_DM1 \
- | HCI_PKT_TYPES_MASK_DH1 \
- | HCI_PKT_TYPES_MASK_DM3 \
- | HCI_PKT_TYPES_MASK_DH3 \
- | HCI_PKT_TYPES_MASK_DM5 \
- | HCI_PKT_TYPES_MASK_DH5 \
- | HCI_PKT_TYPES_MASK_NO_2_DH1 \
- | HCI_PKT_TYPES_MASK_NO_3_DH1 \
- | HCI_PKT_TYPES_MASK_NO_2_DH3 \
- | HCI_PKT_TYPES_MASK_NO_3_DH3 \
- | HCI_PKT_TYPES_MASK_NO_2_DH5 \
- | HCI_PKT_TYPES_MASK_NO_3_DH5 )) == 0)) \
- && (((t) & (HCI_PKT_TYPES_MASK_DM1 \
- | HCI_PKT_TYPES_MASK_DH1 \
- | HCI_PKT_TYPES_MASK_DM3 \
- | HCI_PKT_TYPES_MASK_DH3 \
- | HCI_PKT_TYPES_MASK_DM5 \
- | HCI_PKT_TYPES_MASK_DH5)) != 0))
-
-/*
-** Definitions for eSCO packet type masks (BT1.2 and BT2.0 definitions)
-*/
-#define HCI_ESCO_PKT_TYPES_MASK_HV1 0x0001
-#define HCI_ESCO_PKT_TYPES_MASK_HV2 0x0002
-#define HCI_ESCO_PKT_TYPES_MASK_HV3 0x0004
-#define HCI_ESCO_PKT_TYPES_MASK_EV3 0x0008
-#define HCI_ESCO_PKT_TYPES_MASK_EV4 0x0010
-#define HCI_ESCO_PKT_TYPES_MASK_EV5 0x0020
-#define HCI_ESCO_PKT_TYPES_MASK_NO_2_EV3 0x0040
-#define HCI_ESCO_PKT_TYPES_MASK_NO_3_EV3 0x0080
-#define HCI_ESCO_PKT_TYPES_MASK_NO_2_EV5 0x0100
-#define HCI_ESCO_PKT_TYPES_MASK_NO_3_EV5 0x0200
-
-/* Packet type should be one of valid but at least one should be specified for 1.2 */
-#define HCI_VALID_ESCO_PKT_TYPE(t) (((((t) & ~(HCI_ESCO_PKT_TYPES_MASK_EV3 \
- | HCI_ESCO_PKT_TYPES_MASK_EV4 \
- | HCI_ESCO_PKT_TYPES_MASK_EV5)) == 0)) \
- && ((t) != 0))/* Packet type should be one of valid but at least one should be specified */
-
-#define HCI_VALID_ESCO_SCOPKT_TYPE(t) (((((t) & ~(HCI_ESCO_PKT_TYPES_MASK_HV1 \
- | HCI_ESCO_PKT_TYPES_MASK_HV2 \
- | HCI_ESCO_PKT_TYPES_MASK_HV3)) == 0)) \
- && ((t) != 0))
-
-#define HCI_VALID_SCO_ALL_PKT_TYPE(t) (((((t) & ~(HCI_ESCO_PKT_TYPES_MASK_HV1 \
- | HCI_ESCO_PKT_TYPES_MASK_HV2 \
- | HCI_ESCO_PKT_TYPES_MASK_HV3 \
- | HCI_ESCO_PKT_TYPES_MASK_EV3 \
- | HCI_ESCO_PKT_TYPES_MASK_EV4 \
- | HCI_ESCO_PKT_TYPES_MASK_EV5)) == 0)) \
- && ((t) != 0))
-
-/*
-** Define parameters to allow role switch during create connection
-*/
-#define HCI_CR_CONN_NOT_ALLOW_SWITCH 0x00
-#define HCI_CR_CONN_ALLOW_SWITCH 0x01
-
-/*
-** Hold Mode command destination
-*/
-#define HOLD_MODE_DEST_LOCAL_DEVICE 0x00
-#define HOLD_MODE_DEST_RMT_DEVICE 0x01
-
-/*
-** Definitions for different HCI parameters
-*/
-#define HCI_PER_INQ_MIN_MAX_PERIOD 0x0003
-#define HCI_PER_INQ_MAX_MAX_PERIOD 0xFFFF
-#define HCI_PER_INQ_MIN_MIN_PERIOD 0x0002
-#define HCI_PER_INQ_MAX_MIN_PERIOD 0xFFFE
-
-#define HCI_MAX_INQUIRY_LENGTH 0x30
-
-#define HCI_MIN_INQ_LAP 0x9E8B00
-#define HCI_MAX_INQ_LAP 0x9E8B3F
-
-/* HCI role defenitions */
-#define HCI_ROLE_MASTER 0x00
-#define HCI_ROLE_SLAVE 0x01
-#define HCI_ROLE_UNKNOWN 0xff
-
-/* HCI mode defenitions */
-#define HCI_MODE_ACTIVE 0x00
-#define HCI_MODE_HOLD 0x01
-#define HCI_MODE_SNIFF 0x02
-#define HCI_MODE_PARK 0x03
-
-/* HCI Flow Control Mode defenitions */
-#define HCI_PACKET_BASED_FC_MODE 0x00
-#define HCI_BLOCK_BASED_FC_MODE 0x01
-
-/* Define Packet types as requested by the Host */
-#define HCI_ACL_PKT_TYPE_NONE 0x0000
-#define HCI_ACL_PKT_TYPE_DM1 0x0008
-#define HCI_ACL_PKT_TYPE_DH1 0x0010
-#define HCI_ACL_PKT_TYPE_AUX1 0x0200
-#define HCI_ACL_PKT_TYPE_DM3 0x0400
-#define HCI_ACL_PKT_TYPE_DH3 0x0800
-#define HCI_ACL_PKT_TYPE_DM5 0x4000
-#define HCI_ACL_PKT_TYPE_DH5 0x8000
-
-/* Define key type in the Master Link Key command */
-#define HCI_USE_SEMI_PERMANENT_KEY 0x00
-#define HCI_USE_TEMPORARY_KEY 0x01
-
-/* Page scan period modes */
-#define HCI_PAGE_SCAN_REP_MODE_R0 0x00
-#define HCI_PAGE_SCAN_REP_MODE_R1 0x01
-#define HCI_PAGE_SCAN_REP_MODE_R2 0x02
-
-/* Define limits for page scan repetition modes */
-#define HCI_PAGE_SCAN_R1_LIMIT 0x0800
-#define HCI_PAGE_SCAN_R2_LIMIT 0x1000
-
-/* Page scan period modes */
-#define HCI_PAGE_SCAN_PER_MODE_P0 0x00
-#define HCI_PAGE_SCAN_PER_MODE_P1 0x01
-#define HCI_PAGE_SCAN_PER_MODE_P2 0x02
-
-/* Page scan modes */
-#define HCI_MANDATARY_PAGE_SCAN_MODE 0x00
-#define HCI_OPTIONAL_PAGE_SCAN_MODE1 0x01
-#define HCI_OPTIONAL_PAGE_SCAN_MODE2 0x02
-#define HCI_OPTIONAL_PAGE_SCAN_MODE3 0x03
-
-/* Page and inquiry scan types */
-#define HCI_SCAN_TYPE_STANDARD 0x00
-#define HCI_SCAN_TYPE_INTERLACED 0x01 /* 1.2 devices or later */
-#define HCI_DEF_SCAN_TYPE HCI_SCAN_TYPE_STANDARD
-
-/* Definitions for quality of service service types */
-#define HCI_SERVICE_NO_TRAFFIC 0x00
-#define HCI_SERVICE_BEST_EFFORT 0x01
-#define HCI_SERVICE_GUARANTEED 0x02
-
-#define HCI_QOS_LATENCY_DO_NOT_CARE 0xFFFFFFFF
-#define HCI_QOS_DELAY_DO_NOT_CARE 0xFFFFFFFF
-
-/* Definitions for Flow Specification */
-#define HCI_FLOW_SPEC_LATENCY_DO_NOT_CARE 0xFFFFFFFF
-
-/* Definitions for AFH Channel Map */
-#define HCI_AFH_CHANNEL_MAP_LEN 10
-
-/* Definitions for Extended Inquiry Response */
-#define HCI_EXT_INQ_RESPONSE_LEN 240
-#define HCI_EIR_FLAGS_TYPE BT_EIR_FLAGS_TYPE
-#define HCI_EIR_MORE_16BITS_UUID_TYPE BT_EIR_MORE_16BITS_UUID_TYPE
-#define HCI_EIR_COMPLETE_16BITS_UUID_TYPE BT_EIR_COMPLETE_16BITS_UUID_TYPE
-#define HCI_EIR_MORE_32BITS_UUID_TYPE BT_EIR_MORE_32BITS_UUID_TYPE
-#define HCI_EIR_COMPLETE_32BITS_UUID_TYPE BT_EIR_COMPLETE_32BITS_UUID_TYPE
-#define HCI_EIR_MORE_128BITS_UUID_TYPE BT_EIR_MORE_128BITS_UUID_TYPE
-#define HCI_EIR_COMPLETE_128BITS_UUID_TYPE BT_EIR_COMPLETE_128BITS_UUID_TYPE
-#define HCI_EIR_SHORTENED_LOCAL_NAME_TYPE BT_EIR_SHORTENED_LOCAL_NAME_TYPE
-#define HCI_EIR_COMPLETE_LOCAL_NAME_TYPE BT_EIR_COMPLETE_LOCAL_NAME_TYPE
-#define HCI_EIR_TX_POWER_LEVEL_TYPE BT_EIR_TX_POWER_LEVEL_TYPE
-#define HCI_EIR_MANUFACTURER_SPECIFIC_TYPE BT_EIR_MANUFACTURER_SPECIFIC_TYPE
-#define HCI_EIR_OOB_BD_ADDR_TYPE BT_EIR_OOB_BD_ADDR_TYPE
-#define HCI_EIR_OOB_COD_TYPE BT_EIR_OOB_COD_TYPE
-#define HCI_EIR_OOB_SSP_HASH_C_TYPE BT_EIR_OOB_SSP_HASH_C_TYPE
-#define HCI_EIR_OOB_SSP_RAND_R_TYPE BT_EIR_OOB_SSP_RAND_R_TYPE
-
-/* Definitions for Write Simple Pairing Mode */
-#define HCI_SP_MODE_UNDEFINED 0x00
-#define HCI_SP_MODE_ENABLED 0x01
-
-/* Definitions for Write Simple Pairing Debug Mode */
-#define HCI_SPD_MODE_DISABLED 0x00
-#define HCI_SPD_MODE_ENABLED 0x01
-
-/* Definitions for IO Capability Response/Command */
-#define HCI_IO_CAP_DISPLAY_ONLY 0x00
-#define HCI_IO_CAP_DISPLAY_YESNO 0x01
-#define HCI_IO_CAP_KEYBOARD_ONLY 0x02
-#define HCI_IO_CAP_NO_IO 0x03
-
-#define HCI_OOB_AUTH_DATA_NOT_PRESENT 0x00
-#define HCI_OOB_REM_AUTH_DATA_PRESENT 0x01
-
-#define HCI_MITM_PROTECT_NOT_REQUIRED 0x00
-#define HCI_MITM_PROTECT_REQUIRED 0x01
-
-
-/* Policy settings status */
-#define HCI_DISABLE_ALL_LM_MODES 0x0000
-#define HCI_ENABLE_MASTER_SLAVE_SWITCH 0x0001
-#define HCI_ENABLE_HOLD_MODE 0x0002
-#define HCI_ENABLE_SNIFF_MODE 0x0004
-#define HCI_ENABLE_PARK_MODE 0x0008
-
-/* By default allow switch, because host can not allow that */
-/* that until he created the connection */
-#define HCI_DEFAULT_POLICY_SETTINGS HCI_DISABLE_ALL_LM_MODES
-
-/* Filters that are sent in set filter command */
-#define HCI_FILTER_TYPE_CLEAR_ALL 0x00
-#define HCI_FILTER_INQUIRY_RESULT 0x01
-#define HCI_FILTER_CONNECTION_SETUP 0x02
-
-#define HCI_FILTER_COND_NEW_DEVICE 0x00
-#define HCI_FILTER_COND_DEVICE_CLASS 0x01
-#define HCI_FILTER_COND_BD_ADDR 0x02
-
-#define HCI_DO_NOT_AUTO_ACCEPT_CONNECT 1
-#define HCI_DO_AUTO_ACCEPT_CONNECT 2 /* role switch disabled */
-#define HCI_DO_AUTO_ACCEPT_CONNECT_RS 3 /* role switch enabled (1.1 errata 1115) */
-
-/* Auto accept flags */
-#define HCI_AUTO_ACCEPT_OFF 0x00
-#define HCI_AUTO_ACCEPT_ACL_CONNECTIONS 0x01
-#define HCI_AUTO_ACCEPT_SCO_CONNECTIONS 0x02
-
-/* PIN type */
-#define HCI_PIN_TYPE_VARIABLE 0
-#define HCI_PIN_TYPE_FIXED 1
-
-/* Loopback Modes */
-#define HCI_LOOPBACK_MODE_DISABLED 0
-#define HCI_LOOPBACK_MODE_LOCAL 1
-#define HCI_LOOPBACK_MODE_REMOTE 2
-
-#define SLOTS_PER_10MS 16 /* 0.625 ms slots in a 10 ms tick */
-
-/* Maximum connection accept timeout in 0.625msec */
-#define HCI_MAX_CONN_ACCEPT_TOUT 0xB540 /* 29 sec */
-#define HCI_DEF_CONN_ACCEPT_TOUT 0x1F40 /* 5 sec */
-
-/* Page timeout is used in LC only and LC is counting down slots not using OS */
-#define HCI_DEFAULT_PAGE_TOUT 0x2000 /* 5.12 sec (in slots) */
-
-/* Scan enable flags */
-#define HCI_NO_SCAN_ENABLED 0x00
-#define HCI_INQUIRY_SCAN_ENABLED 0x01
-#define HCI_PAGE_SCAN_ENABLED 0x02
-
-/* Pagescan timer definitions in 0.625 ms */
-#define HCI_MIN_PAGESCAN_INTERVAL 0x12 /* 11.25 ms */
-#define HCI_MAX_PAGESCAN_INTERVAL 0x1000 /* 2.56 sec */
-#define HCI_DEF_PAGESCAN_INTERVAL 0x0800 /* 1.28 sec */
-
-/* Parameter for pagescan window is passed to LC and is kept in slots */
-#define HCI_MIN_PAGESCAN_WINDOW 0x11 /* 10.625 ms */
-#define HCI_MAX_PAGESCAN_WINDOW 0x1000 /* 2.56 sec */
-#define HCI_DEF_PAGESCAN_WINDOW 0x12 /* 11.25 ms */
-
-/* Inquiryscan timer definitions in 0.625 ms */
-#define HCI_MIN_INQUIRYSCAN_INTERVAL 0x12 /* 11.25 ms */
-#define HCI_MAX_INQUIRYSCAN_INTERVAL 0x1000 /* 2.56 sec */
-#define HCI_DEF_INQUIRYSCAN_INTERVAL 0x1000 /* 2.56 sec */
-
-/* Parameter for inquiryscan window is passed to LC and is kept in slots */
-#define HCI_MIN_INQUIRYSCAN_WINDOW 0x11 /* 10.625 ms */
-#define HCI_MAX_INQUIRYSCAN_WINDOW 0x1000 /* 2.56 sec */
-#define HCI_DEF_INQUIRYSCAN_WINDOW 0x12 /* 11.25 ms */
-
-/* Encryption modes */
-#define HCI_ENCRYPT_MODE_DISABLED 0x00
-#define HCI_ENCRYPT_MODE_POINT_TO_POINT 0x01
-#define HCI_ENCRYPT_MODE_ALL 0x02
-
-/* Voice settings */
-#define HCI_INP_CODING_LINEAR 0x0000 /* 0000000000 */
-#define HCI_INP_CODING_U_LAW 0x0100 /* 0100000000 */
-#define HCI_INP_CODING_A_LAW 0x0200 /* 1000000000 */
-#define HCI_INP_CODING_MASK 0x0300 /* 1100000000 */
-
-#define HCI_INP_DATA_FMT_1S_COMPLEMENT 0x0000 /* 0000000000 */
-#define HCI_INP_DATA_FMT_2S_COMPLEMENT 0x0040 /* 0001000000 */
-#define HCI_INP_DATA_FMT_SIGN_MAGNITUDE 0x0080 /* 0010000000 */
-#define HCI_INP_DATA_FMT_UNSIGNED 0x00c0 /* 0011000000 */
-#define HCI_INP_DATA_FMT_MASK 0x00c0 /* 0011000000 */
-
-#define HCI_INP_SAMPLE_SIZE_8BIT 0x0000 /* 0000000000 */
-#define HCI_INP_SAMPLE_SIZE_16BIT 0x0020 /* 0000100000 */
-#define HCI_INP_SAMPLE_SIZE_MASK 0x0020 /* 0000100000 */
-
-#define HCI_INP_LINEAR_PCM_BIT_POS_MASK 0x001c /* 0000011100 */
-#define HCI_INP_LINEAR_PCM_BIT_POS_OFFS 2
-
-#define HCI_AIR_CODING_FORMAT_CVSD 0x0000 /* 0000000000 */
-#define HCI_AIR_CODING_FORMAT_U_LAW 0x0001 /* 0000000001 */
-#define HCI_AIR_CODING_FORMAT_A_LAW 0x0002 /* 0000000010 */
-#define HCI_AIR_CODING_FORMAT_TRANSPNT 0x0003 /* 0000000011 */
-#define HCI_AIR_CODING_FORMAT_MASK 0x0003 /* 0000000011 */
-
-/* default 0001100000 */
-#define HCI_DEFAULT_VOICE_SETTINGS (HCI_INP_CODING_LINEAR \
- | HCI_INP_DATA_FMT_2S_COMPLEMENT \
- | HCI_INP_SAMPLE_SIZE_16BIT \
- | HCI_AIR_CODING_FORMAT_CVSD)
-
-#define HCI_CVSD_SUPPORTED(x) (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_CVSD)
-#define HCI_U_LAW_SUPPORTED(x) (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_U_LAW)
-#define HCI_A_LAW_SUPPORTED(x) (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_A_LAW)
-#define HCI_TRANSPNT_SUPPORTED(x) (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_TRANSPNT)
-
-/* Retransmit timer definitions in 0.625 */
-#define HCI_MAX_AUTO_FLUSH_TOUT 0x07FF
-#define HCI_DEFAULT_AUTO_FLUSH_TOUT 0 /* No auto flush */
-
-/* Broadcast retransmitions */
-#define HCI_DEFAULT_NUM_BCAST_RETRAN 1
-
-/* Define broadcast data types as passed in the hci data packet */
-#define HCI_DATA_POINT_TO_POINT 0x00
-#define HCI_DATA_ACTIVE_BCAST 0x01
-#define HCI_DATA_PICONET_BCAST 0x02
-
-/* Hold mode activity */
-#define HCI_MAINTAIN_CUR_POWER_STATE 0x00
-#define HCI_SUSPEND_PAGE_SCAN 0x01
-#define HCI_SUSPEND_INQUIRY_SCAN 0x02
-#define HCI_SUSPEND_PERIODIC_INQUIRIES 0x04
-
-/* Default Link Supervision timeoout */
-#define HCI_DEFAULT_INACT_TOUT 0x7D00 /* BR/EDR (20 seconds) */
-#define HCI_DEFAULT_AMP_INACT_TOUT 0x3E80 /* AMP (10 seconds) */
-
-/* Read transmit power level parameter */
-#define HCI_READ_CURRENT 0x00
-#define HCI_READ_MAXIMUM 0x01
-
-/* Link types for connection complete event */
-#define HCI_LINK_TYPE_SCO 0x00
-#define HCI_LINK_TYPE_ACL 0x01
-#define HCI_LINK_TYPE_ESCO 0x02
-
-/* Link Key Notification Event (Key Type) definitions */
-#define HCI_LKEY_TYPE_COMBINATION 0x00
-#define HCI_LKEY_TYPE_LOCAL_UNIT 0x01
-#define HCI_LKEY_TYPE_REMOTE_UNIT 0x02
-#define HCI_LKEY_TYPE_DEBUG_COMB 0x03
-#define HCI_LKEY_TYPE_UNAUTH_COMB 0x04
-#define HCI_LKEY_TYPE_AUTH_COMB 0x05
-#define HCI_LKEY_TYPE_CHANGED_COMB 0x06
-
-/* Internal definitions - not used over HCI */
-#define HCI_LKEY_TYPE_AMP_WIFI 0x80
-#define HCI_LKEY_TYPE_AMP_UWB 0x81
-#define HCI_LKEY_TYPE_UNKNOWN 0xff
-
-/* Read Local Version HCI Version return values (Command Complete Event) */
-#define HCI_VERSION_1_0B 0x00
-#define HCI_VERSION_1_1 0x01
-
-/* Define an invalid value for a handle */
-#define HCI_INVALID_HANDLE 0xFFFF
-
-/* Define max ammount of data in the HCI command */
-#define HCI_COMMAND_SIZE 255
-
-/* Define the preamble length for all HCI Commands.
-** This is 2-bytes for opcode and 1 byte for length
-*/
-#define HCIC_PREAMBLE_SIZE 3
-
-/* Define the preamble length for all HCI Events
-** This is 1-byte for opcode and 1 byte for length
-*/
-#define HCIE_PREAMBLE_SIZE 2
-#define HCI_SCO_PREAMBLE_SIZE 3
-#define HCI_DATA_PREAMBLE_SIZE 4
-
-/* local Bluetooth controller id for AMP HCI */
-#define LOCAL_BR_EDR_CONTROLLER_ID 0
-
-/* controller id types for AMP HCI */
-#define HCI_CONTROLLER_TYPE_BR_EDR 0
-#define HCI_CONTROLLER_TYPE_802_11 1
-#define HCI_CONTROLLER_TYPE_ECMA 2
-#define HCI_MAX_CONTROLLER_TYPES 3
-
-
-
-
-/* AMP Controller Status codes
-*/
-#define HCI_AMP_CTRLR_PHYSICALLY_DOWN 0
-#define HCI_AMP_CTRLR_USABLE_BY_BT 1
-#define HCI_AMP_CTRLR_UNUSABLE_FOR_BT 2
-#define HCI_AMP_CTRLR_LOW_CAP_FOR_BT 3
-#define HCI_AMP_CTRLR_MED_CAP_FOR_BT 4
-#define HCI_AMP_CTRLR_HIGH_CAP_FOR_BT 5
-#define HCI_AMP_CTRLR_FULL_CAP_FOR_BT 6
-
-#define HCI_MAX_AMP_STATUS_TYPES 7
-
-
-/* Define the extended flow specification fields used by AMP */
-typedef struct
-{
- UINT8 id;
- UINT8 stype;
- UINT16 max_sdu_size;
- UINT32 sdu_inter_time;
- UINT32 access_latency;
- UINT32 flush_timeout;
-} tHCI_EXT_FLOW_SPEC;
-
-
-/* HCI message type definitions (for H4 messages) */
-#define HCIT_TYPE_ACL_DATA 2
-#define HCIT_TYPE_SCO_DATA 3
-#define HCIT_TYPE_LM_DIAG 7
-
-#define HCIT_LM_DIAG_LENGTH 63
-
-/* Define values for LMP Test Control parameters
-** Test Scenario, Hopping Mode, Power Control Mode
-*/
-#define LMP_TESTCTL_TESTSC_PAUSE 0
-#define LMP_TESTCTL_TESTSC_TXTEST_0 1
-#define LMP_TESTCTL_TESTSC_TXTEST_1 2
-#define LMP_TESTCTL_TESTSC_TXTEST_1010 3
-#define LMP_TESTCTL_TESTSC_PSRND_BITSEQ 4
-#define LMP_TESTCTL_TESTSC_CLOSEDLB_ACL 5
-#define LMP_TESTCTL_TESTSC_CLOSEDLB_SCO 6
-#define LMP_TESTCTL_TESTSC_ACL_NOWHIT 7
-#define LMP_TESTCTL_TESTSC_SCO_NOWHIT 8
-#define LMP_TESTCTL_TESTSC_TXTEST_11110000 9
-#define LMP_TESTCTL_TESTSC_EXITTESTMODE 255
-
-#define LMP_TESTCTL_HOPMOD_RXTX1FREQ 0
-#define LMP_TESTCTL_HOPMOD_HOP_EURUSA 1
-#define LMP_TESTCTL_HOPMOD_HOP_JAPAN 2
-#define LMP_TESTCTL_HOPMOD_HOP_FRANCE 3
-#define LMP_TESTCTL_HOPMOD_HOP_SPAIN 4
-#define LMP_TESTCTL_HOPMOD_REDUCED_HOP 5
-
-#define LMP_TESTCTL_POWCTL_FIXEDTX_OP 0
-#define LMP_TESTCTL_POWCTL_ADAPTIVE 1
-
-
-/*
-** Define company IDs (from Bluetooth Assigned Numbers v1.1, section 2.2)
-*/
-#define LMP_COMPID_ERICSSON 0
-#define LMP_COMPID_NOKIA 1
-#define LMP_COMPID_INTEL 2
-#define LMP_COMPID_IBM 3
-#define LMP_COMPID_TOSHIBA 4
-#define LMP_COMPID_3COM 5
-#define LMP_COMPID_MICROSOFT 6
-#define LMP_COMPID_LUCENT 7
-#define LMP_COMPID_MOTOROLA 8
-#define LMP_COMPID_INFINEON 9
-#define LMP_COMPID_CSR 10
-#define LMP_COMPID_SILICON_WAVE 11
-#define LMP_COMPID_DIGIANSWER 12
-#define LMP_COMPID_TEXAS_INSTRUMENTS 13
-#define LMP_COMPID_PARTHUS 14
-#define LMP_COMPID_BROADCOM 15
-#define LMP_COMPID_MITEL_SEMI 16
-#define LMP_COMPID_WIDCOMM 17
-#define LMP_COMPID_ZEEVO 18
-#define LMP_COMPID_ATMEL 19
-#define LMP_COMPID_MITSUBISHI 20
-#define LMP_COMPID_RTX_TELECOM 21
-#define LMP_COMPID_KC_TECH 22
-#define LMP_COMPID_NEWLOGIC 23
-#define LMP_COMPID_TRANSILICA 24
-#define LMP_COMPID_ROHDE_SCHWARZ 25
-#define LMP_COMPID_TTPCOM 26
-#define LMP_COMPID_SIGNIA 27
-#define LMP_COMPID_CONEXANT 28
-#define LMP_COMPID_QUALCOMM 29
-#define LMP_COMPID_INVENTEL 30
-#define LMP_COMPID_AVM 31
-#define LMP_COMPID_BANDSPEED 32
-#define LMP_COMPID_MANSELLA 33
-#define LMP_COMPID_NEC_CORP 34
-#define LMP_COMPID_WAVEPLUS 35
-#define LMP_COMPID_ALCATEL 36
-#define LMP_COMPID_PHILIPS 37
-#define LMP_COMPID_C_TECHNOLOGIES 38
-#define LMP_COMPID_OPEN_INTERFACE 39
-#define LMP_COMPID_RF_MICRO 40
-#define LMP_COMPID_HITACHI 41
-#define LMP_COMPID_SYMBOL_TECH 42
-#define LMP_COMPID_TENOVIS 43
-#define LMP_COMPID_MACRONIX 44
-#define LMP_COMPID_GCT_SEMI 45
-#define LMP_COMPID_NORWOOD_SYSTEMS 46
-#define LMP_COMPID_MEWTEL_TECH 47
-#define LMP_COMPID_STM 48
-#define LMP_COMPID_SYNOPSYS 49
-#define LMP_COMPID_RED_M_LTD 50
-#define LMP_COMPID_COMMIL_LTD 51
-#define LMP_COMPID_CATC 52
-#define LMP_COMPID_ECLIPSE 53
-#define LMP_COMPID_RENESAS_TECH 54
-#define LMP_COMPID_MOBILIAN_CORP 55
-#define LMP_COMPID_TERAX 56
-#define LMP_COMPID_ISSC 57
-#define LMP_COMPID_MATSUSHITA 58
-#define LMP_COMPID_GENNUM_CORP 59
-#define LMP_COMPID_RESEARCH_IN_MOTION 60
-#define LMP_COMPID_IPEXTREME 61
-#define LMP_COMPID_SYSTEMS_AND_CHIPS 62
-#define LMP_COMPID_BLUETOOTH_SIG 63
-#define LMP_COMPID_SEIKO_EPSON_CORP 64
-#define LMP_COMPID_ISS_TAIWAN 65
-#define LMP_COMPID_CONWISE_TECHNOLOGIES 66
-#define LMP_COMPID_PARROT_SA 67
-#define LMP_COMPID_SOCKET_COMM 68
-#define LMP_COMPID_ALTHEROS 69
-#define LMP_COMPID_MEDIATEK 70
-#define LMP_COMPID_BLUEGIGA 71
-#define LMP_COMPID_MARVELL 72
-#define LMP_COMPID_3DSP_CORP 73
-#define LMP_COMPID_ACCEL_SEMICONDUCTOR 74
-#define LMP_COMPID_CONTINENTAL_AUTO 75
-#define LMP_COMPID_APPLE 76
-#define LMP_COMPID_STACCATO 77
-#define LMP_COMPID_AVAGO_TECHNOLOGIES 78
-#define LMP_COMPID_APT_LTD 79
-#define LMP_COMPID_SIRF_TECHNOLOGY 80
-#define LMP_COMPID_TZERO_TECHNOLOGY 81
-#define LMP_COMPID_J_AND_M_CORP 82
-#define LMP_COMPID_FREE_2_MOVE 83
-#define LMP_COMPID_3DIJOY_CORP 84
-#define LMP_COMPID_PLANTRONICS 85
-#define LMP_COMPID_SONY_ERICSSON_MOBILE 86
-#define LMP_COMPID_HARMON_INTL_IND 87
-#define LMP_COMPID_VIZIO 88
-#define LMP_COMPID_NORDIC SEMI 89
-#define LMP_COMPID_EM MICRO 90
-#define LMP_COMPID_RALINK TECH 91
-#define LMP_COMPID_BELKIN INC 92
-#define LMP_COMPID_REALTEK SEMI 93
-#define LMP_COMPID_STONESTREET ONE 94
-#define LMP_COMPID_WICENTRIC 95
-#define LMP_COMPID_RIVIERAWAVES 96
-#define LMP_COMPID_RDA MICRO 97
-#define LMP_COMPID_GIBSON GUITARS 98
-#define LMP_COMPID_MICOMMAND INC 99
-#define LMP_COMPID_BAND XI 100
-#define LMP_COMPID_HP COMPANY 101
-#define LMP_COMPID_9SOLUTIONS OY 102
-#define LMP_COMPID_GN NETCOM 103
-#define LMP_COMPID_GENERAL MOTORS 104
-#define LMP_COMPID_AD ENGINEERING 105
-#define LMP_COMPID_MINDTREE LTD 106
-#define LMP_COMPID_POLAR ELECTRO 107
-#define LMP_COMPID_BEAUTIFUL ENTERPRISE 108
-#define LMP_COMPID_BRIARTEK 109
-#define LMP_COMPID_SUMMIT DATA COMM 110
-#define LMP_COMPID_SOUND ID 111
-#define LMP_COMPID_MONSTER LLC 112
-#define LMP_COMPID_CONNECTBLU 113
-#define LMP_COMPID_MAX_ID 114 /* this is a place holder */
-#define LMP_COMPID_INTERNAL 65535
-
-#define MAX_LMP_COMPID (LMP_COMPID_MAX_ID)
-/*
-** Define the packet types in the packet header, and a couple extra
-*/
-#define PKT_TYPE_NULL 0x00
-#define PKT_TYPE_POLL 0x01
-#define PKT_TYPE_FHS 0x02
-#define PKT_TYPE_DM1 0x03
-
-#define PKT_TYPE_DH1 0x04
-#define PKT_TYPE_HV1 0x05
-#define PKT_TYPE_HV2 0x06
-#define PKT_TYPE_HV3 0x07
-#define PKT_TYPE_DV 0x08
-#define PKT_TYPE_AUX1 0x09
-
-#define PKT_TYPE_DM3 0x0a
-#define PKT_TYPE_DH3 0x0b
-
-#define PKT_TYPE_DM5 0x0e
-#define PKT_TYPE_DH5 0x0f
-
-
-#define PKT_TYPE_ID 0x10 /* Internally used packet types */
-#define PKT_TYPE_BAD 0x11
-#define PKT_TYPE_NONE 0x12
-
-/*
-** Define packet size
-*/
-#define HCI_DM1_PACKET_SIZE 17
-#define HCI_DH1_PACKET_SIZE 27
-#define HCI_DM3_PACKET_SIZE 121
-#define HCI_DH3_PACKET_SIZE 183
-#define HCI_DM5_PACKET_SIZE 224
-#define HCI_DH5_PACKET_SIZE 339
-#define HCI_AUX1_PACKET_SIZE 29
-#define HCI_HV1_PACKET_SIZE 10
-#define HCI_HV2_PACKET_SIZE 20
-#define HCI_HV3_PACKET_SIZE 30
-#define HCI_DV_PACKET_SIZE 9
-#define HCI_EDR2_DH1_PACKET_SIZE 54
-#define HCI_EDR2_DH3_PACKET_SIZE 367
-#define HCI_EDR2_DH5_PACKET_SIZE 679
-#define HCI_EDR3_DH1_PACKET_SIZE 83
-#define HCI_EDR3_DH3_PACKET_SIZE 552
-#define HCI_EDR3_DH5_PACKET_SIZE 1021
-
-/*
-** Features encoding - page 0
-*/
-#define HCI_NUM_FEATURE_BYTES 8
-#define HCI_FEATURES_KNOWN(x) ((x[0] | x[1] | x[2] | x[3] | x[4] | x[5] | x[6] | x[7]) != 0)
-
-#define HCI_FEATURE_3_SLOT_PACKETS_MASK 0x01
-#define HCI_FEATURE_3_SLOT_PACKETS_OFF 0
-#define HCI_3_SLOT_PACKETS_SUPPORTED(x) ((x)[HCI_FEATURE_3_SLOT_PACKETS_OFF] & HCI_FEATURE_3_SLOT_PACKETS_MASK)
-
-#define HCI_FEATURE_5_SLOT_PACKETS_MASK 0x02
-#define HCI_FEATURE_5_SLOT_PACKETS_OFF 0
-#define HCI_5_SLOT_PACKETS_SUPPORTED(x) ((x)[HCI_FEATURE_5_SLOT_PACKETS_OFF] & HCI_FEATURE_5_SLOT_PACKETS_MASK)
-
-#define HCI_FEATURE_ENCRYPTION_MASK 0x04
-#define HCI_FEATURE_ENCRYPTION_OFF 0
-#define HCI_ENCRYPTION_SUPPORTED(x) ((x)[HCI_FEATURE_ENCRYPTION_OFF] & HCI_FEATURE_ENCRYPTION_MASK)
-
-#define HCI_FEATURE_SLOT_OFFSET_MASK 0x08
-#define HCI_FEATURE_SLOT_OFFSET_OFF 0
-#define HCI_SLOT_OFFSET_SUPPORTED(x) ((x)[HCI_FEATURE_SLOT_OFFSET_OFF] & HCI_FEATURE_SLOT_OFFSET_MASK)
-
-#define HCI_FEATURE_TIMING_ACC_MASK 0x10
-#define HCI_FEATURE_TIMING_ACC_OFF 0
-#define HCI_TIMING_ACC_SUPPORTED(x) ((x)[HCI_FEATURE_TIMING_ACC_OFF] & HCI_FEATURE_TIMING_ACC_MASK)
-
-#define HCI_FEATURE_SWITCH_MASK 0x20
-#define HCI_FEATURE_SWITCH_OFF 0
-#define HCI_SWITCH_SUPPORTED(x) ((x)[HCI_FEATURE_SWITCH_OFF] & HCI_FEATURE_SWITCH_MASK)
-
-#define HCI_FEATURE_HOLD_MODE_MASK 0x40
-#define HCI_FEATURE_HOLD_MODE_OFF 0
-#define HCI_HOLD_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_HOLD_MODE_OFF] & HCI_FEATURE_HOLD_MODE_MASK)
-
-#define HCI_FEATURE_SNIFF_MODE_MASK 0x80
-#define HCI_FEATURE_SNIFF_MODE_OFF 0
-#define HCI_SNIFF_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_SNIFF_MODE_OFF] & HCI_FEATURE_SNIFF_MODE_MASK)
-
-#define HCI_FEATURE_PARK_MODE_MASK 0x01
-#define HCI_FEATURE_PARK_MODE_OFF 1
-#define HCI_PARK_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_PARK_MODE_OFF] & HCI_FEATURE_PARK_MODE_MASK)
-
-#define HCI_FEATURE_RSSI_MASK 0x02
-#define HCI_FEATURE_RSSI_OFF 1
-#define HCI_RSSI_SUPPORTED(x) ((x)[HCI_FEATURE_RSSI_OFF] & HCI_FEATURE_RSSI_MASK)
-
-#define HCI_FEATURE_CQM_DATA_RATE_MASK 0x04
-#define HCI_FEATURE_CQM_DATA_RATE_OFF 1
-#define HCI_CQM_DATA_RATE_SUPPORTED(x) ((x)[HCI_FEATURE_CQM_DATA_RATE_OFF] & HCI_FEATURE_CQM_DATA_RATE_MASK)
-
-#define HCI_FEATURE_SCO_LINK_MASK 0x08
-#define HCI_FEATURE_SCO_LINK_OFF 1
-#define HCI_SCO_LINK_SUPPORTED(x) ((x)[HCI_FEATURE_SCO_LINK_OFF] & HCI_FEATURE_SCO_LINK_MASK)
-
-#define HCI_FEATURE_HV2_PACKETS_MASK 0x10
-#define HCI_FEATURE_HV2_PACKETS_OFF 1
-#define HCI_HV2_PACKETS_SUPPORTED(x) ((x)[HCI_FEATURE_HV2_PACKETS_OFF] & HCI_FEATURE_HV2_PACKETS_MASK)
-
-#define HCI_FEATURE_HV3_PACKETS_MASK 0x20
-#define HCI_FEATURE_HV3_PACKETS_OFF 1
-#define HCI_HV3_PACKETS_SUPPORTED(x) ((x)[HCI_FEATURE_HV3_PACKETS_OFF] & HCI_FEATURE_HV3_PACKETS_MASK)
-
-#define HCI_FEATURE_U_LAW_MASK 0x40
-#define HCI_FEATURE_U_LAW_OFF 1
-#define HCI_LMP_U_LAW_SUPPORTED(x) ((x)[HCI_FEATURE_U_LAW_OFF] & HCI_FEATURE_U_LAW_MASK)
-
-#define HCI_FEATURE_A_LAW_MASK 0x80
-#define HCI_FEATURE_A_LAW_OFF 1
-#define HCI_LMP_A_LAW_SUPPORTED(x) ((x)[HCI_FEATURE_A_LAW_OFF] & HCI_FEATURE_A_LAW_MASK)
-
-#define HCI_FEATURE_CVSD_MASK 0x01
-#define HCI_FEATURE_CVSD_OFF 2
-#define HCI_LMP_CVSD_SUPPORTED(x) ((x)[HCI_FEATURE_CVSD_OFF] & HCI_FEATURE_CVSD_MASK)
-
-#define HCI_FEATURE_PAGING_SCHEME_MASK 0x02
-#define HCI_FEATURE_PAGING_SCHEME_OFF 2
-#define HCI_PAGING_SCHEME_SUPPORTED(x) ((x)[HCI_FEATURE_PAGING_SCHEME_OFF] & HCI_FEATURE_PAGING_SCHEME_MASK)
-
-#define HCI_FEATURE_POWER_CTRL_MASK 0x04
-#define HCI_FEATURE_POWER_CTRL_OFF 2
-#define HCI_POWER_CTRL_SUPPORTED(x) ((x)[HCI_FEATURE_POWER_CTRL_OFF] & HCI_FEATURE_POWER_CTRL_MASK)
-
-#define HCI_FEATURE_TRANSPNT_MASK 0x08
-#define HCI_FEATURE_TRANSPNT_OFF 2
-#define HCI_LMP_TRANSPNT_SUPPORTED(x) ((x)[HCI_FEATURE_TRANSPNT_OFF] & HCI_FEATURE_TRANSPNT_MASK)
-
-#define HCI_FEATURE_FLOW_CTRL_LAG_MASK 0x70
-#define HCI_FEATURE_FLOW_CTRL_LAG_OFF 2
-#define HCI_FLOW_CTRL_LAG_VALUE(x) (((x)[HCI_FEATURE_FLOW_CTRL_LAG_OFF] & HCI_FEATURE_FLOW_CTRL_LAG_MASK) >> 4)
-
-#define HCI_FEATURE_BROADCAST_ENC_MASK 0x80
-#define HCI_FEATURE_BROADCAST_ENC_OFF 2
-#define HCI_LMP_BCAST_ENC_SUPPORTED(x) ((x)[HCI_FEATURE_BROADCAST_ENC_OFF] & HCI_FEATURE_BROADCAST_ENC_MASK)
-
-#define HCI_FEATURE_SCATTER_MODE_MASK 0x01
-#define HCI_FEATURE_SCATTER_MODE_OFF 3
-#define HCI_LMP_SCATTER_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_SCATTER_MODE_OFF] & HCI_FEATURE_SCATTER_MODE_MASK)
-
-#define HCI_FEATURE_EDR_ACL_2MPS_MASK 0x02
-#define HCI_FEATURE_EDR_ACL_2MPS_OFF 3
-#define HCI_EDR_ACL_2MPS_SUPPORTED(x) ((x)[HCI_FEATURE_EDR_ACL_2MPS_OFF] & HCI_FEATURE_EDR_ACL_2MPS_MASK)
-
-#define HCI_FEATURE_EDR_ACL_3MPS_MASK 0x04
-#define HCI_FEATURE_EDR_ACL_3MPS_OFF 3
-#define HCI_EDR_ACL_3MPS_SUPPORTED(x) ((x)[HCI_FEATURE_EDR_ACL_3MPS_OFF] & HCI_FEATURE_EDR_ACL_3MPS_MASK)
-
-#define HCI_FEATURE_ENHANCED_INQ_MASK 0x08
-#define HCI_FEATURE_ENHANCED_INQ_OFF 3
-#define HCI_ENHANCED_INQ_SUPPORTED(x) ((x)[HCI_FEATURE_ENHANCED_INQ_OFF] & HCI_FEATURE_ENHANCED_INQ_MASK)
-
-#define HCI_FEATURE_INTERLACED_INQ_SCAN_MASK 0x10
-#define HCI_FEATURE_INTERLACED_INQ_SCAN_OFF 3
-#define HCI_LMP_INTERLACED_INQ_SCAN_SUPPORTED(x) ((x)[HCI_FEATURE_INTERLACED_INQ_SCAN_OFF] & HCI_FEATURE_INTERLACED_INQ_SCAN_MASK)
-
-#define HCI_FEATURE_INTERLACED_PAGE_SCAN_MASK 0x20
-#define HCI_FEATURE_INTERLACED_PAGE_SCAN_OFF 3
-#define HCI_LMP_INTERLACED_PAGE_SCAN_SUPPORTED(x) ((x)[HCI_FEATURE_INTERLACED_PAGE_SCAN_OFF] & HCI_FEATURE_INTERLACED_PAGE_SCAN_MASK)
-
-#define HCI_FEATURE_INQ_RSSI_MASK 0x40
-#define HCI_FEATURE_INQ_RSSI_OFF 3
-#define HCI_LMP_INQ_RSSI_SUPPORTED(x) ((x)[HCI_FEATURE_INQ_RSSI_OFF] & HCI_FEATURE_INQ_RSSI_MASK)
-
-#define HCI_FEATURE_ESCO_EV3_MASK 0x80
-#define HCI_FEATURE_ESCO_EV3_OFF 3
-#define HCI_ESCO_EV3_SUPPORTED(x) ((x)[HCI_FEATURE_ESCO_EV3_OFF] & HCI_FEATURE_ESCO_EV3_MASK)
-
-#define HCI_FEATURE_ESCO_EV4_MASK 0x01
-#define HCI_FEATURE_ESCO_EV4_OFF 4
-#define HCI_ESCO_EV4_SUPPORTED(x) ((x)[HCI_FEATURE_ESCO_EV4_OFF] & HCI_FEATURE_ESCO_EV4_MASK)
-
-#define HCI_FEATURE_ESCO_EV5_MASK 0x02
-#define HCI_FEATURE_ESCO_EV5_OFF 4
-#define HCI_ESCO_EV5_SUPPORTED(x) ((x)[HCI_FEATURE_ESCO_EV5_OFF] & HCI_FEATURE_ESCO_EV5_MASK)
-
-#define HCI_FEATURE_ABSENCE_MASKS_MASK 0x04
-#define HCI_FEATURE_ABSENCE_MASKS_OFF 4
-#define HCI_LMP_ABSENCE_MASKS_SUPPORTED(x) ((x)[HCI_FEATURE_ABSENCE_MASKS_OFF] & HCI_FEATURE_ABSENCE_MASKS_MASK)
-
-#define HCI_FEATURE_AFH_CAP_SLAVE_MASK 0x08
-#define HCI_FEATURE_AFH_CAP_SLAVE_OFF 4
-#define HCI_LMP_AFH_CAP_SLAVE_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CAP_SLAVE_OFF] & HCI_FEATURE_AFH_CAP_SLAVE_MASK)
-
-#define HCI_FEATURE_AFH_CLASS_SLAVE_MASK 0x10
-#define HCI_FEATURE_AFH_CLASS_SLAVE_OFF 4
-#define HCI_LMP_AFH_CLASS_SLAVE_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CLASS_SLAVE_OFF] & HCI_FEATURE_AFH_CLASS_SLAVE_MASK)
-
-#define HCI_FEATURE_ALIAS_AUTH_MASK 0x20
-#define HCI_FEATURE_ALIAS_AUTH_OFF 4
-#define HCI_LMP_ALIAS_AUTH_SUPPORTED(x) ((x)[HCI_FEATURE_ALIAS_AUTH_OFF] & HCI_FEATURE_ALIAS_AUTH_MASK)
-
-#define HCI_FEATURE_ANON_MODE_MASK 0x40
-#define HCI_FEATURE_ANON_MODE_OFF 4
-#define HCI_LMP_ANON_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_ANON_MODE_OFF] & HCI_FEATURE_ANON_MODE_MASK)
-
-#define HCI_FEATURE_3_SLOT_EDR_ACL_MASK 0x80
-#define HCI_FEATURE_3_SLOT_EDR_ACL_OFF 4
-#define HCI_3_SLOT_EDR_ACL_SUPPORTED(x) ((x)[HCI_FEATURE_3_SLOT_EDR_ACL_OFF] & HCI_FEATURE_3_SLOT_EDR_ACL_MASK)
-
-#define HCI_FEATURE_5_SLOT_EDR_ACL_MASK 0x01
-#define HCI_FEATURE_5_SLOT_EDR_ACL_OFF 5
-#define HCI_5_SLOT_EDR_ACL_SUPPORTED(x) ((x)[HCI_FEATURE_5_SLOT_EDR_ACL_OFF] & HCI_FEATURE_5_SLOT_EDR_ACL_MASK)
-
-#define HCI_FEATURE_SNIFF_SUB_RATE_MASK 0x02
-#define HCI_FEATURE_SNIFF_SUB_RATE_OFF 5
-#define HCI_SNIFF_SUB_RATE_SUPPORTED(x) ((x)[HCI_FEATURE_SNIFF_SUB_RATE_OFF] & HCI_FEATURE_SNIFF_SUB_RATE_MASK)
-
-#define HCI_FEATURE_ATOMIC_ENCRYPT_MASK 0x04
-#define HCI_FEATURE_ATOMIC_ENCRYPT_OFF 5
-#define HCI_ATOMIC_ENCRYPT_SUPPORTED(x) ((x)[HCI_FEATURE_ATOMIC_ENCRYPT_OFF] & HCI_FEATURE_ATOMIC_ENCRYPT_MASK)
-
-#define HCI_FEATURE_AFH_CAP_MASTR_MASK 0x08
-#define HCI_FEATURE_AFH_CAP_MASTR_OFF 5
-#define HCI_LMP_AFH_CAP_MASTR_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CAP_MASTR_OFF] & HCI_FEATURE_AFH_CAP_MASTR_MASK)
-
-#define HCI_FEATURE_AFH_CLASS_MASTR_MASK 0x10
-#define HCI_FEATURE_AFH_CLASS_MASTR_OFF 5
-#define HCI_LMP_AFH_CLASS_MASTR_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CLASS_MASTR_OFF] & HCI_FEATURE_AFH_CLASS_MASTR_MASK)
-
-#define HCI_FEATURE_EDR_ESCO_2MPS_MASK 0x20
-#define HCI_FEATURE_EDR_ESCO_2MPS_OFF 5
-#define HCI_EDR_ESCO_2MPS_SUPPORTED(x) ((x)[HCI_FEATURE_EDR_ESCO_2MPS_OFF] & HCI_FEATURE_EDR_ESCO_2MPS_MASK)
-
-#define HCI_FEATURE_EDR_ESCO_3MPS_MASK 0x40
-#define HCI_FEATURE_EDR_ESCO_3MPS_OFF 5
-#define HCI_EDR_ESCO_3MPS_SUPPORTED(x) ((x)[HCI_FEATURE_EDR_ESCO_3MPS_OFF] & HCI_FEATURE_EDR_ESCO_3MPS_MASK)
-
-#define HCI_FEATURE_3_SLOT_EDR_ESCO_MASK 0x80
-#define HCI_FEATURE_3_SLOT_EDR_ESCO_OFF 5
-#define HCI_3_SLOT_EDR_ESCO_SUPPORTED(x) ((x)[HCI_FEATURE_3_SLOT_EDR_ESCO_OFF] & HCI_FEATURE_3_SLOT_EDR_ESCO_MASK)
-
-#define HCI_FEATURE_EXT_INQ_RSP_MASK 0x01
-#define HCI_FEATURE_EXT_INQ_RSP_OFF 6
-#define HCI_EXT_INQ_RSP_SUPPORTED(x) ((x)[HCI_FEATURE_EXT_INQ_RSP_OFF] & HCI_FEATURE_EXT_INQ_RSP_MASK)
-
-#define HCI_FEATURE_ANUM_PIN_AWARE_MASK 0x02
-#define HCI_FEATURE_ANUM_PIN_AWARE_OFF 6
-#define HCI_ANUM_PIN_AWARE_SUPPORTED(x) ((x)[HCI_FEATURE_ANUM_PIN_AWARE_OFF] & HCI_FEATURE_ANUM_PIN_AWARE_MASK)
-
-#define HCI_FEATURE_ANUM_PIN_CAP_MASK 0x04
-#define HCI_FEATURE_ANUM_PIN_CAP_OFF 6
-#define HCI_ANUM_PIN_CAP_SUPPORTED(x) ((x)[HCI_FEATURE_ANUM_PIN_CAP_OFF] & HCI_FEATURE_ANUM_PIN_CAP_MASK)
-
-#define HCI_FEATURE_SIMPLE_PAIRING_MASK 0x08
-#define HCI_FEATURE_SIMPLE_PAIRING_OFF 6
-#define HCI_SIMPLE_PAIRING_SUPPORTED(x) ((x)[HCI_FEATURE_SIMPLE_PAIRING_OFF] & HCI_FEATURE_SIMPLE_PAIRING_MASK)
-
-#define HCI_FEATURE_ENCAP_PDU_MASK 0x10
-#define HCI_FEATURE_ENCAP_PDU_OFF 6
-#define HCI_ENCAP_PDU_SUPPORTED(x) ((x)[HCI_FEATURE_ENCAP_PDU_OFF] & HCI_FEATURE_ENCAP_PDU_MASK)
-
-#define HCI_FEATURE_ERROR_DATA_MASK 0x20
-#define HCI_FEATURE_ERROR_DATA_OFF 6
-#define HCI_ERROR_DATA_SUPPORTED(x) ((x)[HCI_FEATURE_ERROR_DATA_OFF] & HCI_FEATURE_ERROR_DATA_MASK)
-
-#define HCI_FEATURE_NON_FLUSHABLE_PB_MASK 0x40
-#define HCI_FEATURE_NON_FLUSHABLE_PB_OFF 6
-#define HCI_NON_FLUSHABLE_PB_SUPPORTED(x) ((x)[HCI_FEATURE_NON_FLUSHABLE_PB_OFF] & HCI_FEATURE_NON_FLUSHABLE_PB_MASK)
-
-#define HCI_FEATURE_LINK_SUP_TO_EVT_MASK 0x01
-#define HCI_FEATURE_LINK_SUP_TO_EVT_OFF 7
-#define HCI_LINK_SUP_TO_EVT_SUPPORTED(x) ((x)[HCI_FEATURE_LINK_SUP_TO_EVT_OFF] & HCI_FEATURE_LINK_SUP_TO_EVT_MASK)
-
-#define HCI_FEATURE_INQ_RESP_TX_MASK 0x02
-#define HCI_FEATURE_INQ_RESP_TX_OFF 7
-#define HCI_INQ_RESP_TX_SUPPORTED(x) ((x)[HCI_FEATURE_INQ_RESP_TX_OFF] & HCI_FEATURE_INQ_RESP_TX_MASK)
-
-#define HCI_FEATURE_EXTENDED_MASK 0x80
-#define HCI_FEATURE_EXTENDED_OFF 7
-#define HCI_LMP_EXTENDED_SUPPORTED(x) ((x)[HCI_FEATURE_EXTENDED_OFF] & HCI_FEATURE_EXTENDED_MASK)
-
-/*
-** Features encoding - page 1
-*/
-#define HCI_EXT_FEATURE_SSP_HOST_MASK 0x01
-#define HCI_EXT_FEATURE_SSP_HOST_OFF 0
-#define HCI_SSP_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SSP_HOST_OFF] & HCI_EXT_FEATURE_SSP_HOST_MASK)
-
-/*
-** Local Supported Commands encoding
-*/
-#define HCI_NUM_SUPP_COMMANDS_BYTES 64
-
-#define HCI_SUPP_COMMANDS_INQUIRY_MASK 0x01
-#define HCI_SUPP_COMMANDS_INQUIRY_OFF 0
-#define HCI_INQUIRY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_INQUIRY_OFF] & HCI_SUPP_COMMANDS_INQUIRY_MASK)
-
-#define HCI_SUPP_COMMANDS_INQUIRY_CANCEL_MASK 0x02
-#define HCI_SUPP_COMMANDS_INQUIRY_CANCEL_OFF 0
-#define HCI_INQUIRY_CANCEL_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_INQUIRY_CANCEL_OFF] & HCI_SUPP_COMMANDS_INQUIRY_CANCEL_MASK)
-
-#define HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_MASK 0x04
-#define HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_OFF 0
-#define HCI_PERIODIC_INQUIRY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_OFF] & HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_MASK)
-
-#define HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_MASK 0x08
-#define HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_OFF 0
-#define HCI_EXIT_PERIODIC_INQUIRY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_OFF] & HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_MASK)
-
-#define HCI_SUPP_COMMANDS_CREATE_CONN_MASK 0x10
-#define HCI_SUPP_COMMANDS_CREATE_CONN_OFF 0
-#define HCI_CREATE_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CREATE_CONN_OFF] & HCI_SUPP_COMMANDS_CREATE_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_DISCONNECT_MASK 0x20
-#define HCI_SUPP_COMMANDS_DISCONNECT_OFF 0
-#define HCI_DISCONNECT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_DISCONNECT_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_MASK)
-
-#define HCI_SUPP_COMMANDS_ADD_SCO_CONN_MASK 0x40
-#define HCI_SUPP_COMMANDS_ADD_SCO_CONN_OFF 0
-#define HCI_ADD_SCO_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ADD_SCO_CONN_OFF] & HCI_SUPP_COMMANDS_ADD_SCO_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_MASK 0x80
-#define HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_OFF 0
-#define HCI_CANCEL_CREATE_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_OFF] & HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_MASK 0x01
-#define HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_OFF 1
-#define HCI_ACCEPT_CONN_REQUEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_OFF] & HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_MASK 0x02
-#define HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_OFF 1
-#define HCI_REJECT_CONN_REQUEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_OFF] & HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_MASK 0x04
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_OFF 1
-#define HCI_LINK_KEY_REQUEST_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_MASK 0x08
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_OFF 1
-#define HCI_LINK_KEY_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_MASK 0x10
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_OFF 1
-#define HCI_PIN_CODE_REQUEST_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_MASK 0x20
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_OFF 1
-#define HCI_PIN_CODE_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_MASK 0x40
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_OFF 1
-#define HCI_CHANGE_CONN_PKT_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_OFF] & HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_AUTH_REQUEST_MASK 0x80
-#define HCI_SUPP_COMMANDS_AUTH_REQUEST_OFF 1
-#define HCI_AUTH_REQUEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_AUTH_REQUEST_OFF] & HCI_SUPP_COMMANDS_AUTH_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_MASK 0x01
-#define HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_OFF 2
-#define HCI_SET_CONN_ENCRYPTION_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_OFF] & HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_MASK)
-
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_MASK 0x02
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_OFF 2
-#define HCI_CHANGE_CONN_LINK_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_MASTER_LINK_KEY_MASK 0x04
-#define HCI_SUPP_COMMANDS_MASTER_LINK_KEY_OFF 2
-#define HCI_MASTER_LINK_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_MASTER_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_MASTER_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_MASK 0x08
-#define HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_OFF 2
-#define HCI_REMOTE_NAME_REQUEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_OFF] & HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_MASK 0x10
-#define HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_OFF 2
-#define HCI_CANCEL_REMOTE_NAME_REQUEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_OFF] & HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_OFF 2
-#define HCI_READ_REMOTE_SUPP_FEATURES_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_OFF 2
-#define HCI_READ_REMOTE_EXT_FEATURES_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_MASK 0x80
-#define HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_OFF 2
-#define HCI_READ_REMOTE_VER_INFO_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_OFF] & HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_OFF 3
-#define HCI_READ_CLOCK_OFFSET_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_OFF] & HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LMP_HANDLE_MASK 0x02
-#define HCI_SUPP_COMMANDS_READ_LMP_HANDLE_OFF 3
-#define HCI_READ_LMP_HANDLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LMP_HANDLE_OFF] & HCI_SUPP_COMMANDS_READ_LMP_HANDLE_MASK)
-
-#define HCI_SUPP_COMMANDS_HOLD_MODE_CMD_MASK 0x02
-#define HCI_SUPP_COMMANDS_HOLD_MODE_CMD_OFF 4
-#define HCI_HOLD_MODE_CMD_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_HOLD_MODE_CMD_OFF] & HCI_SUPP_COMMANDS_HOLD_MODE_CMD_MASK)
-
-#define HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_MASK 0x04
-#define HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_OFF 4
-#define HCI_SNIFF_MODE_CMD_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_OFF] & HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_MASK)
-
-#define HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_MASK 0x08
-#define HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_OFF 4
-#define HCI_EXIT_SNIFF_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_OFF] & HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_PARK_STATE_MASK 0x10
-#define HCI_SUPP_COMMANDS_PARK_STATE_OFF 4
-#define HCI_PARK_STATE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_PARK_STATE_OFF] & HCI_SUPP_COMMANDS_PARK_STATE_MASK)
-
-#define HCI_SUPP_COMMANDS_EXIT_PARK_STATE_MASK 0x20
-#define HCI_SUPP_COMMANDS_EXIT_PARK_STATE_OFF 4
-#define HCI_EXIT_PARK_STATE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_EXIT_PARK_STATE_OFF] & HCI_SUPP_COMMANDS_EXIT_PARK_STATE_MASK)
-
-#define HCI_SUPP_COMMANDS_QOS_SETUP_MASK 0x40
-#define HCI_SUPP_COMMANDS_QOS_SETUP_OFF 4
-#define HCI_QOS_SETUP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_QOS_SETUP_OFF] & HCI_SUPP_COMMANDS_QOS_SETUP_MASK)
-
-#define HCI_SUPP_COMMANDS_ROLE_DISCOVERY_MASK 0x80
-#define HCI_SUPP_COMMANDS_ROLE_DISCOVERY_OFF 4
-#define HCI_ROLE_DISCOVERY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ROLE_DISCOVERY_OFF] & HCI_SUPP_COMMANDS_ROLE_DISCOVERY_MASK)
-
-#define HCI_SUPP_COMMANDS_SWITCH_ROLE_MASK 0x01
-#define HCI_SUPP_COMMANDS_SWITCH_ROLE_OFF 5
-#define HCI_SWITCH_ROLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SWITCH_ROLE_OFF] & HCI_SUPP_COMMANDS_SWITCH_ROLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_MASK 0x02
-#define HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_OFF 5
-#define HCI_READ_LINK_POLICY_SET_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_MASK 0x04
-#define HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_OFF 5
-#define HCI_WRITE_LINK_POLICY_SET_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_MASK 0x08
-#define HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_OFF 5
-#define HCI_READ_DEF_LINK_POLICY_SET_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_MASK 0x10
-#define HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_OFF 5
-#define HCI_WRITE_DEF_LINK_POLICY_SET_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_MASK 0x20
-#define HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_OFF 5
-#define HCI_FLOW_SPECIFICATION_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_OFF] & HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_MASK 0x40
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_OFF 5
-#define HCI_SET_EVENT_MASK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_EVENT_MASK_OFF] & HCI_SUPP_COMMANDS_SET_EVENT_MASK_MASK)
-
-#define HCI_SUPP_COMMANDS_RESET_MASK 0x80
-#define HCI_SUPP_COMMANDS_RESET_OFF 5
-#define HCI_RESET_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_RESET_OFF] & HCI_SUPP_COMMANDS_RESET_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_EVENT_FILTER_MASK 0x01
-#define HCI_SUPP_COMMANDS_SET_EVENT_FILTER_OFF 6
-#define HCI_SET_EVENT_FILTER_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_EVENT_FILTER_OFF] & HCI_SUPP_COMMANDS_SET_EVENT_FILTER_MASK)
-
-#define HCI_SUPP_COMMANDS_FLUSH_MASK 0x02
-#define HCI_SUPP_COMMANDS_FLUSH_OFF 6
-#define HCI_FLUSH_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_FLUSH_OFF] & HCI_SUPP_COMMANDS_FLUSH_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PIN_TYPE_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_PIN_TYPE_OFF 6
-#define HCI_READ_PIN_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_PIN_TYPE_OFF] & HCI_SUPP_COMMANDS_READ_PIN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_OFF 6
-#define HCI_WRITE_PIN_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_OFF] & HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_MASK 0x10
-#define HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_OFF 6
-#define HCI_CREATE_NEW_UNIT_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_OFF] & HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_OFF 6
-#define HCI_READ_STORED_LINK_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_MASK 0x40
-#define HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_OFF 6
-#define HCI_WRITE_STORED_LINK_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_MASK 0x80
-#define HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_OFF 6
-#define HCI_DELETE_STORED_LINK_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_MASK 0x01
-#define HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_OFF 7
-#define HCI_WRITE_LOCAL_NAME_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_OFF] & HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_NAME_MASK 0x02
-#define HCI_SUPP_COMMANDS_READ_LOCAL_NAME_OFF 7
-#define HCI_READ_LOCAL_NAME_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_NAME_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_NAME_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_OFF 7
-#define HCI_READ_CONN_ACCEPT_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_OFF 7
-#define HCI_WRITE_CONN_ACCEPT_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_TOUT_MASK 0x10
-#define HCI_SUPP_COMMANDS_READ_PAGE_TOUT_OFF 7
-#define HCI_READ_PAGE_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_PAGE_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_MASK 0x20
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_OFF 7
-#define HCI_WRITE_PAGE_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_OFF 7
-#define HCI_READ_SCAN_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_MASK 0x80
-#define HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_OFF 7
-#define HCI_WRITE_SCAN_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_OFF 8
-#define HCI_READ_PAGE_SCAN_ACTIVITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_OFF 8
-#define HCI_WRITE_PAGE_SCAN_ACTIVITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_OFF 8
-#define HCI_READ_INQURIY_SCAN_ACTIVITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_OFF 8
-#define HCI_WRITE_INQURIY_SCAN_ACTIVITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_MASK 0x10
-#define HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_OFF 8
-#define HCI_READ_AUTH_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_MASK 0x20
-#define HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_OFF 8
-#define HCI_WRITE_AUTH_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_OFF 8
-#define HCI_READ_ENCRYPT_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_MASK 0x80
-#define HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_OFF 8
-#define HCI_WRITE_ENCRYPT_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_OFF 9
-#define HCI_READ_CLASS_DEVICE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_OFF] & HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_OFF 9
-#define HCI_WRITE_CLASS_DEVICE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_OFF] & HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_VOICE_SETTING_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_VOICE_SETTING_OFF 9
-#define HCI_READ_VOICE_SETTING_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_VOICE_SETTING_OFF] & HCI_SUPP_COMMANDS_READ_VOICE_SETTING_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_OFF 9
-#define HCI_WRITE_VOICE_SETTING_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_OFF] & HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_MASK 0x10
-#define HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_OFF 9
-#define HCI_READ_AUTO_FLUSH_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_MASK 0x20
-#define HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_OFF 9
-#define HCI_WRITE_AUTO_FLUSH_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_OFF 9
-#define HCI_READ_NUM_BROAD_RETRANS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_OFF] & HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_MASK 0x80
-#define HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_OFF 9
-#define HCI_WRITE_NUM_BROAD_RETRANS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_OFF] & HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_OFF 10
-#define HCI_READ_HOLD_MODE_ACTIVITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_OFF 10
-#define HCI_WRITE_HOLD_MODE_ACTIVITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_OFF 10
-#define HCI_READ_TRANS_PWR_LEVEL_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_OFF] & HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_MASK 0x08
-#define HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_OFF 10
-#define HCI_READ_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_MASK 0x10
-#define HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_OFF 10
-#define HCI_WRITE_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_MASK 0x20
-#define HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_OFF 10
-#define HCI_SET_HOST_CTRLR_TO_HOST_FC_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_OFF] & HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_MASK)
-
-#define HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_MASK 0x40
-#define HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_OFF 10
-#define HCI_HOST_BUFFER_SIZE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_OFF] & HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_MASK 0x80
-#define HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_OFF 10
-#define HCI_HOST_NUM_COMPLETED_PKTS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_OFF] & HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_OFF 11
-#define HCI_READ_LINK_SUP_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_OFF 11
-#define HCI_WRITE_LINK_SUP_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_OFF 11
-#define HCI_READ_NUM_SUPP_IAC_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_OFF] & HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_MASK 0x08
-#define HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_OFF 11
-#define HCI_READ_CURRENT_IAC_LAP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_OFF] & HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_MASK 0x10
-#define HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_OFF 11
-#define HCI_WRITE_CURRENT_IAC_LAP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_OFF] & HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_OFF 11
-#define HCI_READ_PAGE_SCAN_PER_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_MASK 0x40
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_OFF 11
-#define HCI_WRITE_PAGE_SCAN_PER_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_MASK 0x80
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_OFF 11
-#define HCI_READ_PAGE_SCAN_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_MASK 0x01
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_OFF 12
-#define HCI_WRITE_PAGE_SCAN_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_MASK 0x02
-#define HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_OFF 12
-#define HCI_SET_AFH_CHNL_CLASS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_OFF] & HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_MASK 0x10
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_OFF 12
-#define HCI_READ_INQUIRY_SCAN_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_MASK 0x20
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_OFF 12
-#define HCI_WRITE_INQUIRY_SCAN_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_OFF 12
-#define HCI_READ_INQUIRY_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_OFF] & HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_MASK 0x80
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_OFF 12
-#define HCI_WRITE_INQUIRY_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_OFF 13
-#define HCI_READ_PAGE_SCAN_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_OFF 13
-#define HCI_WRITE_PAGE_SCAN_TYPE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_OFF 13
-#define HCI_READ_AFH_CHNL_ASSESS_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_OFF] & HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_OFF 13
-#define HCI_WRITE_AFH_CHNL_ASSESS_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_MASK 0x08
-#define HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_OFF 14
-#define HCI_READ_LOCAL_VER_INFO_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_MASK 0x10
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_OFF 14
-#define HCI_READ_LOCAL_SUP_CMDS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_OFF 14
-#define HCI_READ_LOCAL_SUPP_FEATURES_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_OFF 14
-#define HCI_READ_LOCAL_EXT_FEATURES_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_MASK 0x80
-#define HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_OFF 14
-#define HCI_READ_BUFFER_SIZE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_OFF] & HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_OFF 15
-#define HCI_READ_COUNTRY_CODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_OFF] & HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BD_ADDR_MASK 0x02
-#define HCI_SUPP_COMMANDS_READ_BD_ADDR_OFF 15
-#define HCI_READ_BD_ADDR_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_BD_ADDR_OFF] & HCI_SUPP_COMMANDS_READ_BD_ADDR_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_OFF 15
-#define HCI_READ_FAIL_CONTACT_CNTR_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_OFF] & HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_MASK)
-
-#define HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_MASK 0x08
-#define HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_OFF 15
-#define HCI_RESET_FAIL_CONTACT_CNTR_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_OFF] & HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_MASK)
-
-#define HCI_SUPP_COMMANDS_GET_LINK_QUALITY_MASK 0x10
-#define HCI_SUPP_COMMANDS_GET_LINK_QUALITY_OFF 15
-#define HCI_GET_LINK_QUALITY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_GET_LINK_QUALITY_OFF] & HCI_SUPP_COMMANDS_GET_LINK_QUALITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_RSSI_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_RSSI_OFF 15
-#define HCI_READ_RSSI_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_RSSI_OFF] & HCI_SUPP_COMMANDS_READ_RSSI_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_OFF 15
-#define HCI_READ_AFH_CH_MAP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_OFF] & HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BD_CLOCK_MASK 0x80
-#define HCI_SUPP_COMMANDS_READ_BD_CLOCK_OFF 15
-#define HCI_READ_BD_CLOCK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_BD_CLOCK_OFF] & HCI_SUPP_COMMANDS_READ_BD_CLOCK_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_OFF 16
-#define HCI_READ_LOOPBACK_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_OFF] & HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_OFF 16
-#define HCI_WRITE_LOOPBACK_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_MASK 0x04
-#define HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_OFF 16
-#define HCI_ENABLE_DEV_UNDER_TEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_OFF] & HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_MASK)
-
-#define HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_MASK 0x08
-#define HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_OFF 16
-#define HCI_SETUP_SYNCH_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_MASK 0x10
-#define HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_OFF 16
-#define HCI_ACCEPT_SYNCH_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_MASK 0x20
-#define HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_OFF 16
-#define HCI_REJECT_SYNCH_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_OFF 17
-#define HCI_READ_EXT_INQUIRY_RESP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_OFF] & HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_OFF 17
-#define HCI_WRITE_EXT_INQUIRY_RESP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_OFF] & HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_MASK)
-
-#define HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_MASK 0x04
-#define HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_OFF 17
-#define HCI_REFRESH_ENCRYPTION_KEY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_OFF] & HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_MASK)
-
-/* Octet 17, bit 3 is reserved */
-
-#define HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_MASK 0x10
-#define HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_OFF 17
-#define HCI_SNIFF_SUB_RATE_CMD_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_OFF] & HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_OFF 17
-#define HCI_READ_SIMPLE_PAIRING_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_OFF] & HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_MASK 0x40
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_OFF 17
-#define HCI_WRITE_SIMPLE_PAIRING_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_MASK 0x80
-#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_OFF 17
-#define HCI_READ_LOCAL_OOB_DATA_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_OFF 18
-#define HCI_READ_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_OFF] & HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_OFF 18
-#define HCI_WRITE_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_OFF] & HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF 18
-#define HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF] & HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF 18
-#define HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF] & HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK)
-
-#define HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_MASK 0x80
-#define HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_OFF 18
-#define HCI_IO_CAPABILITY_RESPONSE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_OFF] & HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_MASK 0x01
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_OFF 19
-#define HCI_USER_CONFIRMATION_REQUEST_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_MASK 0x02
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_OFF 19
-#define HCI_USER_CONFIRMATION_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_MASK 0x04
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_OFF 19
-#define HCI_USER_PASSKEY_REQUEST_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_MASK 0x08
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_OFF 19
-#define HCI_USER_PASSKEY_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_MASK 0x10
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_OFF 19
-#define HCI_REMOTE_OOB_DATA_REQUEST_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_MASK 0x20
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_OFF 19
-#define HCI_WRITE_SIMPLE_PAIRING_DBG_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_ENHANCED_FLUSH_MASK 0x40
-#define HCI_SUPP_COMMANDS_ENHANCED_FLUSH_OFF 19
-#define HCI_ENHANCED_FLUSH_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ENHANCED_FLUSH_OFF] & HCI_SUPP_COMMANDS_ENHANCED_FLUSH_MASK)
-
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_MASK 0x80
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_OFF 19
-#define HCI_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_MASK)
-
-/* Supported Commands (Byte 20) */
-#define HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_MASK 0x04
-#define HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_OFF 20
-#define HCI_SEND_NOTIF_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_OFF] & HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_MASK)
-
-#define HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_MASK 0x08
-#define HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_OFF 20
-#define HCI_IO_CAP_REQ_NEG_REPLY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_MASK 0x10
-#define HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_OFF 20
-#define HCI_READ_ENCR_KEY_SIZE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_OFF] & HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_MASK)
-
-/* Supported Commands (Byte 21) */
-#define HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_MASK 0x01
-#define HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_OFF 21
-#define HCI_CREATE_PHYSICAL_LINK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_OFF] & HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_MASK 0x02
-#define HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_OFF 21
-#define HCI_ACCEPT_PHYSICAL_LINK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_OFF] & HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_MASK 0x04
-#define HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_OFF 21
-#define HCI_DISCONNECT_PHYSICAL_LINK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_MASK 0x08
-#define HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_OFF 21
-#define HCI_CREATE_LOGICAL_LINK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_OFF] & HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_MASK 0x10
-#define HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_OFF 21
-#define HCI_ACCEPT_LOGICAL_LINK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_OFF] & HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_MASK 0x20
-#define HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_OFF 21
-#define HCI_DISCONNECT_LOGICAL_LINK_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_MASK 0x40
-#define HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_OFF 21
-#define HCI_LOGICAL_LINK_CANCEL_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_OFF] & HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_MASK)
-
-#define HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_MASK 0x80
-#define HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_OFF 21
-#define HCI_FLOW_SPEC_MODIFY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_OFF] & HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_MASK)
-
-/* Supported Commands (Byte 22) */
-#define HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF 22
-#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF] & HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF 22
-#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_MASK 0x04
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_OFF 22
-#define HCI_SET_EVENT_MASK_PAGE_2_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_OFF] & HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCATION_DATA_MASK 0x08
-#define HCI_SUPP_COMMANDS_READ_LOCATION_DATA_OFF 22
-#define HCI_READ_LOCATION_DATA_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCATION_DATA_OFF] & HCI_SUPP_COMMANDS_READ_LOCATION_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_MASK 0x10
-#define HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_OFF 22
-#define HCI_WRITE_LOCATION_DATA_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_OFF] & HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_MASK 0x20
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_OFF 22
-#define HCI_READ_LOCAL_AMP_INFO_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_MASK 0x40
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_OFF 22
-#define HCI_READ_LOCAL_AMP_ASSOC_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_MASK 0x80
-#define HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_OFF 22
-#define HCI_WRITE_REMOTE_AMP_ASSOC_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_OFF] & HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_MASK)
-
-/* Supported Commands (Byte 23) */
-#define HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_OFF 23
-#define HCI_READ_FLOW_CONTROL_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_OFF] & HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_MASK 0x02
-#define HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_OFF 23
-#define HCI_WRITE_FLOW_CONTROL_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_OFF 23
-#define HCI_READ_DATA_BLOCK_SIZE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_OFF] & HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_MASK 0x20
-#define HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_OFF 23
-#define HCI_ENABLE_AMP_RCVR_REPORTS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_OFF] & HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_MASK)
-
-#define HCI_SUPP_COMMANDS_AMP_TEST_END_MASK 0x40
-#define HCI_SUPP_COMMANDS_AMP_TEST_END_OFF 23
-#define HCI_AMP_TEST_END_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_AMP_TEST_END_OFF] & HCI_SUPP_COMMANDS_AMP_TEST_END_MASK)
-
-#define HCI_SUPP_COMMANDS_AMP_TEST_MASK 0x80
-#define HCI_SUPP_COMMANDS_AMP_TEST_OFF 23
-#define HCI_AMP_TEST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_AMP_TEST_OFF] & HCI_SUPP_COMMANDS_AMP_TEST_MASK)
-
-/* Supported Commands (Byte 24) */
-#define HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_MASK 0x01
-#define HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_OFF 24
-#define HCI_READ_TRANSMIT_POWER_LEVEL_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_OFF] & HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_MASK 0x04
-#define HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_OFF 24
-#define HCI_READ_BE_FLUSH_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_MASK 0x08
-#define HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_OFF 24
-#define HCI_WRITE_BE_FLUSH_TOUT_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_MASK 0x10
-#define HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_OFF 24
-#define HCI_SHORT_RANGE_MODE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_OFF] & HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_MASK)
-
-/* LE commands TBD
-** Supported Commands (Byte 24 continued)
-** Supported Commands (Byte 25)
-** Supported Commands (Byte 26)
-** Supported Commands (Byte 27)
-** Supported Commands (Byte 28)
-*/
-
-/*
-Commands of HCI_GRP_VENDOR_SPECIFIC group for WIDCOMM SW LM Simulator
-*/
-#ifdef _WIDCOMM
-
-#define HCI_SET_HCI_TRACE (0x0001 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_SET_LM_TRACE (0x0002 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_WRITE_COUNTRY_CODE (0x0004 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_READ_LM_HISTORY (0x0005 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_WRITE_BD_ADDR (0x0006 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DISABLE_ENCRYPTION (0x0007 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DISABLE_AUTHENTICATION (0x0008 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_GENERIC_LC_CMD (0x000A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_INCR_POWER (0x000B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DECR_POWER (0x000C | HCI_GRP_VENDOR_SPECIFIC)
-
-/* Definitions for the local transactions */
-#define LM_DISCONNECT (0x00D0 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_AUTHENTICATION_REQUESTED (0x00D1 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_SET_CONN_ENCRYPTION (0x00D2 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_START_ENCRYPT_KEY_SIZE (0x00D3 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_START_ENCRYPTION (0x00D4 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_STOP_ENCRYPTION (0x00D5 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_CHANGE_CONN_PACKET_TYPE (0x00D6 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_RMT_NAME_REQUEST (0x00D7 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_FEATURES (0x00D8 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_VERSION_INFO (0x00D9 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_TIMING_INFO (0x00DA | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_CLOCK_OFFSET (0x00DB | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HOLD_MODE (0x00DC | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_EXIT_PARK_MODE (0x00DD | HCI_GRP_VENDOR_SPECIFIC)
-
-#define LM_SCO_LINK_REQUEST (0x00E0 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_SCO_CHANGE (0x00E4 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_SCO_REMOVE (0x00E8 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_MAX_SLOTS (0x00F1 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_MAX_SLOTS_REQUEST (0x00F2 | HCI_GRP_VENDOR_SPECIFIC)
-
-#ifdef INCLUDE_OPTIONAL_PAGING_SCHEME
-#define LM_OPTIONAL_PAGE_REQUEST (0x00F3 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_OPTIONAL_PAGESCAN_REQUEST (0x00F4 | HCI_GRP_VENDOR_SPECIFIC)
-#endif
-
-#define LM_SETUP_COMPLETE (0x00FF | HCI_GRP_VENDOR_SPECIFIC)
-
-#define LM_HIST_SEND_LMP_FRAME (0x0100 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_RECV_LMP_FRAME (0x0101 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCIT_ERROR (0x0102 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_PER_INQ_TOUT (0x0103 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_INQ_SCAN_TOUT (0x0104 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_PAGE_SCAN_TOUT (0x0105 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_RESET_TOUT (0x0106 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_MANDAT_PSCAN_TOUT (0x0107 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_START_TRANS (0x0108 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_HOST_REPLY (0x0109 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_TIMEOUT (0x010A | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_TX_COMP (0x010B | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_HCID_SUSPENDED (0x010C | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_FAILED (0x010D | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCI_COMMAND (0x010E | HCI_GRP_VENDOR_SPECIFIC)
-
-#define LM_HIST_HCI_EVENT (0x010F | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCI_UPDATA (0x0110 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCI_DNDATA (0x0111 | HCI_GRP_VENDOR_SPECIFIC)
-
-#define HCI_ENTER_TEST_MODE (0x0300 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_LMP_TEST_CNTRL (0x0301 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DEBUG_LC_CMD_MIN (0x0300 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DEBUG_LC_CMD_MAX (0x03FF | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DEBUG_LC_COMMAND HCI_DEBUG_LC_CMD_MAX
-
-#endif
-
-
-/* Broadcom Vendor Specific Event sub-codes */
-#define HCI_BRCM_VSE_SUBCODE_AUTOMATIC_PAIRING_REQUEST 0x01
-#define HCI_BRCM_VSE_SUBCODE_RX_COMPLETE 0x02
-#define HCI_BRCM_VSE_SUBCODE_LINK_QUALITY_REPORT 0x03
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_1_PACKET_REPORT 0x04
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_N_PACKETS_REPORT_SUMMARY 0x05
-#define HCI_BRCM_VSE_SUBCODE_MODULE_XRAM_TEST_REPORT_SUMMARY 0x06
-#define HCI_BRCM_VSE_SUBCODE_CONNECTIONLESS_RX_TEST_STATISTICS 0x07
-#define HCI_BRCM_VSE_SUBCODE_FM_INTERRUPT 0x08
-#define HCI_BRCM_VSE_SUBCODE_TCA_DEBUG_REPORT 0x0B
-#define HCI_BRCM_VSE_SUBCODE_RAM_ROM_CLOCK_TEST_STATUS 0x0C
-#define HCI_BRCM_VSE_SUBCODE_DEBUG_OUTPUT_STRING 0x0D
-#define HCI_BRCM_VSE_SUBCODE_PCM_DATA_DUMP 0x0E
-#define HCI_BRCM_VSE_SUBCODE_PROTOCOL_MESSAGE_DUMP 0x0F
-#define HCI_BRCM_VSE_SUBCODE_GPS_DATA 0x10
-#define HCI_BRCM_VSE_SUBCODE_RESERVED_11 0x11
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_EVENT 0x12
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_SETUP_EVENT 0x13
-#define HCI_BRCM_VSE_SUBCODE_MEIF_RX_EVENT 0x14
-#define HCI_BRCM_VSE_SUBCODE_UNDETECTED_CRC_ERROR_EVENT 0x15
-#define HCI_BRCM_VSE_SUBCODE_BFC_DISCONNECT_EVENT 0x16
-#define HCI_BRCM_VSE_SUBCODE_CUSTOMER_SPECIFIC_CS_ENERGY_DETECTED_EVENTS 0x17
-#define HCI_BRCM_VSE_SUBCODE_BFC_POLLING_INFO_EVENT 0x18
-#define HCI_BRCM_VSE_SUBCODE_EEPROM_CHIP_ERASE_BY_MINIDRIVER_STATUS_REPORT 0xCE
-
-/* MIP related Vendor Specific Event */
-#define HCI_BRCM_VSE_SUBCODE_MIP_MODE_CHANGE 0x27
-#define HCI_BRCM_VSE_SUBCODE_MIP_DISCONNECT 0x28
-#define HCI_BRCM_VSE_SUBCODE_MIP_EIR_CMPLT 0x29
-#define HCI_BRCM_VSE_SUBCODE_MIP_ENC_KEY 0x2A
-#define HCI_BRCM_VSE_SUBCODE_MIP_DATA_RECEIVED 0x2E
-
-/* AMP VSE events
-*/
-#define AMP_VSE_CHANSPEC_CHAN_MASK 0x00ff
-
-#define AMP_VSE_CHANSPEC_CTL_SB_MASK 0x0300
-#define AMP_VSE_CHANSPEC_CTL_SB_LOWER 0x0100
-#define AMP_VSE_CHANSPEC_CTL_SB_UPPER 0x0200
-#define AMP_VSE_CHANSPEC_CTL_SB_NONE 0x0300
-
-#define AMP_VSE_CHANSPEC_BW_MASK 0x0C00
-#define AMP_VSE_CHANSPEC_BW_10 0x0400
-#define AMP_VSE_CHANSPEC_BW_20 0x0800
-#define AMP_VSE_CHANSPEC_BW_40 0x0C00
-
-#define AMP_VSE_CHANSPEC_BAND_MASK 0xf000
-#define AMP_VSE_CHANSPEC_BAND_5G 0x1000
-#define AMP_VSE_CHANSPEC_BAND_2G 0x2000
-
-/* PCM2 related */
-#define HCI_BRCM_CUSTOMER_EXT_ARC_LEN 4
-#define LOC_AUDIO_ROUTING_CONTROL 0x88
-#define LOC_ARC_CHANNEL_ID 0xF3
-
-#define ARC_INTERFACE_PCMI2S 0x01
-#define ARC_INTERFACE_FM_I2S 0x02
-#define ARC_INTERFACE_SLB 0x03
-
-#define ARC_MODE_NOT_USED 0x00
-#define ARC_MODE_BT_AUDIO 0x01
-#define ARC_MODE_FMRX 0x02
-#define ARC_MODE_FMTX 0x03
-#define ARC_MODE_SHARED_BT_FMRX 0x04
-#define ARC_MODE_SHARED_BT_FMTX 0x05
-
-#define BRCM_PCM2_SETUP_READ_SIZE 0x01
-#define BRCM_PCM2_SETUP_WRITE_SIZE 0x1A
-
-#endif
-
diff --git a/halimpl/bcm2079x/include/nfc_target.h b/halimpl/bcm2079x/include/nfc_target.h
index da72074..4f314b9 100644
--- a/halimpl/bcm2079x/include/nfc_target.h
+++ b/halimpl/bcm2079x/include/nfc_target.h
@@ -17,3 +17,40 @@
******************************************************************************/
#pragma once
#include "nfc_hal_target.h"
+
+/* the maximum number of NFCEE interface supported */
+#ifndef NFC_MAX_EE_INTERFACE
+#define NFC_MAX_EE_INTERFACE 3
+#endif
+
+/* the maximum number of NFCEE information supported. */
+#ifndef NFC_MAX_EE_INFO
+#define NFC_MAX_EE_INFO 8
+#endif
+
+/* the maximum number of NFCEE TLVs supported */
+#ifndef NFC_MAX_EE_TLVS
+#define NFC_MAX_EE_TLVS 1
+#endif
+
+/* the maximum size of NFCEE TLV list supported */
+#ifndef NFC_MAX_EE_TLV_SIZE
+#define NFC_MAX_EE_TLV_SIZE 150
+#endif
+
+/* Number of times reader/writer should attempt to resend a command on failure */
+#ifndef RW_MAX_RETRIES
+#define RW_MAX_RETRIES 5
+#endif
+
+/* Define to TRUE to include not openned Broadcom Vendor Specific implementation */
+
+/* API macros for DLL (needed to export API functions from DLLs) */
+#define NFC_API EXPORT_API
+#define LLCP_API EXPORT_API
+
+/* Max length of service name */
+#ifndef LLCP_MAX_SN_LEN
+#define LLCP_MAX_SN_LEN 255 /* max length of service name */
+#endif
+
diff --git a/halimpl/bcm2079x/include/userial.h b/halimpl/bcm2079x/include/userial.h
index 120d1ea..7ca7369 100644
--- a/halimpl/bcm2079x/include/userial.h
+++ b/halimpl/bcm2079x/include/userial.h
@@ -254,6 +254,7 @@
UDRV_API extern void USERIAL_Close(tUSERIAL_PORT);
UDRV_API extern BOOLEAN USERIAL_Feature(tUSERIAL_FEATURE);
UDRV_API extern BOOLEAN USERIAL_IsClosed();
+UDRV_API extern void USERIAL_SetPowerOffDelays(int,int);
UDRV_API extern void USERIAL_PowerupDevice(tUSERIAL_PORT port);
/*******************************************************************************
diff --git a/halimpl/bcm2079x/libnfc-brcm.conf b/halimpl/bcm2079x/libnfc-brcm.conf
deleted file mode 100644
index 5cf09e7..0000000
--- a/halimpl/bcm2079x/libnfc-brcm.conf
+++ /dev/null
@@ -1,208 +0,0 @@
-## this file is used by Broadcom's Hardware Abstraction Layer at external/libnfc-nci/halimpl/
-
-###############################################################################
-# Application options
-APPL_TRACE_LEVEL=0xFF
-PROTOCOL_TRACE_LEVEL=0xFFFFFFFF
-
-###############################################################################
-# performance measurement
-# Change this setting to control how often USERIAL log the performance (throughput)
-# data on read/write/poll
-# defailt is to log performance dara for every 100 read or write
-#REPORT_PERFORMANCE_MEASURE=100
-
-###############################################################################
-# File used for NFA storage
-NFA_STORAGE="/data/nfc"
-
-###############################################################################
-# Snooze Mode Settings
-#
-# By default snooze mode is enabled. Set SNOOZE_MODE_CFG byte[0] to 0
-# to disable.
-#
-# If SNOOZE_MODE_CFG is not provided, the default settings are used:
-# They are as follows:
-# 8 Sleep Mode (0=Disabled 1=UART 8=SPI/I2C)
-# 0 Idle Threshold Host
-# 0 Idle Threshold HC
-# 0 NFC Wake active mode (0=ActiveLow 1=ActiveHigh)
-# 1 Host Wake active mode (0=ActiveLow 1=ActiveHigh)
-#
-#SNOOZE_MODE_CFG={08:00:00:00:01}
-
-###############################################################################
-# Insert a delay in milliseconds after NFC_WAKE and before write to NFCC
-NFC_WAKE_DELAY=20
-
-###############################################################################
-# Various Delay settings (in ms) used in USERIAL
-# POWER_ON_DELAY
-# Delay after turning on chip, before writing to transport (default 300)
-# PRE_POWER_OFF_DELAY
-# Delay after deasserting NFC-Wake before turn off chip (default 0)
-# POST_POWER_OFF_DELAY
-# Delay after turning off chip, before USERIAL_close returns (default 0)
-#
-#POWER_ON_DELAY=300
-#PRE_POWER_OFF_DELAY=0
-#POST_POWER_OFF_DELAY=0
-
-###############################################################################
-# LPTD mode configuration
-# byte[0] is the length of the remaining bytes in this value
-# if set to 0, LPTD params will NOT be sent to NFCC (i.e. disabled).
-# byte[1] is the param id it should be set to B9.
-# byte[2] is the length of the LPTD parameters
-# byte[3] indicates if LPTD is enabled
-# if set to 0, LPTD will be disabled (parameters will still be sent).
-# byte[4-n] are the LPTD parameters.
-# By default, LPTD is enabled and default settings are used.
-# See nfc_hal_dm_cfg.c for defaults
-LPTD_CFG={23:B9:21:01:02:FF:FF:04:A0:0F:40:00:80:02:02:10:00:00:00:31:0C:30:00:00:00:00:00:00:00:00:00:00:00:00:00:00}
-
-###############################################################################
-# Startup Configuration (100 bytes maximum)
-#
-# For the 0xCA parameter, byte[9] (marked by 'AA') is for UICC0, and byte[10] (marked by BB) is
-# for UICC1. The values are defined as:
-# 0 : UICCx only supports ISO_DEP in low power mode.
-# 2 : UICCx only supports Mifare in low power mode.
-# 3 : UICCx supports both ISO_DEP and Mifare in low power mode.
-#
-# AA BB
-NFA_DM_START_UP_CFG={1F:CB:01:01:A5:01:01:CA:14:00:00:00:00:06:E8:03:00:00:00:00:00:00:00:00:00:00:00:00:00:28:01:01}
-
-###############################################################################
-# Startup Vendor Specific Configuration (100 bytes maximum);
-# byte[0] TLV total len = 0x5
-# byte[1] NCI_MTS_CMD|NCI_GID_PROP = 0x2f
-# byte[2] NCI_MSG_FRAME_LOG = 0x9
-# byte[3] 2
-# byte[4] 0=turn off RF frame logging; 1=turn on
-# byte[5] 0=turn off SWP frame logging; 1=turn on
-# NFA_DM_START_UP_VSC_CFG={05:2F:09:02:01:01}
-
-###############################################################################
-# Configure crystal frequency when internal LPO can't detect the frequency.
-#XTAL_FREQUENCY=0
-
-###############################################################################
-# Firmware patch file
-# If the value is not set then patch download is disabled.
-FW_PATCH="/vendor/firmware/bcm2079x_firmware.ncd"
-
-###############################################################################
-# Firmware pre-patch file (sent before the above patch file)
-# If the value is not set then pre-patch is not used.
-FW_PRE_PATCH="/vendor/firmware/bcm2079x_pre_firmware.ncd"
-
-###############################################################################
-# Firmware patch format
-# 1 = HCD
-# 2 = NCD (default)
-#NFA_CONFIG_FORMAT=2
-
-###############################################################################
-# SPD Debug mode
-# If set to 1, any failure of downloading a patch will trigger a hard-stop
-#SPD_DEBUG=0
-
-###############################################################################
-# SPD Max Retry Count
-# The number of attempts to download a patch before giving up (defualt is 3).
-# Note, this resets after a power-cycle.
-#SPD_MAX_RETRY_COUNT=3
-
-###############################################################################
-# transport driver
-#
-# TRANSPORT_DRIVER=<driver>
-#
-# where <driver> can be, for example:
-# "/dev/ttyS" (UART)
-# "/dev/bcmi2cnfc" (I2C)
-# "hwtun" (HW Tunnel)
-# "/dev/bcmspinfc" (SPI)
-# "/dev/btusb0" (BT USB)
-TRANSPORT_DRIVER="/dev/bcm2079x"
-
-###############################################################################
-# power control driver
-# Specify a kernel driver that support ioctl commands to control NFC_EN and
-# NFC_WAKE gpio signals.
-#
-# POWER_CONTRL_DRIVER=<driver>
-# where <driver> can be, for example:
-# "/dev/nfcpower"
-# "/dev/bcmi2cnfc" (I2C)
-# "/dev/bcmspinfc" (SPI)
-# i2c and spi driver may be used to control NFC_EN and NFC_WAKE signal
-POWER_CONTROL_DRIVER="/dev/bcm2079x"
-
-###############################################################################
-# I2C transport driver options
-#
-BCMI2CNFC_ADDRESS=0
-
-###############################################################################
-# I2C transport driver try to read multiple packets in read() if data is available
-# remove the comment below to enable this feature
-#READ_MULTIPLE_PACKETS=1
-
-###############################################################################
-# SPI transport driver options
-#SPI_NEGOTIATION={0A:F0:00:01:00:00:00:FF:FF:00:00}
-
-###############################################################################
-# UART transport driver options
-#
-# PORT=1,2,3,...
-# BAUD=115200, 19200, 9600, 4800,
-# DATABITS=8, 7, 6, 5
-# PARITY="even" | "odd" | "none"
-# STOPBITS="0" | "1" | "1.5" | "2"
-
-#UART_PORT=2
-#UART_BAUD=115200
-#UART_DATABITS=8
-#UART_PARITY="none"
-#UART_STOPBITS="1"
-
-###############################################################################
-# Insert a delay in microseconds per byte after a write to NFCC.
-# after writing a block of data to the NFCC, delay this an amopunt of time before
-# writing next block of data. the delay is calculated as below
-# NFC_WRITE_DELAY * (number of byte written) / 1000 milliseconds
-# e.g. after 259 bytes is written, delay (259 * 20 / 1000) 5 ms before next write
-NFC_WRITE_DELAY=20
-
-###############################################################################
-# Maximum Number of Credits to be allowed by the NFCC
-# This value overrides what the NFCC specifices allowing the host to have
-# the control to work-around transport limitations. If this value does
-# not exist or is set to 0, the NFCC will provide the number of credits.
-MAX_RF_DATA_CREDITS=1
-
-###############################################################################
-# Allow UICC to be powered off if there is no traffic.
-# Timeout is in ms. If set to 0, then UICC will not be powered off.
-UICC_IDLE_TIMEOUT=30000
-
-
-###############################################################################
-# Antenna Configuration - This data is used when setting 0xC8 config item
-# at startup (before discovery is started). If not used, no value is sent.
-#
-# The settings for this value are documented here:
-# http://wcgbu.broadcom.com/wpan/PM/Project%20Document%20Library/bcm20791B0/
-# Design/Doc/PHY%20register%20settings/BCM20791-B2-1027-02_PHY_Recommended_Reg_Settings.xlsx
-# This document is maintained by Paul Forshaw.
-#
-# The values marked as ?? should be tweaked per antenna or customer/app:
-# {20:C8:1E:06:??:00:??:??:??:00:??:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:??:01:00:00:40:04}
-# array[0] = 0x20 is length of the payload from array[1] to the end
-# array[1] = 0xC8 is PREINIT_DSP_CFG
-#PREINIT_DSP_CFG={20:C8:1E:06:1F:00:0F:03:3C:00:04:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:48:01:00:00:40:04}
-
diff --git a/halimpl/bcm2079x/nfc_nci.c b/halimpl/bcm2079x/nfc_nci.c
index 850357a..bbfbb4c 100644
--- a/halimpl/bcm2079x/nfc_nci.c
+++ b/halimpl/bcm2079x/nfc_nci.c
@@ -141,6 +141,7 @@
dev->nci_device.control_granted = hal_control_granted;
dev->nci_device.power_cycle = hal_power_cycle;
+
// Copy in
*device = (hw_device_t*) dev;
diff --git a/halimpl/bcm2079x/udrv/include/upio.h b/halimpl/bcm2079x/udrv/include/upio.h
deleted file mode 100644
index 77ee4ba..0000000
--- a/halimpl/bcm2079x/udrv/include/upio.h
+++ /dev/null
@@ -1,366 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2001-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef UPIO_H
-#define UPIO_H
-
-/* Enumeration of UPIO features */
-/* Not all features enumerated here are supported by the hardware. */
-/* Use UPIO_Feature() to determine support of a particular feature. */
-enum
-{
- /* LEDs */
- UPIO_FEAT_LED1,
- UPIO_FEAT_LED2,
- UPIO_FEAT_LED3,
- UPIO_FEAT_LED4,
- UPIO_FEAT_LED5,
- UPIO_FEAT_LED6,
- UPIO_FEAT_LED7,
- UPIO_FEAT_LED8,
-
- /* Switches */
- UPIO_FEAT_SWITCH1,
- UPIO_FEAT_SWITCH2,
- UPIO_FEAT_SWITCH3,
- UPIO_FEAT_SWITCH4,
- UPIO_FEAT_SWITCH5,
- UPIO_FEAT_SWITCH6,
- UPIO_FEAT_SWITCH7,
- UPIO_FEAT_SWITCH8,
- UPIO_FEAT_SWITCH9,
- UPIO_FEAT_SWITCH10,
- UPIO_FEAT_SWITCH11,
- UPIO_FEAT_SWITCH12,
- UPIO_FEAT_SWITCH13,
- UPIO_FEAT_SWITCH14,
- UPIO_FEAT_SWITCH15,
- UPIO_FEAT_SWITCH16,
-
- /* Jumpers */
- UPIO_FEAT_JUMPER1,
- UPIO_FEAT_JUMPER2,
- UPIO_FEAT_JUMPER3,
- UPIO_FEAT_JUMPER4,
- UPIO_FEAT_JUMPER5,
- UPIO_FEAT_JUMPER6,
- UPIO_FEAT_JUMPER7,
- UPIO_FEAT_JUMPER8,
-
- /* Push buttons */
- UPIO_FEAT_BUTTON1,
- UPIO_FEAT_BUTTON2,
- UPIO_FEAT_BUTTON3,
- UPIO_FEAT_BUTTON4,
- UPIO_FEAT_BUTTON5,
- UPIO_FEAT_BUTTON6,
- UPIO_FEAT_BUTTON7,
- UPIO_FEAT_BUTTON8,
-
- /* General purpose */
- UPIO_FEAT_GENERAL1,
- UPIO_FEAT_GENERAL2,
- UPIO_FEAT_GENERAL3,
- UPIO_FEAT_GENERAL4,
- UPIO_FEAT_GENERAL5,
- UPIO_FEAT_GENERAL6,
- UPIO_FEAT_GENERAL7,
- UPIO_FEAT_GENERAL8,
- UPIO_FEAT_GENERAL9,
- UPIO_FEAT_GENERAL10,
- UPIO_FEAT_GENERAL11,
- UPIO_FEAT_GENERAL12,
- UPIO_FEAT_GENERAL13,
- UPIO_FEAT_GENERAL14,
- UPIO_FEAT_GENERAL15,
- UPIO_FEAT_GENERAL16,
- UPIO_FEAT_GENERAL17,
- UPIO_FEAT_GENERAL18,
- UPIO_FEAT_GENERAL19,
- UPIO_FEAT_GENERAL20,
- UPIO_FEAT_GENERAL21,
- UPIO_FEAT_GENERAL22,
- UPIO_FEAT_GENERAL23,
- UPIO_FEAT_GENERAL24,
- UPIO_FEAT_GENERAL25,
- UPIO_FEAT_GENERAL26,
- UPIO_FEAT_GENERAL27,
- UPIO_FEAT_GENERAL28,
- UPIO_FEAT_GENERAL29,
- UPIO_FEAT_GENERAL30,
- UPIO_FEAT_GENERAL31,
- UPIO_FEAT_GENERAL32,
-
- UPIO_FEAT_IN_HIGH, /* Support for input with interrupt on high signal level. */
- UPIO_FEAT_IN_LOW, /* Support for input with interrupt on low signal level. */
- UPIO_FEAT_IN_RISE, /* Support for input with interrupt on rising edge. */
- UPIO_FEAT_IN_FALL /* Support for input with interrupt on falling. */
-
-};
-typedef UINT8 tUPIO_FEATURE;
-
-
-/* Enumeration of UPIO configurations */
-enum
-{
- UPIO_OUT,
- UPIO_IN,
- UPIO_IN_EDGE,
- UPIO_IN_LEVEL,
- UPIO_NONE
-};
-typedef UINT8 tUPIO_CONFIG;
-
-
-/* Enumeration of UPIO types */
-enum
-{
- UPIO_LED, /* LED */
- UPIO_SWITCH, /* Switch */
- UPIO_JUMPER, /* Jumper */
- UPIO_BUTTON, /* Push-button switch */
- UPIO_GENERAL, /* General purpose I/O */
-
- UPIO_NUMBER_OF_TYPES
-};
-typedef UINT8 tUPIO_TYPE;
-
-
-/* Enumeration of UPIO states */
-enum
-{
- UPIO_OFF,
- UPIO_ON,
- UPIO_TOGGLE
-};
-typedef UINT8 tUPIO_STATE;
-
-
-enum
-{
- UPIO_SW_BANK2,
- UPIO_SW_BANK3
-};
-typedef UINT8 tUPIO_SW_BANK;
-
-/* Jumper masks */
-#define UPIO_JUMPER1 0x00000001
-#define UPIO_JUMPER2 0x00000002
-#define UPIO_JUMPER3 0x00000004
-#define UPIO_JUMPER4 0x00000008
-#define UPIO_JUMPER5 0x00000010
-#define UPIO_JUMPER6 0x00000020
-#define UPIO_JUMPER7 0x00000040
-#define UPIO_JUMPER8 0x00000080
-
-/* General purpose i/o masks */
-#define UPIO_GENERAL1 0x00000001
-#define UPIO_GENERAL2 0x00000002
-#define UPIO_GENERAL3 0x00000004
-#define UPIO_GENERAL4 0x00000008
-#define UPIO_GENERAL5 0x00000010
-#define UPIO_GENERAL6 0x00000020
-#define UPIO_GENERAL7 0x00000040
-#define UPIO_GENERAL8 0x00000080
-#define UPIO_GENERAL9 0x00000100
-#define UPIO_GENERAL10 0x00000200
-#define UPIO_GENERAL11 0x00000400
-#define UPIO_GENERAL12 0x00000800
-#define UPIO_GENERAL13 0x00001000
-#define UPIO_GENERAL14 0x00002000
-#define UPIO_GENERAL15 0x00004000
-#define UPIO_GENERAL16 0x00008000
-#define UPIO_GENERAL17 0x00010000
-#define UPIO_GENERAL18 0x00020000
-#define UPIO_GENERAL19 0x00040000
-#define UPIO_GENERAL20 0x00080000
-#define UPIO_GENERAL21 0x00100000
-#define UPIO_GENERAL22 0x00200000
-#define UPIO_GENERAL23 0x00400000
-#define UPIO_GENERAL24 0x00800000
-#define UPIO_GENERAL25 0x01000000
-#define UPIO_GENERAL26 0x02000000
-#define UPIO_GENERAL27 0x04000000
-#define UPIO_GENERAL28 0x08000000
-#define UPIO_GENERAL29 0x10000000
-#define UPIO_GENERAL30 0x20000000
-#define UPIO_GENERAL31 0x40000000
-#define UPIO_GENERAL32 0x80000000
-
-typedef UINT32 tUPIO;
-
-/* LED masks */
-#define UPIO_LED1 0x00000001
-#define UPIO_LED2 0x00000002
-#define UPIO_LED3 0x00000004
-#define UPIO_LED4 0x00000008
-#define UPIO_LED5 0x00000010
-#define UPIO_LED6 0x00000020
-#define UPIO_LED7 0x00000040
-#define UPIO_LED8 0x00000080
-
-#define UPIO_LED_ALL (UPIO_LED1 | UPIO_LED2 | UPIO_LED3 | UPIO_LED4 | \
- UPIO_LED5 | UPIO_LED6 | UPIO_LED7 | UPIO_LED8)
-
-
-/* Switch masks */
-#define UPIO_SWITCH1 0x00000001
-#define UPIO_SWITCH2 0x00000002
-#define UPIO_SWITCH3 0x00000004
-#define UPIO_SWITCH4 0x00000008
-#define UPIO_SWITCH5 0x00000010
-#define UPIO_SWITCH6 0x00000020
-#define UPIO_SWITCH7 0x00000040
-#define UPIO_SWITCH8 0x00000080
-#define UPIO_SWITCH9 0x00000100
-#define UPIO_SWITCH10 0x00000200
-#define UPIO_SWITCH11 0x00000400
-#define UPIO_SWITCH12 0x00000800
-#define UPIO_SWITCH13 0x00001000
-#define UPIO_SWITCH14 0x00002000
-#define UPIO_SWITCH15 0x00004000
-#define UPIO_SWITCH16 0x00008000
-
-/* Push button masks */
-#define UPIO_BUTTON1 0x00000001
-#define UPIO_BUTTON2 0x00000002
-#define UPIO_BUTTON3 0x00000004
-#define UPIO_BUTTON4 0x00000008
-#define UPIO_BUTTON5 0x00000010
-#define UPIO_BUTTON6 0x00000020
-#define UPIO_BUTTON7 0x00000040
-#define UPIO_BUTTON8 0x00000080
-
-typedef void (tUPIO_CBACK)(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* API functions for UPIO driver */
-
-/*****************************************************************************
-**
-** Function UPIO_Init
-**
-** Description
-** Initialize the GPIO service.
-** This function is typically called once upon system startup.
-**
-** Returns nothing
-**
-*****************************************************************************/
-UDRV_API void UPIO_Init(void *p_cfg);
-
-
-/*****************************************************************************
-**
-** Function UPIO_Set
-**
-** Description
-** This function sets one or more GPIO devices to the given state.
-** Multiple GPIOs of the same type can be masked together to set more
-** than one GPIO. This function can only be used on types UPIO_LED and
-** UPIO_GENERAL.
-**
-** Input Parameters:
-** type The type of device.
-** pio Indicates the particular GPIOs.
-** state The desired state.
-**
-** Output Parameter:
-** None.
-**
-** Returns:
-** None.
-**
-*****************************************************************************/
-UDRV_API void UPIO_Set(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
-
-
-/*****************************************************************************
-**
-** Function UPIO_Read
-**
-** Description
-** Read the state of a GPIO. This function can be used for any type of
-** device. Parameter pio can only indicate a single GPIO; multiple GPIOs
-** cannot be masked together.
-**
-** Input Parameters:
-** Type: The type of device.
-** pio: Indicates the particular GUPIO.
-**
-** Output Parameter:
-** None.
-**
-** Returns:
-** State of GPIO (UPIO_ON or UPIO_OFF).
-**
-*****************************************************************************/
-UDRV_API tUPIO_STATE UPIO_Read(tUPIO_TYPE type, tUPIO pio);
-
-
-/*****************************************************************************
-**
-** Function UPIO_Config
-**
-** Description - Configure GPIOs of type UPIO_GENERAL as inputs or outputs
-** - Configure GPIOs to be polled or interrupt driven
-**
-** Currently only support polled GPIOs.
-**
-** Input Parameters:
-** type The type of device.
-** pio Indicates the particular GPIOs.
-** config
-** cback
-**
-** Output Parameter:
-** None.
-**
-** Returns:
-** None.
-**
-*****************************************************************************/
-UDRV_API void UPIO_Config(tUPIO_TYPE type, tUPIO pio, tUPIO_CONFIG config, tUPIO_CBACK *cback);
-
-
-/*****************************************************************************
-**
-** Function UPIO_Feature
-**
-** Description
-** Checks whether a feature of the pio API is supported
-**
-** Input Parameter:
-** feature The feature to check
-**
-** Output Parameter:
-** None.
-**
-** Returns:
-** TRUE if feature is supported, FALSE if it is not.
-**
-*****************************************************************************/
-UDRV_API BOOLEAN UPIO_Feature(tUPIO_FEATURE feature);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ifdef UPIO_H */
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index d2c527d..a589528 100755
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -29,17 +29,24 @@
extern "C" void GKI_shutdown();
extern void resetConfig();
+extern "C" void delete_stack_non_volatile_store ();
NfcAdaptation* NfcAdaptation::mpInstance = NULL;
ThreadMutex NfcAdaptation::sLock;
nfc_nci_device_t* NfcAdaptation::mHalDeviceContext = NULL;
tHAL_NFC_CBACK* NfcAdaptation::mHalCallback = NULL;
tHAL_NFC_DATA_CBACK* NfcAdaptation::mHalDataCallback = NULL;
+ThreadCondVar NfcAdaptation::mHalOpenCompletedEvent;
+ThreadCondVar NfcAdaptation::mHalCloseCompletedEvent;
UINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00;
UINT8 appl_trace_level = 0xff;
char bcm_nfc_location[120];
+static UINT8 nfa_dm_cfg[sizeof ( tNFA_DM_CFG ) ];
+extern tNFA_DM_CFG *p_nfa_dm_cfg;
+extern UINT8 nfa_ee_max_ee_cfg;
+
/*******************************************************************************
**
** Function: NfcAdaptation::NfcAdaptation()
@@ -104,8 +111,24 @@
strcpy ( bcm_nfc_location, "/data/nfc" );
if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
ScrProtocolTraceFlag = num;
+
+ if ( GetStrValue ( NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof ( nfa_dm_cfg ) ) )
+ p_nfa_dm_cfg = ( tNFA_DM_CFG * ) &nfa_dm_cfg[0];
+
+ if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) )
+ {
+ nfa_ee_max_ee_cfg = num;
+ ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg);
+ }
+
initializeGlobalAppLogLevel ();
+ if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
+ (num == 1) )
+ ALOGD ("%s: preserve stack NV store", __FUNCTION__);
+ else
+ delete_stack_non_volatile_store ();
+
GKI_init ();
GKI_enable ();
GKI_create_task ((TASKPTR)NFCA_TASK, BTU_TASK, (INT8*)"NFCA_TASK", 0, 0, (pthread_cond_t*)NULL, NULL);
@@ -194,8 +217,6 @@
UINT32 NfcAdaptation::Thread (UINT32 arg)
{
const char* func = "NfcAdaptation::Thread";
- unsigned long num;
- char temp[120];
ALOGD ("%s: enter", func);
{
@@ -478,6 +499,80 @@
}
}
+
+/*******************************************************************************
+**
+** Function: NfcAdaptation::DownloadFirmware
+**
+** Description: Download firmware patch files.
+**
+** Returns: None.
+**
+*******************************************************************************/
+void NfcAdaptation::DownloadFirmware ()
+{
+ const char* func = "NfcAdaptation::DownloadFirmware";
+ ALOGD ("%s: enter", func);
+ HalInitialize ();
+
+ mHalOpenCompletedEvent.lock ();
+ ALOGD ("%s: try open HAL", func);
+ HalOpen (HalDownloadFirmwareCallback, HalDownloadFirmwareDataCallback);
+ mHalOpenCompletedEvent.wait ();
+
+ mHalCloseCompletedEvent.lock ();
+ ALOGD ("%s: try close HAL", func);
+ HalClose ();
+ mHalCloseCompletedEvent.wait ();
+
+ HalTerminate ();
+ ALOGD ("%s: exit", func);
+}
+
+/*******************************************************************************
+**
+** Function: NfcAdaptation::HalDownloadFirmwareCallback
+**
+** Description: Receive events from the HAL.
+**
+** Returns: None.
+**
+*******************************************************************************/
+void NfcAdaptation::HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status)
+{
+ const char* func = "NfcAdaptation::HalDownloadFirmwareCallback";
+ ALOGD ("%s: event=0x%X", func, event);
+ switch (event)
+ {
+ case HAL_NFC_OPEN_CPLT_EVT:
+ {
+ ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT", func);
+ mHalOpenCompletedEvent.signal ();
+ break;
+ }
+ case HAL_NFC_CLOSE_CPLT_EVT:
+ {
+ ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", func);
+ mHalCloseCompletedEvent.signal ();
+ break;
+ }
+ }
+}
+
+/*******************************************************************************
+**
+** Function: NfcAdaptation::HalDownloadFirmwareDataCallback
+**
+** Description: Receive data events from the HAL.
+**
+** Returns: None.
+**
+*******************************************************************************/
+void NfcAdaptation::HalDownloadFirmwareDataCallback (uint16_t data_len, uint8_t* p_data)
+{
+}
+
+
/*******************************************************************************
**
** Function: ThreadMutex::ThreadMutex()
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index c7cce1d..1498b5d 100755
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -24,12 +24,7 @@
#define LOG_TAG "NfcAdaptation"
-#if GENERIC_TARGET
-const char alternative_config_path[] = "/data/nfc/";
-#else
const char alternative_config_path[] = "";
-#endif
-
const char transport_config_path[] = "/etc/";
#define config_name "libnfc-brcm.conf"
@@ -61,7 +56,7 @@
static CNfcConfig& GetInstance();
friend void readOptionalConfig(const char* optional);
- bool getValue(const char* name, char* pValue, size_t len) const;
+ bool getValue(const char* name, char* pValue, size_t& len) const;
bool getValue(const char* name, unsigned long& rValue) const;
bool getValue(const char* name, unsigned short & rValue) const;
const CNfcParam* find(const char* p_name) const;
@@ -166,14 +161,14 @@
END_LINE
};
- FILE* fd;
+ FILE* fd = NULL;
string token;
string strValue;
unsigned long numValue = 0;
CNfcParam* pParam = NULL;
- int i;
- int base;
- char c;
+ int i = 0;
+ int base = 0;
+ char c = 0;
state = BEGIN_LINE;
/* open config file, read it into a buffer */
@@ -413,7 +408,7 @@
** false if setting does not exist
**
*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t len) const
+bool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const
{
const CNfcParam* pParam = find(name);
if (pParam == NULL)
@@ -422,7 +417,9 @@
if (pParam->str_len() > 0)
{
memset(pValue, 0, len);
- memcpy(pValue, pParam->str_value(), pParam->str_len());
+ if (len > pParam->str_len())
+ len = pParam->str_len();
+ memcpy(pValue, pParam->str_value(), len);
return true;
}
return false;
@@ -499,7 +496,7 @@
if((*it)->str_len() > 0)
ALOGD("%s found %s=%s\n", __func__, p_name, (*it)->str_value());
else
- ALOGD("%s found %s=(0x%X)\n", __func__, p_name, (*it)->numValue());
+ ALOGD("%s found %s=(0x%lX)\n", __func__, p_name, (*it)->numValue());
return *it;
}
else
@@ -658,11 +655,13 @@
** Returns: none
**
*******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long len)
+extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l)
{
+ size_t len = l;
CNfcConfig& rConfig = CNfcConfig::GetInstance();
- return rConfig.getValue(name, pValue, len);
+ bool b = rConfig.getValue(name, pValue, len);
+ return b ? len : 0;
}
/*******************************************************************************
@@ -688,7 +687,7 @@
if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4)
{
const unsigned char* p = (const unsigned char*)pParam->str_value();
- for (int i = 0 ; i < pParam->str_len(); ++i)
+ for (size_t i = 0 ; i < pParam->str_len(); ++i)
{
v *= 256;
v += *p++;
diff --git a/src/adaptation/libmain.c b/src/adaptation/libmain.c
index ad3f6ec..1a2a6d9 100755
--- a/src/adaptation/libmain.c
+++ b/src/adaptation/libmain.c
@@ -25,6 +25,7 @@
#include "nfa_nv_co.h"
#include "nfa_nv_ci.h"
#include "config.h"
+#include "nfc_hal_nv_co.h"
#define LOG_TAG "BrcmNfcNfa"
#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s)
@@ -35,6 +36,7 @@
extern UINT32 ScrProtocolTraceFlag; // = SCR_PROTO_TRACE_ALL; // 0x017F;
static const char* sTable = "0123456789abcdef";
extern char bcm_nfc_location[];
+static const char* sNfaStorageBin = "/nfaStorage.bin";
/*******************************************************************************
**
@@ -92,8 +94,11 @@
NFC_API extern void nfa_nv_co_read(UINT8 *pBuffer, UINT16 nbytes, UINT8 block)
{
char filename[256], filename2[256];
+
+ memset (filename, 0, sizeof(filename));
+ memset (filename2, 0, sizeof(filename2));
strcpy(filename2, bcm_nfc_location);
- strcat(filename2, "/nfaStorage.bin");
+ strncat(filename2, sNfaStorageBin, sizeof(filename2)-strlen(filename2)-1);
if (strlen(filename2) > 200)
{
ALOGE ("%s: filename too long", __FUNCTION__);
@@ -103,7 +108,7 @@
ALOGD ("%s: buffer len=%u; file=%s", __FUNCTION__, nbytes, filename);
int fileStream = open (filename, O_RDONLY);
- if (fileStream > 0)
+ if (fileStream >= 0)
{
size_t actualRead = read (fileStream, pBuffer, nbytes);
if (actualRead > 0)
@@ -146,8 +151,11 @@
NFC_API extern void nfa_nv_co_write(const UINT8 *pBuffer, UINT16 nbytes, UINT8 block)
{
char filename[256], filename2[256];
+
+ memset (filename, 0, sizeof(filename));
+ memset (filename2, 0, sizeof(filename2));
strcpy(filename2, bcm_nfc_location);
- strcat(filename2, "/nfaStorage.bin");
+ strncat(filename2, sNfaStorageBin, sizeof(filename2)-strlen(filename2)-1);
if (strlen(filename2) > 200)
{
ALOGE ("%s: filename too long", __FUNCTION__);
@@ -159,7 +167,7 @@
int fileStream = 0;
fileStream = open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
- if (fileStream > 0)
+ if (fileStream >= 0)
{
size_t actualWritten = write (fileStream, pBuffer, nbytes);
ALOGD ("%s: %d bytes written", __FUNCTION__, actualWritten);
@@ -182,6 +190,47 @@
/*******************************************************************************
**
+** Function delete_stack_non_volatile_store
+**
+** Description Delete all the content of the stack's storage location.
+**
+** Parameters none
+**
+** Returns none
+**
+*******************************************************************************/
+void delete_stack_non_volatile_store ()
+{
+ static BOOLEAN firstTime = TRUE;
+ char filename[256], filename2[256];
+
+ if (firstTime == FALSE)
+ return;
+ firstTime = FALSE;
+
+ ALOGD ("%s", __FUNCTION__);
+
+ memset (filename, 0, sizeof(filename));
+ memset (filename2, 0, sizeof(filename2));
+ strcpy(filename2, bcm_nfc_location);
+ strncat(filename2, sNfaStorageBin, sizeof(filename2)-strlen(filename2)-1);
+ if (strlen(filename2) > 200)
+ {
+ ALOGE ("%s: filename too long", __FUNCTION__);
+ return;
+ }
+ sprintf (filename, "%s%u", filename2, DH_NV_BLOCK);
+ remove (filename);
+ sprintf (filename, "%s%u", filename2, HC_F3_NV_BLOCK);
+ remove (filename);
+ sprintf (filename, "%s%u", filename2, HC_F4_NV_BLOCK);
+ remove (filename);
+ sprintf (filename, "%s%u", filename2, HC_F2_NV_BLOCK);
+ remove (filename);
+}
+
+/*******************************************************************************
+**
** Function byte2hex
**
** Description convert a byte array to hexadecimal string
diff --git a/src/gki/common/gki_buffer.c b/src/gki/common/gki_buffer.c
index 067c7ba..10a816a 100644
--- a/src/gki/common/gki_buffer.c
+++ b/src/gki/common/gki_buffer.c
@@ -29,6 +29,8 @@
#if GKI_BUFFER_DEBUG
#define LOG_TAG "GKI_DEBUG"
+#include <android/log.h>
+#include <cutils/log.h>
#define LOGD(format, ...) LogMsg (TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC, format, ## __VA_ARGS__)
#endif
/*******************************************************************************
@@ -100,7 +102,9 @@
{
FREE_QUEUE_T *Q;
tGKI_COM_CB *p_cb = &gki_cb.com;
- printf("\ngki_alloc_free_queue in, id:%d \n", id);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue in, id:%d \n", id);
+ #endif
Q = &p_cb->freeq[p_cb->pool_list[id]];
@@ -110,14 +114,20 @@
if(p_mem)
{
//re-initialize the queue with allocated memory
- printf("\ngki_alloc_free_queue calling gki_init_free_queue, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue calling gki_init_free_queue, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #endif
gki_init_free_queue(id, Q->size, Q->total, p_mem);
- printf("\ngki_alloc_free_queue ret OK, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue ret OK, id:%d size:%d, totol:%d\n", id, Q->size, Q->total);
+ #endif
return TRUE;
}
GKI_exception (GKI_ERROR_BUF_SIZE_TOOBIG, "gki_alloc_free_queue: Not enough memory");
}
- printf("\ngki_alloc_free_queue out failed, id:%d\n", id);
+ #if GKI_BUFFER_DEBUG
+ ALOGD("\ngki_alloc_free_queue out failed, id:%d\n", id);
+ #endif
return FALSE;
}
#endif
@@ -400,6 +410,14 @@
return NULL;
}
#endif
+
+ if(Q->p_first == 0)
+ {
+ /* gki_alloc_free_queue() failed to alloc memory */
+ GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
+ return NULL;
+ }
+
p_hdr = Q->p_first;
Q->p_first = p_hdr->p_next;
@@ -504,6 +522,14 @@
if(Q->p_first == 0 && gki_alloc_free_queue(pool_id) != TRUE)
return NULL;
#endif
+
+ if(Q->p_first == 0)
+ {
+ /* gki_alloc_free_queue() failed to alloc memory */
+ GKI_TRACE_ERROR_0("GKI_getpoolbuf() fail alloc free queue");
+ return NULL;
+ }
+
p_hdr = Q->p_first;
Q->p_first = p_hdr->p_next;
diff --git a/src/gki/common/gki_time.c b/src/gki/common/gki_time.c
index 10377f6..e840a36 100644
--- a/src/gki/common/gki_time.c
+++ b/src/gki/common/gki_time.c
@@ -444,6 +444,12 @@
/* Check for OS Task Timers */
for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++)
{
+ if (gki_cb.com.OSRdyTbl[task_id] == TASK_DEAD)
+ {
+ // task is shutdown do not try to service timers
+ continue;
+ }
+
if (gki_cb.com.OSWaitTmr[task_id] > 0) /* If timer is running */
{
gki_cb.com.OSWaitTmr[task_id] -= gki_cb.com.OSNumOrigTicks;
diff --git a/src/gki/ulinux/data_types.h b/src/gki/ulinux/data_types.h
index 0768494..27ae561 100644
--- a/src/gki/ulinux/data_types.h
+++ b/src/gki/ulinux/data_types.h
@@ -34,7 +34,7 @@
typedef signed char INT8;
typedef signed short INT16;
typedef unsigned char BOOLEAN;
-
+typedef UINT32 UINTPTR;
typedef UINT32 TIME_STAMP;
#ifndef TRUE
diff --git a/src/gki/ulinux/gki_ulinux.c b/src/gki/ulinux/gki_ulinux.c
index b889469..3427a49 100644
--- a/src/gki/ulinux/gki_ulinux.c
+++ b/src/gki/ulinux/gki_ulinux.c
@@ -532,6 +532,9 @@
err = nanosleep(&delay, &delay);
} while (err < 0 && errno == EINTR);
+ if (GKI_TIMER_TICK_RUN_COND != *p_run_cond)
+ break; //GKI has shutdown
+
/* the unit should be alsways 1 (1 tick). only if you vary for some reason heart beat tick
* e.g. power saving you may want to provide more ticks
*/
@@ -1229,6 +1232,7 @@
void GKI_sched_lock(void)
{
GKI_TRACE_0("GKI_sched_lock");
+ GKI_disable ();
return;
}
@@ -1249,6 +1253,7 @@
void GKI_sched_unlock(void)
{
GKI_TRACE_0("GKI_sched_unlock");
+ GKI_enable ();
}
/*******************************************************************************
diff --git a/src/hal/include/gki_hal_target.h b/src/hal/include/gki_hal_target.h
index 9714348..d0a2276 100644
--- a/src/hal/include/gki_hal_target.h
+++ b/src/hal/include/gki_hal_target.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
* limitations under the License.
*
******************************************************************************/
+
#ifndef GKI_HAL_TARGET_H
#define GKI_HAL_TARGET_H
@@ -54,6 +55,23 @@
#define GKI_MAX_TASKS 1
#endif
+
+/******************************************************************************
+**
+** Buffer pool assignment
+**
+******************************************************************************/
+
+/* GKI pool for NCI messages */
+#ifndef NFC_HAL_NCI_POOL_ID
+#define NFC_HAL_NCI_POOL_ID GKI_POOL_ID_1
+#endif
+
+#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
+#define NFC_HAL_NCI_POOL_BUF_SIZE GKI_BUF1_SIZE
+#endif
+
+
/******************************************************************************
**
** Timer configuration
@@ -225,6 +243,11 @@
#endif
+#if defined(GKI_DEBUG) && (GKI_DEBUG == TRUE)
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "GKI_LINUX"
/* GKI Trace Macros */
#define GKI_TRACE_0(m) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m)
#define GKI_TRACE_1(m,p1) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1)
@@ -233,6 +256,16 @@
#define GKI_TRACE_4(m,p1,p2,p3,p4) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4)
#define GKI_TRACE_5(m,p1,p2,p3,p4,p5) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4,p5)
#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4,p5,p6)
+#else
+#define GKI_TRACE_0(m)
+#define GKI_TRACE_1(m,p1)
+#define GKI_TRACE_2(m,p1,p2)
+#define GKI_TRACE_3(m,p1,p2,p3)
+#define GKI_TRACE_4(m,p1,p2,p3,p4)
+#define GKI_TRACE_5(m,p1,p2,p3,p4,p5)
+#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
+
+#endif
#define GKI_TRACE_ERROR_0(m) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m)
#define GKI_TRACE_ERROR_1(m,p1) LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1)
diff --git a/src/hal/include/nci_defs.h b/src/hal/include/nci_defs.h
index befffd9..1b24829 100644
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 1999-2012 Broadcom Corporation
+ * Copyright (C) 1999-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the definition from NCI specification
@@ -625,12 +626,15 @@
} tNCI_DISCOVER_MAPS;
#define NCI_NFCID1_MAX_LEN 10
+#define NCI_T1T_HR_LEN 2
typedef struct
{
UINT8 sens_res[2];/* SENS_RES Response (ATQA). Available after Technology Detection */
- UINT8 nfcid1_len; /* 4, 7 or 10 */
+ UINT8 nfcid1_len; /* 4, 7 or 10 */
UINT8 nfcid1[NCI_NFCID1_MAX_LEN]; /* AKA NFCID1 */
UINT8 sel_rsp; /* SEL_RSP (SAK) Available after Collision Resolution */
+ UINT8 hr_len; /* 2, if T1T HR0/HR1 is reported */
+ UINT8 hr[NCI_T1T_HR_LEN]; /* T1T HR0 is in hr[0], HR1 is in hr[1] */
} tNCI_RF_PA_PARAMS;
diff --git a/src/hal/include/nfc_hal_api.h b/src/hal/include/nfc_hal_api.h
index d147527..f73873b 100644
--- a/src/hal/include/nfc_hal_api.h
+++ b/src/hal/include/nfc_hal_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFC Hardware Abstraction Layer API
@@ -23,7 +24,7 @@
******************************************************************************/
#ifndef NFC_HAL_API_H
#define NFC_HAL_API_H
-#include <hardware/nfc.h>
+#include <hardware/nfc.h> /* Android must include HAL header */
#include "data_types.h"
/****************************************************************************
@@ -38,8 +39,40 @@
} NFC_HDR;
#define NFC_HDR_SIZE (sizeof (NFC_HDR))
+/*******************************************************************************
+** tHAL_STATUS Definitions are defined in hardware/libhardware/include/hardware/nfc.h
+** #define HAL_NFC_STATUS_OK 0
+** #define HAL_NFC_STATUS_FAILED 1
+** #define HAL_NFC_STATUS_ERR_TRANSPORT 2
+** #define HAL_NFC_STATUS_ERR_CMD_TIMEOUT 3
+** #define HAL_NFC_STATUS_REFUSED 4
+*******************************************************************************/
+
typedef UINT8 tHAL_NFC_STATUS;
+/*******************************************************************************
+** tHAL_HCI_NETWK_CMD Definitions
+*******************************************************************************/
+#define HAL_NFC_HCI_NO_UICC_HOST 0x00
+#define HAL_NFC_HCI_UICC0_HOST 0x01
+#define HAL_NFC_HCI_UICC1_HOST 0x02
+
+/*******************************************************************************
+** tHAL_NFC_CBACK Definitions
+*******************************************************************************/
+
+/*******************************************************************************
+** tHAL_NFC_CBACK events are defined in hardware/libhardware/include/hardware/nfc.h
+** #define HAL_NFC_OPEN_CPLT_EVT 0x00
+** #define HAL_NFC_CLOSE_CPLT_EVT 0x01
+** #define HAL_NFC_POST_INIT_CPLT_EVT 0x02
+** #define HAL_NFC_PRE_DISCOVER_CPLT_EVT 0x03
+** #define HAL_NFC_REQUEST_CONTROL_EVT 0x04
+** #define HAL_NFC_RELEASE_CONTROL_EVT 0x05
+** #define HAL_NFC_ERROR_EVT 0x06
+*******************************************************************************/
+
+
typedef void (tHAL_NFC_STATUS_CBACK) (tHAL_NFC_STATUS status);
typedef void (tHAL_NFC_CBACK) (UINT8 event, tHAL_NFC_STATUS status);
typedef void (tHAL_NFC_DATA_CBACK) (UINT16 data_len, UINT8 *p_data);
@@ -59,6 +92,15 @@
typedef void (tHAL_API_POWER_CYCLE) (void);
+/* data members for NFC_HAL-HCI */
+typedef struct
+{
+ BOOLEAN nfc_hal_prm_nvm_required; /* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
+ UINT16 nfc_hal_nfcc_enable_timeout; /* max time to wait for RESET NTF after setting REG_PU to high */
+ UINT16 nfc_hal_post_xtal_timeout; /* max time to wait for RESET NTF after setting Xtal frequency */
+ UINT8 nfc_hal_hci_uicc_support; /* set nfc_hal_hci_uicc_support to Zero, if no UICC is supported otherwise set corresponding bit(s) for every supported UICC(s) */
+} tNFC_HAL_CFG;
+
typedef struct
{
tHAL_API_INITIALIZE *initialize;
diff --git a/src/hal/include/nfc_hal_target.h b/src/hal/include/nfc_hal_target.h
index b6eedc9..2e5914a 100644
--- a/src/hal/include/nfc_hal_target.h
+++ b/src/hal/include/nfc_hal_target.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,28 +15,17 @@
* limitations under the License.
*
******************************************************************************/
+
#ifndef NFC_HAL_TARGET_H
#define NFC_HAL_TARGET_H
+#include "gki.h"
#include "data_types.h"
-#ifdef BUILDCFG
-#include "buildcfg_hal.h"
-#endif
-
/****************************************************************************
** NCI related configuration
****************************************************************************/
-/* GKI pool for NCI messages */
-#ifndef NFC_HAL_NCI_POOL_ID
-#define NFC_HAL_NCI_POOL_ID GKI_POOL_ID_1
-#endif
-
-#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
-#define NFC_HAL_NCI_POOL_BUF_SIZE GKI_BUF1_SIZE
-#endif
-
/* Initial Max Control Packet Payload Size (until receiving payload size in INIT_CORE_RSP) */
#ifndef NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE
#define NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE 0xFF
@@ -83,6 +72,11 @@
#define NFC_HAL_POWER_CYCLE_DELAY 100
#endif
+/* time (in ms) between power off and on NFCC */
+#ifndef NFC_HAL_NFCC_ENABLE_TIMEOUT
+#define NFC_HAL_NFCC_ENABLE_TIMEOUT 1000
+#endif
+
#ifndef NFC_HAL_PRM_DEBUG
#define NFC_HAL_PRM_DEBUG TRUE
#endif
@@ -109,9 +103,9 @@
#define NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE (32)
#endif
-/* amount of time to wait for RESET NTF after patch download */
-#ifndef NFC_HAL_PRM_RESET_NTF_DELAY
-#define NFC_HAL_PRM_RESET_NTF_DELAY (10000)
+/* amount of time to wait for authenticating/committing patch to NVM */
+#ifndef NFC_HAL_PRM_COMMIT_DELAY
+#define NFC_HAL_PRM_COMMIT_DELAY (30000)
#endif
/* amount of time to wait after downloading preI2C patch before downloading LPM/FPM patch */
@@ -164,81 +158,123 @@
#ifndef NFC_HAL_TRACE_PROTOCOL
#define NFC_HAL_TRACE_PROTOCOL TRUE
#endif
+
+/* Legacy protocol-trace-enable macro */
+#ifndef BT_TRACE_PROTOCOL
#define BT_TRACE_PROTOCOL (NFC_HAL_TRACE_PROTOCOL)
-
-#define LogMsg_0 LogMsg
-#define LogMsg_1 LogMsg
-#define LogMsg_2 LogMsg
-#define LogMsg_3 LogMsg
-#define LogMsg_4 LogMsg
-#define LogMsg_5 LogMsg
-#define LogMsg_6 LogMsg
-
-/* Trace macros */
-#define BT_TRACE_0(l,t,m) LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
-#define BT_TRACE_1(l,t,m,p1) LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1))
-#define BT_TRACE_2(l,t,m,p1,p2) LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2))
-#define BT_TRACE_3(l,t,m,p1,p2,p3) LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3))
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4) LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4))
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5) LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
- (UINT32)(p5))
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6) LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1), \
- (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
- (UINT32)(p5),(UINT32)(p6))
-
-#define NCI_TRACE_ERROR0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m);}
-#define NCI_TRACE_ERROR1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1);}
-#define NCI_TRACE_ERROR2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NCI_TRACE_ERROR3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_WARNING0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m);}
-#define NCI_TRACE_WARNING1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1);}
-#define NCI_TRACE_WARNING2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NCI_TRACE_WARNING3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_API0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m);}
-#define NCI_TRACE_API1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1);}
-#define NCI_TRACE_API2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2);}
-#define NCI_TRACE_API3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NCI_TRACE_API4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_EVENT0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m);}
-#define NCI_TRACE_EVENT1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1);}
-#define NCI_TRACE_EVENT2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NCI_TRACE_EVENT3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_DEBUG0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m);}
-#define NCI_TRACE_DEBUG1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1);}
-#define NCI_TRACE_DEBUG2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#ifdef __cplusplus
-extern "C"
-{
#endif
-extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-
-#ifdef __cplusplus
-}
+/* Enable HAL tracing by default */
+#ifndef NFC_HAL_USE_TRACES
+#define NFC_HAL_USE_TRACES TRUE
#endif
+/* HAL trace macros */
+#if (NFC_HAL_USE_TRACES == TRUE)
+#define NCI_TRACE_0(l,t,m) LogMsg((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
+#define NCI_TRACE_1(l,t,m,p1) LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1))
+#define NCI_TRACE_2(l,t,m,p1,p2) LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1), \
+ (UINTPTR)(p2))
+#define NCI_TRACE_3(l,t,m,p1,p2,p3) LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1), \
+ (UINTPTR)(p2),(UINTPTR)(p3))
+#define NCI_TRACE_4(l,t,m,p1,p2,p3,p4) LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1), \
+ (UINTPTR)(p2),(UINTPTR)(p3),(UINTPTR)(p4))
+#define NCI_TRACE_5(l,t,m,p1,p2,p3,p4,p5) LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1), \
+ (UINTPTR)(p2),(UINTPTR)(p3),(UINTPTR)(p4), \
+ (UINTPTR)(p5))
+#define NCI_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6) LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1), \
+ (UINTPTR)(p2),(UINTPTR)(p3),(UINTPTR)(p4), \
+ (UINTPTR)(p5),(UINTPTR)(p6))
+
+#define HAL_TRACE_ERROR0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m);}
+#define HAL_TRACE_ERROR1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1);}
+#define HAL_TRACE_ERROR2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2);}
+#define HAL_TRACE_ERROR3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3);}
+#define HAL_TRACE_ERROR4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
+#define HAL_TRACE_ERROR5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_WARNING0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m);}
+#define HAL_TRACE_WARNING1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1);}
+#define HAL_TRACE_WARNING2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2);}
+#define HAL_TRACE_WARNING3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3);}
+#define HAL_TRACE_WARNING4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
+#define HAL_TRACE_WARNING5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_API0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_API, m);}
+#define HAL_TRACE_API1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1);}
+#define HAL_TRACE_API2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2);}
+#define HAL_TRACE_API3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3);}
+#define HAL_TRACE_API4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3,p4);}
+#define HAL_TRACE_API5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_API6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_EVENT0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m);}
+#define HAL_TRACE_EVENT1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1);}
+#define HAL_TRACE_EVENT2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2);}
+#define HAL_TRACE_EVENT3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3);}
+#define HAL_TRACE_EVENT4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
+#define HAL_TRACE_EVENT5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_DEBUG0(m) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m);}
+#define HAL_TRACE_DEBUG1(m,p1) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1);}
+#define HAL_TRACE_DEBUG2(m,p1,p2) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2);}
+#define HAL_TRACE_DEBUG3(m,p1,p2,p3) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
+#define HAL_TRACE_DEBUG4(m,p1,p2,p3,p4) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
+#define HAL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
+
+#else /* Disable HAL tracing */
+
+#define HAL_TRACE_0(l,t,m)
+#define HAL_TRACE_1(l,t,m,p1)
+#define HAL_TRACE_2(l,t,m,p1,p2)
+#define HAL_TRACE_3(l,t,m,p1,p2,p3)
+#define HAL_TRACE_4(l,t,m,p1,p2,p3,p4)
+#define HAL_TRACE_5(l,t,m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_ERROR0(m)
+#define HAL_TRACE_ERROR1(m,p1)
+#define HAL_TRACE_ERROR2(m,p1,p2)
+#define HAL_TRACE_ERROR3(m,p1,p2,p3)
+#define HAL_TRACE_ERROR4(m,p1,p2,p3,p4)
+#define HAL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_WARNING0(m)
+#define HAL_TRACE_WARNING1(m,p1)
+#define HAL_TRACE_WARNING2(m,p1,p2)
+#define HAL_TRACE_WARNING3(m,p1,p2,p3)
+#define HAL_TRACE_WARNING4(m,p1,p2,p3,p4)
+#define HAL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_API0(m)
+#define HAL_TRACE_API1(m,p1)
+#define HAL_TRACE_API2(m,p1,p2)
+#define HAL_TRACE_API3(m,p1,p2,p3)
+#define HAL_TRACE_API4(m,p1,p2,p3,p4)
+#define HAL_TRACE_API5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_EVENT0(m)
+#define HAL_TRACE_EVENT1(m,p1)
+#define HAL_TRACE_EVENT2(m,p1,p2)
+#define HAL_TRACE_EVENT3(m,p1,p2,p3)
+#define HAL_TRACE_EVENT4(m,p1,p2,p3,p4)
+#define HAL_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_DEBUG0(m)
+#define HAL_TRACE_DEBUG1(m,p1)
+#define HAL_TRACE_DEBUG2(m,p1,p2)
+#define HAL_TRACE_DEBUG3(m,p1,p2,p3)
+#define HAL_TRACE_DEBUG4(m,p1,p2,p3,p4)
+#define HAL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
+#endif /* Disable HAL tracing */
+
#endif /* GKI_TARGET_H */
diff --git a/src/hal/include/nfc_types.h b/src/hal/include/nfc_types.h
index c4a963f..29af58b 100644
--- a/src/hal/include/nfc_types.h
+++ b/src/hal/include/nfc_types.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
#ifndef NFC_TYPES_H
#define NFC_TYPES_H
@@ -129,6 +130,7 @@
#define TRACE_CTRL_GENERAL 0x00000000
#define TRACE_LAYER_NCI 0x00280000
+#define TRACE_LAYER_HAL 0x00310000
#define TRACE_LAYER_GKI 0x001a0000
#define TRACE_ORG_STACK 0x00000000
#define TRACE_ORG_GKI 0x00000400
@@ -139,9 +141,7 @@
#define TRACE_TYPE_EVENT 0x00000003
#define TRACE_TYPE_DEBUG 0x00000004
-
-/* Define a function for logging */
-typedef void (BT_LOG_FUNC) (int trace_type, const char *fmt_str, ...);
+#define TRACE_TYPE_GENERIC 0x00000008
#endif /* NFC_TYPES_H */
diff --git a/src/hal/int/nfc_brcm_defs.h b/src/hal/int/nfc_brcm_defs.h
index 9ce68e3..35cf5b4 100644
--- a/src/hal/int/nfc_brcm_defs.h
+++ b/src/hal/int/nfc_brcm_defs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2012 Broadcom Corporation
+ * Copyright (C) 2012-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Broadcom-specific defintions that are shared
@@ -82,6 +83,10 @@
#define NCI_MSG_SECURE_PATCH_DOWNLOAD 0x2E
#define NCI_MSG_SPD_FORMAT_NVM 0x2F
#define NCI_MSG_SPD_READ_NVM 0x30
+#define NCI_MSG_SWP_BIST 0x31
+#define NCI_MSG_WLESS_DBG_MODE 0x32
+#define NCI_MSG_I2C_REQ_POLARITY 0x33
+
/**********************************************
* Proprietary NCI status codes
diff --git a/src/hal/int/nfc_hal_int.h b/src/hal/int/nfc_hal_int.h
index ca8dc20..96e9095 100644
--- a/src/hal/int/nfc_hal_int.h
+++ b/src/hal/int/nfc_hal_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* this file contains the NCI transport internal definitions and functions.
@@ -62,6 +63,7 @@
/* NFC HAL Task Timer types */
#define NFC_HAL_TTYPE_NCI_WAIT_RSP 0
#define NFC_HAL_TTYPE_POWER_CYCLE 1
+#define NFC_HAL_TTYPE_NFCC_ENABLE 2
/* NFC HAL Task Wait Response flag */
#define NFC_HAL_WAIT_RSP_CMD 0x10 /* wait response on an NCI command */
@@ -81,12 +83,30 @@
#define NFC_HAL_HCI_SESSION_ID_LEN 0x08
#define NFC_HAL_HCI_NETWK_INFO_SIZE 184
#define NFC_HAL_HCI_DH_NETWK_INFO_SIZE 111
+#define NFC_HAL_HCI_MIN_NETWK_INFO_SIZE 12
+#define NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE 11
+#define NFC_HAL_HCI_PIPE_INFO_SIZE 5
+#define NFC_HAL_HCI_ANY_SET_PARAMETER 0x01
+#define NFC_HAL_HCI_ANY_GET_PARAMETER 0x02
#define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
+
+#define NFC_HAL_HCI_WHITELIST_INDEX 0x03
+
#define NFC_HAL_HCI_ADMIN_PIPE 0x01
#define NFC_HAL_HCI_HOST_ID_UICC0 0x02 /* Host ID for UICC 0 */
#define NFC_HAL_HCI_HOST_ID_UICC1 0x03 /* Host ID for UICC 1 */
#define NFC_HAL_HCI_COMMAND_TYPE 0x00
+#define NFC_HAL_HCI_RESPONSE_TYPE 0x02
+
+/* NFC HAL HCI responses */
+#define NFC_HAL_HCI_ANY_OK 0x00
+
+/* Flag defintions for tNFC_HAL_NVM */
+#define NFC_HAL_NVM_FLAGS_NO_NVM 0x01 /* No NVM available */
+#define NFC_HAL_NVM_FLAGS_LPM_BAD 0x02 /* FPM patch in NVM failed CRC check */
+#define NFC_HAL_NVM_FLAGS_FPM_BAD 0x04 /* LPM patch in NVM failed CRC check */
+#define NFC_HAL_NVM_FLAGS_PATCH_PRESENT 0x08 /* Patch is present in NVM */
/* NFC HAL transport configuration */
typedef struct
@@ -179,7 +199,7 @@
#if (NFC_HAL_DEBUG == TRUE)
extern const char * const nfc_hal_init_state_str[];
-#define NFC_HAL_SET_INIT_STATE(state) NCI_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
+#define NFC_HAL_SET_INIT_STATE(state) HAL_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
#else
#define NFC_HAL_SET_INIT_STATE(state) nfc_hal_cb.dev_cb.initializing_state = state;
#endif
@@ -190,14 +210,14 @@
{
NFC_HAL_INIT_STATE_IDLE, /* Initialization is done */
NFC_HAL_INIT_STATE_W4_XTAL_SET, /* Waiting for crystal setting rsp */
- NFC_HAL_INIT_STATE_W4_RESET, /* Waiting for reset rsp */
+ NFC_HAL_INIT_STATE_POST_XTAL_SET, /* Waiting for reset ntf after xtal set */
+ NFC_HAL_INIT_STATE_W4_NFCC_ENABLE, /* Waiting for reset ntf atter REG_PU up */
NFC_HAL_INIT_STATE_W4_BUILD_INFO, /* Waiting for build info rsp */
NFC_HAL_INIT_STATE_W4_PATCH_INFO, /* Waiting for patch info rsp */
NFC_HAL_INIT_STATE_W4_APP_COMPLETE, /* Waiting for complete from application */
NFC_HAL_INIT_STATE_W4_POST_INIT_DONE, /* Waiting for complete of post init */
NFC_HAL_INIT_STATE_W4_CONTROL_DONE, /* Waiting for control release */
NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE,/* Waiting for complete of prediscover */
- NFC_HAL_INIT_STATE_W4_RE_INIT, /* Waiting for reset rsp on ReInit */
NFC_HAL_INIT_STATE_CLOSING /* Shutting down */
};
typedef UINT8 tNFC_HAL_INIT_STATE;
@@ -264,12 +284,12 @@
NFC_HAL_PRM_ST_IDLE,
/* Secure patch download stated */
- NFC_HAL_PRM_ST_SPD_GET_VERSION,
NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
NFC_HAL_PRM_ST_SPD_DOWNLOADING,
NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
- NFC_HAL_PRM_ST_SPD_AUTH_DONE
+ NFC_HAL_PRM_ST_SPD_AUTH_DONE,
+ NFC_HAL_PRM_ST_W4_GET_VERSION
};
typedef UINT8 tNFC_HAL_PRM_STATE;
@@ -296,17 +316,9 @@
/* Secure Patch Download */
UINT32 spd_patch_needed_mask; /* Mask of patches that need to be downloaded */
- UINT32 spd_nvm_patch_mask; /* Mask of patches currently in NVM */
- UINT16 spd_project_id; /* Current project_id of patch in nvm */
- UINT16 spd_nvm_max_size;
- UINT16 spd_patch_max_size;
- UINT16 spd_fpm_patch_size;
- UINT16 spd_lpm_patch_size;
-
UINT8 spd_patch_count; /* Number of patches left to download */
UINT8 spd_cur_patch_idx; /* Current patch being downloaded */
- UINT16 spd_ver_major; /* Current major version of patch in nvm */
- UINT16 spd_ver_minor; /* Current minor version of patch in nvm */
+
tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
/* I2C-patch */
@@ -319,6 +331,18 @@
UINT32 patchram_delay; /* the dealy after patch */
} tNFC_HAL_PRM_CB;
+/* Information about current patch in NVM */
+typedef struct
+{
+ UINT16 project_id; /* Current project_id of patch in nvm */
+ UINT16 ver_major; /* Current major version of patch in nvm */
+ UINT16 ver_minor; /* Current minor version of patch in nvm */
+ UINT16 fpm_size; /* Current size of FPM patch in nvm */
+ UINT16 lpm_size; /* Current size of LPM patch in nvm */
+ UINT8 flags; /* See NFC_HAL_NVM_FLAGS_* flag definitions */
+ UINT8 nvm_type; /* Current NVM Type - UICC/EEPROM */
+} tNFC_HAL_NVM;
+
/* Patch for I2C fix */
typedef struct
{
@@ -371,8 +395,10 @@
UINT8 *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
UINT8 hci_netwk_config_block; /* Rsp awaiting for hci network configuration block */
BOOLEAN b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
- BOOLEAN b_check_clear_all_pipe_cmd;
- UINT8 hcp_conn_id;
+ BOOLEAN clear_all_pipes_to_uicc1; /* UICC1 was restarted for patch download */
+ BOOLEAN hci_fw_workaround; /* HAL HCI Workaround need */
+ BOOLEAN hci_fw_validate_netwk_cmd;/* Flag to indicate if hci network ntf to validate */
+ UINT8 hcp_conn_id; /* NCI Connection id for HCP */
} tNFC_HAL_HCI_CB;
typedef struct
@@ -385,6 +411,7 @@
tNFC_HAL_NCIT_CB ncit_cb; /* NCI transport */
tNFC_HAL_DEV_CB dev_cb; /* device initialization */
+ tNFC_HAL_NVM nvm_cb; /* Information about current patch in NVM */
/* Patchram control block */
tNFC_HAL_PRM_CB prm;
@@ -394,7 +421,6 @@
tNFC_HAL_HCI_CB hci_cb;
- tNFC_HAL_NCI_CBACK *p_reinit_cback;
UINT8 max_rf_credits; /* NFC Max RF data credits */
UINT8 trace_level; /* NFC HAL trace level */
} tNFC_HAL_CB;
@@ -418,10 +444,12 @@
void nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
void nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
void nfc_hal_main_send_error (tHAL_NFC_STATUS status);
+void nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg);
/* nfc_hal_nci.c */
BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
+NFC_HDR* nfc_hal_nci_postproc_rx_nci_msg (void);
void nfc_hal_nci_assemble_nci_msg (void);
void nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
void nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
@@ -430,7 +458,7 @@
/* nfc_hal_dm.c */
void nfc_hal_dm_init (void);
void nfc_hal_dm_set_xtal_freq_index (void);
-void nfc_hal_dm_send_reset_cmd (void);
+void nfc_hal_dm_send_get_build_info_cmd (void);
void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
void nfc_hal_dm_config_nfcc (void);
void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
@@ -450,7 +478,9 @@
void nfc_hal_hci_enable (void);
void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
-void nfc_hal_hci_handle_hcp_pkt (UINT8 *p_data);
+void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data);
+NFC_HDR* nfc_hal_hci_postproc_hcp (void);
+BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data);
void nfc_hal_hci_timeout_cback (void *p_tle);
diff --git a/src/hal/int/nfc_hal_int_api.h b/src/hal/int/nfc_hal_int_api.h
index 5385bb4..0c9c1ba 100644
--- a/src/hal/int/nfc_hal_int_api.h
+++ b/src/hal/int/nfc_hal_int_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Internal NFC HAL API functions.
@@ -47,13 +48,20 @@
typedef UINT8 tNFC_HAL_XTAL_INDEX;
/* Broadcom specific device initialization before sending NCI reset */
-#define NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ 0x02 /* set crystal frequency */
-typedef UINT8 tNFC_HAL_DEV_INIT_FLAGS;
typedef struct
{
- tNFC_HAL_DEV_INIT_FLAGS flags;
+ UINT32 brcm_hw_id;
UINT16 xtal_freq;
+ UINT8 xtal_index;
+} tNFC_HAL_DEV_INIT_XTAL_CFG;
+
+#define NFC_HAL_DEV_INIT_MAX_XTAL_CFG 5
+
+typedef struct
+{
+ UINT8 num_xtal_cfg;
+ tNFC_HAL_DEV_INIT_XTAL_CFG xtal_cfg[NFC_HAL_DEV_INIT_MAX_XTAL_CFG];
} tNFC_HAL_DEV_INIT_CFG;
/*****************************************************************************
@@ -117,11 +125,8 @@
**
** Function HAL_NfcReInit
**
-** Description This function is called to send an RESET and GET_PATCH_VERSION
-** command to NFCC.
-**
-** p_cback - The callback function to receive the command
-** status
+** Description This function is called to restart initialization after REG_PU
+** toggled because of failure to detect NVM type or download patchram.
**
** Note This function should be called only during the HAL init process
**
@@ -129,7 +134,7 @@
** HAL_NFC_STATUS_FAILED otherwise
**
*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit (tNFC_HAL_NCI_CBACK *p_cback);
+tHAL_NFC_STATUS HAL_NfcReInit (void);
/*******************************************************************************
**
diff --git a/src/hal/int/nfc_hal_nv_ci.h b/src/hal/int/nfc_hal_nv_ci.h
index a77c207..80e436e 100644
--- a/src/hal/int/nfc_hal_nv_ci.h
+++ b/src/hal/int/nfc_hal_nv_ci.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the interface file for non valtile memory call-in functions.
diff --git a/src/hal/int/nfc_hal_nv_co.h b/src/hal/int/nfc_hal_nv_co.h
index 2264cfe..285d96e 100644
--- a/src/hal/int/nfc_hal_nv_co.h
+++ b/src/hal/int/nfc_hal_nv_co.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the interface file for storing nv data
@@ -53,7 +54,7 @@
#define DH_NV_BLOCK 0x01
#define HC_F3_NV_BLOCK 0x02
#define HC_F4_NV_BLOCK 0x03
-#define HC_DH_NV_BLOCK 0x04
+#define HC_F2_NV_BLOCK 0x04
/*****************************************************************************
** Function Declarations
diff --git a/src/hal/int/nfc_hal_post_reset.h b/src/hal/int/nfc_hal_post_reset.h
index 95da455..40729dc 100644
--- a/src/hal/int/nfc_hal_post_reset.h
+++ b/src/hal/int/nfc_hal_post_reset.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Post NCI reset routines
@@ -29,6 +30,7 @@
** Application control block definitions
******************************************************************************/
#define NFA_APP_PATCHFILE_MAX_PATH 255
+#define NFA_APP_MAX_NUM_REINIT 5
typedef struct
{
@@ -50,6 +52,13 @@
UINT8 nfc_wake_active_mode;
UINT8 dh_wake_active_mode;
+ /* NVM detection retry (some platforms require re-attempts to detect NVM) */
+ UINT8 spd_nvm_detection_max_count; /* max retry to get NVM type */
+ UINT8 spd_nvm_detection_cur_count; /* current retry count */
+
+ /* handling for failure to download patch */
+ BOOLEAN spd_debug_mode; /* debug mode for downloading patchram, report failure immediately and obviously */
+ BOOLEAN spd_skip_on_power_cycle; /* skip downloading patchram after power cycle because of patch download failure */
} tNFC_POST_RESET_CB;
extern tNFC_POST_RESET_CB nfc_post_reset_cb;
@@ -62,5 +71,4 @@
*/
void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type);
-
#endif /* NFC_HAL_POST_RESET_H */
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index 6065f1c..960b96e 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -20,6 +20,7 @@
#ifndef UINT32
typedef unsigned long UINT32;
#endif
+#include "nfc_target.h"
#include "nfc_hal_api.h"
#include <hardware/nfc.h>
@@ -68,6 +69,7 @@
void Finalize();
static NfcAdaptation& GetInstance();
tHAL_NFC_ENTRY* GetHalEntryFuncs ();
+ void DownloadFirmware ();
private:
NfcAdaptation();
@@ -80,6 +82,8 @@
static nfc_nci_device_t* mHalDeviceContext;
static tHAL_NFC_CBACK* mHalCallback;
static tHAL_NFC_DATA_CBACK* mHalDataCallback;
+ static ThreadCondVar mHalOpenCompletedEvent;
+ static ThreadCondVar mHalCloseCompletedEvent;
static UINT32 NFCA_TASK (UINT32 arg);
static UINT32 Thread (UINT32 arg);
@@ -96,5 +100,7 @@
static BOOLEAN HalPrediscover ();
static void HalControlGranted ();
static void HalPowerCycle ();
+ static void HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status);
+ static void HalDownloadFirmwareDataCallback (uint16_t data_len, uint8_t* p_data);
};
diff --git a/src/include/OverrideLog.h b/src/include/OverrideLog.h
index 2a9847f..ffb2994 100644
--- a/src/include/OverrideLog.h
+++ b/src/include/OverrideLog.h
@@ -34,13 +34,13 @@
#include <cutils/log.h> //define Android logging macros
#include "bt_types.h" //define various BT_TRACE_LEVEL_*
+
#ifdef __cplusplus
extern "C" {
#endif
- extern unsigned char appl_trace_level; //defined in /external/libnfc-nci/
-#ifdef __cplusplus
-}
-#endif
+
+
+extern unsigned char appl_trace_level; //defined in /external/libnfc-nci/
/*******************************************************************************
@@ -61,3 +61,8 @@
**
*******************************************************************************/
unsigned char initializeGlobalAppLogLevel ();
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/include/bcm2079x.h b/src/include/bcm2079x.h
deleted file mode 100644
index 7bf095d..0000000
--- a/src/include/bcm2079x.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-#ifndef _BCM2079X_H
-#define _BCM2079X_H
-
-#define BCMNFC_MAGIC 0xFA
-
-/*
- * BCMNFC power control via ioctl
- * BCMNFC_POWER_CTL(0): power off
- * BCMNFC_POWER_CTL(1): power on
- * BCMNFC_WAKE_CTL(0): wake off
- * BCMNFC_WAKE_CTL(1): wake on
- */
-#define BCMNFC_POWER_CTL _IO(BCMNFC_MAGIC, 0x01)
-#define BCMNFC_CHANGE_ADDR _IO(BCMNFC_MAGIC, 0x02)
-#define BCMNFC_READ_FULL_PACKET _IO(BCMNFC_MAGIC, 0x03)
-#define BCMNFC_SET_WAKE_ACTIVE_STATE _IO(BCMNFC_MAGIC, 0x04)
-#define BCMNFC_WAKE_CTL _IO(BCMNFC_MAGIC, 0x05)
-#define BCMNFC_READ_MULTI_PACKETS _IO(BCMNFC_MAGIC, 0x06)
-
-struct bcm2079x_platform_data {
- unsigned int irq_gpio;
- unsigned int en_gpio;
- int wake_gpio;
-};
-
-#endif
diff --git a/src/include/bt_trace.h b/src/include/bt_trace.h
index d9c58dd..6191cc3 100644
--- a/src/include/bt_trace.h
+++ b/src/include/bt_trace.h
@@ -241,7 +241,7 @@
/* Enables or disables protocol trace information. */
#ifndef BT_TRACE_PROTOCOL
-#define BT_TRACE_PROTOCOL TRUE /* Android requires TRUE */
+#define BT_TRACE_PROTOCOL FALSE /* Android requires FALSE */
#endif
/******************************************************************************
diff --git a/src/include/bt_types.h b/src/include/bt_types.h
index 2b0e809..0a42c77 100644
--- a/src/include/bt_types.h
+++ b/src/include/bt_types.h
@@ -203,6 +203,7 @@
#define BT_PSM_AVCTP_13 0x001B /* Advanced Control - Browsing */
#define BT_PSM_UDI_CP 0x001D /* Unrestricted Digital Information Profile C-Plane */
#define BT_PSM_ATT 0x001F /* Attribute Protocol */
+#define BT_PSM_3DS 0x0021 /* 3D sync */
/* These macros extract the HCI opcodes from a buffer
@@ -425,6 +426,7 @@
#define BT_EIR_OOB_COD_TYPE 0x0D
#define BT_EIR_OOB_SSP_HASH_C_TYPE 0x0E
#define BT_EIR_OOB_SSP_RAND_R_TYPE 0x0F
+#define BT_EIR_3D_SYNC_TYPE 0x3D
#define BT_EIR_MANUFACTURER_SPECIFIC_TYPE 0xFF
#define BT_OOB_COD_SIZE 3
@@ -583,7 +585,7 @@
#define TRACE_LAYER_ATT 0x00250000
#define TRACE_LAYER_SMP 0x00260000
#define TRACE_LAYER_NFC 0x00270000
-#define TRACE_LAYER_NCI 0x00280000
+#define TRACE_LAYER_NCI 0x00280000 /*it's overwritten in nfc_types.h*/
#define TRACE_LAYER_LLCP 0x00290000
#define TRACE_LAYER_NDEF 0x002a0000
#define TRACE_LAYER_RW 0x002b0000
@@ -592,8 +594,8 @@
#define TRACE_LAYER_SNEP 0x002e0000
#define TRACE_LAYER_CHO 0x002f0000
#define TRACE_LAYER_NFA 0x00300000
-
-#define TRACE_LAYER_MAX_NUM 0x0031
+#define TRACE_LAYER_HAL 0x00310000 /*it's overwritten in nfc_types.h*/
+#define TRACE_LAYER_MAX_NUM 0x0032
/* TRACE_ORIGINATOR 0x0000^^00*/
@@ -690,9 +692,15 @@
#define HID_PSM_INTERRUPT 0x0013
#if defined(UCD_HID_INCLUDED) && (UCD_HID_INCLUDED == TRUE)
-#define UCD_PSM_MIN 0x8003
+#define UCD_PSM_MIN 0x8001
#define UCD_PSM_MAX 0x8003
-#define UCD_PSM_HID 0x8003
+#define UCD_PSM_HID_CTRL 0x8001
+#define UCD_PSM_HID_INTR 0x8003
+#endif
+
+#if defined(HIDH_UCD_INCLUDED) && (HIDH_UCD_INCLUDED == TRUE)
+#define HID_UCD_PSM_CONTROL 0x8001
+#define HID_UCD_PSM_INTERRUPT 0x8003
#endif
/* Define a function for logging */
diff --git a/src/include/btdisp_lock.h b/src/include/btdisp_lock.h
deleted file mode 100644
index b220b2d..0000000
--- a/src/include/btdisp_lock.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Critical section definitions for btdisp functions.
- *
- ******************************************************************************/
diff --git a/src/include/buildcfg.h b/src/include/buildcfg.h
index 8f03bd9..24b9ab0 100755
--- a/src/include/buildcfg.h
+++ b/src/include/buildcfg.h
@@ -22,23 +22,12 @@
#include <stdio.h>
#include "data_types.h"
-#include "btdisp_lock.h"
#ifndef NFC_CONTORLLER_ID
#define NFC_CONTORLLER_ID (1)
#endif
-#ifdef ANDROID_USE_LOGCAT
-#undef ANDROID_USE_LOGCAT
-#endif
-
#define BTE_APPL_MAX_USERIAL_DEV_NAME (256)
-#define ANDROID_USE_LOGCAT TRUE
-
-#ifdef BT_TRACE_PROTOCOL
-#undef BT_TRACE_PROTOCOL
-#endif
-
#ifdef BT_TRACE_VERBOSE
#undef BT_TRACE_VERBOSE
#endif
diff --git a/src/include/config.h b/src/include/config.h
index 0660c1b..37fef79 100755
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -30,15 +30,16 @@
};
#endif
-#define NAME_USE_NXP_P2P_RC_WORKAROUND "USE_NXP_P2P_RC_WORKAROUND"
#define NAME_NFA_DM_ENABLE_SLEEP "NFA_DM_ENABLE_SLEEP"
#define NAME_ENABLE_BRCM_EXTRAS_API "ENABLE_BRCM_EXTRAS_API"
#define NAME_POLLING_TECH_MASK "POLLING_TECH_MASK"
#define NAME_REGISTER_VIRTUAL_SE "REGISTER_VIRTUAL_SE"
#define NAME_APPL_TRACE_LEVEL "APPL_TRACE_LEVEL"
+#define NAME_USE_RAW_NCI_TRACE "USE_RAW_NCI_TRACE"
+#define NAME_LOG_TO_FILE "LOG_TO_FILE"
+#define NAME_LOGCAT_FILTER "LOGCAT_FILTER"
#define NAME_LPTD_CFG "LPTD_CFG"
#define NAME_SCREEN_OFF_POWER_STATE "SCREEN_OFF_POWER_STATE"
-#define NAME_UICC_IDLE_TIMEOUT "UICC_IDLE_TIMEOUT"
#define NAME_PREINIT_DSP_CFG "PREINIT_DSP_CFG"
#define NAME_DTA_START_CFG "DTA_START_CFG"
#define NAME_TRANSPORT_DRIVER "TRANSPORT_DRIVER"
@@ -61,13 +62,21 @@
#define NAME_POWER_ON_DELAY "POWER_ON_DELAY"
#define NAME_PRE_POWER_OFF_DELAY "PRE_POWER_OFF_DELAY"
#define NAME_POST_POWER_OFF_DELAY "POST_POWER_OFF_DELAY"
+#define NAME_CE3_PRE_POWER_OFF_DELAY "CE3_PRE_POWER_OFF_DELAY"
#define NAME_NFA_STORAGE "NFA_STORAGE"
#define NAME_NFA_DM_START_UP_VSC_CFG "NFA_DM_START_UP_VSC_CFG"
+#define NAME_NFA_DTA_START_UP_VSC_CFG "NFA_DTA_START_UP_VSC_CFG"
#define NAME_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
#define NAME_SNOOZE_MODE_CFG "SNOOZE_MODE_CFG"
#define NAME_XTAL_FREQUENCY "XTAL_FREQUENCY"
#define NAME_NFA_DM_DISC_DURATION_POLL "NFA_DM_DISC_DURATION_POLL"
+#define NAME_SPD_DEBUG "SPD_DEBUG"
+#define NAME_SPD_MAXRETRYCOUNT "SPD_MAX_RETRY_COUNT"
+#define NAME_SPI_NEGOTIATION "SPI_NEGOTIATION"
#define NAME_AID_FOR_EMPTY_SELECT "AID_FOR_EMPTY_SELECT"
+#define NAME_SPD_IGNORE_VERSION "SPD_IGNORE_VERSION"
+#define NAME_PRESERVE_STORAGE "PRESERVE_STORAGE"
+#define NAME_NFA_MAX_EE_SUPPORTED "NFA_MAX_EE_SUPPORTED"
#define LPTD_PARAM_LEN (40)
diff --git a/src/include/dyn_mem.h b/src/include/dyn_mem.h
index 2ee0169..2a478b2 100644
--- a/src/include/dyn_mem.h
+++ b/src/include/dyn_mem.h
@@ -87,6 +87,10 @@
#define SMP_DYNAMIC_MEMORY FALSE
#endif
+#ifndef BRCM_DYNAMIC_MEMORY
+#define BRCM_DYNAMIC_MEMORY FALSE
+#endif
+
/****************************************************************************
** Define memory usage for each PROFILE component (if not defined in buildcfg.h)
** The default for each component is to use static memory allocations.
diff --git a/src/include/hcidefs.h b/src/include/hcidefs.h
index 9b9d5a6..ef1f3b9 100644
--- a/src/include/hcidefs.h
+++ b/src/include/hcidefs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 1999-2012 Broadcom Corporation
+ * Copyright (C) 1999-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@
#define HCI_OCF(p) ( 0x3FF & (p))
/*
-** Defentions for Link Control Commands
+** Definitions for Link Control Commands
*/
/* Following opcode is used only in command complete event for flow control */
#define HCI_COMMAND_NONE 0x0000
@@ -95,9 +95,21 @@
#define HCI_DISCONNECT_LOGICAL_LINK (0x003A | HCI_GRP_LINK_CONTROL_CMDS)
#define HCI_LOGICAL_LINK_CANCEL (0x003B | HCI_GRP_LINK_CONTROL_CMDS)
#define HCI_FLOW_SPEC_MODIFY (0x003C | HCI_GRP_LINK_CONTROL_CMDS)
+/* End of AMP HCI */
+
+#define HCI_ENH_SETUP_ESCO_CONNECTION (0x003D | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_ENH_ACCEPT_ESCO_CONNECTION (0x003E | HCI_GRP_LINK_CONTROL_CMDS)
+
+/* ConnectionLess Broadcast */
+#define HCI_TRUNCATED_PAGE (0x003F | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_TRUNCATED_PAGE_CANCEL (0x0040 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_SET_CLB (0x0041 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_RECEIVE_CLB (0x0042 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_START_SYNC_TRAIN (0x0043 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_RECEIVE_SYNC_TRAIN (0x0044 | HCI_GRP_LINK_CONTROL_CMDS)
#define HCI_LINK_CTRL_CMDS_FIRST HCI_INQUIRY
-#define HCI_LINK_CTRL_CMDS_LAST HCI_FLOW_SPEC_MODIFY
+#define HCI_LINK_CTRL_CMDS_LAST HCI_RECEIVE_SYNC_TRAIN
/* Commands of HCI_GRP_LINK_POLICY_CMDS */
#define HCI_HOLD_MODE (0x0001 | HCI_GRP_LINK_POLICY_CMDS)
@@ -127,6 +139,7 @@
#define HCI_READ_PIN_TYPE (0x0009 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
#define HCI_WRITE_PIN_TYPE (0x000A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
#define HCI_CREATE_NEW_UNIT_KEY (0x000B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_GET_MWS_TRANS_LAYER_CFG (0x000C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
#define HCI_READ_STORED_LINK_KEY (0x000D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
#define HCI_WRITE_STORED_LINK_KEY (0x0011 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
#define HCI_DELETE_STORED_LINK_KEY (0x0012 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
@@ -194,21 +207,38 @@
#define HCI_ENHANCED_FLUSH (0x005F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
#define HCI_SEND_KEYPRESS_NOTIF (0x0060 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0061 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0062 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_EVENT_MASK_PAGE_2 (0x0063 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_LOCATION_DATA (0x0064 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_LOCATION_DATA (0x0065 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_FLOW_CONTROL_MODE (0x0066 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_FLOW_CONTROL_MODE (0x0067 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_BE_FLUSH_TOUT (0x0069 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_BE_FLUSH_TOUT (0x006A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SHORT_RANGE_MODE (0x006B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_LE_HOST_SUPPORTED (0x006C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_LE_HOST_SUPPORTED (0x006D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-/* AMP HCI */
-#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0061 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0062 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_EVENT_MASK_PAGE_2 (0x0063 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCATION_DATA (0x0064 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOCATION_DATA (0x0065 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_FLOW_CONTROL_MODE (0x0066 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_FLOW_CONTROL_MODE (0x0067 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_BE_FLUSH_TOUT (0x0069 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_BE_FLUSH_TOUT (0x006A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SHORT_RANGE_MODE (0x006B | HCI_GRP_HOST_CONT_BASEBAND_CMDS) /* 802.11 only */
+
+/* MWS coexistence */
+#define HCI_SET_MWS_CHANNEL_PARAMETERS (0x006E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_EXTERNAL_FRAME_CONFIGURATION (0x006F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_SIGNALING (0x0070 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_TRANSPORT_LAYER (0x0071 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_SCAN_FREQUENCY_TABLE (0x0072 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_PATTERN_CONFIGURATION (0x0073 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+
+/* ConnectionLess Broadcast */
+#define HCI_SET_RESERVED_LT_ADDR (0x0074 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_DELETE_RESERVED_LT_ADDR (0x0075 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_CLB_DATA (0x0076 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_SYNC_TRAIN_PARAM (0x0077 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_SYNC_TRAIN_PARAM (0x0078 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+
#define HCI_CONT_BASEBAND_CMDS_FIRST HCI_SET_EVENT_MASK
-#define HCI_CONT_BASEBAND_CMDS_LAST HCI_SHORT_RANGE_MODE
+#define HCI_CONT_BASEBAND_CMDS_LAST HCI_READ_SYNC_TRAIN_PARAM
/* Commands of HCI_GRP_INFORMATIONAL_PARAMS group */
@@ -220,9 +250,11 @@
#define HCI_READ_COUNTRY_CODE (0x0007 | HCI_GRP_INFORMATIONAL_PARAMS)
#define HCI_READ_BD_ADDR (0x0009 | HCI_GRP_INFORMATIONAL_PARAMS)
#define HCI_READ_DATA_BLOCK_SIZE (0x000A | HCI_GRP_INFORMATIONAL_PARAMS)
+#define HCI_READ_LOCAL_SUPPORTED_CODECS (0x000B | HCI_GRP_INFORMATIONAL_PARAMS)
+
#define HCI_INFORMATIONAL_CMDS_FIRST HCI_READ_LOCAL_VERSION_INFO
-#define HCI_INFORMATIONAL_CMDS_LAST HCI_READ_BD_ADDR
+#define HCI_INFORMATIONAL_CMDS_LAST HCI_READ_LOCAL_SUPPORTED_CODECS
/* Commands of HCI_GRP_STATUS_PARAMS group */
@@ -239,8 +271,11 @@
#define HCI_READ_LOCAL_AMP_ASSOC (0x000A | HCI_GRP_STATUS_PARAMS)
#define HCI_WRITE_REMOTE_AMP_ASSOC (0x000B | HCI_GRP_STATUS_PARAMS)
+/* CSA4 (Trigger Clock) */
+#define HCI_SET_TRIGGERED_CLOCK_CAPTURE (0x000D | HCI_GRP_STATUS_PARAMS)
+
#define HCI_STATUS_PARAMS_CMDS_FIRST HCI_READ_FAILED_CONTACT_COUNT
-#define HCI_STATUS_PARAMS_CMDS_LAST HCI_WRITE_REMOTE_AMP_ASSOC
+#define HCI_STATUS_PARAMS_CMDS_LAST HCI_SET_TRIGGERED_CLOCK_CAPTURE
/* Commands of HCI_GRP_TESTING_CMDS group */
#define HCI_READ_LOOPBACK_MODE (0x0001 | HCI_GRP_TESTING_CMDS)
@@ -309,119 +344,6 @@
#define HCI_LE_SCAN_SL_STATE 0x00000400
#define HCI_LE_INIT_MA_STATE 0x00000800
-/* Vendor specific commands for BRCM chipset */
-#define HCI_BRCM_UPDATE_BAUD_RATE_ENCODED_LENGTH 0x02
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH 0x06
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH 12
-#define HCI_BRCM_ENABLE_H4IBSS_LENGTH 7
-#define HCI_BRCM_CUSTOMER_EXT (0x0000 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FM_OPCODE (0x0015 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FMTX_OPCODE (0x0082 | HCI_GRP_VENDOR_SPECIFIC) /* FMTX VSC opcode */
-#define HCI_BRCM_UPDATE_BAUDRATE_CMD (0x0018 | HCI_GRP_VENDOR_SPECIFIC) /* set baudrate of BCM2035 */
-#define HCI_BRCM_WRITE_SCO_PCM_INT_PARAM (0x001C | HCI_GRP_VENDOR_SPECIFIC) /* set SCO interface param */
-#define HCI_BRCM_READ_SCO_PCM_INT_PARAM (0x001D | HCI_GRP_VENDOR_SPECIFIC) /* read SCO interface param */
-#define HCI_BRCM_WRITE_SLEEP_MODE (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_SLEEP_MODE (0x0028 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_H4IBSS_CMD (0x0029 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DOWNLOAD_MINI_DRV (0x002E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_USER_DEFINED_NVRAM (0x0033 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_RADIO (0x0034 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_DIAGNOSTIC_VALUE (0x0035 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GET_HID_DEVICE_LIST (0x0036 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ADD_HID_DEVICE (0x0037 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_HID_DEVICE_NVRAM (0x0038 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DELETE_HID_DEVICE (0x0039 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_USB_HID_EMULATION (0x003B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_RAM (0x004C | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_LAUNCH_RAM (0x004E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_BTW_STARTUP (0x0053 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_ACL_PRIORITY (0x0057 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_SEC_MODE (0x0096 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_H4IBSS (0x00D4 | HCI_GRP_VENDOR_SPECIFIC)
-
-#define HCI_BRCM_SUPER_PEEK_POKE (0x000A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_ARM_MEM_PEEK 0x04
-#define HCI_ARM_MEM_POKE 0x05
-#define HCI_BRCM_SUPER_PEEK_POKE_LENGTH 9
-
-#define HCI_BRCM_WRITE_I2SPCM_INTF_PARAM (0x006D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_CONTROLLER_FEATURES (0x006E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FEATURE_NFC_MASK 0x10
-#define HCI_BRCM_FEATURE_NFC_OFF 0
-
-#define HCI_BRCM_READ_VERBOSE_CFG_VER_INFO (0x0079 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* Dual Stack */
-#define HCI_BRCM_PAUSE_TRANSPORT (0x007A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_RESUME (0x007B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_ERROR_EVT 0x0C
-
-#define HCI_BRCM_TX_POWER_OPCODE (0x007D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_WBS (0x007E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI (0x008B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_AUDIO_ROUTE_INFO (0x00A2 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI_EVT 0x1A
-#define HCI_BRCM_ENCAPSULATED_HCI (0x00A3 | HCI_GRP_VENDOR_SPECIFIC)
-/* VSE subcode - VSE format FF [len] [subcode] [vse params...] */
-#define HCI_BRCM_ENCAPSULATED_HCI_EVT 0x1E
-
-/* PCM2 Setup */
-#define HCI_BRCM_PCM2_SETUP (0x00AE | HCI_GRP_VENDOR_SPECIFIC)
-
-/* BRR */
-#define HCI_BRCM_SET_BRR (0x00AA | HCI_GRP_VENDOR_SPECIFIC)
-
-/* 3DTV */
-#define HCI_BRCM_3D_CTRL (0x00B7 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_3D_OFFSET_DELAY (0x00D6 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* GPS */
-#define HCI_BRCM_GPS_DATA (0x0089 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GPS_SENSOR_OPCODE (0x008F | HCI_GRP_VENDOR_SPECIFIC) /* GPS sensor VSC opcode */
-
-/* MIP: Multicast Individual Polling */
-#define HCI_BRCM_INIT_MIP (0x00DC | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_OPEN_CMD (0x00DD | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_CLOSE_CMD (0x00DE | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_ENC_KEY_CMD (0x00DF | HCI_GRP_VENDOR_SPECIFIC)
-
-/* MIP-related definitions */
-#define BRCM_MIP_ROLE_MASTER 0x00
-#define BRCM_MIP_ROLE_SLAVE 0x01
-
-#define BRCM_MIP_MODE_A2DP 0x00
-#define BRCM_MIP_MODE_3DG 0x01
-#define BRCM_MIP_MODE_CMBO 0x02 /* A2DP + 3DG */
-
-/* Parameter information for HCI_BRCM_SET_ACL_PRIORITY */
-#define HCI_BRCM_ACL_PRIORITY_PARAM_SIZE 3
-#define HCI_BRCM_ACL_PRIORITY_LOW 0x00
-#define HCI_BRCM_ACL_PRIORITY_HIGH 0xFF
-
-#define HCI_BRCM_PAUSE_TRANSPORT_LENGTH 6
-
-/* Parameter information for HCI_BRCM_SCO_PCM_INT_PARAM */
-#define HCI_BRCM_SCO_PCM_PARAM_SIZE 5
-#define HCI_BRCM_SCO_ROUTE_PCM 0
-#define HCI_BRCM_SCO_ROUTE_HCI 1
-
-/* Parameter information for HCI_BRCM_WRITE_I2SPCM_INTF_PARAM */
-#define HCI_BRCM_I2SPCM_PARAM_SIZE 4
-#define HCI_BRCM_I2SPCM_I2S_DISABLE 0
-#define HCI_BRCM_I2SPCM_I2S_ENABLE 1
-#define HCI_BRCM_I2SPCM_IS_SLAVE 0
-#define HCI_BRCM_I2SPCM_IS_MASTER 1
-#define HCI_BRCM_I2SPCM_IS_DEFAULT_ROLE 2
-#define HCI_BRCM_I2SPCM_SAMPLE_8K 0
-#define HCI_BRCM_I2SPCM_SAMPLE_16K 1
-#define HCI_BRCM_I2SPCM_SAMPLE_4K 2
-#define HCI_BRCM_I2SPCM_SAMPLE_DEFAULT 3
-#define HCI_BRCM_I2SPCM_CLOCK_128K 0
-#define HCI_BRCM_I2SPCM_CLOCK_256K 1
-#define HCI_BRCM_I2SPCM_CLOCK_512K 2
-#define HCI_BRCM_I2SPCM_CLOCK_1024K 3
-#define HCI_BRCM_I2SPCM_CLOCK_2048K 4
-#define HCI_BRCM_I2SPCM_CLOCK_DEFAULT 5
/*
** Definitions for HCI Events
@@ -490,9 +412,12 @@
#define HCI_NUM_COMPL_DATA_BLOCKS_EVT 0x48
#define HCI_SHORT_RANGE_MODE_COMPLETE_EVT 0x4C
#define HCI_AMP_STATUS_CHANGE_EVT 0x4D
+#define HCI_SET_TRIGGERED_CLOCK_CAPTURE_EVT 0x4E
+
+
/* ULP HCI Event */
-#define HCI_BLE_EVENT 0x03E
+#define HCI_BLE_EVENT 0x03E
/* ULP Event sub code */
#define HCI_BLE_CONN_COMPLETE_EVT 0x01
#define HCI_BLE_ADV_PKT_RPT_EVT 0x02
@@ -500,17 +425,24 @@
#define HCI_BLE_READ_REMOTE_FEAT_CMPL_EVT 0x04
#define HCI_BLE_LTK_REQ_EVT 0x05
-#define HCI_EVENT_RSP_FIRST HCI_INQUIRY_COMP_EVT
-#define HCI_EVENT_RSP_LAST HCI_AMP_STATUS_CHANGE_EVT
+/* ConnectionLess Broadcast events */
+#define HCI_SYNC_TRAIN_COMP_EVT 0x4F
+#define HCI_SYNC_TRAIN_RECEIVED_EVT 0x50
+#define HCI_CLB_RX_DATA_EVT 0x51
+#define HCI_CLB_RX_TIMEOUT_EVT 0x52
+#define HCI_TRUNCATED_PAGE_COMP_EVT 0x53
+#define HCI_SLAVE_PAGE_RESP_TIMEOUT_EVT 0x54
+#define HCI_CLB_CHANNEL_CHANGE_EVT 0x55
+#define HCI_INQUIRY_RESPONSE_NOTIF 0x56
-#define HCI_BRCM_H4IBSS_EVT 0xEF /* Vendor specific events for H4IBSS */
-#define HCI_VENDOR_SPECIFIC_EVT 0xFF /* Vendor specific events */
-#define HCI_NAP_TRACE_EVT 0xFF /* was define 0xFE, 0xFD, change to 0xFF
+#define HCI_EVENT_RSP_FIRST HCI_INQUIRY_COMP_EVT
+#define HCI_EVENT_RSP_LAST HCI_CLB_CHANNEL_CHANGE_EVT
+
+#define HCI_VENDOR_SPECIFIC_EVT 0xFF /* Vendor specific events */
+#define HCI_NAP_TRACE_EVT 0xFF /* was define 0xFE, 0xFD, change to 0xFF
because conflict w/ TCI_EVT and per
specification compliant */
-
-
/*
** Defentions for HCI Error Codes that are past in the events
*/
@@ -580,7 +512,13 @@
#define HCI_ERR_CONN_FAILED_ESTABLISHMENT 0x3E
#define HCI_ERR_MAC_CONNECTION_FAILED 0x3F
-#define HCI_ERR_MAX_ERR 0x40
+/* ConnectionLess Broadcast errors */
+#define HCI_ERR_LT_ADDR_ALREADY_IN_USE 0x40
+#define HCI_ERR_LT_ADDR_NOT_ALLOCATED 0x41
+#define HCI_ERR_CLB_NOT_ENABLED 0x42
+#define HCI_ERR_CLB_DATA_TOO_BIG 0x43
+
+#define HCI_ERR_MAX_ERR 0x43
#define HCI_HINT_TO_RECREATE_AMP_PHYS_LINK 0xFF
@@ -672,6 +610,18 @@
0x0000000000002000 AMP Status Change Event
*/
+/* the event mask page 2 (CLB + CSA4) for BR/EDR controller */
+#define HCI_PAGE_2_EVENT_MASK "\x00\x00\x00\x00\x00\x7F\xC0\x00"
+/* 0x0000000000004000 Triggered Clock Capture Event
+ 0x0000000000008000 Sync Train Complete Event
+ 0x0000000000010000 Sync Train Received Event
+ 0x0000000000020000 Connectionless Broadcast Receive Event
+ 0x0000000000040000 Connectionless Broadcast Timeout Event
+ 0x0000000000080000 Truncated Page Complete Event
+ 0x0000000000100000 Salve Page Response Timeout Event
+ 0x0000000000200000 Connectionless Broadcast Channel Map Change Event
+ 0x0000000000400000 Inquiry Response Notification Event
+*/
/*
** Definitions for packet type masks (BT1.2 and BT2.0 definitions)
@@ -865,6 +815,7 @@
#define HCI_EIR_OOB_COD_TYPE BT_EIR_OOB_COD_TYPE
#define HCI_EIR_OOB_SSP_HASH_C_TYPE BT_EIR_OOB_SSP_HASH_C_TYPE
#define HCI_EIR_OOB_SSP_RAND_R_TYPE BT_EIR_OOB_SSP_RAND_R_TYPE
+#define HCI_EIR_3D_SYNC_TYPE BT_EIR_3D_SYNC_TYPE
/* Definitions for Write Simple Pairing Mode */
#define HCI_SP_MODE_UNDEFINED 0x00
@@ -1076,8 +1027,15 @@
#define HCI_CONTROLLER_TYPE_ECMA 2
#define HCI_MAX_CONTROLLER_TYPES 3
+/* ConnectionLess Broadcast */
+#define HCI_CLB_DISABLE 0x00
+#define HCI_CLB_ENABLE 0x01
-
+/* ConnectionLess Broadcast Data fragment */
+#define HCI_CLB_FRAGMENT_CONT 0x00
+#define HCI_CLB_FRAGMENT_START 0x01
+#define HCI_CLB_FRAGMENT_END 0x02
+#define HCI_CLB_FRAGMENT_SINGLE 0x03
/* AMP Controller Status codes
*/
@@ -1233,31 +1191,67 @@
#define LMP_COMPID_HARMON_INTL_IND 87
#define LMP_COMPID_VIZIO 88
#define LMP_COMPID_NORDIC SEMI 89
-#define LMP_COMPID_EM MICRO 90
-#define LMP_COMPID_RALINK TECH 91
-#define LMP_COMPID_BELKIN INC 92
-#define LMP_COMPID_REALTEK SEMI 93
-#define LMP_COMPID_STONESTREET ONE 94
+#define LMP_COMPID_EM_MICRO 90
+#define LMP_COMPID_RALINK_TECH 91
+#define LMP_COMPID_BELKIN_INC 92
+#define LMP_COMPID_REALTEK_SEMI 93
+#define LMP_COMPID_STONESTREET_ONE 94
#define LMP_COMPID_WICENTRIC 95
#define LMP_COMPID_RIVIERAWAVES 96
-#define LMP_COMPID_RDA MICRO 97
-#define LMP_COMPID_GIBSON GUITARS 98
-#define LMP_COMPID_MICOMMAND INC 99
-#define LMP_COMPID_BAND XI 100
-#define LMP_COMPID_HP COMPANY 101
-#define LMP_COMPID_9SOLUTIONS OY 102
-#define LMP_COMPID_GN NETCOM 103
-#define LMP_COMPID_GENERAL MOTORS 104
-#define LMP_COMPID_AD ENGINEERING 105
-#define LMP_COMPID_MINDTREE LTD 106
-#define LMP_COMPID_POLAR ELECTRO 107
-#define LMP_COMPID_BEAUTIFUL ENTERPRISE 108
+#define LMP_COMPID_RDA_MICRO 97
+#define LMP_COMPID_GIBSON_GUITARS 98
+#define LMP_COMPID_MICOMMAND_INC 99
+#define LMP_COMPID_BAND_XI 100
+#define LMP_COMPID_HP_COMPANY 101
+#define LMP_COMPID_9SOLUTIONS_OY 102
+#define LMP_COMPID_GN_NETCOM 103
+#define LMP_COMPID_GENERAL_MOTORS 104
+#define LMP_COMPID_AD_ENGINEERING 105
+#define LMP_COMPID_MINDTREE_LTD 106
+#define LMP_COMPID_POLAR_ELECTRO 107
+#define LMP_COMPID_BEAUTIFUL_ENTERPRISE 108
#define LMP_COMPID_BRIARTEK 109
-#define LMP_COMPID_SUMMIT DATA COMM 110
-#define LMP_COMPID_SOUND ID 111
+#define LMP_COMPID_SUMMIT_DATA_COMM 110
+#define LMP_COMPID_SOUND_ID 111
#define LMP_COMPID_MONSTER LLC 112
#define LMP_COMPID_CONNECTBLU 113
-#define LMP_COMPID_MAX_ID 114 /* this is a place holder */
+
+#define LMP_COMPID_SHANGHAI_SSE 114
+#define LMP_COMPID_GROUP_SENSE 115
+#define LMP_COMPID_ZOMM 116
+#define LMP_COMPID_SAMSUNG 117
+#define LMP_COMPID_CREATIVE_TECH 118
+#define LMP_COMPID_LAIRD_TECH 119
+#define LMP_COMPID_NIKE 120
+#define LMP_COMPID_LESSWIRE 121
+#define LMP_COMPID_MSTAR_SEMI 122
+#define LMP_COMPID_HANLYNN_TECH 123
+#define LMP_COMPID_AR_CAMBRIDGE 124
+#define LMP_COMPID_SEERS_TECH 125
+#define LMP_COMPID_SPORTS_TRACKING 126
+#define LMP_COMPID_AUTONET_MOBILE 127
+#define LMP_COMPID_DELORME_PUBLISH 128
+#define LMP_COMPID_WUXI_VIMICRO 129
+#define LMP_COMPID_SENNHEISER 130
+#define LMP_COMPID_TIME_KEEPING_SYS 131
+#define LMP_COMPID_LUDUS_HELSINKI 132
+#define LMP_COMPID_BLUE_RADIOS 133
+#define LMP_COMPID_EQUINUX 134
+#define LMP_COMPID_GARMIN_INTL 135
+#define LMP_COMPID_ECOTEST 136
+#define LMP_COMPID_GN_RESOUND 137
+#define LMP_COMPID_JAWBONE 138
+#define LMP_COMPID_TOPCON_POSITIONING 139
+#define LMP_COMPID_QUALCOMM_LABS 140
+#define LMP_COMPID_ZSCAN_SOFTWARE 141
+#define LMP_COMPID_QUINTIC 142
+#define LMP_COMPID_STOLLMAN_EV 143
+#define LMP_COMPID_FUNAI_ELECTRONIC 144
+#define LMP_COMPID_ADV_PANMOBILE 145
+#define LMP_COMPID_THINK_OPTICS 146
+#define LMP_COMPID_UNIVERSAL_ELEC 147
+#define LMP_COMPID_AIROHA_TECH 148
+#define LMP_COMPID_MAX_ID 149 /* this is a place holder */
#define LMP_COMPID_INTERNAL 65535
#define MAX_LMP_COMPID (LMP_COMPID_MAX_ID)
@@ -1308,10 +1302,17 @@
#define HCI_EDR3_DH3_PACKET_SIZE 552
#define HCI_EDR3_DH5_PACKET_SIZE 1021
+/* Feature Pages */
+#define HCI_EXT_FEATURES_PAGE_0 0 /* Extended Feature Page 0 (regular features) */
+#define HCI_EXT_FEATURES_PAGE_1 1 /* Extended Feature Page 1 */
+#define HCI_EXT_FEATURES_PAGE_2 2 /* Extended Feature Page 2 */
+#define HCI_EXT_FEATURES_PAGE_MAX HCI_EXT_FEATURES_PAGE_2
+
+#define HCI_FEATURE_BYTES_PER_PAGE 8
+
/*
** Features encoding - page 0
*/
-#define HCI_NUM_FEATURE_BYTES 8
#define HCI_FEATURES_KNOWN(x) ((x[0] | x[1] | x[2] | x[3] | x[4] | x[5] | x[6] | x[7]) != 0)
#define HCI_FEATURE_3_SLOT_PACKETS_MASK 0x01
@@ -1454,6 +1455,16 @@
#define HCI_FEATURE_AFH_CLASS_SLAVE_OFF 4
#define HCI_LMP_AFH_CLASS_SLAVE_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CLASS_SLAVE_OFF] & HCI_FEATURE_AFH_CLASS_SLAVE_MASK)
+#if 1
+#define HCI_FEATURE_BREDR_NOT_SPT_MASK 0x20
+#define HCI_FEATURE_BREDR_NOT_SPT_OFF 4
+#define HCI_BREDR_NOT_SPT_SUPPORTED(x) ((x)[HCI_FEATURE_BREDR_NOT_SPT_OFF] & HCI_FEATURE_BREDR_NOT_SPT_MASK)
+
+#define HCI_FEATURE_LE_SPT_MASK 0x40
+#define HCI_FEATURE_LE_SPT_OFF 4
+#define HCI_LE_SPT_SUPPORTED(x) ((x)[HCI_FEATURE_LE_SPT_OFF] & HCI_FEATURE_LE_SPT_MASK)
+#else
+
#define HCI_FEATURE_ALIAS_AUTH_MASK 0x20
#define HCI_FEATURE_ALIAS_AUTH_OFF 4
#define HCI_LMP_ALIAS_AUTH_SUPPORTED(x) ((x)[HCI_FEATURE_ALIAS_AUTH_OFF] & HCI_FEATURE_ALIAS_AUTH_MASK)
@@ -1461,6 +1472,7 @@
#define HCI_FEATURE_ANON_MODE_MASK 0x40
#define HCI_FEATURE_ANON_MODE_OFF 4
#define HCI_LMP_ANON_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_ANON_MODE_OFF] & HCI_FEATURE_ANON_MODE_MASK)
+#endif
#define HCI_FEATURE_3_SLOT_EDR_ACL_MASK 0x80
#define HCI_FEATURE_3_SLOT_EDR_ACL_OFF 4
@@ -1502,9 +1514,16 @@
#define HCI_FEATURE_EXT_INQ_RSP_OFF 6
#define HCI_EXT_INQ_RSP_SUPPORTED(x) ((x)[HCI_FEATURE_EXT_INQ_RSP_OFF] & HCI_FEATURE_EXT_INQ_RSP_MASK)
+#if 1 /* TOKYO spec definition */
+#define HCI_FEATURE_SIMUL_LE_BREDR_MASK 0x02
+#define HCI_FEATURE_SIMUL_LE_BREDR_OFF 6
+#define HCI_SIMUL_LE_BREDR_SUPPORTED(x) ((x)[HCI_FEATURE_SIMUL_LE_BREDR_OFF] & HCI_FEATURE_SIMUL_LE_BREDR_MASK)
+
+#else
#define HCI_FEATURE_ANUM_PIN_AWARE_MASK 0x02
#define HCI_FEATURE_ANUM_PIN_AWARE_OFF 6
#define HCI_ANUM_PIN_AWARE_SUPPORTED(x) ((x)[HCI_FEATURE_ANUM_PIN_AWARE_OFF] & HCI_FEATURE_ANUM_PIN_AWARE_MASK)
+#endif
#define HCI_FEATURE_ANUM_PIN_CAP_MASK 0x04
#define HCI_FEATURE_ANUM_PIN_CAP_OFF 6
@@ -1534,7 +1553,7 @@
#define HCI_FEATURE_INQ_RESP_TX_OFF 7
#define HCI_INQ_RESP_TX_SUPPORTED(x) ((x)[HCI_FEATURE_INQ_RESP_TX_OFF] & HCI_FEATURE_INQ_RESP_TX_MASK)
-#define HCI_FEATURE_EXTENDED_MASK 0x80
+#define HCI_FEATURE_EXTENDED_MASK 0x80
#define HCI_FEATURE_EXTENDED_OFF 7
#define HCI_LMP_EXTENDED_SUPPORTED(x) ((x)[HCI_FEATURE_EXTENDED_OFF] & HCI_FEATURE_EXTENDED_MASK)
@@ -1545,6 +1564,38 @@
#define HCI_EXT_FEATURE_SSP_HOST_OFF 0
#define HCI_SSP_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SSP_HOST_OFF] & HCI_EXT_FEATURE_SSP_HOST_MASK)
+#define HCI_EXT_FEATURE_LE_HOST_MASK 0x02
+#define HCI_EXT_FEATURE_LE_HOST_OFF 0
+#define HCI_LE_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_LE_HOST_OFF] & HCI_EXT_FEATURE_LE_HOST_MASK)
+
+#define HCI_EXT_FEATURE_SIMUL_DUMO_HOST_MASK 0x04
+#define HCI_EXT_FEATURE_SIMUL_DUMO_HOST_OFF 0
+#define HCI_SIMUL_DUMO_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SIMUL_DUMO_HOST_OFF] & HCI_EXT_FEATURE_SIMUL_DUMO_HOST_MASK)
+
+/*
+** Features encoding - page 2
+*/
+#define HCI_EXT_FEATURE_CSB_MASTER_MASK 0x01
+#define HCI_EXT_FEATURE_CSB_MASTER_OFF 0
+#define HCI_CSB_MASTER_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_CSB_MASTER_OFF] & HCI_EXT_FEATURE_CSB_MASTER_MASK)
+
+#define HCI_EXT_FEATURE_CSB_SLAVE_MASK 0x02
+#define HCI_EXT_FEATURE_CSB_SLAVE_OFF 0
+#define HCI_CSB_SLAVE_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_CSB_SLAVE_OFF] & HCI_EXT_FEATURE_CSB_SLAVE_MASK)
+
+#define HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_MASK 0x04
+#define HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_OFF 0
+#define HCI_SYNC_TRAIN_MASTER_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_OFF] & HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_MASK)
+
+#define HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_MASK 0x08
+#define HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_OFF 0
+#define HCI_SYNC_SCAN_SLAVE_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_OFF] & HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_MASK)
+
+#define HCI_EXT_FEATURE_INQ_RESP_NOTIF_MASK 0x10
+#define HCI_EXT_FEATURE_INQ_RESP_NOTIF_OFF 0
+#define HCI_INQ_RESP_NOTIF_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_INQ_RESP_NOTIF_OFF] & HCI_EXT_FEATURE_INQ_RESP_NOTIF_MASK)
+
+
/*
** Local Supported Commands encoding
*/
@@ -2233,6 +2284,103 @@
** Supported Commands (Byte 28)
*/
+/* Supported Commands (Byte 29) */
+#define HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_MASK 0x08
+#define HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_OFF 29
+#define HCI_READ_ENH_SETUP_SYNCH_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_MASK)
+
+#define HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_MASK 0x10
+#define HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_OFF 29
+#define HCI_READ_ENH_ACCEPT_SYNCH_CONN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_MASK)
+
+#define HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_MASK 0x20
+#define HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_OFF 29
+#define HCI_READ_LOCAL_CODECS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_MASK 0x40
+#define HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_OFF 29
+#define HCI_SET_MWS_CHANNEL_PARAMETERS_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_OFF] & HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_MASK 0x80
+#define HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_OFF 29
+#define HCI_SET_EXTERNAL_FRAME_CONFIGURATION_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_OFF] & HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_MASK)
+
+
+/* Supported Commands (Byte 30) */
+#define HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_MASK 0x01
+#define HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_OFF 30
+#define HCI_SET_MWS_SIGNALING_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_OFF] & HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_MASK 0x02
+#define HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_OFF 30
+#define HCI_SET_MWS_TRANSPORT_LAYER_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_OFF] & HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_MASK 0x04
+#define HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_OFF 30
+#define HCI_SET_MWS_SCAN_FREQUENCY_TABLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_OFF] & HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_MASK)
+
+#define HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_MASK 0x08
+#define HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_OFF 30
+#define HCI_GET_MWS_TRANS_LAYER_CFG_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_OFF] & HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_MASK 0x10
+#define HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_OFF 30
+#define HCI_SET_MWS_PATTERN_CONFIGURATION_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_OFF] & HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_MASK)
+
+/* Supported Commands (Byte 30 bit 5) */
+#define HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_MASK 0x20
+#define HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_OFF 30
+#define HCI_SET_TRIG_CLK_CAP_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_OFF] & HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_MASK)
+
+
+/* Supported Commands (Byte 30 bit 6-7) */
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE 0x06
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_OFF 30
+#define HCI_TRUNCATED_PAGE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_TRUNCATED_PAGE_OFF] & HCI_SUPP_COMMANDS_TRUNCATED_PAGE)
+
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL 0x07
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL_OFF 30
+#define HCI_TRUNCATED_PAGE_CANCEL_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL_OFF] & HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL)
+
+/* Supported Commands (Byte 31 bit 6-7) */
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST 0x00
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_OFF 31
+#define HCI_SET_CONLESS_SLAVE_BRCST_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_OFF] & HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST)
+
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE 0x01
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE_OFF 31
+#define HCI_SET_CONLESS_SLAVE_BRCST_RECEIVE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE_OFF] & HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE)
+
+#define HCI_SUPP_COMMANDS_START_SYNC_TRAIN 0x02
+#define HCI_SUPP_COMMANDS_START_SYNC_TRAIN_OFF 31
+#define HCI_START_SYNC_TRAIN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_START_SYNC_TRAIN_OFF] & HCI_SUPP_COMMANDS_START_SYNC_TRAIN)
+
+#define HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN 0x03
+#define HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN_OFF 31
+#define HCI_RECEIVE_SYNC_TRAIN_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN_OFF] & HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN)
+
+#define HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR 0x04
+#define HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR_OFF 31
+#define HCI_SET_RESERVED_LT_ADDR_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR_OFF] & HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR)
+
+#define HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR 0x05
+#define HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR_OFF 31
+#define HCI_DELETE_RESERVED_LT_ADDR_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR_OFF] & HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR)
+
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA 0x06
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA_OFF 31
+#define HCI_SET_CONLESS_SLAVE_BRCST_DATA_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA_OFF] & HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA)
+
+#define HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM 0x07
+#define HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM_OFF 31
+#define HCI_READ_SYNC_TRAIN_PARAM_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM_OFF] & HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM)
+
+/* Supported Commands (Byte 32 bit 0) */
+#define HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM 0x00
+#define HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM_OFF 32
+#define HCI_WRITE_SYNC_TRAIN_PARAM_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM_OFF] & HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM)
+
+
/*
Commands of HCI_GRP_VENDOR_SPECIFIC group for WIDCOMM SW LM Simulator
*/
@@ -2303,78 +2451,7 @@
#define HCI_DEBUG_LC_CMD_MIN (0x0300 | HCI_GRP_VENDOR_SPECIFIC)
#define HCI_DEBUG_LC_CMD_MAX (0x03FF | HCI_GRP_VENDOR_SPECIFIC)
#define HCI_DEBUG_LC_COMMAND HCI_DEBUG_LC_CMD_MAX
-
#endif
-
-/* Broadcom Vendor Specific Event sub-codes */
-#define HCI_BRCM_VSE_SUBCODE_AUTOMATIC_PAIRING_REQUEST 0x01
-#define HCI_BRCM_VSE_SUBCODE_RX_COMPLETE 0x02
-#define HCI_BRCM_VSE_SUBCODE_LINK_QUALITY_REPORT 0x03
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_1_PACKET_REPORT 0x04
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_N_PACKETS_REPORT_SUMMARY 0x05
-#define HCI_BRCM_VSE_SUBCODE_MODULE_XRAM_TEST_REPORT_SUMMARY 0x06
-#define HCI_BRCM_VSE_SUBCODE_CONNECTIONLESS_RX_TEST_STATISTICS 0x07
-#define HCI_BRCM_VSE_SUBCODE_FM_INTERRUPT 0x08
-#define HCI_BRCM_VSE_SUBCODE_TCA_DEBUG_REPORT 0x0B
-#define HCI_BRCM_VSE_SUBCODE_RAM_ROM_CLOCK_TEST_STATUS 0x0C
-#define HCI_BRCM_VSE_SUBCODE_DEBUG_OUTPUT_STRING 0x0D
-#define HCI_BRCM_VSE_SUBCODE_PCM_DATA_DUMP 0x0E
-#define HCI_BRCM_VSE_SUBCODE_PROTOCOL_MESSAGE_DUMP 0x0F
-#define HCI_BRCM_VSE_SUBCODE_GPS_DATA 0x10
-#define HCI_BRCM_VSE_SUBCODE_RESERVED_11 0x11
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_EVENT 0x12
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_SETUP_EVENT 0x13
-#define HCI_BRCM_VSE_SUBCODE_MEIF_RX_EVENT 0x14
-#define HCI_BRCM_VSE_SUBCODE_UNDETECTED_CRC_ERROR_EVENT 0x15
-#define HCI_BRCM_VSE_SUBCODE_BFC_DISCONNECT_EVENT 0x16
-#define HCI_BRCM_VSE_SUBCODE_CUSTOMER_SPECIFIC_CS_ENERGY_DETECTED_EVENTS 0x17
-#define HCI_BRCM_VSE_SUBCODE_BFC_POLLING_INFO_EVENT 0x18
-#define HCI_BRCM_VSE_SUBCODE_EEPROM_CHIP_ERASE_BY_MINIDRIVER_STATUS_REPORT 0xCE
-
-/* MIP related Vendor Specific Event */
-#define HCI_BRCM_VSE_SUBCODE_MIP_MODE_CHANGE 0x27
-#define HCI_BRCM_VSE_SUBCODE_MIP_DISCONNECT 0x28
-#define HCI_BRCM_VSE_SUBCODE_MIP_EIR_CMPLT 0x29
-#define HCI_BRCM_VSE_SUBCODE_MIP_ENC_KEY 0x2A
-#define HCI_BRCM_VSE_SUBCODE_MIP_DATA_RECEIVED 0x2E
-
-/* AMP VSE events
-*/
-#define AMP_VSE_CHANSPEC_CHAN_MASK 0x00ff
-
-#define AMP_VSE_CHANSPEC_CTL_SB_MASK 0x0300
-#define AMP_VSE_CHANSPEC_CTL_SB_LOWER 0x0100
-#define AMP_VSE_CHANSPEC_CTL_SB_UPPER 0x0200
-#define AMP_VSE_CHANSPEC_CTL_SB_NONE 0x0300
-
-#define AMP_VSE_CHANSPEC_BW_MASK 0x0C00
-#define AMP_VSE_CHANSPEC_BW_10 0x0400
-#define AMP_VSE_CHANSPEC_BW_20 0x0800
-#define AMP_VSE_CHANSPEC_BW_40 0x0C00
-
-#define AMP_VSE_CHANSPEC_BAND_MASK 0xf000
-#define AMP_VSE_CHANSPEC_BAND_5G 0x1000
-#define AMP_VSE_CHANSPEC_BAND_2G 0x2000
-
-/* PCM2 related */
-#define HCI_BRCM_CUSTOMER_EXT_ARC_LEN 4
-#define LOC_AUDIO_ROUTING_CONTROL 0x88
-#define LOC_ARC_CHANNEL_ID 0xF3
-
-#define ARC_INTERFACE_PCMI2S 0x01
-#define ARC_INTERFACE_FM_I2S 0x02
-#define ARC_INTERFACE_SLB 0x03
-
-#define ARC_MODE_NOT_USED 0x00
-#define ARC_MODE_BT_AUDIO 0x01
-#define ARC_MODE_FMRX 0x02
-#define ARC_MODE_FMTX 0x03
-#define ARC_MODE_SHARED_BT_FMRX 0x04
-#define ARC_MODE_SHARED_BT_FMTX 0x05
-
-#define BRCM_PCM2_SETUP_READ_SIZE 0x01
-#define BRCM_PCM2_SETUP_WRITE_SIZE 0x1A
-
#endif
diff --git a/src/include/nfc_target.h b/src/include/nfc_target.h
index 1ec7e57..bfe0f4e 100755
--- a/src/include/nfc_target.h
+++ b/src/include/nfc_target.h
@@ -129,6 +129,16 @@
#endif
+/* NCI msg pool for HAL (for shared NFC/HAL GKI)*/
+#ifndef NFC_HAL_NCI_POOL_ID
+#define NFC_HAL_NCI_POOL_ID NFC_NCI_POOL_ID
+#endif
+
+#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
+#define NFC_HAL_NCI_POOL_BUF_SIZE NFC_NCI_POOL_BUF_SIZE
+#endif
+
+
/******************************************************************************
**
** NCI Transport definitions
@@ -177,9 +187,6 @@
#endif
/* Define to TRUE to include not openned Broadcom Vendor Specific implementation */
-#ifndef NFC_BRCM_NOT_OPEN_INCLUDED
-#define NFC_BRCM_NOT_OPEN_INCLUDED FALSE //Android requires FALSE
-#endif
/* Define to TRUE if compling for NFC Reader/Writer Only mode */
#ifndef NFC_RW_ONLY
@@ -335,27 +342,6 @@
#define CE_TEST_INCLUDED FALSE
#endif
-#if (NFC_BRCM_NOT_OPEN_INCLUDED == TRUE)
-/* Power cycle NFCC to move full power mode from CE low power mode */
-#ifndef NFC_LP_POWER_CYCLE_TO_FULL
-#define NFC_LP_POWER_CYCLE_TO_FULL TRUE
-#endif
-
-/* Parameter for low power mode command */
-#ifndef NFC_LP_COMMAND_PARAMS
-#define NFC_LP_COMMAND_PARAMS 5
-#endif
-
-/* Primary Threshold for battery monitor */
-#ifndef NFC_LP_PRIMARY_THRESHOLD
-#define NFC_LP_PRIMARY_THRESHOLD 0
-#endif
-
-/* Secondary Threshold for battery monitor */
-#ifndef NFC_LP_SECONDARY_THRESHOLD
-#define NFC_LP_SECONDARY_THRESHOLD 8
-#endif
-#endif
/* Quick Timer */
#ifndef QUICK_TIMER_TICKS_PER_SEC
@@ -527,9 +513,9 @@
#define NFA_P2P_INCLUDED TRUE
#endif
-/* Timeout for waiting on other host in HCI Network to initialize */
-#ifndef NFA_HCI_NETWK_INIT_TIMEOUT
-#define NFA_HCI_NETWK_INIT_TIMEOUT 400
+/* Maximum Idle time (no hcp) to wait for EE DISC REQ Ntf(s) */
+#ifndef NFA_HCI_NETWK_INIT_IDLE_TIMEOUT
+#define NFA_HCI_NETWK_INIT_IDLE_TIMEOUT 1000
#endif
#ifndef NFA_HCI_MAX_HOST_IN_NETWORK
@@ -552,8 +538,8 @@
#endif
/* Timeout for waiting for the response to HCP Command packet */
-#ifndef NFA_HCI_CMD_RSP_TIMEOUT
-#define NFA_HCI_CMD_RSP_TIMEOUT 1000
+#ifndef NFA_HCI_RESPONSE_TIMEOUT
+#define NFA_HCI_RESPONSE_TIMEOUT 1000
#endif
/* Default poll duration (may be over-ridden using NFA_SetRfDiscoveryDuration) */
@@ -576,6 +562,11 @@
#define NFA_DM_AUTO_PRESENCE_CHECK FALSE /* Android requires FALSE */
#endif
+/* Default delay to auto presence check after sending raw frame */
+#ifndef NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
+#define NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY 750
+#endif
+
/* Time to restart discovery after deactivated */
#ifndef NFA_DM_DISC_DELAY_DISCOVERY
#define NFA_DM_DISC_DELAY_DISCOVERY 1000
@@ -593,7 +584,7 @@
#endif
#ifndef NFA_CHO_INCLUDED
-#define NFA_CHO_INCLUDED TRUE
+#define NFA_CHO_INCLUDED FALSE /* Anddroid must use FALSE to exclude CHO */
#endif
/* MIU for CHO */
@@ -626,7 +617,7 @@
#endif
#ifndef NFA_SNEP_INCLUDED
-#define NFA_SNEP_INCLUDED TRUE
+#define NFA_SNEP_INCLUDED FALSE /* Android must use FALSE to exclude SNEP */
#endif
/* Max acceptable length */
@@ -673,6 +664,19 @@
#define NFA_DTA_INCLUDED TRUE
#endif
+
+/*****************************************************************************
+** Define HAL_WRITE depending on whether HAL is using shared GKI resources
+** as the NFC stack.
+*****************************************************************************/
+#ifndef HAL_WRITE
+#define HAL_WRITE(p) {nfc_cb.p_hal->write(p->len, (UINT8 *)(p+1) + p->offset); GKI_freebuf(p);}
+
+
+
+#endif /* HAL_WRITE */
+
+
#endif /* NFC_TARGET_H */
diff --git a/src/include/nfccext.h b/src/include/nfccext.h
deleted file mode 100644
index 8f5f006..0000000
--- a/src/include/nfccext.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-/****************************************************************************/
-/* NFCC global definitions */
-/****************************************************************************/
-
-#ifndef NFCC_EXT_H
-#define NFCC_EXT_H
-
-#include "bt_target.h"
-#include "nci_cmsgs.h"
-#include "nci_defs.h"
-
-extern void nfcc_init (void);
-extern void * nfcc_find_conn_cb_by_conn_id(UINT8 conn_id);
-extern void nfcc_proc_nfcee_discover(void);
-extern void nfcc_proc_nfcee_uicc_vse_test(UINT8 ee_handle, UINT8 mode);
-extern void lm_process_nfc (BT_HDR *p_msg);
-
-/*
-** Definitions for events sent from NFCC to LMP
-*/
-#define NFCC_EVENT_START_DISCOVER 1 /* forward Start Discover cmd to peer NFCC */
-#define NFCC_EVENT_DISCOVER_RESP 2 /* A response to a Discover cmd */
-#define NFCC_EVENT_DATA 3 /* A response to a Discover cmd */
-#define NFCC_EVENT_DISCOVER_SELECT 4 /* forward Start Discover cmd to peer NFCC */
-#define NFCC_EVENT_DEACTIVATE 5 /* forward deactivate cmd to peer NFCC */
-
-
-#define NFCC_MAX_DISCOVER_PARAMS 7
-
-/* this does not work if more than 329 */
-#define NFCC_MAX_PARAM_TLV_LEN 328
-
-/* Discovery Type Masks - not in spec; for convenience/based on NCI_DISCOVERY_TYPE* */
-#define NCI_DISCOVERY_MASK_POLL_A 0x0001
-#define NCI_DISCOVERY_MASK_POLL_B 0x0002
-#define NCI_DISCOVERY_MASK_POLL_F 0x0004
-#define NCI_DISCOVERY_MASK_LISTEN_A 0x0100
-#define NCI_DISCOVERY_MASK_LISTEN_B 0x0200
-#define NCI_DISCOVERY_MASK_LISTEN_F 0x0400
-#define NCI_DISCOVERY_MASK_MAX 0x070F
-
-typedef UINT16 tNCI_DISCOVERY_MASK;
-
-#define NFCC_NUM_NFCEE 3
-/*
-** Define a buffer that is used for data descriptors from HCID to LC
-*/
-typedef struct
-{
- BT_HDR hdr; /* Standard BT header */
- tNCI_DISCOVERY_MASK mask; /* sender is looking for anything in this mask */
- UINT8 num_params;
- tNCI_DISCOVER_PARAMS params[NFCC_MAX_DISCOVER_PARAMS];
- UINT8 param_tlv[NFCC_MAX_PARAM_TLV_LEN];
- UINT16 param_tlv_len;
-} tNFCC_START_DISCOVER;
-
-typedef struct
-{
- BT_HDR hdr; /* Standard BT header */
- tNCI_DISCOVERY_MASK mask; /* sender is looking for anything in this mask */
- UINT8 num_params;
- tNCI_DISCOVER_PARAMS params[NFCC_MAX_DISCOVER_PARAMS];
- UINT8 param_tlv[NFCC_MAX_PARAM_TLV_LEN];
- UINT16 param_tlv_len;
-} tNFCC_DISCOVER_RESP;
-
-typedef struct
-{
- BT_HDR hdr; /* Standard BT header */
- UINT8 target_handle;
- UINT8 protocol;
-} tNFCC_DISCOVER_SELECT;
-
-/********************************************************************************
-**
-** Structures used for NFCC Simulation to communicate with peer NFCC Simulation
-*/
-typedef union
-{
- BT_HDR hdr;
- tNFCC_START_DISCOVER start_discover;
- tNFCC_DISCOVER_RESP discover_resp;
- tNFCC_DISCOVER_SELECT discover_select;
-} tNFCC_TO_PEER;
-
-
-#endif
-
diff --git a/src/libnfc.conf b/src/libnfc.conf
deleted file mode 100644
index 907fac6..0000000
--- a/src/libnfc.conf
+++ /dev/null
@@ -1,95 +0,0 @@
-## this file is used by NFC stack (external/libnfc-nci/src)
-## and NFC Service Java Native Interface (packages/apps/Nfc/nci/jni)
-
-###############################################################################
-# Application options
-APPL_TRACE_LEVEL=0xFF
-PROTOCOL_TRACE_LEVEL=0xFFFFFFFF
-
-###############################################################################
-# File used for NFA storage
-NFA_STORAGE="/data/nfc"
-
-###############################################################################
-# Force tag polling for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B |
-# NFA_TECHNOLOGY_MASK_F | NFA_TECHNOLOGY_MASK_ISO15693 |
-# NFA_TECHNOLOGY_MASK_B_PRIME | NFA_TECHNOLOGY_MASK_A_ACTIVE |
-# NFA_TECHNOLOGY_MASK_F_ACTIVE.
-#
-# Notable bits:
-# NFA_TECHNOLOGY_MASK_KOVIO 0x20
-# NFA_TECHNOLOGY_MASK_A_ACTIVE 0x40
-# NFA_TECHNOLOGY_MASK_F_ACTIVE 0x80
-#POLLING_TECH_MASK=0xDF
-
-###############################################################################
-# Force P2P to only listen for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F |
-# NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE
-P2P_LISTEN_TECH_MASK=0x45
-
-###############################################################################
-# This setting allows you to disable registering the T4t Virtual SE that causes
-# the NFCC to send PPSE requests to the DH.
-# The default setting is enabled (i.e. T4t Virtual SE is registered).
-#REGISTER_VIRTUAL_SE=1
-
-###############################################################################
-# Use Nexus S NXP RC work to allow our stack/firmware to work with a retail
-# Nexus S that causes IOP issues. Note, this will not pass conformance and
-# should be removed for production.
-USE_NXP_P2P_RC_WORKAROUND=1
-
-###############################################################################
-# When screen is turned off, specify the desired power state of the controller.
-# 0: power-off-sleep state; DEFAULT
-# 1: full-power state
-# 2: screen-off card-emulation (CE4/CE3/CE1 modes are used)
-#SCREEN_OFF_POWER_STATE=0
-
-###############################################################################
-# Configure the default Destination Gate used by HCI (the default is 4, which
-# is the ETSI loopback gate.
-#NFA_HCI_DEFAULT_DEST_GATE=4
-
-###############################################################################
-# Configure the single default SE to use. The default is to use the first
-# SE that is detected by the stack. This value might be used when the phone
-# supports multiple SE (e.g. 0xF3 and 0xF4) but you want to force it to use
-# one of them (e.g. 0xF4).
-#ACTIVE_SE=0xF3
-
-###############################################################################
-# Configure the NFC Extras to open and use a static pipe. If the value is
-# not set or set to 0, then the default is use a dynamic pipe based on a
-# destination gate (see NFA_HCI_DEFAULT_DEST_GATE). Note there is a value
-# for each UICC (where F3="UICC0" and F4="UICC1")
-#NFA_HCI_STATIC_PIPE_ID_F3=0x70
-#NFA_HCI_STATIC_PIPE_ID_F4=0x71
-
-###############################################################################
-# Force UICC to only listen to the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B.
-#UICC_LISTEN_TECH_MASK=0x03
-
-###############################################################################
-# When disconnecting from Oberthur secure element, perform a warm-reset of
-# the secure element to deselect the applet.
-# The default hex value of the command is 0x3. If this variable is undefined, then
-# this feature is not used.
-#OBERTHUR_WARM_RESET_COMMAND=3
-
-###############################################################################
-# Default poll duration (in ms)
-# The defualt is 500ms if not set (see nfc_target.h)
-NFA_DM_DISC_DURATION_POLL=333
-
-###############################################################################
-# AID for Empty Select command
-# If specified, this AID will be substituted when an Empty SELECT command is
-# detected. The first byte is the length of the AID. Maximum length is 16.
-AID_FOR_EMPTY_SELECT={08:A0:00:00:01:51:00:00:00}
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.c
index f06f9f4..84ee57b 100644
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2011-2012 Broadcom Corporation
+ * Copyright (C) 2011-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the action functions the NFA_CE state machine.
@@ -256,16 +257,13 @@
break;
case NFA_DM_RF_DISC_DEACTIVATED_EVT:
- ce_msg.hdr.event = NFA_CE_DEACTIVATE_NTF_EVT;
- ce_msg.hdr.layer_specific = p_data->deactivate.type;
- nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
- break;
-
- case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
- /* DH initiated deactivation in NFA_DM_RFST_LISTEN_SLEEP */
- ce_msg.hdr.event = NFA_CE_DEACTIVATE_NTF_EVT;
- ce_msg.hdr.layer_specific = NFA_DEACTIVATE_TYPE_IDLE;
- nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
+ /* DM broadcasts deactivaiton event in listen sleep state, so check before processing */
+ if (nfa_ce_cb.flags & NFA_CE_FLAGS_LISTEN_ACTIVE_SLEEP)
+ {
+ ce_msg.hdr.event = NFA_CE_DEACTIVATE_NTF_EVT;
+ ce_msg.hdr.layer_specific = p_data->deactivate.type;
+ nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
+ }
break;
default:
diff --git a/src/nfa/ce/nfa_ce_api.c b/src/nfa/ce/nfa_ce_api.c
index 08be523..1d296c9 100644
--- a/src/nfa/ce/nfa_ce_api.c
+++ b/src/nfa/ce/nfa_ce_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2011-2012 Broadcom Corporation
+ * Copyright (C) 2011-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface for card emulation
@@ -98,22 +99,17 @@
** The NDEF data provided by p_ndef_data must be persistent
** as long as the local NDEF tag is enabled.
**
-** UID of the tag can be set only for Type 1 and Type 2 tag.
-** UID Length should be 4/7 bytes in case of Type 1 tag and
-** UID Length should be 4/10 bytes in case of Type 2 tag.
**
** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
+** should happen before calling this function. Also, Input parameters p_uid and
+** uid_len are reserved for future use.
**
** Returns:
** NFA_STATUS_OK, if command accepted
** NFA_STATUS_INVALID_PARAM,
** if protocol_maks is not 0 and p_ndef_data is NULL
-** (or)if p_uid is NULL and uid_len is not 0
-** (or)if protocol mask is set for both Type 1 and Type 2
-** (or)if uid_len is not 0 and protocol mask is not set for Type 1/2
-** (or)if protocol mask is set for Type 1 and uid_len is not 4/7
-** (or)if protocol mask is set for Type 2 and uid_len is not 4/10
+** (or)uid_len is not 0
+** (or)if protocol mask is set for Type 1 or Type 2
**
** NFA_STATUS_FAILED: otherwise
**
@@ -140,35 +136,17 @@
return (NFA_STATUS_INVALID_PARAM);
}
- if ((protocol_mask & NFA_PROTOCOL_MASK_T1T) && (protocol_mask & NFA_PROTOCOL_MASK_T2T))
+ if ((protocol_mask & NFA_PROTOCOL_MASK_T1T) || (protocol_mask & NFA_PROTOCOL_MASK_T2T))
{
- NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Cannot emulate both Type 1 and Type 2 tag simultaneously");
+ NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Cannot emulate Type 1 / Type 2 tag");
return (NFA_STATUS_INVALID_PARAM);
}
- if ((uid_len) && !(protocol_mask & NFA_PROTOCOL_MASK_T1T) && !(protocol_mask & NFA_PROTOCOL_MASK_T2T))
+ if (uid_len)
{
NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Cannot Set UID for Protocol_mask: 0x%x", protocol_mask);
return (NFA_STATUS_INVALID_PARAM);
}
-
- if ((uid_len) && (protocol_mask & NFA_PROTOCOL_MASK_T1T) && (uid_len != NFA_T1T_UID_LEN) && (uid_len != NFA_T1T_CMD_UID_LEN))
- {
- NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Invalid UID Length for Type 1: 0x%x", uid_len);
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((uid_len) && (protocol_mask & NFA_PROTOCOL_MASK_T2T) && (uid_len != NFA_T2T_UID_LEN) && (uid_len != NFA_MAX_UID_LEN))
- {
- NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Invalid UID Length for Type 2: 0x%x", uid_len);
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((uid_len) && (p_uid == NULL))
- {
- NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Invlaid UID Length/NULL uid pointer");
- return (NFA_STATUS_INVALID_PARAM);
- }
}
if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
{
diff --git a/src/nfa/ce/nfa_ce_main.c b/src/nfa/ce/nfa_ce_main.c
index 9ec56d8..282a92c 100644
--- a/src/nfa/ce/nfa_ce_main.c
+++ b/src/nfa/ce/nfa_ce_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2011-2012 Broadcom Corporation
+ * Copyright (C) 2011-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA_CE
diff --git a/src/nfa/cho/nfa_cho_api.c b/src/nfa/cho/nfa_cho_api.c
deleted file mode 100644
index 13122ce..0000000
--- a/src/nfa/cho/nfa_cho_api.c
+++ /dev/null
@@ -1,457 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * NFA interface for connection handover
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_api.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_p2p_api.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function NFA_ChoRegister
-**
-** Description This function is called to register callback function to receive
-** connection handover events.
-**
-** On this registration, "urn:nfc:sn:handover" server will be
-** registered on LLCP if enable_server is TRUE.
-**
-** The result of the registration is reported with NFA_CHO_REG_EVT.
-**
-** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoRegister (BOOLEAN enable_server,
- tNFA_CHO_CBACK *p_cback)
-{
- tNFA_CHO_API_REG *p_msg;
-
- CHO_TRACE_API1 ("NFA_ChoRegister (): enable_server=%d", enable_server);
-
- if ( (nfa_cho_cb.state != NFA_CHO_ST_DISABLED)
- ||(nfa_cho_cb.p_cback != NULL) )
- {
- CHO_TRACE_ERROR0 ("NFA_ChoRegister (): Already registered or callback is not provided");
- return (NFA_STATUS_FAILED);
- }
-
- if ((p_msg = (tNFA_CHO_API_REG *) GKI_getbuf (sizeof (tNFA_CHO_API_REG))) != NULL)
- {
- p_msg->hdr.event = NFA_CHO_API_REG_EVT;
-
- p_msg->enable_server = enable_server;
- p_msg->p_cback = p_cback;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoDeregister
-**
-** Description This function is called to deregister callback function from NFA
-** Connection Handover Application.
-**
-** If this is the valid deregistration, NFA Connection Handover
-** Application will close the service with "urn:nfc:sn:handover"
-** on LLCP and deregister NDEF type handler if any.
-**
-** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoDeregister (void)
-{
- tNFA_CHO_API_DEREG *p_msg;
-
- CHO_TRACE_API0 ("NFA_ChoDeregister ()");
-
- if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoDeregister (): Not registered");
- return (NFA_STATUS_FAILED);
- }
-
- if ((p_msg = (tNFA_CHO_API_DEREG *) GKI_getbuf (sizeof (tNFA_CHO_API_DEREG))) != NULL)
- {
- p_msg->event = NFA_CHO_API_DEREG_EVT;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoConnect
-**
-** Description This function is called to create data link connection to
-** Connection Handover server on peer device.
-**
-** It must be called after receiving NFA_CHO_ACTIVATED_EVT.
-** NFA_CHO_CONNECTED_EVT will be returned if successful.
-** Otherwise, NFA_CHO_DISCONNECTED_EVT will be returned.
-**
-** If NFA_CHO_ROLE_REQUESTER is returned in NFA_CHO_CONNECTED_EVT,
-** Handover Request Message can be sent.
-** If NFA_CHO_ROLE_SELECTOR is returned in NFA_CHO_CONNECTED_EVT
-** because of collision, application must wait for Handover
-** Request Message.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoConnect (void)
-{
- tNFA_CHO_API_CONNECT *p_msg;
-
- CHO_TRACE_API0 ("NFA_ChoConnect ()");
-
- if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoConnect (): Not registered");
- return (NFA_STATUS_FAILED);
- }
- else if (nfa_cho_cb.state == NFA_CHO_ST_CONNECTED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoConnect (): Already connected");
- return (NFA_STATUS_FAILED);
- }
-
- if ((p_msg = (tNFA_CHO_API_CONNECT *) GKI_getbuf (sizeof (tNFA_CHO_API_CONNECT))) != NULL)
- {
- p_msg->event = NFA_CHO_API_CONNECT_EVT;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoDisconnect
-**
-** Description This function is called to disconnect data link connection with
-** Connection Handover server on peer device.
-**
-** NFA_CHO_DISCONNECTED_EVT will be returned.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoDisconnect (void)
-{
- tNFA_CHO_API_DISCONNECT *p_msg;
-
- CHO_TRACE_API0 ("NFA_ChoDisconnect ()");
-
- if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoDisconnect (): Not registered");
- return (NFA_STATUS_FAILED);
- }
-
- if ((p_msg = (tNFA_CHO_API_DISCONNECT *) GKI_getbuf (sizeof (tNFA_CHO_API_DISCONNECT))) != NULL)
- {
- p_msg->event = NFA_CHO_API_DISCONNECT_EVT;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoSendHr
-**
-** Description This function is called to send Handover Request Message with
-** Handover Carrier records or Alternative Carrier records.
-**
-** It must be called after receiving NFA_CHO_CONNECTED_EVT.
-**
-** NDEF may include one or more Handover Carrier records or Alternative
-** Carrier records with auxiliary data.
-** The records in NDEF must be matched with tNFA_CHO_AC_INFO in order.
-** Payload ID must be unique and Payload ID length must be less than
-** or equal to NFA_CHO_MAX_REF_NAME_LEN.
-**
-** The alternative carrier information of Handover Select record
-** will be sent to application by NFA_CHO_SELECT_EVT. Application
-** may receive NFA_CHO_REQUEST_EVT because of handover collision.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoSendHr (UINT8 num_ac_info,
- tNFA_CHO_AC_INFO *p_ac_info,
- UINT8 *p_ndef,
- UINT32 ndef_len)
-{
- tNFA_CHO_API_SEND_HR *p_msg;
- UINT16 msg_size;
- UINT8 *p_ndef_buf;
-
- CHO_TRACE_API2 ("NFA_ChoSendHr (): num_ac_info=%d, ndef_len=%d", num_ac_info, ndef_len);
-
- if (nfa_cho_cb.state != NFA_CHO_ST_CONNECTED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendHr (): Not connected");
- return (NFA_STATUS_FAILED);
- }
-
- if (num_ac_info > NFA_CHO_MAX_AC_INFO)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendHr (): Too many AC information");
- return (NFA_STATUS_FAILED);
- }
-
- p_ndef_buf = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
- if (!p_ndef_buf)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendHr (): Failed to allocate buffer for NDEF");
- return NFA_STATUS_FAILED;
- }
- else if (ndef_len > LLCP_POOL_BUF_SIZE)
- {
- CHO_TRACE_ERROR1 ("NFA_ChoSendHr (): Failed to allocate buffer for %d bytes", ndef_len);
- GKI_freebuf (p_ndef_buf);
- return NFA_STATUS_FAILED;
- }
-
- msg_size = sizeof (tNFA_CHO_API_SEND_HR) + num_ac_info * sizeof (tNFA_CHO_AC_INFO);
-
- if ((p_msg = (tNFA_CHO_API_SEND_HR *) GKI_getbuf (msg_size)) != NULL)
- {
- p_msg->hdr.event = NFA_CHO_API_SEND_HR_EVT;
-
- memcpy (p_ndef_buf, p_ndef, ndef_len);
- p_msg->p_ndef = p_ndef_buf;
- p_msg->max_ndef_size = LLCP_POOL_BUF_SIZE;
- p_msg->cur_ndef_size = ndef_len;
-
- p_msg->num_ac_info = num_ac_info;
- p_msg->p_ac_info = (tNFA_CHO_AC_INFO *) (p_msg + 1);
- memcpy (p_msg->p_ac_info, p_ac_info, num_ac_info * sizeof (tNFA_CHO_AC_INFO));
-
- nfa_sys_sendmsg (p_msg);
- return (NFA_STATUS_OK);
- }
- else
- {
- GKI_freebuf (p_ndef_buf);
- return (NFA_STATUS_FAILED);
- }
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoSendHs
-**
-** Description This function is called to send Handover Select message with
-** Alternative Carrier records as response to Handover Request
-** message.
-**
-** NDEF may include one or more Alternative Carrier records with
-** auxiliary data.
-** The records in NDEF must be matched with tNFA_CHO_AC_INFO in order.
-** Payload ID must be unique and Payload ID length must be less than
-** or equal to NFA_CHO_MAX_REF_NAME_LEN.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoSendHs (UINT8 num_ac_info,
- tNFA_CHO_AC_INFO *p_ac_info,
- UINT8 *p_ndef,
- UINT32 ndef_len)
-{
- tNFA_CHO_API_SEND_HS *p_msg;
- UINT16 msg_size;
- UINT8 *p_ndef_buf;
-
- CHO_TRACE_API2 ("NFA_ChoSendHs(): num_ac_info=%d, ndef_len=%d",
- num_ac_info, ndef_len);
-
- if (nfa_cho_cb.state != NFA_CHO_ST_CONNECTED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendHs (): Not connected");
- return (NFA_STATUS_FAILED);
- }
-
- if (num_ac_info > NFA_CHO_MAX_AC_INFO)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendHs (): Too many AC information");
- return (NFA_STATUS_FAILED);
- }
-
- p_ndef_buf = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
- if (!p_ndef_buf)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendHs (): Failed to allocate buffer for NDEF");
- return NFA_STATUS_FAILED;
- }
- else if (ndef_len > LLCP_POOL_BUF_SIZE)
- {
- CHO_TRACE_ERROR1 ("NFA_ChoSendHs (): Failed to allocate buffer for %d bytes", ndef_len);
- GKI_freebuf (p_ndef_buf);
- return NFA_STATUS_FAILED;
- }
-
- msg_size = sizeof (tNFA_CHO_API_SEND_HS) + num_ac_info * sizeof (tNFA_CHO_AC_INFO);
-
- if ((p_msg = (tNFA_CHO_API_SEND_HS *) GKI_getbuf (msg_size)) != NULL)
- {
- p_msg->hdr.event = NFA_CHO_API_SEND_HS_EVT;
-
- memcpy (p_ndef_buf, p_ndef, ndef_len);
- p_msg->p_ndef = p_ndef_buf;
- p_msg->max_ndef_size = LLCP_POOL_BUF_SIZE;
- p_msg->cur_ndef_size = ndef_len;
-
- p_msg->num_ac_info = num_ac_info;
- p_msg->p_ac_info = (tNFA_CHO_AC_INFO *) (p_msg + 1);
- memcpy (p_msg->p_ac_info, p_ac_info, num_ac_info * sizeof (tNFA_CHO_AC_INFO));
-
- nfa_sys_sendmsg (p_msg);
- return (NFA_STATUS_OK);
- }
- else
- {
- GKI_freebuf (p_ndef_buf);
- return (NFA_STATUS_FAILED);
- }
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoSendSelectError
-**
-** Description This function is called to send Error record to indicate failure
-** to process the most recently received Handover Request message.
-**
-** error_reason : NFA_CHO_ERROR_TEMP_MEM
-** NFA_CHO_ERROR_PERM_MEM
-** NFA_CHO_ERROR_CARRIER
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoSendSelectError (UINT8 error_reason,
- UINT32 error_data)
-{
- tNFA_CHO_API_SEL_ERR *p_msg;
-
- CHO_TRACE_API2 ("NFA_ChoSendSelectError (): error_reason=0x%x, error_data=0x%x",
- error_reason, error_data);
-
- if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
- {
- CHO_TRACE_ERROR0 ("NFA_ChoSendSelectError (): Not registered");
- return (NFA_STATUS_FAILED);
- }
-
- if ((p_msg = (tNFA_CHO_API_SEL_ERR *) GKI_getbuf (sizeof (tNFA_CHO_API_SEL_ERR))) != NULL)
- {
- p_msg->hdr.event = NFA_CHO_API_SEL_ERR_EVT;
-
- p_msg->error_reason = error_reason;
- p_msg->error_data = error_data;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_ChoSetTraceLevel
-**
-** Description This function sets the trace level for CHO. If called with
-** a value of 0xFF, it simply returns the current trace level.
-**
-** Returns The new or current trace level
-**
-*******************************************************************************/
-UINT8 NFA_ChoSetTraceLevel (UINT8 new_level)
-{
- if (new_level != 0xFF)
- nfa_cho_cb.trace_level = new_level;
-
- return (nfa_cho_cb.trace_level);
-}
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-/*******************************************************************************
-**
-** Function NFA_ChoSetTestParam
-**
-** Description This function is called to set test parameters.
-**
-*******************************************************************************/
-void NFA_ChoSetTestParam (UINT8 test_enable,
- UINT8 test_version,
- UINT16 test_random_number)
-{
- nfa_cho_cb.test_enabled = test_enable;
- nfa_cho_cb.test_version = test_version;
- nfa_cho_cb.test_random_number = test_random_number;
-}
-#endif
diff --git a/src/nfa/cho/nfa_cho_main.c b/src/nfa/cho/nfa_cho_main.c
deleted file mode 100644
index 373eced..0000000
--- a/src/nfa/cho/nfa_cho_main.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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 main implementation file for the NFA Connection Handover.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_api.h"
-#include "nfa_sys.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "trace_api.h"
-
-/*****************************************************************************
-** Global Variables
-*****************************************************************************/
-
-/* system manager control block definition */
-#if NFA_DYNAMIC_MEMORY == FALSE
-tNFA_CHO_CB nfa_cho_cb;
-#endif
-
-/*****************************************************************************
-** Static Functions
-*****************************************************************************/
-
-/* event handler function type */
-static BOOLEAN nfa_cho_evt_hdlr (BT_HDR *p_msg);
-
-/* disable function type */
-static void nfa_cho_sys_disable (void);
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-static const tNFA_SYS_REG nfa_cho_sys_reg =
-{
- NULL,
- nfa_cho_evt_hdlr,
- nfa_cho_sys_disable,
- NULL
-};
-
-/*******************************************************************************
-**
-** Function nfa_cho_timer_cback
-**
-** Description Process timeout event when timer expires
-**
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_timer_cback (void *p_tle)
-{
- nfa_cho_sm_execute (NFA_CHO_TIMEOUT_EVT, NULL);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_init
-**
-** Description Initialize NFA Connection Handover
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_init (void)
-{
- CHO_TRACE_DEBUG0 ("nfa_cho_init ()");
-
- /* initialize control block */
- memset (&nfa_cho_cb, 0, sizeof (tNFA_CHO_CB));
-
- nfa_cho_cb.server_sap = LLCP_INVALID_SAP;
- nfa_cho_cb.client_sap = LLCP_INVALID_SAP;
- nfa_cho_cb.remote_sap = LLCP_INVALID_SAP;
-
- nfa_cho_cb.hs_ndef_type_handle = NFA_HANDLE_INVALID;
- nfa_cho_cb.bt_ndef_type_handle = NFA_HANDLE_INVALID;
- nfa_cho_cb.wifi_ndef_type_handle = NFA_HANDLE_INVALID;
-
- nfa_cho_cb.trace_level = APPL_INITIAL_TRACE_LEVEL;
-
- /* register message handler on NFA SYS */
- nfa_sys_register ( NFA_ID_CHO, &nfa_cho_sys_reg);
-
- /* initialize timer callback */
- nfa_cho_cb.timer.p_cback = nfa_cho_timer_cback;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_sys_disable
-**
-** Description Deregister NFA Connection Handover from NFA SYS/DM
-**
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_sys_disable (void)
-{
- CHO_TRACE_DEBUG0 ("nfa_cho_sys_disable ()");
-
- /* clean up if application is still registered */
- if (nfa_cho_cb.p_cback)
- {
- nfa_cho_proc_api_dereg ();
- }
-
- /* deregister message handler on NFA SYS */
- nfa_sys_deregister (NFA_ID_CHO);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_evt_hdlr
-**
-** Description Processing event for NFA Connection Handover
-**
-**
-** Returns TRUE if p_msg needs to be deallocated
-**
-*******************************************************************************/
-static BOOLEAN nfa_cho_evt_hdlr (BT_HDR *p_msg)
-{
- tNFA_CHO_INT_EVENT_DATA *p_data = (tNFA_CHO_INT_EVENT_DATA *) p_msg;
-
- nfa_cho_sm_execute (p_data->hdr.event, p_data);
-
- return TRUE;
-}
-
-
diff --git a/src/nfa/cho/nfa_cho_sm.c b/src/nfa/cho/nfa_cho_sm.c
deleted file mode 100644
index d0c8308..0000000
--- a/src/nfa/cho/nfa_cho_sm.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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 state implementation file for the NFA Connection Handover.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_api.h"
-#include "llcp_api.h"
-#include "llcp_defs.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-** Global Variables
-*****************************************************************************/
-
-/*****************************************************************************
-** Static Functions
-*****************************************************************************/
-static void nfa_cho_sm_disabled (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_sm_idle (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_sm_w4_cc (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_sm_connected (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_proc_rx_handover_msg (void);
-
-/* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char *nfa_cho_state_code (tNFA_CHO_STATE state_code);
-static char *nfa_cho_evt_code (tNFA_CHO_INT_EVT evt_code);
-#endif
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function nfa_cho_sm_llcp_cback
-**
-** Description Processing event from LLCP
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_sm_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data)
-{
- tNFA_CHO_RX_NDEF_STATUS rx_status;
-
- CHO_TRACE_DEBUG2 ("nfa_cho_sm_llcp_cback (): event:0x%02X, local_sap:0x%02X",
- p_data->hdr.event, p_data->hdr.local_sap);
-
- switch (p_data->hdr.event)
- {
- case LLCP_SAP_EVT_DATA_IND:
- /* check if we received complete Handover Message */
- rx_status = nfa_cho_reassemble_ho_msg (p_data->data_ind.local_sap,
- p_data->data_ind.remote_sap);
-
- if (rx_status == NFA_CHO_RX_NDEF_COMPLETE)
- {
- nfa_cho_sm_execute (NFA_CHO_RX_HANDOVER_MSG_EVT, NULL);
- }
- break;
-
- case LLCP_SAP_EVT_CONNECT_IND:
- nfa_cho_sm_execute (NFA_CHO_LLCP_CONNECT_IND_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
- break;
-
- case LLCP_SAP_EVT_CONNECT_RESP:
- nfa_cho_sm_execute (NFA_CHO_LLCP_CONNECT_RESP_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
- break;
-
- case LLCP_SAP_EVT_DISCONNECT_IND:
- nfa_cho_sm_execute (NFA_CHO_LLCP_DISCONNECT_IND_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
- break;
-
- case LLCP_SAP_EVT_DISCONNECT_RESP:
- nfa_cho_sm_execute (NFA_CHO_LLCP_DISCONNECT_RESP_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
- break;
-
- case LLCP_SAP_EVT_CONGEST:
- nfa_cho_sm_execute (NFA_CHO_LLCP_CONGEST_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
- break;
-
- case LLCP_SAP_EVT_LINK_STATUS:
- nfa_cho_sm_execute (NFA_CHO_LLCP_LINK_STATUS_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
- break;
-
- default:
- CHO_TRACE_ERROR1 ("Unknown event:0x%02X", p_data->hdr.event);
- return;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_sm_disabled
-**
-** Description Process event in disabled state
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_sm_disabled (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
- tNFA_CHO_EVT_DATA evt_data;
- UINT16 remote_link_miu;
-
- switch (event)
- {
- case NFA_CHO_API_REG_EVT:
-
- evt_data.status = nfa_cho_proc_api_reg (p_data);
-
- if (evt_data.status == NFA_STATUS_OK)
- {
- nfa_cho_cb.state = NFA_CHO_ST_IDLE;
- }
- p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
-
- if (evt_data.status == NFA_STATUS_OK)
- {
- /* check if LLCP is already activated */
- LLCP_GetLinkMIU (&nfa_cho_cb.local_link_miu, &remote_link_miu);
-
- if (nfa_cho_cb.local_link_miu > 0)
- {
- nfa_cho_cb.flags |= NFA_CHO_FLAGS_LLCP_ACTIVATED;
-
- /* Notify application LLCP link activated */
- evt_data.activated.is_initiator = FALSE;
- nfa_cho_cb.p_cback (NFA_CHO_ACTIVATED_EVT, &evt_data);
- }
- }
- break;
-
- default:
- CHO_TRACE_ERROR0 ("Unknown event");
- break;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_sm_idle
-**
-** Description Process event in idle state
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_sm_idle (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
- UINT16 remote_link_miu;
- tNFA_CHO_EVT_DATA evt_data;
- tLLCP_CONNECTION_PARAMS params;
-
- switch (event)
- {
- case NFA_CHO_API_REG_EVT:
- evt_data.status = NFA_STATUS_FAILED;
- p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
- break;
-
- case NFA_CHO_API_DEREG_EVT:
- nfa_cho_proc_api_dereg ();
- nfa_cho_cb.state = NFA_CHO_ST_DISABLED;
- break;
-
- case NFA_CHO_API_CONNECT_EVT:
- /* if LLCP activated then create data link connection */
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_LLCP_ACTIVATED)
- {
- if (nfa_cho_create_connection () == NFA_STATUS_OK)
- {
- /* waiting for connection confirm */
- nfa_cho_cb.state = NFA_CHO_ST_W4_CC;
- }
- else
- {
- evt_data.disconnected.reason = NFA_CHO_DISC_REASON_CONNECTION_FAIL;
- nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
- }
- }
- else
- {
- evt_data.disconnected.reason = NFA_CHO_DISC_REASON_LINK_DEACTIVATED;
- nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
- }
- break;
-
- case NFA_CHO_API_DISCONNECT_EVT:
- /* Nothing to disconnect */
- nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_API_REQUEST);
- break;
-
- case NFA_CHO_LLCP_CONNECT_IND_EVT:
-
- /* accept connection request */
- params.miu = (UINT16) (nfa_cho_cb.local_link_miu >= NFA_CHO_MIU ? NFA_CHO_MIU : nfa_cho_cb.local_link_miu);
- params.rw = NFA_CHO_RW;
- params.sn[0] = 0;
-
- LLCP_ConnectCfm (p_data->llcp_cback_data.connect_ind.local_sap,
- p_data->llcp_cback_data.connect_ind.remote_sap,
- ¶ms);
-
- nfa_cho_cb.remote_miu = p_data->llcp_cback_data.connect_ind.miu;
- nfa_cho_cb.remote_sap = p_data->llcp_cback_data.connect_ind.remote_sap;
- nfa_cho_cb.local_sap = p_data->llcp_cback_data.connect_ind.local_sap;
-
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
- nfa_cho_cb.state = NFA_CHO_ST_CONNECTED;
- nfa_cho_cb.congested = FALSE;
-
- evt_data.connected.initial_role = NFA_CHO_ROLE_SELECTOR;
- nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
- break;
-
- case NFA_CHO_LLCP_LINK_STATUS_EVT:
- /*
- ** LLCP sends NFA_CHO_LLCP_DISCONNECT_IND_EVT for all data link connection
- ** before sending NFA_CHO_LLCP_LINK_STATUS_EVT for deactivation.
- ** This event can be received only in this state.
- */
-
- if (p_data->llcp_cback_data.link_status.is_activated == TRUE)
- {
- nfa_cho_cb.flags |= NFA_CHO_FLAGS_LLCP_ACTIVATED;
-
- /* store local link MIU to decide MIU of data link connection later */
- LLCP_GetLinkMIU (&nfa_cho_cb.local_link_miu, &remote_link_miu);
-
- /* Notify application LLCP link activated */
- evt_data.activated.is_initiator = p_data->llcp_cback_data.link_status.is_initiator;
- nfa_cho_cb.p_cback (NFA_CHO_ACTIVATED_EVT, &evt_data);
- }
- else
- {
- /* the other flags had been cleared by NFA_CHO_LLCP_DISCONNECT_IND_EVT */
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_LLCP_ACTIVATED;
-
- /* Notify application LLCP link deactivated */
- evt_data.status = NFA_STATUS_OK;
- nfa_cho_cb.p_cback (NFA_CHO_DEACTIVATED_EVT, &evt_data);
- }
- break;
-
- case NFA_CHO_API_SEND_HR_EVT:
- GKI_freebuf (p_data->api_send_hr.p_ndef);
- break;
-
- case NFA_CHO_API_SEND_HS_EVT:
- GKI_freebuf (p_data->api_send_hs.p_ndef);
- break;
-
- case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
- nfa_cho_proc_ndef_type_handler_evt (p_data);
- break;
-
- default:
- CHO_TRACE_ERROR0 ("Unknown event");
- break;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_sm_w4_cc
-**
-** Description Process event in waiting for connection confirm state
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_sm_w4_cc (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
- tNFA_CHO_EVT_DATA evt_data;
- tLLCP_CONNECTION_PARAMS params;
-
- switch (event)
- {
- case NFA_CHO_API_REG_EVT:
- evt_data.status = NFA_STATUS_FAILED;
- p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
- break;
-
- case NFA_CHO_API_DEREG_EVT:
- nfa_cho_proc_api_dereg ();
- nfa_cho_cb.state = NFA_CHO_ST_DISABLED;
- break;
-
- case NFA_CHO_API_CONNECT_EVT:
- evt_data.disconnected.reason = NFA_CHO_DISC_REASON_ALEADY_CONNECTED;
- nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
- break;
-
- case NFA_CHO_API_DISCONNECT_EVT:
- /* disconnect collision connection accepted by local device */
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- {
- LLCP_DisconnectReq (nfa_cho_cb.collision_local_sap,
- nfa_cho_cb.collision_remote_sap,
- FALSE);
-
- /* clear collision flag */
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
- }
-
- nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-
- /* we cannot send DISC because we don't know remote SAP */
- nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_API_REQUEST);
- break;
-
- case NFA_CHO_LLCP_CONNECT_RESP_EVT:
- /* peer accepted connection request */
- nfa_cho_cb.state = NFA_CHO_ST_CONNECTED;
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HR;
- nfa_cho_cb.congested = FALSE;
-
- /* store data link connection parameters */
- nfa_cho_cb.remote_miu = p_data->llcp_cback_data.connect_resp.miu;
- nfa_cho_cb.remote_sap = p_data->llcp_cback_data.connect_resp.remote_sap;
- nfa_cho_cb.local_sap = nfa_cho_cb.client_sap;
-
- evt_data.connected.initial_role = NFA_CHO_ROLE_REQUESTER;
- nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
- break;
-
- case NFA_CHO_LLCP_CONNECT_IND_EVT:
- /* if already collision of connection */
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- {
- LLCP_ConnectReject (p_data->llcp_cback_data.connect_ind.local_sap,
- p_data->llcp_cback_data.connect_ind.remote_sap,
- LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
- }
- else
- {
- /*
- ** accept connection request and set collision flag
- ** wait for accepting connection request from peer or Hr message
- */
- params.miu = (UINT16) (nfa_cho_cb.local_link_miu >= NFA_CHO_MIU ? NFA_CHO_MIU : nfa_cho_cb.local_link_miu);
- params.rw = NFA_CHO_RW;
- params.sn[0] = 0;
-
- LLCP_ConnectCfm (p_data->llcp_cback_data.connect_ind.local_sap,
- p_data->llcp_cback_data.connect_ind.remote_sap,
- ¶ms);
-
- nfa_cho_cb.flags |= NFA_CHO_FLAGS_CONN_COLLISION;
-
- nfa_cho_cb.collision_remote_miu = p_data->llcp_cback_data.connect_ind.miu;
- nfa_cho_cb.collision_remote_sap = p_data->llcp_cback_data.connect_ind.remote_sap;
- nfa_cho_cb.collision_local_sap = p_data->llcp_cback_data.connect_ind.local_sap;
- nfa_cho_cb.collision_congested = FALSE;
- }
- break;
-
- case NFA_CHO_RX_HANDOVER_MSG_EVT:
- /* peer device sent handover message before accepting connection */
- /* clear collision flag */
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-
- nfa_cho_cb.remote_miu = nfa_cho_cb.collision_remote_miu;
- nfa_cho_cb.remote_sap = nfa_cho_cb.collision_remote_sap;
- nfa_cho_cb.local_sap = nfa_cho_cb.collision_local_sap;
- nfa_cho_cb.congested = nfa_cho_cb.collision_congested;
-
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
- nfa_cho_cb.state = NFA_CHO_ST_CONNECTED;
-
- evt_data.connected.initial_role = NFA_CHO_ROLE_SELECTOR;
- nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
-
- /* process handover message in nfa_cho_cb.p_rx_ndef_msg */
- nfa_cho_proc_rx_handover_msg ();
- break;
-
- case NFA_CHO_LLCP_DISCONNECT_RESP_EVT:
- /*
- ** if peer rejected our connection request or there is no handover service in peer
- ** but we already accepted connection from peer
- */
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- {
- /* clear collision flag */
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-
- nfa_cho_cb.remote_miu = nfa_cho_cb.collision_remote_miu;
- nfa_cho_cb.remote_sap = nfa_cho_cb.collision_remote_sap;
- nfa_cho_cb.local_sap = nfa_cho_cb.collision_local_sap;
- nfa_cho_cb.congested = nfa_cho_cb.collision_congested;
-
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
- nfa_cho_cb.state = NFA_CHO_ST_CONNECTED;
-
- evt_data.connected.initial_role = NFA_CHO_ROLE_SELECTOR;
- nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
- }
- else
- {
- nfa_cho_cb.state = NFA_CHO_ST_IDLE;
- nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_CONNECTION_FAIL);
- }
- break;
-
- case NFA_CHO_LLCP_DISCONNECT_IND_EVT:
- /* if peer disconnects collision connection */
- if ( (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- &&(p_data->llcp_cback_data.disconnect_ind.local_sap == nfa_cho_cb.collision_local_sap)
- &&(p_data->llcp_cback_data.disconnect_ind.remote_sap == nfa_cho_cb.collision_remote_sap) )
- {
- /* clear collision flag */
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
- }
- else /* Link failure before peer accepts or rejects connection request */
- {
- nfa_cho_cb.state = NFA_CHO_ST_IDLE;
- nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_CONNECTION_FAIL);
- }
- break;
-
- case NFA_CHO_LLCP_CONGEST_EVT:
- /* if collision connection is congested */
- if ( (p_data->llcp_cback_data.congest.link_type == LLCP_LINK_TYPE_DATA_LINK_CONNECTION)
- &&(nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION))
- {
- nfa_cho_cb.collision_congested = p_data->llcp_cback_data.congest.is_congested;
- }
- break;
-
- case NFA_CHO_API_SEND_HR_EVT:
- GKI_freebuf (p_data->api_send_hr.p_ndef);
- break;
-
- case NFA_CHO_API_SEND_HS_EVT:
- GKI_freebuf (p_data->api_send_hs.p_ndef);
- break;
-
- case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
- nfa_cho_proc_ndef_type_handler_evt (p_data);
- break;
-
- default:
- CHO_TRACE_ERROR0 ("Unknown event");
- break;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_sm_connected
-**
-** Description Process event in connected state
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_sm_connected (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
- tNFA_CHO_EVT_DATA evt_data;
- tNFA_STATUS status;
-
- switch (event)
- {
- case NFA_CHO_API_REG_EVT:
- evt_data.status = NFA_STATUS_FAILED;
- p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
- break;
-
- case NFA_CHO_API_DEREG_EVT:
- nfa_cho_proc_api_dereg ();
- nfa_cho_cb.state = NFA_CHO_ST_DISABLED;
- break;
-
- case NFA_CHO_API_CONNECT_EVT:
- /* it could be race condition, let app know outgoing connection failed */
- evt_data.disconnected.reason = NFA_CHO_DISC_REASON_ALEADY_CONNECTED;
- nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
- break;
-
- case NFA_CHO_API_DISCONNECT_EVT:
- /* disconnect collision connection accepted by local device */
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- {
- LLCP_DisconnectReq (nfa_cho_cb.collision_local_sap,
- nfa_cho_cb.collision_remote_sap,
- FALSE);
-
- /* clear collision flag */
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
- }
-
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
-
- /* store disconnect reason */
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_API_REQUEST;
- break;
-
- case NFA_CHO_API_SEND_HR_EVT:
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_LOCAL_HR)
- {
- /* Send Handover Request Message */
- status = nfa_cho_send_hr (&p_data->api_send_hr);
-
- if (status == NFA_STATUS_OK)
- {
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HS;
- /* start timer for Handover Select Message */
- nfa_sys_start_timer (&nfa_cho_cb.timer, 0, NFA_CHO_TIMEOUT_FOR_HS);
- }
- else
- {
- CHO_TRACE_ERROR0 ("NFA CHO failed to send Hr");
- nfa_cho_notify_tx_fail_evt (status);
- }
- }
- else
- {
- CHO_TRACE_ERROR0 ("NFA CHO got unexpected NFA_CHO_API_SEND_HR_EVT");
- nfa_cho_notify_tx_fail_evt (NFA_STATUS_SEMANTIC_ERROR);
- }
- GKI_freebuf (p_data->api_send_hr.p_ndef);
- break;
-
- case NFA_CHO_API_SEND_HS_EVT:
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_LOCAL_HS)
- {
- /* send Handover Select Message */
- status = nfa_cho_send_hs (&p_data->api_send_hs);
- if (status == NFA_STATUS_OK)
- {
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
- }
- else
- {
- CHO_TRACE_ERROR0 ("NFA CHO failed to send Hs");
- nfa_cho_notify_tx_fail_evt (status);
- }
- }
- else
- {
- CHO_TRACE_ERROR0 ("NFA CHO got unexpected NFA_CHO_API_SEND_HS_EVT");
- nfa_cho_notify_tx_fail_evt (NFA_STATUS_SEMANTIC_ERROR);
- }
- GKI_freebuf (p_data->api_send_hs.p_ndef);
- break;
-
- case NFA_CHO_API_SEL_ERR_EVT:
- /* application detected error */
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_LOCAL_HS)
- {
- /* Send Handover Select Error record */
- status = nfa_cho_send_hs_error (p_data->api_sel_err.error_reason,
- p_data->api_sel_err.error_data);
- if (status == NFA_STATUS_OK)
- {
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
- }
- else
- {
- CHO_TRACE_ERROR0 ("Failed to send Hs Error record");
- nfa_cho_notify_tx_fail_evt (status);
- }
- }
- else
- {
- CHO_TRACE_ERROR0 ("NFA CHO got unexpected NFA_CHO_API_SEL_ERR_EVT");
- nfa_cho_notify_tx_fail_evt (NFA_STATUS_SEMANTIC_ERROR);
- }
- break;
-
- case NFA_CHO_LLCP_CONNECT_RESP_EVT:
- /* peer accepted connection after we accepted and received Hr */
- /* disconnect data link connection created by local device */
- LLCP_DisconnectReq (p_data->llcp_cback_data.connect_resp.local_sap,
- p_data->llcp_cback_data.connect_resp.remote_sap,
- FALSE);
- break;
-
- case NFA_CHO_LLCP_CONNECT_IND_EVT:
- LLCP_ConnectReject (p_data->llcp_cback_data.connect_ind.local_sap,
- p_data->llcp_cback_data.connect_ind.remote_sap,
- LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
- break;
-
- case NFA_CHO_RX_HANDOVER_MSG_EVT:
- /* process handover message in nfa_cho_cb.p_rx_ndef_msg */
- nfa_cho_proc_rx_handover_msg ();
- break;
-
- case NFA_CHO_LLCP_DISCONNECT_IND_EVT:
- if ( (p_data->llcp_cback_data.disconnect_ind.local_sap == nfa_cho_cb.local_sap)
- &&(p_data->llcp_cback_data.disconnect_ind.remote_sap == nfa_cho_cb.remote_sap) )
- {
- nfa_cho_cb.state = NFA_CHO_ST_IDLE;
- nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_PEER_REQUEST);
- }
- else /* if disconnection of collision conneciton */
- {
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
- }
- break;
-
- case NFA_CHO_LLCP_DISCONNECT_RESP_EVT:
- if ( (p_data->llcp_cback_data.disconnect_ind.local_sap == nfa_cho_cb.local_sap)
- &&(p_data->llcp_cback_data.disconnect_ind.remote_sap == nfa_cho_cb.remote_sap) )
- {
- nfa_cho_cb.state = NFA_CHO_ST_IDLE;
- nfa_cho_process_disconnection (nfa_cho_cb.disc_reason);
- }
- else /* if disconnection of collision conneciton */
- {
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
- }
- break;
-
- case NFA_CHO_LLCP_CONGEST_EVT:
- /* if data link connection is congested */
- if ( (p_data->llcp_cback_data.congest.link_type == LLCP_LINK_TYPE_DATA_LINK_CONNECTION)
- &&(p_data->llcp_cback_data.congest.local_sap == nfa_cho_cb.local_sap)
- &&(p_data->llcp_cback_data.congest.remote_sap == nfa_cho_cb.remote_sap) )
- {
- nfa_cho_cb.congested = p_data->llcp_cback_data.congest.is_congested;
-
- if (!nfa_cho_cb.congested)
- {
- /* send remaining message if any */
- if ( (nfa_cho_cb.p_tx_ndef_msg)
- &&(nfa_cho_cb.tx_ndef_sent_size < nfa_cho_cb.tx_ndef_cur_size) )
- {
- nfa_cho_send_handover_msg ();
- }
- }
- }
- break;
-
- case NFA_CHO_TIMEOUT_EVT:
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HS)
- {
- CHO_TRACE_ERROR0 ("Failed to receive Hs message");
- }
- else if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
- {
- /* we didn't get complete Hr, don't need to notify application */
- CHO_TRACE_ERROR0 ("Failed to receive Hr message");
- }
-
- /* store disconnect reason and disconnect */
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_TIMEOUT;
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
- break;
-
- case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
- nfa_cho_proc_ndef_type_handler_evt (p_data);
- break;
-
- default:
- CHO_TRACE_ERROR0 ("Unknown event");
- break;
- }
-}
-/*******************************************************************************
-**
-** Function nfa_cho_sm_execute
-**
-** Description Process event in state machine
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_sm_execute (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
-#if (BT_TRACE_VERBOSE == TRUE)
- CHO_TRACE_DEBUG2 ("nfa_cho_sm_execute (): State[%s], Event[%s]",
- nfa_cho_state_code (nfa_cho_cb.state),
- nfa_cho_evt_code (event));
-#else
- CHO_TRACE_DEBUG2 ("nfa_cho_sm_execute (): State[%d], Event[%d]",
- nfa_cho_cb.state, event);
-#endif
-
-
- switch (nfa_cho_cb.state)
- {
- case NFA_CHO_ST_DISABLED:
- nfa_cho_sm_disabled (event, p_data);
- break;
-
- case NFA_CHO_ST_IDLE:
- nfa_cho_sm_idle (event, p_data);
- break;
-
- case NFA_CHO_ST_W4_CC:
- nfa_cho_sm_w4_cc (event, p_data);
- break;
-
- case NFA_CHO_ST_CONNECTED:
- nfa_cho_sm_connected (event, p_data);
- break;
-
- default:
- CHO_TRACE_ERROR0 ("Unknown state");
- break;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_resolve_collision
-**
-** Description Resolve collision by random number in Hr
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_resolve_collision (BOOLEAN *p_free_hr)
-{
- tNFA_CHO_ROLE_TYPE role;
- tNFA_STATUS status;
-
- /* resolve collistion by random number */
- role = nfa_cho_get_local_device_role (nfa_cho_cb.rx_ndef_cur_size,
- nfa_cho_cb.p_rx_ndef_msg);
-
- /* if local device becomes selector */
- if (role == NFA_CHO_ROLE_SELECTOR)
- {
- /* peer device is winner so clean up any collision */
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- {
- /* disconnect data link connection created by local device */
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
-
- nfa_cho_cb.remote_miu = nfa_cho_cb.collision_remote_miu;
- nfa_cho_cb.remote_sap = nfa_cho_cb.collision_remote_sap;
- nfa_cho_cb.local_sap = nfa_cho_cb.collision_local_sap;
- nfa_cho_cb.congested = nfa_cho_cb.collision_congested;
- }
-
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HS;
-
- nfa_cho_proc_hr (nfa_cho_cb.rx_ndef_cur_size,
- nfa_cho_cb.p_rx_ndef_msg);
-
- *p_free_hr = TRUE;
- }
- /* if both random numbers are equal */
- else if (role == NFA_CHO_ROLE_UNDECIDED)
- {
- /* send Hr with new random number */
- if (nfa_cho_cb.p_tx_ndef_msg)
- {
- status = nfa_cho_update_random_number (nfa_cho_cb.p_tx_ndef_msg);
-
- if (status == NFA_STATUS_OK)
- {
- nfa_cho_cb.tx_ndef_sent_size = 0;
- status = nfa_cho_send_handover_msg ();
- }
- }
- else
- {
- status = NFA_STATUS_FAILED;
- }
-
- if (status == NFA_STATUS_FAILED)
- {
- CHO_TRACE_ERROR0 ("Failed to send Hr record with new random number");
-
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INTERNAL_ERROR;
-
- /* disconnect and notify application */
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
- }
- else
- {
- /* restart timer */
- nfa_sys_start_timer (&nfa_cho_cb.timer, 0, NFA_CHO_TIMEOUT_FOR_HS);
-
- /* Don't free previous tx NDEF message because we are reusing it */
- *p_free_hr = FALSE;
- }
- }
- else /* if (role == NFA_CHO_ROLE_REQUESTER) */
- {
- /* wait for "Hs" record */
- *p_free_hr = TRUE;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_check_disconnect_collision
-**
-** Description Disconnect any collision connection
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_check_disconnect_collision (void)
-{
- if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
- {
- /* disconnect collision connection */
- LLCP_DisconnectReq (nfa_cho_cb.collision_local_sap,
- nfa_cho_cb.collision_remote_sap,
- FALSE);
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_rx_handover_msg
-**
-** Description Process received Handover Message
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_proc_rx_handover_msg (void)
-{
- tNFA_CHO_MSG_TYPE msg_type;
- BOOLEAN free_tx_ndef_msg = TRUE;
-
- /* get message type before processing to check collision */
- msg_type = nfa_cho_get_msg_type (nfa_cho_cb.rx_ndef_cur_size,
- nfa_cho_cb.p_rx_ndef_msg);
-
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HS)
- {
- /* if we sent "Hr" but received "Hr", collision */
- if (msg_type == NFA_CHO_MSG_HR)
- {
- nfa_cho_resolve_collision (&free_tx_ndef_msg);
- }
- else if (msg_type == NFA_CHO_MSG_HS)
- {
- /* parse and report application */
- nfa_cho_proc_hs (nfa_cho_cb.rx_ndef_cur_size,
- nfa_cho_cb.p_rx_ndef_msg);
-
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HR;
- }
- else
- {
- CHO_TRACE_ERROR0 ("nfa_cho_proc_rx_handover_msg (): Unknown Message Type");
-
- nfa_cho_check_disconnect_collision ();
-
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_UNKNOWN_MSG;
-
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
- }
- }
- else if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
- {
- if (msg_type == NFA_CHO_MSG_HR)
- {
- /* parse and notify NFA_CHO_REQ_EVT to application */
- nfa_cho_proc_hr (nfa_cho_cb.rx_ndef_cur_size,
- nfa_cho_cb.p_rx_ndef_msg);
-
- /* In case of parsing error, let peer got timeout (1 sec) */
-
- /* wait for application selection */
- nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HS;
- }
- else
- {
- CHO_TRACE_ERROR0 ("nfa_cho_proc_rx_handover_msg (): Expecting Handover Request");
-
- nfa_cho_check_disconnect_collision ();
-
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_SEMANTIC_ERROR;
-
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
- }
- }
- else
- {
- CHO_TRACE_ERROR1 ("nfa_cho_proc_rx_handover_msg (): Unexpected data in substate (0x%x)", nfa_cho_cb.substate);
-
- nfa_cho_check_disconnect_collision ();
-
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_SEMANTIC_ERROR;
-
- LLCP_DisconnectReq (nfa_cho_cb.local_sap,
- nfa_cho_cb.remote_sap,
- FALSE);
- }
-
- if ((free_tx_ndef_msg) && (nfa_cho_cb.p_tx_ndef_msg))
- {
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- }
-
- /* processing rx message is done, free buffer for rx handover message */
- if (nfa_cho_cb.p_rx_ndef_msg)
- {
- GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
- nfa_cho_cb.p_rx_ndef_msg = NULL;
- }
-}
-
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function nfa_cho_state_code
-**
-** Description
-**
-** Returns string of state
-**
-*******************************************************************************/
-static char *nfa_cho_state_code (tNFA_CHO_STATE state_code)
-{
- switch (state_code)
- {
- case NFA_CHO_ST_DISABLED:
- return "DISABLED";
- case NFA_CHO_ST_IDLE:
- return "IDLE";
- case NFA_CHO_ST_CONNECTED:
- return "CONNECTED";
- default:
- return "unknown state";
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_evt_code
-**
-** Description
-**
-** Returns string of event
-**
-*******************************************************************************/
-char *nfa_cho_evt_code (tNFA_CHO_INT_EVT evt_code)
-{
- switch (evt_code)
- {
- case NFA_CHO_API_REG_EVT:
- return "API_REG";
- case NFA_CHO_API_DEREG_EVT:
- return "API_DEREG";
- case NFA_CHO_API_CONNECT_EVT:
- return "API_CONNECT";
- case NFA_CHO_API_DISCONNECT_EVT:
- return "API_DISCONNECT";
- case NFA_CHO_API_SEND_HR_EVT:
- return "API_SEND_HR";
- case NFA_CHO_API_SEND_HS_EVT:
- return "API_SEND_HS";
- case NFA_CHO_API_SEL_ERR_EVT:
- return "API_SEL_ERR";
-
- case NFA_CHO_RX_HANDOVER_MSG_EVT:
- return "RX_HANDOVER_MSG";
-
- case NFA_CHO_LLCP_CONNECT_IND_EVT:
- return "LLCP_CONNECT_IND";
- case NFA_CHO_LLCP_CONNECT_RESP_EVT:
- return "LLCP_CONNECT_RESP";
- case NFA_CHO_LLCP_DISCONNECT_IND_EVT:
- return "LLCP_DISCONNECT_IND";
- case NFA_CHO_LLCP_DISCONNECT_RESP_EVT:
- return "LLCP_DISCONNECT_RESP";
- case NFA_CHO_LLCP_CONGEST_EVT:
- return "LLCP_CONGEST";
- case NFA_CHO_LLCP_LINK_STATUS_EVT:
- return "LLCP_LINK_STATUS";
-
- case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
- return "NDEF_TYPE_HANDLER";
- case NFA_CHO_TIMEOUT_EVT:
- return "TIMEOUT";
-
- default:
- return "unknown event";
- }
-}
-#endif /* Debug Functions */
diff --git a/src/nfa/cho/nfa_cho_util.c b/src/nfa/cho/nfa_cho_util.c
deleted file mode 100644
index 90eb947..0000000
--- a/src/nfa/cho/nfa_cho_util.c
+++ /dev/null
@@ -1,2005 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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 utilities implementation file for the NFA Connection
- * Handover.
- *
- ******************************************************************************/
-
-#include "string.h"
-#include "nfa_sys.h"
-#include "llcp_api.h"
-#include "llcp_defs.h"
-#include "nfa_p2p_int.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "trace_api.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-/* Handover server name on LLCP */
-static char *p_cho_service_name = "urn:nfc:sn:handover";
-
-/* Handover Request Record Type */
-static UINT8 hr_rec_type[HR_REC_TYPE_LEN] = { 0x48, 0x72 }; /* "Hr" */
-
-/* Handover Select Record Type */
-static UINT8 hs_rec_type[HS_REC_TYPE_LEN] = { 0x48, 0x73 }; /* "Hs" */
-
-/* Handover Carrier recrod Type */
-/* static UINT8 hc_rec_type[HC_REC_TYPE_LEN] = { 0x48, 0x63 }; "Hc" */
-
-/* Collision Resolution Record Type */
-static UINT8 cr_rec_type[CR_REC_TYPE_LEN] = { 0x63, 0x72 }; /* "cr" */
-
-/* Alternative Carrier Record Type */
-static UINT8 ac_rec_type[AC_REC_TYPE_LEN] = { 0x61, 0x63 }; /* "ac" */
-
-/* Error Record Type */
-static UINT8 err_rec_type[ERR_REC_TYPE_LEN] = { 0x65, 0x72, 0x72 }; /* "err" */
-
-/* Bluetooth OOB Data Type */
-static UINT8 *p_bt_oob_rec_type = (UINT8 *) "application/vnd.bluetooth.ep.oob";
-
-/* WiFi Data Type */
-static UINT8 *p_wifi_rec_type = (UINT8 *) "application/vnd.wfa.wsc";
-
-/*****************************************************************************
-** Global Variables
-*****************************************************************************/
-
-/*****************************************************************************
-** Static Functions
-*****************************************************************************/
-static void nfa_cho_ndef_cback (tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA *p_data);
-
-/*******************************************************************************
-**
-** Function nfa_cho_ndef_cback
-**
-** Description callback function from NDEF handler
-** Post NDEF handler callback event to NFA Connection Handover module
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_cho_ndef_cback (tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA *p_data)
-{
- tNFA_CHO_NDEF_TYPE_HDLR_EVT *p_msg;
- tNFA_CHO_MSG_TYPE msg_type;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_ndef_cback () event=%d", event);
-
- if ((p_msg = (tNFA_CHO_NDEF_TYPE_HDLR_EVT *) GKI_getbuf (sizeof (tNFA_CHO_NDEF_TYPE_HDLR_EVT))) != NULL)
- {
- p_msg->hdr.event = NFA_CHO_NDEF_TYPE_HANDLER_EVT;
-
- /* copy NDEF handler callback event and data */
- p_msg->event = event;
- memcpy (&(p_msg->data), p_data, sizeof (tNFA_NDEF_EVT_DATA));
-
- /* if it has NDEF message */
- if (event == NFA_NDEF_DATA_EVT)
- {
- if (p_data->ndef_data.ndef_type_handle == nfa_cho_cb.bt_ndef_type_handle )
- {
- msg_type = nfa_cho_get_msg_type (p_data->ndef_data.len,
- p_data->ndef_data.p_data);
- if (msg_type != NFA_CHO_MSG_BT_OOB)
- {
- /* This is not simplified BT OOB Message. It contains BT OOB Message. */
- GKI_freebuf (p_msg);
- return;
- }
- }
- else if (p_data->ndef_data.ndef_type_handle == nfa_cho_cb.wifi_ndef_type_handle )
- {
- msg_type = nfa_cho_get_msg_type (p_data->ndef_data.len,
- p_data->ndef_data.p_data);
- if (msg_type != NFA_CHO_MSG_WIFI)
- {
- /* This is not simplified WiFi Message. It contains WiFi Message. */
- GKI_freebuf (p_msg);
- return;
- }
- }
-
- /*
- ** NDEF message could be bigger than max GKI buffer
- ** so allocate memory from platform.
- */
- p_msg->data.ndef_data.p_data = (UINT8 *) nfa_mem_co_alloc (p_msg->data.ndef_data.len);
-
- if (p_msg->data.ndef_data.p_data)
- {
- memcpy (p_msg->data.ndef_data.p_data,
- p_data->ndef_data.p_data,
- p_msg->data.ndef_data.len);
- }
- else
- {
- CHO_TRACE_ERROR1 ("Failed nfa_mem_co_alloc () for %d bytes", p_msg->data.ndef_data.len);
- GKI_freebuf (p_msg);
- return;
- }
- }
-
- nfa_sys_sendmsg (p_msg);
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_ndef_type_handler_evt
-**
-** Description Process events (registration and NDEF data) from NFA NDEF
-** Type Handler
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-void nfa_cho_proc_ndef_type_handler_evt (tNFA_CHO_INT_EVENT_DATA *p_evt_data)
-{
- tNFA_CHO_MSG_TYPE msg_type;
-
- if (p_evt_data->ndef_type_hdlr.event == NFA_NDEF_REGISTER_EVT)
- {
- if (p_evt_data->ndef_type_hdlr.data.ndef_reg.status == NFA_STATUS_OK)
- {
- /* store handle for deregistration */
- if (nfa_cho_cb.hs_ndef_type_handle == NFA_HANDLE_INVALID)
- {
- nfa_cho_cb.hs_ndef_type_handle = p_evt_data->ndef_type_hdlr.data.ndef_reg.ndef_type_handle;
- }
- else if (nfa_cho_cb.bt_ndef_type_handle == NFA_HANDLE_INVALID)
- {
- nfa_cho_cb.bt_ndef_type_handle = p_evt_data->ndef_type_hdlr.data.ndef_reg.ndef_type_handle;
- }
- else if (nfa_cho_cb.wifi_ndef_type_handle == NFA_HANDLE_INVALID)
- {
- nfa_cho_cb.wifi_ndef_type_handle = p_evt_data->ndef_type_hdlr.data.ndef_reg.ndef_type_handle;
- }
- }
- }
- else if (p_evt_data->ndef_type_hdlr.event == NFA_NDEF_DATA_EVT)
- {
- /* if negotiated handover is on going, then ignore static handover */
- if (nfa_cho_cb.state != NFA_CHO_ST_CONNECTED)
- {
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispNDEFMsg (p_evt_data->ndef_type_hdlr.data.ndef_data.p_data,
- p_evt_data->ndef_type_hdlr.data.ndef_data.len, TRUE);
-#endif
- msg_type = nfa_cho_get_msg_type (p_evt_data->ndef_type_hdlr.data.ndef_data.len,
- p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
-
- if (msg_type == NFA_CHO_MSG_HS)
- {
- nfa_cho_proc_hs (p_evt_data->ndef_type_hdlr.data.ndef_data.len,
- p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
- }
- else if ( (msg_type == NFA_CHO_MSG_BT_OOB)
- ||(msg_type == NFA_CHO_MSG_WIFI) )
- {
- /* simplified BT OOB/Wifi Message */
- nfa_cho_proc_simplified_format (p_evt_data->ndef_type_hdlr.data.ndef_data.len,
- p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
- }
- else
- {
- CHO_TRACE_ERROR0 ("Unexpected CHO Message Type");
- }
- }
-
- nfa_mem_co_free (p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_api_reg
-**
-** Description Process registeration request from application
-** Register Handover server on LLCP for negotiated handover
-** Register handover select records on NDEF handler for static handover
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_proc_api_reg (tNFA_CHO_INT_EVENT_DATA *p_evt_data)
-{
- CHO_TRACE_DEBUG1 ("nfa_cho_proc_api_reg (): enable_server=%d",
- p_evt_data->api_reg.enable_server);
-
- if (p_evt_data->api_reg.enable_server == TRUE)
- {
- /* Register Handover server on LLCP for negotiated handover */
- nfa_cho_cb.server_sap = LLCP_RegisterServer (LLCP_INVALID_SAP,
- LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
- p_cho_service_name,
- nfa_cho_sm_llcp_cback);
- if (nfa_cho_cb.server_sap == LLCP_INVALID_SAP)
- {
- CHO_TRACE_ERROR0 ("Cannot register CHO server");
- return NFA_STATUS_FAILED;
- }
- else
- {
- nfa_p2p_enable_listening (NFA_ID_CHO, FALSE);
- }
- }
- else
- {
- /*
- ** Register Handover client on LLCP for negotiated handover
- ** LLCP will notify link status through callback
- */
- nfa_cho_cb.client_sap = LLCP_RegisterClient (LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
- nfa_cho_sm_llcp_cback);
-
- if (nfa_cho_cb.client_sap == LLCP_INVALID_SAP)
- {
- CHO_TRACE_ERROR0 ("Cannot register CHO client");
- return NFA_STATUS_FAILED;
- }
-
- /* set flag not to deregister client when disconnected */
- nfa_cho_cb.flags |= NFA_CHO_FLAGS_CLIENT_ONLY;
- }
-
- /* Register handover select record on NDEF handler for static handover */
- if (nfa_cho_cb.hs_ndef_type_handle == NFA_HANDLE_INVALID)
- {
- NFA_RegisterNDefTypeHandler (TRUE, NFA_TNF_WKT, hs_rec_type, HS_REC_TYPE_LEN,
- nfa_cho_ndef_cback);
- }
- if (nfa_cho_cb.bt_ndef_type_handle == NFA_HANDLE_INVALID)
- {
- NFA_RegisterNDefTypeHandler (TRUE, NFA_TNF_RFC2046_MEDIA,
- p_bt_oob_rec_type, (UINT8) strlen ((char *) p_bt_oob_rec_type),
- nfa_cho_ndef_cback);
- }
- if (nfa_cho_cb.wifi_ndef_type_handle == NFA_HANDLE_INVALID)
- {
- NFA_RegisterNDefTypeHandler (TRUE, NFA_TNF_RFC2046_MEDIA,
- p_wifi_rec_type, (UINT8) strlen ((char *) p_wifi_rec_type),
- nfa_cho_ndef_cback);
- }
-
- nfa_cho_cb.p_cback = p_evt_data->api_reg.p_cback;
-
- return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_api_dereg
-**
-** Description Process deregisteration request from application
-** Disconnect LLCP connection if any
-** Deregister callback from NDEF handler and NFA P2P
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_proc_api_dereg (void)
-{
- CHO_TRACE_DEBUG0 ("nfa_cho_proc_api_dereg ()");
-
- /* Deregister outgoing connection, data link will be disconnected if any */
- if (nfa_cho_cb.client_sap != LLCP_INVALID_SAP)
- {
- LLCP_Deregister (nfa_cho_cb.client_sap);
- nfa_cho_cb.client_sap = LLCP_INVALID_SAP;
- }
-
- /* Close Connection Handover server in LLCP, data link will be disconnected if any */
- if (nfa_cho_cb.server_sap != LLCP_INVALID_SAP)
- {
- LLCP_Deregister (nfa_cho_cb.server_sap);
- nfa_cho_cb.server_sap = LLCP_INVALID_SAP;
- }
-
- /* Deregister type handler if any */
- if (nfa_cho_cb.hs_ndef_type_handle != NFA_HANDLE_INVALID)
- {
- NFA_DeregisterNDefTypeHandler (nfa_cho_cb.hs_ndef_type_handle);
- nfa_cho_cb.hs_ndef_type_handle = NFA_HANDLE_INVALID;
- }
-
- if (nfa_cho_cb.bt_ndef_type_handle != NFA_HANDLE_INVALID)
- {
- NFA_DeregisterNDefTypeHandler (nfa_cho_cb.bt_ndef_type_handle);
- nfa_cho_cb.bt_ndef_type_handle = NFA_HANDLE_INVALID;
- }
-
- if (nfa_cho_cb.wifi_ndef_type_handle != NFA_HANDLE_INVALID)
- {
- NFA_DeregisterNDefTypeHandler (nfa_cho_cb.wifi_ndef_type_handle);
- nfa_cho_cb.wifi_ndef_type_handle = NFA_HANDLE_INVALID;
- }
-
- nfa_sys_stop_timer (&nfa_cho_cb.timer);
- nfa_cho_cb.p_cback = NULL;
- nfa_cho_cb.flags = 0;
-
- nfa_p2p_disable_listening (NFA_ID_CHO, FALSE);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_create_connection
-**
-** Description Create data link connection with handover server in remote
-**
-**
-** Returns None
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_create_connection (void)
-{
- tLLCP_CONNECTION_PARAMS conn_params;
- tNFA_STATUS status = NFA_STATUS_FAILED;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_create_connection ()");
-
- if (nfa_cho_cb.client_sap == LLCP_INVALID_SAP)
- {
- nfa_cho_cb.client_sap = LLCP_RegisterClient (LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
- nfa_cho_sm_llcp_cback);
- }
-
- if (nfa_cho_cb.client_sap == LLCP_INVALID_SAP)
- {
- CHO_TRACE_ERROR0 ("Cannot register CHO client");
- }
- else
- {
- /* create data link connection with server name */
- conn_params.miu = (UINT16) (nfa_cho_cb.local_link_miu >= NFA_CHO_MIU ? NFA_CHO_MIU : nfa_cho_cb.local_link_miu);
- conn_params.rw = NFA_CHO_RW;
- BCM_STRNCPY_S (conn_params.sn, sizeof (conn_params.sn),
- p_cho_service_name, LLCP_MAX_SN_LEN);
- conn_params.sn[LLCP_MAX_SN_LEN] = 0;
-
- if (LLCP_ConnectReq (nfa_cho_cb.client_sap, LLCP_SAP_SDP, &conn_params) == LLCP_STATUS_SUCCESS)
- status = NFA_STATUS_OK;
- }
-
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_process_disconnection
-**
-** Description Clean up buffers and notify disconnection to application
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_process_disconnection (tNFA_CHO_DISC_REASON disc_reason)
-{
- tNFA_CHO_EVT_DATA evt_data;
-
- nfa_sys_stop_timer (&nfa_cho_cb.timer);
-
- /* free buffer for Tx/Rx NDEF message */
- if (nfa_cho_cb.p_tx_ndef_msg)
- {
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- }
- if (nfa_cho_cb.p_rx_ndef_msg)
- {
- GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
- nfa_cho_cb.p_rx_ndef_msg = NULL;
- }
-
- /* if no server is registered on LLCP, do not deregister client to get link statue from LLCP */
- if (!(nfa_cho_cb.flags & NFA_CHO_FLAGS_CLIENT_ONLY))
- {
- if (nfa_cho_cb.client_sap != LLCP_INVALID_SAP)
- {
- LLCP_Deregister (nfa_cho_cb.client_sap);
- nfa_cho_cb.client_sap = LLCP_INVALID_SAP;
- }
- }
-
- nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-
- evt_data.disconnected.reason = disc_reason;
- nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_notify_tx_fail_evt
-**
-** Description Notify application of NFA_CHO_TX_FAIL_EVT
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_notify_tx_fail_evt (tNFA_STATUS status)
-{
- tNFA_CHO_EVT_DATA evt_data;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_notify_tx_fail_evt ()");
-
- evt_data.status = status;
-
- if (nfa_cho_cb.p_cback)
- nfa_cho_cb.p_cback (NFA_CHO_TX_FAIL_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_reassemble_ho_msg
-**
-** Description Reassemble received data for handover message
-**
-**
-** Returns tNFA_CHO_RX_NDEF_STATUS
-**
-*******************************************************************************/
-tNFA_CHO_RX_NDEF_STATUS nfa_cho_reassemble_ho_msg (UINT8 local_sap, UINT8 remote_sap)
-{
- tNFA_CHO_RX_NDEF_STATUS rx_status;
-
- nfa_sys_stop_timer (&nfa_cho_cb.timer);
-
- /*
- ** allocate memory for NDEF message for the first segment
- ** validate NDEF message to check if received complete message
- */
- rx_status = nfa_cho_read_ndef_msg (local_sap, remote_sap);
-
- /* if Temporary Memory Constraint */
- if (rx_status == NFA_CHO_RX_NDEF_TEMP_MEM)
- {
- CHO_TRACE_ERROR0 ("Failed due to Temporary Memory Constraint");
-
- /* if we are expecting Hr then send Hs Error record */
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
- {
- /* ask retry later, handover request will disconnect */
- nfa_cho_send_hs_error (NFA_CHO_ERROR_TEMP_MEM, NFA_CHO_TIMEOUT_FOR_RETRY);
- }
- else
- {
- /* we cannot send error record, so disconnect */
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INTERNAL_ERROR;
- LLCP_DisconnectReq (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, FALSE);
- }
- }
- /* Permanent Memory Constraint */
- else if (rx_status == NFA_CHO_RX_NDEF_PERM_MEM)
- {
- CHO_TRACE_ERROR0 ("Failed due to Permanent Memory Constraint");
-
- /* if we are expecting Hr then send Hs Error record */
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
- {
- /*
- ** notify our buffer size and ask retry with modified message later
- ** handover request will disconnect
- */
- nfa_cho_send_hs_error (NFA_CHO_ERROR_PERM_MEM, nfa_cho_cb.rx_ndef_buf_size);
- }
- else
- {
- /* we cannot send error record, so disconnect */
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INTERNAL_ERROR;
- LLCP_DisconnectReq (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, FALSE);
- }
- }
- /* Invalid NDEF message */
- else if (rx_status == NFA_CHO_RX_NDEF_INVALID)
- {
- CHO_TRACE_ERROR0 ("Failed due to invalid NDEF message");
-
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
- {
- /* let Handover Requester got timeout */
- }
- else
- {
- /* we cannot send error record, so disconnect */
- nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INVALID_MSG;
- LLCP_DisconnectReq (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, FALSE);
- }
- }
- /* need more segment */
- else if (rx_status == NFA_CHO_RX_NDEF_INCOMPLTE)
- {
- /* wait for next segment */
- if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
- {
- nfa_sys_start_timer (&nfa_cho_cb.timer, 0, NFA_CHO_TIMEOUT_SEGMENTED_HR);
- }
- /* don't update running timer if we are waiting Hs */
- }
- else /* NFA_CHO_RX_NDEF_COMPLETE */
- {
- /* Received complete NDEF message */
- }
-
- return rx_status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_send_handover_msg
-**
-** Description Send segmented or whole Handover Message on LLCP
-** if congested then wait for uncongested event from LLCP
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_handover_msg (void)
-{
- tNFA_STATUS status = NFA_STATUS_FAILED;
- tLLCP_STATUS llcp_status;
- UINT16 tx_size;
- BT_HDR *p_msg;
- UINT8 *p_src, *p_dst;
-
- CHO_TRACE_DEBUG2 ("nfa_cho_send_handover_msg () size=%d, sent=%d",
- nfa_cho_cb.tx_ndef_cur_size, nfa_cho_cb.tx_ndef_sent_size);
-
- /* while data link connection is not congested */
- while ((!nfa_cho_cb.congested) && (nfa_cho_cb.tx_ndef_sent_size < nfa_cho_cb.tx_ndef_cur_size))
- {
- /* select segment size as min (MIU of remote, remaining NDEF size) */
- if (nfa_cho_cb.tx_ndef_cur_size - nfa_cho_cb.tx_ndef_sent_size > nfa_cho_cb.remote_miu)
- {
- tx_size = nfa_cho_cb.remote_miu;
- }
- else
- {
- tx_size = (UINT16) (nfa_cho_cb.tx_ndef_cur_size - nfa_cho_cb.tx_ndef_sent_size);
- }
-
- /* transmit a segment on LLCP */
- if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
- {
- p_msg->len = (UINT16) tx_size;
- p_msg->offset = LLCP_MIN_OFFSET;
-
- p_dst = (UINT8*) (p_msg + 1) + p_msg->offset;
- p_src = nfa_cho_cb.p_tx_ndef_msg + nfa_cho_cb.tx_ndef_sent_size;
-
- memcpy (p_dst, p_src, tx_size);
-
- llcp_status = LLCP_SendData (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, p_msg);
-
- nfa_cho_cb.tx_ndef_sent_size += tx_size;
- }
- else
- {
- llcp_status = LLCP_STATUS_FAIL;
- }
-
- if (llcp_status == LLCP_STATUS_SUCCESS)
- {
- status = NFA_STATUS_OK;
- }
- else if (llcp_status == LLCP_STATUS_CONGESTED)
- {
- status = NFA_STATUS_CONGESTED;
- CHO_TRACE_DEBUG0 ("Data link connection is congested");
- /* wait for uncongested event */
- nfa_cho_cb.congested = TRUE;
- break;
- }
- else
- {
- status = NFA_STATUS_FAILED;
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- break;
- }
- }
-
- /*
- ** free buffer when receiving response or disconnected because we may need to send
- ** Hr message again due to collision
- */
-
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_read_ndef_msg
-**
-** Description allocate memory for NDEF message for the first segment
-** validate NDEF message to check if received complete message
-**
-** Returns None
-**
-*******************************************************************************/
-tNFA_CHO_RX_NDEF_STATUS nfa_cho_read_ndef_msg (UINT8 local_sap, UINT8 remote_sap)
-{
- tNDEF_STATUS ndef_status;
- tNFA_CHO_RX_NDEF_STATUS rx_status;
- BOOLEAN more;
- UINT32 length;
-
- CHO_TRACE_DEBUG2 ("nfa_cho_read_ndef_msg () local_sap=0x%x, remote_sap=0x%x",
- local_sap, remote_sap);
-
- /* if this is the first segment */
- if (!nfa_cho_cb.p_rx_ndef_msg)
- {
- nfa_cho_cb.p_rx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
- if (!nfa_cho_cb.p_rx_ndef_msg)
- {
- CHO_TRACE_ERROR0 ("Failed to allocate buffer");
- return NFA_CHO_RX_NDEF_TEMP_MEM;
- }
-
- nfa_cho_cb.rx_ndef_buf_size = LLCP_POOL_BUF_SIZE;
- nfa_cho_cb.rx_ndef_cur_size = 0;
- }
-
- more = TRUE;
- while (more)
- {
- more = LLCP_ReadDataLinkData (local_sap,
- remote_sap,
- (UINT16)(nfa_cho_cb.rx_ndef_buf_size - nfa_cho_cb.rx_ndef_cur_size),
- &length,
- nfa_cho_cb.p_rx_ndef_msg + nfa_cho_cb.rx_ndef_cur_size);
-
- nfa_cho_cb.rx_ndef_cur_size += length;
-
- /* if it doesn't fit into allocated memory */
- if ((nfa_cho_cb.rx_ndef_cur_size >= nfa_cho_cb.rx_ndef_buf_size)
- &&(more))
- {
- CHO_TRACE_ERROR0 ("Failed to store too much data");
-
- LLCP_FlushDataLinkRxData (local_sap, remote_sap);
-
- GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
- nfa_cho_cb.p_rx_ndef_msg = NULL;
-
- return NFA_CHO_RX_NDEF_PERM_MEM;
- }
- }
-
- /* check NDEF message */
- ndef_status = NDEF_MsgValidate (nfa_cho_cb.p_rx_ndef_msg, nfa_cho_cb.rx_ndef_cur_size, FALSE);
-
- switch (ndef_status)
- {
- case NDEF_OK:
- rx_status = NFA_CHO_RX_NDEF_COMPLETE;
- break;
-
- case NDEF_MSG_TOO_SHORT:
- case NDEF_MSG_NO_MSG_END:
- case NDEF_MSG_LENGTH_MISMATCH:
- rx_status = NFA_CHO_RX_NDEF_INCOMPLTE;
- break;
-
- default:
- rx_status = NFA_CHO_RX_NDEF_INVALID;
- break;
- }
-
- if (rx_status == NFA_CHO_RX_NDEF_COMPLETE)
- {
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispCHO (nfa_cho_cb.p_rx_ndef_msg, nfa_cho_cb.rx_ndef_cur_size, TRUE);
-#endif
- }
- else if (rx_status == NFA_CHO_RX_NDEF_INCOMPLTE)
- {
- CHO_TRACE_DEBUG0 ("Need more data to complete NDEF message");
- }
- else /* if (rx_status == NFA_CHO_RX_NDEF_INVALID) */
- {
- CHO_TRACE_ERROR1 ("Failed to validate NDEF message error=0x%x", ndef_status);
- GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
- nfa_cho_cb.p_rx_ndef_msg = NULL;
- }
-
- return rx_status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_add_cr_record
-**
-** Description Adding Collision Resolution record
-**
-**
-** Returns NDEF_OK if success
-**
-*******************************************************************************/
-tNDEF_STATUS nfa_cho_add_cr_record (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size)
-{
- tNDEF_STATUS status;
- UINT32 temp32;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_add_cr_record () cur_size = %d", *p_cur_size);
-
- /* Get random number from timer */
- temp32 = GKI_get_tick_count ();
- nfa_cho_cb.tx_random_number = (UINT16) ((temp32 >> 16) ^ (temp32));
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
- if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_RANDOM)
- {
- nfa_cho_cb.tx_random_number = nfa_cho_cb.test_random_number;
- }
-#endif
-
- CHO_TRACE_DEBUG1 ("tx_random_number = 0x%04x", nfa_cho_cb.tx_random_number);
-
- /* Add Well-Known Type:Collistion Resolution Record */
- status = NDEF_MsgAddWktCr (p_msg, max_size, p_cur_size,
- nfa_cho_cb.tx_random_number);
-
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_add_ac_record
-**
-** Description Adding Alternative Carrier record
-**
-**
-** Returns NDEF_OK if success
-**
-*******************************************************************************/
-tNDEF_STATUS nfa_cho_add_ac_record (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size,
- UINT8 num_ac_info, tNFA_CHO_AC_INFO *p_ac_info,
- UINT8 *p_ndef, UINT32 max_ndef_size, UINT32 *p_cur_ndef_size)
-{
- tNDEF_STATUS status = NDEF_OK;
- UINT8 xx, yy;
- UINT8 *p_rec, *p_id, id_len;
- char carrier_data_ref_str[NFA_CHO_MAX_REF_NAME_LEN];
- char *aux_data_ref[NFA_CHO_MAX_AUX_DATA_COUNT];
- char aux_data_ref_str[NFA_CHO_MAX_AUX_DATA_COUNT][NFA_CHO_MAX_REF_NAME_LEN];
-
- CHO_TRACE_DEBUG1 ("nfa_cho_add_ac_record (): num_ac_info = %d", num_ac_info);
-
- /* initialize auxilary data reference */
- for (xx = 0; xx < NFA_CHO_MAX_AUX_DATA_COUNT; xx++)
- {
- aux_data_ref[xx] = aux_data_ref_str[xx];
- }
-
- p_rec = p_ndef;
-
- /* Alternative Carrier Records */
- for (xx = 0; (xx < num_ac_info) && (status == NDEF_OK); xx++)
- {
- if (!p_rec)
- {
- status = NDEF_REC_NOT_FOUND;
- break;
- }
-
- p_id = NDEF_RecGetId (p_rec, &id_len);
-
- if ((p_id) && (id_len > 0) && (id_len <= NFA_CHO_MAX_REF_NAME_LEN))
- {
- memcpy (carrier_data_ref_str, p_id, id_len);
- carrier_data_ref_str[id_len] = 0x00;
- }
- else
- {
- CHO_TRACE_ERROR1 ("nfa_cho_add_ac_record ():id_len=%d", id_len);
- status = NDEF_REC_NOT_FOUND;
- break;
- }
-
- p_rec = NDEF_MsgGetNextRec (p_rec);
-
- /* auxilary data reference */
- for (yy = 0; yy < p_ac_info[xx].num_aux_data; yy++)
- {
- if (!p_rec)
- {
- status = NDEF_REC_NOT_FOUND;
- break;
- }
-
- p_id = NDEF_RecGetId (p_rec, &id_len);
-
- if ((p_id) && (id_len > 0) && (id_len <= NFA_CHO_MAX_REF_NAME_LEN))
- {
- memcpy (aux_data_ref_str[yy], p_id, id_len);
- aux_data_ref_str[yy][id_len] = 0x00;
- }
- else
- {
- CHO_TRACE_ERROR1 ("nfa_cho_add_ac_record ():id_len=%d", id_len);
- status = NDEF_REC_NOT_FOUND;
- break;
- }
-
- p_rec = NDEF_MsgGetNextRec (p_rec);
- }
-
- if (status == NDEF_OK)
- {
- /* Add Well-Known Type:Alternative Carrier Record */
- status = NDEF_MsgAddWktAc (p_msg, max_size, p_cur_size,
- p_ac_info[xx].cps, carrier_data_ref_str,
- p_ac_info[xx].num_aux_data, aux_data_ref);
- }
-
- if (status != NDEF_OK)
- {
- break;
- }
- }
-
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_send_hr
-**
-** Description Sending Handover Request Message
-** It may send one from AC list to select a specific AC.
-**
-** Returns NFA_STATUS_OK if success
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_hr (tNFA_CHO_API_SEND_HR *p_api_send_hr)
-{
- tNDEF_STATUS status;
- UINT8 *p_msg_cr_ac;
- UINT32 cur_size_cr_ac, max_size;
- UINT8 version;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_send_hr ()");
-
- /* Collistion Resolution Record and Alternative Carrier Records */
-
- p_msg_cr_ac = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
- if (!p_msg_cr_ac)
- {
- CHO_TRACE_ERROR0 ("Failed to allocate buffer");
- return NFA_STATUS_NO_BUFFERS;
- }
-
- max_size = LLCP_POOL_BUF_SIZE;
- NDEF_MsgInit (p_msg_cr_ac, max_size, &cur_size_cr_ac);
-
- /* Collistion Resolution Record */
- if (NDEF_OK != nfa_cho_add_cr_record (p_msg_cr_ac, max_size, &cur_size_cr_ac))
- {
- CHO_TRACE_ERROR0 ("Failed to add cr record");
- GKI_freebuf (p_msg_cr_ac);
- return NFA_STATUS_FAILED;
- }
-
- /* Alternative Carrier Records */
- if (NDEF_OK != nfa_cho_add_ac_record (p_msg_cr_ac, max_size, &cur_size_cr_ac,
- p_api_send_hr->num_ac_info, p_api_send_hr->p_ac_info,
- p_api_send_hr->p_ndef, p_api_send_hr->max_ndef_size,
- &(p_api_send_hr->cur_ndef_size)))
- {
- CHO_TRACE_ERROR0 ("Failed to add ac record");
- GKI_freebuf (p_msg_cr_ac);
- return NFA_STATUS_FAILED;
- }
-
- /* Handover Request Message */
-
- nfa_cho_cb.p_tx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
- if (!nfa_cho_cb.p_tx_ndef_msg)
- {
- CHO_TRACE_ERROR0 ("Failed to allocate buffer");
- GKI_freebuf (p_msg_cr_ac);
- return NFA_STATUS_FAILED;
- }
-
- max_size = LLCP_POOL_BUF_SIZE;
-
- /* Handover Request Record */
- version = NFA_CHO_VERSION;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
- if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_VERSION)
- {
- version = nfa_cho_cb.test_version;
- }
-#endif
-
- status = NDEF_MsgCreateWktHr (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- version);
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to create Hr");
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- GKI_freebuf (p_msg_cr_ac);
- return NFA_STATUS_FAILED;
- }
-
- /* Append Collistion Resolution Record and Alternative Carrier Records */
- status = NDEF_MsgAppendPayload (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- nfa_cho_cb.p_tx_ndef_msg, p_msg_cr_ac, cur_size_cr_ac);
-
- GKI_freebuf (p_msg_cr_ac);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to add cr/ac record");
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- return NFA_STATUS_FAILED;
- }
-
-
- /* Append Alternative Carrier Reference Data or Handover Carrier Record */
- status = NDEF_MsgAppendRec (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- p_api_send_hr->p_ndef, p_api_send_hr->cur_ndef_size);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to add ac reference data or Hc record");
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- return NFA_STATUS_FAILED;
- }
-
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispCHO (nfa_cho_cb.p_tx_ndef_msg, nfa_cho_cb.tx_ndef_cur_size, FALSE);
-#endif
-
- /* Send it to peer */
- nfa_cho_cb.tx_ndef_sent_size = 0;
-
- status = nfa_cho_send_handover_msg ();
-
- if (status == NFA_STATUS_CONGESTED)
- {
- status = NFA_STATUS_OK;
- }
-
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_send_hs
-**
-** Description Send Handover Select Message
-**
-**
-** Returns NFA_STATUS_OK if success
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_hs (tNFA_CHO_API_SEND_HS *p_api_select)
-{
- tNDEF_STATUS status;
- UINT8 *p_msg_ac;
- UINT32 cur_size_ac = 0, max_size;
- UINT8 version;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_send_hs () num_ac_info=%d", p_api_select->num_ac_info);
-
- if (p_api_select->num_ac_info > 0)
- {
- /* Alternative Carrier Records */
-
- p_msg_ac = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
- if (!p_msg_ac)
- {
- CHO_TRACE_ERROR0 ("Failed to allocate buffer");
- return NFA_STATUS_FAILED;
- }
-
- max_size = LLCP_POOL_BUF_SIZE;
- NDEF_MsgInit (p_msg_ac, max_size, &cur_size_ac);
-
- if (NDEF_OK != nfa_cho_add_ac_record (p_msg_ac, max_size, &cur_size_ac,
- p_api_select->num_ac_info, p_api_select->p_ac_info,
- p_api_select->p_ndef, p_api_select->max_ndef_size,
- &(p_api_select->cur_ndef_size)))
- {
- CHO_TRACE_ERROR0 ("Failed to add ac record");
- GKI_freebuf (p_msg_ac);
- return NFA_STATUS_FAILED;
- }
- }
- else
- {
- p_msg_ac = NULL;
- }
-
- /* Handover Select Message */
- nfa_cho_cb.p_tx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
- if (!nfa_cho_cb.p_tx_ndef_msg)
- {
- CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-
- if (p_msg_ac)
- GKI_freebuf (p_msg_ac);
-
- return NFA_STATUS_FAILED;
- }
- max_size = LLCP_POOL_BUF_SIZE;
-
- /* Handover Select Record */
- version = NFA_CHO_VERSION;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
- if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_VERSION)
- {
- version = nfa_cho_cb.test_version;
- }
-#endif
- status = NDEF_MsgCreateWktHs (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- version);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to create Hs");
-
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
-
- if (p_msg_ac)
- GKI_freebuf (p_msg_ac);
-
- return NFA_STATUS_FAILED;
- }
-
- if (p_api_select->num_ac_info > 0)
- {
- /* Append Alternative Carrier Records */
- status = NDEF_MsgAppendPayload (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- nfa_cho_cb.p_tx_ndef_msg, p_msg_ac, cur_size_ac);
-
- if (p_msg_ac)
- GKI_freebuf (p_msg_ac);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to add cr record");
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- return NFA_STATUS_FAILED;
- }
-
- /* Append Alternative Carrier Reference Data */
- status = NDEF_MsgAppendRec (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- p_api_select->p_ndef, p_api_select->cur_ndef_size);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to add ac reference data record");
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
- return NFA_STATUS_FAILED;
- }
- }
-
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispCHO (nfa_cho_cb.p_tx_ndef_msg, nfa_cho_cb.tx_ndef_cur_size, FALSE);
-#endif
-
- /* Send it to peer */
- nfa_cho_cb.tx_ndef_sent_size = 0;
-
- status = nfa_cho_send_handover_msg ();
-
- if (status == NFA_STATUS_CONGESTED)
- {
- status = NFA_STATUS_OK;
- }
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_send_hs_error
-**
-** Description Sending Handover Select Message with error record
-**
-**
-** Returns NFA_STATUS_OK if success
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_hs_error (UINT8 error_reason, UINT32 error_data)
-{
- tNDEF_STATUS status;
- UINT8 version;
- UINT32 max_size;
-
- CHO_TRACE_DEBUG2 ("nfa_cho_send_hs_error () error_reason=0x%x, error_data=0x%x",
- error_reason, error_data);
-
- /* Handover Select Message */
- nfa_cho_cb.p_tx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
- if (!nfa_cho_cb.p_tx_ndef_msg)
- {
- CHO_TRACE_ERROR0 ("Failed to allocate buffer");
- return NFA_STATUS_FAILED;
- }
-
- max_size = LLCP_POOL_BUF_SIZE;
-
- /* Handover Select Record with Version */
- version = NFA_CHO_VERSION;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
- if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_VERSION)
- {
- version = nfa_cho_cb.test_version;
- }
-#endif
- status = NDEF_MsgCreateWktHs (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- version);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to create Hs");
-
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
-
- return NFA_STATUS_FAILED;
- }
-
- /* Add Error Records */
- status = NDEF_MsgAddWktErr (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
- error_reason, error_data);
-
- if (status != NDEF_OK)
- {
- CHO_TRACE_ERROR0 ("Failed to add err record");
-
- GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
- nfa_cho_cb.p_tx_ndef_msg = NULL;
-
- return NFA_STATUS_FAILED;
- }
-
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispCHO (nfa_cho_cb.p_tx_ndef_msg, nfa_cho_cb.tx_ndef_cur_size, FALSE);
-#endif
-
- /* Send it to peer */
- nfa_cho_cb.tx_ndef_sent_size = 0;
-
- status = nfa_cho_send_handover_msg ();
-
- if (status == NFA_STATUS_CONGESTED)
- {
- status = NFA_STATUS_OK;
- }
- return status;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_get_random_number
-**
-** Description Return random number in Handover Request message
-**
-**
-** Returns random number in "cr" record
-**
-*******************************************************************************/
-UINT16 nfa_cho_get_random_number (UINT8 *p_ndef_msg)
-{
- UINT16 random_number;
- UINT8 *p_cr_record, *p_cr_payload;
- UINT32 cr_payload_len;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_get_random_number ()");
-
- /* find Collision Resolution record */
- p_cr_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, cr_rec_type, CR_REC_TYPE_LEN);
-
- if (!p_cr_record)
- {
- CHO_TRACE_ERROR0 ("Failed to find cr record");
- return 0;
- }
-
- /* get start of payload in Collision Resolution record */
- p_cr_payload = NDEF_RecGetPayload (p_cr_record, &cr_payload_len);
-
- if ((!p_cr_payload) || (cr_payload_len != 2))
- {
- CHO_TRACE_ERROR0 ("Failed to get cr payload (random number)");
- return 0;
- }
-
- /* get random number from payload */
- BE_STREAM_TO_UINT16 (random_number, p_cr_payload);
-
- return random_number;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_parse_ac_records
-**
-** Description Parsing NDEF message to retrieve Alternative Carrier records
-** and store into tNFA_CHO_AC_REC
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_ac_records (UINT8 *p_ndef_msg, UINT8 *p_num_ac_rec, tNFA_CHO_AC_REC *p_ac_rec)
-{
- UINT8 *p_ac_record, *p_ac_payload;
- UINT32 ac_payload_len;
-
- UINT8 xx, yy;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_parse_ac_records ()");
-
- /* get Alternative Carrier record */
- p_ac_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, ac_rec_type, AC_REC_TYPE_LEN);
-
- xx = 0;
-
- while ((p_ac_record) && (xx < NFA_CHO_MAX_AC_INFO))
- {
- /* get payload */
- p_ac_payload = NDEF_RecGetPayload (p_ac_record, &ac_payload_len);
-
- if ((!p_ac_payload) || (ac_payload_len < 3))
- {
- CHO_TRACE_ERROR0 ("Failed to get ac payload");
- return NFA_STATUS_FAILED;
- }
-
- /* Carrier Power State */
- BE_STREAM_TO_UINT8 (p_ac_rec->cps, p_ac_payload);
-
- /* Carrier Data Reference Length and Characters */
- BE_STREAM_TO_UINT8 (p_ac_rec->carrier_data_ref.ref_len, p_ac_payload);
-
- ac_payload_len -= 2;
-
- /* remaining must have carrier data ref and Auxiliary Data Reference Count at least */
- if (ac_payload_len > p_ac_rec->carrier_data_ref.ref_len)
- {
- if (p_ac_rec->carrier_data_ref.ref_len > NFA_CHO_MAX_REF_NAME_LEN)
- {
- CHO_TRACE_ERROR1 ("Too many bytes for carrier_data_ref, ref_len = %d",
- p_ac_rec->carrier_data_ref.ref_len);
- return NFA_STATUS_FAILED;
- }
-
- BE_STREAM_TO_ARRAY (p_ac_payload,
- p_ac_rec->carrier_data_ref.ref_name,
- p_ac_rec->carrier_data_ref.ref_len);
- ac_payload_len -= p_ac_rec->carrier_data_ref.ref_len;
- }
- else
- {
- CHO_TRACE_ERROR0 ("Failed to parse carrier_data_ref.ref_len");
- return NFA_STATUS_FAILED;
- }
-
- /* Auxiliary Data Reference Count */
- BE_STREAM_TO_UINT8 (p_ac_rec->aux_data_ref_count, p_ac_payload);
- ac_payload_len--;
-
- /* Auxiliary Data Reference Length and Characters */
- for (yy = 0; (yy < p_ac_rec->aux_data_ref_count) && (yy < NFA_CHO_MAX_AUX_DATA_COUNT); yy++)
- {
- if (ac_payload_len > 0)
- {
- BE_STREAM_TO_UINT8 (p_ac_rec->aux_data_ref[yy].ref_len, p_ac_payload);
- ac_payload_len--;
-
- if (ac_payload_len >= p_ac_rec->aux_data_ref[yy].ref_len)
- {
- if (p_ac_rec->aux_data_ref[yy].ref_len > NFA_CHO_MAX_REF_NAME_LEN)
- {
- CHO_TRACE_ERROR2 ("Too many bytes for aux_data_ref[%d], ref_len=%d",
- yy, p_ac_rec->aux_data_ref[yy].ref_len);
- return NFA_STATUS_FAILED;
- }
-
- BE_STREAM_TO_ARRAY (p_ac_payload,
- p_ac_rec->aux_data_ref[yy].ref_name,
- p_ac_rec->aux_data_ref[yy].ref_len);
- ac_payload_len -= p_ac_rec->aux_data_ref[yy].ref_len;
- }
- else
- {
- CHO_TRACE_ERROR1 ("Failed to parse ref_name for aux_data_ref[%d]", yy);
- return NFA_STATUS_FAILED;
- }
- }
- else
- {
- CHO_TRACE_ERROR1 ("Failed to parse ref_len for aux_data_ref[%d]", yy);
- return NFA_STATUS_FAILED;
- }
- }
-
- if (ac_payload_len != 0)
- {
- CHO_TRACE_WARNING1 ("Found extra data in AC record[%d]", xx);
- }
-
- xx++;
- p_ac_rec++;
-
- /* get next Alternative Carrier record */
- p_ac_record = NDEF_MsgGetNextRecByType (p_ac_record, NDEF_TNF_WKT, ac_rec_type, AC_REC_TYPE_LEN);
- }
-
- *p_num_ac_rec = xx;
-
- return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_parse_hr_record
-**
-** Description Parsing Handover Request message to retrieve version, random number,
-** Alternative Carrier records and store into tNFA_CHO_AC_REC
-**
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_hr_record (UINT8 *p_ndef_msg,
- UINT8 *p_version,
- UINT16 *p_random_number,
- UINT8 *p_num_ac_rec,
- tNFA_CHO_AC_REC *p_ac_rec)
-{
- UINT8 *p_hr_record, *p_hr_payload;
- UINT32 hr_payload_len;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_parse_hr_record ()");
-
- /* get Handover Request record */
- p_hr_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hr_rec_type, HR_REC_TYPE_LEN);
-
- if (!p_hr_record)
- {
- CHO_TRACE_ERROR0 ("Failed to find Hr record");
- return NFA_STATUS_FAILED;
- }
-
- p_hr_payload = NDEF_RecGetPayload (p_hr_record, &hr_payload_len);
-
- if ((!p_hr_payload) || (hr_payload_len < 7))
- {
- CHO_TRACE_ERROR0 ("Failed to get Hr payload (version, cr/ac record)");
- return NFA_STATUS_FAILED;
- }
-
- /* Version */
- STREAM_TO_UINT8 ((*p_version), p_hr_payload);
- hr_payload_len--;
-
- /* NDEF message for Collision Resolution record and Alternative Carrier records */
-
- if (NDEF_OK != NDEF_MsgValidate (p_hr_payload, hr_payload_len, FALSE))
- {
- CHO_TRACE_ERROR0 ("Failed to validate NDEF message for cr/ac records");
- return NFA_STATUS_FAILED;
- }
-
- /* Collision Resolution record */
- if (p_random_number)
- {
- *p_random_number = nfa_cho_get_random_number (p_hr_payload);
- }
-
- /* Alternative Carrier records */
- if (p_ac_rec)
- {
- return (nfa_cho_parse_ac_records (p_hr_payload, p_num_ac_rec, p_ac_rec));
- }
-
- return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_parse_carrier_config
-**
-** Description Parse Alternative Carrier Configuration and Aux Data
-**
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_carrier_config (UINT8 *p_ndef_msg, UINT8 num_ac_rec, tNFA_CHO_AC_REC *p_ac_rec)
-{
- UINT8 *p_record;
- UINT8 xx, yy;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_parse_carrier_config () num_ac_rec = %d", num_ac_rec);
-
- /* Parse Alternative Carrier Configuration and Aux Data */
- for (xx = 0; xx < num_ac_rec; xx++)
- {
- p_record = NDEF_MsgGetFirstRecById (p_ndef_msg,
- p_ac_rec->carrier_data_ref.ref_name,
- p_ac_rec->carrier_data_ref.ref_len);
-
- if (!p_record)
- {
- CHO_TRACE_ERROR2 ("Failed to find Payload ID: len=%d, [0x%x ...]",
- p_ac_rec->carrier_data_ref.ref_len,
- p_ac_rec->carrier_data_ref.ref_name[0]);
- return NFA_STATUS_FAILED;
- }
-
- for (yy = 0; yy < p_ac_rec->aux_data_ref_count; yy++)
- {
- /* Get aux data record by Payload ID */
- p_record = NDEF_MsgGetFirstRecById (p_ndef_msg,
- p_ac_rec->aux_data_ref[yy].ref_name,
- p_ac_rec->aux_data_ref[yy].ref_len);
-
- if (!p_record)
- {
- CHO_TRACE_ERROR2 ("Failed to find Payload ID for Aux: len=%d, [0x%x ...]",
- p_ac_rec->aux_data_ref[yy].ref_len,
- p_ac_rec->aux_data_ref[yy].ref_name[0]);
- return NFA_STATUS_FAILED;
- }
- }
-
- p_ac_rec++;
- }
-
- return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_hr
-**
-** Description Parse Handover Request Message
-** In case of parsing error, let peer got timeout (1 sec).
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_cho_proc_hr (UINT32 length, UINT8 *p_ndef_msg)
-{
- tNFA_CHO_EVT_DATA evt_data;
- tNFA_CHO_API_SEND_HS select;
- UINT8 version;
- UINT16 random_number;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_proc_hr () length=%d", length);
-
- /* Parse Handover Request record */
- if (NDEF_OK != nfa_cho_parse_hr_record (p_ndef_msg, &version, &random_number,
- &evt_data.request.num_ac_rec,
- &evt_data.request.ac_rec[0]))
- {
- CHO_TRACE_ERROR0 ("Failed to parse hr record");
- return;
- }
-
- if (version != NFA_CHO_VERSION)
- {
- CHO_TRACE_DEBUG1 ("Version (0x%02x) not matched", version);
- /* For the future, */
- /* if we have higher major then support peer's version */
- /* if we have lower major then send empty handover select message */
- if (NFA_CHO_GET_MAJOR_VERSION (version) > NFA_CHO_GET_MAJOR_VERSION (NFA_CHO_VERSION))
- {
- select.num_ac_info = 0;
- nfa_cho_send_hs (&select);
- return;
- }
- }
-
- if (NFA_STATUS_OK != nfa_cho_parse_carrier_config (p_ndef_msg,
- evt_data.request.num_ac_rec,
- &evt_data.request.ac_rec[0]))
- {
- CHO_TRACE_ERROR0 ("Failed to parse carrier configuration");
-
- evt_data.request.status = NFA_STATUS_FAILED;
- evt_data.request.num_ac_rec = 0;
- evt_data.request.p_ref_ndef = NULL;
- evt_data.request.ref_ndef_len = 0;
-
- nfa_cho_cb.p_cback (NFA_CHO_REQUEST_EVT, &evt_data);
- return;
- }
-
- if (evt_data.request.num_ac_rec)
- {
- /* passing alternative carrier references */
- evt_data.request.p_ref_ndef = NDEF_MsgGetNextRec (p_ndef_msg);
- *evt_data.request.p_ref_ndef |= NDEF_MB_MASK;
- evt_data.request.ref_ndef_len = (UINT32)(length - (evt_data.request.p_ref_ndef - p_ndef_msg));
- }
- else
- {
- evt_data.request.p_ref_ndef = NULL;
- evt_data.request.ref_ndef_len = 0;
- }
-
- evt_data.request.status = NFA_STATUS_OK;
-
- nfa_cho_cb.p_cback (NFA_CHO_REQUEST_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_get_error
-**
-** Description Search Error record and parse it
-**
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_get_error (UINT8 *p_ndef_msg, UINT8 *p_error_reason, UINT32 *p_error_data)
-{
- UINT8 *p_err_record, *p_err_payload, u8;
- UINT32 err_payload_len;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_get_error ()");
-
- p_err_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, err_rec_type, ERR_REC_TYPE_LEN);
-
- if (!p_err_record)
- {
- CHO_TRACE_DEBUG0 ("Found no err record");
- return NFA_STATUS_FAILED;
- }
-
- p_err_payload = NDEF_RecGetPayload (p_err_record, &err_payload_len);
-
- if (!p_err_payload)
- {
- CHO_TRACE_ERROR0 ("Failed to get err payload");
- return NFA_STATUS_SYNTAX_ERROR;
- }
-
- BE_STREAM_TO_UINT8 (*p_error_reason, p_err_payload);
-
- if ( (err_payload_len == 2)
- &&( (*p_error_reason == NFA_CHO_ERROR_TEMP_MEM)
- ||(*p_error_reason == NFA_CHO_ERROR_CARRIER) ) )
- {
- BE_STREAM_TO_UINT8 (u8, p_err_payload);
- *p_error_data = (UINT32)u8;
- }
- else if ( (err_payload_len == 5)
- &&(*p_error_reason == NFA_CHO_ERROR_PERM_MEM) )
- {
- BE_STREAM_TO_UINT32 (*p_error_data, p_err_payload);
- }
- else
- {
- CHO_TRACE_ERROR2 ("Unknown error reason = %d, err_payload_len = %d",
- *p_error_reason, err_payload_len);
- return NFA_STATUS_SYNTAX_ERROR;
- }
-
- CHO_TRACE_DEBUG2 ("error_reason=0x%x, error_data=0x%x", *p_error_reason, *p_error_data);
-
- return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_parse_hs_record
-**
-** Description Parse Handover Select record
-**
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_hs_record (UINT8 *p_ndef_msg,
- UINT8 *p_version,
- UINT8 *p_num_ac_rec,
- tNFA_CHO_AC_REC *p_ac_rec,
- UINT8 *p_error_reason,
- UINT32 *p_error_data)
-{
- tNFA_STATUS status;
- UINT8 *p_hs_record, *p_hs_payload;
- UINT32 hs_payload_len;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_parse_hs_record ()");
-
- /* get Handover Select record */
- p_hs_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hs_rec_type, HS_REC_TYPE_LEN);
-
- if (!p_hs_record)
- {
- CHO_TRACE_ERROR0 ("Failed to find Hs record");
- return NFA_STATUS_FAILED;
- }
-
- p_hs_payload = NDEF_RecGetPayload (p_hs_record, &hs_payload_len);
-
- if ((!p_hs_payload) || (hs_payload_len < 1)) /* at least version */
- {
- CHO_TRACE_ERROR0 ("Failed to get Hs payload (version, ac record)");
- return NFA_STATUS_FAILED;
- }
-
- STREAM_TO_UINT8 ((*p_version), p_hs_payload);
- hs_payload_len--;
-
- /* Check if error record is sent */
- status = nfa_cho_get_error (p_ndef_msg, p_error_reason, p_error_data);
-
- if (status == NFA_STATUS_SYNTAX_ERROR)
- {
- return NFA_STATUS_FAILED;
- }
- else if (status == NFA_STATUS_OK)
- {
- return NFA_STATUS_OK;
- }
-
- if (hs_payload_len >= 3 )
- {
- /* NDEF message for Alternative Carrier records */
- if (NDEF_OK != NDEF_MsgValidate (p_hs_payload, hs_payload_len, FALSE))
- {
- CHO_TRACE_ERROR0 ("Failed to validate NDEF message for ac records");
- return NFA_STATUS_FAILED;
- }
-
- /* Alternative Carrier records */
- if (p_ac_rec)
- {
- if (NFA_STATUS_OK != nfa_cho_parse_ac_records (p_hs_payload, p_num_ac_rec, p_ac_rec))
- {
- return NFA_STATUS_FAILED;
- }
-
- CHO_TRACE_DEBUG1 ("Found %d ac record", *p_num_ac_rec);
- }
- }
- else
- {
- CHO_TRACE_DEBUG0 ("Empty Handover Select Message");
- *p_num_ac_rec = 0;
- }
-
- return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_hs
-**
-** Description Parse Handover Select Message
-**
-**
-** Returns FALSE if we need to select one from inactive ACs
-**
-*******************************************************************************/
-void nfa_cho_proc_hs (UINT32 length, UINT8 *p_ndef_msg)
-{
- tNFA_CHO_EVT_DATA evt_data;
- UINT8 version, error_reason = 0;
- UINT32 error_data;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_proc_hs ()");
-
- evt_data.select.status = NFA_STATUS_OK;
-
- /* Parse Handover Select record */
- if (NFA_STATUS_OK != nfa_cho_parse_hs_record (p_ndef_msg, &version,
- &evt_data.select.num_ac_rec,
- &evt_data.select.ac_rec[0],
- &error_reason, &error_data))
- {
- CHO_TRACE_ERROR0 ("Failed to parse hs record");
-
- evt_data.select.status = NFA_STATUS_FAILED;
- }
-
- if ( (evt_data.select.status == NFA_STATUS_OK)
- &&(error_reason != 0) )
- {
- /* We got error records */
- evt_data.sel_err.error_reason = error_reason;
- evt_data.sel_err.error_data = error_data;
-
- nfa_cho_cb.p_cback (NFA_CHO_SEL_ERR_EVT, &evt_data);
- return;
- }
-
- if ( (evt_data.select.status == NFA_STATUS_OK)
- &&(version != NFA_CHO_VERSION) )
- {
- CHO_TRACE_ERROR1 ("Version (0x%02x) not matched", version);
-
- evt_data.select.status = NFA_STATUS_FAILED;
- }
-
- /* parse Alternative Carrier information */
-
- if ( (evt_data.select.status == NFA_STATUS_OK)
- &&(NFA_STATUS_OK != nfa_cho_parse_carrier_config (p_ndef_msg,
- evt_data.select.num_ac_rec,
- &evt_data.select.ac_rec[0])) )
- {
- CHO_TRACE_ERROR0 ("Failed to parse carrier configuration");
-
- evt_data.select.status = NFA_STATUS_FAILED;
- }
-
- if (evt_data.select.status == NFA_STATUS_OK)
- {
- if (evt_data.select.num_ac_rec)
- {
- /* passing alternative carrier references */
- evt_data.select.p_ref_ndef = NDEF_MsgGetNextRec (p_ndef_msg);
- *evt_data.select.p_ref_ndef |= NDEF_MB_MASK;
- evt_data.select.ref_ndef_len = (UINT32)(length - (evt_data.select.p_ref_ndef - p_ndef_msg));
- }
- else
- {
- evt_data.select.p_ref_ndef = NULL;
- evt_data.select.ref_ndef_len = 0;
- }
- }
- else
- {
- evt_data.select.num_ac_rec = 0;
- evt_data.select.p_ref_ndef = NULL;
- evt_data.select.ref_ndef_len = 0;
- }
-
- nfa_cho_cb.p_cback (NFA_CHO_SELECT_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_proc_simplified_format
-**
-** Description Parse simplified BT OOB/Wifi Message
-**
-**
-** Returns void
-**
-*******************************************************************************/
-void nfa_cho_proc_simplified_format (UINT32 length, UINT8 *p_ndef_msg)
-{
- tNFA_CHO_EVT_DATA evt_data;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_proc_simplified_format ()");
-
- evt_data.select.status = NFA_STATUS_OK;
-
- evt_data.select.num_ac_rec = 1;
-
- evt_data.select.ac_rec[0].cps = NFA_CHO_CPS_UNKNOWN;
- evt_data.select.ac_rec[0].carrier_data_ref.ref_len = 0;
- evt_data.select.ac_rec[0].aux_data_ref_count = 0;
-
- evt_data.select.p_ref_ndef = p_ndef_msg;
- evt_data.select.ref_ndef_len = length;
-
- nfa_cho_cb.p_cback (NFA_CHO_SELECT_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_get_msg_type
-**
-** Description Get handover message type to check collision
-**
-**
-** Returns NFA_CHO_MSG_HR if it has Handover Request record
-** NFA_CHO_MSG_HS if it has Handover Select record
-** NFA_CHO_MSG_BT_OOB if it has simplified BT OOB record
-** NFA_CHO_MSG_WIFI if it has simplified WiFi record
-** NFA_CHO_MSG_UNKNOWN, otherwise
-**
-*******************************************************************************/
-tNFA_CHO_MSG_TYPE nfa_cho_get_msg_type (UINT32 length, UINT8 *p_ndef_msg)
-{
- UINT8 *p_record;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_get_msg_type () length=%d", length);
-
- p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hr_rec_type, HR_REC_TYPE_LEN);
-
- if (p_record)
- {
- CHO_TRACE_DEBUG0 ("Found Hr record");
- return NFA_CHO_MSG_HR;
- }
-
- p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hs_rec_type, HS_REC_TYPE_LEN);
-
- if (p_record)
- {
- CHO_TRACE_DEBUG0 ("Found Hs record");
- return NFA_CHO_MSG_HS;
- }
-
- p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_MEDIA,
- p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN);
-
- if (p_record)
- {
- CHO_TRACE_DEBUG0 ("Found simplified BT OOB record");
- return NFA_CHO_MSG_BT_OOB;
- }
-
- p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_MEDIA,
- p_wifi_rec_type, (UINT8) strlen ((char *) p_wifi_rec_type));
-
- if (p_record)
- {
- CHO_TRACE_DEBUG0 ("Found simplified WiFi record");
- return NFA_CHO_MSG_WIFI;
- }
-
- CHO_TRACE_ERROR0 ("Failed to find Hr/Hs record");
-
- return NFA_CHO_MSG_UNKNOWN;
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_get_local_device_role
-**
-** Description Resolve collision and get role of local device
-**
-**
-** Returns tNFA_CHO_ROLE_TYPE
-**
-*******************************************************************************/
-tNFA_CHO_ROLE_TYPE nfa_cho_get_local_device_role (UINT32 length, UINT8 *p_ndef_msg)
-{
- UINT16 rx_random_number;
- UINT8 version;
-
- CHO_TRACE_DEBUG1 ("nfa_cho_get_local_device_role () length=%d", length);
-
- /* Get random number in Handover Request record */
- if (NDEF_OK != nfa_cho_parse_hr_record (p_ndef_msg, &version, &rx_random_number, NULL, NULL))
- {
- CHO_TRACE_ERROR0 ("Failed to parse hr record");
- return NFA_CHO_ROLE_UNDECIDED;
- }
-
- CHO_TRACE_DEBUG2 ("tx_random_number=0x%x, rx_random_number=0x%x",
- nfa_cho_cb.tx_random_number, rx_random_number);
-
- if (nfa_cho_cb.tx_random_number == rx_random_number)
- {
- return NFA_CHO_ROLE_UNDECIDED;
- }
- /* if the least significant bits are same */
- else if (((nfa_cho_cb.tx_random_number ^ rx_random_number) & 0x0001) == 0)
- {
- if (nfa_cho_cb.tx_random_number > rx_random_number)
- return NFA_CHO_ROLE_SELECTOR;
- else
- return NFA_CHO_ROLE_REQUESTER;
- }
- else
- {
- if (nfa_cho_cb.tx_random_number > rx_random_number)
- return NFA_CHO_ROLE_REQUESTER;
- else
- return NFA_CHO_ROLE_SELECTOR;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_cho_update_random_number
-**
-** Description Replace random number
-**
-**
-** Returns tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_update_random_number (UINT8 *p_ndef_msg)
-{
- UINT8 *p_hr_record, *p_hr_payload;
- UINT8 *p_cr_record, *p_cr_payload;
- UINT32 hr_payload_len, cr_payload_len;
- UINT32 temp32;
-
- CHO_TRACE_DEBUG0 ("nfa_cho_update_random_number ()");
-
- /* get Handover Request record */
- p_hr_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hr_rec_type, HR_REC_TYPE_LEN);
-
- if (!p_hr_record)
- {
- CHO_TRACE_ERROR0 ("Failed to find Hr record");
- return NFA_STATUS_FAILED;
- }
-
- p_hr_payload = NDEF_RecGetPayload (p_hr_record, &hr_payload_len);
-
- /* Skip Version */
- p_hr_payload++;
- hr_payload_len--;
-
- /* NDEF message for Collision Resolution record and Alternative Carrier records */
-
- /* find Collision Resolution record */
- p_cr_record = NDEF_MsgGetFirstRecByType (p_hr_payload, NDEF_TNF_WKT, cr_rec_type, CR_REC_TYPE_LEN);
-
- if (!p_cr_record)
- {
- CHO_TRACE_ERROR0 ("Failed to find cr record");
- return NFA_STATUS_FAILED;
- }
-
- /* get start of payload in Collision Resolution record */
- p_cr_payload = NDEF_RecGetPayload (p_cr_record, &cr_payload_len);
-
- /* Get random number from timer */
- temp32 = GKI_get_tick_count ();
- nfa_cho_cb.tx_random_number = (UINT16) ((temp32 >> 16) ^ (temp32));
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
- if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_RANDOM)
- {
- nfa_cho_cb.tx_random_number = nfa_cho_cb.test_random_number;
- }
-#endif
-
- CHO_TRACE_DEBUG1 ("tx_random_number = 0x%04x", nfa_cho_cb.tx_random_number);
-
- /* update random number in payload */
- UINT16_TO_BE_STREAM (p_cr_payload, nfa_cho_cb.tx_random_number);
-
- return NFA_STATUS_OK;
-}
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index 077f066..c7f9a1d 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the action functions for device manager state
@@ -32,9 +33,12 @@
#include "nfa_rw_int.h"
#include "nfa_rw_api.h"
#include "nfa_p2p_int.h"
-#include "nfa_cho_int.h"
#include "nci_hmsgs.h"
+#if (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE))
+#include "nfa_cho_int.h"
+#endif
+
#if (NFC_NFCEE_INCLUDED == TRUE)
#include "nfa_ee_int.h"
#include "nfa_hci_int.h"
@@ -42,8 +46,6 @@
#if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
#include "nfa_snep_int.h"
-#else
-#define nfa_snep_init ()
#endif
/* This is the timeout value to guarantee disable is performed within reasonable amount of time */
@@ -332,7 +334,15 @@
case NFC_NFCEE_INFO_REVT: /* NFCEE Discover Notification */
case NFC_EE_ACTION_REVT: /* EE Action notification */
case NFC_NFCEE_MODE_SET_REVT: /* NFCEE Mode Set response */
+ nfa_ee_proc_evt (event, p_data);
+ break;
+
case NFC_EE_DISCOVER_REQ_REVT: /* EE Discover Req notification */
+ if (nfa_dm_is_active() &&
+ (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY) )
+ {
+ nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+ }
nfa_ee_proc_evt (event, p_data);
break;
#endif
@@ -393,6 +403,7 @@
nfa_dm_conn_cback_event_notify (NFA_UPDATE_RF_PARAM_RESULT_EVT, &conn_evt);
break;
+
default:
break;
}
@@ -1060,6 +1071,8 @@
else
{
status = NFC_SendData (NFC_RF_CONN_ID, (BT_HDR*) p_data);
+ /* Already freed or NCI layer will free buffer */
+ return FALSE;
}
}
@@ -1429,15 +1442,6 @@
nfa_dm_cb.disc_cb.activated_sel_res = 0;
break;
- case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
- /* DH initiated deactivation in NFA_DM_RFST_W4_HOST_SELECT */
- /* No need to notify NFA RW sub-systems */
-
- evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
- /* notify deactivation to application */
- nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
- break;
-
default:
NFA_TRACE_ERROR0 ("Unexpected event");
break;
@@ -1568,37 +1572,6 @@
nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data);
}
}
-
- break;
-
- case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
- /* DH initiated deactivation in NFA_DM_RFST_W4_HOST_SELECT */
- /* No need to notify NFA RW sub-systems */
-
- /* clear stored NFCID/UID */
- nfa_dm_cb.activated_nfcid_len = 0;
- /* clean up SEL_RES response */
- nfa_dm_cb.disc_cb.activated_sel_res = 0;
-
- evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
- /* notify deactivation to application */
- nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
-
- if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED))
- {
- /* deregister discovery callback from NFA DM Discovery */
- nfa_dm_delete_rf_discover (nfa_dm_cb.poll_disc_handle);
- nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID;
-
- /* this is for disable polling */
- if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_POLL_STOP_EVT)
- {
- nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_POLL_STOP_EVT;
-
- evt_data.status = NFA_STATUS_OK;
- nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data);
- }
- }
break;
}
}
diff --git a/src/nfa/dm/nfa_dm_api.c b/src/nfa/dm/nfa_dm_api.c
index 139062f..060f54a 100644
--- a/src/nfa/dm/nfa_dm_api.c
+++ b/src/nfa/dm/nfa_dm_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface for device management
@@ -697,12 +698,19 @@
** Description Send a raw frame over the activated interface with the NFCC.
** This function can only be called after NFC link is activated.
**
+** If the activated interface is a tag and auto-presence check is
+** enabled then presence_check_start_delay can be used to indicate
+** the delay in msec after which the next auto presence check
+** command can be sent. NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
+** can be used as the default value for the delay.
+**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
tNFA_STATUS NFA_SendRawFrame (UINT8 *p_raw_data,
- UINT16 data_len)
+ UINT16 data_len,
+ UINT16 presence_check_start_delay)
{
BT_HDR *p_msg;
UINT16 size;
@@ -718,6 +726,7 @@
if ((p_msg = (BT_HDR *) GKI_getbuf (size)) != NULL)
{
p_msg->event = NFA_DM_API_RAW_FRAME_EVT;
+ p_msg->layer_specific = presence_check_start_delay;
p_msg->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
p_msg->len = data_len;
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index 58d8ace..344079a 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2011-2012 Broadcom Corporation
+ * Copyright (C) 2011-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains compile-time configurable constants for NFA modules
@@ -87,5 +88,10 @@
tNFA_DM_CFG *p_nfa_dm_cfg = (tNFA_DM_CFG *) &nfa_dm_cfg;
+const tNFA_HCI_CFG nfa_hci_cfg =
+{
+ NFA_HCI_NETWK_INIT_IDLE_TIMEOUT, /* Max HCI Network IDLE time to wait for EE DISC REQ Ntf(s) */
+ NFA_HCI_RESPONSE_TIMEOUT /* Maximum HCP Response time to any HCP Command */
+};
-
+tNFA_HCI_CFG *p_nfa_hci_cfg = (tNFA_HCI_CFG *) &nfa_hci_cfg;
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index 686239f..083c339 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the action functions for device manager discovery
@@ -838,6 +839,48 @@
/*******************************************************************************
**
+** Function nfa_dm_disc_force_to_idle
+**
+** Description Force NFCC to idle state while waiting for deactivation NTF
+**
+** Returns tNFC_STATUS
+**
+*******************************************************************************/
+static tNFC_STATUS nfa_dm_disc_force_to_idle (void)
+{
+ tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR;
+
+ NFA_TRACE_DEBUG1 ("nfa_dm_disc_force_to_idle() disc_flags = 0x%x", nfa_dm_cb.disc_cb.disc_flags);
+
+ if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) /* do not execute more than one */
+ {
+ nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_NTF);
+ nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP);
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ status = NFC_Deactivate (NFC_DEACTIVATE_TYPE_IDLE);
+ }
+
+ return (status);
+}
+
+/*******************************************************************************
+**
+** Function nfa_dm_disc_deact_ntf_timeout_cback
+**
+** Description Timeout while waiting for deactivation NTF
+**
+** Returns void
+**
+*******************************************************************************/
+static void nfa_dm_disc_deact_ntf_timeout_cback (TIMER_LIST_ENT *p_tle)
+{
+ NFA_TRACE_ERROR0 ("nfa_dm_disc_deact_ntf_timeout_cback()");
+
+ nfa_dm_disc_force_to_idle();
+}
+
+/*******************************************************************************
+**
** Function nfa_dm_send_deactivate_cmd
**
** Description Send deactivate command to NFCC, if needed.
@@ -859,13 +902,27 @@
nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
status = NFC_Deactivate (deactivate_type);
+
+ if (!nfa_dm_cb.disc_cb.tle.in_use)
+ {
+ nfa_dm_cb.disc_cb.tle.p_cback = (TIMER_CBACK *)nfa_dm_disc_deact_ntf_timeout_cback;
+ nfa_sys_start_timer (&nfa_dm_cb.disc_cb.tle, 0, NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF);
+ }
}
- else if ((w4_flags == NFA_DM_DISC_FLAGS_W4_NTF) && (deactivate_type == NFC_DEACTIVATE_TYPE_IDLE))
+ else
{
- nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_NTF);
- nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP);
- nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY);
- status = NFC_Deactivate (deactivate_type);
+ if (deactivate_type == NFC_DEACTIVATE_TYPE_SLEEP)
+ {
+ status = NFC_STATUS_SEMANTIC_ERROR;
+ }
+ else if (nfa_dm_cb.disc_cb.tle.in_use)
+ {
+ status = NFC_STATUS_OK;
+ }
+ else
+ {
+ status = nfa_dm_disc_force_to_idle ();
+ }
}
return status;
@@ -1056,6 +1113,9 @@
/* RF discovery is started but there is no valid technology or protocol to discover */
nfa_dm_disc_notify_started (NFA_STATUS_OK);
}
+
+ /* reset hanlde of activated sub-module */
+ nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID;
}
/*******************************************************************************
@@ -1256,7 +1316,8 @@
tNFC_DISCOVER *p_data)
{
tNFA_HANDLE xx;
- tNFA_DM_RF_DISC_EVT disc_evt;
+ tNFA_CONN_EVT_DATA evt_data;
+ tNFC_DISCOVER disc_data;
NFA_TRACE_DEBUG1 ("nfa_dm_disc_notify_deactivation (): activated_handle=%d",
nfa_dm_cb.disc_cb.activated_handle);
@@ -1270,38 +1331,62 @@
if (sm_event == NFA_DM_RF_DEACTIVATE_RSP)
{
/*
- ** Activation has been aborted by upper layer in NFA_DM_RFST_W4_HOST_SELECT
- ** or NFA_DM_RFST_LISTEN_SLEEP
+ ** Activation has been aborted by upper layer in NFA_DM_RFST_W4_ALL_DISCOVERIES or NFA_DM_RFST_W4_HOST_SELECT
+ ** Deactivation by upper layer or RF link loss in NFA_DM_RFST_LISTEN_SLEEP
+ ** No sub-module is activated at this state.
*/
- disc_evt = NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT;
- }
- else
- {
- /* Received deactivation NTF */
- disc_evt = NFA_DM_RF_DISC_DEACTIVATED_EVT;
- }
- if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
- {
- if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
- (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (disc_evt, p_data);
+ if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_SLEEP)
+ {
+ if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
+ {
+ if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
+ {
+ disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE;
+ (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data);
+ }
+ }
+ else
+ {
+ /* let each sub-module handle deactivation */
+ for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++)
+ {
+ if ( (nfa_dm_cb.disc_cb.entry[xx].in_use)
+ &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LISTEN) )
+ {
+ disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE;
+ (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data);
+ }
+ }
+ }
+ }
+ else if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING))
+ {
+ evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
+ /* notify deactivation to application */
+ nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
+ }
}
else
{
/* notify event to activated module */
- xx = nfa_dm_cb.disc_cb.activated_handle;
-
- if ( (sm_event == NFA_DM_RF_DEACTIVATE_RSP)
- ||(p_data->deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) )
+ if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
{
- /* Don't remove handle in NFA_DM_RFST_W4_HOST_SELECT or NFA_DM_RFST_LISTEN_SLEEP */
- nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID;
+ if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
+ {
+ disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE;
+ (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data);
+ }
}
-
- if ((xx < NFA_DM_DISC_NUM_ENTRIES) && (nfa_dm_cb.disc_cb.entry[xx].in_use))
+ else
{
- if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)
- (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (disc_evt, p_data);
+ xx = nfa_dm_cb.disc_cb.activated_handle;
+
+ if ((xx < NFA_DM_DISC_NUM_ENTRIES) && (nfa_dm_cb.disc_cb.entry[xx].in_use))
+ {
+ if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)
+ (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data);
+ }
}
}
@@ -1310,6 +1395,7 @@
nfa_dm_cb.disc_cb.activated_rf_disc_id = 0;
nfa_dm_cb.disc_cb.activated_rf_interface = 0;
nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID;
+ nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID;
}
/*******************************************************************************
@@ -1356,14 +1442,16 @@
{
if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING)
{
+ nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING;
+
/* notify RW module that presence checking is finished */
nfa_rw_handle_presence_check_rsp (status);
- nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING;
+
if (nfa_dm_cb.presence_check_deact_pending)
{
nfa_dm_cb.presence_check_deact_pending = FALSE;
nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD,
- (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.presence_check_deact_type);
+ (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.presence_check_deact_type);
}
}
}
@@ -1415,7 +1503,8 @@
nfa_dm_cb.disc_cb.disc_state, new_state, nfa_dm_cb.disc_cb.disc_flags);
#endif
nfa_dm_cb.disc_cb.disc_state = new_state;
- if (new_state == NFA_DM_RFST_IDLE)
+ if ( (new_state == NFA_DM_RFST_IDLE)
+ &&(!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) ) /* not error recovering */
{
if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)
{
@@ -1523,15 +1612,53 @@
break;
case NFA_DM_RF_DEACTIVATE_RSP:
- /* restart discovery */
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
- if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_DISABLING)
+
+ /* if NFCC goes to idle successfully */
+ if (p_data->nfc_discover.status == NFC_STATUS_OK)
{
- nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_DISABLING;
- nfa_sys_check_disabled ();
+ /* if DH forced to go idle while waiting for deactivation NTF */
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+ {
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+
+ /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ /* check if need to restart discovery after resync discovery state with NFCC */
+ nfa_dm_start_rf_discover ();
+ }
+ /* Otherwise, deactivating when getting unexpected activation */
}
- else
- nfa_dm_start_rf_discover ();
+ /* Otherwise, wait for deactivation NTF */
+ break;
+
+ case NFA_DM_RF_DEACTIVATE_NTF:
+ /* if NFCC sent this after NFCC had rejected deactivate CMD to idle while deactivating */
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+ {
+ if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)
+ {
+ /* stop discovery */
+ nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP;
+ NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+ }
+ else
+ {
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+ /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ /* check if need to restart discovery after resync discovery state with NFCC */
+ nfa_dm_start_rf_discover ();
+ }
+ }
+ /* Otherwise, deactivated when received unexpected activation in idle state */
+ nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+ break;
+
+ case NFA_DM_RF_INTF_ACTIVATED_NTF:
+ /* unexpected activation, deactivate to idle */
+ nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
+ NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
break;
case NFA_DM_LP_LISTEN_CMD:
@@ -1568,38 +1695,76 @@
break;
case NFA_DM_RF_DEACTIVATE_RSP:
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
- nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
- nfa_dm_start_rf_discover ();
+
+ /* if it's not race condition between deactivate CMD and activate NTF */
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+ {
+ /* do not notify deactivated to idle in RF discovery state
+ ** because it is internal or stopping RF discovery
+ */
+
+ /* there was no activation while waiting for deactivation RSP */
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ nfa_dm_start_rf_discover ();
+ }
break;
case NFA_DM_RF_DISCOVER_NTF:
nfa_dm_disc_new_state (NFA_DM_RFST_W4_ALL_DISCOVERIES);
nfa_dm_notify_discovery (p_data);
break;
case NFA_DM_RF_INTF_ACTIVATED_NTF:
- if (p_data->nfc_discover.activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF)
+ if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)
{
- nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
- }
- else if (p_data->nfc_discover.activate.rf_tech_param.mode & 0x80)
- {
- /* Listen mode */
- nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
+ NFA_TRACE_DEBUG0 ("RF Activated while waiting for deactivation RSP");
+ /* it's race condition. DH has to wait for deactivation NTF */
+ nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_NTF;
}
else
{
- /* Poll mode */
- nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE);
- }
+ if (p_data->nfc_discover.activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF)
+ {
+ nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
+ }
+ else if (p_data->nfc_discover.activate.rf_tech_param.mode & 0x80)
+ {
+ /* Listen mode */
+ nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
+ }
+ else
+ {
+ /* Poll mode */
+ nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE);
+ }
- if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED)
- {
- NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf");
+ if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED)
+ {
+ NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf");
- /* after receiving deactivate event, restart discovery */
- NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+ /* after receiving deactivate event, restart discovery */
+ nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
+ NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+ }
}
break;
+ case NFA_DM_RF_DEACTIVATE_NTF:
+ /* if there was race condition between deactivate CMD and activate NTF */
+ if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)
+ {
+ /* race condition is resolved */
+ nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP))
+ {
+ /* do not notify deactivated to idle in RF discovery state
+ ** because it is internal or stopping RF discovery
+ */
+
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ nfa_dm_start_rf_discover ();
+ }
+ }
+ break;
case NFA_DM_LP_LISTEN_CMD:
break;
case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1635,16 +1800,23 @@
break;
case NFA_DM_RF_DEACTIVATE_RSP:
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
+ /* notify exiting from w4 all discoverie state */
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
nfa_dm_start_rf_discover ();
break;
case NFA_DM_RF_DISCOVER_NTF:
- /* Notification Type = NCI_DISCOVER_NTF_LAST or NCI_DISCOVER_NTF_LAST_ABORT */
- if (p_data->nfc_discover.result.more != NCI_DISCOVER_NTF_MORE)
+ /* if deactivate CMD is already sent then ignore discover NTF */
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP))
{
- nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT);
+ /* Notification Type = NCI_DISCOVER_NTF_LAST or NCI_DISCOVER_NTF_LAST_ABORT */
+ if (p_data->nfc_discover.result.more != NCI_DISCOVER_NTF_MORE)
+ {
+ nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT);
+ }
+ nfa_dm_notify_discovery (p_data);
}
- nfa_dm_notify_discovery (p_data);
break;
case NFA_DM_RF_INTF_ACTIVATED_NTF:
/*
@@ -1722,14 +1894,8 @@
nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE);
if (old_pres_check_flag)
{
- /* notify RW module of presence of tag */
- nfa_rw_handle_presence_check_rsp (NFC_STATUS_OK);
- if (nfa_dm_cb.presence_check_deact_pending)
- {
- nfa_dm_cb.presence_check_deact_pending = FALSE;
- nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD,
- (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.presence_check_deact_type);
- }
+ /* Handle presence check success: notify RW module of presence of tag; if deactivation is pending then deactivate */
+ nfa_dm_disc_end_presence_check (NFC_STATUS_OK);
}
else if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED)
@@ -1756,10 +1922,11 @@
break;
case NFA_DM_RF_DEACTIVATE_RSP:
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
- nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
- nfa_dm_start_rf_discover ();
/* notify exiting from host select state */
nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ nfa_dm_start_rf_discover ();
break;
case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1781,12 +1948,6 @@
/* performing presence check for unknow protocol and exception conditions happened
* clear presence check information and report failure */
nfa_dm_disc_end_presence_check (NFC_STATUS_FAILED);
- if (nfa_dm_cb.presence_check_deact_pending)
- {
- nfa_dm_cb.presence_check_deact_pending = FALSE;
-
- NFC_Deactivate (nfa_dm_cb.presence_check_deact_type);
- }
}
}
@@ -1806,6 +1967,7 @@
tNFA_DM_DISC_FLAGS old_pres_check_flag = (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING);
BOOLEAN pres_check_event = FALSE;
BOOLEAN pres_check_event_processed = FALSE;
+ tNFC_DEACTIVATE_DEVT deact;
switch (event)
{
@@ -1827,10 +1989,38 @@
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
/* register callback to get interface error NTF */
NFC_SetStaticRfCback (nfa_dm_disc_data_cback);
+
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+ {
+ /* it's race condition. received deactivate NTF before receiving RSP */
+
+ deact.status = NFC_STATUS_OK;
+ deact.type = NFC_DEACTIVATE_TYPE_IDLE;
+ deact.is_ntf = TRUE;
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+
+ /* NFCC is in IDLE state */
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ nfa_dm_start_rf_discover ();
+ }
break;
case NFA_DM_RF_DEACTIVATE_NTF:
- pres_check_event = TRUE;
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+
+ nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+
+ if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)
+ {
+ /* it's race condition. received deactivate NTF before receiving RSP */
+ /* notify deactivation after receiving deactivate RSP */
+ NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP");
+ break;
+ }
+
+ pres_check_event = TRUE;
+
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+
if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) )
{
@@ -1841,14 +2031,12 @@
/* process pending deactivate request */
if (nfa_dm_cb.presence_check_deact_pending)
{
- nfa_dm_cb.presence_check_deact_pending = FALSE;
/* notify RW module that presence checking is finished */
+ /* if deactivation is pending then deactivate */
nfa_dm_disc_end_presence_check (NFC_STATUS_OK);
- if (nfa_dm_cb.presence_check_deact_type == NFC_DEACTIVATE_TYPE_IDLE)
- NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
- else
- nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+ /* Notify NFA RW sub-systems because NFA_DM_RF_DEACTIVATE_RSP will not call this function */
+ nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, TRUE);
}
else
{
@@ -1875,7 +2063,6 @@
NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
}
}
- nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
break;
case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1893,12 +2080,6 @@
/* performing presence check for unknow protocol and exception conditions happened
* clear presence check information and report failure */
nfa_dm_disc_end_presence_check (NFC_STATUS_FAILED);
- if (nfa_dm_cb.presence_check_deact_pending)
- {
- nfa_dm_cb.presence_check_deact_pending = FALSE;
-
- NFC_Deactivate (nfa_dm_cb.presence_check_deact_type);
- }
}
}
@@ -1914,6 +2095,8 @@
static void nfa_dm_disc_sm_listen_active (tNFA_DM_RF_DISC_SM_EVENT event,
tNFA_DM_RF_DISC_DATA *p_data)
{
+ tNFC_DEACTIVATE_DEVT deact;
+
switch (event)
{
case NFA_DM_RF_DEACTIVATE_CMD:
@@ -1921,32 +2104,56 @@
break;
case NFA_DM_RF_DEACTIVATE_RSP:
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
- break;
- case NFA_DM_RF_DEACTIVATE_NTF:
- /* clear both W4_RSP and W4_NTF because of race condition between deactivat CMD and link loss */
- nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
-
- if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)
+ if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
{
+ /* it's race condition. received deactivate NTF before receiving RSP */
+
+ deact.status = NFC_STATUS_OK;
+ deact.type = NFC_DEACTIVATE_TYPE_IDLE;
+ deact.is_ntf = TRUE;
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+
+ /* NFCC is in IDLE state */
nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
nfa_dm_start_rf_discover ();
}
- else if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
- ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) )
+ break;
+ case NFA_DM_RF_DEACTIVATE_NTF:
+ nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+
+ nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+
+ if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)
{
- nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_SLEEP);
+ /* it's race condition. received deactivate NTF before receiving RSP */
+ /* notify deactivation after receiving deactivate RSP */
+ NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP");
}
- else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)
+ else
{
- /* Discovery */
- nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY);
- if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+
+ if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)
{
- /* stop discovery */
- NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ nfa_dm_start_rf_discover ();
+ }
+ else if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
+ ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) )
+ {
+ nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_SLEEP);
+ }
+ else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)
+ {
+ /* Discovery */
+ nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY);
+ if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)
+ {
+ /* stop discovery */
+ NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+ }
}
}
- nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
break;
case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1973,19 +2180,33 @@
{
case NFA_DM_RF_DEACTIVATE_CMD:
nfa_dm_send_deactivate_cmd (p_data->deactivate_type);
+
+ /* if deactivate type is not discovery then NFCC will not sent deactivation NTF */
+ if (p_data->deactivate_type != NFA_DEACTIVATE_TYPE_DISCOVERY)
+ {
+ nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+ nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+ }
break;
case NFA_DM_RF_DEACTIVATE_RSP:
nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
/* if deactivate type in CMD was IDLE */
if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
{
- nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
+ nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+ nfa_dm_start_rf_discover ();
}
break;
case NFA_DM_RF_DEACTIVATE_NTF:
/* clear both W4_RSP and W4_NTF because of race condition between deactivat CMD and link loss */
nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
+ nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+
+ /* there is no active protocol in this state, so broadcast to all by using NFA_DM_RF_DEACTIVATE_RSP */
+ nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)
{
nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
@@ -2001,7 +2222,6 @@
nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
nfa_dm_start_rf_discover ();
}
- nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
break;
case NFA_DM_RF_INTF_ACTIVATED_NTF:
nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.c
index 6829143..b63bce7 100644
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA device manager.
diff --git a/src/nfa/dm/nfa_dm_ndef.c b/src/nfa/dm/nfa_dm_ndef.c
index c3e63b2..e5528ec 100644
--- a/src/nfa/dm/nfa_dm_ndef.c
+++ b/src/nfa/dm/nfa_dm_ndef.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Handle ndef messages
@@ -266,7 +267,7 @@
{
/* This is a handler for a specific URI type */
/* Check if this recurd is WKT URI */
- if ((type_name_len == 1) && (*p_type_name == 'U'))
+ if ((p_payload) && (type_name_len == 1) && (*p_type_name == 'U'))
{
/* Check if URI prefix abrieviation matches */
if ((payload_len>1) && (p_payload[0] == p_cb->p_ndef_handler[i]->uri_id))
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index ebe7a7b..78400ed 100644
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the action functions for NFA-EE
@@ -82,7 +83,7 @@
static void nfa_ee_check_restore_complete(void);
static void nfa_ee_report_discover_req_evt(void);
-
+static void nfa_ee_build_discover_req_evt (tNFA_EE_DISCOVER_REQ *p_evt_data);
/*******************************************************************************
**
** Function nfa_ee_conn_cback
@@ -296,15 +297,19 @@
for (xx = 0; xx < NFA_EE_MAX_CBACKS; xx++)
{
if (nfa_ee_cb.p_ee_cback[xx] == NULL)
- {
- nfa_ee_cb.p_ee_cback[xx] = p_cback;
- evt_data.ee_register = NFA_STATUS_OK;
- break;
+ {
+ nfa_ee_cb.p_ee_cback[xx] = p_cback;
+ evt_data.ee_register = NFA_STATUS_OK;
+ break;
+ }
}
}
- }
/* This callback is verified (not NULL) in NFA_EeRegister() */
(*p_cback)(NFA_EE_REGISTER_EVT, &evt_data);
+
+ /* report NFCEE Discovery Request collected during booting up */
+ nfa_ee_build_discover_req_evt (&evt_data.discover_req);
+ (*p_cback)(NFA_EE_DISCOVER_REQ_EVT, &evt_data);
}
/*******************************************************************************
@@ -703,13 +708,13 @@
{
nfa_sys_cback_notify_enable_complete (NFA_ID_EE);
if (nfa_ee_cb.p_enable_cback)
- (*nfa_ee_cb.p_enable_cback)(FALSE);
+ (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_ON);
}
else if ((nfa_ee_cb.em_state == NFA_EE_EM_STATE_RESTORING) && (nfa_ee_cb.ee_flags & NFA_EE_FLAG_NOTIFY_HCI) )
{
nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_NOTIFY_HCI;
if (nfa_ee_cb.p_enable_cback)
- (*nfa_ee_cb.p_enable_cback)(FALSE);
+ (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_ON);
}
}
@@ -1033,6 +1038,7 @@
p_cb->ecb_flags &= ~NFA_EE_ECB_FLAGS_ORDER;
nfa_ee_report_discover_req_evt();
}
+
}
if (new_em_state != NFA_EE_EM_STATE_MAX)
@@ -1098,6 +1104,52 @@
/*******************************************************************************
**
+** Function nfa_ee_build_discover_req_evt
+**
+** Description Build NFA_EE_DISCOVER_REQ_EVT for all active NFCEE
+**
+** Returns void
+**
+*******************************************************************************/
+static void nfa_ee_build_discover_req_evt (tNFA_EE_DISCOVER_REQ *p_evt_data)
+{
+ tNFA_EE_ECB *p_cb;
+ tNFA_EE_DISCOVER_INFO *p_info;
+ UINT8 xx;
+
+ if (!p_evt_data)
+ return;
+
+ p_evt_data->num_ee = 0;
+ p_cb = nfa_ee_cb.ecb;
+ p_info = p_evt_data->ee_disc_info;
+
+ for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
+ {
+ if ( (p_cb->ee_status & NFA_EE_STATUS_INT_MASK)
+ ||(p_cb->ee_status != NFA_EE_STATUS_ACTIVE)
+ ||((p_cb->ecb_flags & NFA_EE_ECB_FLAGS_DISC_REQ) == 0) )
+ {
+ continue;
+ }
+ p_info->ee_handle = (tNFA_HANDLE)p_cb->nfcee_id | NFA_HANDLE_GROUP_EE;
+ p_info->la_protocol = p_cb->la_protocol;
+ p_info->lb_protocol = p_cb->lb_protocol;
+ p_info->lf_protocol = p_cb->lf_protocol;
+ p_info->lbp_protocol = p_cb->lbp_protocol;
+ p_evt_data->num_ee++;
+ p_info++;
+
+ NFA_TRACE_DEBUG6 ("[%d] ee_handle:0x%x, listen protocol A:%d, B:%d, F:%d, BP:%d",
+ p_evt_data->num_ee, p_cb->nfcee_id,
+ p_cb->la_protocol, p_cb->lb_protocol, p_cb->lf_protocol, p_cb->lbp_protocol);
+ }
+
+ p_evt_data->status = NFA_STATUS_OK;
+}
+
+/*******************************************************************************
+**
** Function nfa_ee_report_discover_req_evt
**
** Description Report NFA_EE_DISCOVER_REQ_EVT for all active NFCEE
@@ -1108,9 +1160,10 @@
static void nfa_ee_report_discover_req_evt(void)
{
tNFA_EE_DISCOVER_REQ evt_data;
- tNFA_EE_DISCOVER_INFO *p_info;
- UINT8 xx;
- tNFA_EE_ECB *p_cb = nfa_ee_cb.ecb;
+
+ if (nfa_ee_cb.p_enable_cback)
+ (*nfa_ee_cb.p_enable_cback) (NFA_EE_DISC_STS_REQ);
+
/* if this is restoring NFCC */
if (!nfa_dm_is_active ())
@@ -1119,28 +1172,7 @@
return;
}
- evt_data.num_ee = 0;
- p_cb = nfa_ee_cb.ecb;
- p_info = evt_data.ee_disc_info;
- for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
- {
- if ((p_cb->ee_status & NFA_EE_STATUS_INT_MASK) || (p_cb->ee_status != NFA_EE_STATUS_ACTIVE) || ((p_cb->ecb_flags & NFA_EE_ECB_FLAGS_DISC_REQ) == 0))
- {
- continue;
- }
- p_info->la_protocol = p_cb->la_protocol;
- p_info->lb_protocol = p_cb->lb_protocol;
- p_info->lf_protocol = p_cb->lf_protocol;
- p_info->lbp_protocol = p_cb->lbp_protocol;
- evt_data.num_ee++;
- p_info++;
-
- NFA_TRACE_DEBUG6 ("[%d] ee_handle:0x%x, listen protocol A:%d, B:%d, F:%d, BP:%d",
- evt_data.num_ee, p_cb->nfcee_id,
- p_cb->la_protocol, p_cb->lb_protocol, p_cb->lf_protocol, p_cb->lbp_protocol);
- }
-
- evt_data.status = NFA_STATUS_OK;
+ nfa_ee_build_discover_req_evt (&evt_data);
nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT, (tNFA_EE_CBACK_DATA *)&evt_data);
}
@@ -1293,7 +1325,20 @@
p_cb->p_ee_cback = NULL;
p_cb->conn_id = 0;
if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLING)
- nfa_ee_sys_disable();
+ {
+ if (nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN)
+ {
+ if (nfa_ee_cb.num_ee_expecting)
+ {
+ nfa_ee_cb.num_ee_expecting--;
+ }
+ }
+ if (nfa_ee_cb.num_ee_expecting == 0)
+ {
+ nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_WAIT_DISCONN;
+ nfa_ee_check_disable();
+ }
+ }
break;
case NFC_DATA_CEVT:
@@ -1402,29 +1447,31 @@
p_cb->la_protocol, p_cb->lb_protocol, p_cb->lf_protocol);
}
else
+ {
+ if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A)
{
- if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A)
- {
- p_cb->la_protocol = 0;
- }
- else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B)
- {
- p_cb->lb_protocol = 0;
- }
- else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F)
- {
- p_cb->lf_protocol = 0;
- }
- else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME)
- {
- p_cb->lbp_protocol = 0;
+ p_cb->la_protocol = 0;
}
+ else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B)
+ {
+ p_cb->lb_protocol = 0;
+ }
+ else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F)
+ {
+ p_cb->lf_protocol = 0;
+ }
+ else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME)
+ {
+ p_cb->lbp_protocol = 0;
+ }
}
}
+
/* Report NFA_EE_DISCOVER_REQ_EVT for all active NFCEE */
if ((p_cb->ecb_flags & NFA_EE_ECB_FLAGS_ORDER) == 0)
nfa_ee_report_discover_req_evt();
+
}
/*******************************************************************************
@@ -1771,7 +1818,7 @@
{
NFC_NfceeDiscover(FALSE);
if (nfa_ee_cb.p_enable_cback)
- (*nfa_ee_cb.p_enable_cback)(TRUE);
+ (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_OFF);
}
/*******************************************************************************
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.c
index dceacec..efb6907 100644
--- a/src/nfa/ee/nfa_ee_api.c
+++ b/src/nfa/ee/nfa_ee_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface to NFCEE - API functions
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.c
index 6b0c289..8af4290 100644
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA EE.
@@ -233,7 +234,8 @@
p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE;
}
}
- nfa_ee_cb.em_state = NFA_EE_EM_STATE_RESTORING;
+ nfa_ee_cb.em_state = NFA_EE_EM_STATE_RESTORING;
+ nfa_ee_cb.num_ee_expecting = 0;
if (nfa_sys_is_register (NFA_ID_HCI))
{
nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_HCI;
@@ -435,6 +437,7 @@
UINT32 xx;
tNFA_EE_ECB *p_cb;
tNFA_EE_MSG msg;
+
NFA_TRACE_DEBUG0 ("nfa_ee_sys_disable ()");
nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
@@ -448,6 +451,7 @@
}
}
+ nfa_ee_cb.num_ee_expecting = 0;
p_cb = nfa_ee_cb.ecb;
for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
{
@@ -458,7 +462,7 @@
/* Disconnect NCI connection on graceful shutdown */
msg.disconnect.p_cb = p_cb;
nfa_ee_api_disconnect (&msg);
- nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLING;
+ nfa_ee_cb.num_ee_expecting++;
}
else
{
@@ -469,11 +473,18 @@
}
}
}
+
+ if (nfa_ee_cb.num_ee_expecting)
+ {
+ nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_DISCONN;
+ nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLING;
+ }
+
+
nfa_sys_stop_timer (&nfa_ee_cb.timer);
nfa_sys_stop_timer (&nfa_ee_cb.discv_timer);
/* If Application initiated NFCEE discovery, fake/report the event */
- nfa_ee_cb.num_ee_expecting = 0;
nfa_ee_report_disc_done (FALSE);
/* deregister message handler on NFA SYS */
@@ -481,6 +492,24 @@
nfa_sys_deregister (NFA_ID_EE);
}
+
+/*******************************************************************************
+**
+** Function nfa_ee_check_disable
+**
+** Description Check if it is safe to move to disabled state
+**
+** Returns None
+**
+*******************************************************************************/
+void nfa_ee_check_disable (void)
+{
+ if (!(nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN))
+ {
+ nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
+ nfa_sys_deregister (NFA_ID_EE);
+ }
+}
/*******************************************************************************
**
** Function nfa_ee_reg_cback_enable_done
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.c
index f89061c..0622cc3 100644
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the action functions for the NFA HCI.
@@ -28,6 +29,7 @@
#include "nfa_sys_int.h"
#include "nfa_hci_api.h"
#include "nfa_hci_int.h"
+#include "nfa_dm_int.h"
#include "nfa_nv_co.h"
#include "nfa_mem_co.h"
#include "nfa_hci_defs.h"
@@ -71,7 +73,6 @@
BT_HDR *p_msg;
tNFA_HCI_EVENT_DATA *p_evt_data;
BOOLEAN b_free;
- UINT8 b_cmd_flag = 0;
/* If busy, or API queue is empty, then exit */
if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_IDLE)
@@ -351,7 +352,7 @@
}
/* See if any pipe is owned by this app */
- if ((p_pipe = nfa_hciu_find_pipe_by_owner (nfa_hci_cb.app_in_use)) == NULL)
+ if (nfa_hciu_find_pipe_by_owner (nfa_hci_cb.app_in_use) == NULL)
{
/* No pipes, release all gates owned by this app */
while ((p_gate = nfa_hciu_find_gate_by_owner (nfa_hci_cb.app_in_use)) != NULL)
@@ -436,6 +437,21 @@
}
}
}
+
+ evt_data.gates_pipes.num_uicc_created_pipes = 0;
+ /* Loop through all pipes that are connected to connectivity gate */
+ for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
+ {
+ if (pp->pipe_id != 0 && pp->local_gate == NFA_HCI_CONNECTIVITY_GATE)
+ {
+ memcpy (&evt_data.gates_pipes.uicc_created_pipe [evt_data.gates_pipes.num_uicc_created_pipes++], pp, sizeof (tNFA_HCI_PIPE_INFO));
+ }
+ else if (pp->pipe_id != 0 && pp->local_gate == NFA_HCI_LOOP_BACK_GATE)
+ {
+ memcpy (&evt_data.gates_pipes.uicc_created_pipe [evt_data.gates_pipes.num_uicc_created_pipes++], pp, sizeof (tNFA_HCI_PIPE_INFO));
+ }
+ }
+
evt_data.gates_pipes.status = NFA_STATUS_OK;
/* notify NFA_HCI_GET_GATE_PIPE_LIST_EVT to the application */
@@ -512,7 +528,7 @@
else
{
/* See if any pipe is owned by this app */
- if ((p_pipe = nfa_hciu_find_pipe_on_gate (p_gate->gate_id)) == NULL)
+ if (nfa_hciu_find_pipe_on_gate (p_gate->gate_id) == NULL)
{
nfa_hciu_release_gate (p_gate->gate_id);
@@ -561,15 +577,12 @@
nfa_hci_cb.app_in_use = p_evt_data->get_host_list.hci_handle;
- /* First, check if the application handle is valid */
- if ( ((nfa_hci_cb.app_in_use & NFA_HANDLE_GROUP_MASK) != NFA_HANDLE_GROUP_HCI)
- ||(app_inx >= NFA_HCI_MAX_APP_CB)
- ||(nfa_hci_cb.p_app_cback[app_inx] == NULL) )
+ /* Send Get Host List command on "Internal request" or requested by registered application with valid handle and callback function */
+ if ( (nfa_hci_cb.app_in_use == NFA_HANDLE_INVALID)
+ ||((app_inx < NFA_HCI_MAX_APP_CB) && (nfa_hci_cb.p_app_cback[app_inx] != NULL)) )
{
- return;
+ nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
}
-
- nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
}
/*******************************************************************************
@@ -856,7 +869,7 @@
app_handle = nfa_hciu_get_pipe_owner (p_evt_data->send_cmd.pipe);
if ( (nfa_hciu_is_active_host (p_pipe->dest_host))
- &&(app_handle == p_evt_data->send_cmd.hci_handle) )
+ &&((app_handle == p_evt_data->send_cmd.hci_handle || p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE)) )
{
if (nfa_hciu_is_host_reseting (p_pipe->dest_host))
{
@@ -915,7 +928,7 @@
app_handle = nfa_hciu_get_pipe_owner (p_evt_data->send_rsp.pipe);
if ( (nfa_hciu_is_active_host (p_pipe->dest_host))
- &&(app_handle == p_evt_data->send_rsp.hci_handle) )
+ &&((app_handle == p_evt_data->send_rsp.hci_handle || p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE)) )
{
if (p_pipe->pipe_state == NFA_HCI_PIPE_OPENED)
{
@@ -967,7 +980,7 @@
app_handle = nfa_hciu_get_pipe_owner (p_evt_data->send_evt.pipe);
if ( (nfa_hciu_is_active_host (p_pipe->dest_host))
- &&(app_handle == p_evt_data->send_evt.hci_handle) )
+ &&((app_handle == p_evt_data->send_evt.hci_handle || p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE)) )
{
if (nfa_hciu_is_host_reseting (p_pipe->dest_host))
{
@@ -982,6 +995,12 @@
if (status == NFA_STATUS_OK)
{
+ if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
+ {
+ nfa_hci_cb.w4_rsp_evt = TRUE;
+ nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
+ }
+
if (p_evt_data->send_evt.rsp_len)
{
nfa_hci_cb.pipe_in_use = p_evt_data->send_evt.pipe;
@@ -993,9 +1012,18 @@
nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_evt_data->send_evt.rsp_timeout);
}
+ else if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
+ {
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
+ }
}
else
{
+ if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
+ {
+ nfa_hci_cb.pipe_in_use = p_evt_data->send_evt.pipe;
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
+ }
nfa_hci_cb.rsp_buf_size = 0;
nfa_hci_cb.p_rsp_buf = NULL;
}
@@ -1019,7 +1047,7 @@
evt_data.evt_sent.status = status;
- /* Send NFC_HCI_EVENT_SENT_EVT to notify failure */
+ /* Send NFC_HCI_EVENT_SENT_EVT to notify status */
nfa_hciu_send_to_app (NFA_HCI_EVENT_SENT_EVT, &evt_data, p_evt_data->send_evt.hci_handle);
return TRUE;
}
@@ -1322,7 +1350,8 @@
/* If starting up, handle events here */
if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
- ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) )
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE))
{
if (nfa_hci_cb.inst != NFA_HCI_ANY_OK)
{
@@ -1341,11 +1370,9 @@
}
else if (nfa_hci_cb.param_in_use == NFA_HCI_WHITELIST_INDEX)
{
- if (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE) )
nfa_hci_dh_startup_complete ();
-
- else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
- nfa_hci_startup_complete (NFA_STATUS_OK);
}
break;
@@ -1382,7 +1409,7 @@
if (!memcmp ((UINT8 *) nfa_hci_cb.cfg.admin_gate.session_id, p_data, NFA_HCI_SESSION_ID_LEN) )
{
/* Session has not changed. Set the WHITELIST */
- nfa_hciu_send_set_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_WHITELIST_INDEX, 0x01, hosts);
+ nfa_hciu_send_set_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_WHITELIST_INDEX, 0x02, hosts);
}
else
{
@@ -1594,7 +1621,8 @@
*******************************************************************************/
void nfa_hci_handle_admin_gate_evt (UINT8 *p_data)
{
- tNFA_HCI_EVT_DATA evt_data;
+ tNFA_HCI_EVT_DATA evt_data;
+ tNFA_HCI_API_GET_HOST_LIST *p_msg;
if (nfa_hci_cb.inst != NFA_HCI_EVT_HOT_PLUG)
{
@@ -1602,10 +1630,52 @@
return;
}
- evt_data.rcvd_evt.evt_code = nfa_hci_cb.inst;
+ NFA_TRACE_DEBUG0 ("nfa_hci_handle_admin_gate_evt - HOT PLUG EVT event on ADMIN Pipe");
+ nfa_hci_cb.num_hot_plug_evts++;
- nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
- nfa_hciu_send_to_all_apps (NFA_HCI_EVENT_RCVD_EVT, &evt_data);
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) )
+ {
+ /* Received Hot Plug evt while waiting for other Host in the network to bootup after DH host bootup is complete */
+ if ( (nfa_hci_cb.ee_disable_disc)
+ &&(nfa_hci_cb.num_hot_plug_evts == (nfa_hci_cb.num_nfcee - 1))
+ &&(nfa_hci_cb.num_ee_dis_req_ntf < (nfa_hci_cb.num_nfcee - 1)) )
+ {
+ /* Received expected number of Hot Plug event(s) before as many number of EE DISC REQ Ntf(s) are received */
+ nfa_sys_stop_timer (&nfa_hci_cb.timer);
+ /* Received HOT PLUG EVT(s), now wait some more time for EE DISC REQ Ntf(s) */
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+ }
+ }
+ else if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE) )
+ {
+ /* Received Hot Plug evt during DH host bootup */
+ if ( (nfa_hci_cb.ee_disable_disc)
+ &&(nfa_hci_cb.num_hot_plug_evts == (nfa_hci_cb.num_nfcee - 1))
+ &&(nfa_hci_cb.num_ee_dis_req_ntf < (nfa_hci_cb.num_nfcee - 1)) )
+ {
+ /* Received expected number of Hot Plug event(s) before as many number of EE DISC REQ Ntf(s) are received */
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ }
+ }
+ else
+ {
+ /* Received Hot Plug evt on UICC self reset */
+ evt_data.rcvd_evt.evt_code = nfa_hci_cb.inst;
+ /* Notify all registered application with the HOT_PLUG_EVT */
+ nfa_hciu_send_to_all_apps (NFA_HCI_EVENT_RCVD_EVT, &evt_data);
+
+ /* Send Get Host List after receiving any pending response */
+ if ((p_msg = (tNFA_HCI_API_GET_HOST_LIST *) GKI_getbuf (sizeof (tNFA_HCI_API_GET_HOST_LIST))) != NULL)
+ {
+ p_msg->hdr.event = NFA_HCI_API_GET_HOST_LIST_EVT;
+ /* Set Invalid handle to identify this Get Host List command is internal */
+ p_msg->hci_handle = NFA_HANDLE_INVALID;
+
+ nfa_sys_sendmsg (p_msg);
+ }
+ }
}
/*******************************************************************************
@@ -1796,8 +1866,7 @@
data_len--;
evt_data.registry.data_len = data_len;
- if (data_len <= NFA_MAX_HCI_DATA_LEN)
- memcpy (evt_data.registry.reg_data, p_data, data_len);
+ memcpy (evt_data.registry.reg_data, p_data, data_len);
nfa_hciu_send_to_app (NFA_HCI_SET_REG_CMD_EVT, &evt_data, app_handle);
break;
@@ -1959,6 +2028,17 @@
p_pipe->pipe_state = NFA_HCI_PIPE_OPENED;
else if (nfa_hci_cb.cmd_sent == NFA_HCI_ANY_CLOSE_PIPE)
p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED;
+
+ /* Could be a response to application specific command sent, pass it on */
+ evt_data.rsp_rcvd.status = NFA_STATUS_OK;
+ evt_data.rsp_rcvd.pipe = p_pipe->pipe_id;;
+ evt_data.rsp_rcvd.rsp_code = nfa_hci_cb.inst;
+ evt_data.rsp_rcvd.rsp_len = data_len;
+
+ if (data_len <= NFA_MAX_HCI_RSP_LEN)
+ memcpy (evt_data.rsp_rcvd.rsp_data, p_data, data_len);
+
+ nfa_hciu_send_to_app (NFA_HCI_RSP_RCVD_EVT, &evt_data, nfa_hci_cb.app_in_use);
}
else if (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
{
@@ -1986,7 +2066,7 @@
UINT8 data[1];
UINT8 rsp_len = 0;
tNFA_HCI_RESPONSE response = NFA_HCI_ANY_OK;
-
+ tNFA_HCI_EVT_DATA evt_data;
/* Check if data packet is a command, response or event */
if (nfa_hci_cb.type == NFA_HCI_COMMAND_TYPE)
@@ -2002,19 +2082,40 @@
p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED;
}
else
- response = NFA_HCI_ANY_E_PIPE_NOT_OPENED;
+ response = NFA_HCI_ANY_E_CMD_NOT_SUPPORTED;
nfa_hciu_send_msg (p_pipe->pipe_id, NFA_HCI_RESPONSE_TYPE, response, rsp_len, data);
}
else if (nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE)
{
- /* Since we never send any commands on our local loopback gate,
- * there should not be any response.
- */
+ if ((nfa_hci_cb.cmd_sent == NFA_HCI_ANY_OPEN_PIPE) && (nfa_hci_cb.inst == NFA_HCI_ANY_OK))
+ p_pipe->pipe_state = NFA_HCI_PIPE_OPENED;
+ else if (nfa_hci_cb.cmd_sent == NFA_HCI_ANY_CLOSE_PIPE)
+ p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED;
+
+ /* Could be a response to application specific command sent, pass it on */
+ evt_data.rsp_rcvd.status = NFA_STATUS_OK;
+ evt_data.rsp_rcvd.pipe = p_pipe->pipe_id;;
+ evt_data.rsp_rcvd.rsp_code = nfa_hci_cb.inst;
+ evt_data.rsp_rcvd.rsp_len = data_len;
+
+ if (data_len <= NFA_MAX_HCI_RSP_LEN)
+ memcpy (evt_data.rsp_rcvd.rsp_data, p_data, data_len);
+
+ nfa_hciu_send_to_app (NFA_HCI_RSP_RCVD_EVT, &evt_data, nfa_hci_cb.app_in_use);
}
else if (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
{
- if (nfa_hci_cb.inst == NFA_HCI_EVT_POST_DATA)
+ if (nfa_hci_cb.w4_rsp_evt)
+ {
+ evt_data.rcvd_evt.pipe = p_pipe->pipe_id;
+ evt_data.rcvd_evt.evt_code = nfa_hci_cb.inst;
+ evt_data.rcvd_evt.evt_len = data_len;
+ evt_data.rcvd_evt.p_evt_buf = p_data;
+
+ nfa_hciu_send_to_app (NFA_HCI_EVENT_RCVD_EVT, &evt_data, nfa_hci_cb.app_in_use);
+ }
+ else if (nfa_hci_cb.inst == NFA_HCI_EVT_POST_DATA)
{
/* Send back the same data we got */
nfa_hciu_send_msg (p_pipe->pipe_id, NFA_HCI_EVENT_TYPE, NFA_HCI_EVT_POST_DATA, data_len, p_data);
diff --git a/src/nfa/hci/nfa_hci_api.c b/src/nfa/hci/nfa_hci_api.c
index 4b28987..987ce8b 100644
--- a/src/nfa/hci/nfa_hci_api.c
+++ b/src/nfa/hci/nfa_hci_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface to HCI
diff --git a/src/nfa/hci/nfa_hci_ci.c b/src/nfa/hci/nfa_hci_ci.c
index a368d13..3ee65bd 100644
--- a/src/nfa/hci/nfa_hci_ci.c
+++ b/src/nfa/hci/nfa_hci_ci.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the call-in functions for NFA HCI
@@ -47,13 +48,11 @@
if ( (status == NFA_STATUS_OK)
&&(num_bytes_read != 0) )
- {
p_msg->nv_read.status = NFA_STATUS_OK;
- p_msg->nv_read.size = num_bytes_read;
- }
else
p_msg->nv_read.status = NFA_STATUS_FAILED;
+ p_msg->nv_read.size = num_bytes_read;
p_msg->nv_read.block = block;
nfa_sys_sendmsg (p_msg);
}
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.c
index ebcc588..76d7f38 100644
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA HCI.
@@ -85,25 +86,92 @@
** Returns None
**
*******************************************************************************/
-void nfa_hci_ee_info_cback (BOOLEAN disable_discover)
+void nfa_hci_ee_info_cback (tNFA_EE_DISC_STS status)
{
- NFA_TRACE_DEBUG1 ("nfa_hci_ee_info_cback (): %d", disable_discover);
+ UINT8 num_nfcee = 3;
+ tNFA_EE_INFO ee_info[3];
- /* Notify EE Discovery is complete */
+ NFA_TRACE_DEBUG1 ("nfa_hci_ee_info_cback (): %d", status);
- if (disable_discover)
+ switch (status)
{
- nfa_hci_cb.w4_hci_netwk_init = FALSE;
- if (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
- {
- nfa_sys_stop_timer (&nfa_hci_cb.timer);
- nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
- }
- }
- else
- {
- nfa_hci_cb.ee_disc_cmplt = TRUE;
+ case NFA_EE_DISC_STS_ON:
+ /* NFCEE Discovery is in progress */
+ nfa_hci_cb.ee_disc_cmplt = TRUE;
+ nfa_hci_cb.ee_disable_disc = FALSE;
+ nfa_hci_cb.num_ee_dis_req_ntf = 0;
+ nfa_hci_cb.num_hot_plug_evts = 0;
+ nfa_hci_cb.conn_id = 0;
nfa_hci_startup ();
+ break;
+
+ case NFA_EE_DISC_STS_OFF:
+ nfa_hci_cb.ee_disable_disc = TRUE;
+ /* Discovery operation is complete, retrieve discovery result */
+ NFA_EeGetInfo (&num_nfcee, ee_info);
+ nfa_hci_cb.num_nfcee = num_nfcee;
+
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) )
+ {
+ if ( (nfa_hci_cb.num_nfcee <= 1)
+ ||(nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1))
+ ||(nfa_hci_cb.num_hot_plug_evts == (nfa_hci_cb.num_nfcee - 1)) )
+ {
+ /* No UICC Host is detected or
+ * HOT_PLUG_EVT(s) and or EE DISC REQ Ntf(s) are already received
+ * Get Host list and notify SYS on Initialization complete */
+ nfa_sys_stop_timer (&nfa_hci_cb.timer);
+ if ( (nfa_hci_cb.num_nfcee > 1)
+ &&(nfa_hci_cb.num_ee_dis_req_ntf != (nfa_hci_cb.num_nfcee - 1)) )
+ {
+ /* Received HOT PLUG EVT, we will also wait for EE DISC REQ Ntf(s) */
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+ }
+ else
+ {
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ }
+ }
+ }
+ else if (nfa_hci_cb.num_nfcee <= 1)
+ {
+ /* No UICC Host is detected, HCI NETWORK is enabled */
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ }
+ break;
+
+ case NFA_EE_DISC_STS_REQ:
+ nfa_hci_cb.num_ee_dis_req_ntf++;
+
+ if (nfa_hci_cb.ee_disable_disc)
+ {
+ /* Already received Discovery Ntf */
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) )
+ {
+ /* Received DISC REQ Ntf while waiting for other Host in the network to bootup after DH host bootup is complete */
+ if (nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1))
+ {
+ /* Received expected number of EE DISC REQ Ntf(s) */
+ nfa_sys_stop_timer (&nfa_hci_cb.timer);
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ }
+ }
+ else if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE) )
+ {
+ /* Received DISC REQ Ntf during DH host bootup */
+ if (nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1))
+ {
+ /* Received expected number of EE DISC REQ Ntf(s) */
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ }
+ }
+ }
+ break;
}
}
@@ -355,9 +423,16 @@
nfa_hci_cb.b_low_power_mode = FALSE;
if (nfa_hci_cb.hci_state == NFA_HCI_STATE_IDLE)
{
- nfa_hci_cb.hci_state = NFA_HCI_STATE_RESTORE;
- nfa_hci_cb.ee_disc_cmplt = FALSE;
- nfa_hci_cb.conn_id = 0;
+ nfa_hci_cb.hci_state = NFA_HCI_STATE_RESTORE;
+ nfa_hci_cb.ee_disc_cmplt = FALSE;
+ nfa_hci_cb.ee_disable_disc = TRUE;
+ if (nfa_hci_cb.num_nfcee > 1)
+ nfa_hci_cb.w4_hci_netwk_init = TRUE;
+ else
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ nfa_hci_cb.conn_id = 0;
+ nfa_hci_cb.num_ee_dis_req_ntf = 0;
+ nfa_hci_cb.num_hot_plug_evts = 0;
}
else
{
@@ -390,12 +465,30 @@
{
if (nfa_hci_cb.w4_hci_netwk_init)
{
- nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_NETWK_ENABLE;
- /* No HCP packet to DH for a specified period of time indicates all host in the network is initialized */
- nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_NETWK_INIT_TIMEOUT);
+ if (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+ {
+ nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_NETWK_ENABLE;
+ /* No HCP packet to DH for a specified period of time indicates all host in the network is initialized */
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+ }
+ else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
+ {
+ nfa_hci_cb.hci_state = NFA_HCI_STATE_RESTORE_NETWK_ENABLE;
+ /* No HCP packet to DH for a specified period of time indicates all host in the network is initialized */
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+ }
+ }
+ else if ( (nfa_hci_cb.num_nfcee > 1)
+ &&(nfa_hci_cb.num_ee_dis_req_ntf != (nfa_hci_cb.num_nfcee - 1)) )
+ {
+ /* Received HOT PLUG EVT, we will also wait for EE DISC REQ Ntf(s) */
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
}
else
+ {
+ /* Received EE DISC REQ Ntf(s) */
nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ }
}
/*******************************************************************************
@@ -415,7 +508,8 @@
nfa_sys_stop_timer (&nfa_hci_cb.timer);
- if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) )
{
nfa_ee_proc_hci_info_cback ();
nfa_sys_cback_notify_nfcc_power_mode_proc_complete (NFA_ID_HCI);
@@ -464,7 +558,6 @@
if (nfa_hci_cb.nv_read_cmplt && nfa_hci_cb.ee_disc_cmplt && (nfa_hci_cb.conn_id == 0))
{
NFA_EeGetInfo (&num_nfcee, ee_info);
- nfa_hci_cb.num_nfcee = num_nfcee;
while ((count < num_nfcee) && (!found))
{
@@ -597,11 +690,13 @@
if ((event != NFC_DATA_CEVT) || (p_pkt == NULL))
return;
- if (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+ ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) )
{
/* Received HCP Packet before timeout, Other Host initialization is not complete */
nfa_sys_stop_timer (&nfa_hci_cb.timer);
- nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_NETWK_INIT_TIMEOUT);
+ if (nfa_hci_cb.w4_hci_netwk_init)
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
}
p = (UINT8 *) (p_pkt + 1) + p_pkt->offset;
@@ -684,11 +779,11 @@
/* If we got a response, cancel the response timer. Also, if waiting for */
/* a single response, we can go back to idle state */
- if (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP)
+ if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP)
+ &&((nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE))) )
{
nfa_sys_stop_timer (&nfa_hci_cb.timer);
nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
- nfa_hci_cb.w4_rsp_evt = FALSE;
}
switch (pipe)
@@ -721,6 +816,11 @@
break;
}
+ if ((nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)))
+ {
+ nfa_hci_cb.w4_rsp_evt = FALSE;
+ }
+
/* Send a message to ouselves to check for anything to do */
p_pkt->event = NFA_HCI_CHECK_QUEUE_EVT;
p_pkt->len = 0;
@@ -753,6 +853,7 @@
||(!(memcmp (nfa_hci_cb.cfg.admin_gate.session_id, default_session, NFA_HCI_SESSION_ID_LEN)))
||(!(memcmp (nfa_hci_cb.cfg.admin_gate.session_id, reset_session, NFA_HCI_SESSION_ID_LEN))) )
{
+ nfa_hci_cb.b_hci_netwk_reset = TRUE;
/* Set a new session id so that we clear all pipes later after seeing a difference with the HC Session ID */
memcpy (&session_id[(NFA_HCI_SESSION_ID_LEN / 2)], nfa_hci_cb.cfg.admin_gate.session_id, (NFA_HCI_SESSION_ID_LEN / 2));
os_tick = GKI_get_os_tick_count ();
@@ -791,9 +892,18 @@
break;
case NFA_HCI_STATE_WAIT_NETWK_ENABLE:
- /* HCI Network is enabled */
- nfa_hci_cb.w4_hci_netwk_init = FALSE;
- nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ case NFA_HCI_STATE_RESTORE_NETWK_ENABLE:
+
+ if (nfa_hci_cb.w4_hci_netwk_init)
+ {
+ /* HCI Network is enabled */
+ nfa_hci_cb.w4_hci_netwk_init = FALSE;
+ nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ }
+ else
+ {
+ nfa_hci_startup_complete (NFA_STATUS_FAILED);
+ }
break;
case NFA_HCI_STATE_REMOVE_GATE:
diff --git a/src/nfa/hci/nfa_hci_utils.c b/src/nfa/hci/nfa_hci_utils.c
index 6edf589..bb430ed 100644
--- a/src/nfa/hci/nfa_hci_utils.c
+++ b/src/nfa/hci/nfa_hci_utils.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the utility functions for the NFA HCI.
@@ -26,6 +27,7 @@
#include "nfc_api.h"
#include "nfa_sys.h"
#include "nfa_sys_int.h"
+#include "nfa_dm_int.h"
#include "nfa_hci_api.h"
#include "nfa_hci_int.h"
#include "nfa_nv_co.h"
@@ -402,7 +404,7 @@
if (nfa_hci_cb.hci_state == NFA_HCI_STATE_IDLE)
nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
- nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_CMD_RSP_TIMEOUT);
+ nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
}
return status;
@@ -423,7 +425,7 @@
int xx;
UINT8 count = 0;
- for (xx = 0, p_cb = nfa_hci_cb.cfg.dyn_gates; xx <= NFA_HCI_MAX_GATE_CB; xx++, p_cb++)
+ for (xx = 0, p_cb = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, p_cb++)
{
if (p_cb->gate_id != 0)
{
@@ -1296,14 +1298,15 @@
switch (state)
{
- case NFA_HCI_STATE_DISABLED: return ("DISABLED");
- case NFA_HCI_STATE_STARTUP: return ("STARTUP");
- case NFA_HCI_STATE_IDLE: return ("IDLE");
- case NFA_HCI_STATE_WAIT_RSP: return ("WAIT_RSP");
- case NFA_HCI_STATE_REMOVE_GATE: return ("REMOVE_GATE");
- case NFA_HCI_STATE_APP_DEREGISTER: return ("APP_DEREGISTER");
- case NFA_HCI_STATE_RESTORE: return ("RESTORE");
-
+ case NFA_HCI_STATE_DISABLED: return ("DISABLED");
+ case NFA_HCI_STATE_STARTUP: return ("STARTUP");
+ case NFA_HCI_STATE_WAIT_NETWK_ENABLE: return ("WAIT_NETWK_ENABLE");
+ case NFA_HCI_STATE_IDLE: return ("IDLE");
+ case NFA_HCI_STATE_WAIT_RSP: return ("WAIT_RSP");
+ case NFA_HCI_STATE_REMOVE_GATE: return ("REMOVE_GATE");
+ case NFA_HCI_STATE_APP_DEREGISTER: return ("APP_DEREGISTER");
+ case NFA_HCI_STATE_RESTORE: return ("RESTORE");
+ case NFA_HCI_STATE_RESTORE_NETWK_ENABLE: return ("WAIT_NETWK_ENABLE_AFTER_RESTORE");
default:
sprintf (unknown, "?? Unknown: %u ?? ", state);
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 26007e4..ccc1a32 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the public interface file for NFA, Broadcom's NFC application
@@ -29,6 +30,7 @@
#include "nci_defs.h"
#include "tags_defs.h"
#include "nfc_api.h"
+#include "rw_api.h"
#include "nfc_hal_api.h"
#include "gki.h"
@@ -153,6 +155,17 @@
#define NFA_T1T_CMD_UID_LEN T1T_CMD_UID_LEN /* UID len for T1T cmds */
#define NFA_T2T_UID_LEN T2T_UID_LEN /* T2T UID length */
+#define NFA_RW_NDEF_FL_READ_ONLY RW_NDEF_FL_READ_ONLY /* Tag is read only */
+#define NFA_RW_NDEF_FL_FORMATED RW_NDEF_FL_FORMATED /* Tag formated for NDEF */
+#define NFA_RW_NDEF_FL_SUPPORTED RW_NDEF_FL_SUPPORTED /* NDEF supported by the tag */
+#define NFA_RW_NDEF_FL_UNKNOWN RW_NDEF_FL_UNKNOWN /* Unable to find if tag is ndef capable/formated/read only */
+#define NFA_RW_NDEF_FL_FORMATABLE RW_NDEF_FL_FORMATABLE /* Tag supports format operation */
+#define NFA_RW_NDEF_FL_SOFT_LOCKABLE RW_NDEF_FL_SOFT_LOCKABLE /* Tag can be soft locked */
+#define NFA_RW_NDEF_FL_HARD_LOCKABLE RW_NDEF_FL_HARD_LOCKABLE /* Tag can be hard locked */
+#define NFA_RW_NDEF_FL_OTP RW_NDEF_FL_OTP /* Tag is one time programmable */
+
+typedef UINT8 tNFA_RW_NDEF_FLAG;
+
/* Data for NFA_DM_SET_CONFIG_EVT */
typedef struct
{
@@ -205,14 +218,6 @@
/* NFA_DM callback */
typedef void (tNFA_DM_CBACK) (UINT8 event, tNFA_DM_CBACK_DATA *p_data);
-/* Data for data events */
-typedef struct
-{
- tNFA_HANDLE handle; /* Connection handle */
- UINT16 len; /* Length of data */
- UINT8 *p_buf; /* Data buffer */
-} tNFA_DATA;
-
/* NFA Connection Callback Events */
#define NFA_POLL_ENABLED_EVT 0 /* Polling enabled event */
@@ -321,7 +326,7 @@
tNFA_NFC_PROTOCOL protocol; /* protocol used to detect NDEF */
UINT32 max_size; /* max number of bytes available for NDEF data */
UINT32 cur_size; /* current size of stored NDEF data (in bytes) */
- UINT8 flags; /* Flags to indicate NDEF capability,formated,formatable and read only */
+ tNFA_RW_NDEF_FLAG flags; /* Flags to indicate NDEF capability, is formated, soft/hard lockable, formatable, otp and read only */
} tNFA_NDEF_DETECT;
@@ -484,6 +489,13 @@
BOOLEAN auto_read_ndef; /* Automatic NDEF read (when not in exclusive RF mode) */
} tNFA_DM_CFG;
+/* compile-time configuration structure for HCI */
+typedef struct
+{
+ UINT16 hci_netwk_enable_timeout; /* Maximum idle(no HCP Pkt) time to wait for EE DISC REQ Ntf(s) */
+ UINT16 hcp_response_timeout; /* Maximum time to wait for EE DISC REQ NTF(s) after HOT PLUG EVT(s) */
+} tNFA_HCI_CFG;
+
/*
** Exclusive RF mode listen configuration
*/
@@ -585,7 +597,7 @@
/* Events for tNFA_NDEF_CBACK */
#define NFA_NDEF_REGISTER_EVT 0 /* NDEF record type registered. (In response to NFA_RegisterNDefTypeHandler) */
-#define NFA_NDEF_DATA_EVT 1 /* Received an NDEF message with the registered type. See [tNFA_DATA] */
+#define NFA_NDEF_DATA_EVT 1 /* Received an NDEF message with the registered type. See [tNFA_NDEF_DATA] */
typedef UINT8 tNFA_NDEF_EVT;
/* Structure for NFA_NDEF_REGISTER_EVT event data */
@@ -968,12 +980,19 @@
** Description Send a raw frame over the activated interface with the NFCC.
** This function can only be called after NFC link is activated.
**
+** If the activated interface is a tag and auto-presence check is
+** enabled then presence_check_start_delay can be used to indicate
+** the delay in msec after which the next auto presence check
+** command can be sent. NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
+** can be used as the default value for the delay.
+**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_SendRawFrame (UINT8 *p_raw_data,
- UINT16 data_len);
+ UINT16 data_len,
+ UINT16 presence_check_start_delay);
/*******************************************************************************
** NDEF APIs
diff --git a/src/nfa/include/nfa_ce_api.h b/src/nfa/include/nfa_ce_api.h
index d339320..3d15cf0 100644
--- a/src/nfa/include/nfa_ce_api.h
+++ b/src/nfa/include/nfa_ce_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA card emulation API functions
@@ -61,24 +62,19 @@
** To disable the local NDEF tag, set protocol_mask=0
**
** The NDEF data provided by p_ndef_data must be persistent
-** as long as the local NDEF tag is enabled.
+** as long as the local NDEF tag is enabled. Also, Input parameters p_uid and
+** uid_len are reserved for future use.
**
-** UID of the tag can be set only for Type 1 and Type 2 tag.
-** UID Length should be 4/7 bytes in case of Type 1 tag and
-** UID Length should be 4/10 bytes in case of Type 2 tag.
**
** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
+** should happen before calling this function.
**
** Returns:
** NFA_STATUS_OK, if command accepted
** NFA_STATUS_INVALID_PARAM,
** if protocol_maks is not 0 and p_ndef_data is NULL
-** (or)if p_uid is NULL and uid_len is not 0
-** (or)if protocol mask is set for both Type 1 and Type 2
-** (or)if uid_len is not 0 and protocol mask is not set for Type 1/2
-** (or)if protocol mask is set for Type 1 and uid_len is not 4/7
-** (or)if protocol mask is set for Type 2 and uid_len is not 4/10
+** (or) uid_len is not 0
+** (or) if protocol mask is set for Type 1 or Type 2
**
** NFA_STATUS_FAILED: otherwise
**
diff --git a/src/nfa/include/nfa_cho_api.h b/src/nfa/include/nfa_cho_api.h
index fde3222..b8c3f52 100644
--- a/src/nfa/include/nfa_cho_api.h
+++ b/src/nfa/include/nfa_cho_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the public interface file for NFA Connection Handover,
diff --git a/src/nfa/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index 7098ae3..3ac6caa 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface to NFCEE
@@ -173,12 +174,19 @@
tNFA_EE_DISCOVER_INFO ee_disc_info[NFA_DM_MAX_UICC]; /* MFCEE DISCOVER Request info */
} tNFA_EE_DISCOVER_REQ;
+/* Data for NFA_EE_DATA_EVT */
+typedef struct
+{
+ tNFA_HANDLE handle; /* Connection handle */
+ UINT16 len; /* Length of data */
+ UINT8 *p_buf; /* Data buffer */
+} tNFA_EE_DATA;
/* Union of all EE callback structures */
typedef union
{
tNFA_STATUS status; /* NFA_STATUS_OK is successful; otherwise NFA_STATUS_FAILED */
- tNFA_DATA data;
+ tNFA_EE_DATA data;
tNFA_HANDLE handle;
tNFA_EE_DISCOVER ee_discover;
tNFA_STATUS ee_register;
diff --git a/src/nfa/include/nfa_hci_api.h b/src/nfa/include/nfa_hci_api.h
index a8b3fcc..7a56861 100644
--- a/src/nfa/include/nfa_hci_api.h
+++ b/src/nfa/include/nfa_hci_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the public interface file for NFA HCI, Broadcom's NFC
@@ -71,173 +72,174 @@
#define NFA_MAX_HCI_DATA_LEN 260 /* Max HCI data length */
/* NFA HCI PIPE states */
-#define NFA_HCI_PIPE_CLOSED 0x00 /* Pipe is closed */
-#define NFA_HCI_PIPE_OPENED 0x01 /* Pipe is opened */
+#define NFA_HCI_PIPE_CLOSED 0x00 /* Pipe is closed */
+#define NFA_HCI_PIPE_OPENED 0x01 /* Pipe is opened */
typedef UINT8 tNFA_HCI_PIPE_STATE;
/* Dynamic pipe control block */
typedef struct
{
- UINT8 pipe_id; /* Pipe ID */
- tNFA_HCI_PIPE_STATE pipe_state; /* State of the Pipe */
- UINT8 local_gate; /* local gate id */
- UINT8 dest_host; /* Peer host to which this pipe is connected */
- UINT8 dest_gate; /* Peer gate to which this pipe is connected */
+ UINT8 pipe_id; /* Pipe ID */
+ tNFA_HCI_PIPE_STATE pipe_state; /* State of the Pipe */
+ UINT8 local_gate; /* local gate id */
+ UINT8 dest_host; /* Peer host to which this pipe is connected */
+ UINT8 dest_gate; /* Peer gate to which this pipe is connected */
} tNFA_HCI_PIPE_INFO;
/* Data for NFA_HCI_REGISTER_EVT */
typedef struct
{
- tNFA_STATUS status;
- tNFA_HANDLE hci_handle;
- UINT8 num_pipes;
- UINT8 num_gates;
+ tNFA_STATUS status; /* Status of registration */
+ tNFA_HANDLE hci_handle; /* Handle assigned to the application */
+ UINT8 num_pipes; /* Number of dynamic pipes exist for the application */
+ UINT8 num_gates; /* Number of generic gates exist for the application */
} tNFA_HCI_REGISTER;
/* Data for NFA_HCI_DEREGISTER_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of deregistration */
} tNFA_HCI_DEREGISTER;
/* Data for NFA_HCI_GET_GATE_PIPE_LIST_EVT */
typedef struct
{
tNFA_STATUS status;
- UINT8 num_pipes;
- tNFA_HCI_PIPE_INFO pipe[NFA_HCI_MAX_PIPE_CB];
- UINT8 num_gates;
- UINT8 gate[NFA_HCI_MAX_GATE_CB];
-
+ UINT8 num_pipes; /* Number of dynamic pipes exist for the application */
+ tNFA_HCI_PIPE_INFO pipe[NFA_HCI_MAX_PIPE_CB]; /* List of pipe created for the application */
+ UINT8 num_gates; /* Number of generic gates exist for the application */
+ UINT8 gate[NFA_HCI_MAX_GATE_CB]; /* List of generic gates allocated to the application */
+ UINT8 num_uicc_created_pipes; /* Number of pipes created by UICC host */
+ tNFA_HCI_PIPE_INFO uicc_created_pipe[NFA_HCI_MAX_HOST_IN_NETWORK]; /* Pipe information of the UICC created pipe */
} tNFA_HCI_GET_GATE_PIPE_LIST;
/* Data for NFA_HCI_ALLOCATE_GATE_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 gate;
+ tNFA_STATUS status; /* Status of response to allocate gate request */
+ UINT8 gate; /* The gate allocated to the application */
} tNFA_HCI_ALLOCATE_GATE;
/* Data for NFA_HCI_DEALLOCATE_GATE_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 gate;
+ tNFA_STATUS status; /* Status of response to deallocate gate request */
+ UINT8 gate; /* The gate deallocated from the application */
} tNFA_HCI_DEALLOCATE_GATE;
/* Data for NFA_HCI_CREATE_PIPE_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
- UINT8 source_gate;
- UINT8 dest_host;
- UINT8 dest_gate;
+ tNFA_STATUS status; /* Status of creating dynamic pipe for the application */
+ UINT8 pipe; /* The pipe created for the application */
+ UINT8 source_gate; /* DH host gate to which the one end of pipe is attached */
+ UINT8 dest_host; /* Destination host whose gate is the other end of the pipe is attached to */
+ UINT8 dest_gate; /* Destination host gate to which the other end of pipe is attached */
} tNFA_HCI_CREATE_PIPE;
/* Data for NFA_HCI_OPEN_PIPE_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
+ tNFA_STATUS status; /* Status of open pipe operation */
+ UINT8 pipe; /* The dynamic pipe for open operation */
}tNFA_HCI_OPEN_PIPE;
/* Data for NFA_HCI_CLOSE_PIPE_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
+ tNFA_STATUS status; /* Status of close pipe operation */
+ UINT8 pipe; /* The dynamic pipe for close operation */
}tNFA_HCI_CLOSE_PIPE;
/* Data for NFA_HCI_DELETE_PIPE_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
+ tNFA_STATUS status; /* Status of delete pipe operation */
+ UINT8 pipe; /* The dynamic pipe for delete operation */
} tNFA_HCI_DELETE_PIPE;
/* Data for NFA_HCI_HOST_LIST_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 num_hosts;
- UINT8 host[NFA_HCI_MAX_HOST_IN_NETWORK];
+ tNFA_STATUS status; /* Status og get host list operation */
+ UINT8 num_hosts; /* Number of hosts in the host network */
+ UINT8 host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* List of host in the host network */
} tNFA_HCI_HOST_LIST;
/* Data for NFA_HCI_RSP_RCVD_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
- UINT8 rsp_code;
- UINT16 rsp_len;
- UINT8 rsp_data[NFA_MAX_HCI_RSP_LEN];
+ tNFA_STATUS status; /* Status of RSP to HCP CMD sent */
+ UINT8 pipe; /* The pipe on which HCP packet is exchanged */
+ UINT8 rsp_code; /* Response id */
+ UINT16 rsp_len; /* Response parameter length */
+ UINT8 rsp_data[NFA_MAX_HCI_RSP_LEN]; /* Response received */
} tNFA_HCI_RSP_RCVD;
/* Data for NFA_HCI_EVENT_RCVD_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
- UINT8 evt_code;
- UINT16 evt_len;
- UINT8 *p_evt_buf;
+ tNFA_STATUS status; /* Status of Event received */
+ UINT8 pipe; /* The pipe on which HCP EVT packet is received */
+ UINT8 evt_code; /* HCP EVT id */
+ UINT16 evt_len; /* HCP EVT parameter length */
+ UINT8 *p_evt_buf; /* HCP EVT Parameter */
} tNFA_HCI_EVENT_RCVD;
/* Data for NFA_HCI_CMD_RCVD_EVT */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
- UINT8 cmd_code;
- UINT16 cmd_len;
- UINT8 cmd_data[NFA_MAX_HCI_CMD_LEN];
+ tNFA_STATUS status; /* Status of Command received */
+ UINT8 pipe; /* The pipe on which HCP CMD packet is received */
+ UINT8 cmd_code; /* HCP CMD id */
+ UINT16 cmd_len; /* HCP CMD parameter length */
+ UINT8 cmd_data[NFA_MAX_HCI_CMD_LEN]; /* HCP CMD Parameter */
} tNFA_HCI_CMD_RCVD;
/* Data for NFA_HCI_INIT_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of Enabling HCI Network */
} tNFA_HCI_INIT;
/* Data for NFA_HCI_EXIT_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of Disabling HCI Network */
} tNFA_HCI_EXIT;
/* Data for NFA_HCI_RSP_SENT_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of HCP response send operation */
} tNFA_HCI_RSP_SENT;
/* Data for NFA_HCI_CMD_SENT_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of Command send operation */
} tNFA_HCI_CMD_SENT;
/* Data for NFA_HCI_EVENT_SENT_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of Event send operation */
} tNFA_HCI_EVENT_SENT;
/* Data for NFA_HCI_ADD_STATIC_PIPE_EVT */
typedef struct
{
- tNFA_STATUS status;
+ tNFA_STATUS status; /* Status of adding proprietary pipe */
} tNFA_HCI_ADD_STATIC_PIPE_EVT;
/* data type for all registry-related events */
typedef struct
{
- tNFA_STATUS status;
- UINT8 pipe;
- UINT8 index;
- UINT8 data_len;
- UINT8 reg_data[NFA_MAX_HCI_DATA_LEN];
+ tNFA_STATUS status; /* Status of Registry operation */
+ UINT8 pipe; /* Pipe on whose registry is of interest */
+ UINT8 index; /* Index of the registry operated */
+ UINT8 data_len; /* length of the registry parameter */
+ UINT8 reg_data[NFA_MAX_HCI_DATA_LEN]; /* Registry parameter */
} tNFA_HCI_REGISTRY;
@@ -261,7 +263,7 @@
tNFA_HCI_CMD_RCVD cmd_rcvd; /* NFA_HCI_CMD_RCVD_EVT */
tNFA_HCI_EVENT_RCVD rcvd_evt; /* NFA_HCI_EVENT_RCVD_EVT */
tNFA_STATUS status; /* status of api command request */
- tNFA_HCI_REGISTRY registry; /* all registry-related events */
+ tNFA_HCI_REGISTRY registry; /* all registry-related events - NFA_HCI_GET_REG_CMD_EVT, NFA_HCI_SET_REG_CMD_EVT, NFA_HCI_GET_REG_RSP_EVT, NFA_HCI_SET_REG_RSP_EVT */
tNFA_HCI_INIT hci_init; /* NFA_HCI_INIT_EVT */
tNFA_HCI_EXIT hci_exit; /* NFA_HCI_EXIT_EVT */
tNFA_HCI_ADD_STATIC_PIPE_EVT pipe_added; /* NFA_HCI_ADD_STATIC_PIPE_EVT */
diff --git a/src/nfa/include/nfa_hci_defs.h b/src/nfa/include/nfa_hci_defs.h
index 088837f..5bad2d5 100644
--- a/src/nfa/include/nfa_hci_defs.h
+++ b/src/nfa/include/nfa_hci_defs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the NFA HCI related definitions from the
diff --git a/src/nfa/include/nfa_mem_co.h b/src/nfa/include/nfa_mem_co.h
index 5b3686d..ec961c8 100644
--- a/src/nfa/include/nfa_mem_co.h
+++ b/src/nfa/include/nfa_mem_co.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Callout functions for memory allocation/deallocatoin
diff --git a/src/nfa/include/nfa_nv_ci.h b/src/nfa/include/nfa_nv_ci.h
index 7b49ed0..95a2668 100644
--- a/src/nfa/include/nfa_nv_ci.h
+++ b/src/nfa/include/nfa_nv_ci.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the interface file for non valtile memory call-in functions.
diff --git a/src/nfa/include/nfa_nv_co.h b/src/nfa/include/nfa_nv_co.h
index 9ed5093..09eedba 100644
--- a/src/nfa/include/nfa_nv_co.h
+++ b/src/nfa/include/nfa_nv_co.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the interface file for the synchronization server call-out
diff --git a/src/nfa/include/nfa_p2p_api.h b/src/nfa/include/nfa_p2p_api.h
index 4134e8d..0d3dd02 100644
--- a/src/nfa/include/nfa_p2p_api.h
+++ b/src/nfa/include/nfa_p2p_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the public interface file for NFA P2P, Broadcom's NFC
diff --git a/src/nfa/include/nfa_rw_api.h b/src/nfa/include/nfa_rw_api.h
index fde2ff7..811d56f 100644
--- a/src/nfa/include/nfa_rw_api.h
+++ b/src/nfa/include/nfa_rw_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA reader/writer API functions
@@ -459,7 +460,7 @@
** Function NFA_RwI93Inventory
**
** Description:
-** Send Inventory command to the activated ISO 15693 tag.
+** Send Inventory command to the activated ISO 15693 tag with/without AFI..
** If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
**
** When the write operation has completed (or if an error occurs), the
@@ -471,7 +472,7 @@
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_RwI93Inventory (UINT8 afi, UINT8 *p_uid);
+NFC_API extern tNFA_STATUS NFA_RwI93Inventory (BOOLEAN afi_present, UINT8 afi, UINT8 *p_uid);
/*******************************************************************************
**
diff --git a/src/nfa/include/nfa_snep_api.h b/src/nfa/include/nfa_snep_api.h
index a890047..c2299d9 100644
--- a/src/nfa/include/nfa_snep_api.h
+++ b/src/nfa/include/nfa_snep_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the public interface file for NFA SNEP, Broadcom's NFC
diff --git a/src/nfa/int/nfa_ce_int.h b/src/nfa/int/nfa_ce_int.h
index ef58dc2..63086f7 100644
--- a/src/nfa/int/nfa_ce_int.h
+++ b/src/nfa/int/nfa_ce_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2011-2012 Broadcom Corporation
+ * Copyright (C) 2011-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for NFA_CE
diff --git a/src/nfa/int/nfa_cho_int.h b/src/nfa/int/nfa_cho_int.h
index 4d0142a..15ebeb6 100644
--- a/src/nfa/int/nfa_cho_int.h
+++ b/src/nfa/int/nfa_cho_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA Connection Handover.
@@ -287,9 +288,5 @@
tNFA_CHO_MSG_TYPE nfa_cho_get_msg_type (UINT32 length, UINT8 *p_ndef_msg);
tNFA_CHO_ROLE_TYPE nfa_cho_get_local_device_role (UINT32 length, UINT8 *p_ndef_msg);
tNFA_STATUS nfa_cho_update_random_number (UINT8 *p_ndef_msg);
-#else
-
-#define nfa_cho_init ()
-
#endif /* (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE)) */
#endif /* NFA_CHO_INT_H */
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/int/nfa_dm_int.h
index 3abf918..2169269 100644
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/nfa_dm_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA device manager.
@@ -273,9 +274,7 @@
{
NFA_DM_RF_DISC_START_EVT, /* discovery started with protocol, technology and mode */
NFA_DM_RF_DISC_ACTIVATED_EVT, /* activated with configured protocol, technology and mode */
- NFA_DM_RF_DISC_DEACTIVATED_EVT, /* deactivated sleep or idle */
- NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT /* deactivated to idle from host select or listen sleep state */
- /* by DH request */
+ NFA_DM_RF_DISC_DEACTIVATED_EVT /* deactivated sleep or idle */
};
typedef UINT8 tNFA_DM_RF_DISC_EVT;
@@ -358,6 +357,12 @@
#define SLP_REQ_CMD 0x5000
#define NFA_DM_MAX_TECH_ROUTE 4 /* NFA_EE_MAX_TECH_ROUTE. only A, B, F, Bprime are supported by UICC now */
+/* timeout for waiting deactivation NTF,
+** possible delay to send deactivate CMD if all credit wasn't returned
+** transport delay (1sec) and max RWT (5sec)
+*/
+#define NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF (NFC_DEACTIVATE_TIMEOUT*1000 + 6000)
+
typedef struct
{
UINT16 disc_duration; /* Disc duration */
@@ -379,6 +384,8 @@
UINT8 listen_RT[NFA_DM_MAX_TECH_ROUTE];/* Host ID for A, B, F, B' technology routing*/
tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask; /* technology and protocol waiting for activation */
+ TIMER_LIST_ENT tle; /* timer for waiting deactivation NTF */
+
} tNFA_DM_DISC_CB;
/* NDEF Type Handler Definitions */
@@ -500,6 +507,7 @@
void nfa_ce_init (void);
/* Pointer to compile-time configuration structure */
+extern tNFA_HCI_CFG *p_nfa_hci_cfg;
extern tNFA_DM_CFG *p_nfa_dm_cfg;
extern UINT8 *p_nfa_dm_ce_cfg;
extern UINT8 *p_nfa_dm_gen_cfg;
@@ -517,8 +525,17 @@
void nfa_dm_init (void);
void nfa_p2p_init (void);
+#if (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE))
void nfa_cho_init (void);
+#else
+#define nfa_cho_init()
+#endif /* (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE)) */
+#if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
void nfa_snep_init (BOOLEAN is_dta_mode);
+#else
+#define nfa_snep_init(is_dta_mode)
+#endif
+
void nfa_dta_init (void);
#if (NFC_NFCEE_INCLUDED == TRUE)
void nfa_ee_init (void);
diff --git a/src/nfa/int/nfa_dta_int.h b/src/nfa/int/nfa_dta_int.h
index b21d725..18e4474 100644
--- a/src/nfa/int/nfa_dta_int.h
+++ b/src/nfa/int/nfa_dta_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA DTA
diff --git a/src/nfa/int/nfa_ee_int.h b/src/nfa/int/nfa_ee_int.h
index bdcd8c5..5093bce 100644
--- a/src/nfa/int/nfa_ee_int.h
+++ b/src/nfa/int/nfa_ee_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA EE.
@@ -366,9 +367,16 @@
#define NFA_EE_FLAG_WAIT_HCI 0x01 /* set this bit when waiting for HCI to finish the initialization process in NFA_EE_EM_STATE_RESTORING */
#define NFA_EE_FLAG_NOTIFY_HCI 0x02 /* set this bit when EE needs to notify the p_enable_cback at the end of NFCEE discover process in NFA_EE_EM_STATE_RESTORING */
+#define NFA_EE_FLAG_WAIT_DISCONN 0x04 /* set this bit when gracefully disable with outstanding NCI connections */
typedef UINT8 tNFA_EE_FLAGS;
-typedef void (tNFA_EE_ENABLE_DONE_CBACK)(BOOLEAN disable_discover);
+
+#define NFA_EE_DISC_STS_ON 0x00 /* NFCEE DISCOVER in progress */
+#define NFA_EE_DISC_STS_OFF 0x01 /* disable NFCEE DISCOVER */
+#define NFA_EE_DISC_STS_REQ 0x02 /* received NFCEE DISCOVER REQ NTF */
+typedef UINT8 tNFA_EE_DISC_STS;
+
+typedef void (tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);
/* NFA EE Management control block */
typedef struct
@@ -451,6 +459,7 @@
void nfa_ee_reg_cback_enable_done (tNFA_EE_ENABLE_DONE_CBACK *p_cback);
extern void nfa_ee_proc_hci_info_cback (void);
+void nfa_ee_check_disable (void);
#endif /* NFA_P2P_INT_H */
diff --git a/src/nfa/int/nfa_hci_int.h b/src/nfa/int/nfa_hci_int.h
index a1763ac..d6a29c8 100644
--- a/src/nfa/int/nfa_hci_int.h
+++ b/src/nfa/int/nfa_hci_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA HCI.
@@ -33,9 +34,8 @@
*****************************************************************************/
-#define NFA_HCI_HOST_ID_UICC0 0x02
-#define NFA_HCI_HOST_ID_UICC1 0x03
-#define NFA_HCI_LAST_HOST_SPECIFIC_GATE 0xEF
+#define NFA_HCI_HOST_ID_UICC0 0x02 /* Host ID for UICC 0 */
+#define NFA_HCI_LAST_HOST_SPECIFIC_GATE 0xEF /* Lost host specific gate */
#define NFA_HCI_SESSION_ID_LEN 8 /* HCI Session ID length */
#define NFA_MAX_PIPES_IN_GENERIC_GATE 0x0F /* Maximum pipes that can be created on a generic pipe */
@@ -47,14 +47,15 @@
#define NFA_HCI_VERSION 90 /* HCI Version */
/* NFA HCI states */
-#define NFA_HCI_STATE_DISABLED 0x00 /* HCI is disabled */
-#define NFA_HCI_STATE_STARTUP 0x01 /* HCI performing Initialization sequence */
-#define NFA_HCI_STATE_WAIT_NETWK_ENABLE 0x02 /* HCI is waiting for initialization of other host in the network */
-#define NFA_HCI_STATE_IDLE 0x03 /* HCI is waiting to handle api commands */
-#define NFA_HCI_STATE_WAIT_RSP 0x04 /* HCI is performing api command request */
-#define NFA_HCI_STATE_REMOVE_GATE 0x05 /* Removing all pipes prior to removing the gate */
-#define NFA_HCI_STATE_APP_DEREGISTER 0x06 /* Removing all pipes and gates prior to deregistering the app */
-#define NFA_HCI_STATE_RESTORE 0x07 /* HCI restore */
+#define NFA_HCI_STATE_DISABLED 0x00 /* HCI is disabled */
+#define NFA_HCI_STATE_STARTUP 0x01 /* HCI performing Initialization sequence */
+#define NFA_HCI_STATE_WAIT_NETWK_ENABLE 0x02 /* HCI is waiting for initialization of other host in the network */
+#define NFA_HCI_STATE_IDLE 0x03 /* HCI is waiting to handle api commands */
+#define NFA_HCI_STATE_WAIT_RSP 0x04 /* HCI is waiting for response to command sent */
+#define NFA_HCI_STATE_REMOVE_GATE 0x05 /* Removing all pipes prior to removing the gate */
+#define NFA_HCI_STATE_APP_DEREGISTER 0x06 /* Removing all pipes and gates prior to deregistering the app */
+#define NFA_HCI_STATE_RESTORE 0x07 /* HCI restore */
+#define NFA_HCI_STATE_RESTORE_NETWK_ENABLE 0x08 /* HCI is waiting for initialization of other host in the network after restore */
typedef UINT8 tNFA_HCI_STATE;
@@ -91,7 +92,7 @@
NFA_HCI_RSP_NV_READ_EVT, /* Non volatile read complete event */
NFA_HCI_RSP_NV_WRITE_EVT, /* Non volatile write complete event */
- NFA_HCI_RSP_TIMEOUT_EVT,
+ NFA_HCI_RSP_TIMEOUT_EVT, /* Timeout to response for the HCP Command packet */
NFA_HCI_CHECK_QUEUE_EVT
};
@@ -306,8 +307,8 @@
tNFA_HCI_API_SEND_EVENT_EVT send_evt; /* Send a command on a pipe to a host */
/* Internal events */
- tNFA_HCI_RSP_NV_READ_EVT nv_read;
- tNFA_HCI_RSP_NV_WRITE_EVT nv_write;
+ tNFA_HCI_RSP_NV_READ_EVT nv_read; /* Read Non volatile data */
+ tNFA_HCI_RSP_NV_WRITE_EVT nv_write; /* Write Non volatile data */
} tNFA_HCI_EVENT_DATA;
/*****************************************************************************
@@ -366,7 +367,9 @@
typedef struct
{
tNFA_HCI_STATE hci_state; /* state of the HCI */
- UINT8 num_nfcee;
+ UINT8 num_nfcee; /* Number of NFCEE ID Discovered */
+ UINT8 num_ee_dis_req_ntf; /* Number of ee discovery request ntf received */
+ UINT8 num_hot_plug_evts; /* Number of Hot plug events received after ee discovery disable ntf */
UINT8 inactive_host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* Inactive host in the host network */
UINT8 reset_host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* List of host reseting */
BOOLEAN b_low_power_mode; /* Host controller in low power mode */
@@ -388,6 +391,7 @@
UINT8 param_in_use; /* The registry parameter currently working with */
tNFA_HCI_COMMAND cmd_sent; /* The last command sent */
BOOLEAN ee_disc_cmplt; /* EE Discovery operation completed */
+ BOOLEAN ee_disable_disc; /* EE Discovery operation is disabled */
UINT16 msg_len; /* For segmentation - length of the combined message */
UINT16 max_msg_len; /* Maximum reassembled message size */
UINT8 msg_data[NFA_MAX_HCI_EVENT_LEN]; /* For segmentation - the combined message data */
@@ -400,7 +404,7 @@
tNFA_HCI_CBACK *p_app_cback[NFA_HCI_MAX_APP_CB]; /* Callback functions registered by the applications */
UINT16 rsp_buf_size; /* Maximum size of APDU buffer */
UINT8 *p_rsp_buf; /* Buffer to hold response to sent event */
- struct
+ struct /* Persistent information for Device Host */
{
char reg_app_names[NFA_HCI_MAX_APP_CB][NFA_MAX_HCI_APP_NAME_LEN + 1];
@@ -441,7 +445,6 @@
extern void nfa_hci_startup_complete (tNFA_STATUS status);
extern void nfa_hci_startup (void);
extern void nfa_hci_restore_default_config (UINT8 *p_session_id);
-extern void nfa_hci_vsc_cback (tNFC_VS_EVT event, UINT16 data_len, UINT8 *p_data);
/* Action functions in nfa_hci_act.c
*/
diff --git a/src/nfa/int/nfa_p2p_int.h b/src/nfa/int/nfa_p2p_int.h
index 7eedbe0..ae69b46 100644
--- a/src/nfa/int/nfa_p2p_int.h
+++ b/src/nfa/int/nfa_p2p_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA P2P.
@@ -61,6 +62,7 @@
NFA_P2P_API_GET_LINK_INFO_EVT,
NFA_P2P_API_GET_REMOTE_SAP_EVT,
NFA_P2P_API_SET_LLCP_CFG_EVT,
+ NFA_P2P_INT_RESTART_RF_DISC_EVT,
NFA_P2P_LAST_EVT
};
@@ -244,12 +246,16 @@
{
tNFA_HANDLE dm_disc_handle;
+ tNFA_DM_RF_DISC_STATE rf_disc_state;
tNFA_P2P_LLCP_STATE llcp_state;
BOOLEAN is_initiator;
+ BOOLEAN is_active_mode;
UINT16 local_link_miu;
UINT16 remote_link_miu;
tNFA_TECHNOLOGY_MASK listen_tech_mask; /* for P2P listening */
+ tNFA_TECHNOLOGY_MASK listen_tech_mask_to_restore;/* to retry without active listen mode */
+ TIMER_LIST_ENT active_listen_restore_timer; /* timer to restore active listen mode */
BOOLEAN is_p2p_listening;
BOOLEAN is_cho_listening;
BOOLEAN is_snep_listening;
@@ -316,6 +322,7 @@
BOOLEAN nfa_p2p_get_link_info (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_get_remote_sap (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_set_llcp_cfg (tNFA_P2P_MSG *p_msg);
+BOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg);
#if (BT_TRACE_VERBOSE == TRUE)
char *nfa_p2p_evt_code (UINT16 evt_code);
diff --git a/src/nfa/int/nfa_rw_int.h b/src/nfa/int/nfa_rw_int.h
index f877818..0d62f15 100644
--- a/src/nfa/int/nfa_rw_int.h
+++ b/src/nfa/int/nfa_rw_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for NFA_RW
@@ -193,6 +194,7 @@
{
BOOLEAN uid_present;
UINT8 uid[I93_UID_BYTE_LEN];
+ BOOLEAN afi_present;
UINT8 afi;
UINT8 dsfid;
UINT16 first_block_number;
diff --git a/src/nfa/int/nfa_snep_int.h b/src/nfa/int/nfa_snep_int.h
index 9cadec4..b1e38b4 100644
--- a/src/nfa/int/nfa_snep_int.h
+++ b/src/nfa/int/nfa_snep_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA SNEP.
diff --git a/src/nfa/int/nfa_sys.h b/src/nfa/int/nfa_sys.h
index 0351636..f377d7b 100644
--- a/src/nfa/int/nfa_sys.h
+++ b/src/nfa/int/nfa_sys.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the public interface file for the BTA system manager.
diff --git a/src/nfa/int/nfa_sys_int.h b/src/nfa/int/nfa_sys_int.h
index 5be99df..51b8e7c 100644
--- a/src/nfa/int/nfa_sys_int.h
+++ b/src/nfa/int/nfa_sys_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the private interface file for the NFA system manager.
diff --git a/src/nfa/int/nfa_sys_ptim.h b/src/nfa/int/nfa_sys_ptim.h
index 8a81f65..7035d70 100644
--- a/src/nfa/int/nfa_sys_ptim.h
+++ b/src/nfa/int/nfa_sys_ptim.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Protocol timer services.
diff --git a/src/nfa/p2p/nfa_p2p_act.c b/src/nfa/p2p/nfa_p2p_act.c
index 1901d8b..416a961 100644
--- a/src/nfa/p2p/nfa_p2p_act.c
+++ b/src/nfa/p2p/nfa_p2p_act.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the implementation file for the NFA P2P.
@@ -1215,3 +1216,22 @@
return TRUE;
}
+
+/*******************************************************************************
+**
+** Function nfa_p2p_restart_rf_discovery
+**
+** Description Restart RF discovery by deactivating to IDLE
+**
+**
+** Returns TRUE to deallocate buffer
+**
+*******************************************************************************/
+BOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg)
+{
+ P2P_TRACE_DEBUG0 ("nfa_p2p_restart_rf_discovery ()");
+
+ nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+
+ return TRUE;
+}
diff --git a/src/nfa/p2p/nfa_p2p_api.c b/src/nfa/p2p/nfa_p2p_api.c
index aa4d25a..93b6887 100644
--- a/src/nfa/p2p/nfa_p2p_api.c
+++ b/src/nfa/p2p/nfa_p2p_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface to LLCP
diff --git a/src/nfa/p2p/nfa_p2p_main.c b/src/nfa/p2p/nfa_p2p_main.c
index f8bca03..a5c3a0c 100644
--- a/src/nfa/p2p/nfa_p2p_main.c
+++ b/src/nfa/p2p/nfa_p2p_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA P2P.
@@ -49,6 +50,7 @@
/* disable function type */
static void nfa_p2p_sys_disable (void);
+static void nfa_p2p_update_active_listen (void);
/* debug functions type */
#if (BT_TRACE_VERBOSE == TRUE)
@@ -58,6 +60,9 @@
/*****************************************************************************
** Constants
*****************************************************************************/
+/* timeout to restore active listen mode if no RF activation on passive mode */
+#define NFA_P2P_RESTORE_ACTIVE_LISTEN_TIMEOUT 5000
+
static const tNFA_SYS_REG nfa_p2p_sys_reg =
{
NULL,
@@ -86,7 +91,8 @@
nfa_p2p_set_local_busy, /* NFA_P2P_API_SET_LOCAL_BUSY_EVT */
nfa_p2p_get_link_info, /* NFA_P2P_API_GET_LINK_INFO_EVT */
nfa_p2p_get_remote_sap, /* NFA_P2P_API_GET_REMOTE_SAP_EVT */
- nfa_p2p_set_llcp_cfg /* NFA_P2P_API_SET_LLCP_CFG_EVT */
+ nfa_p2p_set_llcp_cfg, /* NFA_P2P_API_SET_LLCP_CFG_EVT */
+ nfa_p2p_restart_rf_discovery /* NFA_P2P_INT_RESTART_RF_DISC_EVT */
};
/*******************************************************************************
@@ -110,12 +116,15 @@
case NFA_DM_RF_DISC_START_EVT:
if (p_data->status == NFC_STATUS_OK)
{
- nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_LISTENING;
+ nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_LISTENING;
+ nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_DISCOVERY;
}
break;
case NFA_DM_RF_DISC_ACTIVATED_EVT:
+ nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_LISTEN_ACTIVE;
+
/* notify NFC link activation */
memcpy (&(evt_data.activated.activate_ntf),
&(p_data->activate),
@@ -126,30 +135,38 @@
&&(p_data->activate.intf_param.type == NFC_INTERFACE_NFC_DEP))
{
nfa_p2p_activate_llcp (p_data);
+
+ /* stop timer not to deactivate LLCP link on passive mode */
+ nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
}
break;
case NFA_DM_RF_DISC_DEACTIVATED_EVT:
+ if ( (nfa_p2p_cb.rf_disc_state != NFA_DM_RFST_LISTEN_ACTIVE)
+ &&(nfa_p2p_cb.rf_disc_state != NFA_DM_RFST_LISTEN_SLEEP) )
+ {
+ /* this is not for P2P listen
+ ** DM broadcasts deactivaiton event in listen sleep state.
+ */
+ break;
+ }
+
/* notify deactivation */
if ( (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
||(p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) )
{
+ nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_LISTEN_SLEEP;
evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_SLEEP;
}
else
{
+ nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_DISCOVERY;
evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
}
nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
break;
- case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
- /* DH initiated deactivation in NFA_DM_RFST_LISTEN_SLEEP */
- evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
- nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
- break;
-
default:
P2P_TRACE_ERROR0 ("Unexpected event");
break;
@@ -158,6 +175,94 @@
/*******************************************************************************
**
+** Function nfa_p2p_update_active_listen_timeout_cback
+**
+** Description Timeout while waiting for passive mode activation
+**
+** Returns void
+**
+*******************************************************************************/
+static void nfa_p2p_update_active_listen_timeout_cback (TIMER_LIST_ENT *p_tle)
+{
+ NFA_TRACE_ERROR0 ("nfa_p2p_update_active_listen_timeout_cback()");
+
+ /* restore active listen mode */
+ nfa_p2p_update_active_listen ();
+}
+
+/*******************************************************************************
+**
+** Function nfa_p2p_update_active_listen
+**
+** Description Remove active listen mode temporarily or restore it
+**
+**
+** Returns None
+**
+*******************************************************************************/
+static void nfa_p2p_update_active_listen (void)
+{
+ tNFA_DM_DISC_TECH_PROTO_MASK p2p_listen_mask = 0;
+ BT_HDR *p_msg;
+
+ P2P_TRACE_DEBUG1 ("nfa_p2p_update_active_listen (): listen_tech_mask_to_restore:0x%x",
+ nfa_p2p_cb.listen_tech_mask_to_restore);
+
+ /* if active listen mode was removed temporarily */
+ if (nfa_p2p_cb.listen_tech_mask_to_restore)
+ {
+ /* restore listen technologies */
+ nfa_p2p_cb.listen_tech_mask = nfa_p2p_cb.listen_tech_mask_to_restore;
+ nfa_p2p_cb.listen_tech_mask_to_restore = 0;
+ nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
+ }
+ else
+ {
+ /* start timer in case of no passive activation */
+ nfa_p2p_cb.active_listen_restore_timer.p_cback = (TIMER_CBACK *)nfa_p2p_update_active_listen_timeout_cback;
+ nfa_sys_start_timer (&nfa_p2p_cb.active_listen_restore_timer, 0, NFA_P2P_RESTORE_ACTIVE_LISTEN_TIMEOUT);
+
+ /* save listen techonologies */
+ nfa_p2p_cb.listen_tech_mask_to_restore = nfa_p2p_cb.listen_tech_mask;
+
+ /* remove active listen mode */
+ nfa_p2p_cb.listen_tech_mask &= ~( NFA_TECHNOLOGY_MASK_A_ACTIVE|NFA_TECHNOLOGY_MASK_F_ACTIVE);
+ }
+
+ if (nfa_p2p_cb.dm_disc_handle != NFA_HANDLE_INVALID)
+ {
+ nfa_dm_delete_rf_discover (nfa_p2p_cb.dm_disc_handle);
+ nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
+ }
+
+ /* collect listen technologies with NFC-DEP protocol */
+ if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_A)
+ p2p_listen_mask |= NFA_DM_DISC_MASK_LA_NFC_DEP;
+
+ if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_F)
+ p2p_listen_mask |= NFA_DM_DISC_MASK_LF_NFC_DEP;
+
+ if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_A_ACTIVE)
+ p2p_listen_mask |= NFA_DM_DISC_MASK_LAA_NFC_DEP;
+
+ if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_F_ACTIVE)
+ p2p_listen_mask |= NFA_DM_DISC_MASK_LFA_NFC_DEP;
+
+ /* Configure listen technologies and protocols and register callback to NFA DM discovery */
+ nfa_p2p_cb.dm_disc_handle = nfa_dm_add_rf_discover (p2p_listen_mask,
+ NFA_DM_DISC_HOST_ID_DH,
+ nfa_p2p_discovery_cback);
+
+ /* restart RF discovery to update RF technologies */
+ if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof(BT_HDR))) != NULL)
+ {
+ p_msg->event = NFA_P2P_INT_RESTART_RF_DISC_EVT;
+ nfa_sys_sendmsg (p_msg);
+ }
+}
+
+/*******************************************************************************
+**
** Function nfa_p2p_llcp_link_cback
**
** Description Processing event from LLCP link management callback
@@ -171,7 +276,7 @@
tNFA_LLCP_ACTIVATED llcp_activated;
tNFA_LLCP_DEACTIVATED llcp_deactivated;
- P2P_TRACE_DEBUG1 ("nfa_p2p_llcp_link_cback () event:0x%x", event);
+ P2P_TRACE_DEBUG2 ("nfa_p2p_llcp_link_cback () event:0x%x, reason:0x%x", event, reason);
if (event == LLCP_LINK_ACTIVATION_COMPLETE_EVT)
{
@@ -209,13 +314,57 @@
{
nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_IDLE;
+ /* if got RF link loss without any rx LLC PDU */
+ if (reason == LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC)
+ {
+ /* if it was active listen mode */
+ if ( (nfa_p2p_cb.is_active_mode)
+ &&(!nfa_p2p_cb.is_initiator))
+ {
+ /* if it didn't retry without active listen mode and passive mode is available */
+ if ( (nfa_p2p_cb.listen_tech_mask_to_restore == 0x00)
+ &&(nfa_p2p_cb.listen_tech_mask & ( NFA_TECHNOLOGY_MASK_A
+ |NFA_TECHNOLOGY_MASK_F)))
+ {
+ P2P_TRACE_DEBUG0 ("Retry without active listen mode");
+
+ /* retry without active listen mode */
+ nfa_p2p_update_active_listen ();
+ }
+ }
+ else if (nfa_p2p_cb.listen_tech_mask_to_restore)
+ {
+ nfa_sys_start_timer (&nfa_p2p_cb.active_listen_restore_timer, 0, NFA_P2P_RESTORE_ACTIVE_LISTEN_TIMEOUT);
+ }
+
+ reason = LLCP_LINK_RF_LINK_LOSS_ERR;
+ }
+ else
+ {
+ if (nfa_p2p_cb.listen_tech_mask_to_restore)
+ {
+ /* restore active listen mode */
+ nfa_p2p_update_active_listen ();
+ }
+ }
+
llcp_deactivated.reason = reason;
nfa_dm_act_conn_cback_notify (NFA_LLCP_DEACTIVATED_EVT, (tNFA_CONN_EVT_DATA *)&llcp_deactivated);
- if ( (nfa_p2p_cb.is_initiator)
- &&(reason != LLCP_LINK_RF_LINK_LOSS_ERR) ) /* if NFC link is still up */
+ if (reason != LLCP_LINK_RF_LINK_LOSS_ERR) /* if NFC link is still up */
{
- nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY);
+ if (nfa_p2p_cb.is_initiator)
+ {
+ nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY);
+ }
+ else if ((nfa_p2p_cb.is_active_mode) && (reason == LLCP_LINK_TIMEOUT))
+ {
+ /*
+ ** target needs to trun off RF in case of receiving invalid frame from initiator
+ */
+ P2P_TRACE_DEBUG0 ("Got LLCP_LINK_TIMEOUT in active mode on target");
+ nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY);
+ }
}
}
}
@@ -248,6 +397,18 @@
config.is_initiator = FALSE;
}
+ if ( (p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A_ACTIVE)
+ ||(p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_F_ACTIVE)
+ ||(p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE)
+ ||(p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE) )
+ {
+ nfa_p2p_cb.is_active_mode = TRUE;
+ }
+ else
+ {
+ nfa_p2p_cb.is_active_mode = FALSE;
+ }
+
nfa_p2p_cb.is_initiator = config.is_initiator;
config.max_payload_size = p_data->activate.intf_param.intf_param.pa_nfc.max_payload_size;
@@ -320,6 +481,8 @@
{
P2P_TRACE_DEBUG0 ("nfa_p2p_sys_disable()");
+ nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
+
/* deregister message handler on NFA SYS */
nfa_sys_deregister (NFA_ID_P2P);
}
@@ -470,7 +633,8 @@
&&(nfa_p2p_cb.is_cho_listening == FALSE)
&&(nfa_p2p_cb.is_snep_listening == FALSE) )
{
- nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_IDLE;
+ nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_IDLE;
+ nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_IDLE;
nfa_dm_delete_rf_discover (nfa_p2p_cb.dm_disc_handle);
nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
@@ -495,7 +659,13 @@
*******************************************************************************/
void nfa_p2p_update_listen_tech (tNFA_TECHNOLOGY_MASK tech_mask)
{
- P2P_TRACE_DEBUG1 ("nfa_p2p_update_listen_tech () tech_mask = %d", tech_mask);
+ P2P_TRACE_DEBUG1 ("nfa_p2p_update_listen_tech () tech_mask = 0x%x", tech_mask);
+
+ if (nfa_p2p_cb.listen_tech_mask_to_restore)
+ {
+ nfa_p2p_cb.listen_tech_mask_to_restore = 0;
+ nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
+ }
if (nfa_p2p_cb.listen_tech_mask != tech_mask)
{
@@ -503,6 +673,8 @@
if (nfa_p2p_cb.dm_disc_handle != NFA_HANDLE_INVALID)
{
+ nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_IDLE;
+
nfa_dm_delete_rf_discover (nfa_p2p_cb.dm_disc_handle);
nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
}
@@ -623,6 +795,8 @@
return "API_GET_REMOTE_SAP";
case NFA_P2P_API_SET_LLCP_CFG_EVT:
return "API_SET_LLCP_CFG_EVT";
+ case NFA_P2P_INT_RESTART_RF_DISC_EVT:
+ return "RESTART_RF_DISC_EVT";
default:
return "Unknown event";
}
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.c
index bcc1e87..4edb0fe 100644
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.c
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the action functions the NFA_RW state machine.
@@ -36,6 +37,7 @@
static tNFC_STATUS nfa_rw_config_tag_ro(BOOLEAN b_hard_lock);
static BOOLEAN nfa_rw_op_req_while_busy(tNFA_RW_MSG *p_data);
static void nfa_rw_error_cleanup (UINT8 event);
+static void nfa_rw_presence_check (tNFA_RW_MSG *p_data);
/*******************************************************************************
**
@@ -129,18 +131,26 @@
**
** Function nfa_rw_check_start_presence_check_timer
**
-** Description Start timer for presence check
+** Description Start timer to wait for specified time before presence check
**
** Returns Nothing
**
*******************************************************************************/
-static void nfa_rw_check_start_presence_check_timer (void)
+static void nfa_rw_check_start_presence_check_timer (UINT16 presence_check_start_delay)
{
#if (defined (NFA_DM_AUTO_PRESENCE_CHECK) && (NFA_DM_AUTO_PRESENCE_CHECK == TRUE))
if (nfa_rw_cb.flags & NFA_RW_FL_NOT_EXCL_RF_MODE)
{
- NFA_TRACE_DEBUG0("Starting presence check timer...");
- nfa_sys_start_timer(&nfa_rw_cb.tle, NFA_RW_PRESENCE_CHECK_TICK_EVT, NFA_RW_PRESENCE_CHECK_INTERVAL);
+ if (presence_check_start_delay)
+ {
+ NFA_TRACE_DEBUG0("Starting presence check timer...");
+ nfa_sys_start_timer(&nfa_rw_cb.tle, NFA_RW_PRESENCE_CHECK_TICK_EVT, presence_check_start_delay);
+ }
+ else
+ {
+ /* Presence check now */
+ nfa_rw_presence_check (NULL);
+ }
}
#endif /* NFA_DM_AUTO_PRESENCE_CHECK */
}
@@ -491,7 +501,18 @@
case RW_T1T_NDEF_DETECT_EVT:
nfa_rw_cb.tlv_st = NFA_RW_TLV_DETECT_ST_COMPLETE;
+
+ if ( (p_rw_data->status != NFC_STATUS_OK)
+ &&(nfa_rw_cb.cur_op == NFA_RW_OP_WRITE_NDEF)
+ &&(p_rw_data->ndef.flags & RW_NDEF_FL_FORMATABLE) && (!(p_rw_data->ndef.flags & RW_NDEF_FL_FORMATED)) && (p_rw_data->ndef.flags & RW_NDEF_FL_SUPPORTED) )
+ {
+ /* Tag is in Initialized state, Format the tag first and then Write NDEF */
+ if (RW_T1tFormatNDef() == NFC_STATUS_OK)
+ break;
+ }
+
nfa_rw_handle_ndef_detect(event, p_rw_data);
+
break;
case RW_T1T_NDEF_READ_EVT:
@@ -558,12 +579,32 @@
break;
case RW_T1T_FORMAT_CPLT_EVT:
+
if (p_rw_data->data.status == NFA_STATUS_OK)
nfa_rw_cb.ndef_st = NFA_RW_NDEF_ST_UNKNOWN;
- /* Command complete - perform cleanup, notify the app */
- nfa_rw_command_complete();
- nfa_dm_act_conn_cback_notify(NFA_FORMAT_CPLT_EVT, &conn_evt_data);
+ if (nfa_rw_cb.cur_op == NFA_RW_OP_WRITE_NDEF)
+ {
+ /* if format operation was done as part of ndef-write operation, now start NDEF Write */
+ if ( (p_rw_data->data.status != NFA_STATUS_OK)
+ ||((conn_evt_data.status = RW_T1tDetectNDef ()) != NFC_STATUS_OK) )
+ {
+ /* Command complete - perform cleanup, notify app */
+ nfa_rw_command_complete();
+ nfa_rw_cb.ndef_st = NFA_RW_NDEF_ST_FALSE;
+
+
+ /* if format operation failed or ndef detection did not start, then notify app of ndef-write operation failure */
+ conn_evt_data.status = NFA_STATUS_FAILED;
+ nfa_dm_act_conn_cback_notify(NFA_WRITE_CPLT_EVT, &conn_evt_data);
+ }
+ }
+ else
+ {
+ /* Command complete - perform cleanup, notify the app */
+ nfa_rw_command_complete();
+ nfa_dm_act_conn_cback_notify(NFA_FORMAT_CPLT_EVT, &conn_evt_data);
+ }
break;
case RW_T1T_INTF_ERROR_EVT:
@@ -1620,8 +1661,17 @@
}
else if (nfa_rw_cb.ndef_st == NFA_RW_NDEF_ST_FALSE)
{
- /* Tag is not NDEF */
- write_status = NFA_STATUS_FAILED;
+ if (nfa_rw_cb.protocol == NFC_PROTOCOL_T1T)
+ {
+ /* For Type 1 tag, NDEF can be written on Initialized tag
+ * Perform ndef detection first to check if tag is in Initialized state to Write NDEF */
+ write_status = nfa_rw_start_ndef_detection();
+ }
+ else
+ {
+ /* Tag is not NDEF */
+ write_status = NFA_STATUS_FAILED;
+ }
}
else
{
@@ -2170,11 +2220,15 @@
i93_command = I93_CMD_INVENTORY;
if (p_data->op_req.params.i93_cmd.uid_present)
{
- status = RW_I93Inventory (p_data->op_req.params.i93_cmd.uid);
+ status = RW_I93Inventory (p_data->op_req.params.i93_cmd.afi_present,
+ p_data->op_req.params.i93_cmd.afi,
+ p_data->op_req.params.i93_cmd.uid);
}
else
{
- status = RW_I93Inventory (NULL);
+ status = RW_I93Inventory (p_data->op_req.params.i93_cmd.afi_present,
+ p_data->op_req.params.i93_cmd.afi,
+ NULL);
}
break;
@@ -2362,7 +2416,7 @@
/* Notify app of NFA_ACTIVATED_EVT and start presence check timer */
nfa_dm_notify_activation_status (NFA_STATUS_OK, NULL);
- nfa_rw_check_start_presence_check_timer ();
+ nfa_rw_check_start_presence_check_timer (NFA_RW_PRESENCE_CHECK_INTERVAL);
return TRUE;
}
@@ -2474,7 +2528,7 @@
if (activate_notify)
{
nfa_dm_notify_activation_status (NFA_STATUS_OK, &tag_params);
- nfa_rw_check_start_presence_check_timer ();
+ nfa_rw_check_start_presence_check_timer (NFA_RW_PRESENCE_CHECK_INTERVAL);
}
@@ -2525,6 +2579,7 @@
BOOLEAN nfa_rw_handle_op_req (tNFA_RW_MSG *p_data)
{
BOOLEAN freebuf = TRUE;
+ UINT16 presence_check_start_delay = 0;
/* Check if activated */
if (!(nfa_rw_cb.flags & NFA_RW_FL_ACTIVATED))
@@ -2573,10 +2628,15 @@
break;
case NFA_RW_OP_SEND_RAW_FRAME:
+ presence_check_start_delay = p_data->op_req.params.send_raw_frame.p_data->layer_specific;
+
NFC_SendData (NFC_RF_CONN_ID, p_data->op_req.params.send_raw_frame.p_data);
- /* Command complete - perform cleanup */
- nfa_rw_command_complete();
+ /* Clear the busy flag */
+ nfa_rw_cb.flags &= ~NFA_RW_FL_API_BUSY;
+
+ /* Start presence_check after specified delay */
+ nfa_rw_check_start_presence_check_timer (presence_check_start_delay);
break;
case NFA_RW_OP_PRESENCE_CHECK:
@@ -2782,5 +2842,5 @@
nfa_rw_cb.flags &= ~NFA_RW_FL_API_BUSY;
/* Restart presence_check timer */
- nfa_rw_check_start_presence_check_timer ();
+ nfa_rw_check_start_presence_check_timer (NFA_RW_PRESENCE_CHECK_INTERVAL);
}
diff --git a/src/nfa/rw/nfa_rw_api.c b/src/nfa/rw/nfa_rw_api.c
index 4ac6dd4..0001e96 100644
--- a/src/nfa/rw/nfa_rw_api.c
+++ b/src/nfa/rw/nfa_rw_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* NFA interface for tag Reader/Writer
@@ -257,15 +258,16 @@
tNFA_RW_OPERATION *p_msg;
tNFC_PROTOCOL protocol = nfa_rw_cb.protocol;
- if ((protocol != NFC_PROTOCOL_T1T) && (protocol != NFC_PROTOCOL_T2T) && (protocol != NFC_PROTOCOL_15693))
+ if ((protocol != NFC_PROTOCOL_T1T) && (protocol != NFC_PROTOCOL_T2T) && (protocol != NFC_PROTOCOL_15693) && (protocol != NFC_PROTOCOL_ISO_DEP) && (protocol != NFC_PROTOCOL_T3T))
{
NFA_TRACE_API1 ("NFA_RwSetTagReadOnly (): Cannot Configure as read only for Protocol: %d", protocol);
return (NFA_STATUS_REJECTED);
}
- if (!b_hard_lock && (protocol == NFC_PROTOCOL_15693))
+ if ( (!b_hard_lock && (protocol == NFC_PROTOCOL_15693))
+ ||(b_hard_lock && (protocol == NFC_PROTOCOL_ISO_DEP)) )
{
- NFA_TRACE_API1 ("NFA_RwSetTagReadOnly (): Can only hardlock for Protocol: %d", protocol);
+ NFA_TRACE_API2 ("NFA_RwSetTagReadOnly (): Cannot %s for Protocol: %d", b_hard_lock ? "Hard lock" : "Soft lock", protocol);
return (NFA_STATUS_REJECTED);
}
@@ -643,7 +645,7 @@
{
tNFA_RW_OPERATION *p_msg;
- NFA_TRACE_API1 ("NFA_RwT2tRead (): Block to write: %d", block_number);
+ NFA_TRACE_API1 ("NFA_RwT2tWrite (): Block to write: %d", block_number);
if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL)
{
@@ -805,7 +807,7 @@
** Function NFA_RwI93Inventory
**
** Description:
-** Send Inventory command to the activated ISO 15693 tag.
+** Send Inventory command to the activated ISO 15693 tag with/without AFI
** If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
**
** When the operation has completed (or if an error occurs), the
@@ -817,11 +819,11 @@
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
-tNFA_STATUS NFA_RwI93Inventory (UINT8 afi, UINT8 *p_uid)
+tNFA_STATUS NFA_RwI93Inventory (BOOLEAN afi_present, UINT8 afi, UINT8 *p_uid)
{
tNFA_RW_OPERATION *p_msg;
- NFA_TRACE_API1 ("NFA_RwI93Inventory (): AFI: 0x%02X", afi);
+ NFA_TRACE_API2 ("NFA_RwI93Inventory (): afi_present:%d, AFI: 0x%02X", afi_present, afi);
if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693)
{
@@ -834,6 +836,7 @@
p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT;
p_msg->op = NFA_RW_OP_I93_INVENTORY;
+ p_msg->params.i93_cmd.afi_present = afi_present;
p_msg->params.i93_cmd.afi = afi;
if (p_uid)
diff --git a/src/nfa/rw/nfa_rw_main.c b/src/nfa/rw/nfa_rw_main.c
index 0304328..d46360d 100644
--- a/src/nfa/rw/nfa_rw_main.c
+++ b/src/nfa/rw/nfa_rw_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2003-2012 Broadcom Corporation
+ * Copyright (C) 2003-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA_RW
diff --git a/src/nfa/snep/nfa_snep_act.c b/src/nfa/snep/nfa_snep_act.c
deleted file mode 100644
index 68810c7..0000000
--- a/src/nfa/snep/nfa_snep_act.c
+++ /dev/null
@@ -1,1975 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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 generic SNEP implementation file for the NFA SNEP.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_api.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "llcp_defs.h"
-#include "nfa_p2p_int.h"
-#include "nfa_snep_int.h"
-#include "nfa_mem_co.h"
-#include "trace_api.h"
-
-/*****************************************************************************
-** Global Variables
-*****************************************************************************/
-
-/*****************************************************************************
-** Static Functions
-*****************************************************************************/
-
-/* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char *nfa_snep_opcode (UINT8 opcode);
-#endif
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function nfa_snep_sap_to_index
-**
-** Description find a connection control block with SAP
-**
-**
-** Returns index of connection control block if success
-** NFA_SNEP_MAX_CONN, otherwise
-**
-*******************************************************************************/
-UINT8 nfa_snep_sap_to_index (UINT8 local_sap, UINT8 remote_sap, UINT8 flags)
-{
- UINT8 xx;
-
- for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
- {
- if ( (nfa_snep_cb.conn[xx].p_cback)
- &&(nfa_snep_cb.conn[xx].local_sap == local_sap)
- &&((remote_sap == NFA_SNEP_ANY_SAP) || (nfa_snep_cb.conn[xx].remote_sap == remote_sap))
- &&((nfa_snep_cb.conn[xx].flags & flags) == flags) )
- {
- return xx;
- }
- }
- return NFA_SNEP_MAX_CONN;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_allocate_cb
-**
-** Description Allocate a connection control block
-**
-**
-** Returns index of connection control block if success
-** NFA_SNEP_MAX_CONN, otherwise
-**
-*******************************************************************************/
-UINT8 nfa_snep_allocate_cb (void)
-{
- UINT8 xx;
-
- for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
- {
- if (nfa_snep_cb.conn[xx].p_cback == NULL)
- {
- memset (&nfa_snep_cb.conn[xx], 0x00, sizeof (tNFA_SNEP_CONN));
- return xx;
- }
- }
- return NFA_SNEP_MAX_CONN;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_deallocate_cb
-**
-** Description Deallocate a connection control block
-**
-**
-** Returns void
-**
-*******************************************************************************/
-void nfa_snep_deallocate_cb (UINT8 xx)
-{
- nfa_snep_cb.conn[xx].p_cback = NULL;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_timer_cback
-**
-** Description Process timeout event when timer expires
-**
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_snep_timer_cback (void *p_tle)
-{
- UINT8 dlink = (UINT8) ((TIMER_LIST_ENT*)p_tle)->event;
-
- SNEP_TRACE_DEBUG1 ("nfa_snep_timer_cback () dlink = %d", dlink);
-
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_get_efficent_miu
-**
-** Description Calculate best MIU to send data for throughput
-**
-**
-** Returns most efficent MIU for throughput
-**
-*******************************************************************************/
-static UINT16 nfa_snep_get_efficent_miu (UINT16 remote_miu, UINT8 remote_rw)
-{
- UINT16 local_link_miu, remote_link_miu;
- UINT16 max_num_pdu_in_agf;
- UINT16 efficent_miu;
-
- SNEP_TRACE_DEBUG2 ("nfa_snep_get_efficent_miu () remote_miu = %d, remote_rw = %d",
- remote_miu, remote_rw);
-
- LLCP_GetLinkMIU (&local_link_miu, &remote_link_miu);
-
- /* local buffer size is small than max receiving size of peer */
- if (local_link_miu < remote_link_miu)
- {
- remote_link_miu = local_link_miu;
- }
-
- /*
- ** 9 bytes overhead if AGF is used
- ** - 2 byts AGF header
- ** - at least two of 2 bytes length field for I-PDU
- ** - 3 bytes header for I-PDU
- */
- if (remote_link_miu - remote_miu > 9)
- {
- /*
- ** 5 bytes overhead for each I-PDU in AGF
- ** - 2 bytes length field
- ** - 3 bytes header for I-PDU
- */
- max_num_pdu_in_agf = remote_link_miu / (remote_miu + 5);
-
- if (remote_link_miu % (remote_miu + 5))
- {
- max_num_pdu_in_agf += 1;
- }
-
- /* if local devie can put all I-PDU in one AGF */
- if (max_num_pdu_in_agf <= remote_rw)
- {
- efficent_miu = (remote_link_miu - max_num_pdu_in_agf*5)/max_num_pdu_in_agf;
- }
- else
- {
- efficent_miu = remote_miu;
- }
- }
- else
- {
- efficent_miu = remote_miu;
- }
-
- SNEP_TRACE_DEBUG2 ("nfa_snep_get_efficent_miu () remote_link_miu = %d, efficent_miu = %d",
- remote_link_miu, efficent_miu);
-
- return efficent_miu;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_check_version
-**
-** Description Check version of SNEP
-**
-**
-** Returns TRUE if supported
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_check_version (UINT8 version)
-{
- /* if major version is matched */
- if ((version & 0xF0) == (NFA_SNEP_VERSION & 0xF0))
- return TRUE;
- else
- return FALSE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_send_msg
-**
-** Description Send complete or the first fragment of SNEP message with or
-** without information.
-**
-** Returns void
-**
-*******************************************************************************/
-void nfa_snep_send_msg (UINT8 opcode, UINT8 dlink)
-{
- BT_HDR *p_msg;
- UINT32 length;
- UINT8 *p;
- tLLCP_STATUS status = LLCP_STATUS_FAIL;
-
-#if (BT_TRACE_VERBOSE == TRUE)
- SNEP_TRACE_DEBUG4 ("nfa_snep_send_msg () [0x%x, 0x%x]: %s (0x%02x)",
- nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- nfa_snep_opcode (opcode), opcode);
-#else
- SNEP_TRACE_DEBUG3 ("nfa_snep_send_msg () [0x%x, 0x%x]: opcode 0x%02x",
- nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- opcode);
-#endif
-
- /* if there is pending SNEP message and opcode can have information */
- if ( (nfa_snep_cb.conn[dlink].p_ndef_buff)
- &&((opcode == NFA_SNEP_REQ_CODE_GET) || (opcode == NFA_SNEP_REQ_CODE_PUT) || (opcode == NFA_SNEP_RESP_CODE_SUCCESS)) )
- {
- length = NFA_SNEP_HEADER_SIZE + nfa_snep_cb.conn[dlink].ndef_length;
-
- if (opcode == NFA_SNEP_REQ_CODE_GET)
- {
- length += NFA_SNEP_ACCEPT_LEN_SIZE; /* add acceptable length field */
- }
-
- /* if message is bigger than peer's MIU, send the first fragment */
- if (length > nfa_snep_cb.conn[dlink].tx_miu)
- {
- length = nfa_snep_cb.conn[dlink].tx_miu;
- }
-
- if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
- {
- p_msg->len = (UINT16) length;
- p_msg->offset = LLCP_MIN_OFFSET;
-
- p = (UINT8*) (p_msg + 1) + p_msg->offset;
-
- /* add SNEP header */
- UINT8_TO_BE_STREAM (p, NFA_SNEP_VERSION);
- UINT8_TO_BE_STREAM (p, opcode);
-
- if (opcode == NFA_SNEP_REQ_CODE_GET)
- {
- /* add acceptable length field in information field*/
- UINT32_TO_BE_STREAM (p, nfa_snep_cb.conn[dlink].ndef_length + NFA_SNEP_ACCEPT_LEN_SIZE);
- UINT32_TO_BE_STREAM (p, nfa_snep_cb.conn[dlink].acceptable_length);
- length -= NFA_SNEP_ACCEPT_LEN_SIZE;
- }
- else
- {
- UINT32_TO_BE_STREAM (p, nfa_snep_cb.conn[dlink].ndef_length);
- }
-
- length -= NFA_SNEP_HEADER_SIZE;
-
-
- /* add the first fragment or complete of NDEF message */
- memcpy (p, nfa_snep_cb.conn[dlink].p_ndef_buff, length);
-
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispSNEP (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- (UINT8*)(p_msg + 1) + p_msg->offset,
- NFA_SNEP_HEADER_SIZE,
- FALSE);
-#endif
- status = LLCP_SendData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, p_msg);
-
- if (status != LLCP_STATUS_FAIL)
- {
- SNEP_TRACE_DEBUG2 ("nfa_snep_send_msg (): sending %d out of %d",
- length, nfa_snep_cb.conn[dlink].ndef_length);
-
- /* if sent complete SNEP message */
- if (length == nfa_snep_cb.conn[dlink].ndef_length)
- {
- nfa_snep_cb.conn[dlink].cur_length = 0;
-
- if ( (opcode == NFA_SNEP_RESP_CODE_SUCCESS)
- &&(nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_GET) )
- {
- /* Set LLCP to send LLCP_SAP_EVT_TX_COMPLETE */
- LLCP_SetTxCompleteNtf (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
- }
- }
- else
- {
- /* update sent length */
- nfa_snep_cb.conn[dlink].cur_length = length;
-
- if ((opcode == NFA_SNEP_REQ_CODE_GET) || (opcode == NFA_SNEP_REQ_CODE_PUT))
- {
- nfa_snep_cb.conn[dlink].flags |= NFA_SNEP_FLAG_W4_RESP_CONTINUE;
- }
- else /* (opcode == NFA_SNEP_RESP_CODE_SUCCESS) */
- {
- nfa_snep_cb.conn[dlink].flags |= NFA_SNEP_FLAG_W4_REQ_CONTINUE;
- }
- }
- }
- }
- }
- else /* opcode without information */
- {
- if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
- {
- p_msg->len = NFA_SNEP_HEADER_SIZE;
- p_msg->offset = LLCP_MIN_OFFSET;
-
- p = (UINT8*) (p_msg + 1) + p_msg->offset;
-
- /* add SNEP header without information */
- UINT8_TO_BE_STREAM (p, NFA_SNEP_VERSION);
- UINT8_TO_BE_STREAM (p, opcode);
- UINT32_TO_BE_STREAM (p, 0);
-
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispSNEP(nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- (UINT8*)(p_msg + 1) + p_msg->offset,
- NFA_SNEP_HEADER_SIZE,
- FALSE);
-#endif
- status = LLCP_SendData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, p_msg);
- }
- }
-
- if (status == LLCP_STATUS_FAIL)
- {
- SNEP_TRACE_ERROR0 ("Cannot allocate buffer or failed to send data");
-
- /* upper layer will free buffer when NFA_SNEP_DISC_EVT is received */
- nfa_snep_cb.conn[dlink].p_ndef_buff = 0;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- }
- else if (status == LLCP_STATUS_CONGESTED)
- {
- nfa_snep_cb.conn[dlink].congest = TRUE;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_send_remaining
-**
-** Description Send remaining fragments of SNEP message
-**
-**
-** Returns void
-**
-*******************************************************************************/
-void nfa_snep_send_remaining (UINT8 dlink)
-{
- BT_HDR *p_msg;
- UINT8 *p_src, *p_dst;
- UINT32 length;
- tLLCP_STATUS status;
-
- SNEP_TRACE_DEBUG1 ("nfa_snep_send_remaining (): dlink:0x%02X", dlink);
-
- /* while data link connection is not congested */
- while ( (nfa_snep_cb.conn[dlink].congest == FALSE)
- &&(nfa_snep_cb.conn[dlink].cur_length > 0) /* if any fragment was sent */
- &&(nfa_snep_cb.conn[dlink].cur_length < nfa_snep_cb.conn[dlink].ndef_length) )
- {
- /* start of remaining fragments */
- p_src = nfa_snep_cb.conn[dlink].p_ndef_buff + nfa_snep_cb.conn[dlink].cur_length;
-
- length = nfa_snep_cb.conn[dlink].ndef_length - nfa_snep_cb.conn[dlink].cur_length;
-
- /* sending up to peer's MIU */
- if (length > nfa_snep_cb.conn[dlink].tx_miu)
- {
- length = nfa_snep_cb.conn[dlink].tx_miu;
- }
-
- status = LLCP_STATUS_FAIL;
-
- if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
- {
- p_msg->len = (UINT16) length;
- p_msg->offset = LLCP_MIN_OFFSET;
-
- p_dst = (UINT8*) (p_msg + 1) + p_msg->offset;
-
- memcpy (p_dst, p_src, length);
-
- status = LLCP_SendData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, p_msg);
-
- if (status != LLCP_STATUS_FAIL)
- {
- /* update sent length */
- nfa_snep_cb.conn[dlink].cur_length += length;
-
- SNEP_TRACE_DEBUG2 ("nfa_snep_send_remaining (): sending %d out of %d",
- nfa_snep_cb.conn[dlink].cur_length,
- nfa_snep_cb.conn[dlink].ndef_length);
-
- /* if sent the last fragment */
- if (nfa_snep_cb.conn[dlink].cur_length == nfa_snep_cb.conn[dlink].ndef_length)
- {
- nfa_snep_cb.conn[dlink].cur_length = 0;
-
- if ( (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_RESP_CODE_SUCCESS)
- &&(nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_CONTINUE) )
- {
- /* Set LLCP to send LLCP_SAP_EVT_TX_COMPLETE */
- LLCP_SetTxCompleteNtf (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
- }
- }
- }
- }
-
- if (status == LLCP_STATUS_CONGESTED)
- {
- nfa_snep_cb.conn[dlink].congest = TRUE;
-
- /* wait for uncongested event from LLCP */
- break;
- }
- else if (status == LLCP_STATUS_FAIL)
- {
- SNEP_TRACE_ERROR0 ("Cannot allocate buffer or failed to send data");
-
- /* upper layer will free buffer when NFA_SNEP_DISC_EVT is received */
- nfa_snep_cb.conn[dlink].p_ndef_buff = 0;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- return;
- }
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_llcp_cback
-**
-** Description Processing event from LLCP
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data)
-{
- SNEP_TRACE_DEBUG2 ("nfa_snep_llcp_cback (): event:0x%02X, local_sap:0x%02X", p_data->hdr.event, p_data->hdr.local_sap);
-
- switch (p_data->hdr.event)
- {
- case LLCP_SAP_EVT_DATA_IND:
- nfa_snep_proc_llcp_data_ind (p_data);
- break;
-
- case LLCP_SAP_EVT_CONNECT_IND:
- nfa_snep_proc_llcp_connect_ind (p_data);
- break;
-
- case LLCP_SAP_EVT_CONNECT_RESP:
- nfa_snep_proc_llcp_connect_resp (p_data);
- break;
-
- case LLCP_SAP_EVT_DISCONNECT_IND:
- nfa_snep_proc_llcp_disconnect_ind (p_data);
- break;
-
- case LLCP_SAP_EVT_DISCONNECT_RESP:
- nfa_snep_proc_llcp_disconnect_resp (p_data);
- break;
-
- case LLCP_SAP_EVT_CONGEST:
- /* congestion start/end */
- nfa_snep_proc_llcp_congest (p_data);
- break;
-
- case LLCP_SAP_EVT_LINK_STATUS:
- nfa_snep_proc_llcp_link_status (p_data);
- break;
-
- case LLCP_SAP_EVT_TX_COMPLETE:
- nfa_snep_proc_llcp_tx_complete (p_data);
- break;
-
- default:
- SNEP_TRACE_ERROR1 ("Unknown event:0x%02X", p_data->hdr.event);
- return;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_validate_rx_msg
-**
-** Description Validate version, opcode, length in received message
-**
-**
-** Returns TRUE if message is valid
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_validate_rx_msg (UINT8 dlink)
-{
- UINT32 length;
- UINT8 buffer[NFA_SNEP_HEADER_SIZE], *p;
- BOOLEAN more;
- UINT8 version, opcode;
- UINT32 info_len;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_validate_rx_msg ()");
-
- more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- NFA_SNEP_HEADER_SIZE,
- &length, buffer);
-
-#if (BT_TRACE_PROTOCOL == TRUE)
- DispSNEP(nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- buffer,
- (UINT16)length,
- TRUE);
-#endif
-
- /* check if it has minimum header,
- ** the first fragment shall include at least the entier SNEP header
- */
- if (length < NFA_SNEP_HEADER_SIZE)
- {
- SNEP_TRACE_ERROR0 ("The first fragment shall include at least the entire SNEP header");
-
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- return FALSE;
- }
-
- p = buffer;
-
- /* parse SNEP header */
- BE_STREAM_TO_UINT8 (version, p);
- BE_STREAM_TO_UINT8 (opcode, p);
- BE_STREAM_TO_UINT32 (info_len, p);
-
- /* check version of SNEP */
- if (!nfa_snep_check_version (version))
- {
- nfa_snep_send_msg (NFA_SNEP_RESP_CODE_UNSUPP_VER, dlink);
- return FALSE;
- }
-
- /* check valid opcode for server */
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_SERVER)
- {
- /* if this is response message */
- if (opcode & NFA_SNEP_RESP_CODE_CONTINUE)
- {
- SNEP_TRACE_ERROR0 ("Invalid opcode for server");
-
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- return FALSE;
- }
- else if ( (opcode != NFA_SNEP_REQ_CODE_CONTINUE)
- &&(opcode != NFA_SNEP_REQ_CODE_GET)
- &&(opcode != NFA_SNEP_REQ_CODE_PUT)
- &&(opcode != NFA_SNEP_REQ_CODE_REJECT) )
- {
- SNEP_TRACE_ERROR0 ("Not supported opcode for server");
- nfa_snep_send_msg (NFA_SNEP_RESP_CODE_NOT_IMPLM, dlink);
- return FALSE;
- }
- }
- /* check valid opcode for client */
- else
- {
- if ( (opcode != NFA_SNEP_RESP_CODE_CONTINUE)
- &&(opcode != NFA_SNEP_RESP_CODE_SUCCESS)
- &&(opcode != NFA_SNEP_RESP_CODE_NOT_FOUND)
- &&(opcode != NFA_SNEP_RESP_CODE_EXCESS_DATA)
- &&(opcode != NFA_SNEP_RESP_CODE_BAD_REQ)
- &&(opcode != NFA_SNEP_RESP_CODE_NOT_IMPLM)
- &&(opcode != NFA_SNEP_RESP_CODE_UNSUPP_VER)
- &&(opcode != NFA_SNEP_RESP_CODE_REJECT) )
- {
- SNEP_TRACE_ERROR0 ("Invalid opcode for client");
- /* client cannot send error code so disconnect */
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- return FALSE;
- }
- }
-
- if (opcode == NFA_SNEP_REQ_CODE_GET)
- {
- more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- NFA_SNEP_ACCEPT_LEN_SIZE,
- &length, buffer);
-
- if (length < NFA_SNEP_ACCEPT_LEN_SIZE)
- {
- /*
- ** Including acceptable length in the first segment is not mandated in spec
- ** but MIU is always big enough to include acceptable length field.
- */
- nfa_snep_send_msg (NFA_SNEP_RESP_CODE_BAD_REQ, dlink);
- return FALSE;
- }
-
- p = buffer;
- BE_STREAM_TO_UINT32 (nfa_snep_cb.conn[dlink].acceptable_length, p);
-
- /* store expected NDEF message length */
- nfa_snep_cb.conn[dlink].ndef_length = info_len - NFA_SNEP_ACCEPT_LEN_SIZE;
- }
- else if ( (opcode == NFA_SNEP_REQ_CODE_PUT)
- ||((opcode == NFA_SNEP_RESP_CODE_SUCCESS) && (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)))
- {
- /* store expected NDEF message length */
- nfa_snep_cb.conn[dlink].ndef_length = info_len;
- }
- else
- {
- if (more)
- {
- SNEP_TRACE_ERROR0 ("The information field shall not be transmitted with this request or response");
-
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_SERVER)
- {
- nfa_snep_send_msg (NFA_SNEP_RESP_CODE_BAD_REQ, dlink);
- }
- /* client cannot send error code so disconnect */
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- return FALSE;
- }
- }
-
- /* store received opcode */
- nfa_snep_cb.conn[dlink].rx_code = opcode;
-
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_store_first_rx_msg
-**
-** Description Allocate buffer and store the first fragment
-**
-**
-** Returns TRUE if the received fragment is successfully stored
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_store_first_rx_msg (UINT8 dlink)
-{
- tNFA_SNEP_EVT_DATA evt_data;
- BOOLEAN more;
- UINT32 length;
-
- /* send event to upper layer of this data link connection to allocate buffer */
- evt_data.alloc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.alloc.req_code = nfa_snep_cb.conn[dlink].rx_code;
- evt_data.alloc.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
- evt_data.alloc.p_buff = NULL;
-
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_ALLOC_BUFF_EVT, &evt_data);
- nfa_snep_cb.conn[dlink].p_ndef_buff = evt_data.alloc.p_buff;
-
- /* store information into application buffer */
- if (nfa_snep_cb.conn[dlink].p_ndef_buff)
- {
- /* store buffer size */
- nfa_snep_cb.conn[dlink].buff_length = evt_data.alloc.ndef_length;
-
- more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- nfa_snep_cb.conn[dlink].buff_length,
- &length,
- nfa_snep_cb.conn[dlink].p_ndef_buff);
-
- /* store received message length */
- nfa_snep_cb.conn[dlink].cur_length = (UINT32) length;
-
- SNEP_TRACE_DEBUG2 ("Received NDEF on SNEP, %d ouf of %d",
- nfa_snep_cb.conn[dlink].cur_length,
- nfa_snep_cb.conn[dlink].ndef_length);
-
- /* if fragmented */
- if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].cur_length)
- {
- nfa_snep_cb.conn[dlink].rx_fragments = TRUE;
- }
- else if (more)
- {
- /* ignore extra bytes in the message */
- length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
-
- SNEP_TRACE_WARNING1 ("Received extra %d bytes on SNEP", length);
- }
-
- return TRUE;
- }
- else
- {
- SNEP_TRACE_ERROR1 ("Upper layer cannot allocate buffer for %d bytes",
- nfa_snep_cb.conn[dlink].ndef_length);
-
- /* clear data in data link connection */
- length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
-
- /* if fragmented */
- if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].cur_length)
- {
- /* notify peer not to send any more fragment */
- if (evt_data.alloc.resp_code != NFA_SNEP_RESP_CODE_NOT_IMPLM)
- {
- /* Set proper code */
- evt_data.alloc.resp_code = NFA_SNEP_REQ_CODE_REJECT;
- }
- }
- else
- {
- if (evt_data.alloc.resp_code != NFA_SNEP_RESP_CODE_NOT_IMPLM)
- {
- /* Set proper code */
- evt_data.alloc.resp_code = NFA_SNEP_RESP_CODE_NOT_FOUND;
- }
- }
-
- nfa_snep_send_msg (evt_data.alloc.resp_code, dlink);
-
- return FALSE;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_first_rx_msg
-**
-** Description Process the first part of received message
-**
-**
-** Returns TRUE if it is not fragmented message
-** FALSE if it is fragmented or found error
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_proc_first_rx_msg (UINT8 dlink)
-{
- UINT32 length;
- tNFA_SNEP_EVT_DATA evt_data;
- BOOLEAN more;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_first_rx_msg ()");
-
- /* if version, opcode or length is not valid in received message */
- if (!nfa_snep_validate_rx_msg (dlink))
- {
- /* clear data in data link connection */
- LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
- return FALSE;
- }
-
- if (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_GET)
- {
- /* if failed to allocate buffer */
- if (!nfa_snep_store_first_rx_msg (dlink))
- {
- return FALSE;
- }
- else
- {
- if (nfa_snep_cb.conn[dlink].rx_fragments == TRUE)
- {
- /* let peer send remaining fragments */
- nfa_snep_send_msg (NFA_SNEP_RESP_CODE_CONTINUE, dlink);
-
- return FALSE;
- }
- }
- }
- else if (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_PUT)
- {
- /* if failed to allocate buffer */
- if (!nfa_snep_store_first_rx_msg (dlink))
- {
- return FALSE;
- }
- else
- {
- if (nfa_snep_cb.conn[dlink].rx_fragments == TRUE)
- {
- /* let peer send remaining fragments */
- nfa_snep_send_msg (NFA_SNEP_RESP_CODE_CONTINUE, dlink);
- return FALSE;
- }
- }
- }
- /* if we got response of GET request from server */
- else if ( (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_RESP_CODE_SUCCESS)
- &&(nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET) )
- {
- /* if server is sending more than acceptable length */
- if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].acceptable_length)
- {
- SNEP_TRACE_ERROR0 ("Server is sending more than acceptable length");
-
- length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
-
- /* if fragmented */
- if (nfa_snep_cb.conn[dlink].ndef_length > length)
- {
- nfa_snep_send_msg (NFA_SNEP_REQ_CODE_REJECT, dlink);
- nfa_snep_cb.conn[dlink].rx_fragments = FALSE;
- }
-
- /* return error to client so buffer can be freed */
- evt_data.get_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.get_resp.resp_code = NFA_SNEP_RESP_CODE_EXCESS_DATA;
- evt_data.get_resp.ndef_length = 0;
- evt_data.get_resp.p_ndef = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_EVT, &evt_data);
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- return FALSE;
- }
-
- more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- nfa_snep_cb.conn[dlink].buff_length,
- &length,
- nfa_snep_cb.conn[dlink].p_ndef_buff);
-
- /* store received message length */
- nfa_snep_cb.conn[dlink].cur_length = length;
-
- SNEP_TRACE_DEBUG2 ("Received NDEF on SNEP, %d ouf of %d",
- nfa_snep_cb.conn[dlink].cur_length,
- nfa_snep_cb.conn[dlink].ndef_length);
-
- if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].cur_length)
- {
- nfa_snep_cb.conn[dlink].rx_fragments = TRUE;
- }
- else if (more)
- {
- /* ignore extra bytes in the message */
- length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
-
- SNEP_TRACE_WARNING1 ("Received extra %d bytes on SNEP", length);
- }
-
- if (nfa_snep_cb.conn[dlink].rx_fragments == TRUE)
- {
- /* let peer send remaining fragments */
- nfa_snep_send_msg (NFA_SNEP_REQ_CODE_CONTINUE, dlink);
-
- /* start timer for next fragment */
- nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
-
- return FALSE;
- }
- }
-
- /* other than above cases, there is no inforamtion field */
-
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_assemble_fragments
-**
-** Description Assemble fragments of SNEP message
-**
-**
-** Returns TRUE if it is not fragmented message
-** FALSE if it is fragmented or found error
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_assemble_fragments (UINT8 dlink)
-{
- BOOLEAN more;
- UINT32 length;
-
- more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- nfa_snep_cb.conn[dlink].buff_length - nfa_snep_cb.conn[dlink].cur_length,
- &length,
- nfa_snep_cb.conn[dlink].p_ndef_buff + nfa_snep_cb.conn[dlink].cur_length);
-
- nfa_snep_cb.conn[dlink].cur_length += length;
-
- SNEP_TRACE_DEBUG2 ("Received NDEF on SNEP, %d ouf of %d",
- nfa_snep_cb.conn[dlink].cur_length,
- nfa_snep_cb.conn[dlink].ndef_length);
-
- /* if received the last fragment */
- if (nfa_snep_cb.conn[dlink].ndef_length == nfa_snep_cb.conn[dlink].cur_length)
- {
- nfa_snep_cb.conn[dlink].rx_fragments = FALSE;
-
- if (more)
- {
- length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap);
-
- SNEP_TRACE_ERROR2 ("Received extra %d bytes more than NDEF length (%d)",
- length,
- nfa_snep_cb.conn[dlink].ndef_length);
-
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-
- return FALSE;
- }
- }
- else
- {
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CLIENT)
- {
- /* wait for more fragments */
- nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
- }
-
- return FALSE;
- }
-
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_data_ind
-**
-** Description Processing incoming data from LLCP
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 dlink;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_data_ind ()");
-
- /* find connection control block with SAP */
- dlink = nfa_snep_sap_to_index (p_data->data_ind.local_sap,
- p_data->data_ind.remote_sap,
- NFA_SNEP_FLAG_ANY);
-
- /* if found */
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CLIENT)
- {
- /* stop timer for response from server */
- nfa_sys_stop_timer (&nfa_snep_cb.conn[dlink].timer);
- }
-
- /* if received the first fragment or complete SNEP message */
- if (nfa_snep_cb.conn[dlink].rx_fragments == FALSE)
- {
- if (!nfa_snep_proc_first_rx_msg (dlink))
- {
- /* need more data or found error */
- return;
- }
- }
- /* if received other than the first fragment */
- else
- {
- if (!nfa_snep_assemble_fragments (dlink))
- {
- /* need more data or found error */
- return;
- }
- }
-
- /* processing complete SNEP message */
- switch (nfa_snep_cb.conn[dlink].rx_code)
- {
- case NFA_SNEP_REQ_CODE_CONTINUE:
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_W4_REQ_CONTINUE)
- {
- nfa_snep_cb.conn[dlink].flags &= ~NFA_SNEP_FLAG_W4_REQ_CONTINUE;
-
- /* send remaining fragments of GET response */
- nfa_snep_send_remaining (dlink);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Received invalid NFA_SNEP_REQ_CODE_CONTINUE");
-
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- }
- break;
-
- case NFA_SNEP_REQ_CODE_GET:
- evt_data.get_req.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.get_req.acceptable_length = nfa_snep_cb.conn[dlink].acceptable_length;
-
- /* NDEF message */
- evt_data.get_req.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
- evt_data.get_req.p_ndef = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- /* send event to server of this data link connection */
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_REQ_EVT, &evt_data);
- break;
-
- case NFA_SNEP_REQ_CODE_PUT:
- evt_data.put_req.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
- /* NDEF message */
- evt_data.put_req.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
- evt_data.put_req.p_ndef = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- /* send event to server of this data link connection */
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_PUT_REQ_EVT, &evt_data);
- break;
-
- case NFA_SNEP_RESP_CODE_CONTINUE:
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_W4_RESP_CONTINUE)
- {
- nfa_snep_cb.conn[dlink].flags &= ~NFA_SNEP_FLAG_W4_RESP_CONTINUE;
- /* send remaining fragments GET/PUT request */
- nfa_snep_send_remaining (dlink);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Received invalid NFA_SNEP_RESP_CODE_CONTINUE");
-
- /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap, TRUE);
- }
- break;
-
- case NFA_SNEP_RESP_CODE_SUCCESS:
- if (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)
- {
- evt_data.get_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.get_resp.resp_code = NFA_SNEP_RESP_CODE_SUCCESS;
- evt_data.get_resp.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
- evt_data.get_resp.p_ndef = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
- /* send event to client of this data link connection */
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_EVT, &evt_data);
- }
- else
- {
- evt_data.put_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.put_resp.resp_code = NFA_SNEP_RESP_CODE_SUCCESS;
-
- /* send event to client of this data link connection */
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_PUT_RESP_EVT, &evt_data);
- }
- break;
-
- case NFA_SNEP_RESP_CODE_NOT_FOUND:
- case NFA_SNEP_RESP_CODE_EXCESS_DATA:
- case NFA_SNEP_RESP_CODE_BAD_REQ:
- case NFA_SNEP_RESP_CODE_NOT_IMPLM:
- case NFA_SNEP_RESP_CODE_UNSUPP_VER:
- case NFA_SNEP_RESP_CODE_REJECT:
- /* if client sent GET request */
- if (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)
- {
- evt_data.get_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.get_resp.resp_code = nfa_snep_cb.conn[dlink].rx_code;
- evt_data.get_resp.ndef_length = 0;
- evt_data.get_resp.p_ndef = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
- /* send event to client of this data link connection */
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_EVT, &evt_data);
- }
- /* if client sent PUT request */
- else if (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_PUT)
- {
- evt_data.put_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.put_resp.resp_code = nfa_snep_cb.conn[dlink].rx_code;
-
- /* send event to client of this data link connection */
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_PUT_RESP_EVT, &evt_data);
- }
-
- /* if there is remaining SNEP message */
- if (nfa_snep_cb.conn[dlink].p_ndef_buff)
- {
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
- }
- break;
- }
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_connect_ind
-**
-** Description Processing connection request from peer
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 server, dlink;
- tLLCP_CONNECTION_PARAMS params;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_connect_ind ()");
-
- server = nfa_snep_sap_to_index (p_data->connect_ind.server_sap,
- NFA_SNEP_ANY_SAP,
- NFA_SNEP_FLAG_SERVER);
-
- /* if found valid server */
- if (server < NFA_SNEP_MAX_CONN)
- {
- /* allocate connection control block for data link connection */
- dlink = nfa_snep_allocate_cb ();
-
- if (dlink < NFA_SNEP_MAX_CONN)
- {
- /* set data link connection's callback to server's callback */
- /* request will be sent to this server */
- nfa_snep_cb.conn[dlink].local_sap = p_data->connect_ind.local_sap;
- nfa_snep_cb.conn[dlink].remote_sap = p_data->connect_ind.remote_sap;
- nfa_snep_cb.conn[dlink].p_cback = nfa_snep_cb.conn[server].p_cback;
- nfa_snep_cb.conn[dlink].flags = NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CONNECTED;
-
- nfa_snep_cb.conn[dlink].tx_miu = nfa_snep_get_efficent_miu (p_data->connect_ind.miu,
- p_data->connect_ind.rw);
-
- /* accept connection request */
- params.miu = NFA_SNEP_MIU;
- params.rw = NFA_SNEP_RW;
- params.sn[0] = 0;
-
- LLCP_ConnectCfm (p_data->connect_ind.local_sap,
- p_data->connect_ind.remote_sap, ¶ms);
-
- evt_data.connect.reg_handle = (NFA_HANDLE_GROUP_SNEP | server);
- evt_data.connect.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_CONNECTED_EVT, &evt_data);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Cannot allocate connection control block");
- LLCP_ConnectReject (p_data->connect_ind.local_sap,
- p_data->connect_ind.remote_sap,
- LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
- }
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Cannot find SNEP server");
- LLCP_ConnectReject (p_data->connect_ind.local_sap,
- p_data->connect_ind.remote_sap,
- LLCP_SAP_DM_REASON_NO_SERVICE);
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_connect_resp
-**
-** Description Processing connection response from peer
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 dlink;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_connect_resp ()");
-
- /* find client by SAP */
- dlink = nfa_snep_sap_to_index (p_data->connect_resp.local_sap,
- NFA_SNEP_ANY_SAP,
- NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTING);
-
- /* if found client */
- if (dlink < NFA_SNEP_MAX_CONN)
- {
- nfa_snep_cb.conn[dlink].remote_sap = p_data->connect_resp.remote_sap;
- nfa_snep_cb.conn[dlink].flags = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTED;
-
- nfa_snep_cb.conn[dlink].tx_miu = nfa_snep_get_efficent_miu (p_data->connect_resp.miu,
- p_data->connect_resp.rw);
-
- evt_data.connect.reg_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.connect.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_CONNECTED_EVT, &evt_data);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Cannot find SNEP client");
- LLCP_DisconnectReq (p_data->connect_resp.local_sap,
- p_data->connect_resp.remote_sap, TRUE);
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_disconnect_ind
-**
-** Description Processing disconnection request from peer
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 dlink;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_disconnect_ind ()");
-
- /* find connection control block by SAP */
- dlink = nfa_snep_sap_to_index (p_data->disconnect_ind.local_sap,
- p_data->disconnect_ind.remote_sap,
- NFA_SNEP_FLAG_ANY);
-
- /* if found */
- if (dlink < NFA_SNEP_MAX_CONN)
- {
- evt_data.disc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_DISC_EVT, &evt_data);
-
- if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CLIENT)
- {
- /* clear other flags */
- nfa_snep_cb.conn[dlink].flags = NFA_SNEP_FLAG_CLIENT;
- nfa_snep_cb.conn[dlink].remote_sap = LLCP_INVALID_SAP;
- }
- else
- {
- nfa_snep_deallocate_cb (dlink);
- }
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Cannot find SNEP connection");
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_disconnect_resp
-**
-** Description Processing rejected connection from peer
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 dlink, flags;
- UINT8 remote_sap;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_disconnect_resp ()");
-
- /* if remote sent response to disconnection requested by local */
- if (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_RESP_DISC)
- {
- remote_sap = p_data->disconnect_resp.remote_sap;
- flags = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTED;
- }
- else /* connection failed so we don't have remote SAP */
- {
- remote_sap = NFA_SNEP_ANY_SAP;
- flags = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTING;
- }
-
- /* find connection control block by SAP */
- dlink = nfa_snep_sap_to_index (p_data->disconnect_resp.local_sap,
- remote_sap,
- flags);
-
- /* if found client */
- if (dlink < NFA_SNEP_MAX_CONN)
- {
- evt_data.disc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_DISC_EVT, &evt_data);
-
- /* clear other flags */
- nfa_snep_cb.conn[dlink].flags = NFA_SNEP_FLAG_CLIENT;
- nfa_snep_cb.conn[dlink].remote_sap = LLCP_INVALID_SAP;
- }
- else
- {
- /* find server connection control block by SAP */
- dlink = nfa_snep_sap_to_index (p_data->disconnect_resp.local_sap,
- remote_sap,
- NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CONNECTED);
-
- /* if found server connection */
- if (dlink < NFA_SNEP_MAX_CONN)
- {
- evt_data.disc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_DISC_EVT, &evt_data);
-
- nfa_snep_deallocate_cb (dlink);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Cannot find SNEP connection");
- }
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_congest
-**
-** Description Processing LLCP congestion event
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_congest (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 dlink;
-
- SNEP_TRACE_DEBUG3 ("nfa_snep_proc_llcp_congest () local_sap=0x%x, remote_sap=0x%x, is_congested=%d",
- p_data->congest.local_sap,
- p_data->congest.remote_sap,
- p_data->congest.is_congested);
-
- /* if data link connection is congested */
- if (p_data->congest.link_type == LLCP_LINK_TYPE_DATA_LINK_CONNECTION)
- {
- dlink = nfa_snep_sap_to_index (p_data->congest.local_sap,
- p_data->congest.remote_sap,
- NFA_SNEP_FLAG_ANY);
-
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- nfa_snep_cb.conn[dlink].congest = p_data->congest.is_congested;
-
- if (!nfa_snep_cb.conn[dlink].congest)
- {
- /* if received CONTINUE then continue to send remaining fragments */
- if ( (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_CONTINUE)
- ||(nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_RESP_CODE_CONTINUE) )
- {
- nfa_snep_send_remaining (dlink);
- }
- }
- }
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_link_status
-**
-** Description Processing LLCP link status
-**
-**
-** Returns none
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 xx;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG1 ("nfa_snep_proc_llcp_link_status () is_activated:%d",
- p_data->link_status.is_activated);
-
- xx = nfa_snep_sap_to_index (p_data->link_status.local_sap,
- NFA_SNEP_ANY_SAP,
- NFA_SNEP_FLAG_CLIENT);
-
- if (xx < NFA_SNEP_MAX_CONN)
- {
- evt_data.activated.client_handle = (NFA_HANDLE_GROUP_SNEP | xx);
-
- /* if LLCP link is activated */
- if (p_data->link_status.is_activated == TRUE)
- {
- /* notify only client which may want to connect */
- nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_ACTIVATED_EVT, &evt_data);
- }
- else
- {
- /* LLCP link is deactivated */
- nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_DEACTIVATED_EVT, &evt_data);
- }
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_proc_llcp_tx_complete
-**
-** Description Processing LLCP tx complete event
-**
-**
-** Returns none
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_tx_complete (tLLCP_SAP_CBACK_DATA *p_data)
-{
- UINT8 dlink;
- tNFA_SNEP_EVT_DATA evt_data;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_tx_complete ()");
-
- dlink = nfa_snep_sap_to_index (p_data->tx_complete.local_sap,
- p_data->tx_complete.remote_sap,
- NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CONNECTED);
-
- if (dlink < NFA_SNEP_MAX_CONN)
- {
- /* notify upper layer that transmission is complete */
- evt_data.get_resp_cmpl.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
- evt_data.get_resp_cmpl.p_buff = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
- nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_CMPL_EVT, &evt_data);
- nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_reg_server
-**
-** Description Allocate a connection control block as server and register to LLCP
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_reg_server (tNFA_SNEP_MSG *p_msg)
-{
- tNFA_SNEP_EVT_DATA evt_data;
- UINT8 xx, local_sap = LLCP_INVALID_SAP;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_reg_server ()");
-
- xx = nfa_snep_allocate_cb ();
-
- if (xx < NFA_SNEP_MAX_CONN)
- {
- local_sap = LLCP_RegisterServer (p_msg->api_reg_server.server_sap,
- LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
- p_msg->api_reg_server.service_name,
- nfa_snep_llcp_cback);
- }
-
- BCM_STRNCPY_S (evt_data.reg.service_name, sizeof (evt_data.reg.service_name),
- p_msg->api_reg_server.service_name, LLCP_MAX_SN_LEN);
- evt_data.reg.service_name[LLCP_MAX_SN_LEN] = 0x00;
-
- if ((xx == NFA_SNEP_MAX_CONN) || (local_sap == LLCP_INVALID_SAP))
- {
- SNEP_TRACE_ERROR0 ("Cannot allocate or register SNEP server");
-
- evt_data.reg.status = NFA_STATUS_FAILED;
- p_msg->api_reg_server.p_cback (NFA_SNEP_REG_EVT, &evt_data);
- return TRUE;
- }
-
- if (!nfa_snep_cb.is_dta_mode)
- {
- /* if need to update WKS in LLCP Gen bytes */
- if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
- {
- nfa_p2p_enable_listening (NFA_ID_SNEP, TRUE);
- nfa_snep_cb.listen_enabled = TRUE;
- }
- else if (!nfa_snep_cb.listen_enabled)
- {
- nfa_p2p_enable_listening (NFA_ID_SNEP, FALSE);
- nfa_snep_cb.listen_enabled = TRUE;
- }
- }
-
- nfa_snep_cb.conn[xx].local_sap = local_sap;
- nfa_snep_cb.conn[xx].remote_sap = LLCP_INVALID_SAP;
- nfa_snep_cb.conn[xx].p_cback = p_msg->api_reg_server.p_cback;
- nfa_snep_cb.conn[xx].flags = NFA_SNEP_FLAG_SERVER;
-
- evt_data.reg.status = NFA_STATUS_OK;
- evt_data.reg.reg_handle = (NFA_HANDLE_GROUP_SNEP | xx);
-
- /* notify NFA_SNEP_REG_EVT to application */
- nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_REG_EVT, &evt_data);
-
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_reg_client
-**
-** Description Allocate a connection control block as client and register to LLCP
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_reg_client (tNFA_SNEP_MSG *p_msg)
-{
- tNFA_SNEP_EVT_DATA evt_data;
- UINT8 xx, local_sap = LLCP_INVALID_SAP;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_reg_client ()");
-
- xx = nfa_snep_allocate_cb ();
-
- if (xx < NFA_SNEP_MAX_CONN)
- {
- local_sap = LLCP_RegisterClient (LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
- nfa_snep_llcp_cback);
- }
-
- evt_data.reg.service_name[0] = 0x00;
-
- if ((xx == NFA_SNEP_MAX_CONN) || (local_sap == LLCP_INVALID_SAP))
- {
- SNEP_TRACE_ERROR0 ("Cannot allocate or register SNEP client");
-
- evt_data.reg.status = NFA_STATUS_FAILED;
- p_msg->api_reg_client.p_cback (NFA_SNEP_REG_EVT, &evt_data);
- return TRUE;
- }
-
- nfa_snep_cb.conn[xx].local_sap = local_sap;
- nfa_snep_cb.conn[xx].remote_sap = LLCP_INVALID_SAP;
- nfa_snep_cb.conn[xx].p_cback = p_msg->api_reg_client.p_cback;
- nfa_snep_cb.conn[xx].flags = NFA_SNEP_FLAG_CLIENT;
-
- /* initialize timer callback */
- nfa_snep_cb.conn[xx].timer.p_cback = nfa_snep_timer_cback;
-
- evt_data.reg.status = NFA_STATUS_OK;
- evt_data.reg.reg_handle = (NFA_HANDLE_GROUP_SNEP | xx);
-
- /* notify NFA_SNEP_REG_EVT to application */
- nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_REG_EVT, &evt_data);
-
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_dereg
-**
-** Description Deallocate a connection control block and deregister to LLCP
-** LLCP will deallocate any data link connection created for this
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_dereg (tNFA_SNEP_MSG *p_msg)
-{
- UINT8 xx;
- UINT8 local_sap;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_dereg ()");
-
- xx = (UINT8) (p_msg->api_dereg.reg_handle & NFA_HANDLE_MASK);
-
- if ( (xx < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[xx].p_cback)
- &&(nfa_snep_cb.conn[xx].flags & (NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CLIENT)) )
- {
- local_sap = nfa_snep_cb.conn[xx].local_sap;
- LLCP_Deregister (local_sap);
- nfa_snep_deallocate_cb (xx);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Cannot find SNEP server/client");
- return TRUE;
- }
-
- if (!nfa_snep_cb.is_dta_mode)
- {
- if (nfa_snep_cb.listen_enabled)
- {
- for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
- {
- if ( (nfa_snep_cb.conn[xx].p_cback)
- &&(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_SERVER) )
- {
- break;
- }
- }
-
- if (xx >= NFA_SNEP_MAX_CONN)
- {
- /* if need to update WKS in LLCP Gen bytes */
- if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
- nfa_p2p_disable_listening (NFA_ID_SNEP, TRUE);
- else
- nfa_p2p_disable_listening (NFA_ID_SNEP, FALSE);
-
- nfa_snep_cb.listen_enabled = FALSE;
- }
- /* if need to update WKS in LLCP Gen bytes */
- else if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
- {
- nfa_p2p_enable_listening (NFA_ID_SNEP, TRUE);
- }
- }
- }
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_connect
-**
-** Description Create data link connection for client
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_connect (tNFA_SNEP_MSG *p_msg)
-{
- tLLCP_CONNECTION_PARAMS conn_params;
- UINT8 xx;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_connect ()");
-
- xx = (UINT8) (p_msg->api_connect.client_handle & NFA_HANDLE_MASK);
-
- if (xx < NFA_SNEP_MAX_CONN)
- {
- nfa_snep_cb.conn[xx].congest = FALSE;
-
- /* Set remote_sap to SDP to find callback in case that link is deactivted before connected */
- nfa_snep_cb.conn[xx].remote_sap = LLCP_SAP_SDP;
-
- /* in order to send NFA_SNEP_DISC_EVT in case of connection failure */
- nfa_snep_cb.conn[xx].flags = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTING;
-
- /* create data link connection with server name */
- conn_params.miu = NFA_SNEP_MIU;
- conn_params.rw = NFA_SNEP_RW;
- BCM_STRNCPY_S (conn_params.sn, sizeof (conn_params.sn),
- p_msg->api_connect.service_name, LLCP_MAX_SN_LEN);
- conn_params.sn[LLCP_MAX_SN_LEN] = 0;
-
- LLCP_ConnectReq (nfa_snep_cb.conn[xx].local_sap, LLCP_SAP_SDP, &conn_params);
- }
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_get_req
-**
-** Description Send SNEP GET request on data link connection
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_get_req (tNFA_SNEP_MSG *p_msg)
-{
- UINT8 dlink;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_get_req ()");
-
- dlink = (UINT8) (p_msg->api_get_req.conn_handle & NFA_HANDLE_MASK);
-
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- nfa_snep_cb.conn[dlink].tx_code = NFA_SNEP_REQ_CODE_GET;
- nfa_snep_cb.conn[dlink].buff_length = p_msg->api_get_req.buff_length;
- nfa_snep_cb.conn[dlink].ndef_length = p_msg->api_get_req.ndef_length;
- nfa_snep_cb.conn[dlink].p_ndef_buff = p_msg->api_get_req.p_ndef_buff;
- nfa_snep_cb.conn[dlink].acceptable_length = p_msg->api_get_req.buff_length;
-
- nfa_snep_send_msg (NFA_SNEP_REQ_CODE_GET, dlink);
-
- /* start timer for response from server */
- nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Data link connection is not established");
- }
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_put_req
-**
-** Description Send SNEP PUT request on data link connection
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_put_req (tNFA_SNEP_MSG *p_msg)
-{
- UINT8 dlink;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_put_req ()");
-
- dlink = (UINT8) (p_msg->api_put_req.conn_handle & NFA_HANDLE_MASK);
-
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- nfa_snep_cb.conn[dlink].tx_code = NFA_SNEP_REQ_CODE_PUT;
- nfa_snep_cb.conn[dlink].buff_length = p_msg->api_put_req.ndef_length;
- nfa_snep_cb.conn[dlink].ndef_length = p_msg->api_put_req.ndef_length;
- nfa_snep_cb.conn[dlink].p_ndef_buff = p_msg->api_put_req.p_ndef_buff;
-
- nfa_snep_send_msg (NFA_SNEP_REQ_CODE_PUT, dlink);
-
- /* start timer for response from server */
- nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Data link connection is not established");
- }
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_get_resp
-**
-** Description Server responds to GET request
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_get_resp (tNFA_SNEP_MSG *p_msg)
-{
- UINT8 dlink;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_get_resp ()");
-
- dlink = (UINT8) (p_msg->api_get_resp.conn_handle & NFA_HANDLE_MASK);
-
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- nfa_snep_cb.conn[dlink].buff_length = p_msg->api_get_resp.ndef_length;
- nfa_snep_cb.conn[dlink].ndef_length = p_msg->api_get_resp.ndef_length;
- nfa_snep_cb.conn[dlink].p_ndef_buff = p_msg->api_get_resp.p_ndef_buff;
-
- nfa_snep_cb.conn[dlink].tx_code = p_msg->api_get_resp.resp_code;
-
- nfa_snep_send_msg (p_msg->api_get_resp.resp_code, dlink);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Data link connection is not established");
- }
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_put_resp
-**
-** Description Server responds to PUT request
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_put_resp (tNFA_SNEP_MSG *p_msg)
-{
- UINT8 dlink;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_put_resp ()");
-
- dlink = (UINT8) (p_msg->api_put_resp.conn_handle & NFA_HANDLE_MASK);
-
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- nfa_snep_cb.conn[dlink].tx_code = p_msg->api_put_resp.resp_code;
-
- nfa_snep_send_msg (p_msg->api_put_resp.resp_code, dlink);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Data link connection is not established");
- }
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_disconnect
-**
-** Description Disconnect data link connection
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_disconnect (tNFA_SNEP_MSG *p_msg)
-{
- UINT8 dlink;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_disconnect ()");
-
- dlink = (UINT8) (p_msg->api_disc.conn_handle & NFA_HANDLE_MASK);
-
- if ( (dlink < NFA_SNEP_MAX_CONN)
- &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED) )
- {
- LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
- nfa_snep_cb.conn[dlink].remote_sap,
- p_msg->api_disc.flush);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Data link connection is not established");
- }
- return TRUE;
-}
-
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function nfa_snep_opcode
-**
-** Description
-**
-** Returns string of event
-**
-*******************************************************************************/
-static char *nfa_snep_opcode (UINT8 opcode)
-{
- switch (opcode)
- {
- case NFA_SNEP_REQ_CODE_CONTINUE:
- return "REQ_CONTINUE";
- case NFA_SNEP_REQ_CODE_GET:
- return "REQ_GET";
- case NFA_SNEP_REQ_CODE_PUT:
- return "REQ_PUT";
- case NFA_SNEP_REQ_CODE_REJECT:
- return "REQ_REJECT";
-
- case NFA_SNEP_RESP_CODE_CONTINUE:
- return "RESP_CONTINUE";
- case NFA_SNEP_RESP_CODE_SUCCESS:
- return "RESP_SUCCESS";
- case NFA_SNEP_RESP_CODE_NOT_FOUND:
- return "RESP_NOT_FOUND";
- case NFA_SNEP_RESP_CODE_EXCESS_DATA:
- return "RESP_EXCESS_DATA";
- case NFA_SNEP_RESP_CODE_BAD_REQ:
- return "RESP_BAD_REQ";
- case NFA_SNEP_RESP_CODE_NOT_IMPLM:
- return "RESP_NOT_IMPLM";
- case NFA_SNEP_RESP_CODE_UNSUPP_VER:
- return "RESP_UNSUPP_VER";
- case NFA_SNEP_RESP_CODE_REJECT:
- return "RESP_REJECT";
-
- default:
- return "Reserved opcode";
- }
-}
-
-#endif /* Debug Functions */
-
diff --git a/src/nfa/snep/nfa_snep_api.c b/src/nfa/snep/nfa_snep_api.c
deleted file mode 100644
index d02a7a5..0000000
--- a/src/nfa/snep/nfa_snep_api.c
+++ /dev/null
@@ -1,620 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * NFA SNEP interface to LLCP
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_api.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_snep_int.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function NFA_SnepStartDefaultServer
-**
-** Description This function is called to listen to SAP, 0x04 as SNEP default
-** server ("urn:nfc:sn:snep") on LLCP.
-**
-** NFA_SNEP_DEFAULT_SERVER_STARTED_EVT without data will be returned.
-**
-** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepStartDefaultServer (tNFA_SNEP_CBACK *p_cback)
-{
- tNFA_SNEP_API_START_DEFAULT_SERVER *p_msg;
-
- SNEP_TRACE_API0 ("NFA_SnepStartDefaultServer ()");
-
- if (p_cback == NULL)
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepStartDefaultServer (): p_cback is NULL");
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((p_msg = (tNFA_SNEP_API_START_DEFAULT_SERVER *) GKI_getbuf (sizeof (tNFA_SNEP_API_START_DEFAULT_SERVER))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_START_DEFAULT_SERVER_EVT;
- p_msg->p_cback = p_cback;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepStopDefaultServer
-**
-** Description This function is called to stop SNEP default server on LLCP.
-**
-** NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT without data will be returned.
-**
-** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepStopDefaultServer (tNFA_SNEP_CBACK *p_cback)
-{
- tNFA_SNEP_API_STOP_DEFAULT_SERVER *p_msg;
-
- SNEP_TRACE_API0 ("NFA_SnepStopDefaultServer ()");
-
- if (p_cback == NULL)
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepStopDefaultServer (): p_cback is NULL");
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((p_msg = (tNFA_SNEP_API_STOP_DEFAULT_SERVER *) GKI_getbuf (sizeof (tNFA_SNEP_API_STOP_DEFAULT_SERVER))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT;
- p_msg->p_cback = p_cback;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepRegisterServer
-**
-** Description This function is called to listen to a SAP as SNEP server.
-**
-** If server_sap is set to NFA_SNEP_ANY_SAP, then NFA will allocate
-** a SAP between LLCP_LOWER_BOUND_SDP_SAP and LLCP_UPPER_BOUND_SDP_SAP
-**
-** NFC Forum default SNEP server ("urn:nfc:sn:snep") may be launched
-** by NFA_SnepStartDefaultServer().
-**
-** NFA_SNEP_REG_EVT will be returned with status, handle and service name.
-**
-** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepRegisterServer (UINT8 server_sap,
- char *p_service_name,
- tNFA_SNEP_CBACK *p_cback)
-{
- tNFA_SNEP_API_REG_SERVER *p_msg;
-
- SNEP_TRACE_API2 ("NFA_SnepRegisterServer (): SAP:0x%X, SN:<%s>", server_sap, p_service_name);
-
- if ((p_service_name == NULL) || (p_cback == NULL))
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepRegisterServer (): p_service_name or p_cback is NULL");
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((p_msg = (tNFA_SNEP_API_REG_SERVER *) GKI_getbuf (sizeof (tNFA_SNEP_API_REG_SERVER))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_REG_SERVER_EVT;
-
- p_msg->server_sap = server_sap;
-
- BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name),
- p_service_name, LLCP_MAX_SN_LEN);
- p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
-
- p_msg->p_cback = p_cback;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepRegisterClient
-**
-** Description This function is called to register SNEP client.
-** NFA_SNEP_REG_EVT will be returned with status, handle
-** and zero-length service name.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_INVALID_PARAM if p_cback is NULL
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepRegisterClient (tNFA_SNEP_CBACK *p_cback)
-{
- tNFA_SNEP_API_REG_CLIENT *p_msg;
-
- SNEP_TRACE_API0 ("NFA_SnepRegisterClient ()");
-
- if (p_cback == NULL)
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepRegisterClient (): p_cback is NULL");
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((p_msg = (tNFA_SNEP_API_REG_CLIENT *) GKI_getbuf (sizeof (tNFA_SNEP_API_REG_CLIENT))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_REG_CLIENT_EVT;
-
- p_msg->p_cback = p_cback;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepDeregister
-**
-** Description This function is called to stop listening as SNEP server
-** or SNEP client. Application shall use reg_handle returned in
-** NFA_SNEP_REG_EVT.
-**
-** Note: If this function is called to de-register a SNEP server and RF
-** discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-** should happen before calling this function
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepDeregister (tNFA_HANDLE reg_handle)
-{
- tNFA_SNEP_API_DEREG *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API1 ("NFA_SnepDeregister (): reg_handle:0x%X", reg_handle);
-
- xx = reg_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL) )
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepDeregister (): Handle is invalid or not registered");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if ((p_msg = (tNFA_SNEP_API_DEREG *) GKI_getbuf (sizeof (tNFA_SNEP_API_DEREG))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_DEREG_EVT;
-
- p_msg->reg_handle = reg_handle;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepConnect
-**
-** Description This function is called by client to create data link connection
-** to SNEP server on peer device.
-**
-** Client handle and service name of server to connect shall be provided.
-** A conn_handle will be returned in NFA_SNEP_CONNECTED_EVT, if
-** successfully connected. Otherwise NFA_SNEP_DISC_EVT will be returned.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepConnect (tNFA_HANDLE client_handle,
- char *p_service_name)
-{
- tNFA_SNEP_API_CONNECT *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API1 ("NFA_SnepConnect(): client_handle:0x%X", client_handle);
-
- xx = client_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL)
- ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_CLIENT)) )
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepConnect (): Client handle is invalid");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if (p_service_name == NULL)
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepConnect (): p_service_name is NULL");
- return (NFA_STATUS_INVALID_PARAM);
- }
-
- if ((p_msg = (tNFA_SNEP_API_CONNECT*) GKI_getbuf (sizeof (tNFA_SNEP_API_CONNECT))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_CONNECT_EVT;
-
- p_msg->client_handle = client_handle;
- BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name),
- p_service_name, LLCP_MAX_SN_LEN);
- p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepGet
-**
-** Description This function is called by client to send GET request.
-**
-** Application shall allocate a buffer and put NDEF message with
-** desired record type to get from server. NDEF message from server
-** will be returned in the same buffer with NFA_SNEP_GET_RESP_EVT.
-** The size of buffer will be used as "Acceptable Length".
-**
-** NFA_SNEP_GET_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
-** through registered p_cback. Application may free the buffer
-** after receiving these events.
-**
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepGet (tNFA_HANDLE conn_handle,
- UINT32 buff_length,
- UINT32 ndef_length,
- UINT8 *p_ndef_buff)
-{
- tNFA_SNEP_API_GET_REQ *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API1 ("NFA_SnepGet (): conn_handle:0x%X", conn_handle);
-
- xx = conn_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL)
- ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_CLIENT)) )
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepGet (): Connection handle is invalid");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if ((p_msg = (tNFA_SNEP_API_GET_REQ *) GKI_getbuf (sizeof (tNFA_SNEP_API_GET_REQ))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_GET_REQ_EVT;
-
- p_msg->conn_handle = conn_handle;
- p_msg->buff_length = buff_length;
- p_msg->ndef_length = ndef_length;
- p_msg->p_ndef_buff = p_ndef_buff;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepPut
-**
-** Description This function is called by client to send PUT request.
-**
-** Application shall allocate a buffer and put desired NDEF message
-** to send to server.
-**
-** NFA_SNEP_PUT_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
-** through registered p_cback. Application may free the buffer after
-** receiving these events.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepPut (tNFA_HANDLE conn_handle,
- UINT32 ndef_length,
- UINT8 *p_ndef_buff)
-{
- tNFA_SNEP_API_PUT_REQ *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API1 ("NFA_SnepPut (): conn_handle:0x%X", conn_handle);
-
- xx = conn_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL)
- ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_CLIENT)) )
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepPut (): Connection handle is invalid");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if ((p_msg = (tNFA_SNEP_API_PUT_REQ *) GKI_getbuf (sizeof (tNFA_SNEP_API_PUT_REQ))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_PUT_REQ_EVT;
-
- p_msg->conn_handle = conn_handle;
- p_msg->ndef_length = ndef_length;
- p_msg->p_ndef_buff = p_ndef_buff;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepGetResponse
-**
-** Description This function is called by server to send response of GET request.
-**
-** When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
-** it shall allocate a buffer for incoming NDEF message and
-** pass the pointer within callback context. This buffer will be
-** returned with NFA_SNEP_GET_REQ_EVT after receiving complete
-** NDEF message. If buffer is not allocated, NFA_SNEP_RESP_CODE_NOT_FOUND
-** (Note:There is no proper response code for this case)
-** or NFA_SNEP_RESP_CODE_REJECT will be sent to client.
-**
-** Server application shall provide conn_handle which is received in
-** NFA_SNEP_GET_REQ_EVT.
-**
-** Server application shall allocate a buffer and put NDEF message if
-** response code is NFA_SNEP_RESP_CODE_SUCCESS. Otherwise, ndef_length
-** shall be set to zero.
-**
-** NFA_SNEP_GET_RESP_CMPL_EVT or NFA_SNEP_DISC_EVT will be returned
-** through registered callback function. Application may free
-** the buffer after receiving these events.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepGetResponse (tNFA_HANDLE conn_handle,
- tNFA_SNEP_RESP_CODE resp_code,
- UINT32 ndef_length,
- UINT8 *p_ndef_buff)
-{
- tNFA_SNEP_API_GET_RESP *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API1 ("NFA_SnepGetResponse (): conn_handle:0x%X", conn_handle);
-
- xx = conn_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL)
- ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_SERVER)) )
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepGetResponse (): Handle is invalid");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if ((p_msg = (tNFA_SNEP_API_GET_RESP *) GKI_getbuf (sizeof (tNFA_SNEP_API_GET_RESP))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_GET_RESP_EVT;
-
- p_msg->conn_handle = conn_handle;
- p_msg->resp_code = resp_code;
- p_msg->ndef_length = ndef_length;
- p_msg->p_ndef_buff = p_ndef_buff;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-
-/*******************************************************************************
-**
-** Function NFA_SnepPutResponse
-**
-** Description This function is called by server to send response of PUT request.
-**
-** When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
-** it shall allocate a buffer for incoming NDEF message and
-** pass the pointer within callback context. This buffer will be
-** returned with NFA_SNEP_PUT_REQ_EVT after receiving complete
-** NDEF message. If buffer is not allocated, NFA_SNEP_RESP_CODE_REJECT
-** will be sent to client or NFA will discard request and send
-** NFA_SNEP_RESP_CODE_SUCCESS (Note:There is no proper response code for
-** this case).
-**
-** Server application shall provide conn_handle which is received in
-** NFA_SNEP_PUT_REQ_EVT.
-**
-** NFA_SNEP_DISC_EVT will be returned through registered callback
-** function when client disconnects data link connection.
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepPutResponse (tNFA_HANDLE conn_handle,
- tNFA_SNEP_RESP_CODE resp_code)
-{
- tNFA_SNEP_API_PUT_RESP *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API1 ("NFA_SnepPutResponse (): conn_handle:0x%X", conn_handle);
-
- xx = conn_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL)
- ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_SERVER)) )
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepPutResponse (): Handle is invalid");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if ((p_msg = (tNFA_SNEP_API_PUT_RESP *) GKI_getbuf (sizeof (tNFA_SNEP_API_PUT_RESP))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_PUT_RESP_EVT;
-
- p_msg->conn_handle = conn_handle;
- p_msg->resp_code = resp_code;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepDisconnect
-**
-** Description This function is called to disconnect data link connection.
-** discard any pending data if flush is set to TRUE
-**
-** Client application shall provide conn_handle in NFA_SNEP_GET_RESP_EVT
-** or NFA_SNEP_PUT_RESP_EVT.
-**
-** Server application shall provide conn_handle in NFA_SNEP_GET_REQ_EVT
-** or NFA_SNEP_PUT_REQ_EVT.
-**
-** NFA_SNEP_DISC_EVT will be returned
-**
-** Returns NFA_STATUS_OK if successfully initiated
-** NFA_STATUS_BAD_HANDLE if handle is not valid
-** NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepDisconnect (tNFA_HANDLE conn_handle, BOOLEAN flush)
-{
- tNFA_SNEP_API_DISCONNECT *p_msg;
- tNFA_HANDLE xx;
-
- SNEP_TRACE_API2 ("NFA_SnepDisconnect (): conn_handle:0x%X, flush=%d", conn_handle, flush);
-
- xx = conn_handle & NFA_HANDLE_MASK;
-
- if ( (xx >= NFA_SNEP_MAX_CONN)
- ||(nfa_snep_cb.conn[xx].p_cback == NULL))
- {
- SNEP_TRACE_ERROR0 ("NFA_SnepDisconnect (): Handle is invalid");
- return (NFA_STATUS_BAD_HANDLE);
- }
-
- if ((p_msg = (tNFA_SNEP_API_DISCONNECT *) GKI_getbuf (sizeof (tNFA_SNEP_API_DISCONNECT))) != NULL)
- {
- p_msg->hdr.event = NFA_SNEP_API_DISCONNECT_EVT;
- p_msg->conn_handle = conn_handle;
- p_msg->flush = flush;
-
- nfa_sys_sendmsg (p_msg);
-
- return (NFA_STATUS_OK);
- }
-
- return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function NFA_SnepSetTraceLevel
-**
-** Description This function sets the trace level for SNEP. If called with
-** a value of 0xFF, it simply returns the current trace level.
-**
-** Returns The new or current trace level
-**
-*******************************************************************************/
-UINT8 NFA_SnepSetTraceLevel (UINT8 new_level)
-{
- if (new_level != 0xFF)
- nfa_snep_cb.trace_level = new_level;
-
- return (nfa_snep_cb.trace_level);
-}
diff --git a/src/nfa/snep/nfa_snep_default.c b/src/nfa/snep/nfa_snep_default.c
deleted file mode 100644
index 07f3061..0000000
--- a/src/nfa/snep/nfa_snep_default.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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 implementation file for the NFA SNEP default server.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_snep_int.h"
-#include "nfa_mem_co.h"
-#include "nfa_dm_int.h"
-#include "trace_api.h"
-
-/*****************************************************************************
-** Global Variables
-*****************************************************************************/
-
-/* system manager control block definition */
-#if NFA_DYNAMIC_MEMORY == FALSE
-tNFA_SNEP_DEFAULT_CB nfa_snep_default_cb;
-#endif
-
-/*****************************************************************************
-** Static Functions
-*****************************************************************************/
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function nfa_snep_default_init
-**
-** Description Initialize NFA SNEP default server
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_default_init (void)
-{
- UINT8 xx;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_default_init ()");
-
- /* initialize control block */
- memset (&nfa_snep_default_cb, 0, sizeof (tNFA_SNEP_DEFAULT_CB));
-
- /* initialize non-zero value */
- nfa_snep_default_cb.server_handle = NFA_HANDLE_INVALID;
-
- for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
- {
- nfa_snep_default_cb.conn[xx].conn_handle = NFA_HANDLE_INVALID;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_default_service_cback
-**
-** Description Processing event to default SNEP server/client
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_default_service_cback (tNFA_SNEP_EVT event, tNFA_SNEP_EVT_DATA *p_data)
-{
- UINT8 xx;
- tNFA_SNEP_API_DISCONNECT api_disconnect;
- tNFA_SNEP_API_PUT_RESP api_put_resp;
-
- SNEP_TRACE_DEBUG1 ("nfa_snep_default_service_cback () event:0x%X", event);
-
- switch (event)
- {
- case NFA_SNEP_REG_EVT:
- if (p_data->reg.status == NFA_STATUS_OK)
- {
- nfa_snep_default_cb.server_handle = p_data->reg.reg_handle;
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Default SNEP server failed to register");
- }
- break;
-
- case NFA_SNEP_CONNECTED_EVT:
- if (p_data->connect.reg_handle == nfa_snep_default_cb.server_handle)
- {
- for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
- {
- if (nfa_snep_default_cb.conn[xx].conn_handle == NFA_HANDLE_INVALID)
- {
- nfa_snep_default_cb.conn[xx].conn_handle = p_data->connect.conn_handle;
- break;
- }
- }
-
- if (xx >= NFA_SNEP_DEFAULT_MAX_CONN)
- {
- SNEP_TRACE_ERROR1 ("Default SNEP server cannot handle more than %d connections",
- NFA_SNEP_DEFAULT_MAX_CONN);
-
- api_disconnect.conn_handle = p_data->connect.conn_handle;
- api_disconnect.flush = TRUE;
- nfa_snep_disconnect ((tNFA_SNEP_MSG *) &api_disconnect);
- }
- }
- break;
-
- case NFA_SNEP_ALLOC_BUFF_EVT:
- if (p_data->alloc.req_code == NFA_SNEP_REQ_CODE_GET)
- {
- /*
- ** Default server doesn't support GET
- ** Send NFA_SNEP_RESP_CODE_NOT_IMPLM to peer
- */
- SNEP_TRACE_WARNING0 ("Default SNEP server doesn't support GET");
- p_data->alloc.p_buff = NULL;
- p_data->alloc.resp_code = NFA_SNEP_RESP_CODE_NOT_IMPLM;
- }
- else /* NFA_SNEP_REQ_CODE_PUT */
- {
- p_data->alloc.p_buff = NULL;
-
- for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
- {
- if (nfa_snep_default_cb.conn[xx].conn_handle == p_data->alloc.conn_handle)
- {
- if (p_data->alloc.ndef_length <= NFA_SNEP_DEFAULT_SERVER_MAX_NDEF_SIZE)
- {
- /* allocate memory, allocated buffer will be returned in NFA_SNEP_PUT_REQ_EVT */
- p_data->alloc.p_buff = (UINT8*) nfa_mem_co_alloc (p_data->alloc.ndef_length);
- }
-
- /* store buffer pointer in case of failure in the middle */
- nfa_snep_default_cb.conn[xx].p_rx_ndef = p_data->alloc.p_buff;
- break;
- }
- }
- }
- break;
-
- case NFA_SNEP_PUT_REQ_EVT:
- for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
- {
- if (nfa_snep_default_cb.conn[xx].conn_handle == p_data->put_req.conn_handle)
- {
- if (!nfa_snep_cb.is_dta_mode)
- {
- nfa_dm_ndef_handle_message (NFA_STATUS_OK,
- p_data->put_req.p_ndef,
- p_data->put_req.ndef_length);
- }
-#if (BT_TRACE_PROTOCOL == TRUE)
- else
- {
- DispNDEFMsg (p_data->put_req.p_ndef,
- p_data->put_req.ndef_length, TRUE);
- }
-#endif
-
- nfa_mem_co_free (p_data->put_req.p_ndef);
- nfa_snep_default_cb.conn[xx].p_rx_ndef = NULL;
-
- api_put_resp.conn_handle = p_data->put_req.conn_handle;
- api_put_resp.resp_code = NFA_SNEP_RESP_CODE_SUCCESS;
-
- nfa_snep_put_resp ((tNFA_SNEP_MSG *) &api_put_resp);
- break;
- }
- }
- break;
-
- case NFA_SNEP_DISC_EVT:
- for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
- {
- if (nfa_snep_default_cb.conn[xx].conn_handle == p_data->disc.conn_handle)
- {
- nfa_snep_default_cb.conn[xx].conn_handle = NFA_HANDLE_INVALID;
-
- /* if buffer is not freed */
- if (nfa_snep_default_cb.conn[xx].p_rx_ndef)
- {
- nfa_mem_co_free (nfa_snep_default_cb.conn[xx].p_rx_ndef);
- nfa_snep_default_cb.conn[xx].p_rx_ndef = NULL;
- }
- break;
- }
- }
- break;
-
- default:
- SNEP_TRACE_ERROR0 ("Unexpected event for default SNEP server");
- break;
- }
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_start_default_server
-**
-** Description Launching default SNEP server
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_start_default_server (tNFA_SNEP_MSG *p_msg)
-{
- tNFA_SNEP_API_REG_SERVER msg;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_start_default_server ()");
-
- if (nfa_snep_default_cb.server_handle == NFA_HANDLE_INVALID)
- {
- msg.server_sap = NFA_SNEP_DEFAULT_SERVER_SAP;
-
- BCM_STRNCPY_S (msg.service_name, sizeof (msg.service_name),
- "urn:nfc:sn:snep", LLCP_MAX_SN_LEN);
- msg.service_name[LLCP_MAX_SN_LEN] = 0;
-
- msg.p_cback = nfa_snep_default_service_cback;
- nfa_snep_reg_server ((tNFA_SNEP_MSG *) &msg);
- }
-
- (*p_msg->api_start_default_server.p_cback) (NFA_SNEP_DEFAULT_SERVER_STARTED_EVT, NULL);
-
- return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_stop_default_server
-**
-** Description Stoppping default SNEP server
-**
-**
-** Returns TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_stop_default_server (tNFA_SNEP_MSG *p_msg)
-{
- tNFA_SNEP_API_DEREG msg;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_stop_default_server ()");
-
- if (nfa_snep_default_cb.server_handle != NFA_HANDLE_INVALID)
- {
- msg.reg_handle = nfa_snep_default_cb.server_handle;
-
- nfa_snep_dereg ((tNFA_SNEP_MSG *) &msg);
-
- nfa_snep_default_cb.server_handle = NFA_HANDLE_INVALID;
- }
-
- (*p_msg->api_stop_default_server.p_cback) (NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT, NULL);
-
- return TRUE;
-}
-
diff --git a/src/nfa/snep/nfa_snep_main.c b/src/nfa/snep/nfa_snep_main.c
deleted file mode 100644
index b2ef6c1..0000000
--- a/src/nfa/snep/nfa_snep_main.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2010-2012 Broadcom Corporation
- *
- * 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 main implementation file for the NFA SNEP.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_snep_int.h"
-
-/*****************************************************************************
-** Global Variables
-*****************************************************************************/
-
-/* system manager control block definition */
-#if NFA_DYNAMIC_MEMORY == FALSE
-tNFA_SNEP_CB nfa_snep_cb;
-#endif
-
-/*****************************************************************************
-** Static Functions
-*****************************************************************************/
-
-/* event handler function type */
-static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_msg);
-
-/* disable function type */
-static void nfa_snep_sys_disable (void);
-
-/* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char *nfa_snep_evt_code (UINT16 evt_code);
-#endif
-
-/*****************************************************************************
-** Constants
-*****************************************************************************/
-static const tNFA_SYS_REG nfa_snep_sys_reg =
-{
- NULL,
- nfa_snep_evt_hdlr,
- nfa_snep_sys_disable,
- NULL
-};
-
-#define NFA_SNEP_NUM_ACTIONS (NFA_SNEP_LAST_EVT & 0x00ff)
-
-/* type for action functions */
-typedef BOOLEAN (*tNFA_SNEP_ACTION) (tNFA_SNEP_MSG *p_data);
-
-/* action function list */
-const tNFA_SNEP_ACTION nfa_snep_action[] =
-{
- nfa_snep_start_default_server, /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
- nfa_snep_stop_default_server, /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT */
- nfa_snep_reg_server, /* NFA_SNEP_API_REG_SERVER_EVT */
- nfa_snep_reg_client, /* NFA_SNEP_API_REG_CLIENT_EVT */
- nfa_snep_dereg, /* NFA_SNEP_API_DEREG_EVT */
- nfa_snep_connect, /* NFA_SNEP_API_CONNECT_EVT */
- nfa_snep_get_req, /* NFA_SNEP_API_GET_REQ_EVT */
- nfa_snep_put_req, /* NFA_SNEP_API_PUT_REQ_EVT */
- nfa_snep_get_resp, /* NFA_SNEP_API_GET_RESP_EVT */
- nfa_snep_put_resp, /* NFA_SNEP_API_PUT_RESP_EVT */
- nfa_snep_disconnect /* NFA_SNEP_API_DISCONNECT_EVT */
-};
-
-/*******************************************************************************
-**
-** Function nfa_snep_init
-**
-** Description Initialize NFA SNEP
-**
-**
-** Returns None
-**
-*******************************************************************************/
-void nfa_snep_init (BOOLEAN is_dta_mode)
-{
- /* initialize control block */
- memset (&nfa_snep_cb, 0, sizeof (tNFA_SNEP_CB));
- nfa_snep_cb.trace_level = APPL_INITIAL_TRACE_LEVEL;
- nfa_snep_cb.is_dta_mode = is_dta_mode;
-
- SNEP_TRACE_DEBUG1 ("nfa_snep_init (): is_dta_mode=%d", is_dta_mode);
-
- nfa_snep_default_init ();
-
- /* register message handler on NFA SYS */
- nfa_sys_register (NFA_ID_SNEP, &nfa_snep_sys_reg);
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_sys_disable
-**
-** Description Clean up and deregister NFA SNEP from NFA SYS/DM
-**
-**
-** Returns None
-**
-*******************************************************************************/
-static void nfa_snep_sys_disable (void)
-{
- UINT8 xx;
-
- SNEP_TRACE_DEBUG0 ("nfa_snep_sys_disable ()");
-
- /* deallocate any buffer and deregister from LLCP */
- for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
- {
- if (nfa_snep_cb.conn[xx].p_cback != NULL)
- {
- LLCP_Deregister (nfa_snep_cb.conn[xx].local_sap);
- nfa_snep_deallocate_cb (xx);
- }
- }
-
- /* deregister message handler on NFA SYS */
- nfa_sys_deregister (NFA_ID_SNEP);
-}
-
-/*******************************************************************************
-**
-** Function nfa_snep_evt_hdlr
-**
-** Description Processing event for NFA SNEP
-**
-**
-** Returns TRUE if p_msg needs to be deallocated
-**
-*******************************************************************************/
-static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_hdr)
-{
- BOOLEAN delete_msg = TRUE;
- UINT16 event;
-
- tNFA_SNEP_MSG *p_msg = (tNFA_SNEP_MSG *) p_hdr;
-
-#if (BT_TRACE_VERBOSE == TRUE)
- SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr (): Event [%s]", nfa_snep_evt_code (p_msg->hdr.event));
-#else
- SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr(): Event 0x%02x", p_msg->hdr.event);
-#endif
-
- event = p_msg->hdr.event & 0x00ff;
-
- /* execute action functions */
- if (event < NFA_SNEP_NUM_ACTIONS)
- {
- delete_msg = (*nfa_snep_action[event]) (p_msg);
- }
- else
- {
- SNEP_TRACE_ERROR0 ("Unhandled event");
- }
-
- return delete_msg;
-}
-
-
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function nfa_snep_evt_code
-**
-** Description
-**
-** Returns string of event
-**
-*******************************************************************************/
-static char *nfa_snep_evt_code (UINT16 evt_code)
-{
- switch (evt_code)
- {
- case NFA_SNEP_API_START_DEFAULT_SERVER_EVT:
- return "API_START_DEFAULT_SERVER";
- case NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT:
- return "API_STOP_DEFAULT_SERVER";
- case NFA_SNEP_API_REG_SERVER_EVT:
- return "API_REG_SERVER";
- case NFA_SNEP_API_REG_CLIENT_EVT:
- return "API_REG_CLIENT";
- case NFA_SNEP_API_DEREG_EVT:
- return "API_DEREG";
- case NFA_SNEP_API_CONNECT_EVT:
- return "API_CONNECT";
- case NFA_SNEP_API_GET_REQ_EVT:
- return "API_GET_REQ";
- case NFA_SNEP_API_PUT_REQ_EVT:
- return "API_PUT_REQ";
- case NFA_SNEP_API_GET_RESP_EVT:
- return "API_GET_RESP";
- case NFA_SNEP_API_PUT_RESP_EVT:
- return "API_PUT_RESP";
- case NFA_SNEP_API_DISCONNECT_EVT:
- return "API_DISCONNECT";
- default:
- return "Unknown event";
- }
-}
-#endif /* Debug Functions */
diff --git a/src/nfa/sys/nfa_sys_cback.c b/src/nfa/sys/nfa_sys_cback.c
index 174fe28..cfe31a7 100644
--- a/src/nfa/sys/nfa_sys_cback.c
+++ b/src/nfa/sys/nfa_sys_cback.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Registration/deregistration functions for inter-module callbacks
diff --git a/src/nfa/sys/nfa_sys_cfg.c b/src/nfa/sys/nfa_sys_cfg.c
index 9b60ea7..14a66dc 100644
--- a/src/nfa/sys/nfa_sys_cfg.c
+++ b/src/nfa/sys/nfa_sys_cfg.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains compile-time configurable constants for the NFA
diff --git a/src/nfa/sys/nfa_sys_main.c b/src/nfa/sys/nfa_sys_main.c
index de8b115..0ad988e 100644
--- a/src/nfa/sys/nfa_sys_main.c
+++ b/src/nfa/sys/nfa_sys_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This is the main implementation file for the NFA system manager.
diff --git a/src/nfa/sys/nfa_sys_ptim.c b/src/nfa/sys/nfa_sys_ptim.c
index a10008b..c38b204 100644
--- a/src/nfa/sys/nfa_sys_ptim.c
+++ b/src/nfa/sys/nfa_sys_ptim.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Protocol timer services (taken from bta ptim)
diff --git a/src/nfc/include/ce_api.h b/src/nfc/include/ce_api.h
index 3abdea9..9be3804 100644
--- a/src/nfc/include/ce_api.h
+++ b/src/nfc/include/ce_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Near Field Communication (NFC) Card Emulation
diff --git a/src/nfc/include/llcp_api.h b/src/nfc/include/llcp_api.h
index 32af471..31413fd 100644
--- a/src/nfc/include/llcp_api.h
+++ b/src/nfc/include/llcp_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP API definitions
@@ -79,6 +80,7 @@
#define LLCP_LINK_REMOTE_INITIATED 0x05 /* Link has been deactivated by remote */
#define LLCP_LINK_TIMEOUT 0x06 /* Link has been deactivated by timeout */
#define LLCP_LINK_FRAME_ERROR 0x07 /* Link has been deactivated by frame error */
+#define LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC 0x08 /* RF link loss without any rx LLC PDU */
#define LLCP_LINK_RF_TRANSMISSION_ERR NFC_STATUS_RF_TRANSMISSION_ERR
#define LLCP_LINK_RF_PROTOCOL_ERR NFC_STATUS_RF_PROTOCOL_ERR
#define LLCP_LINK_RF_TIMEOUT NFC_STATUS_TIMEOUT
diff --git a/src/nfc/include/llcp_defs.h b/src/nfc/include/llcp_defs.h
index ed77ffe..b474930 100644
--- a/src/nfc/include/llcp_defs.h
+++ b/src/nfc/include/llcp_defs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP definitions
diff --git a/src/nfc/include/nci_hmsgs.h b/src/nfc/include/nci_hmsgs.h
index cdde2a2..c1fdfb0 100644
--- a/src/nfc/include/nci_hmsgs.h
+++ b/src/nfc/include/nci_hmsgs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* defines NCI interface messages (for DH)
diff --git a/src/nfc/include/ndef_utils.h b/src/nfc/include/ndef_utils.h
index 336cd8b..d723a9a 100644
--- a/src/nfc/include/ndef_utils.h
+++ b/src/nfc/include/ndef_utils.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains definitions for some utility functions to help parse
@@ -72,6 +73,7 @@
#define AC_REC_TYPE_LEN 2 /* Alternative Carrier Record Type */
#define ERR_REC_TYPE_LEN 3 /* Error Record Type */
#define BT_OOB_REC_TYPE_LEN 32 /* Bluetooth OOB Data Type */
+#define WIFI_WSC_REC_TYPE_LEN 23 /* Wifi WSC Data Type */
#ifdef __cplusplus
@@ -519,6 +521,18 @@
char *p_id_str,
UINT8 eir_type, UINT8 data_len, UINT8 *p_data);
+/*******************************************************************************
+**
+** Function NDEF_MsgAddMediaWifiWsc
+**
+** Description This function adds Wifi Wsc Record header.
+**
+** Returns NDEF_OK if all OK
+**
+*******************************************************************************/
+EXPORT_NDEF_API extern tNDEF_STATUS NDEF_MsgAddMediaWifiWsc (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size,
+ char *p_id_str, UINT8 *p_payload, UINT32 payload_len);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index 2fac0e7..8254986 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Near Field Communication (NFC) API function
@@ -558,25 +559,29 @@
UINT8 uid[NFC_ISO15693_UID_LEN];
} tNFC_RF_PISO15693_PARAMS;
-#define NFC_KOVIO_MAX_LEN 16
+#ifndef NFC_KOVIO_MAX_LEN
+#define NFC_KOVIO_MAX_LEN 32
+#endif
typedef struct
{
UINT8 uid_len;
UINT8 uid[NFC_KOVIO_MAX_LEN];
} tNFC_RF_PKOVIO_PARAMS;
+typedef union
+{
+ tNFC_RF_PA_PARAMS pa;
+ tNFC_RF_PB_PARAMS pb;
+ tNFC_RF_PF_PARAMS pf;
+ tNFC_RF_LF_PARAMS lf;
+ tNFC_RF_PISO15693_PARAMS pi93;
+ tNFC_RF_PKOVIO_PARAMS pk;
+} tNFC_RF_TECH_PARAMU;
+
typedef struct
{
tNFC_DISCOVERY_TYPE mode;
- union
- {
- tNFC_RF_PA_PARAMS pa;
- tNFC_RF_PB_PARAMS pb;
- tNFC_RF_PF_PARAMS pf;
- tNFC_RF_LF_PARAMS lf;
- tNFC_RF_PISO15693_PARAMS pi93;
- tNFC_RF_PKOVIO_PARAMS pk;
- } param; /* Discovery Type specific parameters */
+ tNFC_RF_TECH_PARAMU param;
} tNFC_RF_TECH_PARAMS;
/* the data type associated with NFC_RESULT_DEVT */
@@ -693,6 +698,7 @@
UINT8 rf_disc_id; /* RF Discovery ID */
tNFC_PROTOCOL protocol; /* supported protocol */
tNFC_RF_TECH_PARAMS rf_tech_param; /* RF technology parameters */
+ tNFC_DISCOVERY_TYPE data_mode; /* for future Data Exchange */
tNFC_BIT_RATE tx_bitrate; /* Data Exchange Tx Bitrate */
tNFC_BIT_RATE rx_bitrate; /* Data Exchange Rx Bitrate */
tNFC_INTF_PARAMS intf_param; /* interface type and params*/
diff --git a/src/nfc/include/rw_api.h b/src/nfc/include/rw_api.h
index f0348c5..1cfaa91 100644
--- a/src/nfc/include/rw_api.h
+++ b/src/nfc/include/rw_api.h
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Near Field Communication (NFC) Reader/Writer mode
@@ -85,6 +86,7 @@
RW_T3T_POLL_EVT, /* Response to RW_T3tPoll */
RW_T3T_GET_SYSTEM_CODES_EVT, /* Response to RW_T3tGetSystemCodes */
RW_T3T_FORMAT_CPLT_EVT, /* Tag Formated (Felica-Lite only) */
+ RW_T3T_SET_READ_ONLY_CPLT_EVT, /* Tag is set as Read only */
RW_T3T_INTF_ERROR_EVT, /* RF Interface error event */
RW_T3T_MAX_EVT,
@@ -96,6 +98,7 @@
RW_T4T_NDEF_READ_FAIL_EVT, /* Read operation failed */
RW_T4T_NDEF_UPDATE_CPLT_EVT, /* Update operation completed */
RW_T4T_NDEF_UPDATE_FAIL_EVT, /* Update operation failed */
+ RW_T4T_SET_TO_RO_EVT, /* Tag is set as read only */
RW_T4T_PRESENCE_CHECK_EVT, /* Response to RW_T4tPresenceCheck */
RW_T4T_RAW_FRAME_EVT, /* Response of raw frame sent */
RW_T4T_INTF_ERROR_EVT, /* RF Interface error event */
@@ -133,6 +136,8 @@
#define RW_NDEF_FL_HARD_LOCKABLE 0x40 /* Tag can be hard locked */
#define RW_NDEF_FL_OTP 0x80 /* Tag is one time programmable */
+typedef UINT8 tRW_NDEF_FLAG;
+
typedef struct
{
tNFC_STATUS status;
@@ -168,7 +173,7 @@
tNFC_PROTOCOL protocol; /* protocol used to detect NDEF */
UINT32 max_size; /* max number of bytes available for NDEF data */
UINT32 cur_size; /* current size of stored NDEF data (in bytes) */
- UINT8 flags; /* Flags to indicate NDEF capability,formated,formatable and read only */
+ tRW_NDEF_FLAG flags; /* Flags to indicate NDEF capability,formated,formatable and read only */
} tRW_DETECT_NDEF_DATA;
typedef struct
@@ -635,6 +640,24 @@
/*****************************************************************************
**
+** Function RW_T3tSetReadOnly
+**
+** Description
+** Set a type-3 tag to Read Only
+**
+** Only Felica-Lite tags are supported by this API.
+** RW_T3tDetectNDef() must be called before using this
+** The RW_T3T_SET_READ_ONLY_CPLT_EVT event will be returned.
+**
+** Returns
+** NFC_STATUS_OK if success
+** NFC_STATUS_FAILED if T3T is busy or other error
+**
+*****************************************************************************/
+NFC_API extern tNFC_STATUS RW_T3tSetReadOnly (BOOLEAN b_hard_lock);
+
+/*****************************************************************************
+**
** Function RW_T3tCheckNDef
**
** Description
@@ -878,12 +901,26 @@
*****************************************************************************/
NFC_API extern tNFC_STATUS RW_T4tPresenceCheck (void);
+/*****************************************************************************
+**
+** Function RW_T4tSetNDefReadOnly
+**
+** Description This function performs NDEF read-only procedure
+** Note: RW_T4tDetectNDef() must be called before using this
+**
+** The RW_T4T_SET_TO_RO_EVT event will be returned.
+**
+** Returns NFC_STATUS_OK if success
+** NFC_STATUS_FAILED if T4T is busy or other error
+**
+*****************************************************************************/
+NFC_API extern tNFC_STATUS RW_T4tSetNDefReadOnly (void);
/*******************************************************************************
**
** Function RW_I93Inventory
**
-** Description This function send Inventory command
+** Description This function send Inventory command with/without AFI
** If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
**
** RW_I93_RESPONSE_EVT will be returned
@@ -893,7 +930,7 @@
** NFC_STATUS_FAILED if T4T is busy or other error
**
*******************************************************************************/
-NFC_API extern tNFC_STATUS RW_I93Inventory (UINT8 *p_uid);
+NFC_API extern tNFC_STATUS RW_I93Inventory (BOOLEAN including_afi, UINT8 afi, UINT8 *p_uid);
/*******************************************************************************
**
diff --git a/src/nfc/include/tags_defs.h b/src/nfc/include/tags_defs.h
index 300d020..09d23f1 100644
--- a/src/nfc/include/tags_defs.h
+++ b/src/nfc/include/tags_defs.h
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Near Field Communication (NFC) Tags related
@@ -226,6 +227,7 @@
#define T3T_SYSTEM_CODE_NDEF 0x12FC /* System Code for NDEF tags */
#define T3T_SYSTEM_CODE_FELICA_LITE 0x88B4 /* System Code for felica-lite tags */
#define T3T_MAX_SYSTEM_CODES 16
+#define T3T_FELICALITE_NMAXB 13 /* Maximum number of blocks for NDEF message for Felica Lite tags */
/* Block descriptor, used to describe a block to check/update */
typedef struct
@@ -307,7 +309,11 @@
/* Felica Lite defintions */
#define T3T_MSG_FELICALITE_BLOCK_ID_MC 0x88 /* Block ID for MC (memory configuration) */
-#define T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP 0x03 /* Memory Configuration Block offset: SYS_OP (System Option) */
+
+#define T3T_MSG_FELICALITE_MC_OFFSET_MC_SP 0x00 /* Memory Configuration Block offset: MC_SP (Memory Configuration for scratch pad) */
+#define T3T_MSG_FELICALITE_MC_OFFSET_MC_ALL 0x02 /* Memory Configuration Block offset: MC_ALL (Memory Configuration for system block) */
+#define T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP 0x03 /* Memory Configuration Block offset: SYS_OP (System Option) */
+#define T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM 0x04 /* Memory Configuration Block offset: RF_PRM (Memory Configuration for RF Parameter) */
@@ -356,8 +362,9 @@
#define T4T_CC_FILE_ID 0xE103
#define T4T_CC_FILE_MIN_LEN 0x000F
-#define T4T_VERSION_OFFSET_IN_CC 0x02
-#define T4T_FC_TLV_OFFSET_IN_CC 0x07
+#define T4T_VERSION_OFFSET_IN_CC 0x02
+#define T4T_FC_TLV_OFFSET_IN_CC 0x07
+#define T4T_FC_WRITE_ACCESS_OFFSET_IN_TLV 0x07 /* Offset of Write access byte from type field in CC */
#define T4T_NDEF_FILE_CONTROL_TYPE 0x04 /* NDEF File Control Type */
#define T4T_PROP_FILE_CONTROL_TYPE 0x05 /* Proprietary File Control Type */
diff --git a/src/nfc/int/ce_int.h b/src/nfc/int/ce_int.h
index 2d1d9fe..dc01e28 100644
--- a/src/nfc/int/ce_int.h
+++ b/src/nfc/int/ce_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Near Field Communication (NFC) Card Emulation
diff --git a/src/nfc/int/llcp_int.h b/src/nfc/int/llcp_int.h
index 62dd384..37e54bb 100644
--- a/src/nfc/int/llcp_int.h
+++ b/src/nfc/int/llcp_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains LLCP internal definitions
@@ -46,6 +47,11 @@
#define LLCP_LINK_SYMM_REMOTE_XMIT_NEXT 1
/*
+** LLCP internal flags
+*/
+#define LLCP_LINK_FLAGS_RX_ANY_LLC_PDU 0x01 /* Received any LLC PDU in activated state */
+
+/*
** LLCP link control block
*/
typedef struct
@@ -56,6 +62,7 @@
BOOLEAN is_initiator; /* TRUE if initiator role */
BOOLEAN is_sending_data; /* TRUE if llcp_link_check_send_data() is excuting */
+ UINT8 flags; /* LLCP internal flags */
UINT8 agreed_major_version; /* llcp major version used in activated state */
UINT8 agreed_minor_version; /* llcp minor version used in activated state */
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/int/nfc_int.h
index e9180e6..ea7ed03 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/nfc_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* this file contains the main NFC Upper Layer internal definitions and
@@ -272,6 +273,8 @@
void nfc_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
void nfc_stop_quick_timer (TIMER_LIST_ENT *p_tle);
void nfc_process_quick_timer_evt (void);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/src/nfc/int/rw_int.h b/src/nfc/int/rw_int.h
index 9c27de6..21d6af7 100644
--- a/src/nfc/int/rw_int.h
+++ b/src/nfc/int/rw_int.h
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the Near Field Communication (NFC) Reader/Writer mode
@@ -373,6 +374,7 @@
#define RW_T3T_FL_W4_GET_SC_POLL_RSP 0x04 /* Waiting for POLL response for RW_T3tGetSystemCodes */
#define RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP 0x08 /* Waiting for POLL response for RW_T3tDetectNDef */
#define RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP 0x10 /* Waiting for POLL response for RW_T3tFormat */
+#define RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP 0x20 /* Waiting for POLL response for RW_T3tSetReadOnly */
typedef struct
{
diff --git a/src/nfc/int/tags_int.h b/src/nfc/int/tags_int.h
index 4a6cf98..108e225 100644
--- a/src/nfc/int/tags_int.h
+++ b/src/nfc/int/tags_int.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the common data types shared by Reader/Writer mode
diff --git a/src/nfc/llcp/llcp_api.c b/src/nfc/llcp/llcp_api.c
index 1764a1c..ac6fbcf 100644
--- a/src/nfc/llcp/llcp_api.c
+++ b/src/nfc/llcp/llcp_api.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP API code
@@ -391,7 +392,7 @@
if (reg_sap == LLCP_INVALID_SAP)
{
/* allocate a SAP between 0x10 and 0x1F */
- for (sap = 0; sap <= LLCP_MAX_SERVER; sap++)
+ for (sap = 0; sap < LLCP_MAX_SERVER; sap++)
{
if (llcp_cb.server_cb[sap].p_app_cback == NULL)
{
@@ -531,7 +532,7 @@
}
/* allocate a SAP between 0x20 and 0x3F */
- for (sap = 0; sap <= LLCP_MAX_CLIENT; sap++)
+ for (sap = 0; sap < LLCP_MAX_CLIENT; sap++)
{
if (llcp_cb.client_cb[sap].p_app_cback == NULL)
{
@@ -1019,7 +1020,12 @@
LLCP_TRACE_API2 ("LLCP_ConnectCfm () Local SAP:0x%x, Remote SAP:0x%x)",
local_sap, remote_sap);
- if ((p_params) && (p_params->miu > llcp_cb.lcb.local_link_miu))
+ if (!p_params)
+ {
+ LLCP_TRACE_ERROR0 ("LLCP_ConnectCfm (): tLLCP_CONNECTION_PARAMS must be provided");
+ return LLCP_STATUS_FAIL;
+ }
+ else if (p_params->miu > llcp_cb.lcb.local_link_miu)
{
LLCP_TRACE_ERROR0 ("LLCP_ConnectCfm (): Data link MIU shall not be bigger than local link MIU");
return LLCP_STATUS_FAIL;
diff --git a/src/nfc/llcp/llcp_dlc.c b/src/nfc/llcp/llcp_dlc.c
index ee9eb6c..3221494 100644
--- a/src/nfc/llcp/llcp_dlc.c
+++ b/src/nfc/llcp/llcp_dlc.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP Data Link Connection Management
@@ -657,6 +658,7 @@
llcp_util_send_dm (ssap, LLCP_SAP_SDP, LLCP_SAP_DM_REASON_PERM_REJECT_THIS );
return;
}
+
if (dsap == LLCP_SAP_SDP)
{
LLCP_TRACE_ERROR0 ("llcp_dlc_proc_connect_pdu (): SDP doesn't accept connection");
@@ -671,6 +673,20 @@
llcp_util_send_dm (ssap, LLCP_SAP_SDP, LLCP_SAP_DM_REASON_NO_SERVICE );
return;
}
+ else
+ {
+ /* check if this application can support connection-oriented transport */
+ p_app_cb = llcp_util_get_app_cb (dsap);
+
+ if ( (p_app_cb == NULL)
+ ||(p_app_cb->p_app_cback == NULL)
+ ||((p_app_cb->link_type & LLCP_LINK_TYPE_DATA_LINK_CONNECTION) == 0) )
+ {
+ LLCP_TRACE_ERROR1 ("llcp_dlc_proc_connect_pdu (): SAP(0x%x) doesn't support connection-oriented", dsap);
+ llcp_util_send_dm (ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE );
+ return;
+ }
+ }
}
/* check if any data link */
diff --git a/src/nfc/llcp/llcp_link.c b/src/nfc/llcp/llcp_link.c
index 7deaeb2..865511b 100644
--- a/src/nfc/llcp/llcp_link.c
+++ b/src/nfc/llcp/llcp_link.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP Link Management
@@ -210,6 +211,9 @@
llcp_cb.lcb.is_initiator = p_config->is_initiator;
+ /* reset internal flags */
+ llcp_cb.lcb.flags = 0x00;
+
/* set tx MIU to MIN (MIU of local LLCP, MIU of peer LLCP) */
if (llcp_cb.lcb.local_link_miu >= llcp_cb.lcb.peer_miu)
@@ -427,6 +431,13 @@
}
else /* for link timeout and interface error */
{
+ /* if got RF link loss receiving no LLC PDU from peer */
+ if ( (reason == LLCP_LINK_RF_LINK_LOSS_ERR)
+ &&(!(llcp_cb.lcb.flags & LLCP_LINK_FLAGS_RX_ANY_LLC_PDU)))
+ {
+ reason = LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC;
+ }
+
NFC_FlushData (NFC_RF_CONN_ID);
}
@@ -1659,6 +1670,7 @@
}
else
{
+ llcp_cb.lcb.flags |= LLCP_LINK_FLAGS_RX_ANY_LLC_PDU;
llcp_link_proc_rx_data ((BT_HDR *) p_data->data.p_data);
}
}
diff --git a/src/nfc/llcp/llcp_main.c b/src/nfc/llcp/llcp_main.c
index 540cfc5..e1e1824 100644
--- a/src/nfc/llcp/llcp_main.c
+++ b/src/nfc/llcp/llcp_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the main LLCP entry points
diff --git a/src/nfc/llcp/llcp_sdp.c b/src/nfc/llcp/llcp_sdp.c
index 6d2c73f..d9b13f6 100644
--- a/src/nfc/llcp/llcp_sdp.c
+++ b/src/nfc/llcp/llcp_sdp.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP Service Discovery
diff --git a/src/nfc/llcp/llcp_util.c b/src/nfc/llcp/llcp_util.c
index b11fbbc..5a402e2 100644
--- a/src/nfc/llcp/llcp_util.c
+++ b/src/nfc/llcp/llcp_util.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the LLCP utilities
diff --git a/src/nfc/nci/nci_hmsgs.c b/src/nfc/nci/nci_hmsgs.c
index 4bb6896..9052867 100644
--- a/src/nfc/nci/nci_hmsgs.c
+++ b/src/nfc/nci/nci_hmsgs.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains function of the NCI unit to format and send NCI
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.c
index b9f9bcb..d0a9fd4 100644
--- a/src/nfc/nci/nci_hrcv.c
+++ b/src/nfc/nci/nci_hrcv.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains function of the NFC unit to receive/process NCI
diff --git a/src/nfc/ndef/ndef_cho_utils.c b/src/nfc/ndef/ndef_cho_utils.c
index 53c2bfc..1fe4b80 100644
--- a/src/nfc/ndef/ndef_cho_utils.c
+++ b/src/nfc/ndef/ndef_cho_utils.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains source code for some utility functions to help parse
@@ -58,7 +59,10 @@
static UINT8 err_rec_type[ERR_REC_TYPE_LEN] = { 0x65, 0x72, 0x72 }; /* "err" */
/* Bluetooth OOB Data Type */
-static UINT8 *p_bt_oob_rec_type = (UINT8 *) "application/vnd.bluetooth.ep.oob";
+static UINT8 *p_bt_oob_rec_type = (UINT8 *)"application/vnd.bluetooth.ep.oob";
+
+/* Wifi WSC Data Type */
+static UINT8 *p_wifi_wsc_rec_type = (UINT8 *)"application/vnd.wfa.wsc";
/*******************************************************************************
**
@@ -138,13 +142,13 @@
ARRAY_TO_STREAM (p, p_carrier_type, carrier_type_len);
ARRAY_TO_STREAM (p, p_carrier_data, carrier_data_len);
- payload_len = (UINT32) carrier_type_len + carrier_data_len + 2;
+ payload_len = (UINT32)carrier_type_len + carrier_data_len + 2;
- id_len = (UINT8) strlen (p_id_str);
+ id_len = (UINT8)strlen (p_id_str);
status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size,
NDEF_TNF_WKT, hc_rec_type, HC_REC_TYPE_LEN,
- (UINT8*) p_id_str, id_len, payload, payload_len);
+ (UINT8*)p_id_str, id_len, payload, payload_len);
return (status);
}
@@ -169,11 +173,11 @@
/* get payload length first */
/* CPS, length of carrier data ref, carrier data ref, Aux data reference count */
- payload_len = 3 + (UINT8) strlen (p_carrier_data_ref_str);
+ payload_len = 3 + (UINT8)strlen (p_carrier_data_ref_str);
for (xx = 0; xx < aux_data_ref_count; xx++)
{
/* Aux Data Reference length (1 byte) */
- payload_len += 1 + (UINT8) strlen (p_aux_data_ref_str[xx]);
+ payload_len += 1 + (UINT8)strlen (p_aux_data_ref_str[xx]);
}
/* reserve memory for payload */
@@ -193,7 +197,7 @@
UINT8_TO_BE_STREAM (p, cps);
/* Carrier Data Reference length */
- ref_str_len = (UINT8) strlen (p_carrier_data_ref_str);
+ ref_str_len = (UINT8)strlen (p_carrier_data_ref_str);
UINT8_TO_BE_STREAM (p, ref_str_len);
@@ -206,7 +210,7 @@
for (xx = 0; xx < aux_data_ref_count; xx++)
{
/* Aux Data Reference length (1 byte) */
- ref_str_len = (UINT8) strlen (p_aux_data_ref_str[xx]);
+ ref_str_len = (UINT8)strlen (p_aux_data_ref_str[xx]);
UINT8_TO_BE_STREAM (p, ref_str_len);
@@ -305,11 +309,11 @@
BDADDR_TO_STREAM (p, bd_addr);
payload_len = BD_ADDR_LEN + 2;
- id_len = (UINT8) strlen (p_id_str);
+ id_len = (UINT8)strlen (p_id_str);
status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size,
NDEF_TNF_MEDIA, p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN,
- (UINT8*) p_id_str, id_len, payload, payload_len);
+ (UINT8*)p_id_str, id_len, payload, payload_len);
return (status);
}
@@ -346,8 +350,8 @@
eir_data_len = BT_OOB_COD_SIZE + 2;
/* append EIR data at the end of record */
- status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
- p_rec, eir_data, eir_data_len);
+ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+ p_rec, eir_data, eir_data_len);
/* update BT OOB data length, if success */
if (status == NDEF_OK)
@@ -404,8 +408,8 @@
eir_data_len = name_len + 2;
/* append EIR data at the end of record */
- status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
- p_rec, eir_data, eir_data_len);
+ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+ p_rec, eir_data, eir_data_len);
/* update BT OOB data length, if success */
if (status == NDEF_OK)
@@ -446,19 +450,19 @@
/* create EIR data format */
p = eir_data;
- UINT8_TO_STREAM (p, BT_OOB_HASH_C_SIZE + 1);
- UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_HASH_C_TYPE);
+ UINT8_TO_STREAM (p, BT_OOB_HASH_C_SIZE + 1);
+ UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_HASH_C_TYPE);
ARRAY16_TO_STREAM (p, p_hash_c);
- UINT8_TO_STREAM (p, BT_OOB_RAND_R_SIZE + 1);
- UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_RAND_R_TYPE);
+ UINT8_TO_STREAM (p, BT_OOB_RAND_R_SIZE + 1);
+ UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_RAND_R_TYPE);
ARRAY16_TO_STREAM (p, p_rand_r);
eir_data_len = BT_OOB_HASH_C_SIZE + BT_OOB_RAND_R_SIZE + 4;
/* append EIR data at the end of record */
- status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
- p_rec, eir_data, eir_data_len);
+ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+ p_rec, eir_data, eir_data_len);
/* update BT OOB data length, if success */
if (status == NDEF_OK)
@@ -505,8 +509,8 @@
eir_data_len = data_len + 2;
/* append EIR data at the end of record */
- status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
- p_rec, eir_data, eir_data_len);
+ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+ p_rec, eir_data, eir_data_len);
/* update BT OOB data length, if success */
if (status == NDEF_OK)
@@ -521,6 +525,30 @@
/*******************************************************************************
**
+** Function NDEF_MsgAddMediaWifiWsc
+**
+** Description This function adds Wifi Wsc Record header.
+**
+** Returns NDEF_OK if all OK
+**
+*******************************************************************************/
+tNDEF_STATUS NDEF_MsgAddMediaWifiWsc (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size,
+ char *p_id_str, UINT8 *p_payload, UINT32 payload_len)
+{
+ tNDEF_STATUS status;
+ UINT8 id_len = 0;
+
+ if (p_id_str)
+ id_len = (UINT8)strlen (p_id_str);
+
+ status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size,
+ NDEF_TNF_MEDIA, p_wifi_wsc_rec_type, WIFI_WSC_REC_TYPE_LEN,
+ (UINT8*)p_id_str, id_len, p_payload, payload_len);
+ return (status);
+}
+
+/*******************************************************************************
+**
** Static Local Functions
**
*******************************************************************************/
@@ -540,8 +568,8 @@
UINT8 id_len, tnf, type_len;
/* find record by Payload ID */
- id_len = (UINT8) strlen (p_id_str);
- p_rec = NDEF_MsgGetFirstRecById (p_msg, (UINT8*) p_id_str, id_len);
+ id_len = (UINT8)strlen (p_id_str);
+ p_rec = NDEF_MsgGetFirstRecById (p_msg, (UINT8*)p_id_str, id_len);
if (!p_rec)
return (NULL);
@@ -549,10 +577,10 @@
p_type = NDEF_RecGetType (p_rec, &tnf, &type_len);
/* check type if this is BT OOB record */
- if ( (!p_rec)
- ||(tnf != NDEF_TNF_MEDIA)
- ||(type_len != BT_OOB_REC_TYPE_LEN)
- ||(memcmp (p_type, p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN)) )
+ if ((!p_rec)
+ ||(tnf != NDEF_TNF_MEDIA)
+ ||(type_len != BT_OOB_REC_TYPE_LEN)
+ ||(memcmp (p_type, p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN)))
{
return (NULL);
}
diff --git a/src/nfc/ndef/ndef_utils.c b/src/nfc/ndef/ndef_utils.c
index 48084f0..908e9ff 100644
--- a/src/nfc/ndef/ndef_utils.c
+++ b/src/nfc/ndef/ndef_utils.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains source code for some utility functions to help parse
diff --git a/src/nfc/nfc/nfc_ee.c b/src/nfc/nfc/nfc_ee.c
index 5f2969a..26fae8b 100644
--- a/src/nfc/nfc/nfc_ee.c
+++ b/src/nfc/nfc/nfc_ee.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFCEEs.
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index ea7a705..d88c78e 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFC NCI transport.
@@ -37,6 +38,7 @@
#include "rw_int.h"
#include "ce_int.h"
+
#if (NFC_RW_ONLY == FALSE)
#include "ce_api.h"
#include "ce_int.h"
@@ -199,6 +201,8 @@
}
}
+
+
/*******************************************************************************
**
** Function nfc_enabled
diff --git a/src/nfc/nfc/nfc_ncif.c b/src/nfc/nfc/nfc_ncif.c
index 0bf772b..a80406f 100644
--- a/src/nfc/nfc/nfc_ncif.c
+++ b/src/nfc/nfc/nfc_ncif.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 1999-2012 Broadcom Corporation
+ * Copyright (C) 1999-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFC NCI transport.
@@ -229,8 +230,7 @@
p_cb->num_buff--;
/* send to HAL */
- nfc_cb.p_hal->write(p->len, (UINT8 *)(p+1) + p->offset);
- GKI_freebuf(p);
+ HAL_WRITE(p);
if (!fragmented)
{
@@ -285,8 +285,7 @@
}
/* send to HAL */
- nfc_cb.p_hal->write(p_buf->len, (UINT8 *)(p_buf+1) + p_buf->offset);
- GKI_freebuf(p_buf);
+ HAL_WRITE(p_buf);
/* Indicate command is pending */
nfc_cb.nci_cmd_window--;
@@ -620,6 +619,7 @@
len = *p++;
p_start = p;
+ memset ( &p_param->param, 0, sizeof (tNFC_RF_TECH_PARAMU));
switch (p_param->mode)
{
case NCI_DISCOVERY_TYPE_POLL_A:
@@ -630,6 +630,8 @@
NFCID1 length 1 byte Length of NFCID1 Available after Collision Resolution
NFCID1 4, 7, or 10 bytes Defined in [DIGPROT]Available after Collision Resolution
SEL_RES Response 1 byte Defined in [DIGPROT]Available after Collision Resolution
+HRx Length 1 Octets Length of HRx Parameters collected from the response to the T1T RID command.
+HRx 0 or 2 Octets If present, the first byte SHALL contain HR0 and the second byte SHALL contain HR1 as defined in [DIGITAL].
*/
STREAM_TO_ARRAY (p_pa->sens_res, p, 2);
p_pa->nfcid1_len = *p++;
@@ -639,6 +641,15 @@
u8 = *p++;
if (u8)
p_pa->sel_rsp = *p++;
+ if (len == (7 + p_pa->nfcid1_len + u8)) /* 2(sens_res) + 1(len) + p_pa->nfcid1_len + 1(len) + u8 + hr (1:len + 2) */
+ {
+ p_pa->hr_len = *p++;
+ if (p_pa->hr_len == NCI_T1T_HR_LEN)
+ {
+ p_pa->hr[0] = *p++;
+ p_pa->hr[1] = *p;
+ }
+ }
break;
case NCI_DISCOVERY_TYPE_POLL_B:
@@ -691,7 +702,12 @@
case NCI_DISCOVERY_TYPE_POLL_KOVIO:
p_param->param.pk.uid_len = *p++;
- STREAM_TO_ARRAY (p_param->param.pk.uid, p, NFC_KOVIO_MAX_LEN);
+ if (p_param->param.pk.uid_len > NFC_KOVIO_MAX_LEN)
+ {
+ NFC_TRACE_ERROR2( "Kovio UID len:0x%x exceeds max(0x%x)", p_param->param.pk.uid_len, NFC_KOVIO_MAX_LEN);
+ p_param->param.pk.uid_len = NFC_KOVIO_MAX_LEN;
+ }
+ STREAM_TO_ARRAY (p_param->param.pk.uid, p, p_param->param.pk.uid_len);
break;
}
@@ -754,6 +770,7 @@
tNFC_CONN_CB * p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
UINT8 *pp, len_act;
UINT8 buff_size, num_buff;
+ tNFC_RF_PA_PARAMS *p_pa;
nfc_set_state (NFC_STATE_OPEN);
@@ -771,7 +788,7 @@
/* fill in tNFC_activate_DEVT */
p = nfc_ncif_decode_rf_params (&evt_data.activate.rf_tech_param, p);
- evt_data.activate.rf_tech_param.mode = *p++;
+ evt_data.activate.data_mode = *p++;
evt_data.activate.tx_bitrate = *p++;
evt_data.activate.rx_bitrate = *p++;
mode = evt_data.activate.rf_tech_param.mode;
@@ -927,6 +944,17 @@
}
}
#endif
+ else if ((evt_data.activate.intf_param.type == NCI_INTERFACE_FRAME) && (evt_data.activate.protocol == NCI_PROTOCOL_T1T) )
+ {
+ p_pa = &evt_data.activate.rf_tech_param.param.pa;
+ if ((len_act == NCI_T1T_HR_LEN) && (p_pa->hr_len == 0))
+ {
+ p_pa->hr_len = NCI_T1T_HR_LEN;
+ p_pa->hr[0] = *p++;
+ p_pa->hr[1] = *p++;
+ }
+ }
+
p_cb->act_protocol = evt_data.activate.protocol;
p_cb->buff_size = buff_size;
p_cb->num_buff = num_buff;
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.c
index e8da53b..66cdf31 100644
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* Entry point for NFC_TASK
@@ -283,6 +284,7 @@
break;
#endif
default:
+ NFC_TRACE_DEBUG1 ("nfc_process_quick_timer_evt: unhandled timer event (0x%04x)", p_tle->event);
break;
}
}
diff --git a/src/nfc/nfc/nfc_test.c b/src/nfc/nfc/nfc_test.c
index 251c888..d71641e 100644
--- a/src/nfc/nfc/nfc_test.c
+++ b/src/nfc/nfc/nfc_test.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFC NCI transport.
diff --git a/src/nfc/nfc/nfc_utils.c b/src/nfc/nfc/nfc_utils.c
index ef0a553..244c946 100644
--- a/src/nfc/nfc/nfc_utils.c
+++ b/src/nfc/nfc/nfc_utils.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 1999-2012 Broadcom Corporation
+ * Copyright (C) 1999-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFC NCI transport.
diff --git a/src/nfc/nfc/nfc_vs.c b/src/nfc/nfc/nfc_vs.c
index f790940..90cef25 100644
--- a/src/nfc/nfc/nfc_vs.c
+++ b/src/nfc/nfc/nfc_vs.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that NCI vendor specific interface with the
diff --git a/src/nfc/tags/ce_main.c b/src/nfc/tags/ce_main.c
index bc73070..0e5d9b3 100644
--- a/src/nfc/tags/ce_main.c
+++ b/src/nfc/tags/ce_main.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2009-2012 Broadcom Corporation
+ * Copyright (C) 2009-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFC NCI transport.
diff --git a/src/nfc/tags/ce_t3t.c b/src/nfc/tags/ce_t3t.c
index 62cc1c0..1d45294 100644
--- a/src/nfc/tags/ce_t3t.c
+++ b/src/nfc/tags/ce_t3t.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 3 tag in Card Emulation
diff --git a/src/nfc/tags/ce_t4t.c b/src/nfc/tags/ce_t4t.c
index 80833dd..2df0874 100644
--- a/src/nfc/tags/ce_t4t.c
+++ b/src/nfc/tags/ce_t4t.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 4 tag in Card Emulation
@@ -264,7 +265,7 @@
tCE_T4T_MEM *p_t4t = &ce_cb.mem.t4t;
UINT8 *p;
UINT8 file_length[2];
- UINT16 starting_offset, status_words;
+ UINT16 starting_offset;
tCE_DATA ce_data;
CE_TRACE_DEBUG3 ("ce_t4t_update_binary (): Offset:0x%04X, Length:0x%04X, selected status = 0x%02X",
@@ -291,8 +292,6 @@
if (length > 0)
memcpy (p_t4t->p_scratch_buf + offset - T4T_FILE_LENGTH_SIZE, p_data, length);
- status_words = T4T_RSP_CMD_CMPLTED;
-
/* if this is the last step: writing non-zero length in NLEN */
if ((starting_offset == 0) && (p_t4t->nlen > 0))
{
@@ -322,16 +321,14 @@
(*ce_cb.p_cback) (CE_T4T_NDEF_UPDATE_START_EVT, NULL);
}
- if (!ce_t4t_send_status (status_words))
+ if (!ce_t4t_send_status (T4T_RSP_CMD_CMPLTED))
{
return FALSE;
}
-
- if (status_words == T4T_RSP_CMD_CMPLTED)
+ else
{
return TRUE;
}
- return FALSE;
}
/*******************************************************************************
@@ -658,7 +655,7 @@
CE_TRACE_DEBUG0 ("CET4T: Forward raw frame to registered AID");
/* forward raw frame to upper layer */
- if (ce_cb.mem.t4t.selected_aid_idx < NFC_MAX_AID_LEN)
+ if (ce_cb.mem.t4t.selected_aid_idx < CE_T4T_MAX_REG_AID)
{
ce_data.raw_frame.status = NFC_STATUS_OK;
ce_data.raw_frame.p_data = p_c_apdu;
diff --git a/src/nfc/tags/rw_i93.c b/src/nfc/tags/rw_i93.c
index 1c9df79..5bcbc46 100644
--- a/src/nfc/tags/rw_i93.c
+++ b/src/nfc/tags/rw_i93.c
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for ISO 15693 in Reader/Writer
@@ -533,12 +534,12 @@
** Returns tNFC_STATUS
**
*******************************************************************************/
-tNFC_STATUS rw_i93_send_cmd_inventory (UINT8 *p_uid)
+tNFC_STATUS rw_i93_send_cmd_inventory (UINT8 *p_uid, BOOLEAN including_afi, UINT8 afi)
{
BT_HDR *p_cmd;
- UINT8 *p;
+ UINT8 *p, flags;
- RW_TRACE_DEBUG0 ("rw_i93_send_cmd_inventory ()");
+ RW_TRACE_DEBUG2 ("rw_i93_send_cmd_inventory () including_afi:%d, AFI:0x%02X", including_afi, afi);
p_cmd = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID);
@@ -553,11 +554,24 @@
p = (UINT8 *) (p_cmd + 1) + p_cmd->offset;
/* Flags */
- UINT8_TO_STREAM (p, (I93_FLAG_SLOT_ONE | I93_FLAG_INVENTORY_SET | RW_I93_FLAG_SUB_CARRIER | RW_I93_FLAG_DATA_RATE));
+ flags = (I93_FLAG_SLOT_ONE | I93_FLAG_INVENTORY_SET | RW_I93_FLAG_SUB_CARRIER | RW_I93_FLAG_DATA_RATE);
+ if (including_afi)
+ {
+ flags |= I93_FLAG_AFI_PRESENT;
+ }
+
+ UINT8_TO_STREAM (p, flags);
/* Command Code */
UINT8_TO_STREAM (p, I93_CMD_INVENTORY);
+ if (including_afi)
+ {
+ /* Parameters */
+ UINT8_TO_STREAM (p, afi); /* Optional AFI */
+ p_cmd->len++;
+ }
+
if (p_uid)
{
UINT8_TO_STREAM (p, I93_UID_BYTE_LEN*8); /* Mask Length */
@@ -3201,7 +3215,7 @@
**
** Function RW_I93Inventory
**
-** Description This function send Inventory command
+** Description This function send Inventory command with/without AFI
** If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
**
** RW_I93_RESPONSE_EVT will be returned
@@ -3212,11 +3226,11 @@
** NFC_STATUS_FAILED if other error
**
*******************************************************************************/
-tNFC_STATUS RW_I93Inventory (UINT8 *p_uid)
+tNFC_STATUS RW_I93Inventory (BOOLEAN including_afi, UINT8 afi, UINT8 *p_uid)
{
tNFC_STATUS status;
- RW_TRACE_API0 ("RW_I93Inventory ()");
+ RW_TRACE_API2 ("RW_I93Inventory (), including_afi:%d, AFI:0x%02X", including_afi, afi);
if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE)
{
@@ -3225,14 +3239,7 @@
return NFC_STATUS_BUSY;
}
- if (p_uid)
- {
- status = rw_i93_send_cmd_inventory (p_uid);
- }
- else
- {
- status = rw_i93_send_cmd_inventory (NULL);
- }
+ status = rw_i93_send_cmd_inventory (p_uid, including_afi, afi);
if (status == NFC_STATUS_OK)
{
@@ -3813,7 +3820,7 @@
if (rw_cb.tcb.i93.uid[0] != I93_UID_FIRST_BYTE)
{
- status = rw_i93_send_cmd_inventory (NULL);
+ status = rw_i93_send_cmd_inventory (NULL, FALSE, 0x00);
sub_state = RW_I93_SUBSTATE_WAIT_UID;
}
else if ( (rw_cb.tcb.i93.num_block == 0)
@@ -4004,7 +4011,7 @@
}
else
{
- status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid);
+ status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid, FALSE, 0x00);
sub_state = RW_I93_SUBSTATE_WAIT_UID;
}
@@ -4110,7 +4117,8 @@
}
else
{
- status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid);
+ /* The support of AFI by the VICC is optional, so do not include AFI */
+ status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid, FALSE, 0x00);
if (status == NFC_STATUS_OK)
{
diff --git a/src/nfc/tags/rw_main.c b/src/nfc/tags/rw_main.c
index 11dc93f..be88aa0 100644
--- a/src/nfc/tags/rw_main.c
+++ b/src/nfc/tags/rw_main.c
@@ -16,13 +16,14 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains functions that interface with the NFC NCI transport.
* On the receive side, it routes events to the appropriate handler
* (callback). On the transmit side, it manages the command transmission.
*
- ******************************************************************************/
+******************************************************************************/
#include <string.h>
#include "nfc_target.h"
#include "bt_types.h"
@@ -232,7 +233,7 @@
case NFC_PROTOCOL_T1T: /* Type1Tag - NFC-A */
if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)
{
- status = rw_t1t_select (p_activate_params->intf_param.intf_param.frame.param,
+ status = rw_t1t_select (p_activate_params->rf_tech_param.param.pa.hr,
p_activate_params->rf_tech_param.param.pa.nfcid1);
}
break;
diff --git a/src/nfc/tags/rw_t1t.c b/src/nfc/tags/rw_t1t.c
index 0d98546..4e7fffe 100644
--- a/src/nfc/tags/rw_t1t.c
+++ b/src/nfc/tags/rw_t1t.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 1 tag in Reader/Writer
@@ -63,6 +64,9 @@
BT_HDR *p_pkt;
UINT8 *p;
tT1T_CMD_RSP_INFO *p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) rw_cb.tcb.t1t.p_cmd_rsp_info;
+#if (BT_TRACE_VERBOSE == TRUE)
+ UINT8 begin_state = p_t1t->state;
+#endif
p_pkt = (BT_HDR *) (p_data->data.p_data);
if (p_pkt == NULL)
@@ -190,6 +194,15 @@
}
else
GKI_freebuf (p_pkt);
+
+#if (BT_TRACE_VERBOSE == TRUE)
+ if (begin_state != p_t1t->state)
+ {
+ RW_TRACE_DEBUG2 ("RW T1T state changed:<%s> -> <%s>",
+ rw_t1t_get_state_name (begin_state),
+ rw_t1t_get_state_name (p_t1t->state));
+ }
+#endif
}
/*******************************************************************************
@@ -673,6 +686,11 @@
p_t1t->state = RW_T1T_STATE_IDLE;
#if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE))
+ if (p_t1t->state != RW_T1T_STATE_READ_NDEF)
+ {
+ p_t1t->b_update = FALSE;
+ p_t1t->b_rseg = FALSE;
+ }
p_t1t->substate = RW_T1T_SUBSTATE_NONE;
#endif
return;
diff --git a/src/nfc/tags/rw_t1t_ndef.c b/src/nfc/tags/rw_t1t_ndef.c
index 1fc2124..828d473 100644
--- a/src/nfc/tags/rw_t1t_ndef.c
+++ b/src/nfc/tags/rw_t1t_ndef.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 1 tag NDEF operation in
@@ -99,7 +100,7 @@
rw_t1t_update_tag_state ();
rw_t1t_update_attributes ();
rw_t1t_update_lock_attributes ();
- memcpy (p_t1t->mem, (UINT8 *) (p_data + 1), T1T_SEGMENT_SIZE);
+ memcpy (p_t1t->mem, (UINT8 *) (p_data + T1T_ADD_LEN), T1T_SEGMENT_SIZE);
}
*p_status = rw_t1t_handle_dyn_read_rsp (p_notify,p_data);
}
@@ -171,6 +172,8 @@
** Description This function will extract lock bytes if any present in the
** response data
**
+** Parameters p_data: Data bytes in the response of RSEG/READ8/RALL command
+**
** Returns None
**
*******************************************************************************/
@@ -189,12 +192,12 @@
if (p_cmd_rsp_info->opcode == T1T_CMD_RSEG)
{
start = p_t1t->segment * T1T_SEGMENT_SIZE;
- end = (p_t1t->segment + 1) * T1T_SEGMENT_SIZE;
+ end = start + T1T_SEGMENT_SIZE;
}
else if (p_cmd_rsp_info->opcode == T1T_CMD_READ8)
{
- start = p_data[0] * T1T_BLOCK_SIZE;
- end = (p_data[0] + 1) * T1T_BLOCK_SIZE;
+ start = p_t1t->block_read * T1T_BLOCK_SIZE;
+ end = start + T1T_BLOCK_SIZE;
}
else if (p_cmd_rsp_info->opcode == T1T_CMD_RALL)
{
@@ -209,18 +212,20 @@
{
if (p_t1t->lockbyte[num_locks].b_lock_read == FALSE)
{
+ /* Get the exact offset of the dynamic lock byte in the tag */
offset = p_t1t->lock_tlv[p_t1t->lockbyte[num_locks].tlv_index].offset + p_t1t->lockbyte[num_locks].byte_index;
if ( (offset < end)
&&(offset >= start) )
{
+ /* This dynamic lock byte is in the response */
if (p_cmd_rsp_info->opcode == T1T_CMD_RSEG)
{
- lock_offset = (offset % T1T_SEGMENT_SIZE) + T1T_ADD_LEN;
+ lock_offset = (offset % T1T_SEGMENT_SIZE);
}
else if (p_cmd_rsp_info->opcode == T1T_CMD_READ8)
{
- lock_offset = (offset % T1T_BLOCK_SIZE) + T1T_ADD_LEN;
+ lock_offset = (offset % T1T_BLOCK_SIZE);
}
else if (p_cmd_rsp_info->opcode == T1T_CMD_RALL)
{
@@ -254,7 +259,7 @@
/* Set Tag state based on CC value and NDEF Message length */
if ( ((p_t1t->mem[T1T_CC_NMN_BYTE] == T1T_CC_NMN) || (p_t1t->mem[T1T_CC_NMN_BYTE] == 0))
&&((p_t1t->mem[T1T_CC_VNO_BYTE] == T1T_CC_VNO) || (p_t1t->mem[T1T_CC_VNO_BYTE] == T1T_CC_LEGACY_VNO))
- &&((p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RW)|| (p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RO)) )
+ &&((p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RW) || (p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RO)) )
{
/* Valid CC value, so Tag is initialized */
if (p_t1t->ndef_msg_len > 0)
@@ -314,7 +319,8 @@
else if (offset < (p_t1t->mem[T1T_CC_TMS_BYTE] + 1) * T1T_BLOCK_SIZE)
{
/* send READ8 command */
- if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, (UINT8) (offset/T1T_BLOCK_SIZE), NULL)) == NFC_STATUS_OK)
+ p_t1t->block_read = (UINT8) (offset/T1T_BLOCK_SIZE);
+ if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, p_t1t->block_read, NULL)) == NFC_STATUS_OK)
{
/* Reading Locks */
status = NFC_STATUS_CONTINUE;
@@ -590,13 +596,13 @@
**
** Function rw_t1t_handle_read_rsp
**
-** Description This function handle the response received for RSEG,
-** RALL, READ8 commands
+** Description This function handle the data bytes excluding ADD(S)/ADD8 field
+** received as part of RSEG, RALL, READ8 command response
**
** Returns status of the current NDEF/TLV Operation
**
*******************************************************************************/
-tNFC_STATUS rw_t1t_handle_read_rsp (BOOLEAN *p_notify,UINT8 *p_data)
+tNFC_STATUS rw_t1t_handle_read_rsp (BOOLEAN *p_notify, UINT8 *p_data)
{
tRW_T1T_CB *p_t1t = &rw_cb.tcb.t1t;
tNFC_STATUS status = NFC_STATUS_OK;
@@ -811,6 +817,8 @@
*p_notify = FALSE;
+ p_data += T1T_ADD_LEN;
+
rw_t1t_extract_lock_bytes (p_data);
if (p_t1t->state == RW_T1T_STATE_READ_NDEF)
@@ -838,7 +846,7 @@
}
else
{
- status = rw_t1t_handle_read_rsp (p_notify,p_data);
+ status = rw_t1t_handle_read_rsp (p_notify, p_data);
}
return status;
}
@@ -1195,7 +1203,7 @@
p_t1t->work_offset += bytes_read;
- /* If not found and not failed, try to read next segment in Dynamic Memory structure */
+ /* NDEF/Lock/Mem TLV to be found in segment 0, if not assume detection failed */
if (!found && !failed)
{
if ( ((p_t1t->tlv_detect == TAG_LOCK_CTRL_TLV) && (p_t1t->num_lockbytes > 0))
@@ -1313,10 +1321,8 @@
tRW_T1T_CB *p_t1t = &rw_cb.tcb.t1t;
UINT8 index;
UINT8 adds;
- UINT8 *p_readbytes;
tT1T_CMD_RSP_INFO *p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) rw_cb.tcb.t1t.p_cmd_rsp_info;
- p_readbytes = p_data + T1T_ADD_LEN;
/* The Response received could be for Read8 or Read Segment command */
switch(p_cmd_rsp_info->opcode)
{
@@ -1334,7 +1340,7 @@
{
if (rw_t1t_is_lock_reserved_otp_byte ((UINT16) ((p_t1t->block_read * T1T_BLOCK_SIZE) + index)) == FALSE)
{
- p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_readbytes[index];
+ p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_data[index];
p_t1t->work_offset++;
}
index++;
@@ -1356,7 +1362,7 @@
{
if (rw_t1t_is_lock_reserved_otp_byte ((UINT16) (index)) == FALSE)
{
- p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_readbytes[index];
+ p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_data[index];
p_t1t->work_offset++;
}
index++;
@@ -1868,7 +1874,7 @@
{
case RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK:
/* Backup ndef_final_block */
- memcpy (p_t1t->ndef_final_block,p_data + T1T_ADD_LEN,T1T_BLOCK_SIZE);
+ memcpy (p_t1t->ndef_final_block, p_data, T1T_BLOCK_SIZE);
/* Invalidate existing NDEF Message */
RW_T1T_BLD_ADD ((addr), (T1T_CC_BLOCK), (T1T_CC_NMN_OFFSET));
if (NFC_STATUS_OK == rw_t1t_send_static_cmd (T1T_CMD_WRITE_E, addr, 0))
@@ -2401,10 +2407,7 @@
{
tNFC_STATUS status = NFC_STATUS_FAILED;
tRW_T1T_CB *p_t1t= &rw_cb.tcb.t1t;
- BOOLEAN b_notify;
UINT8 adds;
- const tT1T_CMD_RSP_INFO *p_cmd_rsp_info_rall = t1t_cmd_to_rsp_info (T1T_CMD_RALL);
- const tT1T_CMD_RSP_INFO *p_cmd_rsp_info_rseg = t1t_cmd_to_rsp_info (T1T_CMD_RSEG);
if (p_t1t->state != RW_T1T_STATE_IDLE)
{
@@ -2433,53 +2436,26 @@
p_t1t->num_lock_tlvs = 0;
}
- if (p_t1t->b_rseg == TRUE)
+ /* Start reading memory, looking for the TLV */
+ p_t1t->segment = 0;
+ if ((p_t1t->hr[0] & 0x0F) != 1)
{
- /* If already got response to RSEG 0 */
- p_t1t->tlv_detect = tlv_type;
- p_t1t->work_offset = 0;
- p_t1t->state = RW_T1T_STATE_TLV_DETECT;
- p_t1t->substate = RW_T1T_SUBSTATE_NONE;
-
- p_t1t->p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) p_cmd_rsp_info_rseg;
- rw_t1t_handle_read_rsp (&b_notify,p_t1t->mem);
- status = NFC_STATUS_OK;
- }
- else if (p_t1t->b_update == TRUE)
- {
- /* If already got response to RALL */
- p_t1t->tlv_detect = tlv_type;
- p_t1t->work_offset = 0;
- p_t1t->state = RW_T1T_STATE_TLV_DETECT;
- p_t1t->substate = RW_T1T_SUBSTATE_NONE;
-
- p_t1t->p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) p_cmd_rsp_info_rall;
- rw_t1t_handle_read_rsp (&b_notify,p_t1t->mem);
- status = NFC_STATUS_OK;
+ /* send RSEG command */
+ RW_T1T_BLD_ADDS ((adds), (p_t1t->segment));
+ status = rw_t1t_send_dyn_cmd (T1T_CMD_RSEG, adds, NULL);
}
else
{
- /* Start reading memory, looking for the TLV */
- p_t1t->segment = 0;
- if ((p_t1t->hr[0] & 0x0F) != 1)
- {
- /* send RSEG command */
- RW_T1T_BLD_ADDS ((adds), (p_t1t->segment));
- status = rw_t1t_send_dyn_cmd (T1T_CMD_RSEG, adds, NULL);
- }
- else
- {
- status = rw_t1t_send_static_cmd (T1T_CMD_RALL, 0, 0);
- }
- if (status == NFC_STATUS_OK)
- {
- p_t1t->tlv_detect = tlv_type;
- p_t1t->work_offset = 0;
- p_t1t->state = RW_T1T_STATE_TLV_DETECT;
- p_t1t->substate = RW_T1T_SUBSTATE_NONE;
- }
-
+ status = rw_t1t_send_static_cmd (T1T_CMD_RALL, 0, 0);
}
+ if (status == NFC_STATUS_OK)
+ {
+ p_t1t->tlv_detect = tlv_type;
+ p_t1t->work_offset = 0;
+ p_t1t->state = RW_T1T_STATE_TLV_DETECT;
+ p_t1t->substate = RW_T1T_SUBSTATE_NONE;
+ }
+
return status;
}
@@ -2621,7 +2597,6 @@
tRW_T1T_CB *p_t1t = &rw_cb.tcb.t1t;
UINT16 num_ndef_bytes;
UINT16 offset;
- UINT8 block;
UINT8 addr;
UINT8 init_lengthfield_len;
UINT8 new_lengthfield_len;
@@ -2692,11 +2667,11 @@
if ((p_t1t->hr[0] & 0x0F) != 1)
{
/* Dynamic data structure */
- block = (UINT8) ((offset - 1)/T1T_BLOCK_SIZE);
+ p_t1t->block_read = (UINT8) ((offset - 1)/T1T_BLOCK_SIZE);
/* Read NDEF final block before updating */
- if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, block, NULL)) == NFC_STATUS_OK)
+ if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, p_t1t->block_read, NULL)) == NFC_STATUS_OK)
{
- p_t1t->num_ndef_finalblock = block;
+ p_t1t->num_ndef_finalblock = p_t1t->block_read;
p_t1t->state = RW_T1T_STATE_WRITE_NDEF;
p_t1t->substate = RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK;
}
diff --git a/src/nfc/tags/rw_t2t.c b/src/nfc/tags/rw_t2t.c
index 91f51f4..cb4e92c 100644
--- a/src/nfc/tags/rw_t2t.c
+++ b/src/nfc/tags/rw_t2t.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 2 tag in Reader/Writer
@@ -66,6 +67,9 @@
tRW_READ_DATA evt_data = {0};
tT2T_CMD_RSP_INFO *p_cmd_rsp_info = (tT2T_CMD_RSP_INFO *) rw_cb.tcb.t2t.p_cmd_rsp_info;
tRW_DETECT_NDEF_DATA ndef_data;
+#if (BT_TRACE_VERBOSE == TRUE)
+ UINT8 begin_state = p_t2t->state;
+#endif
if ( (p_t2t->state == RW_T2T_STATE_IDLE)
||(p_cmd_rsp_info == NULL) )
@@ -212,6 +216,14 @@
if (b_release)
GKI_freebuf (p_pkt);
+#if (BT_TRACE_VERBOSE == TRUE)
+ if (begin_state != p_t2t->state)
+ {
+ RW_TRACE_DEBUG2 ("RW T2T state changed:<%s> -> <%s>",
+ rw_t2t_get_state_name (begin_state),
+ rw_t2t_get_state_name (p_t2t->state));
+ }
+#endif
}
/*******************************************************************************
@@ -826,6 +838,12 @@
{
tRW_T2T_CB *p_t2t = &rw_cb.tcb.t2t;
+ if ( (p_t2t->state == RW_T2T_STATE_READ_NDEF)
+ ||(p_t2t->state == RW_T2T_STATE_WRITE_NDEF) )
+ {
+ p_t2t->b_read_data = FALSE;
+ }
+
p_t2t->state = RW_T2T_STATE_IDLE;
p_t2t->substate = RW_T2T_SUBSTATE_NONE;
return;
diff --git a/src/nfc/tags/rw_t2t_ndef.c b/src/nfc/tags/rw_t2t_ndef.c
index 0abfa08..e9bd16b 100644
--- a/src/nfc/tags/rw_t2t_ndef.c
+++ b/src/nfc/tags/rw_t2t_ndef.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 2 tag NDEF operation in
@@ -2305,7 +2306,7 @@
xx = 0;
num_static_lock_bytes = 0;
block_count = 0;
- num_lock_bits = TAG_BITS_PER_BYTE;
+ num_lock_bits = TAG_BITS_PER_BYTE - 1; /* the inner while loop increases xx by 2. need (-1) to avoid coverity overrun error */
while (num_static_lock_bytes < T2T_NUM_STATIC_LOCK_BYTES)
{
@@ -2830,8 +2831,10 @@
p_t2t->substate = RW_T2T_SUBSTATE_NONE;
}
else
- status = rw_t2t_format_tag ();
-
+ {
+ if ((status = rw_t2t_format_tag ()) != NFC_STATUS_OK)
+ p_t2t->b_read_hdr = FALSE;
+ }
return status;
}
@@ -2870,8 +2873,10 @@
}
if ( (tlv_type == TAG_LOCK_CTRL_TLV)
+ &&(p_t2t->b_read_hdr)
&&(p_t2t->tag_hdr[T2T_CC2_TMS_BYTE] == T2T_CC2_TMS_STATIC) )
{
+ p_t2t->b_read_hdr = FALSE;
RW_TRACE_API1 ("RW_T2tLocateTlv - No Lock tlv in static structure tag, CC[0]: 0x%02x", p_t2t->tag_hdr[T2T_CC2_TMS_BYTE]);
return (NFC_STATUS_FAILED);
}
@@ -2880,6 +2885,7 @@
&&(p_t2t->b_read_hdr)
&&(p_t2t->tag_hdr[T2T_CC0_NMN_BYTE] != T2T_CC0_NMN) )
{
+ p_t2t->b_read_hdr = FALSE;
RW_TRACE_WARNING3 ("RW_T2tLocateTlv - Invalid NDEF Magic Number!, CC[0]: 0x%02x, CC[1]: 0x%02x, CC[3]: 0x%02x", p_t2t->tag_hdr[T2T_CC0_NMN_BYTE], p_t2t->tag_hdr[T2T_CC1_VNO_BYTE], p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
return (NFC_STATUS_FAILED);
}
@@ -3072,18 +3078,18 @@
return (NFC_STATUS_FAILED);
}
- if (p_t2t->tag_hdr[T2T_CC3_RWA_BYTE] != T2T_CC3_RWA_RW)
- {
- RW_TRACE_ERROR1 ("RW_T2tWriteNDef - Write access not granted - CC3: %u", p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
- return (NFC_STATUS_REFUSED);
- }
-
if (p_t2t->ndef_status == T2T_NDEF_NOT_DETECTED)
{
RW_TRACE_ERROR0 ("RW_T2tWriteNDef - Error: NDEF detection not performed!");
return (NFC_STATUS_FAILED);
}
+ if (p_t2t->tag_hdr[T2T_CC3_RWA_BYTE] != T2T_CC3_RWA_RW)
+ {
+ RW_TRACE_ERROR1 ("RW_T2tWriteNDef - Write access not granted - CC3: %u", p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
+ return (NFC_STATUS_REFUSED);
+ }
+
/* Check if there is enough memory on the tag */
if (msg_len > p_t2t->max_ndef_msg_len)
{
@@ -3163,7 +3169,10 @@
p_t2t->substate = RW_T2T_SUBSTATE_NONE;
}
else
- status = rw_t2t_soft_lock_tag ();
+ {
+ if ((status = rw_t2t_soft_lock_tag ()) != NFC_STATUS_OK)
+ p_t2t->b_read_hdr = FALSE;
+ }
return status;
}
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index 89e960d..b921323 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 3 tag in Reader/Writer
@@ -63,6 +64,8 @@
RW_T3T_CMD_SEND_RAW_FRAME,
RW_T3T_CMD_GET_SYSTEM_CODES,
RW_T3T_CMD_FORMAT,
+ RW_T3T_CMD_SET_READ_ONLY_SOFT,
+ RW_T3T_CMD_SET_READ_ONLY_HARD,
RW_T3T_CMD_MAX
};
@@ -77,7 +80,8 @@
RW_T3T_UPDATE_CPLT_EVT, /* RW_T3T_CMD_UPDATE */
RW_T3T_RAW_FRAME_EVT, /* RW_T3T_CMD_SEND_RAW_FRAME */
RW_T3T_GET_SYSTEM_CODES_EVT, /* RW_T3T_CMD_GET_SYSTEM_CODES */
- RW_T3T_FORMAT_CPLT_EVT /* RW_T3T_CMD_FORMAT */
+ RW_T3T_FORMAT_CPLT_EVT, /* RW_T3T_CMD_FORMAT */
+ RW_T3T_SET_READ_ONLY_CPLT_EVT /* RW_T3T_CMD_SET_READ_ONLY */
};
/* States */
@@ -100,7 +104,13 @@
RW_T3T_FMT_SST_POLL_FELICA_LITE, /* Waiting for POLL Felica-Lite response (for formatting) */
RW_T3T_FMT_SST_CHECK_MC_BLK, /* Waiting for Felica-Lite MC (MemoryControl) block-read to complete */
RW_T3T_FMT_SST_UPDATE_MC_BLK, /* Waiting for Felica-Lite MC (MemoryControl) block-write to complete */
- RW_T3T_FMT_SST_UPDATE_NDEF_ATTRIB /* Waiting for NDEF attribute block-write to complete */
+ RW_T3T_FMT_SST_UPDATE_NDEF_ATTRIB, /* Waiting for NDEF attribute block-write to complete */
+
+ /* Sub states for setting Felica-Lite read only */
+ RW_T3T_SRO_SST_POLL_FELICA_LITE, /* Waiting for POLL Felica-Lite response (for setting read only) */
+ RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB, /* Waiting for NDEF attribute block-write to complete */
+ RW_T3T_SRO_SST_CHECK_MC_BLK, /* Waiting for Felica-Lite MC (MemoryControl) block-read to complete */
+ RW_T3T_SRO_SST_UPDATE_MC_BLK /* Waiting for Felica-Lite MC (MemoryControl) block-write to complete */
};
#if (BT_TRACE_VERBOSE == TRUE)
@@ -117,12 +127,13 @@
static void rw_t3t_handle_get_sc_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
static void rw_t3t_handle_ndef_detect_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
static void rw_t3t_handle_fmt_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
+static void rw_t3t_handle_sro_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
/* Default NDEF attribute information block (used when formatting Felica-Lite tags) */
#define RW_T3T_DEFAULT_FELICALITE_NBR 4 /* NBr (max block reads per cmd)*/
#define RW_T3T_DEFAULT_FELICALITE_NBW 1 /* NBw (max block write per cmd)*/
-#define RW_T3T_DEFAULT_FELICALITE_NMAXB 13 /* Nmaxb (max size in blocks) */
+#define RW_T3T_DEFAULT_FELICALITE_NMAXB (T3T_FELICALITE_NMAXB)
#define RW_T3T_DEFAULT_FELICALITE_ATTRIB_INFO_CHECKSUM ((T3T_MSG_NDEF_VERSION + \
RW_T3T_DEFAULT_FELICALITE_NBR + \
RW_T3T_DEFAULT_FELICALITE_NBW + \
@@ -288,6 +299,12 @@
p_cb->flags &= ~RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP;
rw_t3t_handle_fmt_poll_rsp (p_cb, nci_status, num_responses, sensf_res_buf_size, p_sensf_res_buf);
}
+ else if (p_cb->flags & RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP)
+ {
+ /* Handle POLL ntf in response to get system codes */
+ p_cb->flags &= ~RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
+ rw_t3t_handle_sro_poll_rsp (p_cb, nci_status, num_responses, sensf_res_buf_size, p_sensf_res_buf);
+ }
else if (p_cb->flags & RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP)
{
/* Handle POLL ntf in response to ndef detection */
@@ -358,6 +375,19 @@
p_cb->rw_state = RW_T3T_STATE_IDLE;
+ /* Update ndef info */
+ p_cb->ndef_attrib.status = status;
+ if (status == NFC_STATUS_OK)
+ {
+ p_cb->ndef_attrib.version = T3T_MSG_NDEF_VERSION;
+ p_cb->ndef_attrib.nbr = RW_T3T_DEFAULT_FELICALITE_NBR;
+ p_cb->ndef_attrib.nbw = RW_T3T_DEFAULT_FELICALITE_NBW;
+ p_cb->ndef_attrib.nmaxb = RW_T3T_DEFAULT_FELICALITE_NMAXB;
+ p_cb->ndef_attrib.writef = T3T_MSG_NDEF_WRITEF_OFF;
+ p_cb->ndef_attrib.rwflag = T3T_MSG_NDEF_RWFLAG_RW;
+ p_cb->ndef_attrib.ln = 0;
+ }
+
/* Notify upper layer of format complete */
evt_data.status = status;
(*(rw_cb.p_cback)) (RW_T3T_FORMAT_CPLT_EVT, &evt_data);
@@ -365,6 +395,27 @@
/*******************************************************************************
**
+** Function rw_t3t_set_readonly_cplt
+**
+** Description Notify upper layer of set read only complete
+**
+** Returns none
+**
+*******************************************************************************/
+void rw_t3t_set_readonly_cplt (tNFC_STATUS status)
+{
+ tRW_T3T_CB *p_cb = &rw_cb.tcb.t3t;
+ tRW_DATA evt_data;
+
+ p_cb->rw_state = RW_T3T_STATE_IDLE;
+
+ /* Notify upper layer of format complete */
+ evt_data.status = status;
+ (*(rw_cb.p_cback)) (RW_T3T_SET_READ_ONLY_CPLT_EVT, &evt_data);
+}
+
+/*******************************************************************************
+**
** Function rw_t3t_process_timeout
**
** Description Process timeout
@@ -415,6 +466,13 @@
RW_TRACE_ERROR0 ("Felica-Lite tag not detected");
rw_t3t_format_cplt (NFC_STATUS_FAILED);
}
+ else if (p_cb->flags & RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP)
+ {
+ /* POLL timeout for configuring Felica Lite read only */
+ p_cb->flags &= ~RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
+ RW_TRACE_ERROR0 ("Felica-Lite tag not detected");
+ rw_t3t_set_readonly_cplt (NFC_STATUS_FAILED);
+ }
else if (p_cb->flags & RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP)
{
/* POLL timeout for ndef detection */
@@ -1051,6 +1109,56 @@
/*****************************************************************************
**
+** Function rw_t3t_check_mc_block
+**
+** Description Send command to check Memory Configuration Block
+**
+** Returns tNFC_STATUS
+**
+*****************************************************************************/
+tNFC_STATUS rw_t3t_check_mc_block (tRW_T3T_CB *p_cb)
+{
+ BT_HDR *p_cmd_buf;
+ UINT8 *p, *p_cmd_start;
+
+ /* Read Memory Configuration block */
+ if ((p_cmd_buf = rw_t3t_get_cmd_buf ()) != NULL)
+ {
+ /* Construct T3T message */
+ p = p_cmd_start = (UINT8 *) (p_cmd_buf+1) + p_cmd_buf->offset;
+
+ /* Add CHECK opcode to message */
+ UINT8_TO_STREAM (p, T3T_MSG_OPC_CHECK_CMD);
+
+ /* Add IDm to message */
+ ARRAY_TO_STREAM (p, p_cb->peer_nfcid2, NCI_NFCID2_LEN);
+
+ /* Add Service code list */
+ UINT8_TO_STREAM (p, 1); /* Number of services (only 1 service: NDEF) */
+ UINT16_TO_STREAM (p, T3T_MSG_NDEF_SC_RO); /* Service code (little-endian format) */
+
+ /* Number of blocks */
+ UINT8_TO_STREAM (p, 1); /* Number of blocks (only 1 block: Memory Configuration Information ) */
+
+ /* Block List element: the Memory Configuration block (block 0x88) */
+ UINT8_TO_STREAM (p, T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT);
+ UINT8_TO_STREAM (p, T3T_MSG_FELICALITE_BLOCK_ID_MC);
+
+ /* Calculate length of message */
+ p_cmd_buf->len = (UINT16) (p - p_cmd_start);
+
+ /* Send the T3T message */
+ return rw_t3t_send_cmd (p_cb, p_cb->cur_cmd, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
+ }
+ else
+ {
+ RW_TRACE_ERROR0 ("Unable to allocate buffer to read MC block");
+ return (NFC_STATUS_NO_BUFFERS);
+ }
+}
+
+/*****************************************************************************
+**
** Function rw_t3t_send_raw_frame
**
** Description Send raw frame
@@ -1665,7 +1773,8 @@
**
** Function rw_t3t_update_block
**
-** Description Send UPDATE command for single block (for formatting)
+** Description Send UPDATE command for single block
+** (for formatting/configuring read only)
**
** Returns tNFC_STATUS
**
@@ -1704,7 +1813,7 @@
p_cmd_buf->len = (UINT16) (p_dst - p_cmd_start);
/* Send the T3T message */
- status = rw_t3t_send_cmd (p_cb, RW_T3T_CMD_FORMAT, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
+ status = rw_t3t_send_cmd (p_cb, p_cb->cur_cmd, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
}
else
{
@@ -1726,8 +1835,6 @@
*****************************************************************************/
static void rw_t3t_handle_fmt_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf)
{
- BT_HDR *p_cmd_buf;
- UINT8 *p, *p_cmd_start;
tRW_DATA evt_data;
evt_data.status = NFC_STATUS_OK;
@@ -1739,42 +1846,10 @@
/* Get MemoryControl block */
RW_TRACE_DEBUG0 ("Felica-Lite tag detected...getting Memory Control block.");
- /* Read NDEF attribute block */
- if ((p_cmd_buf = rw_t3t_get_cmd_buf ()) != NULL)
- {
- p_cb->rw_substate = RW_T3T_FMT_SST_CHECK_MC_BLK;
+ p_cb->rw_substate = RW_T3T_FMT_SST_CHECK_MC_BLK;
- /* Construct T3T message */
- p = p_cmd_start = (UINT8 *) (p_cmd_buf+1) + p_cmd_buf->offset;
-
- /* Add CHECK opcode to message */
- UINT8_TO_STREAM (p, T3T_MSG_OPC_CHECK_CMD);
-
- /* Add IDm to message */
- ARRAY_TO_STREAM (p, p_cb->peer_nfcid2, NCI_NFCID2_LEN);
-
- /* Add Service code list */
- UINT8_TO_STREAM (p, 1); /* Number of services (only 1 service: NDEF) */
- UINT16_TO_STREAM (p, T3T_MSG_NDEF_SC_RO); /* Service code (little-endian format) */
-
- /* Number of blocks */
- UINT8_TO_STREAM (p, 1); /* Number of blocks (only 1 block: NDEF Attribute Information ) */
-
- /* Block List element: the NDEF attribute information block (block 0) */
- UINT8_TO_STREAM (p, T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT);
- UINT8_TO_STREAM (p, T3T_MSG_FELICALITE_BLOCK_ID_MC);
-
- /* Calculate length of message */
- p_cmd_buf->len = (UINT16) (p - p_cmd_start);
-
- /* Send the T3T message */
- evt_data.status = rw_t3t_send_cmd (p_cb, RW_T3T_CMD_FORMAT, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
- }
- else
- {
- RW_TRACE_ERROR0 ("Unable to allocate buffer to read MC block");
- evt_data.status = NFC_STATUS_NO_BUFFERS;
- }
+ /* Send command to check Memory Configuration block */
+ evt_data.status = rw_t3t_check_mc_block (p_cb);
}
else
{
@@ -1833,6 +1908,9 @@
/* Set SYS_OP field to 0x01 (enable NDEF) */
p_mc[T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP] = 0x01;
+ /* Set RF_PRM field to 0x07 (procedure of issuance) */
+ p_mc[T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM] = 0x07;
+
/* Construct and send UPDATE message to write MC block */
p_cb->rw_substate = RW_T3T_FMT_SST_UPDATE_MC_BLK;
evt_data.status = rw_t3t_update_block (p_cb, T3T_MSG_FELICALITE_BLOCK_ID_MC, p_mc);
@@ -1892,6 +1970,195 @@
GKI_freebuf (p_msg_rsp);
}
+/*****************************************************************************
+**
+** Function rw_t3t_handle_sro_poll_rsp
+**
+** Description Handle POLL response for configuring felica-lite read only
+**
+** Returns Nothing
+**
+*****************************************************************************/
+static void rw_t3t_handle_sro_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf)
+{
+ tRW_DATA evt_data;
+ UINT8 rw_t3t_ndef_attrib_info[T3T_MSG_BLOCKSIZE];
+ UINT8 *p;
+ UINT8 tempU8;
+ UINT16 checksum, i;
+ UINT32 tempU32 = 0;
+
+ evt_data.status = NFC_STATUS_OK;
+
+ /* Validate response for poll response */
+ if ((nci_status == NCI_STATUS_OK) && (num_responses > 0))
+ {
+ /* Tag responded for Felica-Lite poll */
+ if (p_cb->ndef_attrib.rwflag != T3T_MSG_NDEF_RWFLAG_RO)
+ {
+ /* First update attribute information block */
+ RW_TRACE_DEBUG0 ("Felica-Lite tag detected...update NDef attribution block.");
+
+ p_cb->rw_substate = RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB;
+
+ p = rw_t3t_ndef_attrib_info;
+
+ UINT8_TO_STREAM (p, p_cb->ndef_attrib.version);
+
+ /* Update NDEF info */
+ UINT8_TO_STREAM (p, p_cb->ndef_attrib.nbr); /* NBr: number of blocks that can be read using one Check command */
+ UINT8_TO_STREAM (p, p_cb->ndef_attrib.nbw); /* Nbw: number of blocks that can be written using one Update command */
+ UINT16_TO_BE_STREAM (p, p_cb->ndef_attrib.nmaxb); /* Nmaxb: maximum number of blocks available for NDEF data */
+ UINT32_TO_BE_STREAM (p, tempU32);
+ UINT8_TO_STREAM (p, p_cb->ndef_attrib.writef); /* WriteFlag: 00h if writing data finished; 0Fh if writing data in progress */
+ UINT8_TO_STREAM (p, 0x00); /* RWFlag: 00h NDEF is read-only */
+
+ tempU8 = (UINT8) (p_cb->ndef_attrib.ln >> 16);
+ /* Get length (3-byte, big-endian) */
+ UINT8_TO_STREAM (p, tempU8); /* Ln: high-byte */
+ UINT16_TO_BE_STREAM (p, p_cb->ndef_attrib.ln); /* Ln: lo-word */
+
+ /* Calculate and append Checksum */
+ checksum = 0;
+ for (i = 0; i < T3T_MSG_NDEF_ATTR_INFO_SIZE; i++)
+ {
+ checksum+=rw_t3t_ndef_attrib_info[i];
+ }
+ UINT16_TO_BE_STREAM (p, checksum);
+
+ evt_data.status = rw_t3t_update_block (p_cb, 0, (UINT8 *) rw_t3t_ndef_attrib_info);
+ }
+ else if (p_cb->cur_cmd == RW_T3T_CMD_SET_READ_ONLY_HARD)
+ {
+ /* NDEF is already read only, Read and update MemoryControl block */
+ RW_TRACE_DEBUG0 ("Felica-Lite tag detected...getting Memory Control block.");
+ p_cb->rw_substate = RW_T3T_SRO_SST_CHECK_MC_BLK;
+
+ /* Send command to check Memory Configuration block */
+ evt_data.status = rw_t3t_check_mc_block (p_cb);
+ }
+ }
+ else
+ {
+ RW_TRACE_ERROR0 ("Felica-Lite tag not detected");
+ evt_data.status = NFC_STATUS_FAILED;
+ }
+
+ /* If error, notify upper layer */
+ if (evt_data.status != NFC_STATUS_OK)
+ {
+ rw_t3t_set_readonly_cplt (evt_data.status);
+ }
+}
+
+/*****************************************************************************
+**
+** Function rw_t3t_act_handle_sro_rsp
+**
+** Description Handle response for setting read only codes
+**
+** Returns Nothing
+**
+*****************************************************************************/
+void rw_t3t_act_handle_sro_rsp (tRW_T3T_CB *p_cb, BT_HDR *p_msg_rsp)
+{
+ UINT8 *p_t3t_rsp = (UINT8 *) (p_msg_rsp+1) + p_msg_rsp->offset;
+ UINT8 *p_mc;
+ tRW_DATA evt_data;
+
+ evt_data.status = NFC_STATUS_OK;
+
+ if (p_cb->rw_substate == RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB)
+ {
+ /* Validate response opcode */
+ if ( (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_UPDATE_RSP)
+ ||(p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK) )
+
+ {
+ RW_TRACE_ERROR2 ("Response error: rsp_code=%02X, status=%02X", p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE], p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+ evt_data.status = NFC_STATUS_FAILED;
+ }
+ else
+ {
+ p_cb->ndef_attrib.rwflag = T3T_MSG_NDEF_RWFLAG_RO;
+ if (p_cb->cur_cmd == RW_T3T_CMD_SET_READ_ONLY_HARD)
+ {
+ p_cb->rw_substate = RW_T3T_SRO_SST_CHECK_MC_BLK;
+
+ /* Send command to check Memory Configuration block */
+ evt_data.status = rw_t3t_check_mc_block (p_cb);
+ }
+ else
+ {
+ rw_t3t_set_readonly_cplt (evt_data.status);
+ }
+ }
+ }
+ else if (p_cb->rw_substate == RW_T3T_SRO_SST_CHECK_MC_BLK)
+ {
+ /* Check tags's response for reading MemoryControl block, Validate response opcode */
+ if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP)
+ {
+ RW_TRACE_ERROR2 ("Response error: expecting rsp_code %02X, but got %02X", T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+ evt_data.status = NFC_STATUS_FAILED;
+ }
+ /* Validate status code and NFCID2 response from tag */
+ else if ( (p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK) /* verify response status code */
+ ||(memcmp (p_cb->peer_nfcid2, &p_t3t_rsp[T3T_MSG_RSP_OFFSET_IDM], NCI_NFCID2_LEN) != 0) ) /* verify response IDm */
+ {
+ evt_data.status = NFC_STATUS_FAILED;
+ }
+ else
+ {
+ /* Check if memory configuration (MC) block to see if SYS_OP=1 (NDEF enabled) */
+ p_mc = &p_t3t_rsp[T3T_MSG_RSP_OFFSET_CHECK_DATA]; /* Point to MC data of CHECK response */
+
+ if (p_mc[T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP] != 0x01)
+ {
+ /* Tag is not currently enabled for NDEF */
+ evt_data.status = NFC_STATUS_FAILED;
+ }
+ else
+ {
+ /* Set MC_SP field with MC[0] = 0x00 & MC[1] = 0xC0 (Hardlock) to change access permission from RW to RO */
+ p_mc[T3T_MSG_FELICALITE_MC_OFFSET_MC_SP] = 0x00;
+ /* Not changing the access permission of Subtraction Register and MC[0:1] */
+ p_mc[T3T_MSG_FELICALITE_MC_OFFSET_MC_SP + 1] = 0xC0;
+
+ /* Set RF_PRM field to 0x07 (procedure of issuance) */
+ p_mc[T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM] = 0x07;
+
+ /* Construct and send UPDATE message to write MC block */
+ p_cb->rw_substate = RW_T3T_SRO_SST_UPDATE_MC_BLK;
+ evt_data.status = rw_t3t_update_block (p_cb, T3T_MSG_FELICALITE_BLOCK_ID_MC, p_mc);
+ }
+ }
+ }
+ else if (p_cb->rw_substate == RW_T3T_SRO_SST_UPDATE_MC_BLK)
+ {
+ /* Validate response opcode */
+ if ( (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_UPDATE_RSP)
+ ||(p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK) )
+
+ {
+ RW_TRACE_ERROR2 ("Response error: rsp_code=%02X, status=%02X", p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE], p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+ evt_data.status = NFC_STATUS_FAILED;
+ }
+ else
+ {
+ rw_t3t_set_readonly_cplt (evt_data.status);
+ }
+ }
+
+ /* If error, notify upper layer */
+ if (evt_data.status != NFC_STATUS_OK)
+ {
+ rw_t3t_set_readonly_cplt (evt_data.status);
+ }
+
+ GKI_freebuf (p_msg_rsp);
+}
+
/*******************************************************************************
**
** Function rw_t3t_data_cback
@@ -1989,6 +2256,11 @@
rw_t3t_act_handle_fmt_rsp (p_cb, p_msg);
break;
+ case RW_T3T_CMD_SET_READ_ONLY_SOFT:
+ case RW_T3T_CMD_SET_READ_ONLY_HARD:
+ rw_t3t_act_handle_sro_rsp (p_cb, p_msg);
+ break;
+
default:
GKI_freebuf (p_msg);
break;
@@ -2711,3 +2983,66 @@
return (retval);
}
+
+/*****************************************************************************
+**
+** Function RW_T3tSetReadOnly
+**
+** Description This function performs NDEF read-only procedure
+** Note: Only Felica-Lite tags are supported by this API.
+** RW_T3tDetectNDef() must be called before using this
+**
+** The RW_T3T_SET_READ_ONLY_CPLT_EVT event will be returned.
+**
+** Returns NFC_STATUS_OK if success
+** NFC_STATUS_FAILED if T3T is busy or other error
+**
+*****************************************************************************/
+tNFC_STATUS RW_T3tSetReadOnly (BOOLEAN b_hard_lock)
+{
+ tNFC_STATUS retval = NFC_STATUS_OK;
+ tRW_T3T_CB *p_cb = &rw_cb.tcb.t3t;
+ tRW_DATA evt_data;
+
+ RW_TRACE_API0 ("RW_T4tSetTagReadOnly ()");
+
+ /* Check if we are in valid state to handle this API */
+ if (p_cb->rw_state != RW_T3T_STATE_IDLE)
+ {
+ RW_TRACE_ERROR1 ("Error: invalid state to handle API (0x%x)", p_cb->rw_state);
+ return (NFC_STATUS_FAILED);
+ }
+
+ if (p_cb->ndef_attrib.status != NFC_STATUS_OK) /* NDEF detection not performed yet? */
+ {
+ RW_TRACE_ERROR0 ("Error: NDEF detection not performed yet");
+ return (NFC_STATUS_NOT_INITIALIZED);
+ }
+
+ if ((!b_hard_lock) && (p_cb->ndef_attrib.rwflag == T3T_MSG_NDEF_RWFLAG_RO))/* Tag's NDEF memory is read-only already */
+ {
+ evt_data.status = NFC_STATUS_OK;
+ (*(rw_cb.p_cback)) (RW_T4T_SET_TO_RO_EVT, &evt_data);
+ return (retval);
+ }
+ else
+ {
+ /* Poll tag, to see if Felica-Lite system is supported */
+ if ((retval = (tNFC_STATUS) nci_snd_t3t_polling (T3T_SYSTEM_CODE_FELICA_LITE, T3T_POLL_RC_SC, 0)) == NCI_STATUS_OK)
+ {
+ if (b_hard_lock)
+ p_cb->cur_cmd = RW_T3T_CMD_SET_READ_ONLY_HARD;
+ else
+ p_cb->cur_cmd = RW_T3T_CMD_SET_READ_ONLY_SOFT;
+ p_cb->cur_tout = RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS;
+ p_cb->cur_poll_rc = T3T_POLL_RC_SC;
+ p_cb->rw_state = RW_T3T_STATE_COMMAND_PENDING;
+ p_cb->rw_substate = RW_T3T_SRO_SST_POLL_FELICA_LITE;
+ p_cb->flags |= RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
+
+ /* start timer for waiting for responses */
+ rw_t3t_start_poll_timer (p_cb);
+ }
+ }
+ return (retval);
+}
diff --git a/src/nfc/tags/rw_t4t.c b/src/nfc/tags/rw_t4t.c
index 7b61339..831be59 100644
--- a/src/nfc/tags/rw_t4t.c
+++ b/src/nfc/tags/rw_t4t.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the implementation for Type 4 tag in Reader/Writer
@@ -43,6 +44,7 @@
#define RW_T4T_STATE_READ_NDEF 0x03 /* performing read NDEF procedure */
#define RW_T4T_STATE_UPDATE_NDEF 0x04 /* performing update NDEF procedure */
#define RW_T4T_STATE_PRESENCE_CHECK 0x05 /* checking presence of tag */
+#define RW_T4T_STATE_SET_READ_ONLY 0x06 /* convert tag to read only */
/* sub state */
#define RW_T4T_SUBSTATE_WAIT_SELECT_APP 0x00 /* waiting for response of selecting AID */
@@ -53,6 +55,7 @@
#define RW_T4T_SUBSTATE_WAIT_READ_RESP 0x05 /* waiting for response of reading file */
#define RW_T4T_SUBSTATE_WAIT_UPDATE_RESP 0x06 /* waiting for response of updating file */
#define RW_T4T_SUBSTATE_WAIT_UPDATE_NLEN 0x07 /* waiting for response of updating NLEN */
+#define RW_T4T_SUBSTATE_WAIT_UPDATE_CC 0x08 /* waiting for response of updating CC */
#if (BT_TRACE_VERBOSE == TRUE)
static char *rw_t4t_get_state_name (UINT8 state);
@@ -64,12 +67,14 @@
static BOOLEAN rw_t4t_read_file (UINT16 offset, UINT16 length, BOOLEAN is_continue);
static BOOLEAN rw_t4t_update_nlen (UINT16 ndef_len);
static BOOLEAN rw_t4t_update_file (void);
+static BOOLEAN rw_t4t_update_cc_to_readonly (void);
static BOOLEAN rw_t4t_select_application (UINT8 version);
static BOOLEAN rw_t4t_validate_cc_file (void);
static void rw_t4t_handle_error (tNFC_STATUS status, UINT8 sw1, UINT8 sw2);
static void rw_t4t_sm_detect_ndef (BT_HDR *p_r_apdu);
static void rw_t4t_sm_read_ndef (BT_HDR *p_r_apdu);
static void rw_t4t_sm_update_ndef (BT_HDR *p_r_apdu);
+static void rw_t4t_sm_set_readonly (BT_HDR *p_r_apdu);
static void rw_t4t_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data);
/*******************************************************************************
@@ -318,6 +323,53 @@
/*******************************************************************************
**
+** Function rw_t4t_update_cc_to_readonly
+**
+** Description Send UpdateBinary Command for changing Write access
+**
+** Returns TRUE if success
+**
+*******************************************************************************/
+static BOOLEAN rw_t4t_update_cc_to_readonly (void)
+{
+ BT_HDR *p_c_apdu;
+ UINT8 *p;
+
+ RW_TRACE_DEBUG0 ("rw_t4t_update_cc_to_readonly (): Remove Write access from CC");
+
+ p_c_apdu = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID);
+
+ if (!p_c_apdu)
+ {
+ RW_TRACE_ERROR0 ("rw_t4t_update_cc_to_readonly (): Cannot allocate buffer");
+ return FALSE;
+ }
+
+ p_c_apdu->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
+ p = (UINT8 *) (p_c_apdu + 1) + p_c_apdu->offset;
+
+ /* Add Command Header */
+ UINT8_TO_BE_STREAM (p, T4T_CMD_CLASS);
+ UINT8_TO_BE_STREAM (p, T4T_CMD_INS_UPDATE_BINARY);
+ UINT16_TO_BE_STREAM (p, (T4T_FC_TLV_OFFSET_IN_CC + T4T_FC_WRITE_ACCESS_OFFSET_IN_TLV)); /* Offset for Read Write access byte of CC */
+ UINT8_TO_BE_STREAM (p, 1); /* Length of write access field in cc interms of bytes */
+
+ /* Remove Write access */
+ UINT8_TO_BE_STREAM (p, T4T_FC_NO_WRITE_ACCESS);
+
+
+ p_c_apdu->len = T4T_CMD_MAX_HDR_SIZE + 1;
+
+ if (!rw_t4t_send_to_lower (p_c_apdu))
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*******************************************************************************
+**
** Function rw_t4t_select_application
**
** Description Select Application
@@ -515,6 +567,10 @@
rw_data.status = NFC_STATUS_FAILED;
break;
+ case RW_T4T_STATE_SET_READ_ONLY:
+ event = RW_T4T_SET_TO_RO_EVT;
+ break;
+
default:
event = RW_T4T_MAX_EVT;
break;
@@ -978,6 +1034,89 @@
/*******************************************************************************
**
+** Function rw_t4t_sm_set_readonly
+**
+** Description State machine for CC update procedure
+**
+** Returns none
+**
+*******************************************************************************/
+static void rw_t4t_sm_set_readonly (BT_HDR *p_r_apdu)
+{
+ tRW_T4T_CB *p_t4t = &rw_cb.tcb.t4t;
+ UINT8 *p;
+ UINT16 status_words;
+ tRW_DATA rw_data;
+
+#if (BT_TRACE_VERBOSE == TRUE)
+ RW_TRACE_DEBUG2 ("rw_t4t_sm_set_readonly (): sub_state:%s (%d)",
+ rw_t4t_get_sub_state_name (p_t4t->sub_state), p_t4t->sub_state);
+#else
+ RW_TRACE_DEBUG1 ("rw_t4t_sm_set_readonly (): sub_state=%d", p_t4t->sub_state);
+#endif
+
+ /* Get status words */
+ p = (UINT8 *) (p_r_apdu + 1) + p_r_apdu->offset;
+ p += (p_r_apdu->len - T4T_RSP_STATUS_WORDS_SIZE);
+ BE_STREAM_TO_UINT16 (status_words, p);
+
+ if (status_words != T4T_RSP_CMD_CMPLTED)
+ {
+ rw_t4t_handle_error (NFC_STATUS_CMD_NOT_CMPLTD, *(p-2), *(p-1));
+ return;
+ }
+
+ switch (p_t4t->sub_state)
+ {
+ case RW_T4T_SUBSTATE_WAIT_SELECT_CC:
+
+ /* CC file has been selected then update write access to read-only in CC file */
+ if (!rw_t4t_update_cc_to_readonly ())
+ {
+ rw_t4t_handle_error (NFC_STATUS_FAILED, 0, 0);
+ }
+ else
+ {
+ p_t4t->sub_state = RW_T4T_SUBSTATE_WAIT_UPDATE_CC;
+ }
+ break;
+
+ case RW_T4T_SUBSTATE_WAIT_UPDATE_CC:
+ /* CC Updated, Select NDEF File to allow NDEF operation */
+ p_t4t->cc_file.ndef_fc.write_access = T4T_FC_NO_WRITE_ACCESS;
+ p_t4t->ndef_status |= RW_T4T_NDEF_STATUS_NDEF_READ_ONLY;
+
+ if (!rw_t4t_select_file (p_t4t->cc_file.ndef_fc.file_id))
+ {
+ rw_t4t_handle_error (NFC_STATUS_FAILED, 0, 0);
+ }
+ else
+ {
+ p_t4t->sub_state = RW_T4T_SUBSTATE_WAIT_SELECT_NDEF_FILE;
+ }
+ break;
+
+ case RW_T4T_SUBSTATE_WAIT_SELECT_NDEF_FILE:
+ p_t4t->state = RW_T4T_STATE_IDLE;
+ /* just finished last step of configuring tag read only (Selecting NDEF file CC) */
+ if (rw_cb.p_cback)
+ {
+ rw_data.status = NFC_STATUS_OK;
+
+ RW_TRACE_DEBUG0 ("rw_t4t_sm_set_readonly (): Sent RW_T4T_SET_TO_RO_EVT");
+ (*(rw_cb.p_cback)) (RW_T4T_SET_TO_RO_EVT, &rw_data);
+ }
+ break;
+
+ default:
+ RW_TRACE_ERROR1 ("rw_t4t_sm_set_readonly (): unknown sub_state = %d", p_t4t->sub_state);
+ rw_t4t_handle_error (NFC_STATUS_FAILED, 0, 0);
+ break;
+ }
+}
+
+/*******************************************************************************
+**
** Function rw_t4t_process_timeout
**
** Description process timeout event
@@ -1097,6 +1236,10 @@
(*(rw_cb.p_cback)) (RW_T4T_PRESENCE_CHECK_EVT, &rw_data);
GKI_freebuf (p_r_apdu);
break;
+ case RW_T4T_STATE_SET_READ_ONLY:
+ rw_t4t_sm_set_readonly (p_r_apdu);
+ GKI_freebuf (p_r_apdu);
+ break;
default:
RW_TRACE_ERROR1 ("rw_t4t_data_cback (): invalid state=%d", p_t4t->state);
GKI_freebuf (p_r_apdu);
@@ -1346,7 +1489,7 @@
else if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE)
{
evt_data.status = NFC_STATUS_OK;
- (*rw_cb.p_cback) (RW_T3T_PRESENCE_CHECK_EVT, &evt_data);
+ (*rw_cb.p_cback) (RW_T4T_PRESENCE_CHECK_EVT, &evt_data);
}
else
{
@@ -1363,6 +1506,63 @@
return (retval);
}
+/*****************************************************************************
+**
+** Function RW_T4tSetNDefReadOnly
+**
+** Description This function performs NDEF read-only procedure
+** Note: RW_T4tDetectNDef() must be called before using this
+**
+** The RW_T4T_SET_TO_RO_EVT event will be returned.
+**
+** Returns NFC_STATUS_OK if success
+** NFC_STATUS_FAILED if T4T is busy or other error
+**
+*****************************************************************************/
+tNFC_STATUS RW_T4tSetNDefReadOnly (void)
+{
+ tNFC_STATUS retval = NFC_STATUS_OK;
+ tRW_DATA evt_data;
+
+ RW_TRACE_API0 ("RW_T4tSetNDefReadOnly ()");
+
+ if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE)
+ {
+ RW_TRACE_ERROR1 ("RW_T4tSetNDefReadOnly ():Unable to start command at state (0x%X)",
+ rw_cb.tcb.t4t.state);
+ return NFC_STATUS_FAILED;
+ }
+
+ /* if NDEF has been detected */
+ if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_DETECTED)
+ {
+ /* if read-only */
+ if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_READ_ONLY)
+ {
+ evt_data.status = NFC_STATUS_OK;
+ (*rw_cb.p_cback) (RW_T4T_SET_TO_RO_EVT, &evt_data);
+ return (retval);
+ }
+
+ /* NDEF Tag application has been selected then select CC file */
+ if (!rw_t4t_select_file (T4T_CC_FILE_ID))
+ {
+ return NFC_STATUS_FAILED;
+ }
+
+ rw_cb.tcb.t4t.state = RW_T4T_STATE_SET_READ_ONLY;
+ rw_cb.tcb.t4t.sub_state = RW_T4T_SUBSTATE_WAIT_SELECT_CC;
+
+ return NFC_STATUS_OK;
+ }
+ else
+ {
+ RW_TRACE_ERROR0 ("RW_T4tSetNDefReadOnly ():No NDEF detected");
+ return NFC_STATUS_FAILED;
+ }
+ return (retval);
+}
+
#if (BT_TRACE_VERBOSE == TRUE)
/*******************************************************************************
**
diff --git a/src/nfc/tags/tags_int.c b/src/nfc/tags/tags_int.c
index ce7266b..09b0201 100644
--- a/src/nfc/tags/tags_int.c
+++ b/src/nfc/tags/tags_int.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Copyright (C) 2010-2012 Broadcom Corporation
+ * Copyright (C) 2010-2013 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*
******************************************************************************/
+
/******************************************************************************
*
* This file contains the common data types shared by Reader/Writer mode
diff --git a/src/nfca_version.c b/src/nfca_version.c
new file mode 100644
index 0000000..1c217b0
--- /dev/null
+++ b/src/nfca_version.c
@@ -0,0 +1,20 @@
+/*****************************************************************************/
+/* */
+/* Name: nfca_version.c */
+/* */
+/* Description: */
+/* NFCA Version string declaration. */
+/* */
+/* Copyright (c) 2011, Broadcom Corporation, All Rights Reserved. */
+/*****************************************************************************/
+#include "bt_types.h"
+
+const UINT8 nfca_version_string[] = "NFCDROID_MI_422_10.0.4";
+
+/*
+// The following string should be manually updated to contain the
+// label of the NFA version being used (see stack-info.txt).
+//
+// NOTE: IF additional branches are used add a "+" at the end of the string
+*/
+const UINT8 nfa_version_string[] = "NFA_MI_1.03.57+";
diff --git a/src/udrv/include/uipc.h b/src/udrv/include/uipc.h
index 0d6358a..f5f1ec1 100755
--- a/src/udrv/include/uipc.h
+++ b/src/udrv/include/uipc.h
@@ -32,8 +32,8 @@
#define UIPC_CH_ID_ALL 0 /* used to address all the ch id at once */
#define UIPC_CH_ID_0 1 /* shared mem interface */
#define UIPC_CH_ID_1 2 /* TCP socket (GPS) */
-#define UIPC_CH_ID_2 3 /* BSA control socket */
-#define UIPC_CH_ID_3 4 /* BSA HH */
+#define UIPC_CH_ID_2 3 /* BTIF control socket */
+#define UIPC_CH_ID_3 4 /* BTIF HH */
#define UIPC_CH_ID_4 5 /* Future usage */
#define UIPC_CH_ID_5 6 /* Future usage */
#define UIPC_CH_ID_6 7 /* Future usage */
diff --git a/src/udrv/include/upio.h b/src/udrv/include/upio.h
index 41ac97c..08b17a7 100755
--- a/src/udrv/include/upio.h
+++ b/src/udrv/include/upio.h
@@ -24,8 +24,6 @@
#ifndef UPIO_H
#define UPIO_H
-#include "bt_target.h"
-
/* Enumeration of UPIO features */
/* Not all features enumerated here are supported by the hardware. */
/* Use UPIO_Feature() to determine support of a particular feature. */