seriamp 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/sonamp-web +2 -2
- data/bin/yamaha-web +2 -2
- data/lib/seriamp/sonamp/cmd.rb +3 -3
- data/lib/seriamp/version.rb +1 -1
- data/lib/seriamp/yamaha/app.rb +20 -2
- data/lib/seriamp/yamaha/client.rb +8 -4
- data/lib/seriamp/yamaha/cmd.rb +8 -8
- data/lib/seriamp/yamaha/protocol/methods.rb +5 -2
- data/seriamp.gemspec +5 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03d3d9290f5631bdd707dd435ef0f0e7abe7da345017bc92764cacb78f6e485e
|
4
|
+
data.tar.gz: 629ef868b42d3e0d50bf27fbc6a15fbfe036fdee9a4028aa03aae671a7c5e737
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f799dc584037d91ed46ab8abffa4c0ab2dfd9d8db131d2195b5fbd9b2222702e54002f5eb3a97c40fcb1dbe3902639f0cda195a6407d6a6a04db9e3542a2f49
|
7
|
+
data.tar.gz: a65df97c56a0d665f1636dafdbf323a75a4624d5669662cd5ad60b0d20780c5f30aa3bb7a261892db228c33da0f19c094d9c70727191f0a24c4e8e46b022675e
|
data/bin/sonamp-web
CHANGED
@@ -25,7 +25,7 @@ logger = Logger.new(STDERR)
|
|
25
25
|
|
26
26
|
#Sonamp::App.set :device, options[:device]
|
27
27
|
#Sonamp::App.set :logger, logger
|
28
|
-
Seriamp::Sonamp::App.set :client, Sonamp::Client.new(options[:device], logger: logger)
|
28
|
+
Seriamp::Sonamp::App.set :client, Seriamp::Sonamp::Client.new(device: options[:device], logger: logger)
|
29
29
|
|
30
30
|
options = Rack::Server::Options.new.parse!(ARGV)
|
31
|
-
Rack::Server.start(options.merge(app: Sonamp::App))
|
31
|
+
Rack::Server.start(options.merge(app: Seriamp::Sonamp::App))
|
data/bin/yamaha-web
CHANGED
@@ -25,7 +25,7 @@ logger = Logger.new(STDERR)
|
|
25
25
|
|
26
26
|
#Yamaha::App.set :device, options[:device]
|
27
27
|
#Yamaha::App.set :logger, logger
|
28
|
-
Seriamp::Yamaha::App.set :client, Yamaha::Client.new(options[:device], logger: logger)
|
28
|
+
Seriamp::Yamaha::App.set :client, Seriamp::Yamaha::Client.new(device: options[:device], logger: logger)
|
29
29
|
|
30
30
|
options = Rack::Server::Options.new.parse!(ARGV)
|
31
|
-
Rack::Server.start(options.merge(app: Yamaha::App))
|
31
|
+
Rack::Server.start(options.merge(app: Seriamp::Yamaha::App))
|
data/lib/seriamp/sonamp/cmd.rb
CHANGED
@@ -69,11 +69,11 @@ module Seriamp
|
|
69
69
|
client.set_zone_power(4, false)
|
70
70
|
when 'power'
|
71
71
|
zone = args.shift.to_i
|
72
|
-
state = Utils.parse_on_off(
|
72
|
+
state = Utils.parse_on_off(args.shift)
|
73
73
|
client.set_zone_power(zone, state)
|
74
74
|
when 'zvol'
|
75
75
|
zone = args.shift.to_i
|
76
|
-
volume =
|
76
|
+
volume = args.shift.to_i
|
77
77
|
client.set_zone_volume(zone, volume)
|
78
78
|
when 'cvol'
|
79
79
|
channel = args.shift.to_i
|
@@ -81,7 +81,7 @@ module Seriamp
|
|
81
81
|
client.set_channel_volume(channel, volume)
|
82
82
|
when 'zmute'
|
83
83
|
zone = args.shift.to_i
|
84
|
-
mute =
|
84
|
+
mute = args.shift.to_i
|
85
85
|
client.set_zone_mute(zone, mute)
|
86
86
|
when 'cmute'
|
87
87
|
channel = args.shift.to_i
|
data/lib/seriamp/version.rb
CHANGED
data/lib/seriamp/yamaha/app.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'sinatra/base'
|
4
4
|
require 'seriamp/utils'
|
5
|
+
require 'seriamp/detect'
|
5
6
|
require 'seriamp/yamaha/client'
|
6
7
|
|
7
8
|
module Seriamp
|
@@ -12,6 +13,10 @@ module Seriamp
|
|
12
13
|
set :logger, nil
|
13
14
|
set :client, nil
|
14
15
|
|
16
|
+
get '/' do
|
17
|
+
render_json(client.status)
|
18
|
+
end
|
19
|
+
|
15
20
|
get '/power' do
|
16
21
|
render_json(client.last_status.fetch(:power) > 0)
|
17
22
|
end
|
@@ -27,15 +32,27 @@ module Seriamp
|
|
27
32
|
empty_response
|
28
33
|
end
|
29
34
|
|
30
|
-
get
|
35
|
+
get "/#{zone}/volume" do
|
31
36
|
render_json(client.public_send("get_#{zone}_volume"))
|
32
37
|
end
|
33
38
|
|
34
|
-
put
|
39
|
+
put "/#{zone}/volume" do
|
35
40
|
value = Float(request.body.read)
|
36
41
|
client.public_send("set_#{zone}_volume_db", value)
|
37
42
|
empty_response
|
38
43
|
end
|
44
|
+
|
45
|
+
put "/#{zone}/input" do
|
46
|
+
value = request.body.read
|
47
|
+
client.public_send("set_#{zone}_input", value)
|
48
|
+
empty_response
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
put "/pure-direct" do
|
53
|
+
state = Utils.parse_on_off(request.body.read)
|
54
|
+
client.public_send("set_pure_direct", state)
|
55
|
+
empty_response
|
39
56
|
end
|
40
57
|
|
41
58
|
private
|
@@ -47,6 +64,7 @@ module Seriamp
|
|
47
64
|
end
|
48
65
|
|
49
66
|
def render_json(data)
|
67
|
+
headers['content-type'] = 'application/json'
|
50
68
|
data.to_json
|
51
69
|
end
|
52
70
|
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'timeout'
|
4
4
|
require 'seriamp/backend/serial_port'
|
5
|
-
require 'seriamp/yamaha/protocol/constants'
|
6
5
|
require 'seriamp/yamaha/protocol/methods'
|
7
6
|
|
8
7
|
module Seriamp
|
@@ -170,6 +169,11 @@ module Seriamp
|
|
170
169
|
resp
|
171
170
|
end
|
172
171
|
|
172
|
+
MODEL_NAMES = {
|
173
|
+
'R0177' => 'RX-V1500',
|
174
|
+
'R0178' => 'RX-V2500',
|
175
|
+
}.freeze
|
176
|
+
|
173
177
|
def do_status
|
174
178
|
resp = nil
|
175
179
|
loop do
|
@@ -188,15 +192,15 @@ module Seriamp
|
|
188
192
|
length = payload[6..7].to_i(16)
|
189
193
|
data = payload[8...-2]
|
190
194
|
if data.length != length
|
191
|
-
raise
|
195
|
+
raise HandshakeFailure, "Broken status response: expected #{length} bytes, got #{data.length} bytes; concurrent operation on device?"
|
192
196
|
end
|
193
197
|
unless data.start_with?('@E01900')
|
194
|
-
raise
|
198
|
+
raise HandshakeFailure, "Broken status response: expected to start with @E01900, actual #{data[0..6]}"
|
195
199
|
end
|
196
200
|
@status_string = data
|
197
201
|
@status = {
|
198
|
-
# RX-V1500: model R0177
|
199
202
|
model_code: @model_code,
|
203
|
+
model_name: MODEL_NAMES[@model_code],
|
200
204
|
firmware_version: @version,
|
201
205
|
system_status: data[7].ord - ZERO_ORD,
|
202
206
|
power: power = data[8].ord - ZERO_ORD,
|
data/lib/seriamp/yamaha/cmd.rb
CHANGED
@@ -62,20 +62,20 @@ module Seriamp
|
|
62
62
|
exit 3
|
63
63
|
end
|
64
64
|
when 'power'
|
65
|
-
which =
|
65
|
+
which = args.shift&.downcase
|
66
66
|
if %w(main zone2 zone3).include?(which)
|
67
67
|
method = "set_#{which}_power"
|
68
|
-
state = Utils.parse_on_off(
|
68
|
+
state = Utils.parse_on_off(args.shift)
|
69
69
|
else
|
70
70
|
method = 'set_power'
|
71
71
|
state = Utils.parse_on_off(which)
|
72
72
|
end
|
73
73
|
client.public_send(method, state)
|
74
74
|
when 'volume'
|
75
|
-
which =
|
75
|
+
which = args.shift
|
76
76
|
if %w(main zone2 zone3).include?(which)
|
77
77
|
prefix = "set_#{which}"
|
78
|
-
value =
|
78
|
+
value = args.shift
|
79
79
|
else
|
80
80
|
prefix = 'set_main'
|
81
81
|
value = which
|
@@ -95,20 +95,20 @@ module Seriamp
|
|
95
95
|
p client.get_zone2_volume_text
|
96
96
|
p client.get_zone3_volume_text
|
97
97
|
when 'input'
|
98
|
-
which =
|
98
|
+
which = args.shift&.downcase
|
99
99
|
if %w(main zone2 zone3).include?(which)
|
100
100
|
method = "set_#{which}_input"
|
101
|
-
input =
|
101
|
+
input = args.shift
|
102
102
|
else
|
103
103
|
method = 'set_main_input'
|
104
104
|
input = which
|
105
105
|
end
|
106
106
|
client.public_send(method, input)
|
107
107
|
when 'program'
|
108
|
-
value =
|
108
|
+
value = args.shift.downcase
|
109
109
|
client.set_program(value)
|
110
110
|
when 'pure-direct'
|
111
|
-
state = Utils.parse_on_off(
|
111
|
+
state = Utils.parse_on_off(args.shift)
|
112
112
|
client.set_pure_direct(state)
|
113
113
|
when 'status'
|
114
114
|
pp client.last_status
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'seriamp/yamaha/protocol/constants'
|
4
|
+
|
3
5
|
module Seriamp
|
4
6
|
module Yamaha
|
5
7
|
module Protocol
|
6
8
|
module Methods
|
9
|
+
include Constants
|
7
10
|
|
8
11
|
# Turns the receiver on or off.
|
9
12
|
#
|
@@ -87,7 +90,7 @@ module Seriamp
|
|
87
90
|
end
|
88
91
|
|
89
92
|
def set_subwoofer_level(level)
|
90
|
-
|
93
|
+
system_command("49#{'%02x' % level}")
|
91
94
|
end
|
92
95
|
|
93
96
|
def get_main_volume_text
|
@@ -106,7 +109,7 @@ module Seriamp
|
|
106
109
|
#
|
107
110
|
# @param [ true | false ] state Desired state.
|
108
111
|
def set_pure_direct(state)
|
109
|
-
|
112
|
+
remote_command("7E8#{state ? '0' : '2'}")
|
110
113
|
end
|
111
114
|
|
112
115
|
def set_program(value)
|
data/seriamp.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "seriamp"
|
5
|
-
spec.version = '0.1.
|
5
|
+
spec.version = '0.1.3'
|
6
6
|
spec.authors = ['Oleg Pudeyev']
|
7
7
|
spec.email = ['code@olegp.name']
|
8
8
|
spec.summary = %q{Serial control for amplifiers & A/V receivers}
|
@@ -14,4 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ["lib"]
|
17
|
+
|
18
|
+
spec.add_runtime_dependency 'serialport', '~> 1.0'
|
19
|
+
|
20
|
+
# Optional dependencies: sinatra for the web apps
|
17
21
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seriamp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Pudeyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
12
|
-
dependencies:
|
11
|
+
date: 2022-11-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: serialport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
13
27
|
description: Library for controlling Yamaha A/V receivers and Sonance Sonamp amplifiers
|
14
28
|
via the serial port
|
15
29
|
email:
|