Commit 6e8049a4 authored by Lucas Russo's avatar Lucas Russo

Merge branch 'mlm-czmq3.0-upgrade' into devel

parents 2ecec50b 5b3c70a3
......@@ -4,9 +4,6 @@
[submodule "foreign/pcie-driver"]
path = foreign/pcie-driver
url = https://github.com/lnls-dig/fpga_pcie_driver.git
[submodule "foreign/libmdp"]
path = foreign/libmdp
url = https://github.com/lnls-dig/majordomo.git
[submodule "foreign/bpm-sw-cli"]
path = foreign/bpm-sw-cli
url = https://github.com/lnls-dig/bpm-sw-cli.git
......@@ -32,6 +32,10 @@ before_script:
- git clone git://github.com/zeromq/zyre.git
- ( cd zyre; ./autogen.sh; ./configure; make check; sudo make install; sudo ldconfig )
# Malamute
- git clone git://github.com/zeromq/malamute.git
- ( cd malamute; ./autogen.sh; ./configure; make check; sudo make install; sudo ldconfig )
# Build and check this project
script:
- ./ci_build.sh
......@@ -31,12 +31,11 @@ AFE_RFFE_TYPE ?= 2
# synthesized.
WITH_DEVIO_CFG ?= y
# Selects the install location of the config file
CFG_DIR ?= /etc/bpm_sw
PREFIX ?= /usr/local
export PREFIX
CFG_DIR ?= ${PREFIX}/etc/bpm_sw
export CFG_DIR
INSTALL_DIR ?= /usr/local
export INSTALL_DIR
# Config filename
CFG_FILENAME = bpm_sw.cfg
......@@ -46,7 +45,6 @@ INIT_SCRIPTS = init.sh shutdown.sh
FOREIGN_DIR = foreign
# Our submodules and third-party codes
LIBMDP_DIR = $(FOREIGN_DIR)/libmdp/libmdp
LIBBSMP_DIR = $(FOREIGN_DIR)/libbsmp
PCIE_DRIVER_DIR = $(FOREIGN_DIR)/pcie-driver
......@@ -144,7 +142,7 @@ CFLAGS_PLATFORM = -Wall -Wextra -Werror
LDFLAGS_PLATFORM =
# Libraries
LIBS = -lm -lzmq -lczmq -lmdp -lpcidriver
LIBS = -lm -lzmq -lczmq -lmlm -lpcidriver
# FIXME: make the project libraries easily interchangeable, specifying
# the lib only a single time
......@@ -251,7 +249,6 @@ revision_SRCS = $(patsubst %.o,%.c,$(revision_OBJS))
libdisptable libdisptable_install libdisptable_uninstall libdisptable_clean libdisptable_mrproper \
libbpmclient libbpmclient_install libbpmclient_uninstall libbpmclient_clean libbpmclient_mrproper \
libsdbfs libsdbfs_install libsdbfs_uninstall libsdbfs_clean libsdbfs_mrproper \
libmdp libmdp_install libmdp_uninstall libmdp_clean libmdp_mrproper \
libbsmp libbsmp_install libbsmp_uninstall libbsmp_clean libbsmp_mrproper \
core_install core_uninstall core_clean core_mrproper \
tests tests_clean tests_mrproper \
......@@ -337,42 +334,14 @@ lib_pcie_driver_clean:
lib_pcie_driver_mrproper: lib_pcie_driver_clean
libmdp_pre:
ifeq ($(wildcard $(LIBMDP_DIR)/Makefile),)
@echo "LIBMDP is not configured. Configuring ..."
@cd $(LIBMDP_DIR) && \
./autogen.sh && \
./configure
endif
libmdp: libmdp_pre
$(MAKE) -C $(LIBMDP_DIR)
libmdp_install: libmdp_pre
$(MAKE) -C $(LIBMDP_DIR) install
ldconfig
libmdp_uninstall: libmdp_pre
$(MAKE) -C $(LIBMDP_DIR) uninstall
libmdp_clean:
ifneq ($(wildcard $(LIBMDP_DIR)/Makefile),)
$(MAKE) -C $(LIBMDP_DIR) clean
endif
libmdp_mrproper:
ifneq ($(wildcard $(LIBMDP_DIR)/Makefile),)
$(MAKE) -C $(LIBMDP_DIR) distclean
endif
libbsmp:
$(MAKE) -C $(LIBBSMP_DIR) all
libbsmp_install:
$(MAKE) -C $(LIBBSMP_DIR) PREFIX=$(INSTALL_DIR) install
$(MAKE) -C $(LIBBSMP_DIR) PREFIX=$(PREFIX) install
libbsmp_uninstall:
$(MAKE) -C $(LIBBSMP_DIR) PREFIX=$(INSTALL_DIR) uninstall
$(MAKE) -C $(LIBBSMP_DIR) PREFIX=$(PREFIX) uninstall
libbsmp_clean:
$(MAKE) -C $(LIBBSMP_DIR) clean
......@@ -474,23 +443,23 @@ libsdbfs_mrproper:
# External project dependencies
deps: libmdp libbsmp lib_pcie_driver
deps: libbsmp lib_pcie_driver
deps_install: libmdp_install libbsmp_install lib_pcie_driver_install
deps_install: libbsmp_install lib_pcie_driver_install
deps_uninstall: libmdp_uninstall libbsmp_uninstall lib_pcie_driver_uninstall
deps_uninstall: libbsmp_uninstall lib_pcie_driver_uninstall
deps_clean: libmdp_clean libbsmp_clean lib_pcie_driver_clean
deps_clean: libbsmp_clean lib_pcie_driver_clean
deps_mrproper: libmdp_mrproper libbsmp_mrproper lib_pcie_driver_mrproper
deps_mrproper: libbsmp_mrproper lib_pcie_driver_mrproper
core_install:
$(foreach core_bin,$(OUT),install -m 755 $(core_bin) $(INSTALL_DIR)/bin $(CMDSEP))
$(foreach core_script,$(INIT_SCRIPTS),install -m 755 $(core_script) $(INSTALL_DIR)/etc $(CMDSEP))
$(foreach core_bin,$(OUT),install -m 755 $(core_bin) $(PREFIX)/bin $(CMDSEP))
$(foreach core_script,$(INIT_SCRIPTS),install -m 755 $(core_script) $(PREFIX)/etc $(CMDSEP))
core_uninstall:
$(foreach core_bin,$(ALL_OUT),rm -f $(INSTALL_DIR)/bin/$(core_bin) $(CMDSEP))
$(foreach core_script,$(INIT_SCRIPTS),rm -f $(INSTALL_DIR)/etc/$(core_script) $(CMDSEP))
$(foreach core_bin,$(ALL_OUT),rm -f $(PREFIX)/bin/$(core_bin) $(CMDSEP))
$(foreach core_script,$(INIT_SCRIPTS),rm -f $(PREFIX)/etc/$(core_script) $(CMDSEP))
core_clean:
rm -f $(OBJS_all) $(OBJS_all:.o=.d)
......
......@@ -6,22 +6,36 @@ Software for controlling the AFC BPM boards
## Prerequisites:
Make sure you have the following libraries installed:
Make sure you have the following libraries installed, either by download
the binaries or executing the instructions below:
* zeromq-4.0.4 (http://zeromq.org/area:download)
* czmq-2.2.0 (http://czmq.zeromq.org/page:get-the-software)
* zeromq-4.2.0 (http://zeromq.org/area:download)
* czmq-3.0.1 (http://czmq.zeromq.org/page:get-the-software)
* mlm-0.1.0 (https://github.com/zeromq/malamute.git)
Cloning this repository
## Optional libraries:
git clone --recursive https://github.com/lerwys/bpm-sw.git
* uuid (distribution available):
sudo apt-get install uuid
Install the Majordomo application from this repository (autotools-based)
### Prerequisites Installation Instructions
cd majordomo/libmdp
git clone git://github.com/zeromq/libzmq.git && \
git clone git://github.com/zeromq/czmq.git && \
git clone git://github.com/zeromq/malamute.git &&
for project in libsodium libzmq czmq malamute; do
cd $project
./autogen.sh
./configure && make check
sudo make install
sudo ldconfig
cd ..
done
Execute the traditional sequence of autotools commands:
## Cloning this repository
./autogen.sh && make && sudo make install
git clone --recursive https://github.com/lerwys/bpm-sw.git
## PCIe Installation Instructions
......@@ -194,7 +208,7 @@ the PCIe kernel driver.
If the PCIe driver is already installed, you could
run it without superuser.
./compile.sh
./compile.sh <board type = [ml605|afcv3]>
### Client
......
......@@ -11,7 +11,9 @@ OBJCOPY = $(CROSS_COMPILE)objcopy
SIZE = $(CROSS_COMPILE)size
MAKE = make
CFG_DIR ?= /etc/bpm_sw
PREFIX ?= /usr/local
CFG_DIR ?= ${PREFIX}/etc/bpm_sw
# Get all .cfg files
CFG_FILES ?= $(wildcard *.cfg)
......@@ -22,7 +24,7 @@ CFG_FILES ?= $(wildcard *.cfg)
all:
install:
@mkdir -p $(CFG_DIR)
@mkdir -m 755 -p $(CFG_DIR)
$(foreach cfg,$(CFG_FILES),install -m 755 $(cfg) $(CFG_DIR)/ $(CMDSEP))
uninstall:
......
......@@ -3,9 +3,9 @@
# Device manager configurations
dev_mngr
broker
bind = tcp://10.0.18.35:8888
bind = tcp://127.0.0.1:9999
log
dir = /export/remote_logs
dir = /media/remote_logs
filename = dev_mngr.log
verbose = 1 # Ask for a trace
daemonize = no # Ask for daemonize process (options are: yes or no)
......@@ -16,7 +16,7 @@ dev_io
bpm0
dbe
afe
bind = tcp://10.0.18.59:6791
bind =
bpm1
dbe
afe
......
......@@ -43,7 +43,8 @@ WITH_DEVIO_CFG=y
# Selects the install location of the config file
CFG_FILENAME=/etc/bpm_sw/bpm_sw.cfg
# Selects the install location of the config file
CFG_DIR=/etc/bpm_sw
PREFIX=/usr/local
CFG_DIR=${PREFIX}/etc/bpm_sw
COMMAND_DEPS="\
make deps && \
......
......@@ -34,7 +34,7 @@ CFLAGS_PLATFORM = -Wall -Wextra -Werror
LDFLAGS_PLATFORM =
# Libraries
LIBS = -lbpmclient -lerrhand -lmdp -lczmq -lzmq
LIBS = -lbpmclient -lerrhand -lmlm -lczmq -lzmq
# General library flags -L<libdir>
LFLAGS =
......
......@@ -3,7 +3,6 @@
* * a client and the FPGA device
* */
#include <mdp.h>
#include <czmq.h>
#include <inttypes.h>
#include <stdio.h>
......@@ -19,7 +18,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
/* Arbitrary hard limits */
#define MAX_NUM_SAMPLES (1 << 28)
......@@ -127,8 +125,6 @@ int main (int argc, char *argv [])
broker_endp = strdup ("ipc://"DFLT_BIND_FOLDER);
}
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
/* Set default number samples */
uint32_t num_samples;
if (num_samples_str == NULL) {
......@@ -173,12 +169,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:acq]: Board number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -199,7 +189,13 @@ int main (int argc, char *argv [])
}
char service[50];
sprintf (service, "BPM%u:DEVIO:ACQ%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:ACQ%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
uint32_t data_size = num_samples*acq_chan[chan].sample_size;
uint32_t *data = (uint32_t *) zmalloc (data_size*sizeof (uint8_t));
......@@ -224,6 +220,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "clear\n");
print_data (chan, data, acq_trans.block.bytes_read);
err_bpm_client_new:
err_bpm_get_curve:
str_p = &chan_str;
free (*str_p);
......@@ -231,6 +228,9 @@ err_bpm_get_curve:
str_p = &board_number_str;
free (*str_p);
board_number_str = NULL;
str_p = &bpm_number_str;
free (*str_p);
bpm_number_str = NULL;
str_p = &num_samples_str;
free (*str_p);
num_samples_str = NULL;
......
......@@ -18,7 +18,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
#define FUNC_AD9510_A_DIV_IDX 0
#define FUNC_AD9510_B_DIV_IDX 1
......@@ -186,12 +185,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:leds]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -212,9 +205,13 @@ int main (int argc, char *argv [])
}
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
for (i = 0; i < MAX_NUM_FUNCS; ++i) {
if (func_call [i].call == 1) {
......@@ -230,6 +227,7 @@ int main (int argc, char *argv [])
}
}
err_bpm_client_new:
bpm_client_destroy (&bpm_client);
/* ugly... */
......
......@@ -11,18 +11,27 @@
#define DFLT_BIND_FOLDER "/tmp/bpm"
#define DFLT_BPM_NUMBER 0
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
void print_help (char *program_name)
{
printf( "Usage: %s [options]\n"
"\t-h This help message\n"
"\t-v Verbose output\n"
"\t-b <broker_endpoint> Broker endpoint\n", program_name);
"\t-b <broker_endpoint> Broker endpoint\n"
"\t-board <AMC board = [0|1|2|3|4|5]>\n"
"\t-bpm <BPM number = [0|1]>\n", program_name);
}
int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char *board_number_str = NULL;
char *bpm_number_str = NULL;
char **str_p = NULL;
if (argc < 2) {
......@@ -58,11 +67,46 @@ int main (int argc, char *argv [])
broker_endp = strdup ("ipc://"DFLT_BIND_FOLDER);
}
/* Set default board number */
uint32_t board_number;
if (board_number_str == NULL) {
fprintf (stderr, "[client:acq]: Setting default value to BOARD number: %u\n",
DFLT_BOARD_NUMBER);
board_number = DFLT_BOARD_NUMBER;
}
else {
board_number = strtoul (board_number_str, NULL, 10);
}
/* Set default bpm number */
uint32_t bpm_number;
if (bpm_number_str == NULL) {
fprintf (stderr, "[client:leds]: Setting default value to BPM number: %u\n",
DFLT_BPM_NUMBER);
bpm_number = DFLT_BPM_NUMBER;
}
else {
bpm_number = strtoul (bpm_number_str, NULL, 10);
if (bpm_number > MAX_BPM_NUMBER) {
fprintf (stderr, "[client:leds]: BPM number too big! Defaulting to: %u\n",
MAX_BPM_NUMBER);
bpm_number = MAX_BPM_NUMBER;
}
}
char service [50];
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u",
board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
uint32_t adc_data;
bpm_client_err_e err = bpm_get_adc_data0 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0",
&adc_data);
bpm_client_err_e err = bpm_get_adc_data0 (bpm_client, service, &adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data0 failed\n");
goto err_get_adc_data;
......@@ -70,8 +114,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:adc_data]: data0 = %d\n", (int16_t) adc_data);
err = bpm_get_adc_data1 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0",
&adc_data);
err = bpm_get_adc_data1 (bpm_client, service, &adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data1 failed\n");
goto err_get_adc_data;
......@@ -79,8 +122,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:adc_data]: data1 = %d\n", (int16_t) adc_data);
err = bpm_get_adc_data2 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0",
&adc_data);
err = bpm_get_adc_data2 (bpm_client, service, &adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data2 failed\n");
goto err_get_adc_data;
......@@ -88,8 +130,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:adc_data]: data2 = %d\n", (int16_t) adc_data);
err = bpm_get_adc_data3 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0",
&adc_data);
err = bpm_get_adc_data3 (bpm_client, service, &adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data3 failed\n");
goto err_get_adc_data;
......@@ -97,10 +138,17 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:adc_data]: data3 = %d\n", (int16_t) adc_data);
err_bpm_client_new:
err_get_adc_data:
bpm_client_destroy (&bpm_client);
str_p = &broker_endp;
free (*str_p);
broker_endp = NULL;
str_p = &board_number_str;
free (*str_p);
board_number_str = NULL;
str_p = &bpm_number_str;
free (*str_p);
bpm_number_str = NULL;
return 0;
}
......@@ -18,7 +18,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
#define DFLT_ADC_DLY_VALUE 10
#define MAX_ADC_DLY_VALUE 31
......@@ -113,12 +112,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:leds]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -193,9 +186,13 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:adc_dly]: ADC delay value = %u\n", dly_val);
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
/* Call the appropriate delay function. FIXME: the case construct is
* not generic nor expansible */
......@@ -217,6 +214,7 @@ int main (int argc, char *argv [])
break;
}
err_bpm_client_new:
bpm_client_destroy (&bpm_client);
str_p = &board_number_str;
......
......@@ -16,7 +16,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
void print_help (char *program_name)
{
......@@ -107,12 +106,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:dsp]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -134,11 +127,15 @@ int main (int argc, char *argv [])
/* Generate the service names for each SMIO */
char service_dsp[50];
sprintf (service_dsp, "BPM%u:DEVIO:DSP%u", board_number, bpm_number);
snprintf (service_dsp, strlen (service_dsp)+1, "BPM%u:DEVIO:DSP%u", board_number, bpm_number);
char service_swap[50];
sprintf (service_swap, "BPM%u:DEVIO:SWAP%u", board_number, bpm_number);
snprintf (service_swap, strlen (service_swap)+1, "BPM%u:DEVIO:SWAP%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
uint32_t kx_set = 10000000;
fprintf (stdout, "[client:dsp]: kx = %u\n", kx_set);
......@@ -289,6 +286,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:swap]: bpm_set_gain_d = direct %u, inverted %u was successfully executed\n",
gain_aa, gain_ac);
err_bpm_client_new:
err_bpm_exit:
err_bpm_get:
err_bpm_set:
......
......@@ -16,7 +16,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
void print_help (char *program_name)
{
......@@ -123,12 +122,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:fmc130m_4ch]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -150,7 +143,7 @@ int main (int argc, char *argv [])
/* Generate the service names for each SMIO */
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
......
......@@ -15,7 +15,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
void print_help (char *program_name)
{
......@@ -85,12 +84,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:leds]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -111,9 +104,13 @@ int main (int argc, char *argv [])
}
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
for (i = 0; i < 32768; ++i) {
uint32_t leds = (1 << 1);
......@@ -129,6 +126,7 @@ int main (int argc, char *argv [])
}
}
err_bpm_client_new:
bpm_client_destroy (&bpm_client);
str_p = &broker_endp;
......
......@@ -11,18 +11,28 @@
#define DFLT_BIND_FOLDER "/tmp/bpm"
#define DFLT_BPM_NUMBER 0
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
void print_help (char *program_name)
{
printf( "Usage: %s [options]\n"
"\t-h This help message\n"
"\t-v Verbose output\n"
"\t-b <broker_endpoint> Broker endpoint\n", program_name);
"\t-b <broker_endpoint> Broker endpoint\n"
"\t-board <AMC board = [0|1|2|3|4|5]>\n"
"\t-bpm <BPM number = [0|1]>\n"
, program_name);
}
int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char *board_number_str = NULL;
char *bpm_number_str = NULL;
char **str_p = NULL;
if (argc < 2) {
......@@ -47,6 +57,13 @@ int main (int argc, char *argv [])
else if (streq (argv[i], "-b")) {
str_p = &broker_endp;
}
else if (streq (argv[i], "-board")) { /* board_number: board number */
str_p = &board_number_str;
}
else if (streq(argv[i], "-bpm"))
{
str_p = &bpm_number_str;
}
/* Fallout for options with parameters */
else {
*str_p = strdup (argv[i]);
......@@ -58,10 +75,45 @@ int main (int argc, char *argv [])
broker_endp = strdup ("ipc://"DFLT_BIND_FOLDER);
}
/* Set default board number */
uint32_t board_number;
if (board_number_str == NULL) {
fprintf (stderr, "[client:acq]: Setting default value to BOARD number: %u\n",
DFLT_BOARD_NUMBER);
board_number = DFLT_BOARD_NUMBER;
}
else {
board_number = strtoul (board_number_str, NULL, 10);
}
/* Set default bpm number */
uint32_t bpm_number;
if (bpm_number_str == NULL) {
fprintf (stderr, "[client:leds]: Setting default value to BPM number: %u\n",
DFLT_BPM_NUMBER);
bpm_number = DFLT_BPM_NUMBER;
}
else {
bpm_number = strtoul (bpm_number_str, NULL, 10);
if (bpm_number > MAX_BPM_NUMBER) {
fprintf (stderr, "[client:leds]: BPM number too big! Defaulting to: %u\n",
MAX_BPM_NUMBER);
bpm_number = MAX_BPM_NUMBER;
}
}
char service[50];
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:DSP%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
uint32_t monit_amp;
bpm_client_err_e err = bpm_get_monit_amp_ch0 (bpm_client, "BPM0:DEVIO:DSP0",
bpm_client_err_e err = bpm_get_monit_amp_ch0 (bpm_client, service,
&monit_amp);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_amp_ch0 failed\n");
......@@ -70,8 +122,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_amp]: monitoring amplitude ch0 = %u\n", monit_amp);
err = bpm_get_monit_amp_ch1 (bpm_client, "BPM0:DEVIO:DSP0",
&monit_amp);
err = bpm_get_monit_amp_ch1 (bpm_client, service, &monit_amp);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_amp_ch1 failed\n");
goto err_get_monit_amp;
......@@ -79,8 +130,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_amp]: monitoring amplitude ch1 = %u\n", monit_amp);
err = bpm_get_monit_amp_ch2 (bpm_client, "BPM0:DEVIO:DSP0",
&monit_amp);
err = bpm_get_monit_amp_ch2 (bpm_client, service, &monit_amp);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_amp_ch2 failed\n");
goto err_get_monit_amp;
......@@ -88,8 +138,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_amp]: monitoring amplitude ch2 = %u\n", monit_amp);
err = bpm_get_monit_amp_ch3 (bpm_client, "BPM0:DEVIO:DSP0",
&monit_amp);
err = bpm_get_monit_amp_ch3 (bpm_client, service, &monit_amp);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_amp_ch3 failed\n");
goto err_get_monit_amp;
......@@ -97,8 +146,15 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_amp]: monitoring amplitude ch3 = %u\n", monit_amp);
err_bpm_client_new:
err_get_monit_amp:
bpm_client_destroy (&bpm_client);
str_p = &board_number_str;
free (*str_p);
board_number_str = NULL;
str_p = &bpm_number_str;
free (*str_p);
bpm_number_str = NULL;
str_p = &broker_endp;
free (*str_p);
broker_endp = NULL;
......
......@@ -11,18 +11,28 @@
#define DFLT_BIND_FOLDER "/tmp/bpm"
#define DFLT_BPM_NUMBER 0
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
void print_help (char *program_name)
{
printf( "Usage: %s [options]\n"
"\t-h This help message\n"
"\t-v Verbose output\n"
"\t-b <broker_endpoint> Broker endpoint\n", program_name);
"\t-b <broker_endpoint> Broker endpoint\n"
"\t-board <AMC board = [0|1|2|3|4|5]>\n"
"\t-bpm <BPM number = [0|1]>\n"
, program_name);
}
int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char *board_number_str = NULL;
char *bpm_number_str = NULL;
char **str_p = NULL;
if (argc < 2) {
......@@ -47,6 +57,13 @@ int main (int argc, char *argv [])
else if (streq (argv[i], "-b")) {
str_p = &broker_endp;
}
else if (streq (argv[i], "-board")) { /* board_number: board number */
str_p = &board_number_str;
}
else if (streq(argv[i], "-bpm"))
{
str_p = &bpm_number_str;
}
/* Fallout for options with parameters */
else {
*str_p = strdup (argv[i]);
......@@ -58,10 +75,45 @@ int main (int argc, char *argv [])
broker_endp = strdup ("ipc://"DFLT_BIND_FOLDER);
}
/* Set default board number */
uint32_t board_number;
if (board_number_str == NULL) {
fprintf (stderr, "[client:acq]: Setting default value to BOARD number: %u\n",
DFLT_BOARD_NUMBER);
board_number = DFLT_BOARD_NUMBER;
}
else {
board_number = strtoul (board_number_str, NULL, 10);
}
/* Set default bpm number */
uint32_t bpm_number;
if (bpm_number_str == NULL) {
fprintf (stderr, "[client:leds]: Setting default value to BPM number: %u\n",
DFLT_BPM_NUMBER);
bpm_number = DFLT_BPM_NUMBER;
}
else {
bpm_number = strtoul (bpm_number_str, NULL, 10);
if (bpm_number > MAX_BPM_NUMBER) {
fprintf (stderr, "[client:leds]: BPM number too big! Defaulting to: %u\n",
MAX_BPM_NUMBER);
bpm_number = MAX_BPM_NUMBER;
}
}
char service[50];
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:DSP%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
uint32_t monit_pos;
bpm_client_err_e err = bpm_get_monit_pos_x (bpm_client, "BPM0:DEVIO:DSP0",
bpm_client_err_e err = bpm_get_monit_pos_x (bpm_client, service,
&monit_pos);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_pos_x failed\n");
......@@ -70,8 +122,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_pos]: monitoring pos x = %d\n", (int32_t) monit_pos);
err = bpm_get_monit_pos_y (bpm_client, "BPM0:DEVIO:DSP0",
&monit_pos);
err = bpm_get_monit_pos_y (bpm_client, service, &monit_pos);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_pos_y failed\n");
goto err_get_monit_pos;
......@@ -79,8 +130,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_pos]: monitoring pos y = %d\n", (int32_t) monit_pos);
err = bpm_get_monit_pos_q (bpm_client, "BPM0:DEVIO:DSP0",
&monit_pos);
err = bpm_get_monit_pos_q (bpm_client, service, &monit_pos);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_pos_q failed\n");
goto err_get_monit_pos;
......@@ -88,8 +138,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_pos]: monitoring pos q = %d\n", (int32_t) monit_pos);
err = bpm_get_monit_pos_sum (bpm_client, "BPM0:DEVIO:DSP0",
&monit_pos);
err = bpm_get_monit_pos_sum (bpm_client, service, &monit_pos);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_monit_pos_sum failed\n");
goto err_get_monit_pos;
......@@ -97,8 +146,15 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:monit_pos]: monitoring pos sum = %d\n", (int32_t) monit_pos);
err_bpm_client_new:
err_get_monit_pos:
bpm_client_destroy (&bpm_client);
str_p = &board_number_str;
free (*str_p);
board_number_str = NULL;
str_p = &bpm_number_str;
free (*str_p);
bpm_number_str = NULL;
str_p = &broker_endp;
free (*str_p);
broker_endp = NULL;
......
......@@ -18,7 +18,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
#define FUNC_RFFE_SW_IDX 0
#define FUNC_RFFE_ATT1_IDX 1
......@@ -198,12 +197,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:rffe]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -224,9 +217,13 @@ int main (int argc, char *argv [])
}
char service[50];
sprintf (service, "BPM%u:DEVIO:RFFE%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:RFFE%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
for (i = 0; i < MAX_NUM_FUNCS; ++i) {
if (func_call [i].call == 1) {
......@@ -242,6 +239,7 @@ int main (int argc, char *argv [])
}
}
err_bpm_client_new:
bpm_client_destroy (&bpm_client);
/* ugly... */
......
......@@ -138,9 +138,13 @@ int main (int argc, char *argv [])
}
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
bpm_client_err_e err = bpm_set_si571_set_freq (bpm_client, service, si571_freq);
if (err != BPM_CLIENT_SUCCESS){
......@@ -148,6 +152,7 @@ int main (int argc, char *argv [])
goto err_bpm_set_freq;
}
err_bpm_client_new:
err_bpm_set_freq:
bpm_client_destroy (&bpm_client);
......
......@@ -18,7 +18,6 @@
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
void print_help (char *program_name)
{
......@@ -93,12 +92,6 @@ int main (int argc, char *argv [])
}
else {
board_number = strtoul (board_number_str, NULL, 10);
if (board_number > MAX_BOARD_NUMBER) {
fprintf (stderr, "[client:leds]: BOARD number too big! Defaulting to: %u\n",
MAX_BOARD_NUMBER);
board_number = MAX_BOARD_NUMBER;
}
}
/* Set default bpm number */
......@@ -136,14 +129,19 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:test_data_en]: test_data_en = %u\n", test_data_en);
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
snprintf (service, strlen (service)+1, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
if (bpm_client == NULL) {
fprintf (stderr, "[client:acq]: bpm_client could be created\n");
goto err_bpm_client_new;
}
/* Test data enable */
bpm_set_adc_test_data_en (bpm_client, service, test_data_en);
/* Cleanup */
err_bpm_client_new:
bpm_client_destroy (&bpm_client);
str_p = &board_number_str;
......
Subproject commit 5008743e14bf166304fa776e8b0601ca81b890fb
......@@ -233,10 +233,14 @@ int main (int argc, char *argv[])
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_INFO, "[dev_io] Slot number: 0x%08X\n", dev_id);
/* FIXME: give some time for the process to terminate gracefully */
sleep (4);
/* Kill DEVIO cfg as we've already got our slot number */
kill (child_devio_cfg_pid, DEVIO_KILL_CFG_SIGNAL);
/* Wait child */
hutils_wait_chld ();
/* Destroy libclient */
bpm_client_destroy (&client_cfg);
#endif
/* We don't need it anymore */
......@@ -280,33 +284,23 @@ int main (int argc, char *argv[])
goto err_devio;
}
/* err = devio_init_poller_sm (devio); */
err = devio_init_poller_sm (devio);
/* Step 1: Loop though all the SDB records and intialize (boot) the
* smio modules*/
/* Step 2: Optionally, register the necessary smio modules specifying
* its ID and calling devio_register_sm */
/* Step 3: Poll all PIPE's sockets to determine if we have something to
* handle, like messages from smios */
/* Step 3.5: If we do, call devio_handle_smio () and treat its
* request as appropriate */
err = devio_loop (devio);
if (err != DEVIO_SUCCESS) {
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_FATAL, "[dev_io] devio_init_poller_sm error!\n");
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_FATAL, "[dev_io] devio_loop error: %s\n",
devio_err_str (err));
goto err_devio;
}
while (!zctx_interrupted) {
/* Step 1: Loop though all the SDB records and intialize (boot) the
* smio modules*/
/* Step 2: Optionally, register the necessary smio modules specifying
* its ID and calling devio_register_sm */
/* Step 3: Poll all PIPE's sockets to determine if we have something to
* handle, like messages from smios */
/* Step 3.5: If we do, call devio_handle_smio () and treat its
* request as appropriate */
/* devio_poll_all_sm (devio); */
err = devio_poll_all_sm (devio);
if (err != DEVIO_SUCCESS) {
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_FATAL, "[dev_io] devio_poll_all_sm error. Exiting ...\n");
goto err_devio;
}
/* wait child */
hutils_wait_chld ();
}
/* wait child */
hutils_wait_chld ();
err_devio:
devio_destroy (&devio);
......
......@@ -196,29 +196,21 @@ int main (int argc, char *argv[])
goto err_devio;
}
err = devio_init_poller_sm (devio);
/* Step 1: Loop though all the SDB records and intialize (boot) the
* smio modules*/
/* Step 2: Optionally, register the necessary smio modules specifying
* its ID and calling devio_register_sm */
/* Step 3: Poll all PIPE's sockets to determine if we have something to
* handle, like messages from smios */
/* Step 3.5: If we do, call devio_handle_smio () and treat its
* request as appropriate */
err = devio_loop (devio);
if (err != DEVIO_SUCCESS) {
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_FATAL, "[dev_io] devio_init_poller_sm error!\n");
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_FATAL, "[dev_io] devio_loop error: %s\n",
devio_err_str (err));
goto err_devio;
}
while (!zctx_interrupted) {
/* Step 1: Loop though all the SDB records and intialize (boot) the
* smio modules*/
/* Step 2: Optionally, register the necessary smio modules specifying
* its ID and calling devio_register_sm */
/* Step 3: Poll all PIPE's sockets to determine if we have something to
* handle, like messages from smios */
/* Step 3.5: If we do, call devio_handle_smio () and treat its
* request as appropriate */
err = devio_poll_all_sm (devio);
if (err != DEVIO_SUCCESS) {
DBE_DEBUG (DBG_DEV_IO | DBG_LVL_FATAL, "[dev_io] devio_poll2_all_sm error. Exiting ...\n");
goto err_devio;
}
}
err_devio:
devio_destroy (&devio);
err_exit:
......
This diff is collapsed.
......@@ -9,7 +9,7 @@
#define _DEV_IO_CORE_H_
#include "czmq.h"
#include "mdp.h"
#include <malamute.h>
#include "hutils.h"
#include "disp_table.h"
......@@ -22,9 +22,11 @@
struct _devio_t {
/* General information */
zctx_t *ctx; /* zeroMQ Context */
void **pipes; /* Address nodes using this array of pipes */
zmq_pollitem_t *poller; /* Poller structure to multiplex threads messages. New version */
zactor_t **pipes_mgmt; /* Address nodes using this array of actors (Management PIPES) */
zsock_t **pipes_msg; /* Address nodes using this array of actors (Message PIPES) */
zactor_t **pipes_config; /* Address config actors using this array of actors (Config PIPES) */
zpoller_t *poller; /* Poller structure to multiplex threads messages */
zpoller_t *poller_config; /* Poller structure to multiplex config threads messages*/
unsigned int nnodes; /* Number of actual nodes */
char *name; /* Identification of this worker instance */
char *log_file; /* Log filename for tracing and debugging */
......@@ -41,6 +43,10 @@ struct _devio_t {
* this dev_io can handle. It is composed
* of key (10-char ID) / value (sm_io instance) */
zhash_t *sm_io_h;
/* Hash containing all the Config sm_io objects that
* this dev_io can handle. It is composed
* of key (10-char ID) / value (sm_io instance) */
zhash_t *sm_io_cfg_h;
/* Dispatch table containing all the sm_io thsafe operations
* that we need to handle. It is composed
* of key (4-char ID) / value (pointer to function) */
......@@ -93,10 +99,8 @@ devio_err_e devio_register_sm (devio_t *self, uint32_t smio_id,
devio_err_e devio_register_all_sm (devio_t *self);
devio_err_e devio_unregister_sm (devio_t *self, const char *smio_key);
devio_err_e devio_unregister_all_sm (devio_t *self);
/* Initilize poller with all of the initialized PIPE sockets */
devio_err_e devio_init_poller_sm (devio_t *self);
/* Poll all PIPE sockets */
devio_err_e devio_poll_all_sm (devio_t *self);
devio_err_e devio_loop (devio_t *self);
/* Router for all the opcodes registered for this dev_io */
/* devio_err_e devio_do_op (devio_t *self, uint32_t opcode, int nargs, ...); */
/* Router for all of the low-level operations for this dev_io */
......
......@@ -15,15 +15,17 @@ static const char *devio_err [DEVIO_ERR_END] =
[DEVIO_SUCCESS] = "Success",
[DEVIO_ERR_ALLOC] = "Could not allocate memory",
[DEVIO_ERR_FUNC_NOT_IMPL] = "Function not implemented",
[DEVIO_ERR_SMIO_DO_OP] = "Error calling specific sm_io function",
[DEVIO_ERR_NO_SMIO_OP] = "No sm_io registered for this opcode",
[DEVIO_ERR_NO_SMIO_ID] = "No sm_io registered with this ID",
[DEVIO_ERR_SMIO_DO_OP] = "Error calling specific sm_io function",
[DEVIO_ERR_MAX_SMIOS] = "Maximum number os SMIOs reached",
[DEVIO_ERR_NO_NODES] = "No thread nodes available",
[DEVIO_ERR_UNINIT_POLLER] = "Poller uninitilized",
[DEVIO_ERR_INTERRUPTED_POLLER] = "Poller interrupted. zeroMQ context was terminated or received interrupt signal",
[DEVIO_ERR_BAD_MSG] = "Malformed message received",
[DEVIO_ERR_TERMINATED] = "Terminated devio instance",
[DEVIO_ERR_SMIO_DESTROY] = "Could not destroy sm_io instance"
[DEVIO_ERR_SMIO_DESTROY] = "Could not destroy sm_io instance",
[DEVIO_ERR_INV_SOCKET] = "Invalid socket reference"
};
/* Convert enumeration type to string */
......
......@@ -19,12 +19,14 @@ enum _devio_err_e
DEVIO_ERR_SMIO_DO_OP, /* Error calling sm_io specific function */
DEVIO_ERR_NO_SMIO_OP, /* No sm_io registered for the opcode argument */
DEVIO_ERR_NO_SMIO_ID, /* No sm_io registered with the id argument */
DEVIO_ERR_MAX_SMIOS, /* Maximum number os SMIOs reached */
DEVIO_ERR_NO_NODES, /* No thread nodes available */
DEVIO_ERR_UNINIT_POLLER, /* Uninitliazed poller */
DEVIO_ERR_INTERRUPTED_POLLER, /* Poller interrupted. zeroMQ context was terminated or received interrupt signal */
DEVIO_ERR_BAD_MSG, /* Malformed message received */
DEVIO_ERR_TERMINATED, /* Terminated devio instance */
DEVIO_ERR_SMIO_DESTROY, /* Could not destroy sm_io instance */
DEVIO_ERR_INV_SOCKET, /* Invalid socket reference */
DEVIO_ERR_END /* End of enum marker */
};
......
......@@ -255,7 +255,7 @@ int main (int argc, char *argv[])
DBE_DEBUG (DBG_DEV_MNGR | DBG_LVL_TRACE, "[dev_mngr] Monitoring devices ...\n");
/* Do until a C^c is pressed (daemon mode unset) or SIGTERM signal arrives */
while (!zctx_interrupted) {
while (!zsys_interrupted) {
/* DBE_DEBUG (DBG_DEV_MNGR | DBG_LVL_TRACE, "[dev_mngr] ., PID: %d\n", getpid()); */
......
......@@ -97,6 +97,10 @@
DEVIO_LOG_INST_TYPE "." \
DEVIO_LOG_SUFFIX
#define DEVIO_MLM_PREFIX_CFG_DIR "/usr/local"
#define DEVIO_MLM_CFG_DIR "/etc/malamute"
#define DEVIO_MLM_CFG_FILENAME "malamute.cfg"
/* Configuration variables. To be filled by dev_mngr */
const char *dmngr_log_filename = NULL;
char *dmngr_log_dir = NULL;
......@@ -139,15 +143,6 @@ dmngr_t * dmngr_new (char *name, char *endpoint, int verbose,
dmngr_t *self = (dmngr_t *) zmalloc (sizeof *self);
ASSERT_ALLOC(self, err_self_alloc);
/* Initialize the Device Manager */
self->ctx = zctx_new ();
ASSERT_ALLOC(self->ctx, err_ctx_alloc);
/* Create Dealer for use with zbeacon */
self->dealer = zsocket_new (self->ctx, ZMQ_DEALER);
ASSERT_ALLOC(self->dealer, err_dealer_alloc);
zsocket_bind (self->dealer, "%s", endpoint);
self->name = strdup (name);
ASSERT_ALLOC(self->name, err_name_alloc);
self->endpoint = strdup (endpoint);
......@@ -168,6 +163,13 @@ dmngr_t * dmngr_new (char *name, char *endpoint, int verbose,
self->broker_running = false;
/* Create Dealer for use with zbeacon and bind it to the endpoint */
self->dealer = zsock_new_dealer (NULL);
ASSERT_ALLOC(self->dealer, err_dealer_alloc);
int rc = zsock_bind (self->dealer, "%s", self->endpoint);
ASSERT_TEST(rc > -1, "Dealer socket could not bind to specified endpoint",
err_dealer_bind);
/* Scan devios for the first time */
uint32_t num_devs_found = 0;
dmngr_err_e err = _dmngr_scan_devs (self, &num_devs_found);
......@@ -181,8 +183,12 @@ dmngr_t * dmngr_new (char *name, char *endpoint, int verbose,
return self;
err_scan_devs:
zsock_unbind (self->dealer, "%s", endpoint);
err_dealer_bind:
zsock_destroy (&self->dealer);
err_dealer_alloc:
err_hints_h_alloc:
zhash_destroy (&self->devio_info_h);
zhash_destroy (&self->devio_info_h);
err_devio_info_h_alloc:
zlist_destroy (&self->ops->sig_ops);
err_list_alloc:
......@@ -192,10 +198,6 @@ err_ops_alloc:
err_endpoint_alloc:
free (self->name);
err_name_alloc:
zsocket_destroy (self->ctx, self->dealer);
err_dealer_alloc:
zctx_destroy (&self->ctx);
err_ctx_alloc:
free (self);
err_self_alloc:
return NULL;
......@@ -210,14 +212,14 @@ dmngr_err_e dmngr_destroy (dmngr_t **self_p)
dmngr_t *self = *self_p;
/* Starting destructing by the last resource */
zsock_unbind (self->dealer, "%s", self->endpoint);
zsock_destroy (&self->dealer);
zhash_destroy (&self->hints_h);
zhash_destroy (&self->devio_info_h);
zlist_destroy (&self->ops->sig_ops);
free (self->ops);
free (self->endpoint);
free (self->name);
zsocket_destroy (self->ctx, self->dealer);
zctx_destroy (&self->ctx);
free (self);
*self_p = NULL;
......@@ -329,6 +331,8 @@ bool dmngr_is_broker_running (dmngr_t *self)
dmngr_err_e dmngr_spawn_broker (dmngr_t *self, char *broker_endp)
{
(void) broker_endp;
assert (self);
assert (broker_endp);
......@@ -345,9 +349,10 @@ dmngr_err_e dmngr_spawn_broker (dmngr_t *self, char *broker_endp)
DBE_DEBUG (DBG_DEV_MNGR | DBG_LVL_TRACE, "[dev_mngr_core] Spawning Broker ...\n");
/* Specify if broker is to be run in verbose mode or not */
char *argv_exec[] = {"mdp_broker", broker_endp, NULL};
/* char *argv_exec[] = {"mdp_broker", "-v", NULL}; */
int spawn_err = _dmngr_spawn_chld (self, "mdp_broker", argv_exec);
char *argv_exec[] = {"malamute", "-f", DEVIO_MLM_PREFIX_CFG_DIR"/"
DEVIO_MLM_CFG_DIR"/"DEVIO_MLM_CFG_FILENAME, NULL};
int spawn_err = _dmngr_spawn_chld (self, "malamute", argv_exec);
/* Just fail miserably, for now */
ASSERT_TEST(spawn_err >= 0, "Could not spawn broker",
......
......@@ -47,8 +47,7 @@ struct _dmngr_ops_t {
struct _dmngr_t {
/* General information */
zctx_t *ctx; /* zeroMQ context */
void *dealer; /* zeroMQ Dealer socket */
zsock_t *dealer; /* zeroMQ Dealer socket */
char *name; /* Identification of this dmngr instance */
char *endpoint; /* Endpoint to connect to */
int verbose; /* Print activity to stdout */
......
......@@ -16,8 +16,8 @@ PWD = $(shell pwd)
# Select board in which we will work. Options are: ml605 or afcv3
BOARD ?= ml605
INSTALL_DIR ?= /usr/local
export INSTALL_DIR
PREFIX ?= /usr/local
export PREFIX
LIBBPMCLIENT = libbpmclient
......@@ -67,7 +67,7 @@ CFLAGS_PLATFORM = -Wall -Wextra -Werror
LDFLAGS_PLATFORM =
# Libraries
LIBS = -lzmq -lczmq -lmdp
LIBS = -lzmq -lczmq -lmlm -luuid
# General library flags -L<libdir>
LFLAGS =
......@@ -188,7 +188,7 @@ all: $(TARGET_STATIC) $(TARGET_SHARED_VER) pre_inst
# Compile dynamic library
%.so.$(LIB_VER): $$($$*_OBJS) $(OBJ_REVISION)
$(CC) -shared -fPIC -Wl,-soname,$@ -o $@ $^ $(LDFLAGS)
$(CC) -shared -fPIC -Wl,-soname,$@ -o $@ $^ $(LDFLAGS) $(LIBS)
$(REVISION_NAME).o: $(REVISION_NAME).c
$(CC) $(CFLAGS) -DGIT_REVISION="\"$(GIT_REVISION)\"" \
......@@ -241,19 +241,19 @@ pre_clean:
rm -f $(header) $(CMDSEP))
install:
$(foreach lib,$(TARGET_SHARED_VER),install -m 755 $(lib) $(INSTALL_DIR)/lib $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(INSTALL_DIR)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(INSTALL_DIR)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),install -m 755 $(lib) $(INSTALL_DIR)/lib $(CMDSEP))
$(foreach header,$($(LIBBPMCLIENT)_INST_HEADERS),install -m 755 $(header) $(INSTALL_DIR)/include $(CMDSEP))
$(foreach lib,$(TARGET_SHARED_VER),install -m 755 $(lib) $(PREFIX)/lib $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(PREFIX)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(PREFIX)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),install -m 755 $(lib) $(PREFIX)/lib $(CMDSEP))
$(foreach header,$($(LIBBPMCLIENT)_INST_HEADERS),install -m 755 $(header) $(PREFIX)/include $(CMDSEP))
uninstall:
$(foreach lib,$(TARGET_SHARED),rm -f $(INSTALL_DIR)/lib/$(lib).$(LIB_VER) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(INSTALL_DIR)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(INSTALL_DIR)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),rm -f $(INSTALL_DIR)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(PREFIX)/lib/$(lib).$(LIB_VER) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(PREFIX)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(PREFIX)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),rm -f $(PREFIX)/lib/$(lib) $(CMDSEP))
$(foreach header,$(notdir $($(LIBBPMCLIENT)_INST_HEADERS)),rm -f \
$(INSTALL_DIR)/include/$(header) $(CMDSEP))
$(PREFIX)/include/$(header) $(CMDSEP))
clean: pre_clean
rm -f $(OBJS_all) $(OBJS_all:.o=.d) $(REVISION_NAME).o
......
......@@ -4,6 +4,6 @@ Project Dependencies:
libdisptable
Foreign Dependencies:
libmdp
libmlm
libczmq
libzmq
......@@ -39,6 +39,7 @@
bpm_client_err_str (err_type))
#define BPMCLIENT_DFLT_LOG_MODE "w"
#define BPMCLIENT_MLM_CONNECT_TIMEOUT 1000 /* in ms */
static bpm_client_t *_bpm_client_new (char *broker_endp, int verbose,
const char *log_file_name, const char *log_mode);
......@@ -104,7 +105,8 @@ void bpm_client_destroy (bpm_client_t **self_p)
bpm_client_t *self = *self_p;
self->acq_chan = NULL;
mdp_client_destroy (&self->mdp_client);
mlm_client_destroy (&self->mlm_client);
zuuid_destroy (&self->uuid);
free (self);
*self_p = NULL;
}
......@@ -114,6 +116,8 @@ void bpm_client_destroy (bpm_client_t **self_p)
static bpm_client_t *_bpm_client_new (char *broker_endp, int verbose,
const char *log_file_name, const char *log_mode)
{
(void) verbose;
assert (broker_endp);
/* Set logfile available for all dev_mngr and dev_io instances.
......@@ -126,16 +130,30 @@ static bpm_client_t *_bpm_client_new (char *broker_endp, int verbose,
bpm_client_t *self = zmalloc (sizeof *self);
ASSERT_ALLOC(self, err_self_alloc);
self->mdp_client = mdp_client_new (broker_endp, verbose);
ASSERT_TEST(self->mdp_client!=NULL, "Could not create MDP client",
err_mdp_client);
/* Generate UUID to work with MLM broker */
self->uuid = zuuid_new ();
ASSERT_ALLOC(self->uuid, err_uuid_alloc);
self->mlm_client = mlm_client_new ();
ASSERT_TEST(self->mlm_client!=NULL, "Could not create MLM client",
err_mlm_client);
/* Connect to broker with current UUID address in canonical form */
int rc = mlm_client_connect (self->mlm_client, broker_endp,
BPMCLIENT_MLM_CONNECT_TIMEOUT, zuuid_str_canonical (self->uuid));
ASSERT_TEST(rc >= 0, "Could not connect MLM client to broker", err_mlm_connect);
/* Initialize acquisition table */
self->acq_chan = acq_chan;
return self;
err_mdp_client:
err_mlm_connect:
mlm_client_destroy (&self->mlm_client);
err_mlm_client:
zuuid_destroy (&self->uuid);
err_uuid_alloc:
free (self);
err_self_alloc:
return NULL;
......@@ -170,10 +188,10 @@ bpm_client_err_e bpm_func_exec (bpm_client_t *self, const disp_op_t *func, char
input += in_size;
}
mdp_client_send (self->mdp_client, service, &msg);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &msg);
/* Receive report */
zmsg_t *report = mdp_client_recv (self->mdp_client, NULL, NULL);
zmsg_t *report = mlm_client_recv (self->mlm_client);
ASSERT_TEST(report != NULL, "Report received is NULL", err_msg);
/* Message is:
......@@ -267,7 +285,7 @@ bpm_client_err_e bpm_blink_leds (bpm_client_t *self, char *service, uint32_t led
ASSERT_ALLOC(request, err_send_msg_alloc, BPM_CLIENT_ERR_ALLOC);
zmsg_addmem (request, &operation, sizeof (operation));
zmsg_addmem (request, &leds, sizeof (leds));
mdp_client_send (self->mdp_client, service, &request);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &request);
err_send_msg_alloc:
return err;
......@@ -323,7 +341,7 @@ bpm_client_err_e bpm_ad9510_cfg_defaults (bpm_client_t *self, char *service)
zmsg_t *request = zmsg_new ();
ASSERT_ALLOC(request, err_send_msg_alloc, BPM_CLIENT_ERR_ALLOC);
zmsg_addmem (request, &operation, sizeof (operation));
mdp_client_send (self->mdp_client, service, &request);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &request);
err_send_msg_alloc:
return err;
......@@ -851,10 +869,10 @@ static bpm_client_err_e _bpm_data_acquire (bpm_client_t *self, char *service,
zmsg_addmem (request, &operation, sizeof (operation));
zmsg_addmem (request, &acq_req->num_samples, sizeof (acq_req->num_samples));
zmsg_addmem (request, &acq_req->chan, sizeof (acq_req->chan));
mdp_client_send (self->mdp_client, service, &request);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &request);
/* Receive report */
zmsg_t *report = mdp_client_recv (self->mdp_client, NULL, NULL);
zmsg_t *report = mlm_client_recv (self->mlm_client);
ASSERT_TEST(report != NULL, "Report received is NULL", err_null_report);
/* Message is:
......@@ -897,10 +915,10 @@ static bpm_client_err_e _bpm_check_data_acquire (bpm_client_t *self, char *servi
* frame 0: operation code */
zmsg_t *request = zmsg_new ();
zmsg_addmem (request, &operation, sizeof (operation));
mdp_client_send (self->mdp_client, service, &request);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &request);
/* Receive report */
zmsg_t *report = mdp_client_recv (self->mdp_client, NULL, NULL);
zmsg_t *report = mlm_client_recv (self->mlm_client);
ASSERT_TEST(report != NULL, "Report received is NULL", err_null_report);
/* Message is:
......@@ -951,9 +969,9 @@ static bpm_client_err_e _bpm_wait_data_acquire_timed (bpm_client_t *self, char *
bpm_client_err_e err = BPM_CLIENT_SUCCESS;
time_t start = time (NULL);
while ((time(NULL) - start)*1000 < timeout) {
if (zctx_interrupted) {
if (zsys_interrupted) {
err = BPM_CLIENT_INT;
goto bpm_zctx_interrupted;
goto bpm_zsys_interrupted;
}
err = _bpm_check_data_acquire (self, service);
......@@ -971,7 +989,7 @@ static bpm_client_err_e _bpm_wait_data_acquire_timed (bpm_client_t *self, char *
/* timeout occured */
err = BPM_CLIENT_ERR_TIMEOUT;
bpm_zctx_interrupted:
bpm_zsys_interrupted:
exit:
return err;
}
......@@ -995,10 +1013,10 @@ static bpm_client_err_e _bpm_get_data_block (bpm_client_t *self, char *service,
zmsg_addmem (request, &operation, sizeof (operation));
zmsg_addmem (request, &acq_trans->req.chan, sizeof (acq_trans->req.chan));
zmsg_addmem (request, &acq_trans->block.idx, sizeof (acq_trans->block.idx));
mdp_client_send (self->mdp_client, service, &request);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &request);
/* Receive report */
zmsg_t *report = mdp_client_recv (self->mdp_client, NULL, NULL);
zmsg_t *report = mlm_client_recv (self->mlm_client);
ASSERT_TEST(report != NULL, "Report received is NULL", err_null_report);
/* Message is:
......@@ -1103,9 +1121,9 @@ bpm_client_err_e bpm_get_curve (bpm_client_t *self, char *service,
uint32_t data_size = acq_trans->block.data_size; /* Save the original buffer size fopr later */
/* Client requisition: get data block */
for (uint32_t block_n = 0; block_n <= block_n_valid; block_n++) {
if (zctx_interrupted) {
if (zsys_interrupted) {
err = BPM_CLIENT_INT;
goto bpm_zctx_interrupted;
goto bpm_zsys_interrupted;
}
acq_trans->block.idx = block_n;
......@@ -1137,7 +1155,7 @@ bpm_client_err_e bpm_get_curve (bpm_client_t *self, char *service,
"Data curve of %u bytes was successfully acquired\n", total_bread);
err_bpm_get_data_block:
bpm_zctx_interrupted:
bpm_zsys_interrupted:
err_bpm_wait_data_acquire:
err_bpm_data_acquire:
return err;
......@@ -1255,9 +1273,9 @@ static bpm_client_err_e _bpm_acq_get_curve (bpm_client_t *self, char *service, a
/* Fill all blocks */
for (uint32_t block_n = 0; block_n <= block_n_valid; block_n++) {
if (zctx_interrupted) {
if (zsys_interrupted) {
err = BPM_CLIENT_INT;
goto bpm_zctx_interrupted;
goto bpm_zsys_interrupted;
}
acq_trans->block.idx = block_n;
......@@ -1289,7 +1307,7 @@ static bpm_client_err_e _bpm_acq_get_curve (bpm_client_t *self, char *service, a
DBE_DEBUG (DBG_LIB_CLIENT | DBG_LVL_TRACE, "[libclient] bpm_get_curve: "
"Data curve of %u bytes was successfully acquired\n", total_bread);
bpm_zctx_interrupted:
bpm_zsys_interrupted:
err_bpm_get_data_block:
return err;
}
......@@ -1330,9 +1348,9 @@ static bpm_client_err_e _bpm_full_acq (bpm_client_t *self, char *service, acq_tr
/* Client requisition: get data block */
for (uint32_t block_n = 0; block_n <= block_n_valid; block_n++) {
if (zctx_interrupted) {
if (zsys_interrupted) {
err = BPM_CLIENT_INT;
goto bpm_zctx_interrupted;
goto bpm_zsys_interrupted;
}
acq_trans->block.idx = block_n;
......@@ -1364,7 +1382,7 @@ static bpm_client_err_e _bpm_full_acq (bpm_client_t *self, char *service, acq_tr
DBE_DEBUG (DBG_LIB_CLIENT | DBG_LVL_TRACE, "[libclient] bpm_get_curve: "
"Data curve of %u bytes was successfully acquired\n", total_bread);
bpm_zctx_interrupted:
bpm_zsys_interrupted:
err_bpm_get_data_block:
err_check_data_acquire:
return err;
......@@ -1949,9 +1967,9 @@ static bpm_client_err_e _func_polling (bpm_client_t *self, char *name, char *ser
bpm_client_err_e err = BPM_CLIENT_SUCCESS;
time_t start = time(NULL);
while (time(NULL) - start < timeout) {
if (zctx_interrupted) {
if (zsys_interrupted) {
err = BPM_CLIENT_INT;
goto bpm_zctx_interrupted;
goto bpm_zsys_interrupted;
}
const disp_op_t* func = bpm_func_translate(name);
err = bpm_func_exec(self, func, service, input, output);
......@@ -1965,7 +1983,7 @@ static bpm_client_err_e _func_polling (bpm_client_t *self, char *name, char *ser
/* timeout occured */
err = BPM_CLIENT_ERR_TIMEOUT;
bpm_zctx_interrupted:
bpm_zsys_interrupted:
exit:
return err;
}
......@@ -9,7 +9,7 @@
#define _BPM_CLIENT_H_
#include <inttypes.h>
#include <mdp.h>
#include <malamute.h>
#include "bpm_client_codes.h"
#include "bpm_client_err.h"
......@@ -19,7 +19,8 @@ struct _acq_chan_t;
/* Our structure */
struct _bpm_client_t {
mdp_client_t *mdp_client; /* Majordomo client instance */
zuuid_t * uuid; /* Client UUID */
mlm_client_t *mlm_client; /* Malamute client instance */
const struct _acq_chan_t *acq_chan; /* Acquisition buffer table */
};
......
......@@ -48,7 +48,7 @@ bpm_client_err_e param_client_send_gen_rw (bpm_client_t *self, char *service,
zmsg_addmem (request, &rw, sizeof (rw));
zmsg_addmem (request, param, size);
mdp_client_send (self->mdp_client, service, &request);
mlm_client_sendto (self->mlm_client, service, NULL, NULL, 0, &request);
err_send_msg_alloc:
err_param_null:
......@@ -64,7 +64,7 @@ bpm_client_err_e param_client_recv_rw (bpm_client_t *self, char *service,
bpm_client_err_e err = BPM_CLIENT_SUCCESS;
/* Receive report */
*report = mdp_client_recv (self->mdp_client, NULL, NULL);
*report = mlm_client_recv (self->mlm_client);
ASSERT_TEST(*report != NULL, "Could not receive message", err_null_msg,
BPM_CLIENT_ERR_SERVER);
......
......@@ -9,7 +9,7 @@
#define _BPM_CLIENT_RW_PARAM_H_
#include <inttypes.h>
#include <mdp.h>
#include <malamute.h>
#include "bpm_client_codes.h"
#include "bpm_client_rw_param_codes.h"
......
#!/bin/bash
# All of our Makefile options
# Select board in which we will work. Options are: ml605 or afcv3
BOARD=afcv3
#Select if we want to compile with debug mode on. Options are: y(es) or n(o)
ERRHAND_DBG=y
# Select the minimum debug verbosity. See liberrhand file errhand_opts.h for more info.
ERRHAND_MIN_LEVEL=DBG_LVL_INFO
# Select the subsytems which will have the debug on. See liberrhand file errhand_opts.h for more info.
ERRHAND_SUBSYS_ON='"(DBG_DEV_MNGR | DBG_DEV_IO | DBG_SM_IO | DBG_LIB_CLIENT | DBG_SM_PR | DBG_SM_CH | DBG_LL_IO | DBG_HAL_UTILS)"'
# Select the FMC ADC board type. Options are: passive or active
COMMAND_LIBBPMCLIENT="\
make BOARD=${BOARD} \
ERRHAND_DBG=${ERRHAND_DBG} \
ERRHAND_MIN_LEVEL=${ERRHAND_MIN_LEVEL} \
ERRHAND_SUBSYS_ON='"${ERRHAND_SUBSYS_ON}"' && \
sudo make install"
COMMAND_ARRAY=(
"${COMMAND_LIBBPMCLIENT}"
)
for i in "${COMMAND_ARRAY[@]}"
do
echo "Executing: " $i
eval $i
# Check return value
rc=$?
if [[ $rc != 0 ]]; then
exit $rc
fi
done
......@@ -21,8 +21,8 @@ LIB_VER_MINOR = 0
LIB_VER_REVISION = 0
LIB_VER = $(LIB_VER_MAJOR).$(LIB_VER_MINOR).$(LIB_VER_REVISION)
INSTALL_DIR ?= /usr/local
export INSTALL_DIR
PREFIX ?= /usr/local
export PREFIX
# General C flags
CFLAGS = -std=gnu99 -O2 -fPIC
......@@ -156,19 +156,19 @@ all: $(TARGET_STATIC) $(TARGET_SHARED_VER)
@rm -f $*.d.tmp
install:
$(foreach lib,$(TARGET_SHARED_VER),install -m 755 $(lib) $(INSTALL_DIR)/lib $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(INSTALL_DIR)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(INSTALL_DIR)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),install -m 755 $(lib) $(INSTALL_DIR)/lib $(CMDSEP))
$(foreach header,$($(LIBBPMCLIENT)_INST_HEADERS),install -m 755 $(header) $(INSTALL_DIR)/include $(CMDSEP))
$(foreach lib,$(TARGET_SHARED_VER),install -m 755 $(lib) $(PREFIX)/lib $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(PREFIX)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),ln -sf $(lib).$(LIB_VER) $(PREFIX)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),install -m 755 $(lib) $(PREFIX)/lib $(CMDSEP))
$(foreach header,$($(LIBBPMCLIENT)_INST_HEADERS),install -m 755 $(header) $(PREFIX)/include $(CMDSEP))
uninstall:
$(foreach lib,$(TARGET_SHARED),rm -f $(INSTALL_DIR)/lib/$(lib).$(LIB_VER) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(INSTALL_DIR)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(INSTALL_DIR)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),rm -f $(INSTALL_DIR)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(PREFIX)/lib/$(lib).$(LIB_VER) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(PREFIX)/lib/$(lib) $(CMDSEP))
$(foreach lib,$(TARGET_SHARED),rm -f $(PREFIX)/lib/$(lib).$(LIB_VER_MAJOR) $(CMDSEP))
$(foreach lib,$(TARGET_STATIC),rm -f $(PREFIX)/lib/$(lib) $(CMDSEP))
$(foreach header,$(notdir $($(LIBBPMCLIENT)_INST_HEADERS)),rm -f \
$(INSTALL_DIR)/include/$(header) $(CMDSEP))
$(PREFIX)/include/$(header) $(CMDSEP))
clean:
rm -f $(OBJS_all) $(OBJS_all:.o=.d)
......
......@@ -47,8 +47,8 @@ static msg_err_e _msg_format_client_response (int disp_table_ret,
static RW_REPLY_TYPE _msg_format_reply_code (int reply_code);
static zmsg_t * _msg_create_client_response (RW_REPLY_TYPE reply_code, uint32_t reply_size,
uint32_t *data_out, bool with_data_frame);
static void _msg_send_client_response_mdp (RW_REPLY_TYPE reply_code, uint32_t reply_size,
uint32_t *data_out, bool with_data_frame, mdp_worker_t *worker,
static void _msg_send_client_response_mlm (RW_REPLY_TYPE reply_code, uint32_t reply_size,
uint32_t *data_out, bool with_data_frame, mlm_client_t *worker,
zframe_t *reply_to);
static void _msg_send_client_response_sock (RW_REPLY_TYPE reply_code, uint32_t reply_size,
uint32_t *data_out, bool with_data_frame, zframe_t *reply_to);
......@@ -63,8 +63,8 @@ msg_err_e msg_validate (void *msg, msg_type_e expected_msg_type)
return _msg_validate (msg, expected_msg_type);
}
/* Handle MDP protocol (used by SMIOs, for instance) request */
msg_err_e msg_handle_mdp_request (void *owner, void *args,
/* Handle MLM protocol (used by SMIOs, for instance) request */
msg_err_e msg_handle_mlm_request (void *owner, void *args,
disp_table_t *disp_table)
{
msg_err_e err = MSG_SUCCESS;
......@@ -97,14 +97,14 @@ msg_err_e msg_handle_mdp_request (void *owner, void *args,
err_format_response);
/* Send response back to client */
_msg_send_client_response_mdp (reply_code, disp_table_ret, ret, with_data_frame,
_msg_send_client_response_mlm (reply_code, disp_table_ret, ret, with_data_frame,
self->worker, msg->reply_to);
return err;
err_format_response:
err_get_opcode:
_msg_send_client_response_mdp (PARAM_ERR, 0, NULL, false, self->worker,
_msg_send_client_response_mlm (PARAM_ERR, 0, NULL, false, self->worker,
msg->reply_to);
err_inv_msg:
return err;
......@@ -331,16 +331,17 @@ static RW_REPLY_TYPE _msg_format_reply_code (int reply_code)
return (reply_code < 0) ? -reply_code : reply_code;
}
static void _msg_send_client_response_mdp (RW_REPLY_TYPE reply_code, uint32_t reply_size,
uint32_t *data_out, bool with_data_frame, mdp_worker_t *worker,
static void _msg_send_client_response_mlm (RW_REPLY_TYPE reply_code, uint32_t reply_size,
uint32_t *data_out, bool with_data_frame, mlm_client_t *worker,
zframe_t *reply_to)
{
(void) reply_to;
zmsg_t *msg = _msg_create_client_response (reply_code, reply_size, data_out,
with_data_frame);
ASSERT_TEST(msg != NULL, "Could format client message",
err_fmt_client_message);
mdp_worker_send (worker, &msg, reply_to);
mlm_client_sendto (worker, mlm_client_sender (worker), NULL, NULL, 0, &msg);
err_fmt_client_message:
return;
}
......
......@@ -42,8 +42,8 @@ msg_err_e msg_validate (void *msg, msg_type_e expected_msg_type);
* message checking */
msg_err_e msg_check_gen_zmq_args (const disp_op_t *disp_op, zmsg_t *zmq_msg);
/* Handle MDP protocol (used by SMIOs, for instance) request */
msg_err_e msg_handle_mdp_request (void *owner, void *args,
/* Handle MLM protocol (used by SMIOs, for instance) request */
msg_err_e msg_handle_mlm_request (void *owner, void *args,
disp_table_t *disp_table);
/* Handle regular protocol (used by DEVIOs, for instance) request */
msg_err_e msg_handle_sock_request (void *owner, void *args,
......
......@@ -116,7 +116,7 @@ ssize_t thsafe_zmq_client_read_block (smio_t *self, uint64_t offs, size_t size,
debug_log_print_zmq_msg (send_msg);
#endif
zerr = zmsg_send (&send_msg, self->pipe);
zerr = zmsg_send (&send_msg, self->pipe_msg);
ASSERT_TEST(zerr == 0, "Could not send message", err_send_msg);
/* Message is:
......@@ -164,7 +164,7 @@ ssize_t thsafe_zmq_client_write_block (smio_t *self, uint64_t offs, size_t size,
debug_log_print_zmq_msg (send_msg);
#endif
zerr = zmsg_send (&send_msg, self->pipe);
zerr = zmsg_send (&send_msg, self->pipe_msg);
ASSERT_TEST(zerr == 0, "Could not send message", err_send_msg);
/* Message is:
......@@ -242,7 +242,7 @@ int _thsafe_zmq_client_open_release (smio_t *self, llio_endpoint_t *endpoint, ui
#ifdef LOCAL_MSG_DBG
debug_log_print_zmq_msg (send_msg);
#endif
zerr = zmsg_send (&send_msg, self->pipe);
zerr = zmsg_send (&send_msg, self->pipe_msg);
ASSERT_TEST(zerr == 0, "Could not send message", err_send_msg);
/* Message is:
......@@ -325,7 +325,7 @@ static ssize_t _thsafe_zmq_client_read_generic (smio_t *self, uint64_t offs, uin
debug_log_print_zmq_msg (send_msg);
#endif
zerr = zmsg_send (&send_msg, self->pipe);
zerr = zmsg_send (&send_msg, self->pipe_msg);
ASSERT_TEST(zerr == 0, "Could not send message", err_send_msg);
/* Message is:
......@@ -389,7 +389,7 @@ static ssize_t _thsafe_zmq_client_write_generic (smio_t *self, uint64_t offs, co
debug_log_print_zmq_msg (send_msg);
#endif
zerr = zmsg_send (&send_msg, self->pipe);
zerr = zmsg_send (&send_msg, self->pipe_msg);
ASSERT_TEST(zerr == 0, "Could not send message",
err_send_msg);
......@@ -422,7 +422,7 @@ static zmsg_t *_thsafe_zmq_client_recv_confirmation (smio_t *self)
assert (self);
/* Wait for response */
zmsg_t *recv_msg = zmsg_recv (self->pipe);
zmsg_t *recv_msg = zmsg_recv (self->pipe_msg);
/* Do not pop the message, just set a cursor to it */
zframe_t *reply_frame = zmsg_first (recv_msg);
......
......@@ -47,6 +47,7 @@ smio_err_e afc_diag_config_defaults (char *broker_endp, char *service,
bpm_client_t *config_client = bpm_client_new_log_mode (broker_endp, 0,
log_file_name, SMIO_AFC_DIAG_LIBBPMCLIENT_LOG_MODE);
ASSERT_ALLOC(config_client, err_alloc_client);
uint32_t card_slot = 0;
client_err = bpm_get_afc_diag_card_slot (config_client, service, &card_slot);
......@@ -60,5 +61,8 @@ smio_err_e afc_diag_config_defaults (char *broker_endp, char *service,
err_param_get:
bpm_client_destroy (&config_client);
err_alloc_client:
DBE_DEBUG (DBG_SM_IO | DBG_LVL_INFO, "[sm_io:afc_diag_defaults] Exiting Config thread %s\n",
service);
return err;
}
......@@ -48,6 +48,7 @@ smio_err_e dsp_config_defaults (char *broker_endp, char *service,
bpm_client_t *config_client = bpm_client_new_log_mode (broker_endp, 0,
log_file_name, SMIO_DSP_LIBBPMCLIENT_LOG_MODE);
ASSERT_ALLOC(config_client, err_alloc_client);
client_err = bpm_set_kx (config_client, service, DSP_DFLT_KX_VAL);
ASSERT_TEST(client_err == BPM_CLIENT_SUCCESS, "Could not set KX value",
......@@ -75,5 +76,8 @@ smio_err_e dsp_config_defaults (char *broker_endp, char *service,
err_param_set:
bpm_client_destroy (&config_client);
err_alloc_client:
DBE_DEBUG (DBG_SM_IO | DBG_LVL_INFO, "[sm_io:dsp_defaults] Exiting Config thread %s\n",
service);
return err;
}
......@@ -48,6 +48,7 @@ smio_err_e fmc130m_4ch_config_defaults (char *broker_endp, char *service,
bpm_client_t *config_client = bpm_client_new_log_mode (broker_endp, 0,
log_file_name, SMIO_FMC130M_4CH_LIBBPMCLIENT_LOG_MODE);
ASSERT_ALLOC(config_client, err_alloc_client);
client_err = bpm_set_fmc_pll_function (config_client, service, FMC130M_4CH_DFLT_PLL_FUNC);
ASSERT_TEST(client_err == BPM_CLIENT_SUCCESS, "Could not set FMC PLL function",
......@@ -80,5 +81,8 @@ smio_err_e fmc130m_4ch_config_defaults (char *broker_endp, char *service,
err_param_set:
bpm_client_destroy (&config_client);
err_alloc_client:
DBE_DEBUG (DBG_SM_IO | DBG_LVL_INFO, "[sm_io:fmc130m_4ch_defaults] Exiting Config thread %s\n",
service);
return err;
}
......@@ -47,6 +47,7 @@ smio_err_e rffe_config_defaults (char *broker_endp, char *service,
bpm_client_t *config_client = bpm_client_new_log_mode (broker_endp, 0,
log_file_name, SMIO_RFFE_LIBBPMCLIENT_LOG_MODE);
ASSERT_ALLOC(config_client, err_alloc_client);
client_err = bpm_set_rffe_sw (config_client, service, RFFE_DFLT_SW);
ASSERT_TEST(client_err == BPM_CLIENT_SUCCESS, "Could not set RFFE switching value",
......@@ -62,5 +63,8 @@ smio_err_e rffe_config_defaults (char *broker_endp, char *service,
err_param_set:
bpm_client_destroy (&config_client);
err_alloc_client:
DBE_DEBUG (DBG_SM_IO | DBG_LVL_INFO, "[sm_io:rffe_defaults] Exiting Config thread %s\n",
service);
return err;
}
......@@ -48,6 +48,7 @@ smio_err_e swap_config_defaults (char *broker_endp, char *service,
bpm_client_t *config_client = bpm_client_new_log_mode (broker_endp, 0,
log_file_name, SMIO_SWAP_LIBBPMCLIENT_LOG_MODE);
ASSERT_ALLOC(config_client, err_alloc_client);
client_err = bpm_set_sw (config_client, service, SWAP_DFLT_SW);
ASSERT_TEST(client_err == BPM_CLIENT_SUCCESS, "Could not set switching state",
......@@ -79,5 +80,8 @@ smio_err_e swap_config_defaults (char *broker_endp, char *service,
err_param_set:
bpm_client_destroy (&config_client);
err_alloc_client:
DBE_DEBUG (DBG_SM_IO | DBG_LVL_INFO, "[sm_io:swap_defaults] Exiting Config thread %s\n",
service);
return err;
}
......@@ -5,13 +5,8 @@
* Released according to the GNU LGPL, version 3 or any later version.
*/
#ifndef _SM_PR_I2C_DEFAULTS_H_
#define _SM_PR_I2C_DEFAULTS_H_
#define SM_PR_I2C_DFLT_SYS_FREQ 100000000 /* 100 MHz */
#define SM_PR_I2C_DFLT_I2C_FREQ 100000 /* 100 KHz */
#define SM_PR_I2C_DFLT_I2C_CONFIG 0x0 /* Nothing for now */
#define SM_PR_I2C_DFLT_I2C_SLEEP_USECS 10000 /* 10 ms sleep between read/writes */
#ifndef _SM_PR_BSMP_DEFAULTS_H_
#define _SM_PR_BSMP_DEFAULTS_H_
#endif
......@@ -11,7 +11,6 @@
#define SM_PR_I2C_DFLT_SYS_FREQ 100000000 /* 100 MHz */
#define SM_PR_I2C_DFLT_I2C_FREQ 100000 /* 100 KHz */
#define SM_PR_I2C_DFLT_I2C_CONFIG 0x0 /* Nothing for now */
#define SM_PR_I2C_DFLT_I2C_SLEEP_USECS 10000 /* 10 ms sleep between read/writes */
#endif
......@@ -6,7 +6,7 @@
*/
#include <inttypes.h>
#include <mdp.h>
#include <malamute.h>
#include "varg_macros.h"
#include "rw_param_codes.h"
#include "msg.h"
......
......@@ -147,7 +147,7 @@ static smio_err_e _smio_do_op (void *owner, void *msg)
err_do_op);
disp_table_t *disp_table = self->exp_ops_dtable;
msg_err_e merr = msg_handle_mdp_request (owner, msg, disp_table);
msg_err_e merr = msg_handle_mlm_request (owner, msg, disp_table);
ASSERT_TEST (merr == MSG_SUCCESS, "Error handling request", err_hand_req,
SMIO_ERR_MSG_NOT_SUPP /* returning a more meaningful error? */);
......
......@@ -11,6 +11,7 @@
#include <inttypes.h>
#include <sys/types.h>
#include <stdbool.h>
#include <malamute.h>
/* #include "dev_io_core.h" */
#include "ll_io.h"
......@@ -20,11 +21,11 @@
#include "sm_io_exports.h"
#include "msg.h"
#include "disp_table.h"
#include "mdp.h"
/* SMIO sockets IDs */
#define SMIO_PIPE_SOCK 0
#define SMIO_END_SOCK 1
#define SMIO_PIPE_MGMT_SOCK 0
#define SMIO_MLM_SOCK 1
#define SMIO_END_SOCK 2
#define SMIO_SOCKS_NUM SMIO_END_SOCK
struct _devio_t;
......@@ -42,13 +43,13 @@ struct _smio_t {
char *name; /* Identification of this sm_io instance */
char *service; /* Exported service name */
/* int verbose; */ /* Print activity to stdout */
mdp_worker_t *worker; /* zeroMQ Majordomo worker */
mlm_client_t *worker; /* zeroMQ Malamute client (worker) */
struct _devio_t *parent; /* Pointer back to parent dev_io */
void *smio_handler; /* Generic pointer to a device handler. This
must be cast to a specific type by the
devices functions */
zctx_t *ctx; /* Our context */
void *pipe; /* Pipe back to parent to exchange messages */
zsock_t *pipe_mgmt; /* Pipe back to parent to exchange Management messages */
zsock_t *pipe_msg; /* Pipe back to parent to exchange Payload messages */
/* Specific SMIO operations dispatch table for exported operations */
disp_table_t *exp_ops_dtable;
......
This diff is collapsed.
......@@ -63,6 +63,7 @@ typedef struct _smio_bootstrap_ops_t smio_bootstrap_ops_t;
struct _th_boot_args_t {
struct _devio_t *parent; /* Pointer back to devo parent */
uint32_t smio_id; /* ID of the SMIO instance */
zsock_t *pipe_msg; /* Message PIPE to actor */
char *broker; /* Endpoint to connect to broker */
char *service; /* (part of) the service name to be exported */
int verbose; /* Print trace information to stdout*/
......@@ -86,10 +87,10 @@ typedef struct _th_config_args_t th_config_args_t;
/************************************************************/
/************************ Our methods ***********************/
/************************************************************/
void smio_startup (void *args, zctx_t *ctx, void *pipe);
void *smio_config_defaults (void *args);
struct _smio_t *smio_new (th_boot_args_t *args, struct _zctx_t *ctx,
void *pipe, char *service);
void smio_startup (zsock_t *pipe, void *args);
void smio_config_defaults (zsock_t *pipe, void *args);
struct _smio_t *smio_new (th_boot_args_t* args, zsock_t *pipe_mgmt,
zsock_t *pipe_msg, char *service);
smio_err_e smio_destroy (struct _smio_t **self_p);
smio_err_e smio_loop (struct _smio_t *self);
......
......@@ -21,8 +21,10 @@ static const char *smio_err [SMIO_ERR_END] =
[SMIO_ERR_EXPORT_OP] = "Could not export function",
[SMIO_ERR_CONFIG_DFLT] = "Could not configure the default values",
[SMIO_ERR_MSG_NOT_SUPP] = "Exported message not supported",
[SMIO_ERR_BAD_MSG] = "Malformed message received",
[SMIO_ERR_INTERRUPTED_POLLER] = "Poller interrupted. zeroMQ context was "
"terminated or received interrupt signal"
"terminated or received interrupt signal",
[SMIO_ERR_INV_SOCKET] = "Invalid socket reference"
};
/* Convert enumeration type to string */
......
......@@ -22,8 +22,10 @@ enum _smio_err_e
SMIO_ERR_EXPORT_OP, /* Error exporting function */
SMIO_ERR_CONFIG_DFLT, /* Error configuring the default values */
SMIO_ERR_MSG_NOT_SUPP, /* Exported message not supported */
SMIO_ERR_BAD_MSG, /* Malformed message received */
SMIO_ERR_INTERRUPTED_POLLER, /* SMIO Poller interrupted. zeroMQ context was
terminated or received interrupt signal */
SMIO_ERR_INV_SOCKET, /* Invalid socket reference */
SMIO_ERR_END /* End of enum marker */
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment