mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 14:38:14 +02:00
commit
bd0eb22392
@ -137,6 +137,7 @@ sls_enable_cxx_warning("-Wnull-dereference")
|
|||||||
sls_enable_cxx_warning("-Wduplicated-cond")
|
sls_enable_cxx_warning("-Wduplicated-cond")
|
||||||
sls_disable_cxx_warning("-Wclass-memaccess")
|
sls_disable_cxx_warning("-Wclass-memaccess")
|
||||||
sls_disable_c_warning("-Wstringop-truncation")
|
sls_disable_c_warning("-Wstringop-truncation")
|
||||||
|
sls_disable_c_warning("-Wformat-nonliteral")
|
||||||
|
|
||||||
|
|
||||||
if(SLS_USE_SANITIZER)
|
if(SLS_USE_SANITIZER)
|
||||||
|
@ -243,6 +243,10 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
|
|
||||||
7. [Eiger] fast quad fix for loading trimbits
|
7. [Eiger] fast quad fix for loading trimbits
|
||||||
|
|
||||||
|
8. [Eiger] Can also use copydetectorserver command.
|
||||||
|
[All] copydetectorserver command also creates a link to the binary compied
|
||||||
|
with a shorter name ([detector]DetectorServer only)
|
||||||
|
|
||||||
Receiver
|
Receiver
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
BIN
slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer
Executable file
BIN
slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer
Executable file
Binary file not shown.
@ -7,6 +7,8 @@
|
|||||||
#define MIN_REQRD_VRSN_T_RD_API 0x181130
|
#define MIN_REQRD_VRSN_T_RD_API 0x181130
|
||||||
#define REQRD_FRMWR_VRSN 0x201005
|
#define REQRD_FRMWR_VRSN 0x201005
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "ctbDetectorServer"
|
||||||
|
|
||||||
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
||||||
|
|
||||||
/* Struct Definitions */
|
/* Struct Definitions */
|
||||||
|
BIN
slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer
Executable file
BIN
slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer
Executable file
Binary file not shown.
@ -3,6 +3,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "sls/sls_detector_defs.h"
|
#include "sls/sls_detector_defs.h"
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "eigerDetectorServer"
|
||||||
|
|
||||||
#define REQUIRED_FIRMWARE_VERSION (29)
|
#define REQUIRED_FIRMWARE_VERSION (29)
|
||||||
// virtual ones renamed for consistency
|
// virtual ones renamed for consistency
|
||||||
// real ones keep previous name for compatibility (already in production)
|
// real ones keep previous name for compatibility (already in production)
|
||||||
|
BIN
slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer
Executable file
BIN
slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer
Executable file
Binary file not shown.
@ -7,6 +7,8 @@
|
|||||||
#define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020"
|
#define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020"
|
||||||
#define ID_FILE "detid_gotthard2.txt"
|
#define ID_FILE "detid_gotthard2.txt"
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "gotthard2DetectorServer"
|
||||||
|
|
||||||
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
||||||
|
|
||||||
/* Hardware Definitions */
|
/* Hardware Definitions */
|
||||||
|
BIN
slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer
Executable file
BIN
slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer
Executable file
Binary file not shown.
@ -4,6 +4,8 @@
|
|||||||
#include "sls/sls_detector_defs.h"
|
#include "sls/sls_detector_defs.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "gotthardDetectorServer"
|
||||||
|
|
||||||
/* Enums */
|
/* Enums */
|
||||||
enum ADCINDEX { TEMP_FPGA, TEMP_ADC };
|
enum ADCINDEX { TEMP_FPGA, TEMP_ADC };
|
||||||
enum DACINDEX {
|
enum DACINDEX {
|
||||||
|
Binary file not shown.
@ -8,6 +8,8 @@
|
|||||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x210831 // 1.0 pcb (version = 010)
|
#define REQRD_FRMWRE_VRSN_BOARD2 0x210831 // 1.0 pcb (version = 010)
|
||||||
#define REQRD_FRMWRE_VRSN 0x211008 // 2.0 pcb (version = 011)
|
#define REQRD_FRMWRE_VRSN 0x211008 // 2.0 pcb (version = 011)
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "jungfrauDetectorServer"
|
||||||
|
|
||||||
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
||||||
|
|
||||||
/* Struct Definitions */
|
/* Struct Definitions */
|
||||||
@ -137,8 +139,6 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
|||||||
#define ADC_PORT_INVERT_VAL (0x5A5A5A5A)
|
#define ADC_PORT_INVERT_VAL (0x5A5A5A5A)
|
||||||
#define ADC_PORT_INVERT_BOARD2_VAL (0x453b2a9c)
|
#define ADC_PORT_INVERT_BOARD2_VAL (0x453b2a9c)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 2.0 pcb (chipv1.1)
|
// 2.0 pcb (chipv1.1)
|
||||||
#define SAMPLE_ADC_FULL_SPEED_CHIP11 \
|
#define SAMPLE_ADC_FULL_SPEED_CHIP11 \
|
||||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||||
@ -162,8 +162,6 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
|||||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP11 (0x08)
|
#define ADC_OFST_HALF_SPEED_VAL_CHIP11 (0x08)
|
||||||
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP11 (0x04)
|
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP11 (0x04)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 2.0 pcb (chipv1.0)
|
// 2.0 pcb (chipv1.0)
|
||||||
#define SAMPLE_ADC_FULL_SPEED_CHIP10 \
|
#define SAMPLE_ADC_FULL_SPEED_CHIP10 \
|
||||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||||
@ -187,8 +185,6 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
|||||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP10 (0x08)
|
#define ADC_OFST_HALF_SPEED_VAL_CHIP10 (0x08)
|
||||||
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP10 (0x04)
|
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP10 (0x04)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 1.0 pcb (2 resistor network)
|
// 1.0 pcb (2 resistor network)
|
||||||
#define SAMPLE_ADC_HALF_SPEED_BOARD2 \
|
#define SAMPLE_ADC_HALF_SPEED_BOARD2 \
|
||||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||||
|
BIN
slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer
Executable file
BIN
slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer
Executable file
Binary file not shown.
@ -7,6 +7,8 @@
|
|||||||
#define MIN_REQRD_VRSN_T_RD_API 0x180314
|
#define MIN_REQRD_VRSN_T_RD_API 0x180314
|
||||||
#define REQRD_FRMWR_VRSN 0x201005
|
#define REQRD_FRMWR_VRSN 0x201005
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "moenchDetectorServer"
|
||||||
|
|
||||||
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
||||||
|
|
||||||
/* Struct Definitions */
|
/* Struct Definitions */
|
||||||
|
BIN
slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer
Executable file
BIN
slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer
Executable file
Binary file not shown.
@ -7,6 +7,8 @@
|
|||||||
#define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020"
|
#define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020"
|
||||||
#define ID_FILE "detid_mythen3.txt"
|
#define ID_FILE "detid_mythen3.txt"
|
||||||
|
|
||||||
|
#define LINKED_SERVER_NAME "mythen3DetectorServer"
|
||||||
|
|
||||||
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
||||||
|
|
||||||
/* Hardware Definitions */
|
/* Hardware Definitions */
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
#include "slsDetectorServer_defs.h"
|
#include "slsDetectorServer_defs.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h> // usleep
|
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
|
#include <unistd.h> // usleep
|
||||||
|
|
||||||
/* global variables */
|
/* global variables */
|
||||||
// clang-format off
|
// clang-format off
|
||||||
@ -71,16 +71,25 @@ void resetFPGA() {
|
|||||||
int deleteOldFile(char *mess) {
|
int deleteOldFile(char *mess) {
|
||||||
char cmd[MAX_STR_LENGTH] = {0};
|
char cmd[MAX_STR_LENGTH] = {0};
|
||||||
char retvals[MAX_STR_LENGTH] = {0};
|
char retvals[MAX_STR_LENGTH] = {0};
|
||||||
sprintf(cmd, "rm -fr %s", TEMP_PROG_FILE_NAME);
|
|
||||||
if (FAIL == executeCommand(cmd, retvals, logDEBUG1)) {
|
char *format = "rm -fr %s";
|
||||||
strcpy(mess,
|
if (snprintf(cmd, MAX_STR_LENGTH, format, TEMP_PROG_FILE_NAME) >=
|
||||||
"Could not program fpga. (could not delete old file: ");
|
MAX_STR_LENGTH) {
|
||||||
strncat(mess, retvals, MAX_STR_LENGTH - strlen(mess) - 1);
|
strcpy(
|
||||||
strcat(mess, "\n");
|
mess,
|
||||||
|
"Could not program fpga. Command to delete old file is too long\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("\tDeleted old programming file (%s)\n", TEMP_PROG_FILE_NAME));
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not program fpga. (could not delete old file: %s)\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
LOG(logINFO,
|
||||||
|
("\tDeleted old programming file (%s)\n", TEMP_PROG_FILE_NAME));
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,9 +152,8 @@ int copyToFlash(ssize_t fsize, char *clientChecksum, char *mess) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ignoring this until a consistent way to read from bfin flash
|
/* ignoring this until a consistent way to read from bfin flash
|
||||||
if (verifyChecksumFromFlash(mess, clientChecksum, flashDriveName, fsize) ==
|
if (verifyChecksumFromFlash(mess, clientChecksum, flashDriveName, fsize)
|
||||||
FAIL) {
|
== FAIL) { return FAIL;
|
||||||
return FAIL;
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if (waitForFPGAtoTouchFlash(mess) == FAIL) {
|
if (waitForFPGAtoTouchFlash(mess) == FAIL) {
|
||||||
@ -171,12 +179,13 @@ int getDrive(char *mess) {
|
|||||||
|
|
||||||
char cmd[MAX_STR_LENGTH] = {0};
|
char cmd[MAX_STR_LENGTH] = {0};
|
||||||
char retvals[MAX_STR_LENGTH] = {0};
|
char retvals[MAX_STR_LENGTH] = {0};
|
||||||
|
|
||||||
strcpy(cmd, CMD_GET_FLASH);
|
strcpy(cmd, CMD_GET_FLASH);
|
||||||
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
strcpy(mess, "Could not program fpga. (could not get flash drive: ");
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
strncat(mess, retvals, sizeof(mess) - strlen(mess) - 1);
|
"Could not program fpga. (could not get flash drive: %s)\n",
|
||||||
strcat(mess, "\n");
|
retvals);
|
||||||
LOG(logERROR, (mess));
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,15 +239,21 @@ int eraseFlash(char *mess) {
|
|||||||
#endif
|
#endif
|
||||||
char cmd[MAX_STR_LENGTH] = {0};
|
char cmd[MAX_STR_LENGTH] = {0};
|
||||||
char retvals[MAX_STR_LENGTH] = {0};
|
char retvals[MAX_STR_LENGTH] = {0};
|
||||||
sprintf(cmd, "flash_eraseall %s", flashDriveName);
|
char *format = "flash_eraseall %s";
|
||||||
if (FAIL == executeCommand(cmd, retvals, logDEBUG1)) {
|
if (snprintf(cmd, MAX_STR_LENGTH, format, flashDriveName) >=
|
||||||
strcpy(mess, "Could not program fpga. (could not erase flash: ");
|
MAX_STR_LENGTH) {
|
||||||
strncat(mess, retvals, sizeof(mess) - strlen(mess) - 1);
|
strcpy(mess,
|
||||||
strcat(mess, "\n");
|
"Could not program fpga. Command to erase flash is too long\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not program fpga. (could not erase flash: %s)\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
LOG(logINFO, ("\tFlash erased\n"));
|
LOG(logINFO, ("\tFlash erased\n"));
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@ -246,7 +261,6 @@ int eraseFlash(char *mess) {
|
|||||||
int writeToFlash(ssize_t fsize, FILE *flashfd, FILE *srcfd, char *mess) {
|
int writeToFlash(ssize_t fsize, FILE *flashfd, FILE *srcfd, char *mess) {
|
||||||
LOG(logDEBUG1, ("writing to flash\n"));
|
LOG(logDEBUG1, ("writing to flash\n"));
|
||||||
|
|
||||||
|
|
||||||
char *buffer = malloc(FLASH_BUFFER_MEMORY_SIZE);
|
char *buffer = malloc(FLASH_BUFFER_MEMORY_SIZE);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
fclose(flashfd);
|
fclose(flashfd);
|
||||||
@ -260,7 +274,8 @@ int writeToFlash(ssize_t fsize, FILE *flashfd, FILE *srcfd, char *mess) {
|
|||||||
|
|
||||||
int oldProgress = 0;
|
int oldProgress = 0;
|
||||||
ssize_t totalBytes = 0;
|
ssize_t totalBytes = 0;
|
||||||
ssize_t bytes = fread((void*)buffer, sizeof(char), FLASH_BUFFER_MEMORY_SIZE, srcfd);
|
ssize_t bytes =
|
||||||
|
fread((void *)buffer, sizeof(char), FLASH_BUFFER_MEMORY_SIZE, srcfd);
|
||||||
|
|
||||||
while (bytes > 0) {
|
while (bytes > 0) {
|
||||||
|
|
||||||
@ -289,9 +304,11 @@ int writeToFlash(ssize_t fsize, FILE *flashfd, FILE *srcfd, char *mess) {
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
oldProgress = progress;
|
oldProgress = progress;
|
||||||
}
|
}
|
||||||
} else printf(".");
|
} else
|
||||||
|
printf(".");
|
||||||
|
|
||||||
bytes = fread((void*)buffer, sizeof(char), FLASH_BUFFER_MEMORY_SIZE, srcfd);
|
bytes = fread((void *)buffer, sizeof(char), FLASH_BUFFER_MEMORY_SIZE,
|
||||||
|
srcfd);
|
||||||
}
|
}
|
||||||
if (fsize <= 0) {
|
if (fsize <= 0) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -302,7 +319,10 @@ int writeToFlash(ssize_t fsize, FILE *flashfd, FILE *srcfd, char *mess) {
|
|||||||
LOG(logINFO, ("\tWrote %ld bytes to flash\n", totalBytes));
|
LOG(logINFO, ("\tWrote %ld bytes to flash\n", totalBytes));
|
||||||
|
|
||||||
if (totalBytes != fsize) {
|
if (totalBytes != fsize) {
|
||||||
sprintf(mess, "Could not program fpga. Incorrect bytes written to flash %lu [expected: %lu]\n", totalBytes, fsize);
|
sprintf(mess,
|
||||||
|
"Could not program fpga. Incorrect bytes written to flash %lu "
|
||||||
|
"[expected: %lu]\n",
|
||||||
|
totalBytes, fsize);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@ -325,7 +345,9 @@ int waitForFPGAtoTouchFlash(char* mess) {
|
|||||||
usleep(1000);
|
usleep(1000);
|
||||||
timeSpent += 1000;
|
timeSpent += 1000;
|
||||||
if (timeSpent >= MAX_TIME_FPGA_TOUCH_FLASH_US) {
|
if (timeSpent >= MAX_TIME_FPGA_TOUCH_FLASH_US) {
|
||||||
sprintf(mess, "Could not program fpga. (exceeded max time allowed: %ds)\n",
|
sprintf(
|
||||||
|
mess,
|
||||||
|
"Could not program fpga. (exceeded max time allowed: %ds)\n",
|
||||||
MAX_TIME_FPGA_TOUCH_FLASH_US / (1000 * 1000));
|
MAX_TIME_FPGA_TOUCH_FLASH_US / (1000 * 1000));
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@ -333,18 +355,21 @@ int waitForFPGAtoTouchFlash(char* mess) {
|
|||||||
|
|
||||||
// read gpio status
|
// read gpio status
|
||||||
char retvals[MAX_STR_LENGTH] = {0};
|
char retvals[MAX_STR_LENGTH] = {0};
|
||||||
if (FAIL == executeCommand(CMD_FPGA_PICKED_STATUS, retvals, logDEBUG1)) {
|
if (FAIL ==
|
||||||
strcpy(mess,
|
executeCommand(CMD_FPGA_PICKED_STATUS, retvals, logDEBUG1)) {
|
||||||
"Could not program fpga. (could not read gpio status: ");
|
snprintf(
|
||||||
strncat(mess, retvals, sizeof(mess) - strlen(mess) - 1);
|
mess, MAX_STR_LENGTH,
|
||||||
strcat(mess, "\n");
|
"Could not program fpga. (could not read gpio status: %s)\n",
|
||||||
LOG(logERROR, (mess));
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert to int
|
// convert to int
|
||||||
if (sscanf(retvals, "%d\n", &result) != 1) {
|
if (sscanf(retvals, "%d\n", &result) != 1) {
|
||||||
sprintf(mess, "Could not program fpga. (could not scan int for gpio status: [%s])\n",
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not program fpga. (could not scan int for gpio "
|
||||||
|
"status: [%s])\n",
|
||||||
retvals);
|
retvals);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
@ -88,10 +88,10 @@ int getDrive(char *mess) {
|
|||||||
char retvals[MAX_STR_LENGTH] = {0};
|
char retvals[MAX_STR_LENGTH] = {0};
|
||||||
strcpy(cmd, CMD_GET_FLASH);
|
strcpy(cmd, CMD_GET_FLASH);
|
||||||
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
strcpy(mess, "Could not program fpga. (could not get flash drive: ");
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
strncat(mess, retvals, sizeof(mess) - strlen(mess) - 1);
|
"Could not program fpga. (could not get flash drive: %s)\n",
|
||||||
strcat(mess, "\n");
|
retvals);
|
||||||
LOG(logERROR, (mess));
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,14 +129,22 @@ int eraseFlash(char *mess) {
|
|||||||
#endif
|
#endif
|
||||||
char cmd[MAX_STR_LENGTH] = {0};
|
char cmd[MAX_STR_LENGTH] = {0};
|
||||||
char retvals[MAX_STR_LENGTH] = {0};
|
char retvals[MAX_STR_LENGTH] = {0};
|
||||||
sprintf(cmd, "flash_erase %s 0 0", flashDriveName);
|
|
||||||
if (FAIL == executeCommand(cmd, retvals, logDEBUG1)) {
|
char *format = "flash_erase %s 0 0";
|
||||||
strcpy(mess, "Could not program fpga. (could not erase flash: ");
|
if (snprintf(cmd, MAX_STR_LENGTH, format, flashDriveName) >=
|
||||||
strncat(mess, retvals, sizeof(mess) - strlen(mess) - 1);
|
MAX_STR_LENGTH) {
|
||||||
strcat(mess, "\n");
|
strcpy(mess,
|
||||||
|
"Could not program fpga. Command to erase flash is too long\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not program fpga. (could not erase flash: %s)\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
LOG(logINFO, ("\tFlash erased\n"));
|
LOG(logINFO, ("\tFlash erased\n"));
|
||||||
return OK;
|
return OK;
|
||||||
@ -148,9 +156,9 @@ int writeToFlash(ssize_t fsize, FILE *flashfd, char *buffer, char *mess) {
|
|||||||
ssize_t bytesWritten = fwrite((void *)buffer, sizeof(char), fsize, flashfd);
|
ssize_t bytesWritten = fwrite((void *)buffer, sizeof(char), fsize, flashfd);
|
||||||
if (bytesWritten != fsize) {
|
if (bytesWritten != fsize) {
|
||||||
fclose(flashfd);
|
fclose(flashfd);
|
||||||
sprintf(
|
sprintf(mess,
|
||||||
mess,
|
"Could not program fpga. Incorrect bytes written to flash %lu "
|
||||||
"Could not program fpga. Incorrect bytes written to flash %lu [expected: %lu]\n",
|
"[expected: %lu]\n",
|
||||||
(long int)bytesWritten, (long int)fsize);
|
(long int)bytesWritten, (long int)fsize);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
// defined in the detector specific Makefile
|
// defined in the detector specific Makefile
|
||||||
#ifdef GOTTHARDD
|
#ifdef GOTTHARDD
|
||||||
@ -1140,12 +1140,12 @@ defined(GOTTHARD2D) || defined(MYTHEN3D)
|
|||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else if (!isPowerValid(serverDacIndex, val)) {
|
} else if (!isPowerValid(serverDacIndex, val)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(
|
||||||
|
mess,
|
||||||
"Could not set power. Power regulator %d "
|
"Could not set power. Power regulator %d "
|
||||||
"should be between %d and %d mV\n",
|
"should be between %d and %d mV\n",
|
||||||
ind,
|
ind,
|
||||||
(serverDacIndex == D_PWR_IO ? VIO_MIN_MV
|
(serverDacIndex == D_PWR_IO ? VIO_MIN_MV : POWER_RGLTR_MIN),
|
||||||
: POWER_RGLTR_MIN),
|
|
||||||
(VCHIP_MAX_MV - VCHIP_POWER_INCRMNT));
|
(VCHIP_MAX_MV - VCHIP_POWER_INCRMNT));
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else {
|
} else {
|
||||||
@ -1221,8 +1221,7 @@ defined(GOTTHARD2D) || defined(MYTHEN3D)
|
|||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else {
|
} else {
|
||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
if ((val != GET_FLAG && mV &&
|
if ((val != GET_FLAG && mV && checkVLimitCompliant(val) == FAIL) ||
|
||||||
checkVLimitCompliant(val) == FAIL) ||
|
|
||||||
(val != GET_FLAG && !mV &&
|
(val != GET_FLAG && !mV &&
|
||||||
checkVLimitDacCompliant(val) == FAIL)) {
|
checkVLimitDacCompliant(val) == FAIL)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
@ -2078,7 +2077,8 @@ int set_num_additional_storage_cells(int file_des) {
|
|||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
if (getChipVersion() == 11) {
|
if (getChipVersion() == 11) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Cannot set addl. number of storage cells for chip v1.1\n");
|
sprintf(mess,
|
||||||
|
"Cannot set addl. number of storage cells for chip v1.1\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else if (arg > getMaxStoragecellStart()) {
|
} else if (arg > getMaxStoragecellStart()) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
@ -2557,7 +2557,8 @@ int set_storage_cell_delay(int file_des) {
|
|||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
if (getChipVersion() == 11) {
|
if (getChipVersion() == 11) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess, "Storage cell delay is not applicable for chipv 1.1\n");
|
strcpy(mess,
|
||||||
|
"Storage cell delay is not applicable for chipv 1.1\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else if (arg > MAX_STORAGE_CELL_DLY_NS_VAL) {
|
} else if (arg > MAX_STORAGE_CELL_DLY_NS_VAL) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
@ -3702,7 +3703,10 @@ int program_fpga(int file_des) {
|
|||||||
fclose(fd);
|
fclose(fd);
|
||||||
struct sysinfo info;
|
struct sysinfo info;
|
||||||
sysinfo(&info);
|
sysinfo(&info);
|
||||||
sprintf(mess, "Could not allocate memory to get fpga program. Free space: %d MB\n", (int)(info.freeram/ (1024 * 1024)));
|
sprintf(mess,
|
||||||
|
"Could not allocate memory to get fpga program. Free "
|
||||||
|
"space: %d MB\n",
|
||||||
|
(int)(info.freeram / (1024 * 1024)));
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
}
|
}
|
||||||
@ -3759,8 +3763,7 @@ int program_fpga(int file_des) {
|
|||||||
|
|
||||||
// checksum of copied program
|
// checksum of copied program
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
ret =
|
ret = verifyChecksumFromFile(mess, checksum, TEMP_PROG_FILE_NAME);
|
||||||
verifyChecksumFromFile(mess, checksum, TEMP_PROG_FILE_NAME);
|
|
||||||
}
|
}
|
||||||
Server_SendResult(file_des, INT32, NULL, 0);
|
Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
if (ret == FAIL) {
|
if (ret == FAIL) {
|
||||||
@ -4027,7 +4030,8 @@ int storage_cell_start(int file_des) {
|
|||||||
if ((arg == GET_FLAG) || (Server_VerifyLock() == OK)) {
|
if ((arg == GET_FLAG) || (Server_VerifyLock() == OK)) {
|
||||||
if (arg > getMaxStoragecellStart()) {
|
if (arg > getMaxStoragecellStart()) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Max Storage cell number should not exceed %d\n", getMaxStoragecellStart());
|
sprintf(mess, "Max Storage cell number should not exceed %d\n",
|
||||||
|
getMaxStoragecellStart());
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else {
|
} else {
|
||||||
retval = selectStoragecellStart(arg);
|
retval = selectStoragecellStart(arg);
|
||||||
@ -4210,7 +4214,7 @@ int copy_detector_server(int file_des) {
|
|||||||
if (receiveData(file_des, args, sizeof(args), OTHER) < 0)
|
if (receiveData(file_des, args, sizeof(args), OTHER) < 0)
|
||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
|
|
||||||
#ifdef EIGERD
|
#ifdef VIRTUAL
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -4219,57 +4223,114 @@ int copy_detector_server(int file_des) {
|
|||||||
char *sname = args[0];
|
char *sname = args[0];
|
||||||
char *hostname = args[1];
|
char *hostname = args[1];
|
||||||
LOG(logINFOBLUE, ("Copying server %s from host %s\n", sname, hostname));
|
LOG(logINFOBLUE, ("Copying server %s from host %s\n", sname, hostname));
|
||||||
|
char cmd[MAX_STR_LENGTH] = {0};
|
||||||
|
|
||||||
char cmd[MAX_STR_LENGTH];
|
// tftp server
|
||||||
memset(cmd, 0, MAX_STR_LENGTH);
|
char *format = "tftp %s -r %s -g";
|
||||||
|
if (snprintf(cmd, MAX_STR_LENGTH, format, hostname, sname) >=
|
||||||
// copy server
|
MAX_STR_LENGTH) {
|
||||||
strcpy(cmd, "tftp ");
|
|
||||||
strcat(cmd, hostname);
|
|
||||||
strcat(cmd, " -r ");
|
|
||||||
strcat(cmd, sname);
|
|
||||||
strcat(cmd, " -g");
|
|
||||||
int success = executeCommand(cmd, retvals, logDEBUG1);
|
|
||||||
if (success == FAIL) {
|
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess, retvals);
|
strcpy(mess, "Could not copy detector server. Command to copy "
|
||||||
|
"server too long\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
} else if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
ret = FAIL;
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not copy detector server (tftp). %s\n", retvals);
|
||||||
// LOG(logERROR, (mess)); already printed in executecommand
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
} else {
|
||||||
|
LOG(logINFO, ("\tServer copied\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// success
|
|
||||||
else {
|
|
||||||
LOG(logINFO, ("Server copied successfully\n"));
|
|
||||||
// give permissions
|
// give permissions
|
||||||
strcpy(cmd, "chmod 777 ");
|
if (ret == OK) {
|
||||||
strcat(cmd, sname);
|
if (snprintf(cmd, MAX_STR_LENGTH, "chmod 777 %s", sname) >=
|
||||||
executeCommand(cmd, retvals, logDEBUG1);
|
MAX_STR_LENGTH) {
|
||||||
|
ret = FAIL;
|
||||||
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D)
|
strcpy(mess, "Could not copy detector server. Command to give "
|
||||||
// edit /etc/inittab
|
"permissions to server is too long\n");
|
||||||
// find line numbers in /etc/inittab where DetectorServer
|
LOG(logERROR, (mess));
|
||||||
strcpy(cmd, "sed -n '/DetectorServer/=' /etc/inittab");
|
} else if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
executeCommand(cmd, retvals, logDEBUG1);
|
ret = FAIL;
|
||||||
while (strlen(retvals)) {
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
// get first linen number
|
"Could not copy detector server (permissions). %s\n",
|
||||||
int lineNumber = atoi(retvals);
|
retvals);
|
||||||
// delete that line
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
sprintf(cmd, "sed -i \'%dd\' /etc/inittab", lineNumber);
|
} else {
|
||||||
executeCommand(cmd, retvals, logDEBUG1);
|
LOG(logINFO, ("\tPermissions modified\n"));
|
||||||
// find line numbers again
|
}
|
||||||
strcpy(cmd, "sed -n '/DetectorServer/=' /etc/inittab");
|
|
||||||
executeCommand(cmd, retvals, logDEBUG1);
|
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Deleted all lines containing DetectorServer in "
|
|
||||||
"/etc/inittab\n"));
|
|
||||||
|
|
||||||
// append line
|
// symbolic link
|
||||||
strcpy(cmd, "echo \"ttyS0::respawn:/./");
|
if (ret == OK) {
|
||||||
strcat(cmd, sname);
|
if (snprintf(cmd, MAX_STR_LENGTH, "ln -sf %s %s", sname,
|
||||||
strcat(cmd, "\" >> /etc/inittab");
|
LINKED_SERVER_NAME) >= MAX_STR_LENGTH) {
|
||||||
executeCommand(cmd, retvals, logDEBUG1);
|
ret = FAIL;
|
||||||
|
strcpy(mess, "Could not copy detector server. Command to "
|
||||||
|
"create symbolic link too long\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
} else if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
ret = FAIL;
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not copy detector server (symbolic link). %s\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
} else {
|
||||||
|
LOG(logINFO, ("\tSymbolic link created\n"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LOG(logINFO, ("/etc/inittab modified to have %s\n", sname));
|
// blackfin boards (respawn) (only kept for backwards compatibility)
|
||||||
|
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||||
|
defined(GOTTHARDD)
|
||||||
|
// delete every line with DetectorServer in /etc/inittab
|
||||||
|
if (ret == OK) {
|
||||||
|
strcpy(cmd, "sed -i '/DetectorServer/d' /etc/inittab");
|
||||||
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
ret = FAIL;
|
||||||
|
snprintf(
|
||||||
|
mess, MAX_STR_LENGTH,
|
||||||
|
"Could not copy detector server (del respawning). %s\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
} else {
|
||||||
|
LOG(logINFO, ("\tinittab: DetectoServer line deleted\n"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add new link name to /etc/inittab
|
||||||
|
if (ret == OK) {
|
||||||
|
format = "echo 'ttyS0::respawn:/./%s' >> /etc/inittab";
|
||||||
|
if (snprintf(cmd, MAX_STR_LENGTH, format, LINKED_SERVER_NAME) >=
|
||||||
|
MAX_STR_LENGTH) {
|
||||||
|
ret = FAIL;
|
||||||
|
strcpy(mess, "Could not copy detector server. Command "
|
||||||
|
"to add new server for spawning is too long\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
} else if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
ret = FAIL;
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not copy detector server (respawning). %s\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
} else {
|
||||||
|
LOG(logINFO, ("\tinittab: updated for respawning\n"));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// sync
|
||||||
|
if (ret == OK) {
|
||||||
|
strcpy(cmd, "sync");
|
||||||
|
if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) {
|
||||||
|
ret = FAIL;
|
||||||
|
snprintf(mess, MAX_STR_LENGTH,
|
||||||
|
"Could not copy detector server (sync). %s\n",
|
||||||
|
retvals);
|
||||||
|
// LOG(logERROR, (mess)); already printed in executecommand
|
||||||
|
} else {
|
||||||
|
LOG(logINFO, ("\tsync\n"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -4756,7 +4817,8 @@ int set_read_n_rows(int file_des) {
|
|||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else
|
} else
|
||||||
#elif JUNGFRAUD
|
#elif JUNGFRAUD
|
||||||
if ((check_detector_idle("set number of rows") == OK) && (arg % READ_N_ROWS_MULTIPLE != 0)) {
|
if ((check_detector_idle("set number of rows") == OK) &&
|
||||||
|
(arg % READ_N_ROWS_MULTIPLE != 0)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess,
|
||||||
"Could not set number of rows. %d must be a multiple "
|
"Could not set number of rows. %d must be a multiple "
|
||||||
@ -4897,7 +4959,9 @@ int set_detector_position(int file_des) {
|
|||||||
|
|
||||||
// only set
|
// only set
|
||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
if (check_detector_idle("configure mac") == OK) {
|
// if in update mode, there is no need to do this (also detector not set
|
||||||
|
// up)
|
||||||
|
if (!updateFlag && check_detector_idle("configure mac") == OK) {
|
||||||
maxydet = args[0];
|
maxydet = args[0];
|
||||||
detectorId = args[1];
|
detectorId = args[1];
|
||||||
calculate_and_set_position();
|
calculate_and_set_position();
|
||||||
@ -4923,44 +4987,52 @@ int check_detector_idle(const char *s) {
|
|||||||
int is_udp_configured() {
|
int is_udp_configured() {
|
||||||
for (int i = 0; i != numUdpDestinations; ++i) {
|
for (int i = 0; i != numUdpDestinations; ++i) {
|
||||||
if (udpDetails[i].dstip == 0) {
|
if (udpDetails[i].dstip == 0) {
|
||||||
sprintf(configureMessage, "udp destination ip not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp destination ip not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if (udpDetails[i].srcip == 0) {
|
if (udpDetails[i].srcip == 0) {
|
||||||
sprintf(configureMessage, "udp source ip not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp source ip not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if (udpDetails[i].srcmac == 0) {
|
if (udpDetails[i].srcmac == 0) {
|
||||||
sprintf(configureMessage, "udp source mac not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp source mac not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if (udpDetails[i].dstmac == 0) {
|
if (udpDetails[i].dstmac == 0) {
|
||||||
sprintf(configureMessage, "udp destination mac not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp destination mac not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D)
|
#if defined(JUNGFRAUD) || defined(GOTTHARD2D)
|
||||||
if (getNumberofUDPInterfaces() == 2) {
|
if (getNumberofUDPInterfaces() == 2) {
|
||||||
if (udpDetails[i].srcip2 == 0) {
|
if (udpDetails[i].srcip2 == 0) {
|
||||||
sprintf(configureMessage, "udp source ip2 not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp source ip2 not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if (udpDetails[i].dstip2 == 0) {
|
if (udpDetails[i].dstip2 == 0) {
|
||||||
sprintf(configureMessage, "udp destination ip2 not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp destination ip2 not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if (udpDetails[i].srcmac2 == 0) {
|
if (udpDetails[i].srcmac2 == 0) {
|
||||||
sprintf(configureMessage, "udp source mac2 not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp source mac2 not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if (udpDetails[i].dstmac2 == 0) {
|
if (udpDetails[i].dstmac2 == 0) {
|
||||||
sprintf(configureMessage, "udp destination mac2 not configured [entry:%d]\n", i);
|
sprintf(configureMessage,
|
||||||
|
"udp destination mac2 not configured [entry:%d]\n", i);
|
||||||
LOG(logWARNING, ("%s", configureMessage));
|
LOG(logWARNING, ("%s", configureMessage));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@ -4979,7 +5051,8 @@ void configure_mac() {
|
|||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
sprintf(mess, "Could not allocate RAM\n");
|
sprintf(mess, "Could not allocate RAM\n");
|
||||||
} else {
|
} else {
|
||||||
sprintf(mess, "Could not configure mac because of incorrect "
|
sprintf(mess,
|
||||||
|
"Could not configure mac because of incorrect "
|
||||||
"udp 1G destination IP and port\n");
|
"udp 1G destination IP and port\n");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -5416,7 +5489,8 @@ int set_num_interfaces(int file_des) {
|
|||||||
} else if (check_detector_idle("configure mac") == OK) {
|
} else if (check_detector_idle("configure mac") == OK) {
|
||||||
if (getNumberofUDPInterfaces() != arg) {
|
if (getNumberofUDPInterfaces() != arg) {
|
||||||
setNumberofUDPInterfaces(arg);
|
setNumberofUDPInterfaces(arg);
|
||||||
for (int iRxEntry = 0; iRxEntry != numUdpDestinations; ++iRxEntry) {
|
for (int iRxEntry = 0; iRxEntry != numUdpDestinations;
|
||||||
|
++iRxEntry) {
|
||||||
if (arg == 1) {
|
if (arg == 1) {
|
||||||
udpDetails[iRxEntry].srcport2 = 0;
|
udpDetails[iRxEntry].srcport2 = 0;
|
||||||
udpDetails[iRxEntry].srcip2 = 0;
|
udpDetails[iRxEntry].srcip2 = 0;
|
||||||
@ -5426,19 +5500,24 @@ int set_num_interfaces(int file_des) {
|
|||||||
udpDetails[iRxEntry].dstmac2 = 0;
|
udpDetails[iRxEntry].dstmac2 = 0;
|
||||||
} else {
|
} else {
|
||||||
// if still 0, set defaults
|
// if still 0, set defaults
|
||||||
udpDetails[iRxEntry].srcport2 = DEFAULT_UDP_SRC_PORTNO + 1;
|
udpDetails[iRxEntry].srcport2 =
|
||||||
|
DEFAULT_UDP_SRC_PORTNO + 1;
|
||||||
if (udpDetails[iRxEntry].dstport2 == 0) {
|
if (udpDetails[iRxEntry].dstport2 == 0) {
|
||||||
udpDetails[iRxEntry].dstport2 = 2 * iRxEntry + 1 + DEFAULT_UDP_DST_PORTNO;
|
udpDetails[iRxEntry].dstport2 =
|
||||||
|
2 * iRxEntry + 1 + DEFAULT_UDP_DST_PORTNO;
|
||||||
}
|
}
|
||||||
// if still 0, copy from entry 0
|
// if still 0, copy from entry 0
|
||||||
if (iRxEntry != 0) {
|
if (iRxEntry != 0) {
|
||||||
udpDetails[iRxEntry].srcip2 = udpDetails[0].srcip2;
|
udpDetails[iRxEntry].srcip2 = udpDetails[0].srcip2;
|
||||||
udpDetails[iRxEntry].srcmac2 = udpDetails[0].srcmac2;
|
udpDetails[iRxEntry].srcmac2 =
|
||||||
|
udpDetails[0].srcmac2;
|
||||||
if (udpDetails[iRxEntry].dstip2 == 0) {
|
if (udpDetails[iRxEntry].dstip2 == 0) {
|
||||||
udpDetails[iRxEntry].dstip2 = udpDetails[0].dstip2;
|
udpDetails[iRxEntry].dstip2 =
|
||||||
|
udpDetails[0].dstip2;
|
||||||
}
|
}
|
||||||
if (udpDetails[iRxEntry].dstmac2 == 0) {
|
if (udpDetails[iRxEntry].dstmac2 == 0) {
|
||||||
udpDetails[iRxEntry].dstmac2 = udpDetails[0].dstmac2;
|
udpDetails[iRxEntry].dstmac2 =
|
||||||
|
udpDetails[0].dstmac2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6706,14 +6785,15 @@ int set_current_source(int file_des) {
|
|||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
if (enable != 0 && enable != 1) {
|
if (enable != 0 && enable != 1) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess,
|
strcpy(mess, "Could not enable/disable current source. Enable can "
|
||||||
"Could not enable/disable current source. Enable can be 0 or 1 only.\n");
|
"be 0 or 1 only.\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
// disable
|
// disable
|
||||||
else if (enable == 0 && (fix != -1 || normal != -1)) {
|
else if (enable == 0 && (fix != -1 || normal != -1)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess,
|
strcpy(
|
||||||
|
mess,
|
||||||
"Could not disable current source. Requires no parameters.\n");
|
"Could not disable current source. Requires no parameters.\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
@ -6723,8 +6803,8 @@ int set_current_source(int file_des) {
|
|||||||
// no parameters allowed
|
// no parameters allowed
|
||||||
if (fix != -1 || normal != -1) {
|
if (fix != -1 || normal != -1) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess,
|
strcpy(mess, "Could not enable current source. Fix and normal "
|
||||||
"Could not enable current source. Fix and normal are invalid parameters for this detector.\n");
|
"are invalid parameters for this detector.\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -6747,7 +6827,8 @@ int set_current_source(int file_des) {
|
|||||||
if (fix != 0 && fix != 1) {
|
if (fix != 0 && fix != 1) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess,
|
strcpy(mess,
|
||||||
"Could not enable current source. Invalid value for parameter (fix). Options: 0 or 1.\n");
|
"Could not enable current source. Invalid value "
|
||||||
|
"for parameter (fix). Options: 0 or 1.\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else if (normal != -1) {
|
} else if (normal != -1) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
@ -6781,7 +6862,8 @@ int set_current_source(int file_des) {
|
|||||||
#endif
|
#endif
|
||||||
int retval = getCurrentSource();
|
int retval = getCurrentSource();
|
||||||
LOG(logDEBUG1, ("current source enable retval: %u\n", retval));
|
LOG(logDEBUG1, ("current source enable retval: %u\n", retval));
|
||||||
validate(&ret, mess, enable, retval, "set current source enable", DEC);
|
validate(&ret, mess, enable, retval, "set current source enable",
|
||||||
|
DEC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -7847,7 +7929,8 @@ int set_filter_resistor(int file_des) {
|
|||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
if (arg < 0 || arg > ASIC_FILTER_MAX_RES_VALUE) {
|
if (arg < 0 || arg > ASIC_FILTER_MAX_RES_VALUE) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(
|
||||||
|
mess,
|
||||||
"Could not set filter resistor. Invalid filter argument %d. "
|
"Could not set filter resistor. Invalid filter argument %d. "
|
||||||
"Options [0-%d]\n",
|
"Options [0-%d]\n",
|
||||||
arg, ASIC_FILTER_MAX_RES_VALUE);
|
arg, ASIC_FILTER_MAX_RES_VALUE);
|
||||||
@ -8483,8 +8566,8 @@ int set_veto_algorithm(int file_des) {
|
|||||||
|
|
||||||
enum vetoAlgorithm alg = args[0];
|
enum vetoAlgorithm alg = args[0];
|
||||||
enum streamingInterface interface = args[1];
|
enum streamingInterface interface = args[1];
|
||||||
LOG(logDEBUG1, ("Setting vetoalgorithm (interface: %d): %u\n", (int)interface,
|
LOG(logDEBUG1, ("Setting vetoalgorithm (interface: %d): %u\n",
|
||||||
(int)alg));
|
(int)interface, (int)alg));
|
||||||
|
|
||||||
#ifndef GOTTHARD2D
|
#ifndef GOTTHARD2D
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
@ -8774,10 +8857,10 @@ int set_flip_rows(int file_des) {
|
|||||||
#else
|
#else
|
||||||
// only set
|
// only set
|
||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
if ((check_detector_idle("set flip rows") == OK) && (arg != 0 && arg != 1)) {
|
if ((check_detector_idle("set flip rows") == OK) &&
|
||||||
|
(arg != 0 && arg != 1)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess, "Could not set flip rows. Invalid argument %d.\n",
|
||||||
"Could not set flip rows. Invalid argument %d.\n",
|
|
||||||
arg);
|
arg);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
@ -8803,7 +8886,6 @@ int set_flip_rows(int file_des) {
|
|||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int get_filter_cell(int file_des) {
|
int get_filter_cell(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
@ -8839,7 +8921,8 @@ int set_filter_cell(int file_des) {
|
|||||||
if (arg < 0 || arg > MAX_FILTER_CELL_VAL) {
|
if (arg < 0 || arg > MAX_FILTER_CELL_VAL) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess,
|
||||||
"Could not set filter cell. Invalid argument %d. Options: 0 - %d\n",
|
"Could not set filter cell. Invalid argument %d. Options: "
|
||||||
|
"0 - %d\n",
|
||||||
arg, MAX_FILTER_CELL_VAL);
|
arg, MAX_FILTER_CELL_VAL);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
@ -8851,7 +8934,8 @@ int set_filter_cell(int file_des) {
|
|||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else {
|
} else {
|
||||||
setFilterCell(arg);
|
setFilterCell(arg);
|
||||||
// no validation as it might take time to update status register if acquiring
|
// no validation as it might take time to update status register if
|
||||||
|
// acquiring
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -9043,18 +9127,17 @@ int set_dest_udp_list(int file_des) {
|
|||||||
|
|
||||||
if (entry < 1 || entry >= MAX_UDP_DESTINATION) {
|
if (entry < 1 || entry >= MAX_UDP_DESTINATION) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(
|
sprintf(mess,
|
||||||
mess,
|
"Could not set udp destination. Invalid entry. Options: 1 "
|
||||||
"Could not set udp destination. Invalid entry. Options: 1 - %d\n",
|
"- %d\n",
|
||||||
MAX_UDP_DESTINATION - 1);
|
MAX_UDP_DESTINATION - 1);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
#ifdef EIGERD
|
#ifdef EIGERD
|
||||||
else if (args[4] != 0 || args64[1] != 0) {
|
else if (args[4] != 0 || args64[1] != 0) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(
|
strcpy(mess, "Could not set udp destination. ip2 and mac2 not "
|
||||||
mess,
|
"implemented for this detector.\n");
|
||||||
"Could not set udp destination. ip2 and mac2 not implemented for this detector.\n");
|
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -9086,12 +9169,14 @@ int set_dest_udp_list(int file_des) {
|
|||||||
#endif
|
#endif
|
||||||
udpDetails[entry].srcport = DEFAULT_UDP_SRC_PORTNO;
|
udpDetails[entry].srcport = DEFAULT_UDP_SRC_PORTNO;
|
||||||
if (udpDetails[entry].dstport == 0) {
|
if (udpDetails[entry].dstport == 0) {
|
||||||
udpDetails[entry].dstport = 2 * entry + DEFAULT_UDP_DST_PORTNO;
|
udpDetails[entry].dstport =
|
||||||
|
2 * entry + DEFAULT_UDP_DST_PORTNO;
|
||||||
}
|
}
|
||||||
if (myDetectorType == EIGER || twoInterfaces) {
|
if (myDetectorType == EIGER || twoInterfaces) {
|
||||||
udpDetails[entry].srcport2 = DEFAULT_UDP_SRC_PORTNO + 1;
|
udpDetails[entry].srcport2 = DEFAULT_UDP_SRC_PORTNO + 1;
|
||||||
if (udpDetails[entry].dstport2 == 0) {
|
if (udpDetails[entry].dstport2 == 0) {
|
||||||
udpDetails[entry].dstport2 = 2 * entry + 1 + DEFAULT_UDP_DST_PORTNO;
|
udpDetails[entry].dstport2 =
|
||||||
|
2 * entry + 1 + DEFAULT_UDP_DST_PORTNO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if still 0, copy from entry 0
|
// if still 0, copy from entry 0
|
||||||
@ -9162,9 +9247,10 @@ int get_num_dest_list(int file_des) {
|
|||||||
int retval1 = 0;
|
int retval1 = 0;
|
||||||
if (getNumberofDestinations(&retval1) == FAIL || retval1 != retval) {
|
if (getNumberofDestinations(&retval1) == FAIL || retval1 != retval) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(
|
sprintf(mess,
|
||||||
mess,
|
"Could not get number of udp destinations. (server reads %d, "
|
||||||
"Could not get number of udp destinations. (server reads %d, fpga reads %d).\n", retval1, retval);
|
"fpga reads %d).\n",
|
||||||
|
retval1, retval);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -9232,7 +9318,8 @@ int set_udp_first_dest(int file_des) {
|
|||||||
if (check_detector_idle("set first udp destination") == OK) {
|
if (check_detector_idle("set first udp destination") == OK) {
|
||||||
setFirstUDPDestination(arg);
|
setFirstUDPDestination(arg);
|
||||||
int retval = getFirstUDPDestination();
|
int retval = getFirstUDPDestination();
|
||||||
validate(&ret, mess, arg, retval, "set udp first destination", DEC);
|
validate(&ret, mess, arg, retval, "set udp first destination",
|
||||||
|
DEC);
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
firstUDPDestination = arg;
|
firstUDPDestination = arg;
|
||||||
// configure_mac();
|
// configure_mac();
|
||||||
@ -9244,7 +9331,6 @@ int set_udp_first_dest(int file_des) {
|
|||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int get_readout_speed(int file_des) {
|
int get_readout_speed(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
@ -9282,7 +9368,8 @@ int set_readout_speed(int file_des) {
|
|||||||
#ifdef JUNGFRAUD
|
#ifdef JUNGFRAUD
|
||||||
if (arg == (int)FULL_SPEED && isHardwareVersion2()) {
|
if (arg == (int)FULL_SPEED && isHardwareVersion2()) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess,
|
strcpy(
|
||||||
|
mess,
|
||||||
"Full speed not implemented for this board version (v1.0).\n");
|
"Full speed not implemented for this board version (v1.0).\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
}
|
}
|
||||||
@ -9319,7 +9406,6 @@ int set_readout_speed(int file_des) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
|
@ -83,7 +83,8 @@ class Detector {
|
|||||||
/* [Jungfrau][Gotthard][Mythen3][Gotthard2][CTB][Moench] */
|
/* [Jungfrau][Gotthard][Mythen3][Gotthard2][CTB][Moench] */
|
||||||
Result<int64_t> getSerialNumber(Positions pos = {}) const;
|
Result<int64_t> getSerialNumber(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Eiger][Gotthard2][Mythen3] 6 bit value (ideally unique) that is streamed out in the UDP header of the detector.*/
|
/** [Eiger][Gotthard2][Mythen3] 6 bit value (ideally unique) that is
|
||||||
|
* streamed out in the UDP header of the detector.*/
|
||||||
Result<int> getModuleId(Positions pos = {}) const;
|
Result<int> getModuleId(Positions pos = {}) const;
|
||||||
|
|
||||||
Result<int64_t> getReceiverVersion(Positions pos = {}) const;
|
Result<int64_t> getReceiverVersion(Positions pos = {}) const;
|
||||||
@ -310,8 +311,8 @@ class Detector {
|
|||||||
* [Eiger] Options: FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED \n
|
* [Eiger] Options: FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED \n
|
||||||
* [Gotthard2] Options: G2_108MHZ (Default), G2_144MHZ \n
|
* [Gotthard2] Options: G2_108MHZ (Default), G2_144MHZ \n
|
||||||
* [Jungfrau] FULL_SPEED option only available from v2.0 boards and is
|
* [Jungfrau] FULL_SPEED option only available from v2.0 boards and is
|
||||||
* recommended to set number of interfaces to 2. \n Also overwrites adcphase to
|
* recommended to set number of interfaces to 2. \n Also overwrites adcphase
|
||||||
* recommended default.
|
* to recommended default.
|
||||||
*/
|
*/
|
||||||
void setReadoutSpeed(defs::speedLevel value, Positions pos = {});
|
void setReadoutSpeed(defs::speedLevel value, Positions pos = {});
|
||||||
|
|
||||||
@ -404,8 +405,9 @@ class Detector {
|
|||||||
* [Moench] Default is disabled. \n
|
* [Moench] Default is disabled. \n
|
||||||
* [Jungfrau] Default is disabled. Get will return power status. Can be off
|
* [Jungfrau] Default is disabled. Get will return power status. Can be off
|
||||||
* if temperature event occured (temperature over temp_threshold with
|
* if temperature event occured (temperature over temp_threshold with
|
||||||
* temp_control enabled. Will configure chip (only chip v1.1)\n [Mythen3][Gotthard2] Default is 1. If module not
|
* temp_control enabled. Will configure chip (only chip v1.1)\n
|
||||||
* connected or wrong module, powerchip will fail.
|
* [Mythen3][Gotthard2] Default is 1. If module not connected or wrong
|
||||||
|
* module, powerchip will fail.
|
||||||
*/
|
*/
|
||||||
void setPowerChip(bool on, Positions pos = {});
|
void setPowerChip(bool on, Positions pos = {});
|
||||||
|
|
||||||
@ -518,7 +520,9 @@ class Detector {
|
|||||||
|
|
||||||
/** [Eiger] Number of rows to read out per half module
|
/** [Eiger] Number of rows to read out per half module
|
||||||
* Options: 0 - 256. 256 is default. The permissible values depend on
|
* Options: 0 - 256. 256 is default. The permissible values depend on
|
||||||
* dynamic range and 10Gbe enabled. \n[Jungfrau] Number of rows per module starting from the centre. Options: 8 - 512, must be multiples of 8. Default is 512.
|
* dynamic range and 10Gbe enabled. \n[Jungfrau] Number of rows per module
|
||||||
|
* starting from the centre. Options: 8 - 512, must be multiples of 8.
|
||||||
|
* Default is 512.
|
||||||
*/
|
*/
|
||||||
void setReadNRows(const int lines, Positions pos = {});
|
void setReadNRows(const int lines, Positions pos = {});
|
||||||
|
|
||||||
@ -1209,7 +1213,8 @@ class Detector {
|
|||||||
Result<int> getStorageCellStart(Positions pos = {}) const;
|
Result<int> getStorageCellStart(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Jungfrau] Advanced. Sets the storage cell storing the first acquisition
|
/** [Jungfrau] Advanced. Sets the storage cell storing the first acquisition
|
||||||
* of the series. Options: 0-max. max is 15 (default) for chipv1.0 and 3 (default) for chipv1.1.
|
* of the series. Options: 0-max. max is 15 (default) for chipv1.0 and 3
|
||||||
|
* (default) for chipv1.1.
|
||||||
*/
|
*/
|
||||||
void setStorageCellStart(int cell, Positions pos = {});
|
void setStorageCellStart(int cell, Positions pos = {});
|
||||||
|
|
||||||
@ -1350,14 +1355,15 @@ class Detector {
|
|||||||
/** [Gotthard2] */
|
/** [Gotthard2] */
|
||||||
Result<defs::streamingInterface> getVetoStream(Positions pos = {}) const;
|
Result<defs::streamingInterface> getVetoStream(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard2] Options: NONE (Default), LOW_LATENCY_LINK, ETHERNET_10GB (debugging), ALL
|
/** [Gotthard2] Options: NONE (Default), LOW_LATENCY_LINK, ETHERNET_10GB
|
||||||
* Enable or disable the 2 veto streaming interfaces available. Can
|
* (debugging), ALL Enable or disable the 2 veto streaming interfaces
|
||||||
* concatenate more than one interface. \nLOW_LATENCY_LINK is the default
|
* available. Can concatenate more than one interface. \nLOW_LATENCY_LINK is
|
||||||
* interface to work with. \nETHERNET_10GB is for debugging and also enables second
|
* the default interface to work with. \nETHERNET_10GB is for debugging and
|
||||||
* interface in receiver for listening to veto packets (writes a separate
|
* also enables second interface in receiver for listening to veto packets
|
||||||
* file if writing enabled). Also restarts client and receiver zmq sockets
|
* (writes a separate file if writing enabled). Also restarts client and
|
||||||
* if zmq streaming enabled.*/
|
* receiver zmq sockets if zmq streaming enabled.*/
|
||||||
void setVetoStream(const defs::streamingInterface value, Positions pos = {});
|
void setVetoStream(const defs::streamingInterface value,
|
||||||
|
Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard2] */
|
/** [Gotthard2] */
|
||||||
Result<defs::vetoAlgorithm>
|
Result<defs::vetoAlgorithm>
|
||||||
@ -1713,21 +1719,24 @@ class Detector {
|
|||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
|
||||||
/** Advanced user Function!
|
/** [Jungfrau][Gotthard][CTB][Moench][Mythen3][Gotthard2]
|
||||||
* [Jungfrau][CTB][Moench] fname is a pof file, rebooting the controller is
|
* Advanced user Function!
|
||||||
* recommended \n [Mythen3][Gotthard2] fname is an rbf file, power cycling
|
* Program firmware from command line, after which detector controller is
|
||||||
* the detector is recommended
|
* rebooted. [Jungfrau][CTB][Moench] fname is a pof file (full path) \n
|
||||||
|
* [Mythen3][Gotthard2] fname is an rbf file (full path)
|
||||||
*/
|
*/
|
||||||
void programFPGA(const std::string &fname, Positions pos = {});
|
void programFPGA(const std::string &fname, Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][CTB][Moench] Advanced user Function! */
|
/** [Jungfrau][CTB][Moench] Advanced user Function! */
|
||||||
void resetFPGA(Positions pos = {});
|
void resetFPGA(Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][Gotthard][CTB][Moench][Mythen3][Gotthard2]
|
/** [Jungfrau][Eiger][Gotthard][CTB][Moench][Mythen3][Gotthard2]
|
||||||
* Advanced user Function! \n
|
* Advanced user Function! \n
|
||||||
* Copy detector server fname from tftp folder of hostname to detector \n
|
* Copy detector server fname from tftp folder of hostname to detector. Also
|
||||||
* [Jungfrau][Gotthard][CTB][Moench] Also changes respawn server, which is
|
* creates a symbolic link to a shorter name (without vx.x.x). Then the
|
||||||
* effective after a reboot.
|
* detector controller reboots (except eiger) \n
|
||||||
|
* [Jungfrau][Gotthard][CTB][Moench] Also changes respawn server (to the
|
||||||
|
* link), which is effective after a reboot.
|
||||||
*/
|
*/
|
||||||
void copyDetectorServer(const std::string &fname,
|
void copyDetectorServer(const std::string &fname,
|
||||||
const std::string &hostname, Positions pos = {});
|
const std::string &hostname, Positions pos = {});
|
||||||
@ -1738,11 +1747,11 @@ class Detector {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Advanced user Function!\n [Jungfrau][Gotthard][CTB][Moench] Updates the
|
* Advanced user Function!\n [Jungfrau][Gotthard][CTB][Moench] Updates the
|
||||||
* firmware, detector server and then reboots detector controller blackfin.
|
* firmware, detector server, make a soft link and then reboots detector
|
||||||
* \n [Mythen3][Gotthard2] Will still have old server starting up as the new
|
* controller. \n [Mythen3][Gotthard2] Will require a script to start up the
|
||||||
* server is not respawned \n sname is name of detector server binary found
|
* shorter named server link at start up \n sname is name of detector
|
||||||
* on tftp folder of host pc \n hostname is name of pc to tftp from \n fname
|
* server binary found on tftp folder of host pc \n hostname is name of pc
|
||||||
* is programming file name
|
* to tftp from \n fname is programming file name with full path to it
|
||||||
*/
|
*/
|
||||||
void updateFirmwareAndServer(const std::string &sname,
|
void updateFirmwareAndServer(const std::string &sname,
|
||||||
const std::string &hostname,
|
const std::string &hostname,
|
||||||
|
@ -615,7 +615,8 @@ std::string CmdProxy::ReadoutSpeed(int action) {
|
|||||||
"quarter_speed]\n\t\t[Eiger][Jungfrau] Readout "
|
"quarter_speed]\n\t\t[Eiger][Jungfrau] Readout "
|
||||||
"speed of chip.\n\t\t[Eiger] Default speed is full_speed."
|
"speed of chip.\n\t\t[Eiger] Default speed is full_speed."
|
||||||
"\n\t\t[Jungfrau] Default speed is half_speed. full_speed "
|
"\n\t\t[Jungfrau] Default speed is half_speed. full_speed "
|
||||||
"option only available from v2.0 boards and is recommended to set "
|
"option only available from v2.0 boards and is recommended to "
|
||||||
|
"set "
|
||||||
"number of interfaces to 2. Also overwrites "
|
"number of interfaces to 2. Also overwrites "
|
||||||
"adcphase to recommended default.\n\t [144|108]\n\t\t[Gotthard2] "
|
"adcphase to recommended default.\n\t [144|108]\n\t\t[Gotthard2] "
|
||||||
"Readout speed of chip in MHz. Default is 108."
|
"Readout speed of chip in MHz. Default is 108."
|
||||||
@ -947,7 +948,8 @@ std::string CmdProxy::CurrentSource(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "\n\t[0|1]\n\t\t[Gotthard2] Enable or disable current source. Default "
|
os << "\n\t[0|1]\n\t\t[Gotthard2] Enable or disable current source. "
|
||||||
|
"Default "
|
||||||
"is disabled.\n\t[0|1] [fix|nofix] [select source] [(only for "
|
"is disabled.\n\t[0|1] [fix|nofix] [select source] [(only for "
|
||||||
"chipv1.1)normal|low]\n\t\t[Jungfrau] Disable or enable current "
|
"chipv1.1)normal|low]\n\t\t[Jungfrau] Disable or enable current "
|
||||||
"source with some parameters. The select source is 0-63 for "
|
"source with some parameters. The select source is 0-63 for "
|
||||||
@ -1320,7 +1322,8 @@ std::string CmdProxy::Trigger(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
if (cmd == "trigger") {
|
if (cmd == "trigger") {
|
||||||
os << "\n\t[Eiger][Mythen3] Sends software trigger signal to detector";
|
os << "\n\t[Eiger][Mythen3] Sends software trigger signal to "
|
||||||
|
"detector";
|
||||||
} else if (cmd == "blockingtrigger") {
|
} else if (cmd == "blockingtrigger") {
|
||||||
os << "\n\t[Eiger] Sends software trigger signal to detector and "
|
os << "\n\t[Eiger] Sends software trigger signal to detector and "
|
||||||
"blocks till "
|
"blocks till "
|
||||||
@ -2032,7 +2035,8 @@ std::string CmdProxy::VetoStreaming(int action) {
|
|||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[none|lll|10gbe|...]\n\t[Gotthard2] Enable or disable the 2 "
|
os << "[none|lll|10gbe|...]\n\t[Gotthard2] Enable or disable the 2 "
|
||||||
"veto streaming interfaces available. Can include more than one "
|
"veto streaming interfaces available. Can include more than one "
|
||||||
"interface. \n\tDefault: none. lll (low latency link) is the default "
|
"interface. \n\tDefault: none. lll (low latency link) is the "
|
||||||
|
"default "
|
||||||
"interface to work with. \n\t10GbE is for debugging and also "
|
"interface to work with. \n\t10GbE is for debugging and also "
|
||||||
"enables second interface in receiver for listening to veto "
|
"enables second interface in receiver for listening to veto "
|
||||||
"packets (writes a separate file if writing enabled). Also "
|
"packets (writes a separate file if writing enabled). Also "
|
||||||
@ -2815,10 +2819,11 @@ std::string CmdProxy::ProgramFpga(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[fname.pof | fname.rbf]\n\t[Jungfrau][Ctb][Moench] Programs "
|
os << "[fname.pof | fname.rbf (full path)]\n\t[Jungfrau][Ctb][Moench] "
|
||||||
"FPGA from pof file. Rebooting controller is recommended. "
|
"Programs FPGA from pof file (full path). Then, detector "
|
||||||
"\n\t[Mythen3][Gotthard2] Programs FPGA from rbf file. Power "
|
"controller is rebooted \n\t[Mythen3][Gotthard2] Programs FPGA "
|
||||||
"cycling the detector is recommended. "
|
"from rbf file (full path). Then, detector controller is "
|
||||||
|
"rebooted."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
throw sls::RuntimeError("Cannot get");
|
throw sls::RuntimeError("Cannot get");
|
||||||
@ -2838,11 +2843,13 @@ std::string CmdProxy::CopyDetectorServer(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[server_name] "
|
os << "[server_name (in tftp folder)] "
|
||||||
"[pc_host_name]\n\t[Jungfrau][Ctb][Moench][Mythen3][Gotthard2] "
|
"[pc_host_name]\n\t[Jungfrau][Eiger][Ctb][Moench][Mythen3]["
|
||||||
"Copies detector server via tftp from pc. "
|
"Gotthard2] Copies detector server via tftp from pc. Ensure that "
|
||||||
"\n\t[Jungfrau][Ctb][Moench]Also changes respawn server, which "
|
"server is in the pc's tftp folder. Makes a symbolic link with a "
|
||||||
"is effective after a reboot."
|
"shorter name (without vx.x.x). Then, detector reboots (except "
|
||||||
|
"Eiger).\n\t[Jungfrau][Ctb][Moench]Also changes respawn server "
|
||||||
|
"to the link, which is effective after a reboot."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
throw sls::RuntimeError("Cannot get");
|
throw sls::RuntimeError("Cannot get");
|
||||||
@ -2862,14 +2869,14 @@ std::string CmdProxy::UpdateFirmwareAndDetectorServer(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[server_name] [pc_host_name] "
|
os << "[server_name (in tftp folder)] [pc_host_name] [fname.pof (incl "
|
||||||
"[fname.pof]\n\t[Jungfrau][Gotthard][CTB][Moench] Updates the "
|
"full path)]\n\t[Jungfrau][Gotthard][CTB][Moench] Updates the "
|
||||||
"firmware, detector server and then reboots detector controller "
|
"firmware, detector server, creates the symbolic link and then "
|
||||||
"blackfin. \n\t[Mythen3][Gotthard2] Will still have old server "
|
"reboots detector controller. \n\t[Mythen3][Gotthard2] will "
|
||||||
"starting up as the new server is not respawned \n\tsname is "
|
"require a script to start up the shorter named server link at "
|
||||||
"name of detector server binary found on tftp folder of host pc "
|
"start up. \n\tsname is name of detector server binary found on "
|
||||||
"\n\thostname is name of pc to tftp from \n\tfname is "
|
"tftp folder of host pc \n\thostname is name of pc to tftp from "
|
||||||
"programming file name"
|
"\n\tfname is programming file name"
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
throw sls::RuntimeError("Cannot get");
|
throw sls::RuntimeError("Cannot get");
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
#define APILIB 0x211008
|
#define APILIB 0x211008
|
||||||
#define APIRECEIVER 0x211007
|
#define APIRECEIVER 0x211007
|
||||||
#define APIGUI 0x210819
|
#define APIGUI 0x210819
|
||||||
#define APICTB 0x211008
|
#define APICTB 0x211019
|
||||||
#define APIGOTTHARD 0x211008
|
#define APIGOTTHARD 0x211019
|
||||||
#define APIGOTTHARD2 0x211008
|
#define APIGOTTHARD2 0x211019
|
||||||
#define APIMYTHEN3 0x211008
|
#define APIJUNGFRAU 0x211019
|
||||||
#define APIMOENCH 0x211008
|
#define APIMYTHEN3 0x211019
|
||||||
#define APIEIGER 0x211013
|
#define APIMOENCH 0x211019
|
||||||
#define APIJUNGFRAU 0x211018
|
#define APIEIGER 0x211019
|
||||||
|
Loading…
x
Reference in New Issue
Block a user