hardsploit_gui 2.2 → 2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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