mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-29 17:40:01 +02:00
ctb 1g non blocking acquire (#555)
* allowing ctb and moench 1g to have non blocking acquisition also send data, refactoring wait for acquisition finished for all others
This commit is contained in:
parent
e385618d09
commit
bac32dcba9
@ -99,6 +99,7 @@ This document describes the differences between v7.0.0 and v6.x.x
|
|||||||
- setting rx_hostname (or udp_dstip with rx_hostname not none) will always set udp_dstmac. solves problem of chaing udp_dstip and udp_dstmac stays the same
|
- setting rx_hostname (or udp_dstip with rx_hostname not none) will always set udp_dstmac. solves problem of chaing udp_dstip and udp_dstmac stays the same
|
||||||
- jungfrau reset core and usleep removed (fix for 6.1.1 is now fixed in firmware)
|
- jungfrau reset core and usleep removed (fix for 6.1.1 is now fixed in firmware)
|
||||||
- g2 change clkdivs 2 3 4 to defaults for burst and cw mode.
|
- g2 change clkdivs 2 3 4 to defaults for burst and cw mode.
|
||||||
|
- ctb and moench: allowing 1g non blocking acquire to send data
|
||||||
|
|
||||||
2. Resolved Issues
|
2. Resolved Issues
|
||||||
==================
|
==================
|
||||||
|
Binary file not shown.
@ -2083,7 +2083,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2203,40 +2203,31 @@ void readandSendUDPFrames(int *ret, char *mess) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd() {
|
||||||
#ifdef VIRTUAL
|
|
||||||
// wait for acquisition to be done
|
|
||||||
while (runBusy()) {
|
while (runBusy()) {
|
||||||
usleep(500); // random
|
usleep(500);
|
||||||
|
}
|
||||||
|
#ifndef VIRTUAL
|
||||||
|
int64_t retval = getNumFramesLeft() + 1;
|
||||||
|
if (retval > 0) {
|
||||||
|
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
|
||||||
return;
|
|
||||||
#endif
|
#endif
|
||||||
// 1G
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
if (!enableTenGigabitEthernet(-1)) {
|
|
||||||
readandSendUDPFrames(ret, mess);
|
|
||||||
}
|
|
||||||
// 10G
|
|
||||||
else {
|
|
||||||
// wait for acquisition to be done
|
|
||||||
while (runBusy()) {
|
|
||||||
usleep(500); // random
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ret could be fail in 1gudp for not creating udp sockets
|
void readFrames(int *ret, char *mess) {
|
||||||
if (*ret != FAIL) {
|
#ifdef VIRTUAL
|
||||||
// frames left to give status
|
while (runBusy()) {
|
||||||
int64_t retval = getNumFramesLeft() + 2;
|
usleep(500);
|
||||||
if (retval > 1) {
|
|
||||||
sprintf(mess, "No data and run stopped: %lld frames left\n",
|
|
||||||
(long long int)retval);
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
} else {
|
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// 1G force reading of frames
|
||||||
|
if (!enableTenGigabitEthernet(-1)) {
|
||||||
|
readandSendUDPFrames(ret, mess);
|
||||||
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
}
|
}
|
||||||
*ret = (int)OK;
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void unsetFifoReadStrobes() {
|
void unsetFifoReadStrobes() {
|
||||||
|
Binary file not shown.
@ -2765,7 +2765,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(1);
|
closeUDPSocket(1);
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2893,16 +2893,13 @@ enum runStatus getRunStatus() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd(int *ret, char *mess) {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
// wait for status to be done
|
// wait for status to be done
|
||||||
while (sharedMemory_getStatus() == RUNNING) {
|
while (sharedMemory_getStatus() == RUNNING) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
|
||||||
return;
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
sharedMemory_lockLocalLink();
|
sharedMemory_lockLocalLink();
|
||||||
if (Feb_Control_WaitForFinishedFlag(5000, 1) == STATUS_ERROR) {
|
if (Feb_Control_WaitForFinishedFlag(5000, 1) == STATUS_ERROR) {
|
||||||
sharedMemory_unlockLocalLink();
|
sharedMemory_unlockLocalLink();
|
||||||
@ -2911,7 +2908,7 @@ void readFrame(int *ret, char *mess) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sharedMemory_unlockLocalLink();
|
sharedMemory_unlockLocalLink();
|
||||||
LOG(logINFOGREEN, ("Acquisition finished\n"));
|
LOG(logINFO, ("Acquisition done\n"));
|
||||||
|
|
||||||
// wait for detector to send
|
// wait for detector to send
|
||||||
int isTransmitting = 1;
|
int isTransmitting = 1;
|
||||||
@ -2940,9 +2937,9 @@ void readFrame(int *ret, char *mess) {
|
|||||||
printf("Transmitting...\n");
|
printf("Transmitting...\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Beb: Detector has sent all data (acquire)\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
#endif
|
#endif
|
||||||
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
|
Binary file not shown.
@ -3310,7 +3310,7 @@ void *start_timer(void *arg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -3396,18 +3396,11 @@ enum runStatus getRunStatus() {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd() {
|
||||||
// wait for status to be done
|
|
||||||
while (runBusy()) {
|
while (runBusy()) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*ret = (int)OK;
|
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
|
Binary file not shown.
@ -1729,7 +1729,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1854,28 +1854,17 @@ enum runStatus getRunStatus() {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd() {
|
||||||
#ifdef VIRTUAL
|
|
||||||
while (sharedMemory_getStatus() == RUNNING) {
|
|
||||||
// LOG(logERROR, ("Waiting for finished flag\n");
|
|
||||||
usleep(5000);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
// wait for status to be done
|
|
||||||
while (runBusy()) {
|
while (runBusy()) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
|
#ifndef VIRTUAL
|
||||||
// frames left to give status
|
|
||||||
*ret = (int)OK;
|
|
||||||
int64_t retval = getNumFramesLeft() + 1;
|
int64_t retval = getNumFramesLeft() + 1;
|
||||||
if (retval > -1) {
|
if (retval > -1) {
|
||||||
LOG(logERROR, ("No data and run stopped: %lld frames left\n",
|
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||||
(long long int)retval));
|
|
||||||
} else {
|
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
|
Binary file not shown.
@ -2712,7 +2712,7 @@ void *start_timer(void *arg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2824,26 +2824,17 @@ enum runStatus getRunStatus() {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd() {
|
||||||
// wait for status to be done
|
|
||||||
while (runBusy()) {
|
while (runBusy()) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifndef VIRTUAL
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*ret = (int)OK;
|
|
||||||
// frames left to give status
|
|
||||||
int64_t retval = getNumFramesLeft() + 1;
|
int64_t retval = getNumFramesLeft() + 1;
|
||||||
|
|
||||||
if (retval > 0) {
|
if (retval > 0) {
|
||||||
LOG(logERROR, ("No data and run stopped: %lld frames left\n",
|
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||||
(long long int)retval));
|
|
||||||
} else {
|
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
|
Binary file not shown.
@ -1755,7 +1755,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1877,40 +1877,31 @@ void readandSendUDPFrames(int *ret, char *mess) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd() {
|
||||||
#ifdef VIRTUAL
|
|
||||||
// wait for acquisition to be done
|
|
||||||
while (runBusy()) {
|
while (runBusy()) {
|
||||||
usleep(500); // random
|
usleep(500);
|
||||||
|
}
|
||||||
|
#ifndef VIRTUAL
|
||||||
|
int64_t retval = getNumFramesLeft() + 1;
|
||||||
|
if (retval > 0) {
|
||||||
|
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
|
||||||
return;
|
|
||||||
#endif
|
#endif
|
||||||
// 1G
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
if (!enableTenGigabitEthernet(-1)) {
|
|
||||||
readandSendUDPFrames(ret, mess);
|
|
||||||
}
|
|
||||||
// 10G
|
|
||||||
else {
|
|
||||||
// wait for acquisition to be done
|
|
||||||
while (runBusy()) {
|
|
||||||
usleep(500); // random
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ret could be fail in 1gudp for not creating udp sockets
|
void readFrames(int *ret, char *mess) {
|
||||||
if (*ret != FAIL) {
|
#ifdef VIRTUAL
|
||||||
// frames left to give status
|
while (runBusy()) {
|
||||||
int64_t retval = getNumFramesLeft() + 2;
|
usleep(500);
|
||||||
if (retval > 1) {
|
|
||||||
sprintf(mess, "No data and run stopped: %lld frames left\n",
|
|
||||||
(long long int)retval);
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
} else {
|
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// 1G force reading of frames
|
||||||
|
if (!enableTenGigabitEthernet(-1)) {
|
||||||
|
readandSendUDPFrames(ret, mess);
|
||||||
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
}
|
}
|
||||||
*ret = (int)OK;
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void unsetFifoReadStrobes() {
|
void unsetFifoReadStrobes() {
|
||||||
|
Binary file not shown.
@ -2564,7 +2564,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
sharedMemory_setStatus(IDLE);
|
sharedMemory_setStatus(IDLE);
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2689,27 +2689,18 @@ enum runStatus getRunStatus() {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void waitForAcquisitionEnd() {
|
||||||
// wait for status to be done
|
|
||||||
while (runBusy()) {
|
while (runBusy()) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifndef VIRTUAL
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*ret = (int)OK;
|
|
||||||
// frames left to give status
|
|
||||||
int64_t retval = getNumFramesLeft() + 1;
|
int64_t retval = getNumFramesLeft() + 1;
|
||||||
|
|
||||||
if (retval > 0) {
|
if (retval > 0) {
|
||||||
LOG(logERROR, ("No data and run stopped: %lld frames left\n",
|
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||||
(long long int)retval));
|
|
||||||
} else {
|
|
||||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
|
@ -666,7 +666,14 @@ int softwareTrigger(int block);
|
|||||||
int startReadOut();
|
int startReadOut();
|
||||||
#endif
|
#endif
|
||||||
enum runStatus getRunStatus();
|
enum runStatus getRunStatus();
|
||||||
void readFrame(int *ret, char *mess);
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
|
void readFrames(int *ret, char *mess);
|
||||||
|
#endif
|
||||||
|
#ifdef EIGERD
|
||||||
|
void waitForAcquisitionEnd(int *ret, char *mess);
|
||||||
|
#else
|
||||||
|
void waitForAcquisitionEnd();
|
||||||
|
#endif
|
||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
void readandSendUDPFrames(int *ret, char *mess);
|
void readandSendUDPFrames(int *ret, char *mess);
|
||||||
void unsetFifoReadStrobes();
|
void unsetFifoReadStrobes();
|
||||||
|
@ -52,7 +52,6 @@ int start_acquisition(int);
|
|||||||
int stop_acquisition(int);
|
int stop_acquisition(int);
|
||||||
int get_run_status(int);
|
int get_run_status(int);
|
||||||
int start_and_read_all(int);
|
int start_and_read_all(int);
|
||||||
int read_all(int);
|
|
||||||
int get_num_frames(int);
|
int get_num_frames(int);
|
||||||
int set_num_frames(int);
|
int set_num_frames(int);
|
||||||
int get_num_triggers(int);
|
int get_num_triggers(int);
|
||||||
|
@ -2010,15 +2010,30 @@ void *start_state_machine(void *arg) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// blocking or scan
|
|
||||||
if (*blocking || times > 1) {
|
|
||||||
readFrame(&ret, mess);
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
|
readFrames(&ret, mess);
|
||||||
if (ret == FAIL && scan) {
|
if (ret == FAIL && scan) {
|
||||||
sprintf(scanErrMessage, "Cannot scan at %d. ", scanSteps[i]);
|
sprintf(scanErrMessage, "Cannot scan at %d. ", scanSteps[i]);
|
||||||
strcat(scanErrMessage, mess);
|
strcat(scanErrMessage, mess);
|
||||||
sharedMemory_setScanStatus(ERROR);
|
sharedMemory_setScanStatus(ERROR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
// blocking or scan
|
||||||
|
if (*blocking || times > 1) {
|
||||||
|
#ifdef EIGERD
|
||||||
|
waitForAcquisitionEnd(&ret, mess);
|
||||||
|
if (ret == FAIL && scan) {
|
||||||
|
sprintf(scanErrMessage, "Cannot scan at %d. ", scanSteps[i]);
|
||||||
|
strcat(scanErrMessage, mess);
|
||||||
|
sharedMemory_setScanStatus(ERROR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
waitForAcquisitionEnd();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// end of scan
|
// end of scan
|
||||||
@ -2061,18 +2076,6 @@ int get_run_status(int file_des) {
|
|||||||
|
|
||||||
int start_and_read_all(int file_des) { return acquire(1, file_des); }
|
int start_and_read_all(int file_des) { return acquire(1, file_des); }
|
||||||
|
|
||||||
int read_all(int file_des) {
|
|
||||||
ret = OK;
|
|
||||||
memset(mess, 0, sizeof(mess));
|
|
||||||
|
|
||||||
LOG(logDEBUG1, ("Reading all frames\n"));
|
|
||||||
// only set
|
|
||||||
if (Server_VerifyLock() == OK) {
|
|
||||||
readFrame(&ret, mess);
|
|
||||||
}
|
|
||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_num_frames(int file_des) {
|
int get_num_frames(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
#define APILIB 0x220609
|
#define APILIB 0x220609
|
||||||
#define APIRECEIVER 0x220609
|
#define APIRECEIVER 0x220609
|
||||||
#define APIGUI 0x220609
|
#define APIGUI 0x220609
|
||||||
#define APIEIGER 0x220816
|
#define APICTB 0x220916
|
||||||
#define APICTB 0x220831
|
#define APIGOTTHARD 0x220916
|
||||||
#define APIGOTTHARD 0x220831
|
#define APIGOTTHARD2 0x220916
|
||||||
#define APIJUNGFRAU 0x220831
|
#define APIJUNGFRAU 0x220916
|
||||||
#define APIMOENCH 0x220831
|
#define APIMYTHEN3 0x220916
|
||||||
#define APIMYTHEN3 0x220901
|
#define APIMOENCH 0x220916
|
||||||
#define APIGOTTHARD2 0x220912
|
#define APIEIGER 0x220916
|
||||||
|
Loading…
x
Reference in New Issue
Block a user