Compare commits
No commits in common. "master" and "update" have entirely different histories.
20 changed files with 49 additions and 172 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,6 +1,8 @@
|
|||
# object files/output directories
|
||||
# executables
|
||||
moxerver
|
||||
|
||||
# object files
|
||||
*.o
|
||||
*.dir
|
||||
|
||||
# logs directory during development
|
||||
logs
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
language: cpp
|
||||
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
|
||||
script: make install
|
61
Makefile
61
Makefile
|
@ -1,38 +1,43 @@
|
|||
# components
|
||||
SERVER = moxerver
|
||||
TOOLS = tools
|
||||
# target name
|
||||
TARGET = moxerver
|
||||
|
||||
# system install root directory
|
||||
INSTALL_ROOT = $(abspath ./install.dir)
|
||||
# special include directories
|
||||
INCDIRS = -I.
|
||||
# special library directories
|
||||
LIBDIRS = -L.
|
||||
# used libraries
|
||||
#LIBS = -lm
|
||||
LIBS = -lpthread
|
||||
|
||||
# prefix for /bin directory
|
||||
BIN_PREFIX = /usr
|
||||
# compiler and flags
|
||||
CC = gcc
|
||||
CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS)
|
||||
|
||||
# ==============================================================================
|
||||
# objects are .o files created from all .c files in the directory (same name)
|
||||
OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))
|
||||
# headers are all .h files in the directory
|
||||
HEADERS = $(wildcard *.h)
|
||||
|
||||
# directories used for local component builds
|
||||
BUILDDIR = build.dir
|
||||
# directory configuration for local component builds
|
||||
DIR_CONFIG = BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALL_ROOT) BIN_PREFIX=$(BIN_PREFIX)
|
||||
# all objects are built from their .c files and all headers in the directory
|
||||
%.o: %.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
# ==============================================================================
|
||||
# target is built from all object files
|
||||
$(TARGET): $(OBJECTS)
|
||||
$(CC) $(OBJECTS) $(CFLAGS) -o $@
|
||||
|
||||
# supported make options (clean, install...)
|
||||
.PHONY: default install clean
|
||||
|
||||
# default builds components
|
||||
default:
|
||||
cd $(SERVER) && make $(DIR_CONFIG)
|
||||
cd $(TOOLS) && make $(DIR_CONFIG)
|
||||
# support for default, clean and all options
|
||||
.PHONY: default all clean
|
||||
|
||||
# install handles component installation
|
||||
install: default
|
||||
mkdir -p $(INSTALL_ROOT)
|
||||
cd $(SERVER) && make install $(DIR_CONFIG)
|
||||
cd $(TOOLS) && make install $(DIR_CONFIG)
|
||||
# all calls all other options
|
||||
all: default
|
||||
|
||||
# clean removes build and install results
|
||||
# default builds target
|
||||
default: $(TARGET)
|
||||
|
||||
# clean removed object files and target
|
||||
clean:
|
||||
cd $(SERVER) && make clean $(DIR_CONFIG)
|
||||
cd $(TOOLS) && make clean $(DIR_CONFIG)
|
||||
-rm -rf $(INSTALL_ROOT)
|
||||
-rm -f *.o
|
||||
-rm -f $(TARGET)
|
||||
|
||||
|
|
34
README.md
34
README.md
|
@ -1,40 +1,16 @@
|
|||
[](https://travis-ci.org/socec/moxanix)
|
||||
|
||||
Moxanix
|
||||
moxanix
|
||||
=======
|
||||
|
||||
A serial device server, provides console access to multiple serial devices through telnet connection.
|
||||
|
||||
Architecture
|
||||
============
|
||||
|
||||
The serial device server is broken down into multiple micro servers dedicated to a single serial device and TCP port pair.
|
||||
These micro servers are then managed by a control script. The control script allows the user to start and stop these micro servers or check their status.
|
||||
Connections between serial devices and TCP ports are configured in a separate file.
|
||||
This design allows scalability and customization based on the number of available serial connections and TCP port availability.
|
||||
|
||||
moxerver
|
||||
--------
|
||||
- a light server application handling the session between one TCP port and one serial device
|
||||
- server application handling the session between a specific TCP port and a specific serial device
|
||||
- allows bidirectional communication
|
||||
- it is expected to run a separate instance for every serial device and TCP port pair
|
||||
- it is expected to run a separate instance for every serial device
|
||||
|
||||
moxerverctl
|
||||
-----------
|
||||
moxanix.sh
|
||||
----------
|
||||
- starts, stops or displays status for different moxervers
|
||||
- commands can handle one specific or all moxervers at once
|
||||
|
||||
moxerver.cfg
|
||||
------------
|
||||
- defines connections between serial devices and TCP ports
|
||||
- each line corresponds to one micro server handling the defined connection
|
||||
|
||||
Build and install
|
||||
=================
|
||||
|
||||
Run `make` to build the project and `make install` to install it.
|
||||
This default build will produce artifacts in a directory "install.dir" with executables installed in "usr/bin" (default prefix is "usr").
|
||||
|
||||
You can install directly into some other directory with `make INSTALL_ROOT=/some/dir`.
|
||||
You can change the default install prefix for executables with `make BIN_PREFIX=someprefix`.
|
||||
These options can also be combined into `make INSTALL_ROOT=/some/dir BIN_PREFIX=someprefix`
|
||||
|
|
14
tools/moxerverctl → moxanix.sh
Normal file → Executable file
14
tools/moxerverctl → moxanix.sh
Normal file → Executable file
|
@ -4,12 +4,10 @@
|
|||
# setup
|
||||
# =====
|
||||
|
||||
ROOT=""
|
||||
|
||||
# parameters
|
||||
CONFIGURATION_FILE="$ROOT/etc/moxerver.cfg"
|
||||
SERVER_BINARY="moxerver"
|
||||
LOG_DIRECTORY="$ROOT/var/log/moxerver"
|
||||
CONFIGURATION_FILE="./moxanix.cfg"
|
||||
SERVER_BINARY="./moxerver"
|
||||
LOG_DIRECTORY="./logs"
|
||||
|
||||
|
||||
# global variables for configuration
|
||||
|
@ -63,9 +61,9 @@ do_read_config()
|
|||
# configuration lines
|
||||
CONF_LINES[$CONF_SIZE]=$(echo -n $line)
|
||||
# extract configuration arguments
|
||||
tcp=$(echo $line | awk '{print $1}' | sed -e 's/tcp=//')
|
||||
tty=$(echo $line | awk '{print $2}' | sed -e 's/tty=//')
|
||||
baud=$(echo $line | awk '{print $3}' | sed -e 's/baud=//')
|
||||
tcp=$(echo $line | awk '{print $1}' | tr -d "tcp=")
|
||||
tty=$(echo $line | awk '{print $2}' | tr -d "tty=")
|
||||
baud=$(echo $line | awk '{print $3}' | tr -d "baud=")
|
||||
# compose configuration argument lines for passing to the servers
|
||||
CONF_ARGS[$CONF_SIZE]="-p $tcp -t $tty -b $baud"
|
||||
# increment configuration size (array index)
|
|
@ -1,65 +0,0 @@
|
|||
# target names
|
||||
TARGET_BINARY = moxerver
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# directory for build results
|
||||
BUILDDIR = $(abspath build.dir)
|
||||
# installation root
|
||||
INSTALLDIR = $(abspath install.dir)
|
||||
# prefix for /bin directory
|
||||
BIN_PREFIX = /usr
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# add include directories
|
||||
INCDIRS = -I.
|
||||
# add library directories
|
||||
LIBDIRS = -L.
|
||||
# list used libraries
|
||||
#LIBS = -lm
|
||||
LIBS = -lpthread
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# compiler and flags
|
||||
CC = gcc
|
||||
CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS)
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# build everything in a dedicated directory $(BUILDDIR)
|
||||
|
||||
# objects are .o files created from all .c files in the directory (same name)
|
||||
OBJECTS = $(patsubst %.c, $(BUILDDIR)/%.o, $(wildcard *.c))
|
||||
# headers are all .h files in the directory
|
||||
HEADERS = $(wildcard *.h)
|
||||
|
||||
# all objects are built from their .c files in the directory
|
||||
$(BUILDDIR)/%.o: %.c
|
||||
mkdir -p $(BUILDDIR)
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
# target binary is built from all object files
|
||||
$(BUILDDIR)/$(TARGET_BINARY): $(OBJECTS)
|
||||
$(CC) $(OBJECTS) $(CFLAGS) -o $@
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# supported make options (clean, install...)
|
||||
.PHONY: all default install clean
|
||||
|
||||
# all calls all other options
|
||||
all: default install
|
||||
|
||||
# default builds target
|
||||
default: $(BUILDDIR)/$(TARGET_BINARY)
|
||||
|
||||
# install target binary
|
||||
install: default
|
||||
install -Dm0755 $(BUILDDIR)/$(TARGET_BINARY) $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_BINARY)
|
||||
|
||||
# clean removes object files and target (ignore errors with "-" before commands)
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)
|
||||
-rm -rf $(INSTALLDIR)
|
|
@ -1,32 +0,0 @@
|
|||
# target names
|
||||
TARGET_CONTROL = moxerverctl
|
||||
TARGET_CONFIG = moxerver.cfg
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# directory for build results
|
||||
BUILDDIR = $(abspath build.dir)
|
||||
# installation root
|
||||
INSTALLDIR = $(abspath install.dir)
|
||||
# prefix for /bin directory
|
||||
BIN_PREFIX = /usr
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
# supported make options (clean, install...)
|
||||
.PHONY: default install clean
|
||||
|
||||
# default does nothing
|
||||
default:
|
||||
|
||||
# install targets
|
||||
install:
|
||||
# install configuration file
|
||||
install -Dm0644 $(TARGET_CONFIG) $(INSTALLDIR)/etc/$(TARGET_CONFIG)
|
||||
# install control script, referring to the configuration file
|
||||
install -Dm0755 $(TARGET_CONTROL) $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_CONTROL)
|
||||
sed -i -e 's#ROOT=\"\"#ROOT=$(INSTALLDIR)#' $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_CONTROL)
|
||||
|
||||
# clean removes object files and target (ignore errors with "-" before commands)
|
||||
clean:
|
||||
-rm -rf $(INSTALLDIR)
|
Loading…
Add table
Add a link
Reference in a new issue