Skip to content

Commit

Permalink
core, make: remove cproto dependency
Browse files Browse the repository at this point in the history
ubx_proto.h header is split into several smaller ones which shall be
maintained by hand in the future. If convenient, cproto can still be
used a a dev tool, but it's not a build dependency anymore. By this,
the cproto error about the missing expected symbol in rtlog is removed
too.

Signed-off-by: Markus Klotzbuecher <mk@mkio.de>
  • Loading branch information
kmarkus committed Jun 10, 2020
1 parent 86af75e commit 378dca8
Show file tree
Hide file tree
Showing 13 changed files with 232 additions and 35 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@ stamp-h1
std_blocks/lfds_buffers/liblfds611/bin/
std_blocks/lfds_buffers/liblfds611/obj/
libubx/ubx0.pc
libubx/ubx_proto.h
libubx/ubxrtl0.pc
tools/ubx-log
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ addons:
- libtool
- pkg-config
- gcc
- cproto
- g++
- git-core
- luajit
Expand Down
5 changes: 0 additions & 5 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,6 @@ AC_CHECK_HEADERS([uthash.h], [uthash_found=yes; break;])
AS_IF([test "x$uthash_found" != "xyes"],
AC_MSG_ERROR([Unable to find uthash headers (install uthash-dev)]))

# cproto
AC_CHECK_PROG(CPROTO, [cproto], [yes])
AS_IF([test x"$CPROTO" != x"yes"],
[AC_MSG_ERROR([Please install cproto before configuring])])

# sphinx
AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [no])
AS_IF([test x"$SPHINXBUILD" = x"no"],
Expand Down
2 changes: 0 additions & 2 deletions docs/user/installing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ Make sure to install the following dependencies

- uthash (apt: ``uthash-dev``)
- autotools etc. (apt: ``automake``, ``libtool``, ``pkg-config``, ``make``)
- ``cproto`` (apt: ``cproto``) use by Make to generate prototype
header file
- luajit (>=v2.0.0) (apt: ``luajit`` and ``libluajit-5.1-dev``)
- lfs: lua-filesystem (apt: ``lua-filesystem``)

Expand Down
33 changes: 12 additions & 21 deletions libubx/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,23 @@ AM_CFLAGS = -I$(top_srcdir)/std_types/stdtypes/types/ \
lib_LTLIBRARIES = libubx.la \
librtlog_client.la

libubx_includes = ubx.h ubx_uthash_ffi.h typemacros.h \
ubx_types.h ubx_proto.h ubx_utils.h \
md5.h trig_utils.h rtlog.h
libubx_includes = ubx.h \
ubx_types.h \
typemacros.h \
accessors.h \
ubx_core.h \
ubx_time.h \
ubx_uthash_ffi.h \
trig_utils.h \
md5.h \
ubx_utils.h \
rtlog.h

internalincludedir = $(includedir)/ubx/internal
internalinclude_HEADERS = internal/rtlog_common.h \
internal/rtlog_client.h

pkginclude_HEADERS = ubx.h \
ubx_types.h \
typemacros.h \
ubx_proto.h \
ubx_uthash_ffi.h \
trig_utils.h \
rtlog.h \
rtlog_client.h
pkginclude_HEADERS = $(libubx_includes) rtlog_client.h

libubx_la_SOURCES = $(libubx_includes) \
md5.c ubx.c ubx_time.c ubx_utils.c trig_utils.c rtlog.c accessors.c
Expand All @@ -31,17 +32,7 @@ libubx_la_LDFLAGS = -lrt -lpthread -ldl
librtlog_client_la_SOURCES = rtlog_client.c
librtlog_client_la_LDFLAGS = -shared -lrt

BUILT_SOURCES = ubx_proto.h

CLEANFILES = $(BUILT_SOURCES)

ubx_proto.h: md5.c ubx.c ubx_time.c rtlog.c
cproto $(srcdir)/md5.c $(srcdir)/ubx.c \
$(srcdir)/ubx_utils.c $(srcdir)/accessors.c \
$(srcdir)/rtlog.c $(srcdir)/ubx_time.c \
-I$(top_builddir)/ -I${top_srcdir}/ -I${top_srcdir}/libubx/ \
-I$(top_srcdir)/oe-workdir/recipe-sysroot/usr/include \
-I$(top_srcdir)/../recipe-sysroot/usr/include > $(srcdir)/$@

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = ubx0.pc ubxrtl0.pc
87 changes: 87 additions & 0 deletions libubx/accessors.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/* prototypes for accessors */

#ifndef _ACCESSORS_H
#define _ACCESSORS_H

int write_char_array(const ubx_port_t *p, const char *val, const int len);
int write_char(const ubx_port_t *p, const char *val);
long read_char_array(const ubx_port_t *p, char *val, const int len);
long read_char(const ubx_port_t *p, char *val);
long cfg_getptr_char(const ubx_block_t *b, const char *cfg_name, const char **valptr);
int write_int_array(const ubx_port_t *p, const int *val, const int len);
int write_int(const ubx_port_t *p, const int *val);
long read_int_array(const ubx_port_t *p, int *val, const int len);
long read_int(const ubx_port_t *p, int *val);
long cfg_getptr_int(const ubx_block_t *b, const char *cfg_name, const int **valptr);
int write_uint_array(const ubx_port_t *p, const unsigned int *val, const int len);
int write_uint(const ubx_port_t *p, const unsigned int *val);
long read_uint_array(const ubx_port_t *p, unsigned int *val, const int len);
long read_uint(const ubx_port_t *p, unsigned int *val);
long cfg_getptr_uint(const ubx_block_t *b, const char *cfg_name, const unsigned int **valptr);
int write_long_array(const ubx_port_t *p, const long *val, const int len);
int write_long(const ubx_port_t *p, const long *val);
long read_long_array(const ubx_port_t *p, long *val, const int len);
long read_long(const ubx_port_t *p, long *val);
long cfg_getptr_long(const ubx_block_t *b, const char *cfg_name, const long **valptr);
int write_ulong_array(const ubx_port_t *p, const unsigned long *val, const int len);
int write_ulong(const ubx_port_t *p, const unsigned long *val);
long read_ulong_array(const ubx_port_t *p, unsigned long *val, const int len);
long read_ulong(const ubx_port_t *p, unsigned long *val);
long cfg_getptr_ulong(const ubx_block_t *b, const char *cfg_name, const unsigned long **valptr);
int write_uint8_array(const ubx_port_t *p, const uint8_t *val, const int len);
int write_uint8(const ubx_port_t *p, const uint8_t *val);
long read_uint8_array(const ubx_port_t *p, uint8_t *val, const int len);
long read_uint8(const ubx_port_t *p, uint8_t *val);
long cfg_getptr_uint8(const ubx_block_t *b, const char *cfg_name, const uint8_t **valptr);
int write_uint16_array(const ubx_port_t *p, const uint16_t *val, const int len);
int write_uint16(const ubx_port_t *p, const uint16_t *val);
long read_uint16_array(const ubx_port_t *p, uint16_t *val, const int len);
long read_uint16(const ubx_port_t *p, uint16_t *val);
long cfg_getptr_uint16(const ubx_block_t *b, const char *cfg_name, const uint16_t **valptr);
int write_uint32_array(const ubx_port_t *p, const uint32_t *val, const int len);
int write_uint32(const ubx_port_t *p, const uint32_t *val);
long read_uint32_array(const ubx_port_t *p, uint32_t *val, const int len);
long read_uint32(const ubx_port_t *p, uint32_t *val);
long cfg_getptr_uint32(const ubx_block_t *b, const char *cfg_name, const uint32_t **valptr);
int write_uint64_array(const ubx_port_t *p, const uint64_t *val, const int len);
int write_uint64(const ubx_port_t *p, const uint64_t *val);
long read_uint64_array(const ubx_port_t *p, uint64_t *val, const int len);
long read_uint64(const ubx_port_t *p, uint64_t *val);
long cfg_getptr_uint64(const ubx_block_t *b, const char *cfg_name, const uint64_t **valptr);
int write_int8_array(const ubx_port_t *p, const int8_t *val, const int len);
int write_int8(const ubx_port_t *p, const int8_t *val);
long read_int8_array(const ubx_port_t *p, int8_t *val, const int len);
long read_int8(const ubx_port_t *p, int8_t *val);
long cfg_getptr_int8(const ubx_block_t *b, const char *cfg_name, const int8_t **valptr);
int write_int16_array(const ubx_port_t *p, const int16_t *val, const int len);
int write_int16(const ubx_port_t *p, const int16_t *val);
long read_int16_array(const ubx_port_t *p, int16_t *val, const int len);
long read_int16(const ubx_port_t *p, int16_t *val);
long cfg_getptr_int16(const ubx_block_t *b, const char *cfg_name, const int16_t **valptr);
int write_int32_array(const ubx_port_t *p, const int32_t *val, const int len);
int write_int32(const ubx_port_t *p, const int32_t *val);
long read_int32_array(const ubx_port_t *p, int32_t *val, const int len);
long read_int32(const ubx_port_t *p, int32_t *val);
long cfg_getptr_int32(const ubx_block_t *b, const char *cfg_name, const int32_t **valptr);
int write_int64_array(const ubx_port_t *p, const int64_t *val, const int len);
int write_int64(const ubx_port_t *p, const int64_t *val);
long read_int64_array(const ubx_port_t *p, int64_t *val, const int len);
long read_int64(const ubx_port_t *p, int64_t *val);
long cfg_getptr_int64(const ubx_block_t *b, const char *cfg_name, const int64_t **valptr);
int write_size_t_array(const ubx_port_t *p, const size_t *val, const int len);
int write_size_t(const ubx_port_t *p, const size_t *val);
long read_size_t_array(const ubx_port_t *p, size_t *val, const int len);
long read_size_t(const ubx_port_t *p, size_t *val);
long cfg_getptr_size_t(const ubx_block_t *b, const char *cfg_name, const size_t **valptr);
int write_float_array(const ubx_port_t *p, const float *val, const int len);
int write_float(const ubx_port_t *p, const float *val);
long read_float_array(const ubx_port_t *p, float *val, const int len);
long read_float(const ubx_port_t *p, float *val);
long cfg_getptr_float(const ubx_block_t *b, const char *cfg_name, const float **valptr);
int write_double_array(const ubx_port_t *p, const double *val, const int len);
int write_double(const ubx_port_t *p, const double *val);
long read_double_array(const ubx_port_t *p, double *val, const int len);
long read_double(const ubx_port_t *p, double *val);
long cfg_getptr_double(const ubx_block_t *b, const char *cfg_name, const double **valptr);

#endif /* _ACCESSORS_H */
2 changes: 1 addition & 1 deletion libubx/rtlog.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ struct log_shm_inf inf;
*
* @param inc new write pointer offset (bytes)
*/
void log_inc_woff(uint32_t inc)
static void log_inc_woff(uint32_t inc)
{
log_wrap_off_t next;

Expand Down
8 changes: 6 additions & 2 deletions libubx/ubx.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,19 @@ extern "C"
#include <utlist.h>

#include "ubx_types.h"
#include "accessors.h"

struct ubx_proto_block;
struct ubx_proto_port;
struct ubx_proto_config;

#include "ubx_proto.h"
#include "ubx_core.h"
#include "ubx_time.h"
#include "ubx_utils.h"
#include "accessors.h"
#include "md5.h"
#include "rtlog.h"


/* constants */
#define NSEC_PER_SEC 1000000000
#define USEC_PER_SEC 1000000
Expand Down
96 changes: 96 additions & 0 deletions libubx/ubx_core.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/* ubx core API */

#include "ubx_types.h"

#ifndef UBX_CORE_H
#define UBX_CORE_H

/* node API */
int ubx_node_init(ubx_node_info_t *ni, const char *name, uint32_t attrs);
void ubx_node_clear(ubx_node_info_t *ni);
void ubx_node_cleanup(ubx_node_info_t *ni);
void ubx_node_rm(ubx_node_info_t *ni);

int ubx_num_blocks(ubx_node_info_t *ni);
int ubx_num_types(ubx_node_info_t *ni);
int ubx_num_modules(ubx_node_info_t *ni);

/* blocks */
ubx_block_t *ubx_block_get(ubx_node_info_t *ni, const char *name);
ubx_block_t *ubx_block_create(ubx_node_info_t *ni, const char *type, const char *name);
void ubx_block_free(ubx_block_t *b);
int ubx_block_rm(ubx_node_info_t *ni, const char *name);

/* modules and registration */
int ubx_module_load(ubx_node_info_t *ni, const char *lib);
ubx_module_t *ubx_module_get(ubx_node_info_t *ni, const char *lib);
void ubx_module_unload(ubx_node_info_t *ni, const char *lib);

/* TODO drop? int ubx_block_check(ubx_node_info_t *ni, ubx_block_t *b); */

int ubx_block_register(ubx_node_info_t *ni, struct ubx_proto_block *prot);
int ubx_block_unregister(ubx_node_info_t *ni, const char *name);

int ubx_type_register(ubx_node_info_t *ni, ubx_type_t *type);
ubx_type_t *ubx_type_unregister(ubx_node_info_t *ni, const char *name);

/* ubx_type_t */
ubx_type_t *ubx_type_get(ubx_node_info_t *ni, const char *name);
ubx_type_t *ubx_type_get_by_hash(ubx_node_info_t *ni, const uint8_t *hash);
ubx_type_t *ubx_type_get_by_hashstr(ubx_node_info_t *ni, const char *hashstr);
const char *get_typename(const ubx_data_t *data);
void ubx_type_hashstr(const ubx_type_t *t, char *buf);

/* ubx_data_t */
ubx_data_t *__ubx_data_alloc(const ubx_type_t *typ, const long array_len);
ubx_data_t *ubx_data_alloc(ubx_node_info_t *ni, const char *typname, long array_len);
int ubx_data_resize(ubx_data_t *d, long newlen);
void ubx_data_free(ubx_data_t *d);
long data_size(const ubx_data_t *d);

/* ports (ubx_port_t) */
int ubx_port_add(ubx_block_t *b, const char *name, const char *doc, const uint32_t attrs, const char *in_type_name, const long in_data_len, const char *out_type_name, const long out_data_len);
int ubx_outport_add(ubx_block_t *b, const char *name, const char *doc, uint32_t attrs, const char *out_type_name, long out_data_len);
int ubx_inport_resize(struct ubx_port *p, long len);
int ubx_outport_resize(struct ubx_port *p, long len);
int ubx_inport_add(ubx_block_t *b, const char *name, const char *doc, uint32_t attrs, const char *in_type_name, long in_data_len);
int ubx_port_rm(ubx_block_t *b, const char *name);
ubx_port_t *ubx_port_get(const ubx_block_t *b, const char *name);
void ubx_port_free(ubx_port_t *p);

long __port_read(const ubx_port_t *port, ubx_data_t *data);
void __port_write(const ubx_port_t *port, const ubx_data_t *data);

/* configs (ubx_config_t */
int ubx_config_assign(ubx_config_t *c, ubx_data_t *d);
ubx_config_t *ubx_config_get(const ubx_block_t *b, const char *name);
ubx_data_t *ubx_config_get_data(const ubx_block_t *b, const char *name);
long ubx_config_get_data_ptr(const ubx_block_t *b, const char *name, void **ptr);
long ubx_config_data_len(const ubx_block_t *b, const char *cfg_name);
int ubx_config_add2(ubx_block_t *b, const char *name, const char *doc, const char *type_name, uint16_t min, uint16_t max, uint32_t attrs);
int ubx_config_add(ubx_block_t *b, const char *name, const char *doc, const char *type_name);
int ubx_config_rm(ubx_block_t *b, const char *name);

/* block lifecycle hooks */
int ubx_block_init(ubx_block_t *b);
int ubx_block_start(ubx_block_t *b);
int ubx_block_stop(ubx_block_t *b);
int ubx_block_cleanup(ubx_block_t *b);
int ubx_cblock_step(ubx_block_t *b);

/* connecting ports */
int ubx_port_connect_out(ubx_port_t *p, ubx_block_t *iblock);
int ubx_port_connect_in(ubx_port_t *p, ubx_block_t *iblock);
int ubx_ports_connect_uni(ubx_port_t *out_port, ubx_port_t *in_port, ubx_block_t *iblock);
int ubx_port_disconnect_out(ubx_port_t *out_port, ubx_block_t *iblock);
int ubx_port_disconnect_in(ubx_port_t *in_port, ubx_block_t *iblock);
int ubx_ports_disconnect_uni(ubx_port_t *out_port, ubx_port_t *in_port, ubx_block_t *iblock);

/* rt logging */
void __ubx_log(const int level, const ubx_node_info_t *ni, const char *src, const char *fmt, ...);

/* misc helpers */
const char *block_state_tostr(unsigned int state);
const char *ubx_version(void);

#endif /* UBX_CORE_H */
19 changes: 19 additions & 0 deletions libubx/ubx_time.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/* microblx time handling functions */

#ifndef _UBX_TIME_H
#define _UBX_TIME_H

int ubx_clock_mono_gettime(struct ubx_timespec *uts);
int ubx_clock_mono_nanosleep(int flags, struct ubx_timespec *request);
int ubx_gettime(struct ubx_timespec *uts);
int ubx_nanosleep(int flags, struct ubx_timespec *uts);
int ubx_ts_cmp(const struct ubx_timespec *ts1, const struct ubx_timespec *ts2);
void ubx_ts_norm(struct ubx_timespec *ts);
void ubx_ts_sub(const struct ubx_timespec *ts1, const struct ubx_timespec *ts2, struct ubx_timespec *out);
void ubx_ts_add(const struct ubx_timespec *ts1, const struct ubx_timespec *ts2, struct ubx_timespec *out);
void ubx_ts_div(const struct ubx_timespec *ts, const long div, struct ubx_timespec *out);
double ubx_ts_to_double(const struct ubx_timespec *ts);
uint64_t ubx_ts_to_ns(const struct ubx_timespec *ts);
uint64_t ubx_ts_to_us(const struct ubx_timespec *ts);

#endif /* _UBX_TIME_H */
1 change: 0 additions & 1 deletion libubx/ubx_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,6 @@ struct ubx_timespec {
long nsec;
};


/**
* struct ubx_log_msg - ubx log message
* @level: log level (%UBX_LL_ERR, ...)
Expand Down
7 changes: 7 additions & 0 deletions libubx/ubx_utils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#ifndef UBX_UTILS_H
#define UBX_UTILS_H

int ubx_wait_sigint(unsigned int timeout_s);
void char_replace(char *s, const char find, const char rep);

#endif /* UBX_UTILS_H */
5 changes: 4 additions & 1 deletion lua/ubx.lua
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,10 @@ end
local ubx_ffi_headers = {
"include/ubx/ubx_uthash_ffi.h",
"include/ubx/ubx_types.h",
"include/ubx/ubx_proto.h",
"include/ubx/ubx_core.h",
"include/ubx/ubx_time.h",
"include/ubx/md5.h",
"include/ubx/ubx_utils.h",
}

local ubx_ffi_lib = "lib/libubx.so"
Expand Down

0 comments on commit 378dca8

Please sign in to comment.