Commit 0ccb4338 authored by Lucas Russo's avatar Lucas Russo

examples/*: add BPM and Board nubmer to CLI

parent e2b1b56e
......@@ -12,8 +12,14 @@
#define DFLT_BIND_FOLDER "/tmp/bpm"
#define DEFAULT_NUM_SAMPLES 4096
#define DEFAULT_CHAN_NUM 0
#define DFLT_NUM_SAMPLES 4096
#define DFLT_CHAN_NUM 0
#define DFLT_BPM_NUMBER 0
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
/* Arbitrary hard limits */
#define MAX_NUM_SAMPLES (1 << 28)
......@@ -22,7 +28,7 @@
void print_data (uint32_t chan, uint32_t *data, uint32_t size)
{
/* FIXME: Make it more generic */
if (chan == 0) {
if (chan == 0 || chan == 9) {
int16_t *raw_data16 = (int16_t *) data;
for (uint32_t i = 0; i < (size/sizeof(uint16_t)) / 4; i++) {
if (zctx_interrupted) {
......@@ -59,6 +65,7 @@ void print_help (char *program_name)
"\t-v Verbose output\n"
"\t-b <broker_endpoint> Broker endpoint\n"
"\t-s <num_samples_str> Number of samples\n"
"\t-board <AMC board = [0|1|2|3|4|5]>\n"
"\t-ch <chan_str> Acquisition channel\n"
, program_name);
}
......@@ -68,6 +75,7 @@ int main (int argc, char *argv [])
int verbose = 0;
char *broker_endp = NULL;
char *num_samples_str = NULL;
char *board_number_str = NULL;
char *chan_str = NULL;
char **str_p = NULL;
......@@ -99,6 +107,9 @@ int main (int argc, char *argv [])
else if (streq (argv[i], "-ch")) { /* ch: channel */
str_p = &chan_str;
}
else if (streq (argv[i], "-board")) { /* board_number: board number */
str_p = &board_number_str;
}
/* Fallout for options with parameters */
else {
*str_p = strdup (argv[i]);
......@@ -116,8 +127,8 @@ int main (int argc, char *argv [])
uint32_t num_samples;
if (num_samples_str == NULL) {
fprintf (stderr, "[client:acq]: Setting default value to number of samples: %u\n",
DEFAULT_NUM_SAMPLES);
num_samples = DEFAULT_NUM_SAMPLES;
DFLT_NUM_SAMPLES);
num_samples = DFLT_NUM_SAMPLES;
}
else {
num_samples = strtoul (num_samples_str, NULL, 10);
......@@ -128,13 +139,13 @@ int main (int argc, char *argv [])
num_samples = MAX_NUM_SAMPLES;
}
}
fprintf (stdout, "[client:acq]: num_samples = %u\n", num_samples);
//fprintf (stdout, "[client:acq]: num_samples = %u\n", num_samples);
/* Set default channel */
uint32_t chan;
if (chan_str == NULL) {
fprintf (stderr, "[client:acq]: Setting default value to 'chan'\n");
chan = DEFAULT_CHAN_NUM;
chan = DFLT_CHAN_NUM;
}
else {
chan = strtoul (chan_str, NULL, 10);
......@@ -145,7 +156,27 @@ int main (int argc, char *argv [])
chan = MAX_NUM_CHANS;
}
}
fprintf (stdout, "[client:acq]: chan = %u\n", chan);
//fprintf (stdout, "[client:acq]: chan = %u\n", chan);
/* 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);
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;
}
}
char service[50];
sprintf (service, "BPM%u:DEVIO:ACQ0", board_number);
uint32_t data_size = num_samples*acq_chan[chan].sample_size;
uint32_t *data = (uint32_t *) zmalloc (data_size*sizeof (uint8_t));
......@@ -158,20 +189,24 @@ int main (int argc, char *argv [])
.data_size = data_size,
}
};
bpm_client_err_e err = bpm_get_curve (bpm_client, "BPM0:DEVIO:ACQ0", &acq_trans,
bpm_client_err_e err = bpm_get_curve (bpm_client, service, &acq_trans,
5000);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_curve failed\n");
goto err_bpm_get_curve;
}
fprintf (stdout, "[client:acq]: bpm_get_curve was successfully executed\n");
//fprintf (stdout, "[client:acq]: bpm_get_curve was successfully executed\n");
fprintf (stdout, "clear\n");
print_data (chan, data, acq_trans.block.bytes_read);
err_bpm_get_curve:
str_p = &chan_str;
free (*str_p);
chan_str = NULL;
str_p = &board_number_str;
free (*str_p);
board_number_str = NULL;
str_p = &num_samples_str;
free (*str_p);
num_samples_str = NULL;
......
/*
* Simple example demonstrating the communication between
* a client and the FPGA device
*/
#include <mdp.h>
#include <czmq.h>
#include <inttypes.h>
#include <bpm_client.h>
#define DFLT_BIND_FOLDER "/tmp/bpm"
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);
}
int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char **str_p = NULL;
if (argc < 2) {
print_help (argv[0]);
exit (1);
}
/* FIXME: This is rather buggy! */
/* Simple handling of command-line options. This should be done
* with getopt, for instance*/
int i;
for (i = 1; i < argc; i++)
{
if (streq(argv[i], "-v")) {
verbose = 1;
}
else if (streq(argv[i], "-h"))
{
print_help (argv [0]);
exit (1);
}
else if (streq (argv[i], "-b")) {
str_p = &broker_endp;
}
/* Fallout for options with parameters */
else {
*str_p = strdup (argv[i]);
}
}
/* Set default broker address */
if (broker_endp == NULL) {
broker_endp = strdup ("ipc://"DFLT_BIND_FOLDER);
}
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
uint32_t adc_data;
bpm_client_err_e err = bpm_get_adc_data0 (bpm_client, "BPM0:DEVIO:FMC130M_4CH1",
&adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data0 failed\n");
goto err_get_adc_data;
}
fprintf (stdout, "[client:adc_data]: data0 = %d\n", (int16_t) adc_data);
err = bpm_get_adc_data1 (bpm_client, "BPM0:DEVIO:FMC130M_4CH1",
&adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data1 failed\n");
goto err_get_adc_data;
}
fprintf (stdout, "[client:adc_data]: data1 = %d\n", (int16_t) adc_data);
err = bpm_get_adc_data2 (bpm_client, "BPM0:DEVIO:FMC130M_4CH1",
&adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data2 failed\n");
goto err_get_adc_data;
}
fprintf (stdout, "[client:adc_data]: data2 = %d\n", (int16_t) adc_data);
err = bpm_get_adc_data3 (bpm_client, "BPM0:DEVIO:FMC130M_4CH1",
&adc_data);
if (err != BPM_CLIENT_SUCCESS){
fprintf (stderr, "[client:acq]: bpm_get_adc_data3 failed\n");
goto err_get_adc_data;
}
fprintf (stdout, "[client:adc_data]: data3 = %d\n", (int16_t) adc_data);
err_get_adc_data:
bpm_client_destroy (&bpm_client);
str_p = &broker_endp;
free (*str_p);
broker_endp = NULL;
return 0;
}
......@@ -13,11 +13,20 @@
#define DFLT_BIND_FOLDER "/tmp/bpm"
/* Default value definitions */
#define DEFAULT_ADC_DLY_VALUE 10
#define DFLT_BPM_NUMBER 0
#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
#define DEFAULT_CHAN_NUM 0
#define DFLT_CHAN_NUM 0
#define MAX_CHAN_NUM 3 /* 0-3 */
#define DEFAULT_LINES_NUM 1 /* DATA */
#define DFLT_LINES_NUM 1 /* DATA */
#define MAX_LINES_NUM 3 /* DATA + CLOCK */
void print_help (char *program_name)
......@@ -26,6 +35,8 @@ void print_help (char *program_name)
"\t-h This help message\n"
"\t-v Verbose output\n"
"\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"
"\t-ch <channel> ADC channel\n"
"\t-lines <delay_lines> ADC delay lines (1 = data, 2 = clock, 3 = both)\n"
"\t-val <delay_value> ADC delay value (0-31)\n"
......@@ -36,6 +47,8 @@ int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char *board_number_str = NULL;
char *bpm_number_str = NULL;
char *chan_str = NULL;
char *lines_str = NULL;
char *dly_val_str = NULL;
......@@ -63,6 +76,14 @@ int main (int argc, char *argv [])
else if (streq (argv[i], "-b")) {
str_p = &broker_endp;
}
else if (streq(argv[i], "-board"))
{
str_p = &board_number_str;
}
else if (streq(argv[i], "-bpm"))
{
str_p = &bpm_number_str;
}
else if (streq (argv[i], "-ch")) { /* ch: channel */
str_p = &chan_str;
}
......@@ -83,14 +104,46 @@ 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 board number */
uint32_t board_number;
if (board_number_str == NULL) {
fprintf (stderr, "[client:leds]: 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);
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 */
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;
}
}
/* Set default channel */
uint32_t chan;
if (chan_str == NULL) {
fprintf (stderr, "[client:adc_dly]: Setting default value to: %u\n",
DEFAULT_CHAN_NUM);
chan = DEFAULT_CHAN_NUM;
DFLT_CHAN_NUM);
chan = DFLT_CHAN_NUM;
}
else {
chan = strtoul (chan_str, NULL, 10);
......@@ -107,8 +160,8 @@ int main (int argc, char *argv [])
uint32_t lines = 0;
if (lines_str == NULL) {
fprintf (stderr, "[client:adc_dly]: Setting default ADC lines to: %u\n",
DEFAULT_LINES_NUM);
lines = DEFAULT_LINES_NUM;
DFLT_LINES_NUM);
lines = DFLT_LINES_NUM;
}
else {
lines = strtoul (lines_str, NULL, 10);
......@@ -125,8 +178,8 @@ int main (int argc, char *argv [])
uint32_t dly_val = 0;
if (dly_val_str == NULL) {
fprintf (stderr, "[client:adc_dly]: Setting default ADC delay value to: %u\n",
DEFAULT_ADC_DLY_VALUE);
dly_val = DEFAULT_ADC_DLY_VALUE;
DFLT_ADC_DLY_VALUE);
dly_val = DFLT_ADC_DLY_VALUE;
}
else {
dly_val = strtoul (dly_val_str, NULL, 10);
......@@ -139,26 +192,39 @@ int main (int argc, char *argv [])
}
fprintf (stdout, "[client:adc_dly]: ADC delay value = %u\n", dly_val);
/* Call the appropriate delay fucntion. FIXME: the case construct is
char service[50];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
/* Call the appropriate delay function. FIXME: the case construct is
* not generic nor expansible */
switch(chan) {
case 0:
bpm_set_adc_dly0 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", lines, dly_val);
bpm_set_adc_dly0 (bpm_client, service, lines, dly_val);
break;
case 1:
bpm_set_adc_dly1 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", lines, dly_val);
bpm_set_adc_dly1 (bpm_client, service, lines, dly_val);
break;
case 2:
bpm_set_adc_dly2 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", lines, dly_val);
bpm_set_adc_dly2 (bpm_client, service, lines, dly_val);
break;
case 3:
bpm_set_adc_dly3 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", lines, dly_val);
bpm_set_adc_dly3 (bpm_client, service, lines, dly_val);
break;
default:
bpm_set_adc_dly0 (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", lines, dly_val);
bpm_set_adc_dly0 (bpm_client, service, lines, dly_val);
break;
}
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 = &chan_str;
free (*str_p);
chan_str = NULL;
......@@ -168,7 +234,6 @@ int main (int argc, char *argv [])
str_p = &broker_endp;
free (*str_p);
broker_endp = NULL;
bpm_client_destroy (&bpm_client);
return 0;
}
......@@ -107,7 +107,7 @@ int main (int argc, char *argv [])
fprintf (stdout, "[client:dsp]: bpm_get_ky = %u was successfully executed\n",
ky_get);
uint32_t ksum_set = 0x0FFFFFF; // 1.0 FIX25_24;
uint32_t ksum_set = 0x7FFFFF; // 1.0 FIX25_24;
fprintf (stdout, "[client:dsp]: ksum = %u\n", ksum_set);
err = bpm_set_ksum (bpm_client, "BPM0:DEVIO:DSP0", ksum_set);
if (err != BPM_CLIENT_SUCCESS){
......
......@@ -11,11 +11,19 @@
#define DFLT_BIND_FOLDER "/tmp/bpm"
#define DFLT_BPM_NUMBER 0
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
void print_help (char *program_name)
{
printf( "Usage: %s [options]\n"
"\t-h This help message\n"
"\t-v Verbose output\n"
"\t-board <AMC board = [0|1|2|3|4|5]>\n"
"\t-bpm <BPM number = [0|1]>\n"
"\t-b <broker_endpoint> Broker endpoint\n", program_name);
}
......@@ -23,7 +31,9 @@ int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char **str_p;
char *board_number_str = NULL;
char *bpm_number_str = NULL;
char **str_p = NULL;
if (argc < 2) {
print_help (argv[0]);
......@@ -44,6 +54,14 @@ int main (int argc, char *argv [])
print_help (argv [0]);
exit (1);
}
else if (streq(argv[i], "-board"))
{
str_p = &board_number_str;
}
else if (streq(argv[i], "-bpm"))
{
str_p = &bpm_number_str;
}
else if (streq (argv[i], "-b")) {
str_p = &broker_endp;
}
......@@ -58,6 +76,43 @@ 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:leds]: 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);
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 */
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];
sprintf (service, "BPM%u:DEVIO:FMC130M_4CH%u", board_number, bpm_number);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
for (i = 0; i < 32768; ++i) {
......@@ -68,15 +123,22 @@ int main (int argc, char *argv [])
break;
}
bpm_blink_leds (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", leds);
usleep (80000);
bpm_blink_leds (bpm_client, service, leds);
usleep (400000);
leds <<= 1;
}
}
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;
}
......@@ -10,14 +10,23 @@
#include <bpm_client.h>
#define DFLT_BIND_FOLDER "/tmp/bpm"
#define DEFAULT_TEST_DATA_EN 0
#define DFLT_TEST_DATA_EN 0
#define MAX_TEST_DATA_EN 1
#define DFLT_BPM_NUMBER 0
#define MAX_BPM_NUMBER 1
#define DFLT_BOARD_NUMBER 0
#define MAX_BOARD_NUMBER 5
void print_help (char *program_name)
{
printf( "Usage: %s [options]\n"
"\t-h This help message\n"
"\t-v Verbose output\n"
"\t-board <AMC board = [0|1|2|3|4|5]>\n"
"\t-bpm <BPM number = [0|1]>\n"
"\t-e <[0|1]> Enable or disable TEST data\n"
"\t-b <broker_endpoint> Broker endpoint\n", program_name);
}
......@@ -26,6 +35,8 @@ int main (int argc, char *argv [])
{
int verbose = 0;
char *broker_endp = NULL;
char *board_number_str = NULL;
char *bpm_number_str = NULL;
char *test_data_en_str = NULL;
char **str_p = NULL;
......@@ -48,6 +59,14 @@ int main (int argc, char *argv [])
print_help (argv [0]);
exit (1);
}
else if (streq(argv[i], "-board"))
{
str_p = &board_number_str;
}
else if (streq(argv[i], "-bpm"))
{
str_p = &bpm_number_str;
}
else if (streq (argv[i], "-e")) {
str_p = &test_data_en_str;
}
......@@ -65,11 +84,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:leds]: 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);
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 */
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;
}
}
/* Set test data enable default */
uint32_t test_data_en;
if (test_data_en_str == NULL) {
fprintf (stderr, "[client:test_data_en]: Setting test DATA enable to 0\n");
test_data_en = DEFAULT_TEST_DATA_EN;
test_data_en = DFLT_TEST_DATA_EN;
}
else {
test_data_en = strtoul (test_data_en_str, NULL, 10);
......@@ -82,12 +135,23 @@ 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);
bpm_client_t *bpm_client = bpm_client_new (broker_endp, verbose, NULL);
/* Test data enable */
bpm_set_adc_test_data_en (bpm_client, "BPM0:DEVIO:FMC130M_4CH0", test_data_en);
bpm_set_adc_test_data_en (bpm_client, service, test_data_en);
/* Cleanup */
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 = &test_data_en_str;
free (*str_p);
test_data_en_str = NULL;
......
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