class HexFile::Record
Constants
- DATA
- END_OF_FILE
- EXTENDED_LINEAR_ADDRESS
- EXTENDED_SEGMENT_ADDRESS
- START_LINEAR_ADDRESS
- START_SEGMENT_ADDRESS
Attributes
address[R]
byte_count[R]
checksum[R]
data[R]
type[R]
Public Class Methods
new(record_ascii)
click to toggle source
# File lib/hex_file/record.rb, line 19 def initialize(record_ascii) fail HexFile::InvalidRecord, 'Missing start code' unless record_ascii.start_with?(':') @byte_count = record_ascii[1..2] @address = record_ascii[3..6] @type = record_ascii[7..8] @data = record_ascii[9..-3] @checksum = record_ascii[-2..-1] end
Public Instance Methods
calculate_checksum(record_content = content)
click to toggle source
# File lib/hex_file/record.rb, line 64 def calculate_checksum record_content = content 256 - (record_content .scan(/../) .map { |x| x.to_i(16) } .reduce(:+) ) & 0xFF end
content()
click to toggle source
# File lib/hex_file/record.rb, line 32 def content "#{@byte_count}#{@address}#{@type}#{@data}" end
data_size()
click to toggle source
# File lib/hex_file/record.rb, line 55 def data_size @byte_count.to_i(16) end
ok?()
click to toggle source
# File lib/hex_file/record.rb, line 59 def ok? @checksum.to_i(16) == calculate_checksum end
raw()
click to toggle source
# File lib/hex_file/record.rb, line 28 def raw ":#{content}#{@checksum}" end
set_data(data)
click to toggle source
# File lib/hex_file/record.rb, line 44 def set_data data data = data.unpack('C*') if data.is_a? String # Assume binary string hexdata = data.map{ |d| "%02X" % d }.join set_hex_data hexdata end
set_hex_data(data)
click to toggle source
# File lib/hex_file/record.rb, line 36 def set_hex_data data raise InvalidLength, "Data should be of length #{data_size}!" unless data.length == @data.length @data = data update_checksum self end
update_checksum()
click to toggle source
# File lib/hex_file/record.rb, line 51 def update_checksum @checksum = "%02X" % calculate_checksum end