EtherCAT Graphical User Interface Code 0.0.1
EtherCAT GUI that uses different communication protocols with EtherCAT Master server.
Loading...
Searching...
No Matches
ec_gui_sdo.h
1#ifndef EC_GUI_SDO_H
2#define EC_GUI_SDO_H
3
4#include <QtUiTools>
5#include <QWidget>
6
7#include "utils/ec_utils.h"
8
9class EcGuiSdo : public QWidget
10{
11 Q_OBJECT
12
13public:
14
15 typedef std::shared_ptr<EcGuiSdo> Ptr;
16
17 EcGuiSdo(QWidget * parent = 0);
18
19 ~EcGuiSdo();
20
21 void set_expert_user();
22 void restart_ec_gui_sdo(EcIface::Ptr client,SRD_SDO sdo_map);
23
24private slots:
25 void OnMouseClicked(QTreeWidgetItem* item, int column);
26 void OnItemExapanded(QTreeWidgetItem* item);
27 void SdoSearchChanged();
28 void onSaveSdoReleased();
29 void onRescanSdoReleased();
30 void onRestoreSdoReleased();
31 void onLoadSdoReleased();
32 void onSaveFileSdoReleased();
33 void onOpenFileSdoReleased();
34 void onYesToAllSdoReleased();
35 void onNoToAllSdoReleased();
36
37protected:
38 bool eventFilter( QObject* o, QEvent* e );
39
40private:
41 EcIface::Ptr _client;
42 QTreeWidget *_sdo_tree_wid;
43 QTreeWidgetItem *_sdo_item;
44 QLineEdit *_sdo_search;
45 QDialogButtonBox *_sdo_manager,*_sdo_flash_manager;
46 int _sdo_column;
47 std::map<uint32_t,std::map<std::string,QTreeWidgetItem *>> _sdo_item_map;
48 SRD_SDO _sdo_map;
49 std::string _old_sdo_value;
50 bool _user_expert;
51 QString _sdo_search_req;
52 Qt::CheckState _esc_id_state=Qt::Unchecked;
53
54 void add_esc_sdo();
55 void search_sdo();
56 bool check_client_setup();
57 void rescan_sdo();
58 bool rescan_sdo_byId(uint32_t esc_id);
59 bool esc_cmd_byId(uint32_t esc_id,const std::string &cmd_type,int value);
60 void flash_cmd(int value);
61 void save_sdo_file();
62 void open_sdo_file();
63 void cmd_feedback(bool try_cmd,bool cmd_ok,QString cmd_name);
64 void esc_id_check();
65};
66
67class EcGuiSdoWizard : public QWidget
68{
69 Q_OBJECT
70
71public:
72 EcGuiSdoWizard(QWidget * parent = 0){
73 _sdo_wizard_tree = new QTreeWidget();
74 _sdo_wizard_tree->setColumnCount(2);
75 _sdo_wizard_tree->setHeaderLabels({"SDO Name","SDO Value"});
76 _sdo_wizard_tree->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
77 _sdo_wizard_tree->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
78 _sdo_wizard_tree->setMinimumSize(600,600);
79
80 auto sdo_sel_manager = new QDialogButtonBox(QDialogButtonBox::YesToAll| QDialogButtonBox::NoToAll);
81 sdo_sel_manager->setLayoutDirection(Qt::RightToLeft);
82 auto yes_all_btn = sdo_sel_manager->button(QDialogButtonBox::YesToAll);
83 connect(yes_all_btn, &QPushButton::released,this, &EcGuiSdoWizard::onYesToAllSdoReleased);
84 auto no_all_btn = sdo_sel_manager->button(QDialogButtonBox::NoToAll);
85 connect(no_all_btn, &QPushButton::released,this, &EcGuiSdoWizard::onNoToAllSdoReleased);
86
87 QWizardPage *sdo_wizard_page = new QWizardPage();
88 sdo_wizard_page->setTitle("Calibration Wizard");
89 QVBoxLayout *layout = new QVBoxLayout;
90 layout->addWidget(_sdo_wizard_tree);
91 layout->addWidget(sdo_sel_manager);
92
93 QHBoxLayout *layout_page = new QHBoxLayout;
94 QLabel *calib_image=new QLabel;
95 QPixmap calib_logo_pic;
96 calib_logo_pic.load(":/icon/calibration.png");
97 calib_image->setPixmap(calib_logo_pic);
98 layout_page->addWidget(calib_image);
99 layout_page->addLayout(layout);
100 sdo_wizard_page->setLayout(layout_page);
101 _sdo_wizard.addPage(sdo_wizard_page);
102 _sdo_wizard.setFixedSize(layout_page->geometry().width(),layout_page->geometry().height());
103 };
104
105 WR_SDO run_sdo_wizard(){
106 _write_new_sdo.clear();
107 if(init_wizard()){
108 if(_sdo_wizard.exec()){
109 fill_write_sdo();
110 }
111 }
112 return _write_new_sdo;
113 };
114
115
116 ~EcGuiSdoWizard(){};
117
118private slots:
119 void onYesToAllSdoReleased(){
120 _sdo_check_state=Qt::Checked;
121 sdo_checking();
122 };
123
124 void onNoToAllSdoReleased(){
125 _sdo_check_state=Qt::Unchecked;
126 sdo_checking();
127 };
128private:
129 QTreeWidget *_sdo_wizard_tree;
130 QWizard _sdo_wizard;
131 Qt::CheckState _sdo_check_state=Qt::Unchecked;
132 WR_SDO _write_new_sdo;
133
134 bool init_wizard(){
135 QFileDialog dialog(this);
136 dialog.setFileMode(QFileDialog::AnyFile);
137 dialog.setNameFilter(tr(".csv (*.csv)"));
138 QStringList fileNames;
139 if (dialog.exec()){
140 fileNames = dialog.selectedFiles();
141 }
142 if(!fileNames.empty()){
143 QFile *sdo_file=new QFile(fileNames[0]);
144 if(sdo_file->open(QFile::ReadOnly)){
145 QTextStream in(sdo_file);
146 while (!in.atEnd()){
147 QStringList split_line = in.readLine().split("\t");
148 add_content(split_line);
149 }
150 sdo_file->close();
151 return true;
152 }
153 }
154 return false;
155 };
156
157 void add_content(QStringList &list){
158 if(!list.empty()){
159 int i=0;
160 QTreeWidgetItem * sdo_wizard_item = new QTreeWidgetItem();
161 for(auto &value:list){
162 sdo_wizard_item->setText(i,value);
163 sdo_wizard_item->setFlags(sdo_wizard_item->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable);
164 sdo_wizard_item->setCheckState(0,Qt::Unchecked);
165 i++;
166 }
167 _sdo_wizard_tree->addTopLevelItem(sdo_wizard_item);
168 }
169 };
170
171 void sdo_checking(){
172 for(int i=0;i<_sdo_wizard_tree->topLevelItemCount();i++){
173 auto topLevel =_sdo_wizard_tree->topLevelItem(i);
174 topLevel->setCheckState(0,_sdo_check_state);
175 }
176 };
177 void fill_write_sdo(){
178 for(int i=0;i<_sdo_wizard_tree->topLevelItemCount();i++){
179 auto topLevel =_sdo_wizard_tree->topLevelItem(i);
180 if(topLevel->checkState(0)==Qt::Checked){
181 std::string sdo_name = topLevel->text(0).toStdString();
182 std::string sdo_value = topLevel->text(1).toStdString();
183 _write_new_sdo.push_back(std::make_tuple(sdo_name,sdo_value));
184 }
185 }
186 };
187};
188
189#endif // EC_GUI_SDO_H
190
191
Definition ec_gui_sdo.h:68
Definition ec_gui_sdo.h:10