Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
DetectorSoftware
libagipdctrl
Commits
3e994974
Commit
3e994974
authored
Apr 28, 2022
by
Yuelong Yu
Browse files
fixed sequence tag overflow issue and added unittest
when sequence tag reaches max value, it's not reset correctly.
parent
b7e1902b
Pipeline
#26474
passed with stage
in 1 minute and 11 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
3e994974
...
...
@@ -4,7 +4,7 @@ enable_testing()
set
(
MAJOR_VERSION 0
)
set
(
MINOR_VERSION
9
)
set
(
MINOR_VERSION
10
)
set
(
LIBRARY_VERSION
"
${
MAJOR_VERSION
}
.
${
MINOR_VERSION
}
"
)
set
(
SO_VERSION
${
LIBRARY_VERSION
}
)
...
...
src/AGIPDComm.cpp
View file @
3e994974
...
...
@@ -753,8 +753,8 @@ namespace AGIPDCtrlNS
uint8
AGIPDComm
::
GetSequenceTag
()
{
LOG_TRACE
(
__FUNCTION__
);
return
static_cast
<
uint8
>
(((
m_tag
++
==
255
)
?
0
:
m_tag
)
&
0xff
);
return
static_cast
<
uint8
>
((
m_tag
=
(
m_tag
++
==
255
?
0
:
m_tag
)
)
&
0xff
);
}
void
AGIPDComm
::
PrintCmd
(
vector
<
uint8
>&
cmd
)
...
...
@@ -879,7 +879,6 @@ namespace AGIPDCtrlNS
vector
<
uint8
>
data
(
response
.
size
());
std
::
copy
(
response
.
begin
(),
response
.
end
(),
data
.
begin
());
PrintCmd
(
data
);
if
((
static_cast
<
uint16
>
(
response
[
3
])
&
0xff
)
==
m_tag
&&
response
[
0
]
==
0x0
)
// stop
{
LOG_INFOS
(
"get reply of stop acquistion, continue waiting for reply of start acquistion"
);
...
...
test/CtrlTest.cpp
View file @
3e994974
...
...
@@ -25,7 +25,7 @@ namespace TestNS
{
void
CtrlTest
::
SetUp
()
{
InitLogLevel
(
ERROR
);
InitLogLevel
(
INFO
);
m_testdir
=
"./testdata/"
;
...
...
@@ -837,6 +837,69 @@ namespace TestNS
EXPECT_EQ
(
ref_return
,
log
);
}
TEST_F
(
CtrlTest
,
StartAcqStopAcqSequenceTagResetTest
)
{
// run some commands to increase sequence tag to 254
int32
pre_calls
=
254
;
EXPECT_CALL
(
*
m_tcp
,
SendData
(
_
))
.
Times
(
pre_calls
);
EXPECT_CALL
(
*
m_tcp
,
ReceiveData
(
_
,
_
,
_
,
_
))
.
Times
(
pre_calls
);
for
(
int32
i
=
1
;
i
<=
pre_calls
;
i
++
)
m_agipd
->
Reboot
();
// sequence tag now should be 255
vector
<
uint8
>
ref_data
=
{
0x80
,
0x81
,
0x00
,
0xff
,
0x00
,
0x00
,
0x80
,
0x82
,
0x00
,
0x00
,
0x00
,
0x00
};
vector
<
uint8
>
rs_start_acq
=
{
0x1
,
0x0
,
0x3
,
0xff
,
0x0
,
0x2
};
vector
<
uint8
>
rs_stop_acq
=
{
0x0
,
0x0
,
0x3
,
0x00
,
0x0
,
0x0
};
vector
<
uint8
>
data_ret_start_acq
=
{
0x48
,
0x49
};
//HI
auto
time_to_sleep
=
1000
;
// millisecond
string
ref_return
(
data_ret_start_acq
.
begin
(),
data_ret_start_acq
.
end
());
szt
rs_stop_len
=
rs_stop_acq
.
size
();
szt
rs_start_len
=
rs_start_acq
.
size
();
szt
data_length
=
data_ret_start_acq
.
size
();
EXPECT_CALL
(
*
m_tcp
,
SendData
(
_
))
.
Times
(
2
)
.
WillRepeatedly
(
DoAll
(
Invoke
(
this
,
&
CtrlTest
::
OutputData
),
Return
(
0
)));
// one start one stop
EXPECT_CALL
(
*
m_tcp
,
ReceiveData
(
_
,
_
,
_
,
_
))
.
Times
(
2
)
.
WillOnce
(
DoAll
(
InvokeWithoutArgs
([
time_to_sleep
](){
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
time_to_sleep
));}),
SetArrayArgument
<
0
>
(
rs_stop_acq
.
begin
(),
rs_stop_acq
.
end
()),
SetArgReferee
<
3
>
(
rs_stop_len
),
Return
(
0
)))
.
WillOnce
(
DoAll
(
SetArrayArgument
<
0
>
(
rs_start_acq
.
begin
(),
rs_start_acq
.
end
()),
SetArgReferee
<
3
>
(
rs_start_len
),
Return
(
0
)));
EXPECT_CALL
(
*
m_tcp
,
ReceiveData
(
_
,
data_length
,
data_length
,
_
))
.
Times
(
1
)
.
WillOnce
(
DoAll
(
SetArrayArgument
<
0
>
(
data_ret_start_acq
.
begin
(),
data_ret_start_acq
.
end
()),
SetArgReferee
<
3
>
(
data_length
),
Return
(
0
)));
string
log
;
std
::
future
<
RESPONSE
>
rs
=
std
::
async
(
std
::
launch
::
async
,[
&
]()
{
return
m_agipd
->
StartAcq
(
log
);
});
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
seconds
(
1
));
// wait for 1s
EXPECT_EQ
(
SC
,
m_agipd
->
StopAcq
());
EXPECT_EQ
(
true
,
rs
.
valid
());
while
(
rs
.
valid
())
if
(
rs
.
wait_for
(
std
::
chrono
::
milliseconds
(
10
))
==
std
::
future_status
::
ready
)
break
;
EXPECT_EQ
(
SC
,
rs
.
get
());
EXPECT_EQ
(
ref_data
,
m_output
);
EXPECT_EQ
(
ref_return
,
log
);
}
void
CtrlTest
::
OutputData
(
vector
<
uint8
>
data
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment