/******************************************************************************
 *
 *  Copyright 2014 The Android Open Source Project
 *  Copyright 2002 - 2004 Open Interface North America, Inc. All rights
 *                        reserved.
 *
 *  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 _OI_BT_SPEC_H
#define _OI_BT_SPEC_H
/**
 * @file
 *
 * This file contains common definitions from the Bluetooth specification.
 *
 */

/*******************************************************************************
  $Revision: #1 $
 ******************************************************************************/

#include "oi_stddefs.h"

/** \addtogroup Misc Miscellaneous APIs */
/**@{*/

#ifdef __cplusplus
extern "C" {
#endif

/** The maximum number of active peripherals in a piconet. */
#define OI_BT_MAX_ACTIVE_PERIPHERALS 7

/**
 * @name Data types for working with UUIDs
 * UUIDs are 16 bytes (128 bits).
 *
 * To avoid having to pass around 128-bit values all the time, 32-bit and 16-bit
 * UUIDs are defined, along with a mapping from the shorter versions to the full
 * version.
 *
 * @{
 */

/**
 * 16-bit representation of a 128-bit UUID
 */
typedef uint16_t OI_UUID16;

/**
 * 32-bit representation of a 128-bit UUID
 */
typedef uint32_t OI_UUID32;

/**
 * number of bytes in a 128 bit UUID
 */
#define OI_BT_UUID128_SIZE 16

/**
 * number of bytes in IPv6 style addresses
 */
#define OI_BT_IPV6ADDR_SIZE 16

/**
 * type definition for a 128-bit UUID
 *
 * To simplify conversion between 128-bit UUIDs and 16-bit and 32-bit UUIDs,
 * the most significant 32 bits are stored with the same endian-ness as is
 * native on the target (local) device. The remainder of the 128-bit UUID is
 * stored as bytes in big-endian order.
 */
typedef struct {
  /* most significant 32 bits of 128-bit UUID */
  uint32_t ms32bits;
  /* remainder of 128-bit UUID, array of 8-bit values */
  uint8_t base[OI_BT_UUID128_SIZE - sizeof(uint32_t)];
} OI_UUID128;

/** @} */

/** number of bytes in a link key */
#define OI_BT_LINK_KEY_SIZE 16

/**
 * type definition for a baseband link key
 *
 * Because 128-bit integers may not be supported on all platforms, we define
 * link keys as an array of bytes. Unlike the Bluetooth device address,
 * the link key is stored in little-endian order, meaning that
 *  - array[0]  contains bits 0  - 7,
 *  - array[1]  contains bits 8  - 15,
 *  - array[2]  contains bits 16 - 23,
 *  - array[3]  contains bits 24 - 31,
 *  - array[4]  contains bits 32 - 39,
 *  - array[5]  contains bits 40 - 47,
 *  - array[6]  contains bits 48 - 55,
 *  - array[7]  contains bits 56 - 63,
 *  - array[8]  contains bits 64 - 71,
 *  - array[9]  contains bits 72 - 79,
 *  - array[10] contains bits 80 - 87,
 *  - array[11] contains bits 88 - 95,
 *  - array[12] contains bits 96 - 103,
 *  - array[13] contains bits 104- 111,
 *  - array[14] contains bits 112- 119, and
 *  - array[15] contains bits 120- 127.
 */
typedef struct {
  /* link key represented as an array of 8-bit values */
  uint8_t key[OI_BT_LINK_KEY_SIZE];
} OI_LINK_KEY;

/** Out-of-band data size - C and R values are 16-bytes each */
#define OI_BT_OOB_NUM_BYTES 16

typedef struct {
  /* same struct used for C and R values */
  uint8_t value[OI_BT_OOB_NUM_BYTES];
} OI_OOB_DATA;

/**
 * link key types
 */
typedef enum {
  OI_LINK_KEY_TYPE_COMBO = 0,           /* combination key */
  OI_LINK_KEY_TYPE_LOCAL_UNIT = 1,      /* local unit key */
  OI_LINK_KEY_TYPE_REMOTE_UNIT = 2,     /* remote unit key */
  OI_LINK_KEY_TYPE_DEBUG_COMBO = 3,     /* debug combination key */
  OI_LINK_KEY_TYPE_UNAUTHENTICATED = 4, /* Unauthenticated */
  OI_LINK_KEY_TYPE_AUTHENTICATED = 5,   /* Authenticated */
  OI_LINK_KEY_TYPE_CHANGED_COMBO = 6    /* Changed */

} OI_BT_LINK_KEY_TYPE;

/* Number of bytes allocated for a PIN (personal indentification number) */
#define OI_BT_PIN_CODE_SIZE 16

/* data type for a PIN (PINs are treated as strings.) */
typedef struct {
  /* PIN represented as an array of 8-bit values */
  uint8_t pin[OI_BT_PIN_CODE_SIZE];
} OI_PIN_CODE;

/* maximum number of SCO connections per device: 3 as of version 2.0+EDR
    of the Bluetooth specification (see sec 4.3 of vol 2 part B) */
#define OI_BT_MAX_SCO_CONNECTIONS 3

/** data type for clock offset */
typedef uint16_t OI_BT_CLOCK_OFFSET;

/** data type for a LM handle */
typedef uint16_t OI_HCI_LM_HANDLE;

/** opaque data type for a SCO or ACL connection handle */
typedef struct _OI_HCI_CONNECTION* OI_HCI_CONNECTION_HANDLE;

/** data type for HCI Error Code, as defined in oi_hcispec.h */
typedef uint8_t OI_HCI_ERROR_CODE;

/**
 * The Bluetooth device type is indicated by a 24-bit bitfield, represented as a
 * 32-bit number in the stack. The bit layout and values for device class are
 * specified in the file oi_bt_assigned_nos.h and in the Bluetooth "Assigned
 * Numbers" specification at http://www.bluetooth.org/assigned-numbers/.
 */
typedef uint32_t OI_BT_DEVICE_CLASS;
/* Bits 0-1 contain format type. */
#define OI_BT_DEV_CLASS_FORMAT_MASK 0x000003
/* Bits 2-7 contain minor device class value. */
#define OI_BT_DEV_CLASS_MINOR_DEVICE_MASK 0x0000FC
/* Bits 8-12 contain major device class value. */
#define OI_BT_DEV_CLASS_MAJOR_DEVICE_MASK 0x001F00
/* Bits 13-23 contain major service class value. */
#define OI_BT_DEV_CLASS_MAJOR_SERVICE_MASK 0xFFE000

/** There is currently only one device class format defined, type 00. */
#define OI_BT_DEV_CLASS_FORMAT_TYPE 00

/* Bit 13 in device class indicates limited discoverability mode (GAP v2.0+EDR,
 * section 4.1.2.2)
 */
#define OI_BT_DEV_CLASS_LIMITED_DISCO_BIT BIT13

/** macro to test validity of the Device Class Format */
#define OI_BT_VALID_DEVICE_CLASS_FORMAT(class) \
  (OI_BT_DEV_CLASS_FORMAT_TYPE == ((class) & OI_BT_DEV_CLASS_FORMAT_MASK))

/* the time between baseband clock ticks, currently 625 microseconds (one slot)
 */
#define OI_BT_TICK 625
/* some macros to convert to/from baseband clock ticks - no floating point! */
#define OI_SECONDS_TO_BT_TICKS(secs) ((secs)*1600)
#define OI_BT_TICKS_TO_SECONDS(ticks) ((ticks) / 1600)
#define OI_MSECS_TO_BT_TICKS(msecs) (((msecs)*8) / 5)
#define OI_BT_TICKS_TO_MSECS(ticks) (((ticks)*5) / 8)

/** EIR byte order */
#define OI_EIR_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER

#ifdef __cplusplus
}
#endif

/**@}*/

/*****************************************************************************/
#endif /* _OI_BT_SPEC_H */
