zephyr/include/logging/event_logger.h
Kumar Gala cc334c7273 Convert remaining code to using newly introduced integer sized types
Convert code to use u{8,16,32,64}_t and s{8,16,32,64}_t instead of C99
integer types.  This handles the remaining includes and kernel, plus
touching up various points that we skipped because of include
dependancies.  We also convert the PRI printf formatters in the arch
code over to normal formatters.

Jira: ZEP-2051

Change-Id: Iecbb12601a3ee4ea936fd7ddea37788a645b08b0
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2017-04-21 11:38:23 -05:00

164 lines
5.3 KiB
C

/*
* Copyright (c) 2015 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Event logger support.
*/
#ifndef __EVENT_LOGGER_H__
#define __EVENT_LOGGER_H__
#ifdef __cplusplus
extern "C" {
#endif
#define EVENT_HEADER_SIZE 1
#ifndef _ASMLANGUAGE
#include <kernel.h>
#include <errno.h>
#include <misc/ring_buffer.h>
struct event_logger {
struct k_sem sync_sema;
struct ring_buf ring_buf;
};
/**
* @brief Event Logger
* @defgroup event_logger Event Logger
* @{
*/
/**
* @brief Initialize the event logger.
*
* @details This routine initializes the ring buffer.
*
* @param logger Logger to be initialized.
* @param logger_buffer Pointer to the buffer to be used by the logger.
* @param buffer_size Size of the buffer in 32-bit words.
*
* @return N/A
*/
void sys_event_logger_init(struct event_logger *logger,
u32_t *logger_buffer, u32_t buffer_size);
/**
* @brief Send an event message to the logger.
*
* @details This routine adds an event message to the ring buffer and signals
* the sync semaphore to indicate that event messages are available.
*
* @param logger Pointer to the event logger used.
* @param event_id The profiler event's ID.
* @param event_data Pointer to the data of the message.
* @param data_size Size of the buffer in 32-bit words.
*
* @return N/A
*/
void sys_event_logger_put(struct event_logger *logger, u16_t event_id,
u32_t *event_data, u8_t data_size);
/**
* @brief Retrieve an event message from the logger.
*
* @details This routine retrieves an event message from the ring buffer and
* copies it to the provided buffer. If the provided buffer is smaller
* than the message size the function returns -EMSGSIZE. Otherwise, it returns
* the number of 32-bit words copied. The function retrieves messages in
* FIFO order. If there is no message in the buffer the function returns
* immediately. It can only be called from a fiber.
*
* @param logger Pointer to the event logger used.
* @param event_id Pointer to the id of the fetched event.
* @param dropped_event_count Pointer to the number of events dropped.
* @param buffer Pointer to the buffer for the copied message.
* @param buffer_size Size of the buffer in 32-bit words. Updated with the
* actual message's size.
*
* @retval EMSGSIZE If the buffer size is smaller than the message size.
* @retval Number of 32-bit words copied.
* @retval 0 If no message was already available.
*/
int sys_event_logger_get(struct event_logger *logger, u16_t *event_id,
u8_t *dropped_event_count, u32_t *buffer,
u8_t *buffer_size);
/**
* @brief Retrieve an event message from the logger, wait if empty.
*
* @details This routine retrieves an event message from the ring buffer
* and copies it to the provided buffer. If the provided buffer is smaller
* than the message size the function returns -EMSGSIZE. Otherwise, it
* returns the number of 32-bit words copied.
*
* The function retrieves messages in FIFO order. The caller pends if there is
* no message available in the buffer. It can only be called from a fiber.
*
* @param logger Pointer to the event logger used.
* @param event_id Pointer to the ID of the fetched event.
* @param dropped_event_count Pointer to the number of dropped events.
* @param buffer Pointer to the buffer for the copied messages.
* @param buffer_size Size of the buffer in 32-bit words. Updated with the
* actual message's size.
*
* @retval EMSGSIZE If the buffer size is smaller than the message size.
* @retval Number of DWORDs copied, otherwise.
*/
int sys_event_logger_get_wait(struct event_logger *logger, u16_t *event_id,
u8_t *dropped_event_count, u32_t *buffer,
u8_t *buffer_size);
#ifdef CONFIG_SYS_CLOCK_EXISTS
/**
* @brief Retrieve an event message from the logger, wait with a timeout if
* empty.
*
* @details This routine retrieves an event message from the ring buffer and
* copies it to the provided buffer. If the provided buffer is smaller than
* the message size the routine returns -EMSGSIZE. Otherwise, it returns the
* number of dwords copied. The function retrieves messages in FIFO order.
* If no message is available in the buffer, the caller pends until a
* new message is added or the timeout expires. This routine can only be
* called from a fiber.
*
* @param logger Pointer to the event logger used.
* @param event_id Pointer to the ID of the event fetched.
* @param dropped_event_count Pointer to the number of dropped events.
* @param buffer Pointer to the buffer for the copied message.
* @param buffer_size Size of the buffer in 32-bit words. Updated with the
* actual message size.
* @param timeout Timeout in ticks.
*
* @retval EMSGSIZE if the buffer size is smaller than the message size.
* @retval Number of 32-bit words copied.
* @retval 0 If the timeout expired and there was no message already
* available.
*/
int sys_event_logger_get_wait_timeout(struct event_logger *logger,
u16_t *event_id,
u8_t *dropped_event_count,
u32_t *buffer, u8_t *buffer_size,
u32_t timeout);
/**
* @}
*/
#endif /* CONFIG_SYS_CLOCK_EXISTS */
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __EVENT_LOGGER_H__ */