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,96 @@
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 'Qt4'
9
+ require 'sqlite3'
10
+ require 'active_record'
11
+ require_relative 'db/database.rb'
12
+ require_relative 'gui/gui_chip_management'
13
+ require_relative 'class/Chip_management'
14
+ require_relative 'HardsploitAPI/Core/HardsploitAPI'
15
+ require_relative 'Firmwares/UC/VersionUC'
16
+ require_relative 'Firmwares/FPGA/VersionFPGA'
17
+ include VersionFPGA::VERSION_FPGA
18
+ include VersionUC::VERSION_UC
19
+
20
+ class Hardsploit_gui
21
+ VERSION = "2.3"
22
+ def initialize
23
+ HardsploitAPI.callbackInfo = method(:callbackInfo)
24
+ HardsploitAPI.callbackData = method(:callbackData)
25
+ HardsploitAPI.callbackSpeedOfTransfert = method(:callbackSpeedOfTransfert)
26
+ HardsploitAPI.callbackProgress = method(:callbackProgress)
27
+ $file = nil
28
+ $currentFirmware = nil
29
+ $logFilePath = File.expand_path(File.dirname(__FILE__)) + "/logs/error.log"
30
+ $dbFilePath = File.expand_path(File.dirname(__FILE__)) + "/db/hs.db"
31
+ # Launch GUI
32
+ Qt::Application.new(ARGV) do
33
+ $app = self
34
+ w = Chip_management.new(VERSION)
35
+ centerWindow(w)
36
+ w.show
37
+ exec
38
+ end
39
+ end
40
+
41
+ def callbackInfo(receiveData)
42
+ print receiveData + "\n"
43
+ end
44
+
45
+ def callbackProgress(percent:, startTime:, endTime:)
46
+ print "\r\e[#{31}mIn progress : #{percent}%\e[0m"
47
+ $pgb.update_value(percent) unless $pgb.nil?
48
+ if percent == 100
49
+ duration = (endTime-startTime).round(2)
50
+ $pgb.display_time("Total duration: #{duration} second(s)")
51
+ end
52
+ $app.processEvents
53
+ end
54
+
55
+ def callbackSpeedOfTransfert(receiveData)
56
+ #puts receiveData
57
+ end
58
+
59
+ def callbackData(receiveData)
60
+ $file.write(receiveData.pack('C*'))
61
+ end
62
+
63
+ def check_ReceivedData
64
+ result = HardsploitAPI.receiveDATA(2000)
65
+ end
66
+ end
67
+
68
+ def check_for_errors(result)
69
+ return false if result.errors.messages.empty?
70
+ error_message = ""
71
+ result.errors.messages.each do |msg|
72
+ error_message << "Error: #{msg[0]} #{msg[1][0]}\n"
73
+ end
74
+ Qt::MessageBox.new(Qt::MessageBox::Warning, 'Warning', error_message).exec
75
+ return true
76
+ end
77
+
78
+ def inputRestrict(lineEdit, type)
79
+ case type
80
+ when 0 ; reg = Qt::RegExp.new("[0-9]+")
81
+ when 1 ; reg = Qt::RegExp.new("^[a-zA-Z_@-]+( [a-zA-Z_@-]+)*$")
82
+ when 2 ; reg = Qt::RegExp.new("^[a-zA-Z0-9_@-]+( [a-zA-Z0-9_@-]+)*$")
83
+ when 3 ; reg = Qt::RegExp.new("^[A-Fa-f0-9]{2}")
84
+ when 4 ; reg = Qt::RegExp.new("^[A-Fa-f0-9]{8}")
85
+ end
86
+ regVal = Qt::RegExpValidator.new(reg, self)
87
+ lineEdit.setValidator(regVal)
88
+ end
89
+
90
+ def centerWindow(win)
91
+ desktop = Qt::DesktopWidget.new
92
+ rect = desktop.screenGeometry(desktop.primaryScreen)
93
+ centerX = (rect.width - win.width ) / 2
94
+ centerY = (rect.height - win.height) / 2
95
+ win.move(centerX,centerY)
96
+ end
@@ -18,431 +18,287 @@ class Chip_editor < Qt::Widget
18
18
 
19
19
  def initialize(parent, chip, action)
20
20
  super()
21
- @gui_chip_editor = Ui_Chip_editor.new
21
+ @view = Ui_Chip_editor.new
22
22
  centerWindow(self)
23
- @gui_chip_editor.setupUi(self)
23
+ @view.setupUi(self)
24
24
  @parent = parent
25
25
  @chip = chip
26
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)
27
+ inputRestrict(@view.lie_pack_name, 2)
28
+ inputRestrict(@view.lie_pack_pin, 0)
29
+ inputRestrict(@view.lie_manu_name, 2)
30
+ inputRestrict(@view.lie_type_name, 2)
31
+ inputRestrict(@view.lie_reference, 2)
32
+ inputRestrict(@view.lie_description, 2)
33
33
 
34
34
  # Combobox
35
- # Package
36
- package = Package.all
37
- package.each do |p|
38
- @gui_chip_editor.cbx_package.addItem(p.package_name)
35
+ Package.all.each do |p|
36
+ @view.cbx_package.addItem(p.name)
39
37
  end
40
- # Manufacturer
41
- manufacturer = Manufacturer.all
42
- manufacturer.each do |p|
43
- @gui_chip_editor.cbx_manufacturer.addItem(p.manufacturer_name)
38
+ Manufacturer.all.each do |m|
39
+ @view.cbx_manufacturer.addItem(m.name)
44
40
  end
45
- # Type
46
- c_type = CType.all
47
- c_type.each do |p|
48
- @gui_chip_editor.cbx_type.addItem(p.cType_name)
41
+ ChipType.all.each do |c|
42
+ @view.cbx_type.addItem(c.name)
49
43
  end
50
44
 
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
45
+ unless action == 'new'
46
+ package_name = chip.package.name
47
+ manufacturer_name = chip.manufacturer.name
48
+ chip_type_name = chip.chip_type.name
49
+ @view.cbx_package.setCurrentIndex(@view.cbx_package.findText(package_name))
50
+ @view.lie_pack_name.setText(package_name)
51
+ @view.lie_pack_name.setEnabled(false)
52
+ @view.cbx_manufacturer.setCurrentIndex(@view.cbx_manufacturer.findText(manufacturer_name))
53
+ @view.lie_manu_name.setText(manufacturer_name)
54
+ @view.lie_manu_name.setEnabled(false)
55
+ @view.cbx_type.setCurrentIndex(@view.cbx_type.findText(chip_type_name))
56
+ @view.lie_type_name.setText(chip_type_name)
57
+ @view.lie_type_name.setEnabled(false)
58
+ @view.rbn_rectangular.setEnabled(false)
59
+ @view.rbn_square.setEnabled(false)
60
+ chip.voltage.zero? ? @view.rbn_5v.setChecked(true) : @view.rbn_3v.setChecked(true)
61
+ chip.package.shape.zero? ? @view.rbn_square.setChecked(true) : @view.rbn_rectangular.setChecked(true)
62
+ @view.lie_reference.setText(@chip.reference) if action == 'edit'
88
63
  fill_pin_table('edit')
89
- # Misc tab
90
- @gui_chip_editor.lie_description.setText(@chip.chip_detail)
64
+ @view.lie_description.setText(@chip.description)
91
65
  end
92
66
 
93
67
  # Array struct
94
- @gui_chip_editor.tbl_pins.horizontalHeader.stretchLastSection = true
95
- @gui_chip_editor.tbl_pins.verticalHeader.setVisible(false)
68
+ @view.tbl_pins.horizontalHeader.stretchLastSection = true
69
+ @view.tbl_pins.verticalHeader.setVisible(false)
96
70
 
97
71
  # Button text
98
72
  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()'))
73
+ @view.btn_add.setText('Edit')
74
+ Qt::Object.connect(@view.btn_add, SIGNAL('clicked()'), self, SLOT('edit_chip()'))
101
75
  else
102
- @gui_chip_editor.btn_add.setText('Add')
103
- Qt::Object.connect(@gui_chip_editor.btn_add, SIGNAL('clicked()'), self, SLOT('add_chip()'))
76
+ @view.btn_add.setText('Add')
77
+ Qt::Object.connect(@view.btn_add, SIGNAL('clicked()'), self, SLOT('add_chip()'))
104
78
  end
105
79
  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
80
+ ErrorMsg.new.unknown(msg)
109
81
  end
110
82
 
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
83
+ def closeEvent(event)
84
+ unless @chip == 'none' || Chip.exists?(@chip.id)
85
+ @parent.instance_variable_get('@view').tw_chip.clear
137
86
  end
138
87
  end
139
88
 
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
89
+ def prepare_rq
214
90
  # Manufacturer
215
- manu = Manufacturer.find_or_create_by(manufacturer_name: @gui_chip_editor.lie_manu_name.text)
216
- chip.chip_manufacturer = manu.manufacturer_id
91
+ @manufacturer = Manufacturer.find_or_create_by(name: @view.lie_manu_name.text)
92
+ return false if check_for_errors(@manufacturer)
217
93
  # 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
94
+ @view.rbn_square.checked ? @shape = 0 : @shape = 1
95
+ @package = Package.find_or_create_by(
96
+ name: @view.lie_pack_name.text,
97
+ pin_number: @view.lie_pack_pin.text,
98
+ shape: @shape
99
+ )
100
+ return false if check_for_errors(@package)
233
101
  # Type
234
- ctype = CType.find_or_create_by(cType_name: @gui_chip_editor.lie_type_name.text)
235
- chip.chip_type = ctype.cType_id
102
+ @chip_type = ChipType.find_or_create_by(name: @view.lie_type_name.text)
103
+ return false if check_for_errors(@chip_type)
236
104
  # 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
105
+ @view.rbn_3v.checked? ? @voltage = 1 : @voltage = 0
106
+ return true
107
+ end
108
+
109
+ def add_chip
110
+ if prepare_rq
111
+ @chip = Chip.create(
112
+ reference: @view.lie_reference.text,
113
+ description: @view.lie_description.text,
114
+ voltage: @voltage,
115
+ manufacturer_id: @manufacturer.id,
116
+ package_id: @package.id,
117
+ chip_type_id: @chip_type.id
260
118
  )
119
+ unless check_for_errors(@chip)
120
+ add_pins
121
+ end
261
122
  end
262
- # Reloading array
263
- @parent.feed_chip_array
264
- close
265
123
  end
266
124
 
267
- # Edit the chip
268
125
  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)
126
+ if prepare_rq
127
+ @chip.update(
128
+ reference: @view.lie_reference.text,
129
+ description: @view.lie_description.text,
130
+ voltage: @voltage,
131
+ manufacturer_id: @manufacturer.id,
132
+ package_id: @package.id,
133
+ chip_type_id: @chip_type.id
134
+ )
135
+ unless check_for_errors(@chip)
136
+ @chip.pins.reload.destroy_all
137
+ add_pins
138
+ end
312
139
  end
140
+ rescue Exception => msg
141
+ ErrorMsg.new.unknown(msg)
142
+ end
313
143
 
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)
144
+ def add_pins
145
+ for i in 0..(@view.lie_pack_pin.text.to_i) - 1 do
146
+ pin_num = @view.tbl_pins.item(i, 0)
147
+ pin_signal = @view.tbl_pins.cellWidget(i, 2)
148
+ pin_bus = @view.tbl_pins.cellWidget(i, 1)
320
149
  if pin_bus.currentIndex == 0
321
- signal = 62
150
+ signal = 1
322
151
  else
323
- signal = Signall.find_by(signal_name: pin_signal.currentText).signal_id
152
+ signal = Signall.find_by(name: pin_signal.currentText).id
324
153
  end
325
- Pin.create(
326
- pin_number: pin_num.text.to_i,
327
- pin_chip: @chip.chip_id,
328
- pin_signal: signal
154
+ pin = Pin.create(
155
+ number: pin_num.text.to_i,
156
+ chip_id: @chip.id,
157
+ signal_id: signal
329
158
  )
159
+ check_for_errors(pin)
330
160
  end
331
- # Reloading array
332
161
  @parent.feed_chip_array
333
162
  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
163
  end
339
164
 
340
165
  # Package combobox
341
166
  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)
167
+ unless @view.cbx_package.currentIndex.zero?
168
+ selected_package = Package.find_by(name: @view.cbx_package.currentText)
169
+ @view.lie_pack_name.setEnabled(false)
170
+ @view.lie_pack_name.setText(selected_package.name)
171
+ @view.lie_pack_pin.setEnabled(false)
172
+ @view.lie_pack_pin.setText(selected_package.pin_number.to_s)
173
+ @view.rbn_square.setEnabled(false)
174
+ @view.rbn_rectangular.setEnabled(false)
175
+ if selected_package.shape.zero?
176
+ @view.rbn_square.setChecked(true)
352
177
  else
353
- @gui_chip_editor.rbn_rectangular.setChecked(true)
178
+ @view.rbn_rectangular.setChecked(true)
354
179
  end
355
180
  fill_pin_table
356
181
  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)
182
+ @view.lie_pack_name.setEnabled(true)
183
+ @view.lie_pack_name.clear
184
+ @view.lie_pack_pin.setEnabled(true)
185
+ @view.lie_pack_pin.clear
186
+ @view.rbn_square.setChecked(true)
187
+ @view.rbn_rectangular.setEnabled(true)
188
+ @view.rbn_square.setEnabled(true)
189
+ @view.tbl_pins.clear
190
+ @view.tbl_pins.setRowCount(0)
366
191
  end
367
192
  end
368
193
 
369
194
  # Manufacturer combobox
370
195
  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)
196
+ unless @view.cbx_manufacturer.currentIndex.zero?
197
+ @view.lie_manu_name.setEnabled(false)
198
+ @view.lie_manu_name.setText(@view.cbx_manufacturer.currentText)
374
199
  else
375
- @gui_chip_editor.lie_manu_name.setEnabled(true)
376
- @gui_chip_editor.lie_manu_name.setText('')
200
+ @view.lie_manu_name.setEnabled(true)
201
+ @view.lie_manu_name.setText('')
377
202
  end
378
203
  end
379
204
 
380
205
  # Type combobox
381
206
  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)
207
+ unless @view.cbx_type.currentIndex.zero?
208
+ @view.lie_type_name.setEnabled(false)
209
+ @view.lie_type_name.setText(@view.cbx_type.currentText)
385
210
  else
386
- @gui_chip_editor.lie_type_name.setEnabled(true)
387
- @gui_chip_editor.lie_type_name.setText('')
211
+ @view.lie_type_name.setEnabled(true)
212
+ @view.lie_type_name.setText('')
388
213
  end
389
214
  end
390
215
 
391
216
  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|
217
+ if @view.lie_pack_pin.text.to_i <= 144 && @view.lie_pack_pin.text.to_i >= 4
218
+ @view.tbl_pins.setRowCount(@view.lie_pack_pin.text.to_i)
219
+ full_bus_list = Bus.all
220
+ @view.lie_pack_pin.text.to_i.times do |i|
395
221
  cbx_bus = Qt::ComboBox.new
396
222
  row = Qt::Variant.new(i)
397
223
  cbx_bus.setProperty('row', row)
398
- @gui_chip_editor.tbl_pins.setCellWidget(i, 1, cbx_bus)
224
+ @view.tbl_pins.setCellWidget(i, 1, cbx_bus)
399
225
  cbx_signal = Qt::ComboBox.new
400
- @gui_chip_editor.tbl_pins.setCellWidget(i, 2, cbx_signal)
226
+ @view.tbl_pins.setCellWidget(i, 2, cbx_signal)
401
227
  item = Qt::TableWidgetItem.new
402
228
  item.setFlags(Qt::ItemIsEnabled)
403
229
  item.setData(0, Qt::Variant.new(i.next))
404
- @gui_chip_editor.tbl_pins.setItem(i, 0, item)
230
+ @view.tbl_pins.setItem(i, 0, item)
405
231
  cbx_bus.addItem('Bus...')
