/** * @file blf.h * @brief Заголовочный файл библиотеки для создания BLF-файлов (экспортная версия). */ #ifndef BLF_H #define BLF_H #include #include #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 */