hardsploit_gui 2.2 → 2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/bin/hardsploit_gui +2 -2
  3. data/lib/{Firmware → Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
  4. data/lib/{Firmware/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd → Firmwares/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd} +0 -0
  5. data/lib/Firmwares/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
  6. data/lib/{Firmware/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd → Firmwares/FPGA/SPI/SPI_SNIFFER/HARDSPLOIT_FIRMWARE_FPGA_SPI_SNIFFER.rpd} +0 -0
  7. data/lib/Firmwares/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
  8. data/lib/{Firmware → Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
  9. data/lib/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
  10. data/lib/{Firmware → Firmwares}/FPGA/VersionFPGA.rb +1 -1
  11. data/lib/{Firmware → Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
  12. data/lib/{Firmware → Firmwares}/UC/VersionUC.rb +1 -1
  13. data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -0
  14. data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -0
  15. data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -0
  16. data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -0
  17. data/lib/HardsploitAPI/{HardsploitAPI_PROGRESS.rb → Core/HardsploitAPI_PROGRESS.rb} +0 -0
  18. data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -0
  19. data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -0
  20. data/lib/HardsploitAPI/{HardsploitAPI_NO_MUX_PARALLELE_MEMORY.rb → Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb} +26 -49
  21. data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -0
  22. data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -0
  23. data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -0
  24. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -0
  25. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -0
  26. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -0
  27. data/lib/HardsploitAPI/{SWD → Modules/SWD}/HardsploitAPI_SWD_STM32.rb +32 -15
  28. data/lib/HardsploitAPI/{HardsploitAPI_TEST_INTERACT.rb → Modules/TEST/HardsploitAPI_TEST_INTERACT.rb} +1 -1
  29. data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -0
  30. data/lib/Hardsploit_gui.rb +96 -0
  31. data/lib/class/Chip_editor.rb +186 -330
  32. data/lib/class/Chip_management.rb +496 -0
  33. data/lib/class/Command_editor.rb +130 -182
  34. data/lib/class/Command_table.rb +16 -22
  35. data/lib/class/Console.rb +0 -2
  36. data/lib/class/ErrorMsg.rb +312 -0
  37. data/lib/class/Export.rb +140 -0
  38. data/lib/class/Export_manager.rb +43 -43
  39. data/lib/class/Firmware.rb +52 -11
  40. data/lib/class/Generic_commands.rb +180 -190
  41. data/lib/class/Import.rb +193 -0
  42. data/lib/class/Progress_bar.rb +1 -0
  43. data/lib/class/Signal_mapper.rb +120 -0
  44. data/lib/class/Wire_helper.rb +132 -148
  45. data/lib/class/{I2C → i2c}/I2c_command.rb +16 -13
  46. data/lib/class/i2c/I2c_export.rb +95 -0
  47. data/lib/class/i2c/I2c_import.rb +117 -0
  48. data/lib/class/i2c/I2c_scanner.rb +114 -0
  49. data/lib/class/i2c/I2c_settings.rb +148 -0
  50. data/lib/class/parallel/Parallel_export.rb +118 -0
  51. data/lib/class/parallel/Parallel_import.rb +113 -0
  52. data/lib/class/parallel/Parallel_settings.rb +81 -0
  53. data/lib/class/spi/Spi_export.rb +108 -0
  54. data/lib/class/spi/Spi_import.rb +159 -0
  55. data/lib/class/spi/Spi_settings.rb +108 -0
  56. data/lib/class/spi/Spi_sniffer.rb +101 -0
  57. data/lib/class/swd/Swd.rb +125 -0
  58. data/lib/class/swd/Swd_scanner.rb +121 -0
  59. data/lib/class/swd/Swd_settings.rb +76 -0
  60. data/lib/class/uart/Uart_baudrate.rb +62 -0
  61. data/lib/class/uart/Uart_console.rb +115 -0
  62. data/lib/class/uart/Uart_settings.rb +102 -0
  63. data/lib/db/associations.rb +42 -29
  64. data/lib/db/database.rb +4 -0
  65. data/lib/db/development.sqlite3 +0 -0
  66. data/lib/db/migrate/004_create_manufacturers.rb +13 -0
  67. data/lib/db/migrate/005_create_packages.rb +13 -0
  68. data/lib/db/migrate/006_create_chip_types.rb +11 -0
  69. data/lib/db/migrate/007_create_buses.rb +11 -0
  70. data/lib/db/migrate/008_create_signals.rb +14 -0
  71. data/lib/db/migrate/009_create_chips.rb +25 -0
  72. data/lib/db/migrate/010_create_commands.rb +21 -0
  73. data/lib/db/migrate/011_create_bytes.rb +19 -0
  74. data/lib/db/migrate/012_create_i2c_settings.rb +21 -0
  75. data/lib/db/migrate/013_create_spi_settings.rb +26 -0
  76. data/lib/db/migrate/014_create_parallel_settings.rb +21 -0
  77. data/lib/db/migrate/015_create_pins.rb +19 -0
  78. data/lib/db/migrate/016_create_uses.rb +17 -0
  79. data/lib/db/migrate/017_create_swd_settings.rb +19 -0
  80. data/lib/db/migrate/018_create_uart_settings.rb +22 -0
  81. data/lib/db/schema.rb +157 -0
  82. data/lib/db/seeds.rb +161 -0
  83. data/lib/gui/gui_chip_editor.rb +23 -22
  84. data/lib/gui/gui_chip_management.rb +43 -38
  85. data/lib/gui/gui_command_editor.rb +2 -1
  86. data/lib/gui/gui_export.rb +132 -0
  87. data/lib/gui/gui_generic_commands.rb +69 -31
  88. data/lib/gui/gui_generic_export.rb +18 -2
  89. data/lib/gui/gui_generic_import.rb +18 -2
  90. data/lib/gui/gui_i2c_command.rb +2 -1
  91. data/lib/gui/gui_i2c_settings.rb +2 -2
  92. data/lib/gui/gui_import.rb +131 -0
  93. data/lib/gui/gui_parallel_settings.rb +2 -1
  94. data/lib/gui/gui_progress_bar.rb +2 -1
  95. data/lib/gui/gui_signal_mapper.rb +121 -0
  96. data/lib/gui/gui_signal_scanner.rb +146 -0
  97. data/lib/gui/gui_spi_settings.rb +6 -2
  98. data/lib/gui/gui_spi_sniffer.rb +112 -0
  99. data/lib/gui/gui_swd_settings.rb +166 -0
  100. data/lib/gui/gui_uart_baudrate.rb +114 -0
  101. data/lib/gui/gui_uart_console.rb +164 -0
  102. data/lib/gui/gui_uart_settings.rb +243 -0
  103. data/lib/gui_designer/gui_chip_editor.ui +9 -6
  104. data/lib/gui_designer/gui_chip_management.ui +79 -35
  105. data/lib/gui_designer/gui_command_editor.ui +3 -0
  106. data/lib/gui_designer/gui_export.ui +171 -0
  107. data/lib/gui_designer/gui_generic_commands.ui +274 -190
  108. data/lib/gui_designer/gui_generic_export.ui +24 -1
  109. data/lib/gui_designer/gui_generic_import.ui +25 -2
  110. data/lib/gui_designer/gui_i2c_command.ui +3 -0
  111. data/lib/gui_designer/gui_i2c_settings.ui +2 -2
  112. data/lib/gui_designer/gui_import.ui +168 -0
  113. data/lib/gui_designer/gui_parallel_settings.ui +4 -1
  114. data/lib/gui_designer/gui_progress_bar.ui +3 -0
  115. data/lib/gui_designer/gui_signal_mapper.ui +179 -0
  116. data/lib/gui_designer/gui_signal_scanner.ui +261 -0
  117. data/lib/gui_designer/gui_spi_settings.ui +15 -2
  118. data/lib/gui_designer/gui_spi_sniffer.ui +156 -0
  119. data/lib/gui_designer/gui_swd_settings.ui +189 -0
  120. data/lib/gui_designer/gui_uart_baudrate.ui +161 -0
  121. data/lib/gui_designer/gui_uart_console.ui +284 -0
  122. data/lib/gui_designer/gui_uart_settings.ui +280 -0
  123. data/lib/logs/error.log +63 -0
  124. data/lib/models/bus.rb +19 -0
  125. data/lib/models/byte.rb +29 -0
  126. data/lib/models/chip.rb +41 -0
  127. data/lib/models/chip_type.rb +14 -0
  128. data/lib/models/command.rb +20 -0
  129. data/lib/models/i2c_setting.rb +41 -0
  130. data/lib/models/manufacturer.rb +14 -0
  131. data/lib/models/package.rb +26 -0
  132. data/lib/models/parallel_setting.rb +37 -0
  133. data/lib/models/pin.rb +14 -0
  134. data/lib/models/signall.rb +20 -0
  135. data/lib/models/spi_setting.rb +67 -0
  136. data/lib/models/swd_setting.rb +25 -0
  137. data/lib/models/uart_setting.rb +52 -0
  138. data/lib/models/use.rb +6 -0
  139. data/lib/startHardsploit.rb +2 -2
  140. metadata +106 -41
  141. data/lib/Firmware/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
  142. data/lib/HardsploitAPI/HardsploitAPI.rb +0 -133
  143. data/lib/HardsploitAPI/HardsploitAPI_CONSTANT.rb +0 -145
  144. data/lib/HardsploitAPI/HardsploitAPI_ERROR.rb +0 -38
  145. data/lib/HardsploitAPI/HardsploitAPI_FIRMWARE.rb +0 -311
  146. data/lib/HardsploitAPI/HardsploitAPI_I2C.rb +0 -360
  147. data/lib/HardsploitAPI/HardsploitAPI_SPI.rb +0 -369
  148. data/lib/HardsploitAPI/HardsploitAPI_USB_COMMUNICATION.rb +0 -148
  149. data/lib/HardsploitAPI/LICENSE.txt +0 -674
  150. data/lib/HardsploitAPI/README.md +0 -22
  151. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD.rb +0 -249
  152. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -102
  153. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -78
  154. data/lib/HardsploitAPI/TRADEMARK +0 -3
  155. data/lib/class/HardsploitGUI.rb +0 -463
  156. data/lib/class/I2C/I2c_export.rb +0 -118
  157. data/lib/class/I2C/I2c_import.rb +0 -79
  158. data/lib/class/I2C/I2c_settings.rb +0 -129
  159. data/lib/class/PARALLEL/Parallel_export.rb +0 -146
  160. data/lib/class/PARALLEL/Parallel_import.rb +0 -88
  161. data/lib/class/PARALLEL/Parallel_settings.rb +0 -102
  162. data/lib/class/SPI/Spi_export.rb +0 -138
  163. data/lib/class/SPI/Spi_import.rb +0 -113
  164. data/lib/class/SPI/Spi_settings.rb +0 -134
  165. data/lib/db/hs.db +0 -0
  166. data/lib/hardsploit.rb +0 -131
@@ -0,0 +1,496 @@
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
+ ABSOLUTE_PATH = File.expand_path(File.dirname(__FILE__)) + "/"
9
+
10
+ Dir[ABSOLUTE_PATH + "../models/*.rb"].each {|file| require_relative file }
11
+ Dir[ABSOLUTE_PATH + "*.rb"].each {|file| require_relative file }
12
+ Dir[ABSOLUTE_PATH + "parallel/*.rb"].each {|file| require_relative file }
13
+ Dir[ABSOLUTE_PATH + "spi/*.rb"].each {|file| require_relative file }
14
+ Dir[ABSOLUTE_PATH + "i2c/*.rb"].each {|file| require_relative file }
15
+ Dir[ABSOLUTE_PATH + "swd/*.rb"].each {|file| require_relative file }
16
+ Dir[ABSOLUTE_PATH + "uart/*.rb"].each {|file| require_relative file }
17
+
18
+ class Chip_management < Qt::MainWindow
19
+ slots 'load_tree(int, int)'
20
+ slots 'load_chip_action(QTreeWidgetItem*, int)'
21
+ slots 'feed_chip_array()'
22
+ slots 'update_uc_firmware()'
23
+ slots 'get_hardsploit_versions()'
24
+ slots 'get_log_path()'
25
+ slots 'get_db_path()'
26
+ slots 'get_hardsploit_website()'
27
+ slots 'set_firmware()'
28
+ slots 'display_current_firmware()'
29
+ slots 'console_view()'
30
+ slots 'add_chip()'
31
+ slots 'edit_chip()'
32
+ slots 'wire_chip()'
33
+ slots 'delete_chip()'
34
+ slots 'import()'
35
+ slots 'export()'
36
+ slots 'open_signal_mapper()'
37
+
38
+ def initialize(versionGUI)
39
+ super()
40
+ @view = Ui_Chip_management.new
41
+ @view.setupUi(self)
42
+ @view.img_search.setPixmap(Qt::Pixmap.new(File.expand_path(File.dirname(__FILE__)) + "/../images/search.png"))
43
+ inputRestrict(@view.lie_search, 2)
44
+ feed_chip_array
45
+ feed_manufacturer_cbx
46
+ feed_type_cbx
47
+ @console = Console.new(@view.tbl_console)
48
+ @versionGUI = versionGUI
49
+ check_hardsploit_connection
50
+ rescue Exception => msg
51
+ ErrorMsg.new.unknown(msg)
52
+ return false
53
+ end
54
+
55
+ def feed_type_cbx
56
+ Manufacturer.all.each do |m|
57
+ @view.cbx_manufacturer.addItem(m.name)
58
+ end
59
+ end
60
+
61
+ def feed_manufacturer_cbx
62
+ ChipType.all.each do |c|
63
+ @view.cbx_type.addItem(c.name)
64
+ end
65
+ end
66
+
67
+ def console_view
68
+ sender.isChecked ? @view.tbl_console.show : @view.tbl_console.hide
69
+ end
70
+
71
+ def get_chip_buses(chip)
72
+ chip_buses = []
73
+ chip.pins.each do |pin|
74
+ chip_buses.push(pin.signall.buses[0].name)
75
+ end
76
+ chip_buses.delete("NA")
77
+ return chip_buses.uniq
78
+ end
79
+
80
+ def load_tree(line, column)
81
+ return 0 unless column.zero?
82
+ @view.tw_chip.clear
83
+ @chip_clicked = Chip.find_by(reference: @view.tbl_chip.item(line, column).text)
84
+ # CHIP LEVEL
85
+ chip_lvl = Qt::TreeWidgetItem.new
86
+ chip_lvl.setText(0, @view.tbl_chip.item(line, column).text)
87
+ @view.tw_chip.addTopLevelItem(chip_lvl)
88
+ chip_lvl.setExpanded(true)
89
+ # ACTION LEVEL
90
+ action_lvl = Qt::TreeWidgetItem.new
91
+ action_lvl.setText(0, 'Manage')
92
+ chip_lvl.addChild(create_action_nodes(action_lvl))
93
+ action_lvl.setExpanded(true)
94
+
95
+ # BUS LEVEL(S)
96
+ chip_bus = get_chip_buses(@chip_clicked)
97
+ chip_bus.each do |b|
98
+ @bus_lvl = Qt::TreeWidgetItem.new
99
+ @bus_lvl.setText(0, b)
100
+ chip_lvl.addChild(create_bus_nodes(b, @bus_lvl))
101
+ @bus_lvl.setExpanded(true) unless @bus_lvl.nil?
102
+ end
103
+ end
104
+
105
+ def create_action_nodes(parent_node)
106
+ wiring_lvl = Qt::TreeWidgetItem.new
107
+ wiring_lvl.setText(0, "Wiring")
108
+ parent_node.addChild(wiring_lvl)
109
+ edit_lvl = Qt::TreeWidgetItem.new
110
+ edit_lvl.setText(0, "Edit")
111
+ parent_node.addChild(edit_lvl)
112
+ template_lvl = Qt::TreeWidgetItem.new
113
+ template_lvl.setText(0, "Template")
114
+ parent_node.addChild(template_lvl)
115
+ delete_lvl = Qt::TreeWidgetItem.new
116
+ delete_lvl.setText(0, "Delete")
117
+ parent_node.addChild(delete_lvl)
118
+ return parent_node
119
+ end
120
+
121
+ def create_bus_nodes(bus, parent_node)
122
+ case bus
123
+ when 'UART'
124
+ settings_lvl = Qt::TreeWidgetItem.new
125
+ settings_lvl.setText(0, "Settings")
126
+ parent_node.addChild(settings_lvl)
127
+ console_lvl = Qt::TreeWidgetItem.new
128
+ console_lvl.setText(0, "Console")
129
+ parent_node.addChild(console_lvl)
130
+ when 'SWD'
131
+ settings_lvl = Qt::TreeWidgetItem.new
132
+ settings_lvl.setText(0, "Settings")
133
+ parent_node.addChild(settings_lvl)
134
+ scan_lvl = Qt::TreeWidgetItem.new
135
+ scan_lvl.setText(0, "PIN Scanner")
136
+ parent_node.addChild(scan_lvl)
137
+ detect_lvl = Qt::TreeWidgetItem.new
138
+ detect_lvl.setText(0, "Detect")
139
+ parent_node.addChild(detect_lvl)
140
+ import_lvl = Qt::TreeWidgetItem.new
141
+ import_lvl.setText(0, "Import")
142
+ parent_node.addChild(import_lvl)
143
+ export_lvl = Qt::TreeWidgetItem.new
144
+ export_lvl.setText(0, "Dump")
145
+ parent_node.addChild(export_lvl)
146
+ erase_lvl = Qt::TreeWidgetItem.new
147
+ erase_lvl.setText(0, "Erase")
148
+ parent_node.addChild(erase_lvl)
149
+ when 'SPI'
150
+ settings_lvl = Qt::TreeWidgetItem.new
151
+ settings_lvl.setText(0, "Settings")
152
+ parent_node.addChild(settings_lvl)
153
+ cmd_lvl = Qt::TreeWidgetItem.new
154
+ cmd_lvl.setText(0, "Commands")
155
+ parent_node.addChild(cmd_lvl)
156
+ import_lvl = Qt::TreeWidgetItem.new
157
+ import_lvl.setText(0, "Import")
158
+ parent_node.addChild(import_lvl)
159
+ export_lvl = Qt::TreeWidgetItem.new
160
+ export_lvl.setText(0, "Export")
161
+ parent_node.addChild(export_lvl)
162
+ sniffer_lvl = Qt::TreeWidgetItem.new
163
+ sniffer_lvl.setText(0, "Sniffer")
164
+ parent_node.addChild(sniffer_lvl)
165
+ when 'I2C'
166
+ settings_lvl = Qt::TreeWidgetItem.new
167
+ settings_lvl.setText(0, "Settings")
168
+ parent_node.addChild(settings_lvl)
169
+ scanner_lvl = Qt::TreeWidgetItem.new
170
+ scanner_lvl.setText(0, "PIN Scanner")
171
+ parent_node.addChild(scanner_lvl)
172
+ cmd_lvl = Qt::TreeWidgetItem.new
173
+ cmd_lvl.setText(0, "Commands")
174
+ parent_node.addChild(cmd_lvl)
175
+ import_lvl = Qt::TreeWidgetItem.new
176
+ import_lvl.setText(0, "Import")
177
+ parent_node.addChild(import_lvl)
178
+ export_lvl = Qt::TreeWidgetItem.new
179
+ export_lvl.setText(0, "Export")
180
+ parent_node.addChild(export_lvl)
181
+ when 'PARALLEL'
182
+ settings_lvl = Qt::TreeWidgetItem.new
183
+ settings_lvl.setText(0, "Settings")
184
+ parent_node.addChild(settings_lvl)
185
+ # Not implemented yet
186
+ #import_lvl = Qt::TreeWidgetItem.new
187
+ #import_lvl.setText(0, "Import")
188
+ #parent_node.addChild(import_lvl)
189
+ export_lvl = Qt::TreeWidgetItem.new
190
+ export_lvl.setText(0, "Export")
191
+ parent_node.addChild(export_lvl)
192
+ end
193
+ return parent_node
194
+ end
195
+
196
+ def feed_chip_array
197
+ @view.tbl_chip.clearContents
198
+ chips = filter_chips
199
+ @view.tbl_chip.setRowCount(chips.count);
200
+ # Insert chip table rows
201
+ chips.to_enum.with_index(0).each do |c, i|
202
+ # Reference
203
+ item = Qt::TableWidgetItem.new(c.reference)
204
+ item.setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled)
205
+ @view.tbl_chip.setItem(i, 0, item)
206
+ # Chip Type
207
+ item2 = Qt::TableWidgetItem.new(ChipType.find(c.chip_type_id).name)
208
+ item2.setFlags(Qt::ItemIsEnabled)
209
+ @view.tbl_chip.setItem(i, 1, item2)
210
+ # Chip Manufacturer
211
+ item3 = Qt::TableWidgetItem.new(Manufacturer.find(c.manufacturer_id).name)
212
+ item3.setFlags(Qt::ItemIsEnabled)
213
+ @view.tbl_chip.setItem(i, 2, item3)
214
+ bus_list = get_chip_buses(c)
215
+ bus_list_str = ''
216
+ bus_list.each do |b|
217
+ bus_list_str = bus_list_str + "#{b} "
218
+ end
219
+ # Chip Bus(es)
220
+ item4 = Qt::TableWidgetItem.new(bus_list_str)
221
+ item4.setFlags(Qt::ItemIsEnabled)
222
+ @view.tbl_chip.setItem(i, 3, item4)
223
+ end
224
+ @view.tbl_chip.resizeColumnsToContents
225
+ @view.tbl_chip.resizeRowsToContents
226
+ @view.tbl_chip.horizontalHeader.stretchLastSection = true
227
+ @view.tbl_console.horizontalHeader.stretchLastSection = true
228
+ end
229
+
230
+ def filter_chips
231
+ if @view.lie_search.text.empty?
232
+ chips = Chip.all
233
+ else
234
+ chips = Chip.where("reference LIKE ?", "%#{@view.lie_search.text}%")
235
+ end
236
+ unless @view.cbx_manufacturer.currentIndex.zero?
237
+ man_id = Manufacturer.find_by(name: @view.cbx_manufacturer.currentText).id
238
+ chips = chips.where(manufacturer_id: man_id)
239
+ end
240
+ unless @view.cbx_type.currentIndex.zero?
241
+ type_id = ChipType.find_by(name: @view.cbx_type.currentText).id
242
+ chips = chips.where(chip_type_id: type_id)
243
+ end
244
+ return chips
245
+ end
246
+
247
+ def load_chip_action(item, column)
248
+ return 0 unless item.childCount.zero?
249
+ if item.parent.text(0) == 'Manage'
250
+ case item.text(0)
251
+ when 'Wiring' ; wire_chip
252
+ when 'Edit' ; edit_chip
253
+ when 'Template' ; add_chip
254
+ when 'Delete' ; delete_chip
255
+ end
256
+ else
257
+ case item.parent.text(0)
258
+ when 'SPI' ; load_spi_module(item.text(0))
259
+ when 'I2C' ; load_i2c_module(item.text(0))
260
+ when 'PARALLEL' ; load_parallel_module(item.text(0))
261
+ when 'SWD' ; load_swd_module(item.text(0))
262
+ when 'UART' ; load_uart_module(item.text(0))
263
+ end
264
+ end
265
+ end
266
+
267
+ def load_spi_module(spi_module)
268
+ case spi_module
269
+ when 'Settings' ; Spi_settings.new(@chip_clicked).show
270
+ when 'Commands' ; Generic_commands.new(@chip_clicked, 'SPI').show
271
+ when 'Import' ; Spi_import.new(@chip_clicked).show
272
+ when 'Export' ; Spi_export.new(@chip_clicked).show
273
+ when 'Sniffer' ; Spi_sniffer.new(@chip_clicked).show
274
+ end
275
+ end
276
+
277
+ def load_i2c_module(i2c_module)
278
+ case i2c_module
279
+ when 'Settings' ; I2c_settings.new(@chip_clicked).show
280
+ when 'PIN Scanner' ; I2c_scanner.new.show
281
+ when 'Commands' ; Generic_commands.new(@chip_clicked, 'I2C').show
282
+ when 'Import' ; I2c_import.new(@chip_clicked).show
283
+ when 'Export' ; I2c_export.new(@chip_clicked).show
284
+ end
285
+ end
286
+
287
+ def load_parallel_module(parallel_module)
288
+ case parallel_module
289
+ when 'Settings' ; Parallel_settings.new(@chip_clicked).show
290
+ when 'Import' ; Parallel_import.new(@chip_clicked).show
291
+ when 'Export' ; Parallel_export.new(@chip_clicked).show
292
+ end
293
+ end
294
+
295
+ def load_swd_module(swd_module)
296
+ case swd_module
297
+ when 'Settings' ; Swd_settings.new(@chip_clicked).show
298
+ when 'PIN Scanner' ; Swd_scanner.new.show
299
+ when 'Detect' ; Swd.new(@chip_clicked, @console).detect
300
+ when 'Import'
301
+ filepath = Qt::FileDialog.getOpenFileName(self, tr('Select a file'), '/')
302
+ Swd.new(@chip_clicked, @console).import(filepath) unless filepath.nil?
303
+ when 'Dump'
304
+ filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/')
305
+ Swd.new(@chip_clicked, @console).export(filepath) unless filepath.nil?
306
+ when 'Erase' ; Swd.new(@chip_clicked, @console).erase
307
+ end
308
+ end
309
+
310
+ def load_uart_module(uart_module)
311
+ case uart_module
312
+ when 'Settings'
313
+ settingsUart = Uart_settings.new(@chip_clicked)
314
+ settingsUart.setWindowModality(Qt::ApplicationModal)
315
+ settingsUart.show
316
+ when 'Console'
317
+ consoleUart = Uart_console.new(@chip_clicked)
318
+ consoleUart.setWindowModality(Qt::ApplicationModal)
319
+ consoleUart.show
320
+ end
321
+ end
322
+
323
+ def add_chip
324
+
325
+ if sender.objectName == 'tw_chip' or sender.objectName == 'actionTemplate'
326
+ unless @chip_clicked.nil?
327
+ add_chip = Chip_editor.new(self, @chip_clicked, 'temp')
328
+ else
329
+ ErrorMsg.new.no_chip_loaded
330
+ end
331
+ else
332
+ add_chip = Chip_editor.new(self, 'none', 'new')
333
+ end
334
+ add_chip.show
335
+ end
336
+
337
+ def edit_chip
338
+ return ErrorMsg.new.no_chip_loaded if @chip_clicked.nil?
339
+ edit_chip = Chip_editor.new(self, @chip_clicked, 'edit')
340
+ edit_chip.show
341
+ end
342
+
343
+ def delete_chip
344
+ return ErrorMsg.new.no_chip_loaded if @chip_clicked.nil?
345
+ msg = Qt::MessageBox.new
346
+ msg.setWindowTitle("Delete current chip")
347
+ msg.setText("Delete #{@chip_clicked.reference}? Commands will be deleted too.")
348
+ msg.setIcon(Qt::MessageBox::Question)
349
+ msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
350
+ msg.setDefaultButton(Qt::MessageBox::Cancel)
351
+ if msg.exec == Qt::MessageBox::Ok
352
+ @chip_clicked.destroy
353
+ @chip_clicked = nil
354
+ feed_chip_array
355
+ @view.tw_chip.clear
356
+ end
357
+ end
358
+
359
+ def wire_chip
360
+ return ErrorMsg.new.hardsploit_not_found unless HardsploitAPI.getNumberOfBoardAvailable > 0
361
+ return ErrorMsg.new.no_chip_loaded if @chip_clicked.nil?
362
+ wire_helper = Wire_helper.new(@chip_clicked)
363
+ wire_helper.setWindowModality(Qt::ApplicationModal)
364
+ wire_helper.show
365
+ end
366
+
367
+ def import
368
+ if @chip_clicked.nil?
369
+ import = Import.new(self)
370
+ else
371
+ import = Import.new(self, @chip_clicked)
372
+ end
373
+ import.setWindowModality(Qt::ApplicationModal)
374
+ import.show
375
+ end
376
+
377
+ def export
378
+ return ErrorMsg.new.no_chip_loaded if @chip_clicked.nil?
379
+ export = Export.new(@view.tbl_chip.selectedItems)
380
+ export.setWindowModality(Qt::ApplicationModal)
381
+ export.show
382
+ end
383
+
384
+ def display_current_firmware
385
+ if $currentFirmware.nil?
386
+ Qt::MessageBox.new(
387
+ Qt::MessageBox::Information,
388
+ 'Firmware',
389
+ 'No firmware loaded'
390
+ ).exec
391
+ else
392
+ Qt::MessageBox.new(
393
+ Qt::MessageBox::Information,
394
+ 'Firmware',
395
+ "Actual firmware: #{$currentFirmware}"
396
+ ).exec
397
+ end
398
+ end
399
+
400
+ def set_firmware
401
+ Firmware.new(sender.objectName[6, sender.objectName.length])
402
+ display_current_firmware
403
+ end
404
+
405
+ def update_uc_firmware
406
+ Firmware.new('uC')
407
+ end
408
+
409
+ def get_hardsploit_versions
410
+ if HardsploitAPI.getNumberOfBoardAvailable > 0
411
+ Qt::MessageBox.new(
412
+ Qt::MessageBox::Information,
413
+ 'Hardsploit versions',
414
+ "GUI VERSION : #{@versionGUI}\n"+
415
+ "API VERSION : #{HardsploitAPI::VERSION::API}\n"+
416
+ "BOARD : #{HardsploitAPI.instance.getVersionNumber}"
417
+ ).exec
418
+ else
419
+ Qt::MessageBox.new(
420
+ Qt::MessageBox::Information,
421
+ 'Hardsploit versions',
422
+ "GUI VERSION : #{@versionGUI}\n "+
423
+ "API VERSION : #{HardsploitAPI::VERSION::API}"
424
+ ).exec
425
+ end
426
+ end
427
+
428
+ def get_log_path
429
+ msg = Qt::MessageBox.new
430
+ msg.setWindowTitle('Log file path')
431
+ msg.setText("Path: #{$logFilePath}")
432
+ msg.setIcon(Qt::MessageBox::Information)
433
+ close_btn = msg.setStandardButtons(Qt::MessageBox::Close)
434
+ open_btn = msg.addButton('Open folder', Qt::MessageBox::ActionRole)
435
+ open_btn.setObjectName('open_btn')
436
+ msg.exec
437
+ if msg.clickedButton.objectName == 'open_btn'
438
+ system("xdg-open #{$logFilePath}")
439
+ end
440
+ end
441
+
442
+ def get_db_path
443
+ msg = Qt::MessageBox.new
444
+ msg.setWindowTitle('Database path')
445
+ msg.setText("Path: #{$dbFilePath}\n")
446
+ msg.setIcon(Qt::MessageBox::Information)
447
+ close_btn = msg.setStandardButtons(Qt::MessageBox::Close)
448
+ open_btn = msg.addButton('Open folder', Qt::MessageBox::ActionRole)
449
+ open_btn.setObjectName('open_btn')
450
+ backup_btn = msg.addButton('Create backup', Qt::MessageBox::ActionRole)
451
+ backup_btn.setObjectName('backup_btn')
452
+ msg.exec
453
+ if msg.clickedButton.objectName == 'backup_btn'
454
+ system("cp #{$dbFilePath} #{$dbFilePath}.bck")
455
+ Qt::MessageBox.new(
456
+ Qt::MessageBox::Information,
457
+ 'Backup status',
458
+ 'db.bck created'
459
+ ).exec
460
+ end
461
+ if msg.clickedButton.objectName == 'open_btn'
462
+ system("xdg-open #{$dbFilePath}")
463
+ end
464
+ end
465
+
466
+ def get_hardsploit_website
467
+ Qt::MessageBox.new(
468
+ Qt::MessageBox::Information,
469
+ 'Hardsploit website',
470
+ 'Find all the news about Hardsploit on our website: http://hardsploit.io'
471
+ ).exec
472
+ end
473
+
474
+ def open_signal_mapper
475
+ signal_mapper = Signal_mapper.new
476
+ signal_mapper.setWindowModality(Qt::ApplicationModal)
477
+ signal_mapper.show
478
+ end
479
+
480
+ def check_hardsploit_connection
481
+ if HardsploitAPI.getNumberOfBoardAvailable > 0
482
+ HardsploitAPI.id = ARGV[0].to_i
483
+ @console.print(
484
+ "Hardsploit board detected GUI V#{@versionGUI} "+
485
+ "API V#{HardsploitAPI::VERSION::API} "+
486
+ "BOARD : #{HardsploitAPI.instance.getVersionNumber}"
487
+ )
488
+ @console.print('Hardsploit ready to suck chip souls !')
489
+ else
490
+ @console.print(
491
+ 'Hardsploit board unconnected: '+
492
+ 'Wiring and command execution disabled'
493
+ )
494
+ end
495
+ end
496
+ end