406
- @bus_list.each do |b|
407
- cbx_bus.addItem(b.bus_name)
232
+ full_bus_list.each do |b|
233
+ cbx_bus.addItem(b.name)
408
234
  end
409
235
  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)
236
+ pin = Pin.find_by(number: i.next, chip_id: @chip.id)
237
+ unless pin.signal_id == 1
238
+ current_bus = pin.signall.buses
239
+ cbx_bus.setCurrentIndex(cbx_bus.findText(current_bus[0].name))
240
+ current_signals = current_bus[0].signalls
241
+ current_signals.each do |s|
242
+ cbx_signal.addItem(s.name)
243
+ end
244
+ cbx_signal.setCurrentIndex(cbx_signal.findText(pin.signall.name))
415
245
  end
416
- cbx_signal.setCurrentIndex(cbx_signal.findText(pin.signall.signal_name))
417
246
  end
418
247
  Qt::Object.connect(cbx_bus, SIGNAL('currentIndexChanged(int)'), self, SLOT('filter_cbx()'))
419
248
  end
420
249
  else
421
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Invalid pin number value', 'Pin number needs to be between 4 and 144').exec
250
+ ErrorMsg.new.invalid_pin_nbr
251
+ end
252
+ rescue Exception => msg
253
+ ErrorMsg.new.unknown(msg)
254
+ end
255
+
256
+ def delete_cbx_element
257
+ msg = Qt::MessageBox.new
258
+ msg.setWindowTitle('Delete element')
259
+ msg.setText('Chips and commands associated with it will be deleted too.')
260
+ msg.setIcon(Qt::MessageBox::Warning)
261
+ msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
262
+ msg.setDefaultButton(Qt::MessageBox::Cancel)
263
+ if msg.exec == Qt::MessageBox::Ok
264
+ case sender.objectName
265
+ when 'btn_delete_package'
266
+ return false if @view.cbx_package.currentIndex == 0
267
+ Package.find_by(name: @view.cbx_package.currentText).destroy
268
+ @view.cbx_package.removeItem(@view.cbx_package.currentIndex)
269
+ @view.cbx_package.setCurrentIndex(0)
270
+ when 'btn_delete_manufacturer'
271
+ return false if @view.cbx_manufacturer.currentIndex == 0
272
+ Manufacturer.find_by(name: @view.cbx_manufacturer.currentText).destroy
273
+ @view.cbx_manufacturer.removeItem(@view.cbx_manufacturer.currentIndex)
274
+ @view.cbx_manufacturer.setCurrentIndex(0)
275
+ when 'btn_delete_type'
276
+ return false if @view.cbx_type.currentIndex == 0
277
+ ChipType.find_by(name: @view.cbx_type.currentText).destroy
278
+ @view.cbx_type.removeItem(@view.cbx_type.currentIndex)
279
+ @view.cbx_type.setCurrentIndex(0)
280
+ end
281
+ @parent.feed_chip_array
422
282
  end
423
283
  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
284
+ ErrorMsg.new.unknown(msg)
427
285
  end
428
286
 
429
287
  # Filter signals by bus
430
288
  def filter_cbx
431
289
  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)
290
+ busItem = @view.tbl_pins.cellWidget(bus_item_row, 1)
291
+ associated_signal_item = @view.tbl_pins.cellWidget(bus_item_row, 2)
434
292
  associated_signal_item.clear
435
293
  if busItem.currentText != 'Bus...'
436
- bus = Bus.find_by(bus_name: busItem.currentText).bus_id
294
+ bus = Bus.find_by(name: busItem.currentText).id
437
295
  filtered_signal_list = Use.where(bus_id: bus)
438
296
  filtered_signal_list.each do |s|
439
- signalName = Signall.find_by(signal_id: s.signal_id).signal_name
440
- associated_signal_item.addItem(signalName)
297
+ signal_name = Signall.find_by(id: s.signal_id).name
298
+ associated_signal_item.addItem(signal_name)
441
299
  end
442
300
  end
443
301
  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
302
+ ErrorMsg.new.unknown(msg)
447
303
  end
448
304
  end