Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
preinjectorhv-gui
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cs
gui
preinjectorhv-gui
Commits
9dd479d6
Commit
9dd479d6
authored
4 years ago
by
Lucio Zambon
Browse files
Options
Downloads
Patches
Plain Diff
Add new file
parent
e7f36a35
Branches
master
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/hv.cpp
+430
-0
430 additions, 0 deletions
src/hv.cpp
with
430 additions
and
0 deletions
src/hv.cpp
0 → 100644
+
430
−
0
View file @
9dd479d6
/***************************************************************************
* Copyright (C) 2006 by LZ *
* *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include
"hv.h"
#include
<qtango.h>
#include
<QColor>
#include
<QMessageBox>
#include
<twidgetgroup.h>
void
hv
::
fill_frame
(
vector
<
QString
>
text
,
TWidgetGroup
&
kleds
,
QFrame
*
&
frame
)
{
QGridLayout
*
box1
;
box1
=
new
QGridLayout
(
frame
);
box1
->
setSpacing
(
3
);
box1
->
setMargin
(
3
);
int
led_size
=
18
;
/*
for (unsigned i=0; i<text.size(); i++) {
box1->setRowMinimumHeight(i,23);
QLabel *lab = new QLabel(frame);
lab->setText(" "+text[i]);
QFont f("Helvetica", 12, QFont::Bold);
lab->setFont(f);
// lab->setSize(24);
kleds.addWidget(lab);
box1->addWidget(lab, i, 0, Qt::AlignLeft);
TLed *ptr = new TLed(frame);
ptr->setTrueColor(QColor::QColor(40, 200, 40));
ptr->setFalseColor(QColor::QColor(200, 200, 200));
ptr->setLedWidth(led_size-2);
ptr->setLedHeight(led_size-2);
ptr->setMinimumSize(led_size, led_size);
ptr->setMaximumSize(led_size, led_size);
ptr->setGeometry(1, 1, led_size, led_size);
kleds.addWidget(ptr);
box1->addWidget(ptr, i, 1, Qt::AlignCenter);
}
*/
for
(
unsigned
i
=
0
;
i
<
text
.
size
();
i
++
)
{
box1
->
setRowMinimumHeight
(
i
,
23
);
QLabel
*
lab
=
new
QLabel
(
frame
);
lab
->
setObjectName
(
"labElement0"
);
lab
->
setText
(
" "
+
text
[
i
]);
QFont
f
(
"Helvetica"
,
12
,
QFont
::
Bold
);
lab
->
setFont
(
f
);
// lab->setSize(24);
box1
->
addWidget
(
lab
,
i
,
0
,
Qt
::
AlignLeft
);
TLed
*
ptr
=
new
TLed
(
frame
);
ptr
->
setObjectName
(
"ledElement1"
);
if
(
i
<
4
||
i
>
8
)
{
ptr
->
setTrueColor
(
QColor
(
40
,
160
,
40
));
}
else
{
ptr
->
setTrueColor
(
QColor
(
160
,
40
,
40
));
}
ptr
->
setFalseColor
(
QColor
(
170
,
255
,
255
));
ptr
->
setLedWidth
(
led_size
-
2
);
ptr
->
setLedHeight
(
led_size
-
2
);
ptr
->
setMinimumSize
(
led_size
,
led_size
);
ptr
->
setMaximumSize
(
led_size
,
led_size
);
ptr
->
setGeometry
(
1
,
1
,
led_size
,
led_size
);
box1
->
addWidget
(
ptr
,
i
,
1
,
Qt
::
AlignCenter
);
#ifdef QTANGOLIB_GET_VERSION
kleds
.
setObjectNameList
(
QStringList
()
<<
lab
->
objectName
()
<<
ptr
->
objectName
());
#else
kleds
.
addWidget
(
lab
);
kleds
.
addWidget
(
ptr
);
#endif
}
return
;
}
hv
::
hv
(
QWidget
*
parent
)
:
QDialog
(
parent
)
{
ui
.
setupUi
(
this
);
// static TWidgetGroup hv_leds(this);
// static TWidgetGroup hv_ramps;
vector
<
QString
>
hv_labs
=
explode
(
','
,
"FuG enabled,Ready (Not busy),Switching ON,Switching OFF,Ramping UP,Ramping Down,Ramping to low power,Making a new ramp,Aborting,OFF,Limited Power,Standby,Low Power,Full Power"
);
// fill_frame(hv_labs, hv_leds, ui.frame_StateFlags);
ui
.
mod_title
->
setText
(
QString
(
"Mod %1 HV"
).
arg
(
qApp
->
arguments
().
at
(
1
)));
if
(
qApp
->
arguments
()[
1
]
==
"1"
)
{
/*
try {
hv_leds.setSource("p/mod/hv_p1/StateFlags");
}
catch (...) {
sleep(1);
try {
hv_leds.setSource("p/mod/hv_p1/StateFlags");
}
catch (...) {
QMessageBox::information(0, "cannot connect HV server",
QString("Cannot connect HV server for modulator "+qApp->arguments()[1]));
exit(EXIT_FAILURE);
}
}
*/
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"p/mod/hv_p1"
);
}
catch
(...)
{
sleep
(
1
);
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"p/mod/hv_p1"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect HV server"
,
QString
(
"Cannot connect HV server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
try
{
rossServer
=
new
Tango
::
DeviceProxy
(
"p/mod/ross_p1"
);
}
catch
(...)
{
sleep
(
1
);
try
{
rossServer
=
new
Tango
::
DeviceProxy
(
"p/mod/ross_p1"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect HV server"
,
QString
(
"Cannot connect HV server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
}
else
if
(
qApp
->
arguments
()[
1
]
==
"2"
)
{
/*
try {
hv_leds.setSource("p/mod/hv_p2/StateFlags");
}
catch (...) {
sleep(1);
try {
hv_leds.setSource("p/mod/hv_p2/StateFlags");
}
catch (...) {
QMessageBox::information(0, "cannot connect HV server",
QString("Cannot connect HV server for modulator "+qApp->arguments()[1]));
exit(EXIT_FAILURE);
}
}
*/
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"p/mod/hv_p2"
);
}
catch
(...)
{
sleep
(
1
);
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"p/mod/hv_p2"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect HV server"
,
QString
(
"Cannot connect HV server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
try
{
rossServer
=
new
Tango
::
DeviceProxy
(
"p/mod/ross_p2"
);
}
catch
(...)
{
sleep
(
1
);
try
{
rossServer
=
new
Tango
::
DeviceProxy
(
"p/mod/ross_p2"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect Ross server"
,
QString
(
"Cannot connect Ross server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
}
else
if
(
qApp
->
arguments
()[
1
]
==
"10"
)
{
/*
try {
hv_leds.setSource("f/mod/hv_f10/StateFlags");
}
catch (...) {
sleep(1);
try {
hv_leds.setSource("f/mod/hv_f10/StateFlags");
}
catch (...) {
QMessageBox::information(0, "cannot connect HV server",
QString("Cannot connect HV server for modulator "+qApp->arguments()[1]));
exit(EXIT_FAILURE);
}
}
*/
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"f/mod/hv_f10"
);
}
catch
(...)
{
sleep
(
1
);
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"f/mod/hv_f10"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect HV server"
,
QString
(
"Cannot connect HV server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
try
{
rossServer
=
new
Tango
::
DeviceProxy
(
"f/mod/ross_f10"
);
}
catch
(...)
{
sleep
(
1
);
try
{
hvServer
=
new
Tango
::
DeviceProxy
(
"f/mod/ross_f10"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect Ross server"
,
QString
(
"Cannot connect Ross server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
}
else
{
QMessageBox
::
information
(
0
,
"cannot connect HV server"
,
QString
(
"Cannot connect HV server for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
try
{
ramps
=
hvServer
->
read_attribute
(
"ListRamp"
);
}
catch
(...)
{
try
{
ramps
=
hvServer
->
read_attribute
(
"ListRamp"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot connect Ross server"
,
QString
(
"Cannot connect list ramp for modulator "
+
qApp
->
arguments
()[
1
]));
exit
(
EXIT_FAILURE
);
}
}
vector
<
string
>
ramp
;
ramps
>>
ramp
;
for
(
unsigned
i
=
0
;
i
<
ramp
.
size
();
i
++
)
{
ui
.
comboBox
->
insertItem
(
i
,
ramp
[
i
].
c_str
(),
QVariant
(
Qt
::
red
));
}
// ui.comboBox->setCurrentItem(i);
connect
(
ui
.
View_PushButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
view_ramp
()));
connect
(
ui
.
Load_PushButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
load_ramp
()));
connect
(
ui
.
Save_PushButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
save_ramp
()));
connect
(
ui
.
makerampApply
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
make_ramp
()));
connect
(
ui
.
Off_PushButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
hv_off
()));
connect
(
ui
.
Ground_PushButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
ross_ground
()));
// QString q_cmd;
// ui.rampDown_ApplyNumeric->setTarget("p/mod/hv_p"+qApp->arguments()[1]+"->RampDown");
// ui.RampDn_PushButton->setTargets("p/mod/hv_p"+qApp->arguments()[1]+"->RampDown");
}
hv
::~
hv
()
{
exit
(
0
);
}
void
hv
::
hv_off
()
{
try
{
int
r
=
QMessageBox
::
question
(
this
,
"Confirm HV OFF"
,
"Please confirm command: 'OFF'"
,
"OFF"
,
"Cancel"
);
if
(
r
==
0
)
{
try
{
hvServer
->
command_inout
(
"Off"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot switch HV off"
,
QString
(
"Cannot switch HV off "
+
qApp
->
arguments
()[
1
]));
}
}
}
catch
(
const
Tango
::
DevFailed
&
e
)
{
cout
<<
"Error: hv_off()"
<<
endl
;
}
}
void
hv
::
ross_ground
()
{
try
{
int
r
=
QMessageBox
::
question
(
this
,
"Confirm Ross Ground"
,
"Please confirm command: 'Ground'"
,
"Ground"
,
"Cancel"
);
if
(
r
==
0
)
{
try
{
hvServer
->
command_inout
(
"Off"
);
rossServer
->
command_inout
(
"Off"
);
}
catch
(...)
{
QMessageBox
::
information
(
0
,
"cannot switch Ross Ground"
,
QString
(
"Cannot switch Ross Ground "
+
qApp
->
arguments
()[
1
]));
}
}
}
catch
(
const
Tango
::
DevFailed
&
e
)
{
cout
<<
"Error: ross_ground()"
<<
endl
;
}
}
void
hv
::
view_ramp
()
{
// static TWidgetGroup hv_ramp;
Tango
::
DeviceData
rampName
;
Tango
::
DeviceData
rampData
;
Tango
::
DevString
str
=
CORBA
::
string_dup
(
ui
.
comboBox
->
currentText
().
toStdString
().
c_str
());
rampName
<<
str
;
try
{
rampData
=
hvServer
->
command_inout
(
"ReadRamp"
,
rampName
);
}
catch
(
Tango
::
DevFailed
&
e
)
{
Tango
::
Except
::
print_exception
(
e
);
}
vector
<
string
>
ramp
;
rampData
>>
ramp
;
ui
.
textEdit
->
clear
();
for
(
unsigned
i
=
0
;
i
<
ramp
.
size
();
i
++
)
{
ui
.
textEdit
->
append
(
ramp
[
i
].
substr
(
0
,
ramp
[
i
].
size
()
-
1
).
c_str
());
}
}
void
hv
::
load_ramp
()
{
// static TWidgetGroup hv_ramp;
Tango
::
DeviceData
rampName
;
Tango
::
DeviceData
rampData
;
Tango
::
DevString
str
=
CORBA
::
string_dup
(
ui
.
comboBox
->
currentText
().
toStdString
().
c_str
());
rampName
<<
str
;
try
{
hvServer
->
command_inout
(
"LoadRamp"
,
rampName
);
}
catch
(
Tango
::
DevFailed
&
e
)
{
Tango
::
Except
::
print_exception
(
e
);
}
}
void
hv
::
save_ramp
()
{
// static TWidgetGroup hv_ramp;
Tango
::
DeviceData
rampName
;
Tango
::
DeviceData
rampData
;
Tango
::
DevVarStringArray
*
argout
=
new
Tango
::
DevVarStringArray
();
QStringList
ramplist
=
ui
.
textEdit
->
toPlainText
().
split
(
"
\n
"
);
argout
->
length
(
ramplist
.
size
()
+
1
);
(
*
argout
)[
0
]
=
CORBA
::
string_dup
(
ui
.
comboBox
->
currentText
().
toStdString
().
c_str
());
for
(
int
i
=
0
;
i
<
ramplist
.
size
();
i
++
)
{
(
*
argout
)[
i
+
1
]
=
CORBA
::
string_dup
((
ramplist
[
i
].
toStdString
()
+
"
\n
"
).
c_str
());
cout
<<
ramplist
[
i
].
toStdString
()
<<
endl
;
}
rampData
<<
argout
;
try
{
hvServer
->
command_inout
(
"SaveRamp"
,
rampData
);
}
catch
(
Tango
::
DevFailed
&
e
)
{
Tango
::
Except
::
print_exception
(
e
);
}
return
;
}
void
hv
::
make_ramp
()
{
// static TWidgetGroup hv_ramp;
Tango
::
DeviceData
rampData
;
Tango
::
DevVarDoubleArray
*
argout
=
new
Tango
::
DevVarDoubleArray
();
argout
->
length
(
3
);
(
*
argout
)[
0
]
=
ui
.
makerampV
->
value
();
(
*
argout
)[
1
]
=
ui
.
makerampI
->
value
();
(
*
argout
)[
2
]
=
ui
.
makerampT
->
value
();
cout
<<
ui
.
makerampV
->
value
()
<<
endl
;
rampData
<<
argout
;
try
{
hvServer
->
command_inout
(
"MakeRamp"
,
rampData
);
}
catch
(
Tango
::
DevFailed
&
e
)
{
// cout << "Tango::DevFailed " << e.errors[0].reason << endl;
QMessageBox
::
information
(
0
,
"ERROR"
,
QString
(
e
.
errors
[
0
].
reason
));
Tango
::
Except
::
print_exception
(
e
);
}
catch
(...)
{
cout
<<
"ERROR: operation failed"
<<
endl
;
}
/*
Tango::DeviceData rampName;
QStringList ramplist = ui.textEdit->toPlainText().split("\n");
for (unsigned i=0; i<ramplist.size(); i++) {
(*argout)[i+1] = CORBA::string_dup((ramplist[i].toStdString()+"\n").c_str());
cout << ramplist[i].toStdString() << endl;
}
*/
return
;
}
vector
<
QString
>
explode
(
const
char
separator
,
const
char
*
all
)
{
unsigned
i
,
j
;
vector
<
QString
>
v
;
char
celem
[
50
];
v
.
resize
(
0
);
for
(
i
=
0
;
i
<
strlen
(
all
);
i
++
)
{
j
=
0
;
while
(
all
[
i
]
!=
separator
&&
i
<
strlen
(
all
)
)
{
celem
[
j
]
=
all
[
i
];
i
++
;
j
++
;
}
celem
[
j
]
=
'\0'
;
v
.
push_back
(
QString
(
celem
)
);
}
return
v
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
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