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
@@ -5,8 +5,6 @@
5
5
  # License URI: http://www.gnu.org/licenses/gpl.txt
6
6
  #===================================================
7
7
 
8
- require_relative '../HardsploitAPI/HardsploitAPI'
9
- require_relative '../class/Command_table'
10
8
  require_relative '../gui/gui_command_editor'
11
9
  class Command_editor < Qt::Widget
12
10
  slots 'add_cmd()'
@@ -16,70 +14,134 @@ class Command_editor < Qt::Widget
16
14
  slots 'remove_row()'
17
15
  slots 'check_cell_content(QTableWidgetItem*)'
18
16
 
19
- def initialize(action, cmd_name, chip, bus_id, parent, api, bus_param={})
17
+ def initialize(action, cmd_name, chip, bus_id, parent, bus_param={})
20
18
  super()
21
- @cmd_editor_gui = Ui_Command_editor.new
19
+ @view = Ui_Command_editor.new
22
20
  centerWindow(self)
23
- @cmd_editor_gui.setupUi(self)
24
- @bus = Bus.find_by(bus_id: bus_id)
25
- @chip_id = chip.chip_id
21
+ @view.setupUi(self)
22
+ @bus = Bus.find(bus_id)
23
+ @chip_id = chip.id
26
24
  @cmd_name = cmd_name
27
25
  @bus_id = bus_id
28
26
  @parent = parent
29
- @api = api
30
- @cmd_table = Command_table.new(@api, @cmd_editor_gui.tbl_bytes, @bus.bus_name)
31
-
32
- inputRestrict(@cmd_editor_gui.lie_name, 2)
33
- inputRestrict(@cmd_editor_gui.lie_description, 2)
34
- @cmd_editor_gui.lbl_chip_val.setText(chip.chip_reference)
27
+ @cmd_table = Command_table.new(@view.tbl_bytes, @bus.name)
35
28
 
29
+ inputRestrict(@view.lie_name, 2)
30
+ inputRestrict(@view.lie_description, 2)
31
+ @view.lbl_chip_val.setText(chip.reference)
36
32
  @cmd_table.resize_to_content
37
- case @bus.bus_name
38
- when 'SPI'
39
- @cmd_table.build_spi
40
- end
41
- @cmd_editor_gui.lie_text_2_bytes.hide if @bus.bus_name != 'SPI'
33
+ @cmd_table.build_spi if @bus.name == 'SPI'
34
+ @view.lie_text_2_bytes.hide unless @bus.name == 'SPI'
42
35
 
43
36
  case action
44
37
  when 0
45
38
  # Add
46
- @cmd_editor_gui.lbl_cmd_val.text = '-'
47
- Qt::Object.connect(@cmd_editor_gui.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
39
+ @view.lbl_cmd_val.setText('-')
40
+ Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
48
41
  when 1
49
- # Temp
50
- @cmd_editor_gui.lbl_cmd_val.text = cmd_name
42
+ # Template
43
+ @view.lbl_cmd_val.setText(cmd_name)
51
44
  feed_editor_form
52
- @cmd_editor_gui.lie_name.setText('')
53
- Qt::Object.connect(@cmd_editor_gui.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
45
+ @view.lie_name.setText('')
46
+ Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
54
47
  else
55
48
  # Edit
56
- @cmd_editor_gui.lbl_cmd_val.text = "#{cmd_name}"
49
+ @view.lbl_cmd_val.setText(cmd_name)
57
50
  feed_editor_form
58
- @cmd_editor_gui.btn_validate.setText('Edit')
59
- Qt::Object.connect(@cmd_editor_gui.btn_validate, SIGNAL('clicked()'), self, SLOT('edit_cmd()'))
51
+ @view.btn_validate.setText('Edit')
52
+ Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('edit_cmd()'))
60
53
  end
61
54
  unless bus_param.empty?
62
55
  feed_i2c_cmd_array(bus_param)
63
56
  end
64
57
  rescue Exception => msg
65
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while loading the GUI. Consult the logs for more details').exec
66
- logger = Logger.new($logFilePath)
67
- logger.error msg
58
+ ErrorMsg.new.unknown(msg)
59
+ end
60
+
61
+ def feed_i2c_cmd_array(bus_param)
62
+ if bus_param[:mode] == 'w'
63
+ @cmd_table.i2c_write_cmd(bus_param[:addr], bus_param[:size].to_i)
64
+ else
65
+ @cmd_table.i2c_read_cmd(bus_param[:addr], bus_param[:size].to_i)
66
+ end
67
+ end
68
+
69
+ def add_cmd
70
+ return false if @cmd_table.empty_data_exist? || is_cmd_size_valid? == false
71
+ @cmd = Command.create(
72
+ name: @view.lie_name.text,
73
+ description: @view.lie_description.text,
74
+ bus_id: @bus_id,
75
+ chip_id: @chip_id
76
+ )
77
+ unless check_for_errors(@cmd)
78
+ add_bytes
79
+ @parent.feed_cmd_array
80
+ close
81
+ end
82
+ rescue Exception => msg
83
+ ErrorMsg.new.unknown(msg)
84
+ end
85
+
86
+ def edit_cmd
87
+ return false if @cmd_table.empty_data_exist? && !is_cmd_size_valid?
88
+ @cmd = Command.find_by(name: @cmd_name, chip_id: @chip_id)
89
+ @cmd.update(
90
+ name: @view.lie_name.text,
91
+ description: @view.lie_description.text
92
+ )
93
+ @view.tbl_bytes.sortItems(0, Qt::AscendingOrder)
94
+ unless check_for_errors(@cmd)
95
+ Byte.where(command_id: @cmd.id).destroy_all
96
+ add_bytes
97
+ @parent.feed_cmd_array
98
+ close
99
+ end
100
+ rescue Exception => msg
101
+ ErrorMsg.new.unknown(msg)
102
+ end
103
+
104
+ def add_bytes
105
+ @view.tbl_bytes.sortItems(0, Qt::AscendingOrder)
106
+ @view.tbl_bytes.rowCount.times do |i|
107
+ if @bus.name == 'SPI'
108
+ iteration = @view.tbl_bytes.item(i, 2).text
109
+ description = @view.tbl_bytes.item(i, 3).text
110
+ else
111
+ iteration = nil
112
+ description = @view.tbl_bytes.item(i, 2).text
113
+ end
114
+ byte = Byte.create(
115
+ index: i.next,
116
+ value: @view.tbl_bytes.item(i, 1).text,
117
+ iteration: iteration,
118
+ description: description,
119
+ command_id: @cmd.id
120
+ )
121
+ return false if check_for_errors(byte)
122
+ end
123
+ Qt::MessageBox.new(
124
+ Qt::MessageBox::Information,
125
+ 'Command status',
126
+ 'Command saved'
127
+ ).exec
128
+ rescue Exception => msg
129
+ ErrorMsg.new.unknown(msg)
68
130
  end
69
131
 
70
132
  def check_cell_content(item)
71
- case @cmd_editor_gui.tbl_bytes.horizontalHeaderItem(item.column).text
133
+ case @view.tbl_bytes.horizontalHeaderItem(item.column).text
72
134
  when 'Order', 'Repetition'
73
135
  if item.text.to_i < 0
74
136
  item.setData(0, Qt::Variant.new(0))
75
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Wrong data', 'Only positive values are accepted in this cell').exec
137
+ ErrorMsg.new.positive_cell_value
76
138
  end
77
139
  when 'Byte (Hexa)'
78
140
  reg = Qt::RegExp.new("^[A-Fa-f0-9]{2}")
79
141
  reg_val = Qt::RegExpValidator.new(reg, self)
80
142
  if reg_val.validate(item.text, item.text.length) == 0
81
143
  item.setText('')
82
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Wrong data', 'Only hexadecimal values are accepted in this cell').exec
144
+ ErrorMsg.new.hexa_cell_value
83
145
  end
84
146
  when 'Description'
85
147
  unless item.text.nil?
@@ -87,174 +149,60 @@ class Command_editor < Qt::Widget
87
149
  reg_val = Qt::RegExpValidator.new(reg, self)
88
150
  if reg_val.validate(item.text, item.text.length) == 0
89
151
  item.setText('')
90
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Wrong data', 'Wrong characters in this cell').exec
152
+ ErrorMsg.new.char_cell_value
91
153
  end
92
154
  end
93
155
  end
94
156
  rescue Exception => msg
95
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while verifying the command byte column. Consult the logs for more details').exec
96
- logger = Logger.new($logFilePath)
97
- logger.error msg
157
+ ErrorMsg.new.unknown(msg)
98
158
  end
99
159
 
100
160
  def is_cmd_size_valid?
101
- # SPI
102
- if @bus.bus_name == 'SPI'
103
- if (@cmd_editor_gui.tbl_bytes.rowCount + @cmd_table.count_total_repetition) > 4000
104
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'SPI command invalid', 'SPI command size is to big (> 4000)').exec
105
- return false
106
- else
107
- return true
108
- end
109
- # I2C
110
- elsif @bus.bus_name == 'I2C'
111
- count = 0
112
- i = 0
113
- while i <= (@cmd_editor_gui.tbl_bytes.rowCount) - 1 do
114
- if @cmd_editor_gui.tbl_bytes.item(i, 1).nil?
115
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or payload size (low) missing').exec
116
- return false
117
- else
118
- lowByte = @cmd_editor_gui.tbl_bytes.item(i, 1).text
119
- end
120
- if @cmd_editor_gui.tbl_bytes.item(i + 1, 1).nil?
121
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or payload size (high) missing').exec
122
- return false
123
- else
124
- highByte = @cmd_editor_gui.tbl_bytes.item(i + 1, 1).text
125
- end
126
- if @cmd_editor_gui.tbl_bytes.item(i + 2, 1).nil?
127
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or Read / Write address missing').exec
128
- return false
129
- else
130
- commandType = @cmd_editor_gui.tbl_bytes.item(i + 2, 1).text
131
- end
132
- count = count + (HardsploitAPI.BytesToInt(lowByte.to_i(16), highByte.to_i(16)))
133
- if commandType.to_i(16) % 2 == 0 #WRITE
134
- i = (i + ((HardsploitAPI.BytesToInt(lowByte.to_i(16), highByte.to_i(16))) + 3))
135
- else #READ
136
- i = (i + 3)
137
- end
138
- end
139
- if i != @cmd_editor_gui.tbl_bytes.rowCount
140
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'I2C command incorrectly formated: The payload size does not match with the row number').exec
141
- return false
142
- end
143
- if count > 2000
144
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'I2C command invalid', 'Your payload is too big (> 2000)').exec
145
- return false
146
- else
147
- return true
148
- end
149
- else
150
- return false
151
- end
152
- rescue Exception => msg
153
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while verifying the command size. Consult the logs for more details').exec
154
- logger = Logger.new($logFilePath)
155
- logger.error msg
156
- end
157
-
158
- def feed_i2c_cmd_array(bus_param)
159
- if bus_param[:mode] == 'w'
160
- @cmd_table.i2c_write_cmd(bus_param[:addr], bus_param[:size].to_i)
161
- else
162
- @cmd_table.i2c_read_cmd(bus_param[:addr], bus_param[:size].to_i)
163
- end
164
- end
165
-
166
- def add_cmd
167
- if @cmd_table.empty_data_exist? || is_cmd_size_valid? == false
168
- return false
169
- end
170
- if @cmd_editor_gui.lie_name.text.empty? || @cmd_editor_gui.lie_description.text.empty?
171
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Information missing', 'Name or description empty').exec
172
- return false
173
- end
174
- cmd = Cmd.new
175
- cmd.cmd_name = @cmd_editor_gui.lie_name.text
176
- cmd.cmd_desc = @cmd_editor_gui.lie_description.text
177
- cmd.cmd_bus = @bus_id
178
- cmd.cmd_chip = @chip_id
179
- cmd.save
180
- @cmd_editor_gui.tbl_bytes.sortItems(0, Qt::AscendingOrder)
181
- @cmd_editor_gui.tbl_bytes.rowCount.times do |i|
182
- byte = Byte.new
183
- byte.byte_index = i + 1
184
- byte.byte_value = @cmd_editor_gui.tbl_bytes.item(i, 1).text
185
- if @bus.bus_name == 'SPI'
186
- byte.byte_iteration = @cmd_editor_gui.tbl_bytes.item(i, 2).text
187
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 3).text
188
- else
189
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 2).text
190
- end
191
- byte.byte_cmd = Cmd.ids.last
192
- byte.save
193
- end
194
- @parent.feed_cmd_array
195
- close
196
- rescue Exception => msg
197
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while adding the command. Consult the logs for more details').exec
198
- logger = Logger.new($logFilePath)
199
- logger.error msg
200
- end
201
-
202
- def edit_cmd
203
- if @cmd_table.empty_data_exist? && !is_cmd_size_valid?
204
- return false
205
- end
206
- if @cmd_editor_gui.lie_name.text.empty? || @cmd_editor_gui.lie_description.text.empty?
207
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Information missing', 'Name or description empty').exec
208
- return false
209
- end
210
- cmd = Cmd.find_by(cmd_name: @cmd_name, cmd_chip: @chip_id)
211
- if cmd.cmd_name != @cmd_editor_gui.lie_name.text
212
- cmd.update(cmd_name: @cmd_editor_gui.lie_name.text)
213
- end
214
- if cmd.cmd_desc != @cmd_editor_gui.lie_description.text
215
- cmd.update(cmd_desc: @cmd_editor_gui.lie_description.text)
216
- end
217
- @cmd_editor_gui.tbl_bytes.sortItems(0, Qt::AscendingOrder)
218
- bytes = Byte.where(byte_cmd: cmd.cmd_id)
219
- bytes.destroy_all
220
- @cmd_editor_gui.tbl_bytes.rowCount.times do |i|
221
- byte = Byte.new
222
- byte.byte_index = i + 1
223
- byte.byte_value = @cmd_editor_gui.tbl_bytes.item(i, 1).text
224
- if @bus.bus_name == 'SPI'
225
- byte.byte_iteration = @cmd_editor_gui.tbl_bytes.item(i, 2).text
226
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 3).text
227
- else
228
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 2).text
161
+ byte_table_size = @view.tbl_bytes.rowCount
162
+ case @bus_name
163
+ when 'SPI'
164
+ cmd_size = byte_table_size + @cmd_table.count_total_repetition
165
+ return true if cmd_size < 4000
166
+ return ErrorMsg.new.spi_cmd_too_long
167
+ when 'I2C'
168
+ count = i = 0
169
+ while i <= byte_table_size - 1 do
170
+ low_byte = @view.tbl_bytes.item(i, 1)
171
+ high_byte = @view.tbl_bytes.item(i + 1, 1)
172
+ command_byte = @view.tbl_bytes.item(i + 2, 1)
173
+ return ErrorMsg.new.lowbyte_missing if low_byte.nil?
174
+ return ErrorMsg.new.highbyte_missing if high_byte.nil?
175
+ return ErrorMsg.new.mode_missing if command_byte.nil?
176
+ current_count = HardsploitAPI.BytesToInt(
177
+ lByte: low_byte.text.to_i(16),
178
+ hByte: high_byte.text.to_i(16)
179
+ )
180
+ count += current_count
181
+ (command_type.to_i(16) % 2).zero? ? i += current_count + 3 : i += 3
229
182
  end
230
- byte.byte_cmd = cmd.cmd_id
231
- byte.save
183
+ return ErrorMsg.new.size_neq_row_number unless i == byte_table_size
184
+ return ErrorMsg.new.i2c_cmd_too_long if count > 2000
185
+ return true
232
186
  end
233
- @parent.feed_cmd_array
234
- close
235
187
  rescue Exception => msg
236
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while editing the command. Consult the logs for more details').exec
237
- logger = Logger.new($logFilePath)
238
- logger.error msg
188
+ ErrorMsg.new.unknown(msg)
239
189
  end
240
190
 
241
191
  def feed_editor_form
242
- cmd = Cmd.find_by(cmd_name: @cmd_name)
243
- @cmd_editor_gui.lie_name.setText(@cmd_name)
244
- @cmd_editor_gui.lie_description.setText(cmd.cmd_desc)
245
- @cmd_table.fill_byte_table(cmd.byte)
192
+ cmd = Command.find_by(name: @cmd_name)
193
+ @view.lie_name.setText(@cmd_name)
194
+ @view.lie_description.setText(cmd.description)
195
+ @cmd_table.fill_byte_table(cmd.bytes)
246
196
  rescue Exception => msg
247
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured when loading the command. Consult the logs for more details').exec
248
- logger = Logger.new($logFilePath)
249
- logger.error msg
197
+ ErrorMsg.new.unknown(msg)
250
198
  end
251
199
 
252
200
  def add_row
253
- if @cmd_editor_gui.lie_text_2_bytes.text.empty?
201
+ if @view.lie_text_2_bytes.text.empty?
254
202
  @cmd_table.add_row
255
203
  else
256
- @cmd_table.add_text_rows(@cmd_editor_gui.lie_text_2_bytes.text)
257
- @cmd_editor_gui.lie_text_2_bytes.setText('')
204
+ @cmd_table.add_text_rows(@view.lie_text_2_bytes.text)
205
+ @view.lie_text_2_bytes.setText('')
258
206
  end
259
207
  end
260
208
 
@@ -5,15 +5,12 @@
5
5
  # License URI: http://www.gnu.org/licenses/gpl.txt
6
6
  #===================================================
7
7
 
8
- require_relative '../HardsploitAPI/HardsploitAPI'
9
-
10
8
  class Command_table < Qt::Widget
11
9
 
12
- def initialize(api, cmd_table, bus)
10
+ def initialize(cmd_table, bus)
13
11
  super()
14
12
  @cmd_table = cmd_table
15
13
  @bus = bus
16
- @api = api
17
14
  cmd_table.insertColumn(0)
18
15
  cmd_table.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('Order'))
19
16
  cmd_table.insertColumn(1)
@@ -30,17 +27,17 @@ class Command_table < Qt::Widget
30
27
  def fill_byte_table(byte_list)
31
28
  byte_list.to_enum.with_index(0).each do |b, i|
32
29
  @cmd_table.insertRow(@cmd_table.rowCount)
33
- @cmd_table.setItem(i, 1, Qt::TableWidgetItem.new(b.byte_value))
30
+ @cmd_table.setItem(i, 1, Qt::TableWidgetItem.new(b.value))
34
31
  if @bus == 'SPI'
35
32
  item = Qt::TableWidgetItem.new
36
- item.setData(0, Qt::Variant.new(b.byte_iteration))
33
+ item.setData(0, Qt::Variant.new(b.iteration))
37
34
  @cmd_table.setItem(i, 2, item)
38
- @cmd_table.setItem(i, 3, Qt::TableWidgetItem.new(b.byte_description))
35
+ @cmd_table.setItem(i, 3, Qt::TableWidgetItem.new(b.description))
39
36
  else
40
- @cmd_table.setItem(i, 2, Qt::TableWidgetItem.new(b.byte_description))
37
+ @cmd_table.setItem(i, 2, Qt::TableWidgetItem.new(b.description))
41
38
  end
42
39
  item = Qt::TableWidgetItem.new
43
- item.setData(0, Qt::Variant.new(b.byte_index))
40
+ item.setData(0, Qt::Variant.new(b.index))
44
41
  @cmd_table.setItem(i, 0, item)
45
42
  end
46
43
  end
@@ -62,7 +59,7 @@ class Command_table < Qt::Widget
62
59
  end
63
60
 
64
61
  def add_text_rows(txt)
65
- if txt.ascii_only?
62
+ return ErrorMsg.new.ascii_only unless txt.ascii_only?
66
63
  txt.each_byte do |x|
67
64
  @cmd_table.insertRow(@cmd_table.rowCount)
68
65
  @cmd_table.setItem(@cmd_table.rowCount - 1, 1, Qt::TableWidgetItem.new(x.to_s(16)))
@@ -74,9 +71,6 @@ class Command_table < Qt::Widget
74
71
  item.setData(0, Qt::Variant.new(@cmd_table.rowCount))
75
72
  @cmd_table.setItem(@cmd_table.rowCount - 1, 0, item)
76
73
  end
77
- else
78
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'String error', 'Only ASCII characters can be specified').exec
79
- end
80
74
  end
81
75
 
82
76
  def clone_rows
@@ -102,7 +96,7 @@ class Command_table < Qt::Widget
102
96
  end
103
97
  else
104
98
  unless @cmd_table.item(row, 2).nil?
