BLF_DLL/APP/blf.h

185 lines
7.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file blf.h
* @brief Заголовочный файл библиотеки для создания BLF-файлов (экспортная версия).
*/
#ifndef BLF_H
#define BLF_H
#include <stdint.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
/* -------------------------------------------------------------------------
* Экспорт символов для разделяемой библиотеки
* ------------------------------------------------------------------------- */
#if defined(_WIN32) || defined(_WIN64)
#ifdef BLF_BUILD_DLL
#define BLF_API __declspec(dllexport)
#else
#define BLF_API __declspec(dllimport)
#endif
#else
#ifdef BLF_BUILD_DLL
#define BLF_API __attribute__((visibility("default")))
#else
#define BLF_API
#endif
#endif
/* -------------------------------------------------------------------------
* Константы формата BLF
* ------------------------------------------------------------------------- */
#define BL_FILE_SIGNATURE 0x47474F4Cu /* "LOGG" */
#define BL_OBJ_SIGNATURE 0x4A424F4Cu /* "LOBJ" */
#define BL_OBJ_TYPE_CAN_MESSAGE 1
#define BL_OBJ_TYPE_LIN_MESSAGE 11
#define BL_OBJ_TYPE_LIN_SND_ERROR 15
#define BL_OBJ_TYPE_LOG_CONTAINER 10
#define BL_OBJ_TYPE_ENV_DATA 9
#define BL_OBJ_FLAG_TIME_ONE_NANS 0x00000002
/* Флаги CAN-сообщения */
#define CAN_MSG_FLAGS(dir, rtr) \
((uint8_t)(((uint8_t)(rtr & 0x01) << 7) | ((uint8_t)(dir & 0x0F))))
#define CAN_DIR_TX 1
#define CAN_DIR_RX 0
/* Направления LIN */
#define LIN_DIR_RX 0
#define LIN_DIR_TX 1
/* -------------------------------------------------------------------------
* Структура времени (SYSTEMTIME) такая же, как в оригинале
* ------------------------------------------------------------------------- */
typedef struct {
uint16_t year;
uint16_t month;
uint16_t dayOfWeek;
uint16_t day;
uint16_t hour;
uint16_t minute;
uint16_t second;
uint16_t milliseconds;
} SYSTEMTIME;
/* -------------------------------------------------------------------------
* API библиотеки
* ------------------------------------------------------------------------- */
/**
* @brief Открывает (создаёт) BLF-файл.
* @param filename Имя файла.
* @param startTime Время начала измерения (может быть NULL будет использовано текущее системное время).
* @return Указатель на контекст (handle) или NULL в случае ошибки.
*/
BLF_API void* blf_open(const char* filename, const SYSTEMTIME* startTime);
/**
* @brief Устанавливает время начала измерения (если не было задано при открытии).
* @param handle Указатель на контекст.
* @param startTime Время начала.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_set_start_time(void* handle, const SYSTEMTIME* startTime);
/**
* @brief Начинает новый контейнер (объект LOG_CONTAINER).
* @param handle Указатель на контекст.
* @param timestamp Временная метка контейнера в наносекундах.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_start_container(void* handle, uint64_t timestamp);
/**
* @brief Завершает текущий контейнер.
* @param handle Указатель на контекст.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_end_container(void* handle);
/**
* @brief Добавляет CAN-сообщение.
* @param handle Указатель на контекст.
* @param channel Номер канала.
* @param id Идентификатор.
* @param flags Флаги (направление, RTR).
* @param dlc Длина данных (0-8).
* @param data Указатель на данные (если NULL, заполняет нулями).
* @param timestamp Временная метка в наносекундах.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_add_can_message(void* handle,
uint16_t channel,
uint32_t id,
uint8_t flags,
uint8_t dlc,
const uint8_t* data,
uint64_t timestamp);
/**
* @brief Добавляет LIN-сообщение (устаревший тип).
* @param handle Указатель на контекст.
* @param channel Номер канала.
* @param id Идентификатор (6 бит).
* @param dlc Длина данных.
* @param data Указатель на данные.
* @param dir Направление (LIN_DIR_RX / LIN_DIR_TX).
* @param timestamp Временная метка в наносекундах.
* @param checksum Контрольная сумма.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_add_lin_message_obsolete(void* handle,
uint16_t channel,
uint8_t id,
uint8_t dlc,
const uint8_t* data,
uint8_t dir,
uint64_t timestamp,
uint16_t checksum);
/**
* @brief Добавляет событие отсутствия ответа LIN.
* @param handle Указатель на контекст.
* @param channel Номер канала.
* @param id Идентификатор.
* @param dlc Ожидаемая длина данных.
* @param timestamp Временная метка в наносекундах.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_add_lin_send_error(void* handle,
uint16_t channel,
uint8_t id,
uint8_t dlc,
uint64_t timestamp);
/**
* @brief Добавляет данные окружения (ENV_DATA).
* @param handle Указатель на контекст.
* @param name Имя переменной (строка).
* @param data Указатель на данные.
* @param data_len Длина данных в байтах.
* @param timestamp Временная метка в наносекундах.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_add_env_data(void* handle,
const char* name,
const uint8_t* data,
uint32_t data_len,
uint64_t timestamp);
/**
* @brief Закрывает BLF-файл, обновляет заголовок и освобождает память контекста.
* @param handle Указатель на контекст.
* @return 0 при успехе, -1 при ошибке.
*/
BLF_API int blf_close(void* handle);
#ifdef __cplusplus
}
#endif
#endif /* BLF_H */