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