Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
AcquireWaveformLecroy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Software Control System
Tango devices
MeasureInstruments
Lecroy
AcquireWaveformLecroy
Commits
bf897606
Commit
bf897606
authored
15 years ago
by
ELATTAOUI
Browse files
Options
Downloads
Patches
Plain Diff
xavier :
- exclude added in pom.xml
parent
6d759555
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
pom.xml
+26
-3
26 additions, 3 deletions
pom.xml
src/SocketLecroy.cpp
+0
-351
0 additions, 351 deletions
src/SocketLecroy.cpp
with
26 additions
and
354 deletions
pom.xml
+
26
−
3
View file @
bf897606
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
</parent>
</parent>
<groupId>
fr.soleil.device
</groupId>
<groupId>
fr.soleil.device
</groupId>
<artifactId>
AcquireWaveformLecroy-${aol}-${mode}
</artifactId>
<artifactId>
AcquireWaveformLecroy-${aol}-${mode}
</artifactId>
<version>
1.1.6
-SNAPSHOT
</version>
<version>
1.1.6
</version>
<packaging>
nar
</packaging>
<packaging>
nar
</packaging>
<name>
AcquireWaveformLecroy
</name>
<name>
AcquireWaveformLecroy
</name>
<!-- use for the name of executable -->
<!-- use for the name of executable -->
...
@@ -19,8 +19,31 @@
...
@@ -19,8 +19,31 @@
<groupId>
org.freehep
</groupId>
<groupId>
org.freehep
</groupId>
<artifactId>
freehep-nar-plugin
</artifactId>
<artifactId>
freehep-nar-plugin
</artifactId>
<configuration>
<configuration>
<os>
Windows
</os>
<specificConfigurations>
</configuration>
<specificConfiguration>
<id>
AcquireWaveformLecroy Win32
</id>
<activation>
<os>
Windows
</os>
</activation>
<cpp>
<excludes>
<exclude>
**/Linux*.*
</exclude>
</excludes>
</cpp>
</specificConfiguration>
<specificConfiguration>
<id>
AcquireWaveformLecroy Linux
</id>
<activation>
<os>
Linux
</os>
</activation>
<cpp>
<excludes>
<exclude>
**/Win32*.*
</exclude>
</excludes>
</cpp>
</specificConfiguration>
</specificConfigurations>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
...
...
This diff is collapsed.
Click to expand it.
src/SocketLecroy.cpp
deleted
100644 → 0
+
0
−
351
View file @
6d759555
//******************************************************************************************
//
//
// september 13, 2004 : Source file for the communication in socket mode
//
// with a Lecroy scope (avaiable for all models)
//
// author : X.Elattaoui
//
// SocketLecroy.cpp: implementation of the SocketLecroy class.
//
//******************************************************************************************
//- INCLUDE
#include
"SocketLecroy.h"
//- init of the static instance
SocketLecroy
*
SocketLecroy
::
SL_instance
=
0
;
//- ptr on the SocketLecroy instance
SocketLecroy
*
SocketLecroy
::
get_instance
()
{
if
(
!
SL_instance
)
SL_instance
=
new
SocketLecroy
();
return
SL_instance
;
}
void
SocketLecroy
::
delete_instance
(
SocketLecroy
*
SL_instance
)
{
if
(
SL_instance
)
{
delete
SL_instance
;
SL_instance
=
0
;
}
}
//- CTOR
SocketLecroy
::
SocketLecroy
()
{
sConnectedFlag
=
false
;
}
//- DTOR
SocketLecroy
::~
SocketLecroy
()
{
TCP_Disconnect
();
}
//- Build the connection
void
SocketLecroy
::
TCP_Connect
(
char
*
ip_address
)
throw
(
lecroy
::
SocketException
)
{
SOCKADDR_IN
serverAddr
;
int
sockAddrSize
=
sizeof
(
SOCKADDR
),
result
;
const
int
resp
=
1
;
fd_set
wr_set
=
{
1
,
{
0
}};
TIMEVAL
tval
;
unsigned
long
argp
;
char
tmpStr
[
256
];
//- connection test
if
(
sConnectedFlag
)
return
;
strcpy
(
sCurrentAddress
,
ip_address
);
tval
.
tv_sec
=
sTimeout
;
tval
.
tv_usec
=
0
;
//- build server socket address
serverAddr
.
sin_family
=
AF_INET
;
serverAddr
.
sin_port
=
htons
(
SERVER_PORT
);
if
((
serverAddr
.
sin_addr
.
s_addr
=
inet_addr
(
ip_address
))
==
-
1
)
{
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Bad server address."
,
"SocketLecroy::TCP_Connect( )."
);
}
//- create client's socket
if
((
hSocket
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
))
==
INVALID_SOCKET
)
{
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Unable to create client's socket."
,
"SocketLecroy::TCP_Connect( )."
);
}
if
(
setsockopt
(
hSocket
,
IPPROTO_TCP
,
TCP_NODELAY
,
(
char
*
)
&
resp
,
sizeof
(
resp
))
!=
0
)
{
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Unable to set socket option to TCP_NODELAY."
,
"SocketLecroy::TCP_Connect( )."
);
}
wr_set
.
fd_array
[
0
]
=
hSocket
;
argp
=
1
;
//-non blocking mode
ioctlsocket
(
hSocket
,
FIONBIO
,
&
argp
);
int
status
=
connect
(
hSocket
,
(
SOCKADDR
FAR
*
)
&
serverAddr
,
sockAddrSize
);
int
error_code
=
WSAGetLastError
();
//- already connected !
if
(
status
&&
error_code
==
WSAEISCONN
)
return
;
if
(
status
!=
0
)
// We are not connected : so retry
{
if
(
error_code
==
WSAEINPROGRESS
||
error_code
==
WSAEWOULDBLOCK
)
// But the connection is in progress
{
int
nb
=
0
;
while
(
nb
++
<
5
)
// We will attempt to connect every 100 ms for 5 times max.
{
status
=
::
connect
(
hSocket
,
(
sockaddr
*
)
&
serverAddr
,
sizeof
(
serverAddr
));
error_code
=
WSAGetLastError
();
if
(
status
!=
0
)
// Still not connected
{
if
(
errno
==
WSAEISCONN
)
// This is the right error !
{
Sleep
(
150
);
// Sleep for 150 ms
}
}
// Connection is OK.
else
break
;
}
//TODO : throw ; // Too much attempts, so failure !
}
// TODO : throw ; // Not the right error, so failure !
}
// Connected at first attempt !
result
=
select
(
hSocket
,
NULL
,
&
wr_set
,
NULL
,
&
tval
);
argp
=
0
;
//-blocking mode
ioctlsocket
(
hSocket
,
FIONBIO
,
&
argp
);
//- connect to server (scope)
if
(
result
==
SOCKET_ERROR
)
{
sprintf
(
tmpStr
,
"Unable to make connection to IP:%s"
,
ip_address
);
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
tmpStr
,
"SocketLecroy::TCP_Connect( )."
);
}
sConnectedFlag
=
TRUE
;
}
//- DisconnectFromScope: disconnect from a network device
void
SocketLecroy
::
TCP_Disconnect
(
void
)
{
if
(
sConnectedFlag
==
TRUE
)
{
closesocket
(
hSocket
);
sConnectedFlag
=
FALSE
;
}
}
//- Clear a connection
void
SocketLecroy
::
TCP_ClearDevice
(
void
)
throw
(
lecroy
::
SocketException
)
{
if
(
sConnectedFlag
!=
TRUE
)
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN"
,
"Disconnection already done."
,
"SocketLecroy::TCP_ClearDevice( )."
);
TCP_Disconnect
();
TCP_Connect
(
sCurrentAddress
);
}
//- Send commands to the remote device
void
SocketLecroy
::
TCP_WriteDevice
(
char
*
buf
,
int
len
,
BOOL
eoi_flag
)
throw
(
lecroy
::
SocketException
)
{
TCP_HEADER
header
;
int
result
,
bytes_more
,
bytes_xferd
;
char
*
idxPtr
;
//- test connection
if
(
sConnectedFlag
!=
TRUE
)
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Device not connected."
,
"SocketLecroy::TCP_WriteDevice( )."
);
if
(
len
<
CMD_BUF_LEN
)
strcpy
(
sCommandBuffer
,
buf
);
//- set the header info
header
.
bEOI_Flag
=
DATA_FLAG
;
header
.
bEOI_Flag
|=
(
eoi_flag
)
?
EOI_FLAG
:
0
;
header
.
reserved
[
0
]
=
1
;
header
.
reserved
[
1
]
=
0
;
header
.
reserved
[
2
]
=
0
;
header
.
iLength
=
htonl
(
len
);
//- write the header first
if
(
send
(
hSocket
,
(
char
*
)
&
header
,
sizeof
(
TCP_HEADER
),
0
)
!=
sizeof
(
TCP_HEADER
))
{
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Unable to send header info to the server."
,
"SocketLecroy::TCP_WriteDevice( )."
);
}
bytes_more
=
len
;
idxPtr
=
buf
;
bytes_xferd
=
0
;
while
(
1
)
{
//- then write the rest of the block
idxPtr
=
buf
+
bytes_xferd
;
if
((
result
=
send
(
hSocket
,
(
char
*
)
idxPtr
,
bytes_more
,
0
))
<
0
)
{
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Unable to send data to the server."
,
"SocketLecroy::TCP_WriteDevice( )."
);
}
bytes_xferd
+=
result
;
bytes_more
-=
result
;
if
(
bytes_more
<=
0
)
break
;
}
}
//- Read the device answer
void
SocketLecroy
::
TCP_ReadDevice
(
char
*
buf
,
int
len
,
int
*
recv_count
)
throw
(
lecroy
::
SocketException
)
{
TCP_HEADER
header
;
int
result
,
accum
,
space_left
,
bytes_more
,
buf_count
;
char
tmpStr
[
256
];
char
*
idxPtr
;
fd_set
rd_set
=
{
1
,
{
0
}};
TIMEVAL
tval
;
//- test connection
if
(
sConnectedFlag
!=
TRUE
)
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Device not connected."
,
"SocketLecroy::TCP_ReadDevice( )."
);
*
recv_count
=
0
;
if
(
buf
==
NULL
)
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Buffer memory not allocated."
,
"SocketLecroy::TCP_ReadDevice( )."
);
rd_set
.
fd_array
[
0
]
=
hSocket
;
tval
.
tv_sec
=
sTimeout
;
tval
.
tv_usec
=
0
;
memset
(
buf
,
0
,
len
);
buf_count
=
0
;
space_left
=
len
;
while
(
1
)
{
result
=
select
(
hSocket
,
&
rd_set
,
NULL
,
NULL
,
&
tval
);
if
(
result
<
1
)
{
TCP_ClearDevice
();
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Read Timeout."
,
"SocketLecroy::TCP_ReadDevice( )."
);
}
//- get the header info first
accum
=
0
;
while
(
1
)
{
memset
(
&
header
,
0
,
sizeof
(
TCP_HEADER
));
if
((
result
=
recv
(
hSocket
,
(
char
*
)
&
header
+
accum
,
sizeof
(
header
)
-
accum
,
0
))
<
0
)
{
TCP_ClearDevice
();
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Unable to receive header info from the server."
,
"SocketLecroy::TCP_ReadDevice( )."
);
}
accum
+=
result
;
if
(
accum
>=
sizeof
(
header
))
break
;
}
header
.
iLength
=
ntohl
(
header
.
iLength
);
// if (header.iLength < 1)
// return 0;
//- only read to len amount
if
(
header
.
iLength
>
space_left
)
{
header
.
iLength
=
space_left
;
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Read buffer size is too small."
,
"SocketLecroy::TCP_ReadDevice( )."
);
}
//- read the rest of the block
accum
=
0
;
while
(
1
)
{
idxPtr
=
buf
+
(
buf_count
+
accum
);
bytes_more
=
header
.
iLength
-
accum
;
if
((
space_left
-
accum
)
<
TCP_MINIMUM_PACKET_SIZE
)
{
TCP_ClearDevice
();
sprintf
(
tmpStr
,
"Read buffer needs to be adjusted, must be minimum of %d bytes"
,
TCP_MINIMUM_PACKET_SIZE
);
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
tmpStr
,
"SocketLecroy::TCP_ReadDevice( )."
);
}
if
((
result
=
recv
(
hSocket
,
(
char
*
)
idxPtr
,
(
bytes_more
>
2048
)
?
2048
:
bytes_more
,
0
))
<
0
)
{
TCP_ClearDevice
();
//-MessageBox(0, "Unable to receive data from the server.", "ERROR", MB_OK);
throw
lecroy
::
SocketException
(
"COMMUNICATION_BROKEN "
,
"Unable to receive data from the server"
,
"SocketLecroy::TCP_ReadDevice( )."
);
}
accum
+=
result
;
if
(
accum
>=
header
.
iLength
)
break
;
if
((
accum
+
buf_count
)
>=
len
)
break
;
}
buf_count
+=
accum
;
space_left
-=
accum
;
if
(
header
.
bEOI_Flag
&
EOI_FLAG
)
break
;
if
(
space_left
<=
0
)
break
;
}
*
recv_count
=
buf_count
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment