Class: I2c_settings

Inherits:
Qt::Widget
  • Object
show all
Defined in:
lib/class/I2C/I2c_settings.rb

Instance Method Summary collapse

Constructor Details

#initialize(chip) ⇒ I2c_settings

Returns a new instance of I2c_settings.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/class/I2C/I2c_settings.rb', line 13

def initialize(chip)
  super()
  @view = Ui_I2c_settings.new
  centerWindow(self)
  @view.setupUi(self)
  @view.lbl_chip.setText(chip.reference)
  inputRestrict(@view.lie_total_size,         0)
  inputRestrict(@view.lie_page_size,          0)
  inputRestrict(@view.lie_write_page_latency, 0)
  inputRestrict(@view.lie_address_r,          3)
  inputRestrict(@view.lie_address_w,          3)
  @view.tbl_bus_scan.resizeColumnsToContents
  @view.tbl_bus_scan.resizeRowsToContents
  @view.tbl_bus_scan.horizontalHeader.stretchLastSection = true
  @chip = chip
  feed_settings_form unless @chip.i2c_setting.nil?
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end

Instance Method Details

#bus_scanObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/class/I2C/I2c_settings.rb', line 90

def bus_scan
  @view.tbl_bus_scan.setRowCount(0)
  Firmware.new('I2C')
  speed = 0
  if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
    speed = 0 if @chip.i2c_setting.frequency == 100
    speed = 1 if @chip.i2c_setting.frequency == 400
    speed = 2 if @chip.i2c_setting.frequency == 1000
    speed = 3 if @chip.i2c_setting.frequency == 40
  end
  i2c = HardsploitAPI_I2C.new(speed: speed)
  scan_result = i2c.i2c_Scan
  if scan_result.include?(1)
    scan_result.each_with_index do |v, i|
      if v == 1
        @view.tbl_bus_scan.insertRow(@view.tbl_bus_scan.rowCount)
        @view.tbl_bus_scan.setItem(
          @view.tbl_bus_scan.rowCount - 1,
          0,
          Qt::TableWidgetItem.new("0x#{i.to_s(16).upcase}")
        )
        if i % 2 == 0
          @view.tbl_bus_scan.setItem(
            @view.tbl_bus_scan.rowCount - 1,
            1,
            Qt::TableWidgetItem.new('Write')
          )
        else
          @view.tbl_bus_scan.setItem(
            @view.tbl_bus_scan.rowCount - 1,
            1,
            Qt::TableWidgetItem.new('Read')
          )
        end
      end
    end
    @view.tbl_bus_scan.resizeColumnsToContents
    @view.tbl_bus_scan.resizeRowsToContents
    @view.tbl_bus_scan.horizontalHeader.stretchLastSection = true
    Qt::MessageBox.new(
      Qt::MessageBox::Information,
      "Bus Scan",
      "Bus scan ended correctly: #{@view.tbl_bus_scan.rowCount} address(es) found"
    ).exec
  else
    Qt::MessageBox.new(
      Qt::MessageBox::Information,
      "Bus addresses",
      "No valid addresses have been returned by the scan"
    ).exec
  end
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
  ErrorMsg.new.hardsploit_not_found
rescue HardsploitAPI::ERROR::USB_ERROR
  ErrorMsg.new.usb_error
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end

#createObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/class/I2C/I2c_settings.rb', line 47

def create
  chip_setting = I2cSetting.create(
    address_w:          @view.lie_address_w.text,
    address_r:          @view.lie_address_r.text,
    frequency:          @view.cbx_frequency.currentText.to_i,
    write_page_latency: @view.lie_write_page_latency.text,
    page_size:          @view.lie_page_size.text,
    total_size:         @view.lie_total_size.text,
    chip_id:            @chip.id
  )
  unless check_for_errors(chip_setting)
    Qt::MessageBox.new(
      Qt::MessageBox::Information,
      'Succes',
      'I2C settings saved'
    ).exec
    close
  end
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end

#feed_settings_formObject



38
39
40
41
42
43
44
45
# File 'lib/class/I2C/I2c_settings.rb', line 38

def feed_settings_form
  @view.lie_address_w.setText(@chip.i2c_setting.address_w)
  @view.lie_address_r.setText(@chip.i2c_setting.address_r)
  @view.cbx_frequency.setCurrentIndex(@view.cbx_frequency.findText(@chip.i2c_setting.frequency.to_s))
  @view.lie_write_page_latency.setText(@chip.i2c_setting.write_page_latency.to_s)
  @view.lie_page_size.setText(@chip.i2c_setting.page_size.to_s)
  @view.lie_total_size.setText(@chip.i2c_setting.total_size.to_s)
end

#save_settingsObject



33
34
35
36
# File 'lib/class/I2C/I2c_settings.rb', line 33

def save_settings
  @chip.i2c_setting.nil? ? create : update
  @chip.reload
end

#updateObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/class/I2C/I2c_settings.rb', line 69

def update
  @chip.i2c_setting.update(
    address_w:          @view.lie_address_w.text,
    address_r:          @view.lie_address_r.text,
    frequency:          @view.cbx_frequency.currentText.to_i,
    write_page_latency: @view.lie_write_page_latency.text,
    page_size:          @view.lie_page_size.text,
    total_size:         @view.lie_total_size.text
  )
  unless check_for_errors(@chip.i2c_setting)
    Qt::MessageBox.new(
      Qt::MessageBox::Information,
      'Succes',
      'I2C settings updated'
    ).exec
    close
  end
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end