Bluetooth LE Profile API document
Bluetooth LE Profile API document Rev.1.00 [May 22, 2020]

Utility Macros from Profile Common Library. More...

Detailed Description

Utility Macros from Profile Common Library.

Packing Macros and Unpacking Macros for Little Endian and MIN/MAX Macro are defined.
By default both the packing and unpaking macros uses pointer to a single or multi-octet variable which to be packed to or unpacked from a buffer (unsinged character array).

Macros

#define BT_PACK_LE_1_BYTE(dst, src)
 
#define BT_PACK_LE_1_BYTE_VAL(dst, src)   *((uint8_t *)(dst) + 0) = (src);
 
#define BT_PACK_LE_2_BYTE(dst, src)
 
#define BT_PACK_LE_2_BYTE_VAL(dst, src)
 
#define BT_PACK_LE_3_BYTE(dst, src)
 
#define BT_PACK_LE_3_BYTE_VAL(dst, src)
 
#define BT_PACK_LE_4_BYTE(dst, src)
 
#define BT_PACK_LE_4_BYTE_VAL(dst, src)
 
#define BT_PACK_LE_8_BYTE(dst, val)   memcpy ((dst), (val), 8)
 
#define BT_PACK_LE_16_BYTE(dst, val)   memcpy ((dst), (val), 16)
 
#define BT_PACK_LE_N_BYTE(dst, val, n)   memcpy ((dst), (val), (n))
 
#define BT_UNPACK_LE_1_BYTE(dst, src)   *((uint8_t *)(dst)) = (uint8_t)(*((uint8_t *)(src)));
 
#define BT_UNPACK_LE_2_BYTE(dst, src)
 
#define BT_UNPACK_LE_3_BYTE(dst, src)
 
#define BT_UNPACK_LE_4_BYTE(dst, src)
 
#define BT_UNPACK_LE_8_BYTE(dst, src)   memcpy ((dst), (src), 8)
 
#define BT_UNPACK_LE_16_BYTE(dst, src)   memcpy ((dst), (src), 16)
 
#define BT_UNPACK_LE_N_BYTE(dst, src, n)   memcpy ((dst), (src), (n))
 
#define MAX(x, y)   (((x) > (y)) ? (x) : (y))
 
#define MIN(x, y)   (((x) < (y)) ? (x) : (y))
 

Macro Definition Documentation

◆ BT_PACK_LE_1_BYTE

#define BT_PACK_LE_1_BYTE (   dst,
  src 
)
Value:
{ \
uint8_t val; \
val = (uint8_t)(*(src)); \
BT_PACK_LE_1_BYTE_VAL((dst), val); \
}

Little Endian Packing Macros for 1 byte (uint8_t for source).

◆ BT_PACK_LE_1_BYTE_VAL

#define BT_PACK_LE_1_BYTE_VAL (   dst,
  src 
)    *((uint8_t *)(dst) + 0) = (src);

Little Endian Packing Macros for 1 byte (uint8_t[1] for source).

◆ BT_PACK_LE_2_BYTE

#define BT_PACK_LE_2_BYTE (   dst,
  src 
)
Value:
{ \
uint16_t val; \
val = (uint16_t)(*(src)); \
BT_PACK_LE_2_BYTE_VAL((dst), val); \
}

Little Endian Packing Macros for 2 byte (uint16_t for source).

◆ BT_PACK_LE_2_BYTE_VAL

#define BT_PACK_LE_2_BYTE_VAL (   dst,
  src 
)
Value:
*((uint8_t *)(dst) + 0) = (uint8_t)(src); \
*((uint8_t *)(dst) + 1) = (uint8_t)((src) >> 8);

Little Endian Packing Macros for 2 byte (uint8_t[2] for source).

◆ BT_PACK_LE_3_BYTE

#define BT_PACK_LE_3_BYTE (   dst,
  src 
)
Value:
{ \
uint32_t val; \
val = (uint32_t)(*(src)); \
BT_PACK_LE_3_BYTE_VAL((dst), val); \
}

Little Endian Packing Macros for 3 byte (uint32_t for source)..

◆ BT_PACK_LE_3_BYTE_VAL

#define BT_PACK_LE_3_BYTE_VAL (   dst,
  src 
)
Value:
*((uint8_t *)(dst) + 0) = (uint8_t)(src);\
*((uint8_t *)(dst) + 1) = (uint8_t)((src) >> 8);\
*((uint8_t *)(dst) + 2) = (uint8_t)((src) >> 16);

