From 520eb3b01a410b70543b6e870174afe4134fefc9 Mon Sep 17 00:00:00 2001 From: Lucas Russo <lerwys@gmail.com> Date: Fri, 6 May 2016 16:07:54 -0300 Subject: [PATCH] examples/*: add FMC250M Sleep function example --- examples/fmc250m_4ch_sleep.c | 159 +++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 examples/fmc250m_4ch_sleep.c diff --git a/examples/fmc250m_4ch_sleep.c b/examples/fmc250m_4ch_sleep.c new file mode 100644 index 00000000..332cf80e --- /dev/null +++ b/examples/fmc250m_4ch_sleep.c @@ -0,0 +1,159 @@ +/* + * Controlling the FMC 250 MSPS leds + */ + +#include <inttypes.h> +#include <bpm_client.h> + +#define DFLT_BIND_FOLDER "/tmp/bpm" + +#define DFLT_BPM_NUMBER 0 +#define MAX_BPM_NUMBER 1 + +#define DFLT_BOARD_NUMBER 0 + +#define DFLT_TEST_MODE 0 +#define MAX_TEST_MODE 1 + +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-sleep_adcs <Test mode = [0-15]>\n" + "\t-b <broker_endpoint> Broker endpoint\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 *sleep_adcs_str = 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], "-board")) + { + str_p = &board_number_str; + } + else if (streq(argv[i], "-bpm")) + { + str_p = &bpm_number_str; + } + else if (streq(argv[i], "-sleep_adcs")) + { + str_p = &sleep_adcs_str; + } + 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); + } + + /* Set default board number */ + uint32_t board_number; + if (board_number_str == NULL) { + fprintf (stderr, "[client:fmc250m_sleep_adcs]: 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:fmc250m_sleep_adcs]: 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:fmc250m_sleep_adcs]: BPM number too big! Defaulting to: %u\n", + MAX_BPM_NUMBER); + bpm_number = MAX_BPM_NUMBER; + } + } + + /* Set default bpm number */ + uint32_t sleep_adcs; + if (sleep_adcs_str == NULL) { + fprintf (stderr, "[client:fmc250m_sleep_adcs]: Setting default value to test mode: %u\n", + DFLT_TEST_MODE); + sleep_adcs = DFLT_TEST_MODE; + } + else { + sleep_adcs = strtoul (sleep_adcs_str, NULL, 10); + + if (sleep_adcs > MAX_TEST_MODE) { + fprintf (stderr, "[client:fmc250m_sleep_adcs]: Test mode too big! Defaulting to: %u\n", + MAX_TEST_MODE); + sleep_adcs = MAX_TEST_MODE; + } + } + + char service[50]; + snprintf (service, sizeof (service), "BPM%u:DEVIO:FMC250M_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:fmc250m_sleep_adcs]: bpm_client could be created\n"); + goto err_bpm_client_new; + } + + bpm_client_err_e err = bpm_set_sleep_adcs (bpm_client, service, sleep_adcs); + if (err != BPM_CLIENT_SUCCESS) { + fprintf (stderr, "[client:fmc250_sleep_adcs]: bpm_set_sleep_adcs error\n"); + goto err_bpm_client_new; + } + +err_bpm_client_new: + bpm_client_destroy (&bpm_client); + + str_p = &sleep_adcs_str; + free (*str_p); + sleep_adcs_str = NULL; + 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; +} -- GitLab