forked from mchck/programmer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
backend-driver.rb
48 lines (45 loc) · 1.06 KB
/
backend-driver.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
require 'swd-mchck-bitbang'
require 'swd-buspirate'
require 'adiv5-swd-cmsis-dap'
begin
require 'swd-ftdi'
rescue LoadError
# Not required, we'll just lack support for FTDI
end
module BackendDriver
class << self
def create(name, opts)
case name
when 'ftdi', 'busblaster'
Adiv5Swd.new(FtdiSwd.new(opts))
when 'buspirate'
Adiv5Swd.new(BusPirateSwd.new(opts))
when 'mchck'
Adiv5Swd.new(MchckBitbangSwd.new(opts))
when 'cmsis-dap'
Adiv5SwdCmsisDap.new(opts)
end
end
def from_string_set(a)
opts = {}
a.each do |s|
s.strip!
name, val = s.split(/[=]/, 2) # emacs falls over with a /=/ regexp :/
if !val || val.empty?
raise RuntimeError, "invalid option `#{s}'"
end
begin
val = Integer(val)
rescue
# just trying...
end
opts[name.to_sym] = val
end
name = opts.delete(:name)
create(name, opts)
end
def from_string(s)
from_string_set(s.split(/:/))
end
end
end