mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-28 07:43:34 +08:00
Refactored POSIX tools
This commit is contained in:
+24
-19
@@ -1,11 +1,17 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
|
||||
*/
|
||||
/****************************************************************************
|
||||
*
|
||||
* Copyright (c) 2015 PX4 Development Team. All rights reserved.
|
||||
* Author: Pavel Kirienko <pavel.kirienko@gmail.com>
|
||||
* David Sidrane <david_s5@usa.net>
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
#ifndef UAVCAN_POSIX_DYNAMIC_NODE_ID_SERVER_FILE_EVENT_TRACER_HPP_INCLUDED
|
||||
#define UAVCAN_POSIX_DYNAMIC_NODE_ID_SERVER_FILE_EVENT_TRACER_HPP_INCLUDED
|
||||
|
||||
#include <uavcan/protocol/dynamic_node_id_server/event.hpp>
|
||||
#include <time.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
namespace uavcan_posix
|
||||
{
|
||||
@@ -19,9 +25,7 @@ class FileEventTracer : public uavcan::dynamic_node_id_server::IEventTracer
|
||||
/**
|
||||
* Maximum length of full path to log file
|
||||
*/
|
||||
|
||||
enum { MaxPathLength = 128, FormatBufferLength = 64 };
|
||||
|
||||
enum { MaxPathLength = 128 };
|
||||
|
||||
/**
|
||||
* This type is used for the path
|
||||
@@ -29,32 +33,32 @@ class FileEventTracer : public uavcan::dynamic_node_id_server::IEventTracer
|
||||
typedef uavcan::Array<uavcan::IntegerSpec<8, uavcan::SignednessUnsigned, uavcan::CastModeTruncate>,
|
||||
uavcan::ArrayModeDynamic, MaxPathLength> PathString;
|
||||
|
||||
|
||||
PathString path_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
FileEventTracer() { }
|
||||
|
||||
virtual void onEvent(uavcan::dynamic_node_id_server::TraceCode code, uavcan::int64_t argument)
|
||||
{
|
||||
using namespace std;
|
||||
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
|
||||
int fd = open(path_.c_str(), O_WRONLY | O_CREAT | O_APPEND);
|
||||
if (fd >= 0 )
|
||||
{
|
||||
const int FormatBufferLength = 64;
|
||||
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, "%d.%ld,%d,%lld\n", ts.tv_sec, ts.tv_nsec, code, argument);
|
||||
write(fd, buffer, n);
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Initializes the File based event trace
|
||||
*
|
||||
*/
|
||||
|
||||
public:
|
||||
FileEventTracer() { }
|
||||
|
||||
/**
|
||||
* Initializes the file based event tracer.
|
||||
*/
|
||||
int init(const PathString & path)
|
||||
{
|
||||
using namespace std;
|
||||
@@ -73,8 +77,9 @@ public:
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif // Include guard
|
||||
+16
-24
@@ -6,15 +6,16 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
#ifndef UAVCAN_POSIX_DYNAMIC_NODE_ID_SERVER_FILE_STORAGE_BACKEND_HPP_INCLUDED
|
||||
#define UAVCAN_POSIX_DYNAMIC_NODE_ID_SERVER_FILE_STORAGE_BACKEND_HPP_INCLUDED
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <cstdio>
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
#include <cfcntl>
|
||||
#include <cstring>
|
||||
#include <cerrno>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <uavcan/protocol/dynamic_node_id_server/storage_backend.hpp>
|
||||
|
||||
@@ -30,24 +31,16 @@ class FileStorageBackend : public uavcan::dynamic_node_id_server::IStorageBacken
|
||||
/**
|
||||
* Maximum length of full path including / and key max
|
||||
*/
|
||||
|
||||
enum { MaxPathLength = 128 };
|
||||
|
||||
|
||||
/**
|
||||
* This type is used for the path
|
||||
*/
|
||||
typedef uavcan::Array<uavcan::IntegerSpec<8, uavcan::SignednessUnsigned, uavcan::CastModeTruncate>,
|
||||
uavcan::ArrayModeDynamic, MaxPathLength> PathString;
|
||||
|
||||
|
||||
PathString base_path;
|
||||
|
||||
public:
|
||||
|
||||
FileStorageBackend() { }
|
||||
|
||||
|
||||
virtual String get(const String& key) const
|
||||
{
|
||||
using namespace std;
|
||||
@@ -75,7 +68,6 @@ public:
|
||||
}
|
||||
}
|
||||
return value;
|
||||
|
||||
}
|
||||
|
||||
virtual void set(const String& key, const String& value)
|
||||
@@ -91,16 +83,17 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the File based back end storage by passing to a path to
|
||||
* the directory where the key named files will be stored.
|
||||
* This the return result should be 0 on success.
|
||||
* If it is -ErrInvalidConfiguration then the the path name is too long to
|
||||
* Accommodate the trailing slash and max key length;
|
||||
*
|
||||
*/
|
||||
public:
|
||||
FileStorageBackend() { }
|
||||
|
||||
int init(const PathString & path)
|
||||
/**
|
||||
* Initializes the file based backend storage by passing a path to
|
||||
* the directory where the key named files will be stored.
|
||||
* The return value should be 0 on success.
|
||||
* If it is -ErrInvalidConfiguration then the the path name is too long to
|
||||
* accommodate the trailing slash and max key length.
|
||||
*/
|
||||
int init(const PathString& path)
|
||||
{
|
||||
using namespace std;
|
||||
|
||||
@@ -108,7 +101,6 @@ public:
|
||||
|
||||
if (path.size() > 0)
|
||||
{
|
||||
|
||||
base_path = path.c_str();
|
||||
|
||||
if (base_path.back() == '/')
|
||||
@@ -132,10 +124,10 @@ public:
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif // Include guard
|
||||
Reference in New Issue
Block a user