mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-05-23 07:47:35 +08:00
Fixed and improved file event tracer + POSIX test
This commit is contained in:
@@ -25,6 +25,8 @@ if (TARGET uavcan)
|
||||
set(UAVCAN_LIB uavcan)
|
||||
include_directories(${libuavcan_SOURCE_DIR}/include
|
||||
${libuavcan_SOURCE_DIR}/include/dsdlc_generated)
|
||||
message(STATUS "POSIX source dir: ${libuavcan_posix_SOURCE_DIR}")
|
||||
include_directories(${libuavcan_posix_SOURCE_DIR}/include)
|
||||
else ()
|
||||
message(STATUS "Using installed uavcan library")
|
||||
find_library(UAVCAN_LIB uavcan REQUIRED)
|
||||
@@ -55,6 +57,9 @@ target_link_libraries(test_time_sync ${UAVCAN_LIB} rt ${CMAKE_THREAD_LIBS_INIT})
|
||||
add_executable(test_system_utils apps/test_system_utils.cpp)
|
||||
target_link_libraries(test_system_utils ${UAVCAN_LIB} rt ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
add_executable(test_posix apps/test_posix.cpp)
|
||||
target_link_libraries(test_posix ${UAVCAN_LIB} rt ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
#
|
||||
# Tools
|
||||
#
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
|
||||
*/
|
||||
|
||||
#include <uavcan_posix/dynamic_node_id_server/file_event_tracer.hpp>
|
||||
#include <uavcan_posix/dynamic_node_id_server/file_storage_backend.hpp>
|
||||
#include <uavcan_linux/uavcan_linux.hpp>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include "debug.hpp"
|
||||
|
||||
int main(int argc, const char** argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
try
|
||||
{
|
||||
ENFORCE(0 == std::system("mkdir -p /tmp/uavcan_posix/dynamic_node_id_server"));
|
||||
|
||||
/*
|
||||
* Event tracer test
|
||||
*/
|
||||
{
|
||||
using namespace uavcan::dynamic_node_id_server;
|
||||
|
||||
const std::string event_log_file("/tmp/uavcan_posix/dynamic_node_id_server/event.log");
|
||||
|
||||
uavcan_posix::dynamic_node_id_server::FileEventTracer tracer;
|
||||
ENFORCE(0 <= tracer.init(event_log_file.c_str()));
|
||||
|
||||
// Adding a line
|
||||
static_cast<IEventTracer&>(tracer).onEvent(TraceError, 123456);
|
||||
ENFORCE(0 == std::system(("cat " + event_log_file).c_str()));
|
||||
|
||||
// Removing the log file
|
||||
ENFORCE(0 == std::system(("rm -f " + event_log_file).c_str()));
|
||||
|
||||
// Adding another line
|
||||
static_cast<IEventTracer&>(tracer).onEvent(TraceError, 789123);
|
||||
ENFORCE(0 == std::system(("cat " + event_log_file).c_str()));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (const std::exception& ex)
|
||||
{
|
||||
std::cerr << "Exception: " << ex.what() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
|
||||
#
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
project(libuavcan_posix)
|
||||
|
||||
#
|
||||
# Library (header only)
|
||||
#
|
||||
install(DIRECTORY include/uavcan_posix DESTINATION include)
|
||||
+14
-8
@@ -10,8 +10,10 @@
|
||||
#define UAVCAN_POSIX_DYNAMIC_NODE_ID_SERVER_FILE_EVENT_TRACER_HPP_INCLUDED
|
||||
|
||||
#include <uavcan/protocol/dynamic_node_id_server/event.hpp>
|
||||
#include <cstdio>
|
||||
#include <time.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
namespace uavcan_posix
|
||||
{
|
||||
@@ -27,6 +29,8 @@ class FileEventTracer : public uavcan::dynamic_node_id_server::IEventTracer
|
||||
*/
|
||||
enum { MaxPathLength = 128 };
|
||||
|
||||
enum { FilePermissions = 438 }; ///< 0o666
|
||||
|
||||
/**
|
||||
* This type is used for the path
|
||||
*/
|
||||
@@ -39,15 +43,17 @@ class FileEventTracer : public uavcan::dynamic_node_id_server::IEventTracer
|
||||
{
|
||||
using namespace std;
|
||||
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
timespec ts = timespec(); // If clock_gettime() fails, zero time will be used
|
||||
(void)clock_gettime(CLOCK_REALTIME, &ts);
|
||||
|
||||
int fd = open(path_.c_str(), O_WRONLY | O_CREAT | O_APPEND);
|
||||
if (fd >= 0 )
|
||||
int fd = open(path_.c_str(), O_WRONLY | O_CREAT | O_APPEND, FilePermissions);
|
||||
if (fd >= 0)
|
||||
{
|
||||
const int FormatBufferLength = 64;
|
||||
const int FormatBufferLength = 63;
|
||||
char buffer[FormatBufferLength + 1];
|
||||
int n = snprintf(buffer, FormatBufferLength, "%d.%ld,%d,%lld\n", ts.tv_sec, ts.tv_nsec, code, argument);
|
||||
int n = snprintf(buffer, FormatBufferLength, "%ld.%06ld\t%d\t%lld\n",
|
||||
static_cast<long>(ts.tv_sec), static_cast<long>(ts.tv_nsec / 1000L),
|
||||
static_cast<int>(code), static_cast<long long>(argument));
|
||||
write(fd, buffer, n);
|
||||
close(fd);
|
||||
}
|
||||
@@ -69,8 +75,8 @@ public:
|
||||
{
|
||||
rv = 0;
|
||||
path_ = path.c_str();
|
||||
int fd = open(path_.c_str(), O_RDWR | O_CREAT | O_TRUNC);
|
||||
if ( fd >= 0)
|
||||
int fd = open(path_.c_str(), O_RDWR | O_CREAT | O_TRUNC, FilePermissions);
|
||||
if (fd >= 0)
|
||||
{
|
||||
close(fd);
|
||||
}
|
||||
|
||||
+1
@@ -15,6 +15,7 @@
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <cerrno>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <uavcan/protocol/dynamic_node_id_server/storage_backend.hpp>
|
||||
|
||||
Reference in New Issue
Block a user