hardsploit_gui 2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +22 -0
  3. data/Rakefile +1 -0
  4. data/bin/hardsploit_gui +3 -0
  5. data/lib/Firmware/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
  6. data/lib/Firmware/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
  7. data/lib/Firmware/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
  8. data/lib/Firmware/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
  9. data/lib/Firmware/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
  10. data/lib/Firmware/FPGA/VersionFPGA.rb +5 -0
  11. data/lib/Firmware/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
  12. data/lib/Firmware/UC/VersionUC.rb +12 -0
  13. data/lib/HardsploitAPI/HardsploitAPI.rb +134 -0
  14. data/lib/HardsploitAPI/HardsploitAPI_CONSTANT.rb +145 -0
  15. data/lib/HardsploitAPI/HardsploitAPI_FIRMWARE.rb +311 -0
  16. data/lib/HardsploitAPI/HardsploitAPI_I2C.rb +218 -0
  17. data/lib/HardsploitAPI/HardsploitAPI_NO_MUX_PARALLELE_MEMORY.rb +229 -0
  18. data/lib/HardsploitAPI/HardsploitAPI_SPI.rb +179 -0
  19. data/lib/HardsploitAPI/HardsploitAPI_TEST_INTERACT.rb +98 -0
  20. data/lib/HardsploitAPI/HardsploitAPI_USB_COMMUNICATION.rb +149 -0
  21. data/lib/HardsploitAPI/LICENSE.txt +674 -0
  22. data/lib/HardsploitAPI/README.md +22 -0
  23. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD.rb +249 -0
  24. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb +102 -0
  25. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_MEM_AP.rb +78 -0
  26. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_STM32.rb +104 -0
  27. data/lib/HardsploitAPI/TRADEMARK +3 -0
  28. data/lib/LICENSE.txt +674 -0
  29. data/lib/README.md +22 -0
  30. data/lib/TRADEMARK +3 -0
  31. data/lib/class/Chip_editor.rb +448 -0
  32. data/lib/class/Command_editor.rb +268 -0
  33. data/lib/class/Command_table.rb +239 -0
  34. data/lib/class/Console.rb +28 -0
  35. data/lib/class/Export_manager.rb +124 -0
  36. data/lib/class/Firmware.rb +29 -0
  37. data/lib/class/Generic_commands.rb +275 -0
  38. data/lib/class/HardsploitGUI.rb +462 -0
  39. data/lib/class/I2C/I2c_command.rb +48 -0
  40. data/lib/class/I2C/I2c_export.rb +121 -0
  41. data/lib/class/I2C/I2c_import.rb +92 -0
  42. data/lib/class/I2C/I2c_settings.rb +117 -0
  43. data/lib/class/PARALLEL/Parallel_export.rb +146 -0
  44. data/lib/class/PARALLEL/Parallel_import.rb +88 -0
  45. data/lib/class/PARALLEL/Parallel_settings.rb +102 -0
  46. data/lib/class/SPI/Spi_export.rb +141 -0
  47. data/lib/class/SPI/Spi_import.rb +112 -0
  48. data/lib/class/SPI/Spi_settings.rb +90 -0
  49. data/lib/class/Wire_helper.rb +246 -0
  50. data/lib/db/associations.rb +125 -0
  51. data/lib/db/hs.db +0 -0
  52. data/lib/gui/gui_chip_editor.rb +355 -0
  53. data/lib/gui/gui_chip_management.rb +372 -0
  54. data/lib/gui/gui_command_editor.rb +218 -0
  55. data/lib/gui/gui_export_manager.rb +93 -0
  56. data/lib/gui/gui_generic_commands.rb +164 -0
  57. data/lib/gui/gui_generic_export.rb +148 -0
  58. data/lib/gui/gui_generic_import.rb +126 -0
  59. data/lib/gui/gui_i2c_command.rb +115 -0
  60. data/lib/gui/gui_i2c_settings.rb +201 -0
  61. data/lib/gui/gui_parallel_settings.rb +194 -0
  62. data/lib/gui/gui_spi_import.rb +126 -0
  63. data/lib/gui/gui_spi_settings.rb +187 -0
  64. data/lib/gui/gui_wire_helper.rb +99 -0
  65. data/lib/gui_designer/gui_chip_editor.ui +553 -0
  66. data/lib/gui_designer/gui_chip_management.ui +842 -0
  67. data/lib/gui_designer/gui_command_editor.ui +347 -0
  68. data/lib/gui_designer/gui_export_manager.ui +115 -0
  69. data/lib/gui_designer/gui_generic_commands.ui +258 -0
  70. data/lib/gui_designer/gui_generic_export.ui +179 -0
  71. data/lib/gui_designer/gui_generic_import.ui +142 -0
  72. data/lib/gui_designer/gui_i2c_command.ui +145 -0
  73. data/lib/gui_designer/gui_i2c_settings.ui +261 -0
  74. data/lib/gui_designer/gui_parallel_settings.ui +244 -0
  75. data/lib/gui_designer/gui_processing.ui +81 -0
  76. data/lib/gui_designer/gui_spi_settings.ui +321 -0
  77. data/lib/gui_designer/gui_wire_helper.ui +117 -0
  78. data/lib/hardsploit.rb +122 -0
  79. data/lib/images/search.png +0 -0
  80. data/lib/logs/error.log +0 -0
  81. metadata +236 -0
