+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <signal.h>
-#include <limits.h>
-
-#include <libgen.h>
-#include <unistd.h>
-#include <stdint.h>
-#include <trbnet.h>
-#include <trberror.h>
-
-#define bufferSize 16385
-
-/* ------ MAIN ---------------------------------------------------------- */
-
-static FILE *hldFile = NULL;
-static unsigned int evtCounter = 0;
-
-static void atexit0()
-{
- if (hldFile != NULL) {
- fclose(hldFile);
- }
-
- fprintf(stderr, "%d Triggers were send\n", evtCounter);
-}
-
-static void sigHandler(int sig)
-{
- if (sig == SIGTERM) fprintf(stderr, "caught SIGTERM\n");
- if (sig == SIGINT) fprintf(stderr, "caught SIGINT\n");
-
- exit(128 + sig);
-}
-
-void usage(const char *progName)
-{
- printf("Usage: %s [-h] [-d level] [-f outFileName] [-n numEvents] "
- "[-t triggerType] [-i input]\n",
- progName);
- printf("Options:\n");
- printf(" -h give this help\n");
- printf(" -d turn on Debugging Information\n");
- printf(" -f write to outFileName\n");
- printf(" -n process numEvents triggers\n");
- printf(" -t send triggerType (default 0)\n");
- printf(" -i use triggerInput input(default 0)\n");
-}
-
-int main(int argc, char ** argv)
-{
- char hldFileName[256] = "pulser.hld";
- uint16_t trgNumber = 0;
- uint8_t triggerType = 0;
- uint8_t input = 0;
- unsigned int numEvts = UINT_MAX;
- uint32_t buffer[bufferSize];
- sigset_t blockSet;
- int size;
- int writeToStdout = 0;
- int i;
-
- trb_debug = 0;
-
- /* Parse Arguments */
- while ((i = getopt(argc, argv, "+hd:f:n:t:i:")) != -1) {
- switch (i) {
- case '?':
- usage(basename(argv[0]));
- exit(EXIT_FAILURE);
- case 'h':
- usage(basename(argv[0]));
- exit(EXIT_SUCCESS);
- case 'd':
- trb_debug = strtoul(optarg, NULL, 0);
- break;
- case 'f':
- strncpy(hldFileName, optarg, 256);
- break;
- case 'n':
- numEvts = strtoul(optarg, NULL, 0);
- break;
- case 't':
- triggerType = (uint8_t)strtoul(optarg, NULL, 0);
- break;
- case 'i':
- input = (uint8_t)strtoul(optarg, NULL, 0);
- break;
- default:
- break;
- }
- }
-
- /* open port */
- init_ports();
-
- /* Open HLD-File */
- if (strncmp(hldFileName, "stdout", 256) != 0) {
- hldFile = fopen(hldFileName, "w");
- if (hldFile == NULL) {
- perror("File Open");
- }
- } else {
- writeToStdout = 1;
- }
-
- /* Set Signalhandler */
- atexit(atexit0);
- signal(SIGINT, sigHandler);
- signal(SIGTERM, sigHandler);
-
- /* Set signal mask for blocking */
- sigemptyset(&blockSet);
- sigaddset(&blockSet, SIGINT);
- sigaddset(&blockSet, SIGTERM);
-
- /* Loop Triggers */
- while(evtCounter < numEvts) {
- unsigned int len;
-
- /* Block signals */
- sigprocmask(SIG_BLOCK, &blockSet, NULL);
-
- /* Send Trigger and get Data */
- if (trb_send_trigger_rich(input, triggerType, 0xcc, 0xdd, 0xaabb) == -1) {
- trb_error("Error send_trigger");
- exit(EXIT_FAILURE);
- }
-
- size = trb_ipu_data_read(triggerType, 0xcc, 0xdd, 0xaabb,
- buffer, bufferSize);
- if (size == -1) {
- fprintf(stderr, "Error IPU Read\n");
- exit(EXIT_FAILURE);
- }
-
- /* There must be a DHDR --> size must be at least >= 2 */
- if (size < 2) {
- fprintf(stderr, "DHRD error, size=%d\n", size);
- exit(EXIT_FAILURE);
- }
- len = ((buffer[1] >> 16) & 0xffff) + 2;
- if (len >= size) {
- fprintf(stderr, "DHRD len error, len=%d size=%d\n", len, size);
- exit(EXIT_FAILURE);
- }
- /*fprintf(stderr, "number padding zeros: %d\n", size - len);*/
- if (writeToStdout == 1) {
- fprintf(stdout, "Trigger# %d\n", trgNumber);
- for (i = 0; i < len; i++) {
- fprintf(stdout, "0x%08x\n", buffer[i]);
- }
- } else {
- if (fwrite((void*)buffer, 4, len, hldFile) != len) {
- perror("Writing to File failed");
- exit(EXIT_FAILURE);
- }
- }
-
- /* Unblock signals */
- sigprocmask(SIG_UNBLOCK, &blockSet, NULL);
-
- trgNumber++;
- evtCounter++;
- if (evtCounter % 100 == 0) {
- fprintf(stderr, "%d triggers send\n", trgNumber);
- }
- }
-
- exit(EXIT_SUCCESS);
-}