hex_file 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aee016538fc7729772c64f95536e22e8a8d89628
4
- data.tar.gz: 772609a03caa2d743c8feff434152919bf0bd3a5
3
+ metadata.gz: f77f0154856077426de2b1aa957d8fa12059bb8c
4
+ data.tar.gz: 7ae2a43b98054b3a4e6ae624dd90eeba2711f971
5
5
  SHA512:
6
- metadata.gz: 55057f303c055979da2ba2373534934e4ff680e9e935fc0b4b791f1339ad23a6884400db9a2e8ada1eeb80f61812c2e37eeedc53e1ad473e91f2636ba563623a
7
- data.tar.gz: 2b0b02349aec901b85a0d48bb31f67c86dd5c4fa2a1ba99240ed81daef1170678f940f3dc84afd844cb40010915d32b345abfb17435473c6b8502d6c93c2d6bb
6
+ metadata.gz: f3a37457b3590074ebb53fce05f518ae68a22ca2231e2a8b3f8b7b9d5f495f9fc4095b369a78a881c02c3b7d2d8ced387628c9295b2f6377850942f04f3ebe12
7
+ data.tar.gz: 1dee9a73afb8285e8f7758aa16a79cdf2fe2f5a76a4cabb63ba17f388b9995d8da0012294585816027d05f427be900f060d682bb36d1661bf6de4bb6fb1f3008
@@ -0,0 +1,3 @@
1
+ Grateful for contributions from
2
+
3
+ Rogier Lodewijks (https://github.com/eflukx)
data/README.md CHANGED
@@ -37,12 +37,21 @@ Or install it yourself as:
37
37
  puts record.type
38
38
  puts record.data
39
39
  puts record.checksum
40
- puts record.ok?
40
+ puts record.ok? # true if checksum correct
41
41
  end
42
42
 
43
+ Also there is a bin script that gives a summary
44
+
45
+ $ hex_file_info myfile.hex
46
+ Format: I32HEX
47
+ Records: 7133
48
+ Binary Size (bytes): 113918
49
+
50
+ Note if you're an rbenv user, don't forget to `rbenv rehash` after installing the gem to make the `hex_file_info` script available.
51
+
43
52
  ## Contributing
44
53
 
45
- 1. Fork it ( https://github.com/seandmccarthy/hex_file/fork )
54
+ 1. Fork it
46
55
  2. Create your feature branch (`git checkout -b my-new-feature`)
47
56
  3. Commit your changes (`git commit -am 'Add some feature'`)
48
57
  4. Push to the branch (`git push origin my-new-feature`)
@@ -3,18 +3,15 @@
3
3
  require 'hex_file'
4
4
  require 'optparse'
5
5
 
6
+ usage = "\nUsage: #{$0} <hexfile.hex>\n\n"
7
+
6
8
  OptionParser.new do |opts|
7
- opts.banner = "Usage: #{$0}"
8
- opts.on_tail("-h", "--help", "Show this message") do
9
- puts "Usage: #{$0}"
10
- exit
11
- end
9
+ opts.banner = usage
12
10
  end.parse!
13
11
 
14
12
  opt = ARGV.pop
15
- if (opt.nil? || opt == '-h' || opt == '--help')
16
- puts "Usage: #{$0} <hexfile.hex>"
17
- puts
13
+ if opt.nil?
14
+ puts usage
18
15
  exit
19
16
  end
20
17
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["sean@clanmccarthy.net"]
11
11
  spec.summary = %q{Parses Intel HEX files and gives metadata about the file and records.}
12
12
  spec.description = %q{Parses Intel HEX files and gives metadata about the file and records.}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/seandmccarthy/hex_file_info"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -1,6 +1,6 @@
1
- require 'hex_file/version'
2
- require 'hex_file/info'
3
- require 'hex_file/record'
1
+ require_relative 'hex_file/version'
2
+ require_relative 'hex_file/info'
3
+ require_relative 'hex_file/record'
4
4
 
5
5
  module HexFile
6
6
  end
@@ -10,6 +10,15 @@ module HexFile
10
10
  @records.each
11
11
  end
12
12
 
13
+ def find_record regex
14
+ regex = Regexp.new(regex, 'i') unless regex.is_a?(Regexp)
15
+ records.find { |rec| rec.data =~ regex }
16
+ end
17
+
18
+ def serialize
19
+ records.map(&:raw).join("\n")
20
+ end
21
+
13
22
  def binary_size
14
23
  records.map { |r| r.data_size }.reduce(:+)
15
24
  end
@@ -24,15 +33,13 @@ module HexFile
24
33
  end
25
34
  end
26
35
 
27
- private
28
-
29
36
  def record_types
30
37
  @record_types ||= records.map { |r| r.type }.uniq
31
38
  end
32
39
 
33
40
  def linear_record_types?(record_types)
34
41
  record_types.include?(Record::EXTENDED_LINEAR_ADDRESS) ||
35
- record_types.include?(Record::START_LINEAR_ADDRESS)
42
+ record_types.include?(Record::START_LINEAR_ADDRESS)
36
43
  end
37
44
 
38
45
  def start_segment_record_type?(record_types)
@@ -1,18 +1,55 @@
1
1
  module HexFile
2
- class InvalidRecord < StandardError; end
2
+ class InvalidRecord < StandardError;
3
+ end
3
4
 
4
5
  class Record
6
+
7
+ class InvalidLength < InvalidRecord
8
+ end
9
+
5
10
  DATA = '00'
6
11
  END_OF_FILE = '01'
7
12
  EXTENDED_SEGMENT_ADDRESS = '02'
8
13
  START_SEGMENT_ADDRESS = '03'
9
14
  EXTENDED_LINEAR_ADDRESS = '04'
10
15
  START_LINEAR_ADDRESS = '05'
11
-
16
+
12
17
  attr_reader :type, :byte_count, :address, :data, :checksum
13
18
 
14
19
  def initialize(record_ascii)
15
- parse(record_ascii)
20
+ fail HexFile::InvalidRecord, 'Missing start code' unless record_ascii.start_with?(':')
21
+ @byte_count = record_ascii[1..2]
22
+ @address = record_ascii[3..6]
23
+ @type = record_ascii[7..8]
24
+ @data = record_ascii[9..-3]
25
+ @checksum = record_ascii[-2..-1]
26
+ end
27
+
28
+ def raw
29
+ ":#{content}#{@checksum}"
30
+ end
31
+
32
+ def content
33
+ "#{@byte_count}#{@address}#{@type}#{@data}"
34
+ end
35
+
36
+ def set_hex_data data
37
+ raise InvalidLength, "Data should be of length #{data_size}!" unless data.length == @data.length
38
+
39
+ @data = data
40
+ update_checksum
41
+ self
42
+ end
43
+
44
+ def set_data data
45
+ data = data.unpack('C*') if data.is_a? String # Assume binary string
46
+ hexdata = data.map{ |d| "%02X" % d }.join
47
+
48
+ set_hex_data hexdata
49
+ end
50
+
51
+ def update_checksum
52
+ @checksum = "%02X" % calculate_checksum
16
53
  end
17
54
 
18
55
  def data_size
@@ -23,24 +60,14 @@ module HexFile
23
60
  @checksum.to_i(16) == calculate_checksum
24
61
  end
25
62
 
26
- private
27
63
 
28
- def parse(record_ascii)
29
- @raw = record_ascii
30
- fail HexFile::InvalidRecord, 'Missing start code' unless @raw.start_with?(':')
31
- @byte_count = record_ascii[1..2]
32
- @address = record_ascii[3..6]
33
- @type = record_ascii[7..8]
34
- @data = record_ascii[9..-3]
35
- @checksum = record_ascii[-2..-1]
64
+ def calculate_checksum record_content = content
65
+ 256 - (record_content
66
+ .scan(/../)
67
+ .map { |x| x.to_i(16) }
68
+ .reduce(:+)
69
+ ) & 0xFF
36
70
  end
37
71
 
38
- def calculate_checksum
39
- 256 -
40
- (@raw[1...-2]
41
- .scan(/../)
42
- .map { |x| x.to_i(16) }
43
- .inject(:+)) & 0xFF
44
- end
45
72
  end
46
73
  end
@@ -1,3 +1,3 @@
1
1
  module HexFile
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hex_file
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean McCarthy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-19 00:00:00.000000000 Z
11
+ date: 2018-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  description: Parses Intel HEX files and gives metadata about the file and records.
@@ -47,7 +47,8 @@ executables:
47
47
  extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
- - .gitignore
50
+ - ".gitignore"
51
+ - CONTRIBUTORS.txt
51
52
  - Gemfile
52
53
  - LICENSE.txt
53
54
  - README.md
@@ -62,7 +63,7 @@ files:
62
63
  - lib/hex_file/version.rb
63
64
  - test/test_info.rb
64
65
  - test/test_record.rb
65
- homepage: ''
66
+ homepage: https://github.com/seandmccarthy/hex_file_info
66
67
  licenses:
67
68
  - MIT
68
69
  metadata: {}
@@ -72,17 +73,17 @@ require_paths:
72
73
  - lib
73
74
  required_ruby_version: !ruby/object:Gem::Requirement
74
75
  requirements:
75
- - - '>='
76
+ - - ">="
76
77
  - !ruby/object:Gem::Version
77
78
  version: '0'
78
79
  required_rubygems_version: !ruby/object:Gem::Requirement
79
80
  requirements:
80
- - - '>='
81
+ - - ">="
81
82
  - !ruby/object:Gem::Version
82
83
  version: '0'
83
84
  requirements: []
84
85
  rubyforge_project:
85
- rubygems_version: 2.0.14
86
+ rubygems_version: 2.5.2.2
86
87
  signing_key:
87
88
  specification_version: 4
88
89
  summary: Parses Intel HEX files and gives metadata about the file and records.