rbuspirate 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +8 -8
- data/lib/rbuspirate.rb +24 -0
- data/lib/rbuspirate/commands.rb +4 -0
- data/lib/rbuspirate/interfaces/uart.rb +32 -5
- data/lib/rbuspirate/responses.rb +1 -0
- data/lib/rbuspirate/timeouts.rb +2 -0
- data/lib/rbuspirate/version.rb +1 -1
- data/rbuspirate.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 980cffb01298ceb60a0a7227b26162b2c1c9a81056f3f1d7533adc5dd1b3cb3a
|
4
|
+
data.tar.gz: 1ee643f76efbce4dd6bbda7a4b8882732ace3f52d49a93db3ca4e09f57ab4b0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c072cc7ee73949c9f790cf42a3e9baeca2cff6a120dce9dcabe559f27d2fda57508299727dcb29c3eb6f30c13ba54d04fab19f1b5a6bfddece3b152883beee7
|
7
|
+
data.tar.gz: e8ca8811d409638776363424d3fac01c7484a3ceadb2d1e42db6a2459e16ef90f5310699f5f5917e8867b5d31a4261707c7664f44a027e99f9c55c4e82028c1d
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rbuspirate (0.2.
|
4
|
+
rbuspirate (0.2.4)
|
5
5
|
serialport (~> 1.3)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
coderay (1.1.2)
|
11
|
-
method_source (0.
|
12
|
-
pry (0.
|
13
|
-
coderay (~> 1.1
|
14
|
-
method_source (~>
|
15
|
-
rake (
|
11
|
+
method_source (1.0.0)
|
12
|
+
pry (0.13.1)
|
13
|
+
coderay (~> 1.1)
|
14
|
+
method_source (~> 1.0)
|
15
|
+
rake (13.0.1)
|
16
16
|
serialport (1.3.1)
|
17
17
|
|
18
18
|
PLATFORMS
|
@@ -20,8 +20,8 @@ PLATFORMS
|
|
20
20
|
|
21
21
|
DEPENDENCIES
|
22
22
|
bundler (~> 2.0)
|
23
|
-
pry (~> 0.
|
24
|
-
rake (~>
|
23
|
+
pry (~> 0.13.0)
|
24
|
+
rake (~> 13.0)
|
25
25
|
rbuspirate!
|
26
26
|
|
27
27
|
BUNDLED WITH
|
data/lib/rbuspirate.rb
CHANGED
@@ -62,6 +62,30 @@ module Rbuspirate
|
|
62
62
|
|
63
63
|
raise 'Enter to bitbang failied'
|
64
64
|
end
|
65
|
+
|
66
|
+
def pin_on_off(power: false, pullup: false, aux: false, mosi: false, clk: false, miso: false, cs: false)
|
67
|
+
argarray = [power, pullup, aux, mosi, clk, miso, cs].freeze
|
68
|
+
argarray.each do |arg|
|
69
|
+
raise ArgumentError, 'Shitty arg' unless [true, false].include?(arg)
|
70
|
+
end
|
71
|
+
|
72
|
+
final_comm = argarray
|
73
|
+
.each.with_index
|
74
|
+
.inject(Commands::Config::PINONOFF) do |comm, (arg, idx)|
|
75
|
+
arg ? (comm | 1 << idx) : (comm)
|
76
|
+
end
|
77
|
+
@le_port.putc(final_comm)
|
78
|
+
# I don't fucking understand:
|
79
|
+
# "The Bus pirate responds to each update
|
80
|
+
# with a byte in the same format
|
81
|
+
# that shows the current state of the pins"
|
82
|
+
# So, why response is always a null byte ?
|
83
|
+
resp = @le_port.expect(
|
84
|
+
Responses::PINS_SET, Timeouts::PINONOFF
|
85
|
+
)
|
86
|
+
raise 'Setting pins state failied' unless resp
|
87
|
+
end
|
88
|
+
|
65
89
|
[
|
66
90
|
[
|
67
91
|
:i2c, Commands::I2C::ENTER,
|
data/lib/rbuspirate/commands.rb
CHANGED
@@ -7,6 +7,8 @@ module Rbuspirate
|
|
7
7
|
CONF_PER = 0b01000000
|
8
8
|
|
9
9
|
module Config
|
10
|
+
PINONOFF = 0b10000000
|
11
|
+
|
10
12
|
module Peripherals
|
11
13
|
POWER = 0b00001000
|
12
14
|
PULLUP = 0b00000100
|
@@ -51,6 +53,8 @@ module Rbuspirate
|
|
51
53
|
module UART
|
52
54
|
ENTER = 0b00000011
|
53
55
|
START_BRIDGE = 0b00001111
|
56
|
+
ECHO_RX = 0b00000010
|
57
|
+
BULK_WRITE = 0b00010000
|
54
58
|
|
55
59
|
module Config
|
56
60
|
CONF_UART = 0b10000000
|
@@ -8,7 +8,7 @@ module Rbuspirate
|
|
8
8
|
class UART < Abstract
|
9
9
|
attr_reader :bridge, :speed, :power, :pullup, :aux, :cs,
|
10
10
|
:pin_out_33, :parity_data, :stop_bits, :rx_idle,
|
11
|
-
:port
|
11
|
+
:port, :speed, :echo_rx
|
12
12
|
|
13
13
|
def initialize(serial, bup)
|
14
14
|
raise 'Bus pirate must be in uart mode' unless bup.mode == :uart
|
@@ -16,6 +16,7 @@ module Rbuspirate
|
|
16
16
|
@bridge = false
|
17
17
|
@bup = bup
|
18
18
|
@le_port = serial
|
19
|
+
@echo_rx = false
|
19
20
|
end
|
20
21
|
|
21
22
|
def configure_peripherals(...)
|
@@ -56,6 +57,16 @@ module Rbuspirate
|
|
56
57
|
@speed = bit_speed
|
57
58
|
end
|
58
59
|
|
60
|
+
# Not working ?
|
61
|
+
def echo_rx=(echo_state)
|
62
|
+
raise ArgumentError, 'Echo state arg should be false or true' unless [true, false].include?(echo_state)
|
63
|
+
return if echo_state == @echo_rx
|
64
|
+
|
65
|
+
echo_comm = (Commands::UART::ECHO_RX | (echo_state ? 0 : 1))
|
66
|
+
simplex_command(echo_comm, Timeouts::SUCCESS, "Unable to set echo rx state to #{echo_state}")
|
67
|
+
@echo_rx = echo_state
|
68
|
+
end
|
69
|
+
|
59
70
|
def config_uart(
|
60
71
|
pin_out_33: false, parity_data: :n8, stop_bits: 1, rx_idle: true
|
61
72
|
)
|
@@ -90,20 +101,36 @@ module Rbuspirate
|
|
90
101
|
def enter_bridge
|
91
102
|
return @bridge if @bridge
|
92
103
|
|
93
|
-
|
104
|
+
simplex_command(Commands::UART::START_BRIDGE, Timeouts::SUCCESS, 'Unable to enter bridge')
|
94
105
|
@bridge = true
|
95
106
|
@bup.instance_variable_set(:@needs_reset, true)
|
96
107
|
@port = @le_port
|
97
108
|
end
|
98
109
|
|
99
110
|
def read(bytes = 0)
|
100
|
-
raise '
|
111
|
+
raise 'Enable echo_rx or enter to bridge mode' unless @bridge || @echo_rx
|
112
|
+
# Not working in echo rx mode - firmware bug or expect discards data buffer
|
101
113
|
bytes.positive? ? @le_port.read(bytes) : @le_port.read
|
102
114
|
end
|
103
115
|
|
104
116
|
def write(data)
|
105
|
-
|
106
|
-
@le_port.write(data
|
117
|
+
data = data.to_s.b
|
118
|
+
@bridge ? @le_port.write(data) : bulk_write(data)
|
119
|
+
end
|
120
|
+
|
121
|
+
protected
|
122
|
+
|
123
|
+
def bulk_write(data)
|
124
|
+
dbt = data.bytesize
|
125
|
+
unpackstr = 'a16' * (dbt / 16)
|
126
|
+
!(dbt % 16).zero? && unpackstr += "a#{dbt % 16}"
|
127
|
+
data = data.unpack(unpackstr)
|
128
|
+
data.each do |slice|
|
129
|
+
comm = Commands::UART::BULK_WRITE | (slice.bytesize - 1)
|
130
|
+
simplex_command(comm, Timeouts::SUCCESS, 'Unable to write data slice prepare')
|
131
|
+
simplex_command(slice, Timeouts::SUCCESS, 'Unable to write data slice')
|
132
|
+
end
|
133
|
+
dbt
|
107
134
|
end
|
108
135
|
end
|
109
136
|
end
|
data/lib/rbuspirate/responses.rb
CHANGED
data/lib/rbuspirate/timeouts.rb
CHANGED
data/lib/rbuspirate/version.rb
CHANGED
data/rbuspirate.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.require_paths = ['lib'] + Dir.glob('lib/**').select(&File.method(:directory?))
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 2.0"
|
27
|
-
spec.add_development_dependency "rake", "~>
|
27
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
28
28
|
spec.add_development_dependency "pry", "~> 0.12"
|
29
29
|
spec.add_dependency "serialport", "~> 1.3"
|
30
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbuspirate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sh7d
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.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
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|