text: /***************************************************************************//**
   * @file
   * @brief Data store and fetch routines.
   * See @ref byte-utilities for documentation.
   *******************************************************************************
   * # License
   * <b>Copyright 2018 Silicon Laboratories Inc. www.silabs.com</b>
   *******************************************************************************
   *
   * The licensor of this software is Silicon Laboratories Inc. Your use of this
   * software is governed by the terms of Silicon Labs Master Software License
   * Agreement (MSLA) available at
   * www.silabs.com/about-us/legal/master-software-license-agreement. This
   * software is distributed to you in Source Code format and is governed by the
   * sections of the MSLA applicable to Source Code.
   *
   ******************************************************************************/
  
  #ifndef SILABS_BYTE_UTILITIES_H
  #define SILABS_BYTE_UTILITIES_H
  
  /**
   * @addtogroup stack_info
   *
   * See byte-utilities.h for source code.
   * @{
   */
  
  /** @brief This function copies an array of bytes and reverses the order
   *  before writing the data to the destination.
   *
   * @param dest A pointer to the location where the data will be copied to.
   * @param src A pointer to the location where the data will be copied from.
   * @param length The length (in bytes) of the data to be copied.
   */
  void emberReverseMemCopy(uint8_t* dest, const uint8_t* src, uint8_t length);
  
  /** @brief Returns the value built from the two \c uint8_t values
   *  \c contents[0] and \c contents[1]. \c contents[0] is the low byte.
   */
  uint16_t emberFetchLowHighInt16u(const uint8_t *contents);
  
  /** @brief Returns the value built from the two \c uint8_t values
   *  \c contents[0] and \c contents[1]. \c contents[0] is the high byte.
   */
  uint16_t emberFetchHighLowInt16u(const uint8_t *contents);
  
  /** @brief Stores \c value in \c contents[0] and \c contents[1]. \c
   *  contents[0] is the low byte.
   */
  void emberStoreLowHighInt16u(uint8_t *contents, uint16_t value);
  
  /** @brief Stores \c value in \c contents[0] and \c contents[1]. \c
   *  contents[0] is the high byte.
   */
  void emberStoreHighLowInt16u(uint8_t *contents, uint16_t value);
  
  #if !defined DOXYGEN_SHOULD_SKIP_THIS
  uint32_t emFetchInt32u(bool lowHigh, const uint8_t* contents);
  #endif
  
  /** @brief Returns the value built from the four \c uint8_t values
   *  \c contents[0], \c contents[1], \c contents[2] and \c contents[3]. \c
   *  contents[0] is the low byte.
   */
  #if defined DOXYGEN_SHOULD_SKIP_THIS
  uint32_t emberFetchLowHighInt32u(const uint8_t *contents);
  #else
  #define emberFetchLowHighInt32u(contents) \
    (emFetchInt32u(true, contents))
  #endif
  
  /** @description Returns the value built from the four \c uint8_t values
   *  \c contents[0], \c contents[1], \c contents[2] and \c contents[3]. \c
   *  contents[3] is the low byte.
   */
  #if defined DOXYGEN_SHOULD_SKIP_THIS
  uint32_t emberFetchHighLowInt32u(const uint8_t *contents);
  #else
  #define emberFetchHighLowInt32u(contents) \
    (emFetchInt32u(false, contents))
  #endif
  
  #if !defined DOXYGEN_SHOULD_SKIP_THIS
  void emStoreInt32u(bool lowHigh, uint8_t* contents, uint32_t value);
  #endif
  
  /** @brief Stores \c value in \c contents[0], \c contents[1], \c
   *  contents[2] and \c contents[3]. \c contents[0] is the low byte.
   */
  #if defined DOXYGEN_SHOULD_SKIP_THIS
  void emberStoreLowHighInt32u(uint8_t *contents, uint32_t value);
  #else
  #define emberStoreLowHighInt32u(contents, value) \
    (emStoreInt32u(true, contents, value))
  #endif
  
  /** @description Stores \c value in \c contents[0], \c contents[1], \c
   *  contents[2] and \c contents[3]. \c contents[3] is the low byte.
   */
  #if defined DOXYGEN_SHOULD_SKIP_THIS
  void emberStoreHighLowInt32u(uint8_t *contents, uint32_t value);
  #else
  #define emberStoreHighLowInt32u(contents, value) \
    (emStoreInt32u(false, contents, value))
  #endif
  
  /** @} END addtogroup */
  
  #endif // SILABS_BYTE_UTILITIES_H
  