mirror of
https://github.com/jam422470459/EPD-nRF52-hema213.git
synced 2025-12-15 21:08:12 +08:00
230 lines
8.4 KiB
C
230 lines
8.4 KiB
C
/**
|
|
* Copyright (c) 2016 - 2017, Nordic Semiconductor ASA
|
|
*
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
|
* such product, must reproduce the above copyright notice, this list of
|
|
* conditions and the following disclaimer in the documentation and/or other
|
|
* materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
|
* contributors may be used to endorse or promote products derived from this
|
|
* software without specific prior written permission.
|
|
*
|
|
* 4. This software, with or without modification, must only be used with a
|
|
* Nordic Semiconductor ASA integrated circuit.
|
|
*
|
|
* 5. Any software provided in binary form under this license must not be reverse
|
|
* engineered, decompiled, modified and/or disassembled.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*/
|
|
#ifndef NRF_LOG_CTRL_H
|
|
#define NRF_LOG_CTRL_H
|
|
|
|
/**@file
|
|
* @addtogroup nrf_log Logger module
|
|
* @ingroup app_common
|
|
*
|
|
* @defgroup nrf_log_ctrl Functions for controlling nrf_log
|
|
* @{
|
|
* @ingroup nrf_log
|
|
* @brief The nrf_log control interface.
|
|
*/
|
|
|
|
#include "sdk_config.h"
|
|
#include "sdk_errors.h"
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include "nrf_log_ctrl_internal.h"
|
|
/**
|
|
* @brief Timestamp function prototype.
|
|
*
|
|
* @return Timestamp value.
|
|
*/
|
|
typedef uint32_t (*nrf_log_timestamp_func_t)(void);
|
|
|
|
/**@brief Macro for initializing the logs.
|
|
*
|
|
* @note If timestamps are disabled in the configuration, then the provided pointer
|
|
* can be NULL. Otherwise, it is expected that timestamp_getter is not NULL.
|
|
*
|
|
* @param timestamp_func Function that returns the timestamp.
|
|
*
|
|
* @return NRF_SUCCESS after successful initialization, otherwise an error code.
|
|
*/
|
|
#define NRF_LOG_INIT(timestamp_func) NRF_LOG_INTERNAL_INIT(timestamp_func)
|
|
|
|
|
|
/**@brief Macro for processing a single log entry from a queue of deferred logs.
|
|
*
|
|
* You can call this macro from the main context or from the error handler to process
|
|
* log entries one by one.
|
|
*
|
|
* @note If logs are not deferred, this call has no use and is defined as 'false'.
|
|
*
|
|
* @retval true There are more logs to process in the buffer.
|
|
* @retval false No more logs in the buffer.
|
|
*/
|
|
#define NRF_LOG_PROCESS() NRF_LOG_INTERNAL_PROCESS()
|
|
|
|
/** @brief Macro for processing all log entries from the buffer.
|
|
* It blocks until all buffered entries are processed by the backend.
|
|
*
|
|
* @note If logs are not deferred, this call has no use and is empty.
|
|
*/
|
|
#define NRF_LOG_FLUSH() NRF_LOG_INTERNAL_FLUSH()
|
|
|
|
/** @brief Macro for flushing log data before reset.
|
|
*
|
|
* @note If logs are not deferred, this call has no use and is empty.
|
|
*
|
|
* @note If RTT is used, then a breakpoint is hit once flushed.
|
|
*/
|
|
#define NRF_LOG_FINAL_FLUSH() NRF_LOG_INTERNAL_FINAL_FLUSH()
|
|
|
|
/** @brief Macro for changing functions that are used to handle log entries.
|
|
*
|
|
* @param default_handler Function for handling log entries.
|
|
* @param bytes_handler Function for handling hexdump entries.
|
|
*
|
|
*/
|
|
#define NRF_LOG_HANDLERS_SET(default_handler, bytes_handler) \
|
|
NRF_LOG_INTERNAL_HANDLERS_SET(default_handler, bytes_handler)
|
|
|
|
/**
|
|
* @brief Function prototype for handling a log entry.
|
|
*
|
|
* The backend must implement such prototype.
|
|
*
|
|
* @param severity_level Severity level of the entry.
|
|
* @param p_timestamp Pointer to the timestamp value. No timestamp if NULL.
|
|
* @param p_str Pointer to a formatted string.
|
|
* @param p_args Pointer to an array of arguments for a formatted string.
|
|
* @param nargs Number of arguments in p_args.
|
|
*
|
|
* @retval true If entry is successfully processed.
|
|
* @retval false If entry is not processed.
|
|
*/
|
|
typedef bool (*nrf_log_std_handler_t)(
|
|
uint8_t severity_level,
|
|
const uint32_t * const p_timestamp,
|
|
const char * const p_str,
|
|
uint32_t * p_args,
|
|
uint32_t nargs);
|
|
|
|
/**
|
|
* @brief Function prototype for handling a bytes-dumping log entry.
|
|
*
|
|
* The backend must implement such prototype. Two buffers are needed because data
|
|
* is stored internally in a circular buffer so it can be fragmented into up to
|
|
* two pieces.
|
|
*
|
|
* @param severity_level Severity level of the entry.
|
|
* @param p_timestamp Pointer to a timestamp value. No timestamp if NULL.
|
|
* @param p_str Prefix string for the bytes dump.
|
|
* @param offset Indication of how many bytes have already been processed.
|
|
* @param p_buf0 Pointer to the first part of data.
|
|
* @param buf0_length Number of bytes in the first part.
|
|
* @param p_buf1 Pointer to the second part of data. Optional.
|
|
* @param buf1_length Number of bytes in the second part.
|
|
*
|
|
* @return Number of bytes processed. If all bytes are processed, it should be a sum of
|
|
* buf0_length and buf1_length
|
|
*/
|
|
typedef uint32_t (*nrf_log_hexdump_handler_t)(
|
|
uint8_t severity_level,
|
|
const uint32_t * const p_timestamp,
|
|
const char * const p_str,
|
|
uint32_t offset,
|
|
const uint8_t * const p_buf0,
|
|
uint32_t buf0_length,
|
|
const uint8_t * const p_buf1,
|
|
uint32_t buf1_length);
|
|
|
|
|
|
/**
|
|
* @brief Function for initializing the frontend and the default backend.
|
|
*
|
|
* @ref NRF_LOG_INIT calls this function to initialize the frontend and the backend.
|
|
* If custom backend is used, then @ref NRF_LOG_INIT should not be called.
|
|
* Instead, frontend and user backend should be verbosely initialized.
|
|
*
|
|
* @param timestamp_func Function for getting a 32-bit timestamp.
|
|
*
|
|
* @return Error status.
|
|
*
|
|
*/
|
|
ret_code_t nrf_log_init(nrf_log_timestamp_func_t timestamp_func);
|
|
|
|
/**
|
|
* @brief Function for reinitializing the backend in blocking mode.
|
|
*/
|
|
ret_code_t nrf_log_blocking_backend_set(void);
|
|
|
|
/**
|
|
* @brief Function for initializing the logger frontend.
|
|
*
|
|
* The frontend is initialized with functions for handling log entries. Those
|
|
* functions are provided by the backend.
|
|
*
|
|
* @note This function needs to be called directly only if the @ref NRF_LOG_INIT macro
|
|
* is not used to initialize the logger.
|
|
*
|
|
* @param std_handler Function for handling standard log entries.
|
|
* @param hexdump_handler Function for handling hexdump log entries.
|
|
* @param timestamp_func Function for getting a timestamp. It cannot be NULL
|
|
* unless timestamping is disabled.
|
|
*/
|
|
void nrf_log_frontend_init(nrf_log_std_handler_t std_handler,
|
|
nrf_log_hexdump_handler_t hexdump_handler,
|
|
nrf_log_timestamp_func_t timestamp_func);
|
|
|
|
/**
|
|
* @brief Function for updating functions that handle log entries.
|
|
*
|
|
* @note Use this feature to change the log handling behavior in certain
|
|
* situations, like in a fault handler.
|
|
*
|
|
* @param std_handler Function for handling standard log entries.
|
|
* @param hexdump_handler Function for handling hexdump log entries.
|
|
*/
|
|
void nrf_log_handlers_set(nrf_log_std_handler_t std_handler,
|
|
nrf_log_hexdump_handler_t hexdump_handler);
|
|
|
|
/**
|
|
* @brief Function for handling a single log entry.
|
|
*
|
|
* Use this function only if the logs are buffered. It takes a single entry from the
|
|
* buffer and attempts to process it.
|
|
*
|
|
* @retval true If there are more entries to process.
|
|
* @retval false If there are no more entries to process.
|
|
*/
|
|
bool nrf_log_frontend_dequeue(void);
|
|
|
|
|
|
#endif // NRF_LOG_CTRL_H
|
|
|
|
/**
|
|
*@}
|
|
**/
|