Little Endian Packing Macros for 3 byte (uint8_t[3] for source).

◆ BT_PACK_LE_4_BYTE

#define BT_PACK_LE_4_BYTE (   dst,
  src 
)
Value:
{ \
uint32_t val; \
val = (uint32_t)(*(src)); \
BT_PACK_LE_4_BYTE_VAL((dst), val); \
}

Little Endian Packing Macros for 4 byte (uint32_t for source).

◆ BT_PACK_LE_4_BYTE_VAL

#define BT_PACK_LE_4_BYTE_VAL (   dst,
  src 
)
Value:
*((uint8_t *)(dst) + 0) = (uint8_t)(src);\
*((uint8_t *)(dst) + 1) = (uint8_t)((src) >> 8);\
*((uint8_t *)(dst) + 2) = (uint8_t)((src) >> 16);\
*((uint8_t *)(dst) + 3) = (uint8_t)((src) >> 24);

Little Endian Packing Macros for 1 byte (uint8_t[4] for source).

◆ BT_PACK_LE_8_BYTE

#define BT_PACK_LE_8_BYTE (   dst,
  val 
)    memcpy ((dst), (val), 8)

Little Endian Packing Macros for 8 byte.

◆ BT_PACK_LE_16_BYTE

#define BT_PACK_LE_16_BYTE (   dst,
  val 
)    memcpy ((dst), (val), 16)

Little Endian Packing Macros for 16 byte.

◆ BT_PACK_LE_N_BYTE

#define BT_PACK_LE_N_BYTE (   dst,
  val,
 
)    memcpy ((dst), (val), (n))

Little Endian Packing Macros for variable length.

◆ BT_UNPACK_LE_1_BYTE

#define BT_UNPACK_LE_1_BYTE (   dst,
  src 
)    *((uint8_t *)(dst)) = (uint8_t)(*((uint8_t *)(src)));

Little Endian Unpacking Macros for 1 byte.

◆ BT_UNPACK_LE_2_BYTE

#define BT_UNPACK_LE_2_BYTE (   dst,
  src 
)
Value:
*((uint16_t *)(dst)) = (uint16_t)( \
(((uint16_t)(*((src) + 0))) << 0) | \
(((uint16_t)(*((src) + 1))) << 8) \
);

Little Endian Unpacking Macros for 2 byte.

◆ BT_UNPACK_LE_3_BYTE

#define BT_UNPACK_LE_3_BYTE (   dst,
  src 
)
Value:
*((uint32_t *)(dst)) = (uint32_t)( \
(((uint32_t)(*((src) + 0))) << 0) | \
(((uint32_t)(*((src) + 1))) << 8) | \
(((uint32_t)(*((src) + 2))) << 16) \
);

Little Endian Unpacking Macros for 3 byte.

◆ BT_UNPACK_LE_4_BYTE

#define BT_UNPACK_LE_4_BYTE (   dst,
  src 
)
Value:
*((uint32_t *)(dst)) = (uint32_t)( \
(((uint32_t)(*((src) + 0))) << 0) | \
(((uint32_t)(*((src) + 1))) << 8) | \
(((uint32_t)(*((src) + 2))) << 16) | \
(((uint32_t)(*((src) + 3))) << 24) \
);

Little Endian Unpacking Macros for 4 byte.

◆ BT_UNPACK_LE_8_BYTE

#define BT_UNPACK_LE_8_BYTE (   dst,
  src 
)    memcpy ((dst), (src), 8)

Little Endian Unpacking Macros for 8 byte.

◆ BT_UNPACK_LE_16_BYTE

#define BT_UNPACK_LE_16_BYTE (   dst,
  src 
)    memcpy ((dst), (src), 16)

Little Endian Unpacking Macros for 16 byte.

◆ BT_UNPACK_LE_N_BYTE

#define BT_UNPACK_LE_N_BYTE (   dst,
  src,
 
)    memcpy ((dst), (src), (n))

Little Endian Unpacking Macros for variable length.

◆ MAX

#define MAX (   x,
 
)    (((x) > (y)) ? (x) : (y))

Defines which value is bigger.

◆ MIN

#define MIN (   x,
 
)    (((x) < (y)) ? (x) : (y))

Defines which value is smaller.