105
- @cmd_table.setItem(@cmd_table.rowCount - 1, 2, Qt::TableWidgetItem.new(@cmd_table.item(row, 3).text))
99
+ @cmd_table.setItem(@cmd_table.rowCount - 1, 2, Qt::TableWidgetItem.new(@cmd_table.item(row, 2).text))
106
100
  end
107
101
  end
108
102
  unless @cmd_table.item(row, 0).nil?
@@ -129,14 +123,14 @@ class Command_table < Qt::Widget
129
123
  # Byte array size
130
124
  @cmd_table.setRowCount(3)
131
125
  # Size 1
132
- @cmd_table.setItem(0, 1, Qt::TableWidgetItem.new(HardsploitAPI.lowByte(cmd_size).to_s(16).upcase))
126
+ @cmd_table.setItem(0, 1, Qt::TableWidgetItem.new(HardsploitAPI.lowByte(word: cmd_size).to_s(16).upcase))
133
127
  @cmd_table.setItem(0, 2, Qt::TableWidgetItem.new('Payload size - low'))
134
128
  # Index
135
129
  item = Qt::TableWidgetItem.new
136
130
  item.setData(0, Qt::Variant.new(1))
137
131
  @cmd_table.setItem(0, 0, item)
138
132
  # Size 2
139
- @cmd_table.setItem(1, 1, Qt::TableWidgetItem.new(HardsploitAPI.highByte(cmd_size).to_s(16).upcase))
133
+ @cmd_table.setItem(1, 1, Qt::TableWidgetItem.new(HardsploitAPI.highByte(word: cmd_size).to_s(16).upcase))
140
134
  @cmd_table.setItem(1, 2, Qt::TableWidgetItem.new('Payload size - high'))
141
135
  # Index
142
136
  item = Qt::TableWidgetItem.new
@@ -156,7 +150,7 @@ class Command_table < Qt::Widget
156
150
  @cmd_table.setRowCount(3 + cmd_size)
157
151
  # Payload size low
158
152
  # -byte
159
- itemLB1 = Qt::TableWidgetItem.new(HardsploitAPI.lowByte(cmd_size).to_s(16).upcase)
153
+ itemLB1 = Qt::TableWidgetItem.new(HardsploitAPI.lowByte(word: cmd_size).to_s(16).upcase)
160
154
  @cmd_table.setItem(0, 1, itemLB1)
161
155
  # -description
162
156
  itemLB3 = Qt::TableWidgetItem.new('Payload size - low')
@@ -167,7 +161,7 @@ class Command_table < Qt::Widget
167
161
  @cmd_table.setItem(0, 0, itemLB0)
168
162
  # Payload size high
169
163
  # -byte
170
- itemHB1 = Qt::TableWidgetItem.new(HardsploitAPI.highByte(cmd_size).to_s(16).upcase)
164
+ itemHB1 = Qt::TableWidgetItem.new(HardsploitAPI.highByte(word: cmd_size).to_s(16).upcase)
171
165
  @cmd_table.setItem(1, 1, itemHB1)
172
166
  # -description
173
167
  itemHB3 = Qt::TableWidgetItem.new('Payload size - high')
@@ -193,7 +187,7 @@ class Command_table < Qt::Widget
193
187
  @cmd_table.setItem(i, 2, Qt::TableWidgetItem.new('Payload byte'))
194
188
  # Index
195
189
  item = Qt::TableWidgetItem.new
196
- item.setData(0, Qt::Variant.new((i + 1)))
190
+ item.setData(0, Qt::Variant.new(i.next))
197
191
  @cmd_table.setItem(i, 0, item)
198
192
  end
199
193
  end
@@ -205,11 +199,11 @@ class Command_table < Qt::Widget
205
199
  end
206
200
 
207
201
  def count_total_repetition
208
- repetitionValue = 0
202
+ repetition_value = 0
209
203
  @cmd_table.rowCount.times do |i|
210
- repetitionValue += @cmd_table.item(i, 2).text.to_i
204
+ repetition_value += @cmd_table.item(i, 2).text.to_i
211
205
  end
212
- return repetitionValue
206
+ return repetition_value
213
207
  end
214
208
 
215
209
  def empty_data_exist?