1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

revert whitespace changes

This commit is contained in:
Steffen Vogel 2018-06-29 08:37:14 +02:00
parent 02464fc10c
commit 312cdc2fbe
39 changed files with 369 additions and 369 deletions

View file

@ -24,8 +24,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
#pragma once
#ifdef __cplusplus
@ -63,7 +61,6 @@ extern "C"{
#define KERNEL_VERSION_MAJ 3
#define KERNEL_VERSION_MIN 6
#ifdef __cplusplus
}
#endif
#endif

View file

@ -40,4 +40,4 @@ int json_reserve_scan(struct io *io, struct sample *smps[], unsigned cnt);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -60,4 +60,4 @@ int msg_from_sample(struct msg *msg, struct sample *smp);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -30,68 +30,71 @@ extern "C" {
#endif
/** The current version number for the message format */
#define MSG_VERSION 2
#define MSG_VERSION 2
/** @todo Implement more message types */
#define MSG_TYPE_DATA 0 /**< Message contains float / integer values */
#define MSG_TYPE_START 1 /**< Message marks the beginning of a new simulation case */
#define MSG_TYPE_STOP 2 /**< Message marks the end of a simulation case */
#define MSG_TYPE_DATA 0 /**< Message contains float / integer values */
#define MSG_TYPE_START 1 /**< Message marks the beginning of a new simulation case */
#define MSG_TYPE_STOP 2 /**< Message marks the end of a simulation case */
/** The total size in bytes of a message */
#define MSG_LEN(values) (sizeof(struct msg) + MSG_DATA_LEN(values))
#define MSG_LEN(values) (sizeof(struct msg) + MSG_DATA_LEN(values))
/** The length of \p values values in bytes. */
#define MSG_DATA_LEN(values) (sizeof(float) * (values))
#define MSG_DATA_LEN(values) (sizeof(float) * (values))
/** The offset to the first data value in a message. */
#define MSG_DATA_OFFSET(msg) ((char *) (msg) + offsetof(struct msg, data))
#define MSG_DATA_OFFSET(msg) ((char *) (msg) + offsetof(struct msg, data))
/** Initialize a message with default values */
#define MSG_INIT(len, seq) (struct msg) {\
.version = MSG_VERSION, \
.type = MSG_TYPE_DATA, \
.length = len, \
.sequence = seq, \
.version = MSG_VERSION, \
.type = MSG_TYPE_DATA, \
.length = len, \
.sequence = seq, \
}
/** The timestamp of a message in struct timespec format */
#define MSG_TS(msg) (struct timespec) { \
.tv_sec = (msg)->ts.sec, \
.tv_nsec = (msg)->ts.nsec \
#define MSG_TS(msg) (struct timespec) { \
.tv_sec = (msg)->ts.sec, \
.tv_nsec = (msg)->ts.nsec \
}
/** This message format is used by all clients
*
* @diafile msg_format.dia
**/
struct msg {
struct msg
{
#if BYTE_ORDER == BIG_ENDIAN
unsigned version: 4; /**< Specifies the format of the remaining message (see MGS_VERSION) */
unsigned type : 2; /**< Data or control message (see MSG_TYPE_*) */
unsigned rsvd1 : 2; /**< Reserved bits */
unsigned version: 4; /**< Specifies the format of the remaining message (see MGS_VERSION) */
unsigned type : 2; /**< Data or control message (see MSG_TYPE_*) */
unsigned rsvd1 : 2; /**< Reserved bits */
#elif BYTE_ORDER == LITTLE_ENDIAN
unsigned rsvd1 : 2; /**< Reserved bits */
unsigned type : 2; /**< Data or control message (see MSG_TYPE_*) */
unsigned version: 4; /**< Specifies the format of the remaining message (see MGS_VERSION) */
unsigned rsvd1 : 2; /**< Reserved bits */
unsigned type : 2; /**< Data or control message (see MSG_TYPE_*) */
unsigned version: 4; /**< Specifies the format of the remaining message (see MGS_VERSION) */
#else
#error Invalid byte-order
#endif
uint8_t resv2; /**< An id which identifies the source of this sample. */
uint16_t length; /**< The number of values in msg::data[]. */
uint32_t sequence; /**< The sequence number is incremented by one for consecutive messages. */
uint8_t resv2; /**< An id which identifies the source of this sample. */
uint16_t length; /**< The number of values in msg::data[]. */
uint32_t sequence; /**< The sequence number is incremented by one for consecutive messages. */
/** A timestamp per message. */
struct {
uint32_t sec; /**< Seconds since 1970-01-01 00:00:00 */
uint32_t nsec; /**< Nanoseconds of the current second. */
uint32_t sec; /**< Seconds since 1970-01-01 00:00:00 */
uint32_t nsec; /**< Nanoseconds of the current second. */
} ts;
/** The message payload. */
union {
float f; /**< Floating point values. */
uint32_t i; /**< Integer values. */
float f; /**< Floating point values. */
uint32_t i; /**< Integer values. */
} data[];
} __attribute__((packed));
#ifdef __cplusplus
}
#endif
#endif

View file

@ -40,4 +40,4 @@ int protobuf_sscan(struct io *io, char *buf, size_t len, size_t *rbytes, struct
#ifdef __cplusplus
}
#endif
#endif

View file

