1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu *  Copyright (C) 2012-2014 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFC_TYPES_H
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_TYPES_H
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
220a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi/****************************************************************************
230a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi** NFC_HDR header definition for NFC messages
240a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi*****************************************************************************/
256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t event;
276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t len;
286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t offset;
296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t layer_specific;
300a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi} NFC_HDR;
316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_HDR_SIZE (sizeof(NFC_HDR))
320a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Mask for NFC_HDR event field */
346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_EVT_MASK 0xFF00
356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_SUB_EVT_MASK 0x00FF
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_HAL_TASK  definitions
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC_HAL_TASK event messages */
4246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NCI message for sending to NFCC          */
4346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_HAL_EVT_TO_NFC_NCI 0x0100
4446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Request to start NCIT quick timer        */
4546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_HAL_EVT_POST_CORE_RESET 0x0200
4646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Request to start chip-specific config    */
4746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_HAL_EVT_TO_START_QUICK_TIMER 0x0300
4846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NCI message for hci persistency data     */
4946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_HAL_EVT_HCI 0x0400
5046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NCI message to issue prediscover config  */
5146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_HAL_EVT_PRE_DISCOVER 0x0500
5246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* permission to send commands queued in HAL*/
5346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_HAL_EVT_CONTROL_GRANTED 0x0600
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC_HAL_TASK sub event messages */
566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_HAL_HCI_RSP_NV_READ_EVT (0x01 | NFC_HAL_EVT_HCI)
576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_HAL_HCI_RSP_NV_WRITE_EVT (0x02 | NFC_HAL_EVT_HCI)
586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_HAL_HCI_VSC_TIMEOUT_EVT (0x03 | NFC_HAL_EVT_HCI)
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Event masks for NFC_TASK messages */
6146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NCI message for sending to host stack    */
6246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_EVT_TO_NFC_NCI 0x4000
6346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Error notification to NFC Task           */
6446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_EVT_TO_NFC_ERR 0x4100
6546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Messages between NFC and NCI task        */
6646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_EVT_TO_NFC_MSGS 0x4200
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Macros to get and put bytes to and from a stream (Little Endian format).
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT32_TO_STREAM(p, u32)     \
736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                  \
746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)(u32);         \
756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u32) >> 8);  \
766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u32) >> 16); \
776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u32) >> 24); \
786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT24_TO_STREAM(p, u24)     \
806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                  \
816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)(u24);         \
826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u24) >> 8);  \
836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u24) >> 16); \
846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT16_TO_STREAM(p, u16)    \
866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                 \
876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)(u16);        \
886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u16) >> 8); \
896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT8_TO_STREAM(p, u8) \
916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  { *(p)++ = (uint8_t)(u8); }
926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define INT8_TO_STREAM(p, u8) \
936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  { *(p)++ = (int8_t)(u8); }
946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define ARRAY32_TO_STREAM(p, a)                                   \
956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                               \
966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                             \
976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < 32; ijk++) *(p)++ = (uint8_t)a[31 - ijk]; \
986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define ARRAY16_TO_STREAM(p, a)                                   \
1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                               \
1016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                             \
1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < 16; ijk++) *(p)++ = (uint8_t)a[15 - ijk]; \
1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define ARRAY8_TO_STREAM(p, a)                                  \
1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                             \
1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                           \
1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < 8; ijk++) *(p)++ = (uint8_t)a[7 - ijk]; \
1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define BDADDR_TO_STREAM(p, a)                    \
1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                               \
1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                             \
1126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < BD_ADDR_LEN; ijk++)       \
1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      *(p)++ = (uint8_t)a[BD_ADDR_LEN - 1 - ijk]; \
1146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define LAP_TO_STREAM(p, a)                   \
1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                           \
1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                         \
1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < LAP_LEN; ijk++)       \
1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      *(p)++ = (uint8_t)a[LAP_LEN - 1 - ijk]; \
1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define DEVCLASS_TO_STREAM(p, a)                    \
1226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                 \
1236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                               \
1246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++)       \
1256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      *(p)++ = (uint8_t)a[DEV_CLASS_LEN - 1 - ijk]; \
1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define ARRAY_TO_STREAM(p, a, len)                            \
1286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                           \
1296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                         \
1306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < len; ijk++) *(p)++ = (uint8_t)a[ijk]; \
1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define REVERSE_ARRAY_TO_STREAM(p, a, len)                              \
1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                                     \
1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                                   \
1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < len; ijk++) *(p)++ = (uint8_t)a[len - 1 - ijk]; \
1366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_UINT8(u8, p) \
1396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                            \
1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u8 = (uint8_t)(*(p));      \
1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 1;                  \
1426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_UINT16(u16, p)                                \
1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                             \
1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); \
1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 2;                                                   \
1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_UINT24(u32, p)                                    \
1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                                 \
1506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u32 = (((uint32_t)(*(p))) + ((((uint32_t)(*((p) + 1)))) << 8) + \
1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi           ((((uint32_t)(*((p) + 2)))) << 16));                     \
1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 3;                                                       \
1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_UINT32(u32, p)                                    \
1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                                 \
1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u32 = (((uint32_t)(*(p))) + ((((uint32_t)(*((p) + 1)))) << 8) + \
1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi           ((((uint32_t)(*((p) + 2)))) << 16) +                     \
1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi           ((((uint32_t)(*((p) + 3)))) << 24));                     \
1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 4;                                                       \
1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_BDADDR(a, p)                              \
1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                         \
1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                       \
1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* pbda = (uint8_t*)a + BD_ADDR_LEN - 1; \
1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *pbda-- = *p++; \
1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_ARRAY32(a, p)                   \
1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                               \
1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                             \
1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* _pa = (uint8_t*)a + 31;     \
1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < 32; ijk++) *_pa-- = *p++; \
1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_ARRAY16(a, p)                   \
1746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                               \
1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                             \
1766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* _pa = (uint8_t*)a + 15;     \
1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < 16; ijk++) *_pa-- = *p++; \
1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_ARRAY8(a, p)                   \
1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                              \
1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                            \
1826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* _pa = (uint8_t*)a + 7;     \
1836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < 8; ijk++) *_pa-- = *p++; \
1846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_DEVCLASS(a, p)                             \
1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                          \
1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                        \
1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* _pa = (uint8_t*)a + DEV_CLASS_LEN - 1; \
1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++) *_pa-- = *p++; \
1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_LAP(a, p)                             \
1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                     \
1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                   \
1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* plap = (uint8_t*)a + LAP_LEN - 1; \
1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < LAP_LEN; ijk++) *plap-- = *p++; \
1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define STREAM_TO_ARRAY(a, p, len)                             \
1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                            \
1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                          \
2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < len; ijk++) ((uint8_t*)a)[ijk] = *p++; \
2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define REVERSE_STREAM_TO_ARRAY(a, p, len)         \
2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                \
2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                              \
2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register uint8_t* _pa = (uint8_t*)a + len - 1; \
2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < len; ijk++) *_pa-- = *p++; \
2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Macros to get and put bytes to and from a field (Little Endian format).
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** These are the same as to stream, except the pointer is not incremented.
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT32_TO_FIELD(p, u32)                    \
2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                \
2166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(uint8_t*)(p) = (uint8_t)(u32);               \
2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 1) = (uint8_t)((u32) >> 8);  \
2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 2) = (uint8_t)((u32) >> 16); \
2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 3) = (uint8_t)((u32) >> 24); \
2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT24_TO_FIELD(p, u24)                    \
2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                \
2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(uint8_t*)(p) = (uint8_t)(u24);               \
2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 1) = (uint8_t)((u24) >> 8);  \
2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 2) = (uint8_t)((u24) >> 16); \
2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT16_TO_FIELD(p, u16)                   \
2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                               \
2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(uint8_t*)(p) = (uint8_t)(u16);              \
2306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 1) = (uint8_t)((u16) >> 8); \
2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT8_TO_FIELD(p, u8) \
2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  { *(uint8_t*)(p) = (uint8_t)(u8); }
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Macros to get and put bytes to and from a stream (Big Endian format)
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT32_TO_BE_STREAM(p, u32)  \
2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                  \
2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u32) >> 24); \
2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u32) >> 16); \
2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u32) >> 8);  \
2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)(u32);         \
2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT24_TO_BE_STREAM(p, u24)  \
2476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                  \
2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u24) >> 16); \
2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u24) >> 8);  \
2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)(u24);         \
2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT16_TO_BE_STREAM(p, u16) \
2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                 \
2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)((u16) >> 8); \
2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(p)++ = (uint8_t)(u16);        \
2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT8_TO_BE_STREAM(p, u8) \
2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  { *(p)++ = (uint8_t)(u8); }
2596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define ARRAY_TO_BE_STREAM(p, a, len)                         \
2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                           \
2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                         \
2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < len; ijk++) *(p)++ = (uint8_t)a[ijk]; \
2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define BE_STREAM_TO_UINT8(u8, p) \
2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                               \
2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u8 = (uint8_t)(*(p));         \
2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 1;                     \
2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define BE_STREAM_TO_UINT16(u16, p)                                     \
2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                                     \
2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u16 = (uint16_t)(((uint16_t)(*(p)) << 8) + (uint16_t)(*((p) + 1))); \
2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 2;                                                           \
2746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define BE_STREAM_TO_UINT24(u32, p)                                   \
2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                                   \
2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u32 = (((uint32_t)(*((p) + 2))) + ((uint32_t)(*((p) + 1)) << 8) + \
2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi           ((uint32_t)(*(p)) << 16));                                 \
2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 3;                                                         \
2806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define BE_STREAM_TO_UINT32(u32, p)                                    \
2826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                                    \
2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    u32 = ((uint32_t)(*((p) + 3)) + ((uint32_t)(*((p) + 2)) << 8) +    \
2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi           ((uint32_t)(*((p) + 1)) << 16) + ((uint32_t)(*(p)) << 24)); \
2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (p) += 4;                                                          \
2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define BE_STREAM_TO_ARRAY(p, a, len)                          \
2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                            \
2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    register int ijk;                                          \
2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    for (ijk = 0; ijk < len; ijk++) ((uint8_t*)a)[ijk] = *p++; \
2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Macros to get and put bytes to and from a field (Big Endian format).
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** These are the same as to stream, except the pointer is not incremented.
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT32_TO_BE_FIELD(p, u32)                 \
2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                \
3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(uint8_t*)(p) = (uint8_t)((u32) >> 24);       \
3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 1) = (uint8_t)((u32) >> 16); \
3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 2) = (uint8_t)((u32) >> 8);  \
3036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 3) = (uint8_t)(u32);         \
3046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
3056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT24_TO_BE_FIELD(p, u24)                \
3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                               \
3076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(uint8_t*)(p) = (uint8_t)((u24) >> 16);      \
3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 1) = (uint8_t)((u24) >> 8); \
3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 2) = (uint8_t)(u24);        \
3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
3116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT16_TO_BE_FIELD(p, u16)          \
3126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                         \
3136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *(uint8_t*)(p) = (uint8_t)((u16) >> 8); \
3146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    *((uint8_t*)(p) + 1) = (uint8_t)(u16);  \
3156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
3166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define UINT8_TO_BE_FIELD(p, u8) \
3176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  { *(uint8_t*)(p) = (uint8_t)(u8); }
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Define trace levels
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
32346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* No trace messages to be generated    */
32446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define BT_TRACE_LEVEL_NONE 0
32546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Error condition trace messages       */
32646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define BT_TRACE_LEVEL_ERROR 1
32746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Warning condition trace messages     */
32846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define BT_TRACE_LEVEL_WARNING 2
32946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* API traces                           */
33046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define BT_TRACE_LEVEL_API 3
33146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Debug messages for events            */
33246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define BT_TRACE_LEVEL_EVENT 4
33346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Full debug messages                  */
33446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define BT_TRACE_LEVEL_DEBUG 5
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_CTRL_GENERAL 0x00000000
3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_LAYER_NCI 0x00280000
3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_LAYER_HAL 0x00310000
3396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_LAYER_GKI 0x001a0000
3406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_ORG_STACK 0x00000000
3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_ORG_GKI 0x00000400
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_TYPE_ERROR 0x00000000
3446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_TYPE_WARNING 0x00000001
3456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_TYPE_API 0x00000002
3466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_TYPE_EVENT 0x00000003
3476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_TYPE_DEBUG 0x00000004
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TRACE_TYPE_GENERIC 0x00000008
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_TYPES_H */
352