avburn 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +28 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +50 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/bin/avburn +303 -0
- data/bin/flash +511 -0
- data/lib/avburn.rb +119 -0
- data/lib/avburn/fuses.yml +107 -0
- data/spec/avburn_spec.rb +17 -0
- data/spec/spec_helper.rb +12 -0
- metadata +138 -0
data/lib/avburn.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
|
2
|
+
Avrdude = "avrdude"
|
3
|
+
AvrdudeConf = File.open("/etc/avrdude.conf").read
|
4
|
+
Avb = ENV["HOME"] + "/.avb"
|
5
|
+
AvbHex = Avb + ".hex"
|
6
|
+
Conf = {}
|
7
|
+
Fuses = [:hfuse, :lfuse, :efuse]
|
8
|
+
|
9
|
+
Memory = %w{ eeprom flash fuse efuse hfuse lfuse lock signature fuseN application apptable boot prodsig usersig }
|
10
|
+
Format = {
|
11
|
+
:a => "Auto detect",
|
12
|
+
:i => "Intel Hex",
|
13
|
+
:s => "Motorola S-record",
|
14
|
+
:r => "Raw binary",
|
15
|
+
# :m => "Immediate",
|
16
|
+
:d => "Decimal",
|
17
|
+
:h => "Hexadecimal",
|
18
|
+
:o => "Octal",
|
19
|
+
:b => "Binary" } #todo hash
|
20
|
+
|
21
|
+
FuseLabel = YAML.load(File.read(File.dirname(__FILE__) + "/avburn/fuses.yml"))
|
22
|
+
# :attinyx5 => {
|
23
|
+
# :hfuse => %w{RSTDISBL DWEN SPIEN WDTON EESAVE BOOTSZ0 BOOTSZ1 BOOTRST},
|
24
|
+
# :lfuse => %w{CKDIB8 CKOUT SUT1 SUT0 CKSEL0 CKSEL1 CKSEL2 CKSEL3}
|
25
|
+
# },
|
26
|
+
# :atmega328p => {
|
27
|
+
# :hfuse => %w{RSTDISBL DWEN SPIEN WDTON EESAVE BOOTSZ0 BOOTSZ1 BOOTRST},
|
28
|
+
# :lfuse => %w{CKDIB8 CKOUT SUT1 SUT0 CKSEL0 CKSEL1 CKSEL2 CKSEL3}
|
29
|
+
# },
|
30
|
+
# :atmega32 => {
|
31
|
+
# :hfuse => %w{OCDEN JTAGEN SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST},
|
32
|
+
# :lfuse => %w{BODLEVEL BODEN SUT1 SUT0 CKSEL0 CKSEL1 CKSEL2 CKSEL3}
|
33
|
+
# }
|
34
|
+
|
35
|
+
|
36
|
+
# }
|
37
|
+
|
38
|
+
|
39
|
+
module Avburn
|
40
|
+
def avr_bool(bit)
|
41
|
+
bit.to_i.zero?
|
42
|
+
end
|
43
|
+
|
44
|
+
def run_comm(c)
|
45
|
+
@log.text = ""
|
46
|
+
comm = "#{Avrdude} -c #{Conf[:prog]} -p #{Conf[:platform]} "
|
47
|
+
comm << "-P #{Conf[:port]} " if @port
|
48
|
+
comm << "-U #{c}"
|
49
|
+
log "> Running #{comm}"
|
50
|
+
Kernel.system "#{comm} &> output"
|
51
|
+
log File.read("output")
|
52
|
+
end
|
53
|
+
|
54
|
+
class << self
|
55
|
+
|
56
|
+
def read_conf
|
57
|
+
`touch #{Avb}` unless File.exists?(Avb)
|
58
|
+
Conf.merge! YAML.load(File.read(Avb)) || {}
|
59
|
+
end
|
60
|
+
|
61
|
+
def write_conf
|
62
|
+
File.open(Avb, 'w') { |f| f << Conf.to_yaml }
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
class Part
|
71
|
+
def self.all
|
72
|
+
@parts ||= AvrdudeConf.scan(/part\s*\n\s*id\s*=\s*"(\w*)"\s*;/).flatten
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.find(p)
|
76
|
+
puts "search! #{p}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class Hex
|
81
|
+
|
82
|
+
def self.all
|
83
|
+
`mkdir ~/.avb.hex` unless File.exists?(AvbHex)
|
84
|
+
Dir[AvbHex + "/*.hex"].map { |fp| fp.split("/")[-1] }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
class Prog
|
90
|
+
def self.all
|
91
|
+
@progs ||= AvrdudeConf.scan(/programmer\n\s*id\s*=\s*"(\w*)"\s*;/).flatten
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class FuseStore < Hash
|
96
|
+
attr_reader :hfuse, :lfuse, :efuse
|
97
|
+
|
98
|
+
def hfuse
|
99
|
+
[:hfuse]
|
100
|
+
end
|
101
|
+
|
102
|
+
def set(fuse, hex)
|
103
|
+
hex = "0#{hex}" if hex.size == 1
|
104
|
+
hex = hex[0,2]
|
105
|
+
self[fuse.to_sym] = Integer("0x#{hex}").to_s(2).rjust(8, "0").split(//)
|
106
|
+
self["#{fuse}hex"] = hex
|
107
|
+
end
|
108
|
+
|
109
|
+
def set_bit(fuse, bit, bool)
|
110
|
+
self[fuse][bit] = (bool ? "0" : "1")
|
111
|
+
hexval = self[fuse].join.to_i(2).to_s(16).upcase
|
112
|
+
hexval = "0#{hexval}" if hexval.size == 1
|
113
|
+
self["#{fuse}hex"] = hexval
|
114
|
+
hexval
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
Avburn.read_conf
|
@@ -0,0 +1,107 @@
|
|
1
|
+
:attinyx5:
|
2
|
+
:hfuse:
|
3
|
+
- RSTDISBL
|
4
|
+
- DWEN
|
5
|
+
- SPIEN
|
6
|
+
- WDTON
|
7
|
+
- EESAVE
|
8
|
+
- BOOTSZ0
|
9
|
+
- BOOTSZ1
|
10
|
+
- BOOTRST
|
11
|
+
:lfuse:
|
12
|
+
- CKDIB8
|
13
|
+
- CKOUT
|
14
|
+
- SUT1
|
15
|
+
- SUT0
|
16
|
+
- CKSEL0
|
17
|
+
- CKSEL1
|
18
|
+
- CKSEL2
|
19
|
+
- CKSEL3
|
20
|
+
|
21
|
+
:atmega8:
|
22
|
+
:hfuse:
|
23
|
+
- RSTDISBL
|
24
|
+
- WDTON
|
25
|
+
- SPIEN
|
26
|
+
- CKOPT
|
27
|
+
- EESAVE
|
28
|
+
- BOOTSZ1
|
29
|
+
- BOOTSZ0
|
30
|
+
- BOOTRST
|
31
|
+
:lfuse:
|
32
|
+
- BODLEVEL
|
33
|
+
- BODEN
|
34
|
+
- SUT1
|
35
|
+
- SUT0
|
36
|
+
- CKSEL0
|
37
|
+
- CKSEL1
|
38
|
+
- CKSEL2
|
39
|
+
- CKSEL3
|
40
|
+
|
41
|
+
:atmega88:
|
42
|
+
:hfuse:
|
43
|
+
- RSTDISBL
|
44
|
+
- DWEN
|
45
|
+
- SPIEN
|
46
|
+
- WDTON
|
47
|
+
- EESAVE
|
48
|
+
- BODLEVEL0
|
49
|
+
- BODLEVEL1
|
50
|
+
- BODLEVEL2
|
51
|
+
:lfuse:
|
52
|
+
- CKDIV8
|
53
|
+
- CKOUT
|
54
|
+
- SUT1
|
55
|
+
- SUT0
|
56
|
+
- CKSEL0
|
57
|
+
- CKSEL1
|
58
|
+
- CKSEL2
|
59
|
+
- CKSEL3
|
60
|
+
:efuse:
|
61
|
+
- BOOTSZ1
|
62
|
+
- BOOTSZ0
|
63
|
+
- BOOTRST
|
64
|
+
|
65
|
+
:m328p:
|
66
|
+
:hfuse: &328hfuse
|
67
|
+
- RSTDISBL
|
68
|
+
- DWEN
|
69
|
+
- SPIEN
|
70
|
+
- WDTON
|
71
|
+
- EESAVE
|
72
|
+
- BOOTSZ0
|
73
|
+
- BOOTSZ1
|
74
|
+
- BOOTRST
|
75
|
+
:lfuse: &328lfuse
|
76
|
+
- CKDIV8
|
77
|
+
- CKOUT
|
78
|
+
- SUT1
|
79
|
+
- SUT0
|
80
|
+
- CKSEL3
|
81
|
+
- CKSEL2
|
82
|
+
- CKSEL1
|
83
|
+
- CKSEL0
|
84
|
+
:efuse:
|
85
|
+
- BODLEVEL0
|
86
|
+
- BODLEVEL1
|
87
|
+
- BODLEVEL2
|
88
|
+
|
89
|
+
:m32:
|
90
|
+
:hfuse:
|
91
|
+
- OCDEN
|
92
|
+
- JTAGEN
|
93
|
+
- SPIEN
|
94
|
+
- CKOPT
|
95
|
+
- EESAVE
|
96
|
+
- BOOTSZ1
|
97
|
+
- BOOTSZ0
|
98
|
+
- BOOTRST
|
99
|
+
:lfuse:
|
100
|
+
- BODLEVEL
|
101
|
+
- BODEN
|
102
|
+
- SUT1
|
103
|
+
- SUT0
|
104
|
+
- CKSEL3
|
105
|
+
- CKSEL2
|
106
|
+
- CKSEL1
|
107
|
+
- CKSEL0
|
data/spec/avburn_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Avburn" do
|
4
|
+
it "should find programmers" do
|
5
|
+
Prog.all.should_not be_empty
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
describe "FuseStore" do
|
10
|
+
|
11
|
+
it "should behave like hash" do
|
12
|
+
fs = FuseStore.new
|
13
|
+
fs[:foo] = 2
|
14
|
+
fs[:foo].should eql(2)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'avburn'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: avburn
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Marcos Piccinini
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-12-30 00:00:00 -02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
version: 2.3.0
|
32
|
+
type: :development
|
33
|
+
prerelease: false
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: bundler
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 1
|
44
|
+
- 0
|
45
|
+
- 0
|
46
|
+
version: 1.0.0
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: jeweler
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
segments:
|
58
|
+
- 1
|
59
|
+
- 5
|
60
|
+
- 2
|
61
|
+
version: 1.5.2
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: rcov
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: *id004
|
78
|
+
description: Shoes based GUI for AVRDUDE, burn fuses, bootloaders
|
79
|
+
email: x@nofxx.com
|
80
|
+
executables:
|
81
|
+
- avburn
|
82
|
+
- flash
|
83
|
+
extensions: []
|
84
|
+
|
85
|
+
extra_rdoc_files:
|
86
|
+
- LICENSE.txt
|
87
|
+
- README.rdoc
|
88
|
+
files:
|
89
|
+
- .document
|
90
|
+
- .rspec
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- LICENSE.txt
|
94
|
+
- README.rdoc
|
95
|
+
- Rakefile
|
96
|
+
- VERSION
|
97
|
+
- bin/avburn
|
98
|
+
- bin/flash
|
99
|
+
- lib/avburn.rb
|
100
|
+
- lib/avburn/fuses.yml
|
101
|
+
- spec/avburn_spec.rb
|
102
|
+
- spec/spec_helper.rb
|
103
|
+
has_rdoc: true
|
104
|
+
homepage: http://github.com/nofxx/avburn
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
hash: -1524349970638977619
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
version: "0"
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
version: "0"
|
129
|
+
requirements: []
|
130
|
+
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 1.3.7
|
133
|
+
signing_key:
|
134
|
+
specification_version: 3
|
135
|
+
summary: Shoes based GUI for AVRDUDE
|
136
|
+
test_files:
|
137
|
+
- spec/avburn_spec.rb
|
138
|
+
- spec/spec_helper.rb
|