mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-05 17:40:40 +02:00
resolved conflicts from merging 3.1.1 in here
This commit is contained in:
commit
a36b715eab
112
RELEASE.txt
112
RELEASE.txt
@ -1,113 +1 @@
|
|||||||
SLS Detector Package 3.1.1 released on 2018-03-12
|
|
||||||
=================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INTRODUCTION
|
|
||||||
|
|
||||||
This document describes the differences between 3.1.0 and 3.1.0 releases.
|
|
||||||
|
|
||||||
The conda package of the binaries can be downloaded from
|
|
||||||
|
|
||||||
https://github.com/slsdetectorgroup/sls_detector_software.git
|
|
||||||
|
|
||||||
The Python interface to the software package (including the package) is at
|
|
||||||
|
|
||||||
https://github.com/slsdetectorgroup/sls_detector.git
|
|
||||||
|
|
||||||
Manual (both HTML and pdf versions) are provided in
|
|
||||||
manual/docs/
|
|
||||||
|
|
||||||
Documentation from Source Code can be found for the Command Line and for the API in
|
|
||||||
html:
|
|
||||||
manual/docs/html/slsDetectorClientDocs/index.html
|
|
||||||
manual/docs/html/slsDetectorUsersDocs/index.html
|
|
||||||
pdf:
|
|
||||||
manual/docs/pdf/slsDetectorClientDocs.pdf
|
|
||||||
manual/docs/pdf/slsDetectorUsersDocs.pdf
|
|
||||||
|
|
||||||
Example including binaries for detector and receiver user classes can be found in
|
|
||||||
|
|
||||||
manual/manual-api
|
|
||||||
|
|
||||||
User documentation can also be accessed directly at this location:
|
|
||||||
|
|
||||||
https://www.psi.ch/detectors/users-support
|
|
||||||
|
|
||||||
If you have any software related questions or comments, please send them to:
|
|
||||||
|
|
||||||
dhanya.thattil@psi.ch
|
|
||||||
anna.bergamaschi@psi.ch
|
|
||||||
|
|
||||||
If you have any python related questions or comments, please send them to:
|
|
||||||
|
|
||||||
erik.frojdh@psi.ch
|
|
||||||
|
|
||||||
|
|
||||||
CONTENTS
|
|
||||||
|
|
||||||
- Firmware Requirements
|
|
||||||
- Changes in User Interface
|
|
||||||
- New Features
|
|
||||||
- Resolved Issues
|
|
||||||
- Known Issues
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Firmware Requirements
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Please refer to the link below for more details on the firmware versions.
|
|
||||||
https://www.psi.ch/detectors/firmware.
|
|
||||||
|
|
||||||
Gotthard
|
|
||||||
========
|
|
||||||
Minimum compatible version : 11.01.2013
|
|
||||||
Latest version : 08.02.2018 (50um and 25um Master)
|
|
||||||
09.02.2018 (25 um Slave)
|
|
||||||
|
|
||||||
-Can not be upgraded remotely.
|
|
||||||
|
|
||||||
|
|
||||||
Eiger
|
|
||||||
=====
|
|
||||||
Minimum compatible version : 16
|
|
||||||
Latest version : 20
|
|
||||||
|
|
||||||
-Can be upgraded remotely via bit files.
|
|
||||||
|
|
||||||
|
|
||||||
Jungfrau
|
|
||||||
========
|
|
||||||
Minimum compatible version : 13.11.2017
|
|
||||||
Latest version : 13.11.2017
|
|
||||||
|
|
||||||
-Can be upgraded remotely via sls_detector_put programfpga <pof>.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Changes in User Interface
|
|
||||||
=========================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
New Features
|
|
||||||
============
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Resolved Issues
|
|
||||||
===============
|
|
||||||
|
|
||||||
|
|
||||||
Known Issues
|
|
||||||
============
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1
serverBin/eigerDetectorServer_developer
Symbolic link
1
serverBin/eigerDetectorServer_developer
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.0.16.1
|
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.0.21.0
|
|
1
serverBin/gotthardDetectorServer_developer
Symbolic link
1
serverBin/gotthardDetectorServer_developer
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServer_developer
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.1.0.1
|
|
1
serverBin/jungfrauDetectorServer_developer
Symbolic link
1
serverBin/jungfrauDetectorServer_developer
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServerv3.0.0.12
|
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServerv3.1.0.2
|
|
Binary file not shown.
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
|
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: 06cdf8ad9204fd306cb1017b91e67452c61715d4
|
Repsitory UUID: 98752e1cdbd78167ad20c6a01a17852b1a2263a7
|
||||||
Revision: 323
|
Revision: 326
|
||||||
Branch: developer
|
Branch: developer
|
||||||
Last Changed Author: Erik_Frojdh
|
Last Changed Author: Gemma_Tinti
|
||||||
Last Changed Rev: 3671
|
Last Changed Rev: 3733
|
||||||
Last Changed Date: 2018-03-13 10:28:12.000000002 +0100 ./FebRegisterDefs.h
|
Last Changed Date: 2018-03-21 08:34:29.000000002 +0100 ./FebRegisterDefs.h
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "06cdf8ad9204fd306cb1017b91e67452c61715d4"
|
#define GITREPUUID "98752e1cdbd78167ad20c6a01a17852b1a2263a7"
|
||||||
#define GITAUTH "Erik_Frojdh"
|
#define GITAUTH "Gemma_Tinti"
|
||||||
#define GITREV 0x3671
|
#define GITREV 0x3733
|
||||||
#define GITDATE 0x20180313
|
#define GITDATE 0x20180321
|
||||||
#define GITBRANCH "developer"
|
#define GITBRANCH "developer"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorSoftware
|
Path: slsDetectorsPackage/slsDetectorSoftware
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: b58c3e8951625ed9124669404f6b68aca340a1b8
|
Repsitory UUID: 98752e1cdbd78167ad20c6a01a17852b1a2263a7
|
||||||
Revision: 1842
|
Revision: 1846
|
||||||
Branch: developer
|
Branch: developer
|
||||||
Last Changed Author: Dhanya_Thattil
|
Last Changed Author: Gemma_Tinti
|
||||||
Last Changed Rev: 3727
|
Last Changed Rev: 3733
|
||||||
Last Changed Date: 2018-03-14 16:10:22.000000002 +0100 ./multiSlsDetector/multiSlsDetector.cpp
|
Last Changed Date: 2018-03-21 09:01:24.000000002 +0100 ./threadFiles/ThreadPool.o
|
||||||
|
Binary file not shown.
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorSoftware/jungfrauDetectorServer
|
Path: slsDetectorsPackage/slsDetectorSoftware/jungfrauDetectorServer
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: 06cdf8ad9204fd306cb1017b91e67452c61715d4
|
Repsitory UUID: 98752e1cdbd78167ad20c6a01a17852b1a2263a7
|
||||||
Revision: 122
|
Revision: 133
|
||||||
Branch: developer
|
Branch: developer
|
||||||
Last Changed Author: Erik_Frojdh
|
Last Changed Author: Gemma_Tinti
|
||||||
Last Changed Rev: 3671
|
Last Changed Rev: 3733
|
||||||
Last Changed Date: 2018-03-13 10:29:31.000000002 +0100 ./Makefile.virtual
|
Last Changed Date: 2018-03-21 08:34:29.000000002 +0100 ./RegisterDefs.h
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "06cdf8ad9204fd306cb1017b91e67452c61715d4"
|
#define GITREPUUID "98752e1cdbd78167ad20c6a01a17852b1a2263a7"
|
||||||
#define GITAUTH "Erik_Frojdh"
|
#define GITAUTH "Gemma_Tinti"
|
||||||
#define GITREV 0x3671
|
#define GITREV 0x3733
|
||||||
#define GITDATE 0x20180313
|
#define GITDATE 0x20180321
|
||||||
#define GITBRANCH "developer"
|
#define GITBRANCH "developer"
|
||||||
|
@ -1250,6 +1250,10 @@ void configurePll() {
|
|||||||
#endif
|
#endif
|
||||||
u_int32_t val;
|
u_int32_t val;
|
||||||
int32_t phase=0, inv=0;
|
int32_t phase=0, inv=0;
|
||||||
|
// ensuring PLL is never configured with same phase
|
||||||
|
if (clkPhase[1] == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
printf("Configuring PLL with phase in %d\n", clkPhase[1]);
|
printf("Configuring PLL with phase in %d\n", clkPhase[1]);
|
||||||
if (clkPhase[1]>0) {
|
if (clkPhase[1]>0) {
|
||||||
|
@ -101,8 +101,8 @@ enum NETWORKINDEX { TXN_FRAME };
|
|||||||
#define CONFIG_QUARTER_SPEED (CONFIG_TDMA_DISABLE_VAL + CONFIG_QUARTER_SPEED_10MHZ_VAL + CONFIG_MODE_1_X_10GBE_VAL)
|
#define CONFIG_QUARTER_SPEED (CONFIG_TDMA_DISABLE_VAL + CONFIG_QUARTER_SPEED_10MHZ_VAL + CONFIG_MODE_1_X_10GBE_VAL)
|
||||||
#define ADC_OFST_HALF_SPEED_VAL (0x20) //adc pipeline
|
#define ADC_OFST_HALF_SPEED_VAL (0x20) //adc pipeline
|
||||||
#define ADC_OFST_QUARTER_SPEED_VAL (0x0f)
|
#define ADC_OFST_QUARTER_SPEED_VAL (0x0f)
|
||||||
#define ADC_PHASE_HALF_SPEED (0x41)
|
#define ADC_PHASE_HALF_SPEED (0x48) //72
|
||||||
#define ADC_PHASE_QUARTER_SPEED (0x19)
|
#define ADC_PHASE_QUARTER_SPEED (0x48) //72
|
||||||
|
|
||||||
/* Maybe not required for jungfrau */
|
/* Maybe not required for jungfrau */
|
||||||
#define NTRIMBITS (6)
|
#define NTRIMBITS (6)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "b58c3e8951625ed9124669404f6b68aca340a1b8"
|
#define GITREPUUID "98752e1cdbd78167ad20c6a01a17852b1a2263a7"
|
||||||
#define GITAUTH "Dhanya_Thattil"
|
#define GITAUTH "Gemma_Tinti"
|
||||||
#define GITREV 0x3727
|
#define GITREV 0x3733
|
||||||
#define GITDATE 0x20180314
|
#define GITDATE 0x20180321
|
||||||
#define GITBRANCH "developer"
|
#define GITBRANCH "developer"
|
||||||
|
@ -718,7 +718,7 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \page config
|
/*! \page config
|
||||||
- <b>clkdivider [i]</b> sets/gets the readout clock divider. EIGER, JUNGFRAU [0(fast speed), 1(half speed), 2(quarter speed)]. MYTHEN[???]. \c Returns \c (int)
|
- <b>clkdivider [i]</b> sets/gets the readout clock divider. EIGER, JUNGFRAU [0(fast speed), 1(half speed), 2(quarter speed)]. Jungfrau, full speed is not implemented and overwrites adcphase to recommended default. MYTHEN[???]. \c Returns \c (int)
|
||||||
*/
|
*/
|
||||||
descrToFuncMap[i].m_pFuncName="clkdivider"; //
|
descrToFuncMap[i].m_pFuncName="clkdivider"; //
|
||||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSpeed;
|
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSpeed;
|
||||||
@ -774,7 +774,7 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
|||||||
++i;
|
++i;
|
||||||
|
|
||||||
/*! \page config
|
/*! \page config
|
||||||
- <b>adcphase [i]</b> Sets/gets the ADC clock frequency in MHz. For the new chiptestboard!\c Returns \c (int)
|
- <b>adcphase [i]</b> Sets/gets phase of the sampling clock. For JUNGFRAU, setting speed (clkdivider) overwrites adcphase to its default recommended value. (Not for EIGER) \c Returns \c (int)
|
||||||
*/
|
*/
|
||||||
descrToFuncMap[i].m_pFuncName="adcphase"; //
|
descrToFuncMap[i].m_pFuncName="adcphase"; //
|
||||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSpeed;
|
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSpeed;
|
||||||
@ -5830,7 +5830,6 @@ string slsDetectorCommand::cmdSpeed(int narg, char *args[], int action) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
myDet->setOnline(ONLINE_FLAG);
|
myDet->setOnline(ONLINE_FLAG);
|
||||||
|
|
||||||
ret=myDet->setSpeed(index,t);
|
ret=myDet->setSpeed(index,t);
|
||||||
@ -5849,21 +5848,23 @@ string slsDetectorCommand::helpSpeed(int narg, char *args[], int action) {
|
|||||||
ostringstream os;
|
ostringstream os;
|
||||||
if (action==PUT_ACTION || action==HELP_ACTION) {
|
if (action==PUT_ACTION || action==HELP_ACTION) {
|
||||||
|
|
||||||
os << "clkdivider c \t sets readout clock divider" << std::endl;
|
os << "clkdivider c \t sets readout clock divider. For Jungfrau, it also overwrites adcphase to recommended default" << std::endl;
|
||||||
os << "setlength c\t sets the length of the set/reset signals (in clock cycles)" << std::endl;
|
os << "setlength c\t sets the length of the set/reset signals (in clock cycles)" << std::endl;
|
||||||
os << "waitstates c \t sets the waitstates of the bus interface" << std::endl;
|
os << "waitstates c \t sets the waitstates of the bus interface" << std::endl;
|
||||||
os << "totdivider c\t sets the clock divider in tot mode" << std::endl;
|
os << "totdivider c\t sets the clock divider in tot mode" << std::endl;
|
||||||
os << "totdutycycle c\t sets the duty cycle of the tot clock" << std::endl;
|
os << "totdutycycle c\t sets the duty cycle of the tot clock" << std::endl;
|
||||||
|
os << "adcphase c\t Sets phase of the sampling clock. For JUNGFRAU, setting speed (clkdivider) overwrites adcphase to its default recommended value. (Not for EIGER)" << std::endl;
|
||||||
os << std::endl;
|
os << std::endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
if (action==GET_ACTION || action==HELP_ACTION) {
|
if (action==GET_ACTION || action==HELP_ACTION) {
|
||||||
|
|
||||||
os << "clkdivider \t gets readout clock divider" << std::endl;
|
os << "clkdivider \t gets readout clock divider. For Jungfrau, it also overwrites adcphase to recommended default" << std::endl;
|
||||||
os << "setlength \t gets the length of the set/reset signals (in clock cycles)" << std::endl;
|
os << "setlength \t gets the length of the set/reset signals (in clock cycles)" << std::endl;
|
||||||
os << "waitstates \t gets the waitstates of the bus interface" << std::endl;
|
os << "waitstates \t gets the waitstates of the bus interface" << std::endl;
|
||||||
os << "totdivider \t gets the clock divider in tot mode" << std::endl;
|
os << "totdivider \t gets the clock divider in tot mode" << std::endl;
|
||||||
os << "totdutycycle \t gets the duty cycle of the tot clock" << std::endl;
|
os << "totdutycycle \t gets the duty cycle of the tot clock" << std::endl;
|
||||||
|
os << "totdutycycle \t gets phase of the sampling clock. For JUNGFRAU, setting speed (clkdivider) overwrites adcphase to its default recommended value. (Not for EIGER)" << std::endl;
|
||||||
os << std::endl;
|
os << std::endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ You can find examples of how this classes can be instatiated in mainClient.cpp
|
|||||||
@libdoc The slsDetectorUsers class is a minimal interface class which should be instantiated by the users in their acquisition software (EPICS, spec etc.). More advanced configuration functions are not implemented and can be written in a configuration or parameters file that can be read/written.
|
@libdoc The slsDetectorUsers class is a minimal interface class which should be instantiated by the users in their acquisition software (EPICS, spec etc.). More advanced configuration functions are not implemented and can be written in a configuration or parameters file that can be read/written.
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
@short Class for detector functionalitiesto embed the detector controls in the users custom interface e.g. EPICS, Lima etc.
|
@short Class for detector functionalities to embed the detector controls in the users custom interface e.g. EPICS, Lima etc.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ class slsDetectorUsers
|
|||||||
*/
|
*/
|
||||||
int getDetectorSize(int &x0, int &y0, int &nx, int &ny);
|
int getDetectorSize(int &x0, int &y0, int &nx, int &ny);
|
||||||
/**
|
/**
|
||||||
@short setsthe maximum detector size
|
@short gets the maximum detector size
|
||||||
\param x0 horizontal position origin in channel number
|
\param x0 horizontal position origin in channel number
|
||||||
\param y0 vertical position origin in channel number
|
\param y0 vertical position origin in channel number
|
||||||
\param nx number of channels in horiziontal
|
\param nx number of channels in horiziontal
|
||||||
|
@ -41,6 +41,9 @@ char mess[MAX_STR_LENGTH];
|
|||||||
int dataBytes = 10;
|
int dataBytes = 10;
|
||||||
int isControlServer = 0;
|
int isControlServer = 0;
|
||||||
int debugflag = 0;
|
int debugflag = 0;
|
||||||
|
#ifdef EIGERD
|
||||||
|
uint32_t dhcpipad = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* initialization functions */
|
/* initialization functions */
|
||||||
|
|
||||||
@ -66,6 +69,9 @@ void init_detector(int controlserver) {
|
|||||||
if (controlserver) {
|
if (controlserver) {
|
||||||
isControlServer = 1;
|
isControlServer = 1;
|
||||||
initControlServer();
|
initControlServer();
|
||||||
|
#ifdef EIGERD
|
||||||
|
dhcpipad = getDetectorIP();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else initStopServer();
|
else initStopServer();
|
||||||
#endif
|
#endif
|
||||||
@ -3678,16 +3684,19 @@ int configure_mac(int file_des) {
|
|||||||
printf("WARNING: Matched detectormac to the hardware mac now\n");
|
printf("WARNING: Matched detectormac to the hardware mac now\n");
|
||||||
printf("*************************************************\n");
|
printf("*************************************************\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// always remember the ip sent from the client (could be for 10g(if not dhcp))
|
||||||
|
if (detipad != getDetectorIP())
|
||||||
|
dhcpipad = detipad;
|
||||||
|
|
||||||
//only for 1Gbe
|
//only for 1Gbe
|
||||||
if(!enableTenGigabitEthernet(-1)){
|
if(!enableTenGigabitEthernet(-1)){
|
||||||
if (detipad != getDetectorIP()){
|
printf("*************************************************\n");
|
||||||
printf("*************************************************\n");
|
printf("WARNING: Using DHCP IP for Configuring MAC\n");
|
||||||
printf("WARNING: actual detector ip address %x does not match the one from client %x\n",getDetectorIP(),detipad);
|
printf("*************************************************\n");
|
||||||
detipad = getDetectorIP();
|
detipad = getDetectorIP();
|
||||||
printf("WARNING: Matched detector ip to the hardware ip now\n");
|
} else
|
||||||
printf("*************************************************\n");
|
detipad = dhcpipad;
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
retval=configureMAC(ipad,imacadd,idetectormacadd,detipad,udpport,udpport2,0); //digitalTestBit);
|
retval=configureMAC(ipad,imacadd,idetectormacadd,detipad,udpport,udpport2,0); //digitalTestBit);
|
||||||
if(retval==-1) {
|
if(retval==-1) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user