mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-05-17 14:07:34 +08:00
VA args now supported by MAVLink text messages
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* Copyright (C) 2012 PX4 Development Team. All rights reserved.
|
||||
* Copyright (c) 2012, 2013 PX4 Development Team. All rights reserved.
|
||||
* Author: Lorenz Meier <lm@inf.ethz.ch>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -47,27 +47,42 @@
|
||||
*/
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
/*
|
||||
/**
|
||||
* The mavlink log device node; must be opened before messages
|
||||
* can be logged.
|
||||
*/
|
||||
#define MAVLINK_LOG_DEVICE "/dev/mavlink"
|
||||
/**
|
||||
* The maximum string length supported.
|
||||
*/
|
||||
#define MAVLINK_LOG_MAXLEN 50
|
||||
|
||||
#define MAVLINK_IOC_SEND_TEXT_INFO _IOC(0x1100, 1)
|
||||
#define MAVLINK_IOC_SEND_TEXT_CRITICAL _IOC(0x1100, 2)
|
||||
#define MAVLINK_IOC_SEND_TEXT_EMERGENCY _IOC(0x1100, 3)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
__EXPORT void mavlink_vasprintf(int _fd, int severity, const char *fmt, ...);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The va_args implementation here is not beautiful, but obviously we run into the same issues
|
||||
* the GCC devs saw, and are using their solution:
|
||||
*
|
||||
* http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* Send a mavlink emergency message.
|
||||
*
|
||||
* @param _fd A file descriptor returned from open(MAVLINK_LOG_DEVICE, 0);
|
||||
* @param _text The text to log;
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
#define mavlink_log_emergency(_fd, _text) ::ioctl(_fd, MAVLINK_IOC_SEND_TEXT_EMERGENCY, (unsigned long)_text);
|
||||
#else
|
||||
#define mavlink_log_emergency(_fd, _text) ioctl(_fd, MAVLINK_IOC_SEND_TEXT_EMERGENCY, (unsigned long)_text);
|
||||
#endif
|
||||
#define mavlink_log_emergency(_fd, _text, ...) mavlink_vasprintf(_fd, MAVLINK_IOC_SEND_TEXT_EMERGENCY, _text, ##__VA_ARGS__);
|
||||
|
||||
/**
|
||||
* Send a mavlink critical message.
|
||||
@@ -75,11 +90,7 @@
|
||||
* @param _fd A file descriptor returned from open(MAVLINK_LOG_DEVICE, 0);
|
||||
* @param _text The text to log;
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
#define mavlink_log_critical(_fd, _text) ::ioctl(_fd, MAVLINK_IOC_SEND_TEXT_CRITICAL, (unsigned long)_text);
|
||||
#else
|
||||
#define mavlink_log_critical(_fd, _text) ioctl(_fd, MAVLINK_IOC_SEND_TEXT_CRITICAL, (unsigned long)_text);
|
||||
#endif
|
||||
#define mavlink_log_critical(_fd, _text, ...) mavlink_vasprintf(_fd, MAVLINK_IOC_SEND_TEXT_CRITICAL, _text, ##__VA_ARGS__);
|
||||
|
||||
/**
|
||||
* Send a mavlink info message.
|
||||
@@ -87,14 +98,10 @@
|
||||
* @param _fd A file descriptor returned from open(MAVLINK_LOG_DEVICE, 0);
|
||||
* @param _text The text to log;
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
#define mavlink_log_info(_fd, _text) ::ioctl(_fd, MAVLINK_IOC_SEND_TEXT_INFO, (unsigned long)_text);
|
||||
#else
|
||||
#define mavlink_log_info(_fd, _text) ioctl(_fd, MAVLINK_IOC_SEND_TEXT_INFO, (unsigned long)_text);
|
||||
#endif
|
||||
#define mavlink_log_info(_fd, _text, ...) mavlink_vasprintf(_fd, MAVLINK_IOC_SEND_TEXT_INFO, _text, ##__VA_ARGS__);
|
||||
|
||||
struct mavlink_logmessage {
|
||||
char text[51];
|
||||
char text[MAVLINK_LOG_MAXLEN + 1];
|
||||
unsigned char severity;
|
||||
};
|
||||
|
||||
@@ -116,5 +123,7 @@ void mavlink_logbuffer_write(struct mavlink_logbuffer *lb, const struct mavlink_
|
||||
|
||||
int mavlink_logbuffer_read(struct mavlink_logbuffer *lb, struct mavlink_logmessage *elem);
|
||||
|
||||
void mavlink_logbuffer_vasprintf(struct mavlink_logbuffer *lb, int severity, const char *fmt, ...);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user