data/lib/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # Hardsploit
2
+
3
+ The essential security auditing tool for Internet of Things devices you'll need in your toolbox
4
+
5
+ ### [GO TO HARDSPLOIT](http://www.hardsploit.io)
6
+
7
+ TO LEARN ABOUT IT
8
+
9
+ ### [GO TO SHOP](https://www.shop-hardsploit.com)
10
+ TO BUY
11
+
12
+ ### [GO TO WIKI](http://wiki.hardsploit.io)
13
+
14
+ TO UNDERSTAND HOW USE IT
15
+
16
+ ### [GO TO FORUM](http://forum.hardsploit.io)
17
+
18
+ FOR SUPPORT / HELP
19
+
20
+ ### [GO TO BUG TRACKER](http://issues.hardsploit.io)
21
+
22
+ FOR BUGS OR IMPROVEMENTS
data/lib/TRADEMARK ADDED
@@ -0,0 +1,3 @@
1
+ "Hardsploit" is a trademark of OPALE SECURITY. Permission to use the trademark
2
+ with attribution to OPALE SECURITY is denied to all licensees of Hardsploit for
3
+ the purpose of naming or describing copies or derived works.
@@ -0,0 +1,448 @@
1
+ #===================================================
2
+ # Hardsploit GUI - By Opale Security
3
+ # www.opale-security.com || www.hardsploit.io
4
+ # License: GNU General Public License v3
5
+ # License URI: http://www.gnu.org/licenses/gpl.txt
6
+ #===================================================
7
+
8
+ require_relative '../gui/gui_chip_editor'
9
+ class Chip_editor < Qt::Widget
10
+ slots 'select_package()'
11
+ slots 'edit_chip()'
12
+ slots 'add_chip()'
13
+ slots 'select_manufacturer()'
14
+ slots 'select_type()'
15
+ slots 'fill_pin_table()'
16
+ slots 'filter_cbx()'
17
+ slots 'delete_cbx_element()'
18
+
19
+ def initialize(parent, chip, action)
20
+ super()
21
+ @gui_chip_editor = Ui_Chip_editor.new
22
+ centerWindow(self)
23
+ @gui_chip_editor.setupUi(self)
24
+ @parent = parent
25
+ @chip = chip
26
+
27
+ inputRestrict(@gui_chip_editor.lie_pack_name, 2)
28
+ inputRestrict(@gui_chip_editor.lie_pack_pin, 0)
29
+ inputRestrict(@gui_chip_editor.lie_manu_name, 2)
30
+ inputRestrict(@gui_chip_editor.lie_type_name, 2)
31
+ inputRestrict(@gui_chip_editor.lie_reference, 2)
32
+ inputRestrict(@gui_chip_editor.lie_description, 2)
33
+
34
+ # Combobox
35
+ # Package
36
+ package = Package.all
37
+ package.each do |p|
38
+ @gui_chip_editor.cbx_package.addItem(p.package_name)
39
+ end
40
+ # Manufacturer
41
+ manufacturer = Manufacturer.all
42
+ manufacturer.each do |p|
43
+ @gui_chip_editor.cbx_manufacturer.addItem(p.manufacturer_name)
44
+ end
45
+ # Type
46
+ c_type = CType.all
47
+ c_type.each do |p|
48
+ @gui_chip_editor.cbx_type.addItem(p.cType_name)
49
+ end
50
+
51
+ #Bus
52
+ @bus_list = Bus.all
53
+
54
+ if action != 'new'
55
+ package_name = package.find_by(package_id: @chip.chip_package).package_name
56
+ manufacturer_name = manufacturer.find_by(manufacturer_id: @chip.chip_manufacturer).manufacturer_name
57
+ c_type_name = c_type.find_by(cType_id: @chip.chip_type).cType_name
58
+
59
+ @gui_chip_editor.cbx_package.setCurrentIndex(@gui_chip_editor.cbx_package.findText(package_name))
60
+ @gui_chip_editor.lie_pack_name.setText(package_name)
61
+ @gui_chip_editor.lie_pack_name.setEnabled(false)
62
+ @gui_chip_editor.cbx_manufacturer.setCurrentIndex(@gui_chip_editor.cbx_manufacturer.findText(manufacturer_name))
63
+ @gui_chip_editor.lie_manu_name.setText(manufacturer_name)
64
+ @gui_chip_editor.lie_manu_name.setEnabled(false)
65
+ @gui_chip_editor.cbx_type.setCurrentIndex(@gui_chip_editor.cbx_type.findText(c_type_name))
66
+ @gui_chip_editor.lie_type_name.setText(c_type_name)
67
+ @gui_chip_editor.lie_type_name.setEnabled(false)
68
+ @gui_chip_editor.rbn_rectangular.setEnabled(false)
69
+ @gui_chip_editor.rbn_square.setEnabled(false)
70
+ if @chip.chip_voltage.zero?
71
+ @gui_chip_editor.rbn_5v.setChecked(true)
72
+ else
73
+ @gui_chip_editor.rbn_3v.setChecked(true)
74
+ end
75
+ package_shape = Package.find_by(package_id: @chip.chip_package).package_shape
76
+ if package_shape.zero?
77
+ @gui_chip_editor.rbn_square.setChecked(true)
78
+ else
79
+ @gui_chip_editor.rbn_rectangular.setChecked(true)
80
+ end
81
+
82
+ # Line Edit
83
+ # Name
84
+ if action == 'edit'
85
+ @gui_chip_editor.lie_reference.setText(@chip.chip_reference)
86
+ end
87
+ # Load pin array
88
+ fill_pin_table('edit')
89
+ # Misc tab
90
+ @gui_chip_editor.lie_description.setText(@chip.chip_detail)
91
+ end
92
+
93
+ # Array struct
94
+ @gui_chip_editor.tbl_pins.horizontalHeader.stretchLastSection = true
95
+ @gui_chip_editor.tbl_pins.verticalHeader.setVisible(false)
96
+
97
+ # Button text
98
+ if action == 'edit'
99
+ @gui_chip_editor.btn_add.setText('Edit')
100
+ Qt::Object.connect(@gui_chip_editor.btn_add, SIGNAL('clicked()'), self, SLOT('edit_chip()'))
101
+ else
102
+ @gui_chip_editor.btn_add.setText('Add')
103
+ Qt::Object.connect(@gui_chip_editor.btn_add, SIGNAL('clicked()'), self, SLOT('add_chip()'))
104
+ end
105
+ rescue Exception => msg
106
+ logger = Logger.new($logFilePath)
107
+ logger.error msg
108
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured when opening the chip wizard interface. Consult the log for more details').exec
109
+ end
110
+
111
+ # Control the form values
112
+ def control_form_val
113
+ error = ''
114
+ # Package
115
+ if @gui_chip_editor.lie_pack_name.text.empty?
116
+ error = 'Package reference missing'
117
+ # Pin number
118
+ elsif @gui_chip_editor.lie_pack_pin.text.empty?
119
+ error = 'Package pin number missing'
120
+ elsif @gui_chip_editor.tbl_pins.rowCount != @gui_chip_editor.lie_pack_pin.text.to_i
121
+ error = 'The pin number and the line count in the pin array does not match'
122
+ # Reference
123
+ elsif @gui_chip_editor.lie_reference.text.empty?
124
+ error = 'Chip reference missing'
125
+ # Manufacturer
126
+ elsif @gui_chip_editor.lie_manu_name.text.empty?
127
+ error = 'Chip manufacturer missing'
128
+ # Type
129
+ elsif @gui_chip_editor.lie_type_name.text.empty?
130
+ error = 'Chip type missing'
131
+ end
132
+ unless error.empty?
133
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Invalid form', error).exec
134
+ return false
135
+ else
136
+ return true
137
+ end
138
+ end
139
+
140
+ def delete_cbx_element
141
+ msg = Qt::MessageBox.new
142
+ msg.setWindowTitle('Delete element')
143
+ msg.setText('By deleting this element, all the chips and commands linked to him will be deleted too. Continue ?')
144
+ msg.setIcon(Qt::MessageBox::Warning)
145
+ msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
146
+ msg.setDefaultButton(Qt::MessageBox::Cancel)
147
+ if msg.exec == Qt::MessageBox::Ok
148
+ case sender.objectName
149
+ when 'btn_removePackage'
150
+ if @gui_chip_editor.cbx_package.currentIndex == 0
151
+ Qt::MessageBox.new(Qt::MessageBox::Warning, 'Warning', 'Please select a valid element to delete').exec
152
+ else
153
+ package = Package.find_by(package_name: @gui_chip_editor.cbx_package.currentText)
154
+ chips = Chip.where(chip_package: package)
155
+ chips.each do |chip|
156
+ chip.cmd.destroy_all
157
+ end
158
+ chips.destroy_all
159
+ package.destroy
160
+ @gui_chip_editor.cbx_package.removeItem(@gui_chip_editor.cbx_package.currentIndex)
161
+ @gui_chip_editor.cbx_package.setCurrentIndex(0)
162
+ end
163
+ when 'btn_removeManufacturer'
164
+ if @gui_chip_editor.cbx_manufacturer.currentIndex == 0
165
+ Qt::MessageBox.new(Qt::MessageBox::Warning, 'Warning', 'Please select a valid element to delete').exec
166
+ else
167
+ manufacturer = Manufacturer.find_by(manufacturer_name: @gui_chip_editor.cbx_manufacturer.currentText)
168
+ chips = Chip.where(chip_manufacturer: manufacturer)
169
+ chips.each do |chip|
170
+ chip.cmd.destroy_all
171
+ end
172
+ chips.destroy_all
173
+ manufacturer.destroy
174
+ @gui_chip_editor.cbx_manufacturer.removeItem(@gui_chip_editor.cbx_manufacturer.currentIndex)
175
+ @gui_chip_editor.cbx_manufacturer.setCurrentIndex(0)
176
+ end
177
+ when 'btn_removeType'
178
+ if @gui_chip_editor.cbx_type.currentIndex == 0
179
+ Qt::MessageBox.new(Qt::MessageBox::Warning, 'Warning', 'Please select a valid element to delete').exec
180
+ else
181
+ type = CType.find_by(cType_name: @gui_chip_editor.cbx_type.currentText)
182
+ chips = Chip.where(chip_type: type)
183
+ chips.each do |chip|
184
+ chip.cmd.destroy_all
185
+ end
186
+ chips.destroy_all
187
+ type.destroy
188
+ @gui_chip_editor.cbx_type.removeItem(@gui_chip_editor.cbx_type.currentIndex)
189
+ @gui_chip_editor.cbx_type.setCurrentIndex(0)
190
+ end
191
+ end
192
+ @parent.feed_chip_array
193
+ end
194
+ rescue Exception => msg
195
+ logger = Logger.new($logFilePath)
196
+ logger.error msg
197
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while deleting the element. Consult the log for more details').exec
198
+ end
199
+
200
+ # Add chip in database
201
+ def add_chip
202
+ unless control_form_val
203
+ return
204
+ end
205
+ if Chip.exists?(chip_reference: @gui_chip_editor.lie_reference.text)
206
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Invalid form', 'This chip reference already exists').exec
207
+ return
208
+ end
209
+ chip = Chip.new
210
+ # Reference
211
+ chip.chip_reference = @gui_chip_editor.lie_reference.text
212
+ # Custom
213
+ chip.chip_custom = 1
214
+ # Manufacturer
215
+ manu = Manufacturer.find_or_create_by(manufacturer_name: @gui_chip_editor.lie_manu_name.text)
216
+ chip.chip_manufacturer = manu.manufacturer_id
217
+ # Package
218
+ if @gui_chip_editor.cbx_package.currentIndex != 0
219
+ chip.chip_package = Package.find_by(package_name: @gui_chip_editor.cbx_package.currentText).package_id
220
+ else
221
+ if @gui_chip_editor.rbn_square.checked
222
+ shape = 0
223
+ else
224
+ shape = 1
225
+ end
226
+ Package.create(
227
+ package_name: @gui_chip_editor.lie_pack_name.text,
228
+ package_pinNumber: @gui_chip_editor.lie_pack_pin.text,
229
+ package_shape: shape
230
+ )
231
+ chip.chip_package = Package.ids.last
232
+ end
233
+ # Type
234
+ ctype = CType.find_or_create_by(cType_name: @gui_chip_editor.lie_type_name.text)
235
+ chip.chip_type = ctype.cType_id
236
+ # Voltage
237
+ if @gui_chip_editor.rbn_3v.checked
238
+ voltage = 1
239
+ else
240
+ voltage = 0
241
+ end
242
+ chip.chip_voltage = voltage
243
+ # Divers
244
+ chip.chip_detail = @gui_chip_editor.lie_description.text
245
+ chip.save
246
+ # Ajout des PINs
247
+ for i in 0..(@gui_chip_editor.lie_pack_pin.text.to_i) - 1 do
248
+ pin_num = @gui_chip_editor.tbl_pins.item(i, 0)
249
+ pin_signal = @gui_chip_editor.tbl_pins.cellWidget(i, 2)
250
+ pin_bus = @gui_chip_editor.tbl_pins.cellWidget(i, 1)
251
+ if pin_bus.currentIndex == 0
252
+ signal = 62
253
+ else
254
+ signal = Signall.find_by(signal_name: pin_signal.currentText).signal_id
255
+ end
256
+ Pin.create(
257
+ pin_number: pin_num.text.to_i,
258
+ pin_chip: chip.chip_id,
259
+ pin_signal: signal
260
+ )
261
+ end
262
+ # Reloading array
263
+ @parent.feed_chip_array
264
+ close
265
+ end
266
+
267
+ # Edit the chip
268
+ def edit_chip
269
+ unless control_form_val
270
+ return 0
271
+ end
272
+ # Reference
273
+ if @chip.chip_reference != @gui_chip_editor.lie_reference.text
274
+ @chip.update(chip_reference: @gui_chip_editor.lie_reference.text)
275
+ end
276
+ # Manufacturer
277
+ manu = Manufacturer.find_or_create_by(manufacturer_name: @gui_chip_editor.lie_manu_name.text)
278
+ if @chip.chip_manufacturer != manu.manufacturer_id
279
+ @chip.update(chip_manufacturer: manu.manufacturer_id)
280
+ end
281
+ # Package
282
+ if @gui_chip_editor.rbn_square.isChecked
283
+ shape = 0
284
+ else
285
+ shape = 1
286
+ end
287
+ package = Package.find_or_create_by(
288
+ package_name: @gui_chip_editor.lie_pack_name.text,
289
+ package_pinNumber: @gui_chip_editor.lie_pack_pin.text,
290
+ package_shape: shape
291
+ )
292
+ if @chip.chip_package != package.package_id
293
+ @chip.update(chip_package: package.package_id)
294
+ end
295
+ # Type
296
+ ctype = CType.find_or_create_by(cType_name: @gui_chip_editor.lie_type_name.text)
297
+ if @chip.chip_type != ctype.cType_id
298
+ @chip.update(chip_type: ctype.cType_id)
299
+ end
300
+ # Voltage
301
+ if @gui_chip_editor.rbn_3v.checked
302
+ voltage = 1
303
+ else
304
+ voltage = 0
305
+ end
306
+ if @chip.chip_voltage != voltage
307
+ @chip.update(chip_voltage: voltage)
308
+ end
309
+ # Divers
310
+ if @chip.chip_detail != @gui_chip_editor.lie_description.text
311
+ @chip.update(chip_detail: @gui_chip_editor.lie_description.text)
312
+ end
313
+
314
+ # Edit PINs (Destroy all then recreate)
315
+ @chip.pin.destroy_all
316
+ for i in 0..(@gui_chip_editor.lie_pack_pin.text.to_i) - 1 do
317
+ pin_num = @gui_chip_editor.tbl_pins.item(i, 0)
318
+ pin_signal = @gui_chip_editor.tbl_pins.cellWidget(i, 2)
319
+ pin_bus = @gui_chip_editor.tbl_pins.cellWidget(i, 1)
320
+ if pin_bus.currentIndex == 0
321
+ signal = 62
322
+ else
323
+ signal = Signall.find_by(signal_name: pin_signal.currentText).signal_id
324
+ end
325
+ Pin.create(
326
+ pin_number: pin_num.text.to_i,
327
+ pin_chip: @chip.chip_id,
328
+ pin_signal: signal
329
+ )
330
+ end
331
+ # Reloading array
332
+ @parent.feed_chip_array
333
+ close
334
+ rescue Exception => msg
335
+ logger = Logger.new($logFilePath)
336
+ logger.error msg
337
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while editing the chip. Consult the log for more details').exec
338
+ end
339
+
340
+ # Package combobox
341
+ def select_package
342
+ if @gui_chip_editor.cbx_package.currentIndex != 0
343
+ selectedPackage = Package.find_by package_name: @gui_chip_editor.cbx_package.currentText
344
+ @gui_chip_editor.lie_pack_name.setEnabled(false)
345
+ @gui_chip_editor.lie_pack_name.setText(selectedPackage.package_name)
346
+ @gui_chip_editor.lie_pack_pin.setEnabled(false)
347
+ @gui_chip_editor.lie_pack_pin.setText(selectedPackage.package_pinNumber.to_s)
348
+ @gui_chip_editor.rbn_square.setEnabled(false)
349
+ @gui_chip_editor.rbn_rectangular.setEnabled(false)
350
+ if selectedPackage.package_shape == 0
351
+ @gui_chip_editor.rbn_square.setChecked(true)
352
+ else
353
+ @gui_chip_editor.rbn_rectangular.setChecked(true)
354
+ end
355
+ fill_pin_table
356
+ else
357
+ @gui_chip_editor.lie_pack_name.setEnabled(true)
358
+ @gui_chip_editor.lie_pack_name.clear
359
+ @gui_chip_editor.lie_pack_pin.setEnabled(true)
360
+ @gui_chip_editor.lie_pack_pin.clear
361
+ @gui_chip_editor.rbn_square.setChecked(true)
362
+ @gui_chip_editor.rbn_rectangular.setEnabled(true)
363
+ @gui_chip_editor.rbn_square.setEnabled(true)
364
+ @gui_chip_editor.tbl_pins.clear
365
+ @gui_chip_editor.tbl_pins.setRowCount(0)
366
+ end
367
+ end
368
+
369
+ # Manufacturer combobox
370
+ def select_manufacturer
371
+ if @gui_chip_editor.cbx_manufacturer.currentIndex != 0
372
+ @gui_chip_editor.lie_manu_name.setEnabled(false)
373
+ @gui_chip_editor.lie_manu_name.setText(@gui_chip_editor.cbx_manufacturer.currentText)
374
+ else
375
+ @gui_chip_editor.lie_manu_name.setEnabled(true)
376
+ @gui_chip_editor.lie_manu_name.setText('')
377
+ end
378
+ end
379
+
380
+ # Type combobox
381
+ def select_type
382
+ if @gui_chip_editor.cbx_type.currentIndex != 0
383
+ @gui_chip_editor.lie_type_name.setEnabled(false)
384
+ @gui_chip_editor.lie_type_name.setText(@gui_chip_editor.cbx_type.currentText)
385
+ else
386
+ @gui_chip_editor.lie_type_name.setEnabled(true)
387
+ @gui_chip_editor.lie_type_name.setText('')
388
+ end
389
+ end
390
+
391
+ def fill_pin_table(action = '')
392
+ if @gui_chip_editor.lie_pack_pin.text.to_i <= 144 && @gui_chip_editor.lie_pack_pin.text.to_i > 4
393
+ @gui_chip_editor.tbl_pins.setRowCount(@gui_chip_editor.lie_pack_pin.text.to_i)
394
+ @gui_chip_editor.lie_pack_pin.text.to_i.times do |i|
395
+ cbx_bus = Qt::ComboBox.new
396
+ row = Qt::Variant.new(i)
397
+ cbx_bus.setProperty('row', row)
398
+ @gui_chip_editor.tbl_pins.setCellWidget(i, 1, cbx_bus)
399
+ cbx_signal = Qt::ComboBox.new
400
+ @gui_chip_editor.tbl_pins.setCellWidget(i, 2, cbx_signal)
401
+ item = Qt::TableWidgetItem.new
402
+ item.setFlags(Qt::ItemIsEnabled)
403
+ item.setData(0, Qt::Variant.new(i.next))
404
+ @gui_chip_editor.tbl_pins.setItem(i, 0, item)
405
+ cbx_bus.addItem('Bus...')
406
+ @bus_list.each do |b|
407
+ cbx_bus.addItem(b.bus_name)
408
+ end
409
+ if action == 'edit'
410
+ pin = Pin.find_by(pin_number: i.next, pin_chip: @chip.chip_id)
411
+ cbx_bus.setCurrentIndex(cbx_bus.findText(pin.signall.bus.pluck(:bus_name)[0]))
412
+ signal_list = Use.where(bus_id: pin.signall.bus.pluck(:bus_id)[0]).pluck(:signal_id)
413
+ signal_list.each do |s|
414
+ cbx_signal.addItem(Signall.find_by(signal_id: s).signal_name)
415
+ end
416
+ cbx_signal.setCurrentIndex(cbx_signal.findText(pin.signall.signal_name))
417
+ end
418
+ Qt::Object.connect(cbx_bus, SIGNAL('currentIndexChanged(int)'), self, SLOT('filter_cbx()'))
419
+ end
420
+ else
421
+ Qt::MessageBox.new(Qt::MessageBox::Warning, 'Invalid pin number value', 'Pin number needs to be between 4 and 144').exec
422
+ end
423
+ rescue Exception => msg
424
+ logger = Logger.new($logFilePath)
425
+ logger.error msg
426
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while adding pins to the table. Consult the log for more details').exec
427
+ end
428
+
429
+ # Filter signals by bus
430
+ def filter_cbx
431
+ bus_item_row = sender.property('row').to_i
432
+ busItem = @gui_chip_editor.tbl_pins.cellWidget(bus_item_row, 1)
433
+ associated_signal_item = @gui_chip_editor.tbl_pins.cellWidget(bus_item_row, 2)
434
+ associated_signal_item.clear
435
+ if busItem.currentText != 'Bus...'
436
+ bus = Bus.find_by(bus_name: busItem.currentText).bus_id
437
+ filtered_signal_list = Use.where(bus_id: bus)
438
+ filtered_signal_list.each do |s|
439
+ signalName = Signall.find_by(signal_id: s.signal_id).signal_name
440
+ associated_signal_item.addItem(signalName)
441
+ end
442
+ end
443
+ rescue Exception => msg
444
+ logger = Logger.new($logFilePath)
445
+ logger.error msg
446
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while filtering the signals. Consult the log for more details').exec
447
+ end
448
+ end