seriamp 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a8c5974a39756c641ab5fb6e600d0d67095e4e9f18c872225ffb580cea4e70c
4
- data.tar.gz: ba47852332bdb66070cf4105c4929ed691fce8eca8dd7f47aaefbeb4effab932
3
+ metadata.gz: 5687443fb1ef40b23fe59092d92d5421ff5dae7fd5196ddcd682df99d8dd64bd
4
+ data.tar.gz: 1c0654c533b4939cf5c265bfbab0f4e9ce21ea5a5b5506d1ef224d6f6ca2623d
5
5
  SHA512:
6
- metadata.gz: 185e56b171c6db9ed0822f57de19ac2fea395d075bc615cddf0795c82c2f044b5212e9eb210b90b3dbc4aa603ce6b1553a610924c9ce8b9f02ae860c1f0c873c
7
- data.tar.gz: 277dc1f126ca440e3a8539491e1548511f1abfb66e6a21c615ab4ab8bfce67c76c2499b6c6a2ec9efe20050cd1ac732f70cd3870cff98aec927ae57f6f46e1e4
6
+ metadata.gz: 7385b186ea20acc6f6ba001de8e0498c20fddc41f12219ca8e81a5490dcdd2c3751b340fe7e0ad2c990bc1c48447a724a6d5d1831746708aa57aadf78a4a3f30
7
+ data.tar.gz: b0411b2b26c3b8caa035d6286559e2daa98ec86d8d9d328e2ea324971458f1f6754fedf809d6db6f9d50336c9bba1953b2ffa5b36c6fdddc3d0bce85f8bb3e87
data/README.md CHANGED
@@ -32,6 +32,39 @@ necessary.
32
32
  - Null-modem cable required
33
33
  - Receiver socket is male
34
34
 
35
+ The following table shows which Yamaha receivers have RS-232 connector
36
+ and which do not:
37
+
38
+ | Family | RS-232C Present | RS-232C Absent |
39
+ | -------- | ---------------------------- | -------------- |
40
+ | RX-Vx000 | RX-V3000, RX-V1000 | |
41
+ | | | HTR-5280 |
42
+ | RX-Vx200 | RX-V2200 | RX-V1200 |
43
+ | | | HTR-5490 |
44
+ | RX-Vx300 | RX-V2300 | RX-V1300 |
45
+ | | | HTR-5590 |
46
+ | | | HTR-5660 |
47
+ | RX-Vx400 | RX-V2400 | RX-V1400 |
48
+ | | | HTR-5790 |
49
+ | RX-Vx500 | RX-V2500, RX-V1500 | |
50
+ | | HTR-5890 | HTR-5860 |
51
+ | RX-Vx600 | RX-V2600, RX-V1600 | |
52
+ | | HTR-5990 | HTR-5960 |
53
+ | RX-Vx700 | RX-V2700, RX-V1700 | |
54
+ | | | HTR-6090 |
55
+ | RX-Vx800 | RX-V3800, RX-V1800 | |
56
+ | | HTR-6190 | HTR-6180 |
57
+ | RX-Vx900 | RX-V3900, RX-V1900 | |
58
+ | | | HTR-6290 |
59
+ | RX-Vx67 | RX-V3067, RX-V2067, RX-V1067 | RX-V867 |
60
+
61
+ RX-V2700, RX-V3800 and RX-V3900 have an Ethernet port in addition to
62
+ RS-232C and should be controllable via the Yamaha YNCA protocol via the
63
+ Ethernet port. Over time Yamaha has been adding networking functionality
64
+ to lower tier models, for example it is present in RX-V867, RX-V671 and RX-V475.
65
+
66
+ Models lower than 1000 level receivers have never had RS-232C to my knowledge.
67
+
35
68
  ### Denon AVR-2308CI
36
69
 
37
70
  - Straight cable required
@@ -111,6 +144,10 @@ Serial port communication in Ruby:
111
144
  - [rubyserial](https://github.com/hybridgroup/rubyserial)
112
145
  - [Ruby/SerialPort](https://github.com/hparra/ruby-serialport)
113
146
 
147
+ Yamaha YNCA protocol:
148
+
149
+ - [yamaha_ynca](https://github.com/mvdwetering/yamaha_ynca)
150
+
114
151
  ## Helpful Links
115
152
 
116
153
  - [Serial port programming in Ruby](https://www.thegeekdiary.com/serial-port-programming-reading-writing-status-of-control-lines-dtr-rts-cts-dsr/)
@@ -21,7 +21,7 @@ module Seriamp
21
21
  Thread.new do
22
22
  Timeout.timeout(timeout * 2, CommunicationTimeout) do
23
23
  logger&.debug("Trying #{device}")
24
- client_cls.new(device: device, logger: logger).present?
24
+ client_cls.new(device: device, logger: logger, retries: false).present?
25
25
  logger&.debug("Found #{mod} device at #{device}")
26
26
  queue << device
27
27
  end
@@ -224,6 +224,15 @@ module Seriamp
224
224
  logger&.debug("Opening #{device}")
225
225
  @io = Backend::SerialPortBackend::Device.new(device, logger: logger)
226
226
 
227
+ warned = false
228
+ while IO.select([@io.io], nil, nil, 0)
229
+ unless warned
230
+ logger&.warn("Serial device readable after opening - unread previous response?")
231
+ warned = true
232
+ end
233
+ IO.read(1)
234
+ end
235
+
227
236
  begin
228
237
  yield @io
229
238
  ensure
@@ -236,11 +245,13 @@ module Seriamp
236
245
  try = 1
237
246
  begin
238
247
  yield
239
- rescue Seriamp::Error => exc
248
+ rescue Seriamp::Error, IOError, SystemCallError => exc
240
249
  if try <= retries
241
250
  logger&.warn("Error during operation: #{exc.class}: #{exc} - will retry")
242
251
  try += 1
243
- @device = nil
252
+ if detect_device?
253
+ @device = nil
254
+ end
244
255
  retry
245
256
  else
246
257
  raise
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Seriamp
4
- VERSION = '0.1.12'
4
+ VERSION = '0.1.14'
5
5
  end
@@ -197,6 +197,15 @@ module Seriamp
197
197
  logger&.debug("Opening #{device}")
198
198
  @io = Backend::SerialPortBackend::Device.new(device, logger: logger)
199
199
 
200
+ warned = false
201
+ while IO.select([@io.io], nil, nil, 0)
202
+ unless warned
203
+ logger&.warn("Serial device readable after opening - unread previous response?")
204
+ warned = true
205
+ end
206
+ IO.read(1)
207
+ end
208
+
200
209
  begin
201
210
  tries = 0
202
211
  begin
@@ -417,11 +426,13 @@ module Seriamp
417
426
  try = 1
418
427
  begin
419
428
  yield
420
- rescue Seriamp::Error => exc
429
+ rescue Seriamp::Error, IOError, SystemCallError => exc
421
430
  if try <= retries
422
431
  logger&.warn("Error during operation: #{exc.class}: #{exc} - will retry")
423
432
  try += 1
424
- @device = nil
433
+ if detect_device?
434
+ @device = nil
435
+ end
425
436
  retry
426
437
  else
427
438
  raise
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.12'
5
+ spec.version = '0.1.14'
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}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seriamp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Pudeyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-24 00:00:00.000000000 Z
11
+ date: 2023-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: serialport