@ -33,28 +33,28 @@ extern "C" {
struct sample;
enum raw_flags {
RAW_FAKE = (1 << 16), /**< Treat the first three values as: sequenceno, seconds, nanoseconds */
RAW_FAKE = (1 << 16), /**< Treat the first three values as: sequenceno, seconds, nanoseconds */
RAW_BE_INT = (1 << 17), /**< Byte-order for integer data: big-endian if set. */
RAW_BE_FLT = (1 << 18), /**< Byte-order for floating point data: big-endian if set. */
RAW_BE_HDR = (1 << 19), /**< Byte-order for fake header fields: big-endian if set. */
RAW_BE_INT = (1 << 17), /**< Byte-order for integer data: big-endian if set. */
RAW_BE_FLT = (1 << 18), /**< Byte-order for floating point data: big-endian if set. */
RAW_BE_HDR = (1 << 19), /**< Byte-order for fake header fields: big-endian if set. */
/** Byte-order for all fields: big-endian if set. */
RAW_BE = RAW_BE_INT | RAW_BE_FLT | RAW_BE_HDR,
RAW_BE = RAW_BE_INT | RAW_BE_FLT | RAW_BE_HDR,
/** Mix floating and integer types.
*
* io_raw_sscan() parses all values as single / double precission fp.
* io_raw_sprint() uses sample::format to determine the type.
*/
RAW_AUTO = (1 << 22),
RAW_FLT = (1 << 23), /**< Data-type: floating point otherwise integer. */
RAW_AUTO = (1 << 22),
RAW_FLT = (1 << 23), /**< Data-type: floating point otherwise integer. */
//RAW_1 = (0 << 24), /**< Pack each value as a single bit. */
RAW_8 = (3 << 24), /**< Pack each value as a byte. */
RAW_16 = (4 << 24), /**< Pack each value as a word. */
RAW_32 = (5 << 24), /**< Pack each value as a double word. */
RAW_64 = (6 << 24) /**< Pack each value as a quad word. */
RAW_8 = (3 << 24), /**< Pack each value as a byte. */
RAW_16 = (4 << 24), /**< Pack each value as a word. */
RAW_32 = (5 << 24), /**< Pack each value as a double word. */
RAW_64 = (6 << 24) /**< Pack each value as a quad word. */
};
/** Copy / read struct msg's from buffer \p buf to / fram samples \p smps. */
@ -62,6 +62,7 @@ int raw_sprint(struct io *io, char *buf, size_t len, size_t *wbytes, struct samp
/** Read struct sample's from buffer \p buf into samples \p smps. */
int raw_sscan(struct io *io, char *buf, size_t len, size_t *rbytes, struct sample *smps[], unsigned cnt);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -35,12 +35,11 @@ struct msg;
struct io;
enum villas_binary_flags {
VILLAS_BINARY_WEB = (1 << 16) /**< Use webmsg format (everying little endian) */
VILLAS_BINARY_WEB = (1 << 16) /**< Use webmsg format (everying little endian) */
};
/** Copy / read struct msg's from buffer \p buf to / fram samples \p smps. */
int
villas_binary_sprint(struct io *io, char *buf, size_t len, size_t *wbytes, struct sample *smps[], unsigned cnt);
int villas_binary_sprint(struct io *io, char *buf, size_t len, size_t *wbytes, struct sample *smps[], unsigned cnt);
/** Read struct sample's from buffer \p buf into samples \p smps. */
int villas_binary_sscan(struct io *io, char *buf, size_t len, size_t *rbytes, struct sample *smps[], unsigned cnt);

View file

@ -32,39 +32,39 @@
extern "C" {
#endif
#define HIST_HEIGHT (LOG_WIDTH - 55)
#define HIST_SEQ 17
#define HIST_HEIGHT (LOG_WIDTH - 55)
#define HIST_SEQ 17
typedef uintmax_t hist_cnt_t;
/** Histogram structure used to collect statistics. */
struct hist {
double resolution; /**< The distance between two adjacent buckets. */
double resolution; /**< The distance between two adjacent buckets. */
double high; /**< The value of the highest bucket. */
double low; /**< The value of the lowest bucket. */
double high; /**< The value of the highest bucket. */
double low; /**< The value of the lowest bucket. */
double highest; /**< The highest value observed (may be higher than #high). */
double lowest; /**< The lowest value observed (may be lower than #low). */
double last; /**< The last value which has been put into the buckets */
double highest; /**< The highest value observed (may be higher than #high). */
double lowest; /**< The lowest value observed (may be lower than #low). */
double last; /**< The last value which has been put into the buckets */
int length; /**< The number of buckets in #data. */
int length; /**< The number of buckets in #data. */
hist_cnt_t total; /**< Total number of counted values. */
hist_cnt_t warmup; /**< Number of values which are used during warmup phase. */
hist_cnt_t total; /**< Total number of counted values. */
hist_cnt_t warmup; /**< Number of values which are used during warmup phase. */
hist_cnt_t higher; /**< The number of values which are higher than #high. */
hist_cnt_t lower; /**< The number of values which are lower than #low. */
hist_cnt_t higher; /**< The number of values which are higher than #high. */
hist_cnt_t lower; /**< The number of values which are lower than #low. */
hist_cnt_t *data; /**< Pointer to dynamically allocated array of size length. */
hist_cnt_t *data; /**< Pointer to dynamically allocated array of size length. */
double _m[2], _s[2]; /**< Private variables for online variance calculation */
double _m[2], _s[2]; /**< Private variables for online variance calculation */
};
#define hist_last(h) ((h)->last)
#define hist_highest(h) ((h)->highest)
#define hist_lowest(h) ((h)->lowest)
#define hist_total(h) ((h)->total)
#define hist_last(h) ((h)->last)
#define hist_highest(h) ((h)->highest)
#define hist_lowest(h) ((h)->lowest)
#define hist_total(h) ((h)->total)
/** Initialize struct hist with supplied values and allocate memory for buckets. */
int hist_init(struct hist *h, int buckets, hist_cnt_t warmup);
@ -97,7 +97,7 @@ void hist_plot(struct hist *h);
*
* @return The string containing the dump. The caller is responsible to free() the buffer.
*/
char *hist_dump(struct hist *h);
char * hist_dump(struct hist *h);
/** Prints Matlab struct containing all infos to file. */
int hist_dump_matlab(struct hist *h, FILE *f);
@ -106,8 +106,8 @@ int hist_dump_matlab(struct hist *h, FILE *f);
int hist_dump_json(struct hist *h, FILE *f);
/** Build a libjansson / JSON object of the histogram. */
json_t *hist_json(struct hist *h);
json_t * hist_json(struct hist *h);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -48,17 +48,17 @@ struct list;
/** Descriptor for user defined hooks. See hooks[]. */
struct hook {
enum state state;
enum state state;
struct path *path;
struct node *node;
struct path *path;
struct node *node;
struct hook_type *_vt; /**< C++ like Vtable pointer. */
void *_vd; /**< Private data for this hook. This pointer can be used to pass data between consecutive calls of the callback. */
struct hook_type *_vt; /**< C++ like Vtable pointer. */
void *_vd; /**< Private data for this hook. This pointer can be used to pass data between consecutive calls of the callback. */
int priority; /**< A priority to change the order of execution within one type of hook. */
int priority; /**< A priority to change the order of execution within one type of hook. */
json_t *cfg; /**< A JSON object containing the configuration of the hook. */
json_t *cfg; /**< A JSON object containing the configuration of the hook. */
};
int hook_init(struct hook *h, struct hook_type *vt, struct path *p, struct node *n);
@ -103,4 +103,4 @@ int hook_parse_list(struct list *list, json_t *cfg, struct path *p, struct node
#ifdef __cplusplus
}
#endif
#endif

View file

@ -36,16 +36,16 @@ struct sample;
struct format_type;
enum io_flags {
IO_FLUSH = (1 << 8), /**< Flush the output stream after each chunk of samples. */
IO_NONBLOCK = (1 << 9), /**< Dont block io_read() while waiting for new samples. */
IO_NEWLINES = (1 << 10) /**< The samples of this format are newline delimited. */
IO_FLUSH = (1 << 8), /**< Flush the output stream after each chunk of samples. */
IO_NONBLOCK = (1 << 9), /**< Dont block io_read() while waiting for new samples. */
IO_NEWLINES = (1 << 10) /**< The samples of this format are newline delimited. */
};
struct io {
enum state state;
int flags;
char delimiter; /**< Newline delimiter. */
char separator; /**< Column separator (used by csv and villas.human formats only) */
char delimiter; /**< Newline delimiter. */
char separator; /**< Column separator (used by csv and villas.human formats only) */
struct {
/** A format type can use this file handle or overwrite the
@ -110,8 +110,8 @@ int io_stream_fd(struct io *io);
int io_stream_flush(struct io *io);
FILE *io_stream_input(struct io *io);
FILE *io_stream_output(struct io *io);
FILE * io_stream_input(struct io *io);
FILE * io_stream_output(struct io *io);
/** Parse samples from the buffer \p buf with a length of \p len bytes.
*

View file

@ -89,7 +89,7 @@ int kernel_get_page_size();
int kernel_get_hugepage_size();
/** Set SMP affinity of IRQ */
int kernel_irq_setaffinity(unsigned irq, uintmax_t new , uintmax_t *old ) ;
int kernel_irq_setaffinity(unsigned irq, uintmax_t new , uintmax_t *old );
#ifdef __cplusplus
}

View file

@ -6,39 +6,44 @@ extern "C" {
#define SCH_NETEM_ATTR_DIST 0x2000
struct rtnl_netem_corr {
uint32_t nmc_delay;
uint32_t nmc_loss;
uint32_t nmc_duplicate;
struct rtnl_netem_corr
{
uint32_t nmc_delay;
uint32_t nmc_loss;
uint32_t nmc_duplicate;
};
struct rtnl_netem_reo {
uint32_t nmro_probability;
uint32_t nmro_correlation;
struct rtnl_netem_reo
{
uint32_t nmro_probability;
uint32_t nmro_correlation;
};
struct rtnl_netem_crpt {
uint32_t nmcr_probability;
uint32_t nmcr_correlation;
struct rtnl_netem_crpt
{
uint32_t nmcr_probability;
uint32_t nmcr_correlation;
};
struct rtnl_netem_dist {
int16_t *dist_data;
size_t dist_size;
struct rtnl_netem_dist
{
int16_t * dist_data;
size_t dist_size;
};
struct rtnl_netem {
uint32_t qnm_latency;
uint32_t qnm_limit;
uint32_t qnm_loss;
uint32_t qnm_gap;
uint32_t qnm_duplicate;
uint32_t qnm_jitter;
uint32_t qnm_mask;
struct rtnl_netem_corr qnm_corr;
struct rtnl_netem_reo qnm_ro;
struct rtnl_netem_crpt qnm_crpt;
struct rtnl_netem_dist qnm_dist;
struct rtnl_netem
{
uint32_t qnm_latency;
uint32_t qnm_limit;
uint32_t qnm_loss;
uint32_t qnm_gap;
uint32_t qnm_duplicate;
uint32_t qnm_jitter;
uint32_t qnm_mask;
struct rtnl_netem_corr qnm_corr;
struct rtnl_netem_reo qnm_ro;
struct rtnl_netem_crpt qnm_crpt;
struct rtnl_netem_dist qnm_dist;
};
void *rtnl_tc_data(struct rtnl_tc *tc);

View file

@ -42,8 +42,8 @@ struct list;
struct mapping_entry {
struct node *node;
int offset; /**< Offset of this mapping entry within sample::data */
int length; /**< The number of values which is covered by this mapping entry. */
int offset; /**< Offset of this mapping entry within sample::data */
int length; /**< The number of values which is covered by this mapping entry. */
enum {
MAPPING_TYPE_DATA,
@ -88,10 +88,9 @@ struct mapping_entry {
};
};
int
mapping_remap(struct list *m, struct sample *remapped, struct sample *original, struct stats *s);
int mapping_remap(struct list *m, struct sample *remapped, struct sample *original, struct stats *s);
int mapping_update(struct mapping_entry *e, struct sample *remapped, struct sample * new , struct stats *s ) ;
int mapping_update(struct mapping_entry *e, struct sample *remapped, struct sample *new, struct stats *s);
int mapping_parse(struct mapping_entry *e, json_t *cfg, struct list *nodes);

View file

@ -21,16 +21,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
#pragma once
#include <stddef.h>
#include <stdint.h>
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define HUGEPAGESIZE (1 << 21)
#define HUGEPAGESIZE (1 << 21)
struct memtype;
@ -38,10 +38,10 @@ typedef void *(*memzone_allocator_t)(struct memtype *mem, size_t len, size_t ali
typedef int (*memzone_deallocator_t)(struct memtype *mem, void *ptr, size_t len);
enum memtype_flags {
MEMORY_MMAP = (1 << 0),
MEMORY_DMA = (1 << 1),
MEMORY_HUGEPAGE = (1 << 2),
MEMORY_HEAP = (1 << 3)
MEMORY_MMAP = (1 << 0),
MEMORY_DMA = (1 << 1),
MEMORY_HUGEPAGE = (1 << 2),
MEMORY_HEAP = (1 << 3)
};
struct memtype {
@ -86,13 +86,13 @@ int memory_init(int hugepages);
* @retval NULL If allocation failed.
* @retval <>0 If allocation was successful.
*/
void *memory_alloc(struct memtype *m, size_t len);
void * memory_alloc(struct memtype *m, size_t len);
void *memory_alloc_aligned(struct memtype *m, size_t len, size_t alignment);
void * memory_alloc_aligned(struct memtype *m, size_t len, size_t alignment);
int memory_free(struct memtype *m, void *ptr, size_t len);
struct memtype *memtype_managed_init(void *ptr, size_t len);
struct memtype * memtype_managed_init(void *ptr, size_t len);
extern struct memtype memtype_heap;
extern struct memtype memtype_hugepage;

View file

@ -26,7 +26,6 @@
* @{
*/
#pragma once
#include <sys/socket.h>

View file

@ -68,7 +68,7 @@ struct amqp {
};
/** @see node_type::print */
char *amqp_print(struct node *n);
char * amqp_print(struct node *n);
/** @see node_type::parse */
int amqp_parse(struct node *n, json_t *json);

View file

@ -49,23 +49,22 @@ struct comedi_chanspec {
};
struct comedi_direction {
int subdevice; ///< Comedi subdevice
int buffer_size; ///< Comedi's kernel buffer size in kB
int sample_size; ///< Size of a single measurement sample
int sample_rate_hz; ///< Sample rate in Hz
bool present; ///< Config present
bool enabled; ///< Card is started successfully
bool running; ///< Card is actively transfering samples
struct timespec started; ///< Timestamp when sampling started
struct timespec last_debug; ///< Timestamp of last debug output
size_t counter; ///< Number of villas samples transfered
struct comedi_chanspec *chanspecs; ///< Range and maxdata config of channels
unsigned *chanlist; ///< Channel list in comedi's packed format
size_t chanlist_len; ///< Number of channels for this direction
int subdevice; ///< Comedi subdevice
int buffer_size; ///< Comedi's kernel buffer size in kB
int sample_size; ///< Size of a single measurement sample
int sample_rate_hz; ///< Sample rate in Hz
bool present; ///< Config present
bool enabled; ///< Card is started successfully
bool running; ///< Card is actively transfering samples
struct timespec started; ///< Timestamp when sampling started
struct timespec last_debug; ///< Timestamp of last debug output
size_t counter; ///< Number of villas samples transfered
struct comedi_chanspec *chanspecs; ///< Range and maxdata config of channels
unsigned *chanlist; ///< Channel list in comedi's packed format
size_t chanlist_len; ///< Number of channels for this direction
char *buffer;
char *bufptr;
char* buffer;
char* bufptr;
};
struct comedi {
@ -77,16 +76,16 @@ struct comedi {
char *buf;
char *bufptr;
#else
char *map;
size_t bufpos;
size_t front;
size_t back;
char *map;
size_t bufpos;
size_t front;
size_t back;
#endif
};
/** @see node_type::print */
char *comedi_print(struct node *n);
char * comedi_print(struct node *n);
/** @see node_type::parse */
int comedi_parse(struct node *n, json_t *cfg);
@ -103,8 +102,8 @@ int comedi_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int comedi_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -37,19 +37,19 @@
extern "C" {
#endif
#define FILE_MAX_PATHLEN 512
#define FILE_MAX_PATHLEN 512
struct file {
struct io io; /**< Format and file IO */
struct io io; /**< Format and file IO */
struct format_type *format;
char *uri_tmpl; /**< Format string for file name. */
char *uri; /**< Real file name. */
char *mode; /**< File access mode. */
char *uri_tmpl; /**< Format string for file name. */
char *uri; /**< Real file name. */
char *mode; /**< File access mode. */
int flush; /**< Flush / upload file contents after each write. */
struct task task; /**< Timer file descriptor. Blocks until 1 / rate seconds are elapsed. */
double rate; /**< The read rate. */
int flush; /**< Flush / upload file contents after each write. */
struct task task; /**< Timer file descriptor. Blocks until 1 / rate seconds are elapsed. */
double rate; /**< The read rate. */
enum epoch_mode {
FILE_EPOCH_DIRECT,
@ -57,21 +57,21 @@ struct file {
FILE_EPOCH_RELATIVE,
FILE_EPOCH_ABSOLUTE,
FILE_EPOCH_ORIGINAL
} epoch_mode; /**< Specifies how file::offset is calculated. */
} epoch_mode; /**< Specifies how file::offset is calculated. */
enum {
FILE_EOF_EXIT, /**< Terminate when EOF is reached. */
FILE_EOF_REWIND, /**< Rewind the file when EOF is reached. */
FILE_EOF_WAIT /**< Blocking wait when EOF is reached. */
FILE_EOF_EXIT, /**< Terminate when EOF is reached. */
FILE_EOF_REWIND, /**< Rewind the file when EOF is reached. */
FILE_EOF_WAIT /**< Blocking wait when EOF is reached. */
} eof;
struct timespec first; /**< The first timestamp in the file file::{read,write}::uri */
struct timespec epoch; /**< The epoch timestamp from the configuration. */
struct timespec offset; /**< An offset between the timestamp in the input file and the current time */
struct timespec first; /**< The first timestamp in the file file::{read,write}::uri */
struct timespec epoch; /**< The epoch timestamp from the configuration. */
struct timespec offset; /**< An offset between the timestamp in the input file and the current time */
};
/** @see node_type::print */
char *file_print(struct node *n);
char * file_print(struct node *n);
/** @see node_type::parse */
int file_parse(struct node *n, json_t *cfg);
@ -88,7 +88,8 @@ int file_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int file_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -53,7 +53,7 @@ struct influxdb {
};
/** @see node_type::print */
char *influxdb_print(struct node *n);
char * influxdb_print(struct node *n);
/** @see node_type::parse */
int influxdb_parse(struct node *n, json_t *cfg);

View file

@ -51,7 +51,7 @@ struct loopback {
};
/** @see node_type::print */
char *loopback_print(struct node *n);
char * loopback_print(struct node *n);
/** @see node_type::parse */
int loopback_parse(struct node *n, json_t *cfg);

View file

@ -59,7 +59,7 @@ struct nanomsg {
};
/** @see node_type::print */
char *nanomsg_print(struct node *n);
char * nanomsg_print(struct node *n);
/** @see node_type::parse */
int nanomsg_parse(struct node *n, json_t *cfg);

View file

@ -50,22 +50,22 @@ extern "C" {
struct node;
struct ngsi {
const char *endpoint; /**< The NGSI context broker endpoint URL. */
const char *entity_id; /**< The context broker entity id related to this node */
const char *entity_type; /**< The type of the entity */
const char *access_token; /**< An optional authentication token which will be sent as HTTP header. */
const char *endpoint; /**< The NGSI context broker endpoint URL. */
const char *entity_id; /**< The context broker entity id related to this node */
const char *entity_type; /**< The type of the entity */
const char *access_token; /**< An optional authentication token which will be sent as HTTP header. */
double timeout; /**< HTTP timeout in seconds */
double rate; /**< Rate used for polling. */
double timeout; /**< HTTP timeout in seconds */
double rate; /**< Rate used for polling. */
struct task task; /**< Timer for periodic events. */
int ssl_verify; /**< Boolean flag whether SSL server certificates should be verified or not. */
struct task task; /**< Timer for periodic events. */
int ssl_verify; /**< Boolean flag whether SSL server certificates should be verified or not. */
struct curl_slist *headers; /**< List of HTTP request headers for libcurl */
struct curl_slist *headers; /**< List of HTTP request headers for libcurl */
CURL *curl; /**< libcurl: handle */
CURL *curl; /**< libcurl: handle */
struct list mapping; /**< A mapping between indices of the VILLASnode samples and the attributes in ngsi::context */
struct list mapping; /**< A mapping between indices of the VILLASnode samples and the attributes in ngsi::context */
};
/** Initialize global NGSI settings and maps shared memory regions.
@ -84,7 +84,7 @@ int ngsi_deinit();
int ngsi_parse(struct node *n, json_t *cfg);
/** @see node_type::print */
char *ngsi_print(struct node *n);
char * ngsi_print(struct node *n);
/** @see node_type::open */
int ngsi_start(struct node *n);
@ -98,8 +98,8 @@ int ngsi_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int ngsi_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -72,7 +72,7 @@ int opal_deinit();
int opal_parse(struct node *n, json_t *cfg);
/** @see node_type::print */
char *opal_print(struct node *n);
char * opal_print(struct node *n);
/** Print global settings of the OPAL node type. */
int opal_print_global();

View file

@ -44,15 +44,15 @@ extern "C" {
* @see node_type
*/
struct shmem {
const char *out_name; /**< Name of the shm object for the output queue. */
const char *in_name; /**< Name of the shm object for the input queue. */
struct shmem_conf conf; /**< Interface configuration struct. */
char **exec; /**< External program to execute on start. */
struct shmem_int intf; /**< Shmem interface */
const char* out_name; /**< Name of the shm object for the output queue. */
const char* in_name; /**< Name of the shm object for the input queue. */
struct shmem_conf conf; /**< Interface configuration struct. */
char **exec; /**< External program to execute on start. */
struct shmem_int intf; /**< Shmem interface */
};
/** @see node_type::print */
char *shmem_print(struct node *n);
char * shmem_print(struct node *n);
/** @see node_type::parse */
int shmem_parse(struct node *n, json_t *cfg);
@ -69,8 +69,8 @@ int shmem_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int shmem_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -55,29 +55,29 @@ enum signal_generator_type {
* @see node_type
*/
struct signal_generator {
struct task task; /**< Timer for periodic events. */
int rt; /**< Real-time mode? */
struct task task; /**< Timer for periodic events. */
int rt; /**< Real-time mode? */
enum signal_generator_type type; /**< Signal type */
double rate; /**< Sampling rate. */
double frequency; /**< Frequency of the generated signals. */
double amplitude; /**< Amplitude of the generated signals. */
double stddev; /**< Standard deviation of random signals (normal distributed). */
double offset; /**< A constant bias. */
double rate; /**< Sampling rate. */
double frequency; /**< Frequency of the generated signals. */
double amplitude; /**< Amplitude of the generated signals. */
double stddev; /**< Standard deviation of random signals (normal distributed). */
double offset; /**< A constant bias. */
double *last; /**< The values from the previous period which are required for random walk. */
double *last; /**< The values from the previous period which are required for random walk. */
int values; /**< The number of values which will be emitted by this node. */
int limit; /**< The number of values which should be generated by this node. <0 for infinitve. */
int values; /**< The number of values which will be emitted by this node. */
int limit; /**< The number of values which should be generated by this node. <0 for infinitve. */
struct timespec started; /**< Point in time when this node was started. */
int counter; /**< The number of packets already emitted. */
int missed_steps; /**< Total number of missed steps. */
struct timespec started; /**< Point in time when this node was started. */
int counter; /**< The number of packets already emitted. */
int missed_steps; /**< Total number of missed steps. */
};
/** @see node_type::print */
char *signal_generator_print(struct node *n);
char * signal_generator_print(struct node *n);
/** @see node_type::parse */
int signal_generator_parse(struct node *n, json_t *cfg);
@ -93,8 +93,8 @@ int signal_generator_read(struct node *n, struct sample *smps[], unsigned cnt);
enum signal_generator_type signal_generator_lookup_type(const char *type);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -79,29 +79,29 @@ union sockaddr_union {
};
struct socket {
int sd; /**< The socket descriptor */
int mark; /**< Socket mark for netem, routing and filtering */
int verify_source; /**< Verify the source address of incoming packets against socket::remote. */
int sd; /**< The socket descriptor */
int mark; /**< Socket mark for netem, routing and filtering */
int verify_source; /**< Verify the source address of incoming packets against socket::remote. */
enum socket_layer layer; /**< The OSI / IP layer which should be used for this socket */
enum socket_layer layer; /**< The OSI / IP layer which should be used for this socket */
union sockaddr_union local; /**< Local address of the socket */
union sockaddr_union remote; /**< Remote address of the socket */
union sockaddr_union local; /**< Local address of the socket */
union sockaddr_union remote; /**< Remote address of the socket */
struct format_type *format;
struct io io;
/* Multicast options */
struct multicast {
int enabled; /**< Is multicast enabled? */
unsigned char loop; /** Loopback multicast packets to local host? */
unsigned char ttl; /**< The time to live for multicast packets. */
struct ip_mreq mreq; /**< A multicast group to join. */
int enabled; /**< Is multicast enabled? */
unsigned char loop; /** Loopback multicast packets to local host? */
unsigned char ttl; /**< The time to live for multicast packets. */
struct ip_mreq mreq; /**< A multicast group to join. */
} multicast;
#ifdef WITH_NETEM
struct rtnl_qdisc *tc_qdisc; /**< libnl3: Network emulator queuing discipline */
struct rtnl_cls *tc_classifier; /**< libnl3: Firewall mark classifier */
struct rtnl_qdisc *tc_qdisc; /**< libnl3: Network emulator queuing discipline */
struct rtnl_cls *tc_classifier; /**< libnl3: Firewall mark classifier */
#endif /* WITH_NETEM */
};
@ -128,7 +128,7 @@ int socket_read(struct node *n, struct sample *smps[], unsigned cnt);
int socket_parse(struct node *n, json_t *cfg);
/** @see node_type::print */
char *socket_print(struct node *n);
char * socket_print(struct node *n);
/** Generate printable socket address depending on the address family
*
@ -138,7 +138,7 @@ char *socket_print(struct node *n);
* @param sa A pointer to the socket address.
* @return The buffer containing the textual representation of the address. The caller is responsible to free() this buffer!
*/
char *socket_print_addr(struct sockaddr *saddr);
char * socket_print_addr(struct sockaddr *saddr);
/** Parse a socket address depending on the address family
*
@ -158,8 +158,8 @@ int socket_parse_addr(const char *str, struct sockaddr *sa, enum socket_layer la
int socket_compare_addr(struct sockaddr *x, struct sockaddr *y);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -45,29 +45,29 @@ struct sample;
struct test_rtt_case {
double rate;
int values;
int limit; /**< The number of samples we take per test. */
int limit; /**< The number of samples we take per test. */
char *filename;
};
struct test_rtt {
struct task task; /**< The periodic task for test_rtt_read() */
struct io io; /**< The format of the output file */
struct task task; /**< The periodic task for test_rtt_read() */
struct io io; /**< The format of the output file */
struct format_type *format;
double cooldown; /**< Number of seconds to wait beween tests. */
double cooldown; /**< Number of seconds to wait beween tests. */
int current; /**< Index of current test in test_rtt::cases */
int current; /**< Index of current test in test_rtt::cases */
int counter;
struct list cases; /**< List of test cases */
struct list cases; /**< List of test cases */
char *output; /**< The directory where we place the results. */
char *prefix; /**< An optional prefix in the filename. */
char *output; /**< The directory where we place the results. */
char *prefix; /**< An optional prefix in the filename. */
};
/** @see node_type::print */
char *test_rtt_print(struct node *n);
char * test_rtt_print(struct node *n);
/** @see node_type::parse */
int test_rtt_parse(struct node *n, json_t *cfg);
@ -84,8 +84,8 @@ int test_rtt_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int test_rtt_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -42,56 +42,56 @@
extern "C" {
#endif
#define DEFAULT_WEBSOCKET_QUEUELEN (DEFAULT_QUEUELEN * 64)
#define DEFAULT_WEBSOCKET_SAMPLELEN DEFAULT_SAMPLELEN
#define DEFAULT_WEBSOCKET_QUEUELEN (DEFAULT_QUEUELEN * 64)
#define DEFAULT_WEBSOCKET_SAMPLELEN DEFAULT_SAMPLELEN
/* Forward declaration */
struct lws;
/** Internal data per websocket node */
struct websocket {
struct list destinations; /**< List of websocket servers connect to in client mode (struct websocket_destination). */
struct list destinations; /**< List of websocket servers connect to in client mode (struct websocket_destination). */
struct pool pool;
struct queue_signalled queue; /**< For samples which are received from WebSockets */
struct pool pool;
struct queue_signalled queue; /**< For samples which are received from WebSockets */
};
/* Internal datastructures */
struct websocket_connection {
enum websocket_connection_state {
WEBSOCKET_CONNECTION_STATE_DESTROYED,
WEBSOCKET_CONNECTION_STATE_INITIALIZED,
WEBSOCKET_CONNECTION_STATE_CONNECTING,
WEBSOCKET_CONNECTION_STATE_RECONNECTING,
WEBSOCKET_CONNECTION_STATE_ESTABLISHED,
WEBSOCKET_CONNECTION_STATE_SHUTDOWN,
WEBSOCKET_CONNECTION_STATE_ERROR
} state; /**< The current status of this connection. */
enum websocket_connection_state {
WEBSOCKET_CONNECTION_STATE_DESTROYED,
WEBSOCKET_CONNECTION_STATE_INITIALIZED,
WEBSOCKET_CONNECTION_STATE_CONNECTING,
WEBSOCKET_CONNECTION_STATE_RECONNECTING,
WEBSOCKET_CONNECTION_STATE_ESTABLISHED,
WEBSOCKET_CONNECTION_STATE_SHUTDOWN,
WEBSOCKET_CONNECTION_STATE_ERROR
} state; /**< The current status of this connection. */
enum {
WEBSOCKET_MODE_CLIENT,
WEBSOCKET_MODE_SERVER,
} mode;
enum {
WEBSOCKET_MODE_CLIENT,
WEBSOCKET_MODE_SERVER,
} mode;
struct lws *wsi;
struct node *node;
struct io io;
struct queue queue; /**< For samples which are sent to the WebSocket */
struct lws *wsi;
struct node *node;
struct io io;
struct queue queue; /**< For samples which are sent to the WebSocket */
struct format_type *format;
struct websocket_destination *destination;
struct format_type *format;
struct websocket_destination *destination;
struct {
struct buffer recv; /**< A buffer for reconstructing fragmented messags. */
struct buffer send; /**< A buffer for contsructing messages before calling lws_write() */
} buffers;
struct {
struct buffer recv; /**< A buffer for reconstructing fragmented messags. */
struct buffer send; /**< A buffer for contsructing messages before calling lws_write() */
} buffers;
char *_name;
char *_name;
};
struct websocket_destination {
char *uri;
struct lws_client_connect_info info;
char *uri;
struct lws_client_connect_info info;
};
int websocket_protocol_cb(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len);
@ -117,8 +117,8 @@ int websocket_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int websocket_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -40,7 +40,7 @@ extern "C" {
#endif
#if ZMQ_BUILD_DRAFT_API && (ZMQ_VERSION_MAJOR > 4 || (ZMQ_VERSION_MAJOR == 4 && ZMQ_VERSION_MINOR >= 2))
#define ZMQ_BUILD_DISH 1
#define ZMQ_BUILD_DISH 1
#endif
/* Forward declarations */
@ -72,19 +72,19 @@ struct zeromq {
} pattern;
struct {
void *socket; /**< ZeroMQ socket. */
void *socket; /**< ZeroMQ socket. */
void *mon_socket;
char *endpoint;
} subscriber;
struct {
void *socket; /**< ZeroMQ socket. */
void *socket; /**< ZeroMQ socket. */
struct list endpoints;
} publisher;
};
/** @see node_type::print */
char *zeromq_print(struct node *n);
char * zeromq_print(struct node *n);
/** @see node_type::parse */
int zeromq_parse(struct node *n, json_t *cfg);
@ -107,8 +107,8 @@ int zeromq_read(struct node *n, struct sample *smps[], unsigned cnt);
/** @see node_type::write */
int zeromq_write(struct node *n, struct sample *smps[], unsigned cnt);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -56,7 +56,7 @@ struct path_source {
bool masked;
struct pool pool;
struct list mappings; /**< List of mappings (struct mapping_entry). */
struct list mappings; /**< List of mappings (struct mapping_entry). */
};
struct path_destination {
@ -67,15 +67,15 @@ struct path_destination {
/** The register mode determines under which condition the path is triggered. */
enum path_mode {
PATH_MODE_ANY, /**< The path is triggered whenever one of the sources receives samples. */
PATH_MODE_ALL /**< The path is triggered only after all sources have received at least 1 sample. */
PATH_MODE_ANY, /**< The path is triggered whenever one of the sources receives samples. */
PATH_MODE_ALL /**< The path is triggered only after all sources have received at least 1 sample. */
};
/** The datastructure for a path. */
struct path {
enum state state; /**< Path state. */
enum state state; /**< Path state. */
enum path_mode mode; /**< Determines when this path is triggered. */
enum path_mode mode; /**< Determines when this path is triggered. */
struct {
int nfds;
@ -86,27 +86,27 @@ struct path {
struct sample *last_sample;
int last_sequence;
struct list sources; /**< List of all incoming nodes (struct path_source). */
struct list destinations; /**< List of all outgoing nodes (struct path_destination). */
struct list hooks; /**< List of processing hooks (struct hook). */
struct list sources; /**< List of all incoming nodes (struct path_source). */
struct list destinations; /**< List of all outgoing nodes (struct path_destination). */
struct list hooks; /**< List of processing hooks (struct hook). */
struct task timeout;
double rate; /**< A timeout for */
int enabled; /**< Is this path enabled. */
int poll; /**< Weather or not to use poll(2). */
int reverse; /**< This path as a matching reverse path. */
int builtin; /**< This path should use built-in hooks by default. */
int queuelen; /**< The queue length for each path_destination::queue */
int samplelen; /**< Will be calculated based on path::sources.mappings */
double rate; /**< A timeout for */
int enabled; /**< Is this path enabled. */
int poll; /**< Weather or not to use poll(2). */
int reverse; /**< This path as a matching reverse path. */
int builtin; /**< This path should use built-in hooks by default. */
int queuelen; /**< The queue length for each path_destination::queue */
int samplelen; /**< Will be calculated based on path::sources.mappings */
char *_name; /**< Singleton: A string which is used to print this path to screen. */
char *_name; /**< Singleton: A string which is used to print this path to screen. */
struct bitset mask; /**< A mask of path_sources which are enabled for poll(). */
struct bitset received; /**< A mask of path_sources for which we already received samples. */
struct bitset mask; /**< A mask of path_sources which are enabled for poll(). */
struct bitset received; /**< A mask of path_sources for which we already received samples. */
pthread_t tid; /**< The thread id for this path. */
json_t *cfg; /**< A JSON object containing the configuration of the path. */
pthread_t tid; /**< The thread id for this path. */
json_t *cfg; /**< A JSON object containing the configuration of the path. */
};
/** Initialize internal data structures. */
@ -154,7 +154,7 @@ void path_print_stats(struct path *p);
* @param p A pointer to the path structure.
* @return A pointer to a string containing a textual representation of the path.
*/
const char *path_name(struct path *p);
const char * path_name(struct path *p);
/** Reverse a path */
int path_reverse(struct path *p, struct path *r);
@ -172,8 +172,8 @@ int path_uses_node(struct path *p, struct node *n);
*/
int path_parse(struct path *p, json_t *cfg, struct list *nodes);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -38,15 +38,15 @@ extern "C" {
/** A thread-safe memory pool */
struct pool {
off_t buffer_off; /**< Offset from the struct address to the underlying memory area */
off_t buffer_off; /**< Offset from the struct address to the underlying memory area */
struct memtype *mem;
enum state state;
size_t len; /**< Length of the underlying memory area */
size_t len; /**< Length of the underlying memory area */
size_t blocksz; /**< Length of a block in bytes */
size_t alignment; /**< Alignment of a block in bytes */
size_t blocksz; /**< Length of a block in bytes */
size_t alignment; /**< Alignment of a block in bytes */
struct queue queue; /**< The queue which is used to keep track of free blocks */
};
@ -73,23 +73,27 @@ int pool_destroy(struct pool *p);
* This number can be smaller than the requested \p cnt blocks
* in case the pool currently holds less than \p cnt blocks.
*/
INLINE ssize_t pool_get_many(struct pool *p, void *blocks[], size_t cnt) {
INLINE ssize_t pool_get_many(struct pool *p, void *blocks[], size_t cnt)
{
return queue_pull_many(&p->queue, blocks, cnt);
}
/** Push \p cnt values which are giving by the array values to the stack. */
INLINE ssize_t pool_put_many(struct pool *p, void *blocks[], size_t cnt) {
INLINE ssize_t pool_put_many(struct pool *p, void *blocks[], size_t cnt)
{
return queue_push_many(&p->queue, blocks, cnt);
}
/** Get a free memory block from pool. */
INLINE void *pool_get(struct pool *p) {
INLINE void * pool_get(struct pool *p)
{
void *ptr;
return queue_pull(&p->queue, &ptr) == 1 ? ptr : NULL;
}
/** Release a memory block back to the pool. */
INLINE int pool_put(struct pool *p, void *buf) {
INLINE int pool_put(struct pool *p, void *buf)
{
return queue_push(&p->queue, buf);
}

View file

@ -33,9 +33,6 @@
#pragma once
#include <stddef.h>
#include <stdint.h>
#include <unistd.h>
@ -121,4 +118,4 @@ int queue_close(struct queue *q);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -21,8 +21,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
#pragma once
#include "atomic.h"

View file

@ -34,7 +34,7 @@ struct list;
struct node;
struct signal {
char *name; /**< The name of the signal. */
char *name; /**< The name of the signal. */
char *unit;
int enabled;
enum {
@ -53,4 +53,4 @@ int signal_get_offset(const char *str, struct node *n);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -44,19 +44,19 @@ enum stats_format {
};
enum stats_id {
STATS_SKIPPED, /**< Counter for skipped samples due to hooks. */
STATS_TIME, /**< The processing time per sample within VILLAsnode. */
STATS_REORDERED, /**< Counter for reordered samples. */
STATS_GAP_SAMPLE, /**< Histogram for inter sample timestamps (as sent by remote). */
STATS_GAP_RECEIVED, /**< Histogram for inter sample arrival time (as seen by this instance). */
STATS_OWD, /**< Histogram for one-way-delay (OWD) of received samples. */
STATS_COUNT /**< Just here to have an updated number of statistics. */
STATS_SKIPPED, /**< Counter for skipped samples due to hooks. */
STATS_TIME, /**< The processing time per sample within VILLAsnode. */
STATS_REORDERED, /**< Counter for reordered samples. */
STATS_GAP_SAMPLE, /**< Histogram for inter sample timestamps (as sent by remote). */
STATS_GAP_RECEIVED, /**< Histogram for inter sample arrival time (as seen by this instance). */
STATS_OWD, /**< Histogram for one-way-delay (OWD) of received samples. */
STATS_COUNT /**< Just here to have an updated number of statistics. */
};
struct stats_delta {
double values[STATS_COUNT];
int update; /**< Bitmask of stats_id. Only those which are masked will be updated */
int update; /**< Bitmask of stats_id. Only those which are masked will be updated */
};
struct stats {
@ -77,7 +77,7 @@ void stats_collect(struct stats *s, struct sample *smps[], size_t cnt);
int stats_commit(struct stats *s);
json_t *stats_json(struct stats *s);
json_t * stats_json(struct stats *s);
void stats_reset(struct stats *s);
@ -90,8 +90,7 @@ void stats_print(struct stats *s, FILE *f, enum stats_format fmt, int verbose);
enum stats_id stats_lookup_id(const char *name);
#endif /* _STATS_H_ */
#ifdef __cplusplus
}
#endif
#endif /* _STATS_H_ */

View file

@ -35,31 +35,31 @@ extern "C" {
/** Global configuration */
struct super_node {
int priority; /**< Process priority (lower is better) */
int affinity; /**< Process affinity of the server and all created threads */
int hugepages; /**< Number of hugepages to reserve. */
double stats; /**< Interval for path statistics. Set to 0 to disable them. */
int priority; /**< Process priority (lower is better) */
int affinity; /**< Process affinity of the server and all created threads */
int hugepages; /**< Number of hugepages to reserve. */
double stats; /**< Interval for path statistics. Set to 0 to disable them. */
struct list nodes;
struct list paths;
struct list plugins;
struct list nodes;
struct list paths;
struct list plugins;
struct log log;
struct api api;
struct web web;
struct log log;
struct api api;
struct web web;
char *name; /**< A name of this super node. Usually the hostname. */
char *name; /**< A name of this super node. Usually the hostname. */
enum state state;
enum state state;
char *uri; /**< URI of configuration */
char *uri; /**< URI of configuration */
json_t *cfg; /**< JSON representation of the configuration. */
json_t *cfg; /**< JSON representation of the configuration. */
};
/* Compatibility with libconfig < 1.5 */
#if (LIBCONFIG_VER_MAJOR <= 1) && (LIBCONFIG_VER_MINOR < 5)
#define config_setting_lookup config_lookup_from
#define config_setting_lookup config_lookup_from
#endif
/** Inititalize configuration object before parsing the configuration. */
@ -90,4 +90,4 @@ int super_node_destroy(struct super_node *sn);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -30,17 +30,17 @@ extern "C" {
#endif
struct table_column {
int width; /**< Width of the column. */
char *title; /**< The title as shown in the table header. */
char *format; /**< The format which is used to print the table rows. */
char *unit; /**< An optional unit which will be shown in the table header. */
int width; /**< Width of the column. */
char *title; /**< The title as shown in the table header. */
char *format; /**< The format which is used to print the table rows. */
char *unit; /**< An optional unit which will be shown in the table header. */
enum {
TABLE_ALIGN_LEFT,
TABLE_ALIGN_RIGHT
} align;
int _width; /**< The real width of this column. Calculated by table_header() */
int _width; /**< The real width of this column. Calculated by table_header() */
};
struct table {
@ -58,8 +58,8 @@ void table_row(struct table *t, ...);
/** Print the table footer. */
void table_footer(struct table *t);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */

View file

@ -34,25 +34,25 @@ extern "C" {
/** We can choose between two periodic task implementations */
//#define PERIODIC_TASK_IMPL NANOSLEEP
#define TIMERFD 1
#define CLOCK_NANOSLEEP 2
#define NANOSLEEP 3
#define TIMERFD 1
#define CLOCK_NANOSLEEP 2
#define NANOSLEEP 3
#if defined(__MACH__)
#define PERIODIC_TASK_IMPL NANOSLEEP
#define PERIODIC_TASK_IMPL NANOSLEEP
#elif defined(__linux__)
#define PERIODIC_TASK_IMPL TIMERFD
#define PERIODIC_TASK_IMPL TIMERFD
#else
#error "Platform not supported"
#error "Platform not supported"
#endif
struct task {
int clock; /**< CLOCK_{MONOTONIC,REALTIME} */
int clock; /**< CLOCK_{MONOTONIC,REALTIME} */
struct timespec period; /**< The period of periodic invations of this task */
struct timespec next; /**< The timer value for the next invocation */
struct timespec period; /**< The period of periodic invations of this task */
struct timespec next; /**< The timer value for the next invocation */
#if PERIODIC_TASK_IMPL == TIMERFD
int fd; /**< The timerfd_create(2) file descriptior. */
int fd; /**< The timerfd_create(2) file descriptior. */
#endif
};
@ -81,4 +81,3 @@ int task_fd(struct task *t);
#ifdef __cplusplus
}
#endif

View file

@ -39,13 +39,13 @@ struct web {
enum state state;
struct lws_context *context; /**< The libwebsockets server context. */
struct lws_vhost *vhost; /**< The libwebsockets vhost. */
struct lws_context *context; /**< The libwebsockets server context. */
struct lws_vhost *vhost; /**< The libwebsockets vhost. */
int port; /**< Port of the build in HTTP / WebSocket server. */
char *htdocs; /**< The root directory for files served via HTTP. */
char *ssl_cert; /**< Path to the SSL certitifcate for HTTPS / WSS. */
char *ssl_private_key; /**< Path to the SSL private key for HTTPS / WSS. */
int port; /**< Port of the build in HTTP / WebSocket server. */
char *htdocs; /**< The root directory for files served via HTTP. */
char *ssl_cert; /**< Path to the SSL certitifcate for HTTPS / WSS. */
char *ssl_private_key; /**< Path to the SSL private key for HTTPS / WSS. */
pthread_t thread;
};