class GdbFlasher::IHex
Attributes
segments[RW]
Public Class Methods
load(stream)
click to toggle source
# File lib/gdbflasher/ihex.rb, line 117 def self.load(stream) high_address = 0 lines = {} stream.each_line do |line| line.rstrip! record = Record.parse line case record.type when :eof break when :extended_address high_address, = record.data.unpack "n" when :data lines[(high_address << 16) | record.address] = record.data end end segment = nil ihex = self.new lines.sort_by { |k1,v1,k2,b2| k1 <=> k2 }.each do |address, data| if segment.nil? || segment.base + segment.size != address segment = Segment.new segment.base = address segment.data = data ihex.segments << segment else segment.data += data end end ihex end
new()
click to toggle source
# File lib/gdbflasher/ihex.rb, line 113 def initialize @segments = [] end
Public Instance Methods
pad_segments!(size, fill_byte = 0x00)
click to toggle source
# File lib/gdbflasher/ihex.rb, line 181 def pad_segments!(size, fill_byte = 0x00) @segments.each do |segment| segment.pad_segment! size, fill_byte end self end
split_segments!(size, fill_byte = 0x00)
click to toggle source
# File lib/gdbflasher/ihex.rb, line 156 def split_segments!(size, fill_byte = 0x00) pad_segments! size, fill_byte i = 0 while i < @segments.length segment = @segments[i] parts = segment.size / size for j in 1...parts do new_segment = Segment.new new_segment.base = segment.base + size * j new_segment.data = segment.data[j * size...(j + 1) * size] @segments.insert i + j, new_segment end segment.data = segment.data[0...size] i += parts end self end