onkyo_eiscp_ruby 0.0.1 → 0.0.2

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'eiscp/eiscp_server'
4
+
5
+ puts "Starting server on 60128..."
6
+
7
+ EISCPServer.new
data/lib/eiscp/eiscp.rb CHANGED
@@ -6,10 +6,13 @@ class EISCP
6
6
  ONKYO_PORT = 60128
7
7
  ONKYO_MAGIC = EISCPPacket.new("ECN", "QSTN", "x").to_s
8
8
 
9
+ # Create a new EISCP object to communicate with a receiver.
10
+
9
11
  def initialize(host)
10
12
  @host = host
11
13
  end
12
14
 
15
+ # Internal method for receiving data with a timeout
13
16
 
14
17
  def self.recv(sock, timeout = 0.5)
15
18
  data = []
@@ -34,6 +37,9 @@ class EISCP
34
37
 
35
38
  end
36
39
  end
40
+
41
+ # Returns an array of arrays consisting of a discovery response packet string
42
+ # and the source ip address of the reciever.
37
43
 
38
44
  def self.discover
39
45
  sock = UDPSocket.new
@@ -62,6 +68,8 @@ class EISCP
62
68
 
63
69
  end
64
70
  end
71
+
72
+ # Sends a packet string on the network
65
73
 
66
74
  def send(eiscp_packet)
67
75
  sock = TCPSocket.new @host, ONKYO_PORT
@@ -69,12 +77,16 @@ class EISCP
69
77
  sock.close
70
78
  end
71
79
 
80
+ # Send a packet string and return recieved data string.
81
+
72
82
  def send_recv(eiscp_packet)
73
83
  sock = TCPSocket.new @host, ONKYO_PORT
74
84
  sock.puts eiscp_packet
75
85
  puts EISCP.recv(sock, 0.5)
76
86
  end
77
87
 
88
+ # Open a TCP connection to the host and print all received messages until
89
+ # killed.
78
90
 
79
91
  def connect(&block)
80
92
  sock = TCPSocket.new @host, ONKYO_PORT
@@ -1,5 +1,9 @@
1
1
  require 'eiscp/iscp_message'
2
2
 
3
+ # Public: Encapsulates ISCP Messages in eISCP packets to send on the network.
4
+ # You can alsoe use the class method 'parse' to create objects from strings
5
+ # captured from the network using the EISCP class.
6
+
3
7
  class EISCPPacket
4
8
 
5
9
  MAGIC = "ISCP"
@@ -10,15 +14,24 @@ class EISCPPacket
10
14
  attr_accessor :header
11
15
  attr_reader :iscp_message
12
16
 
17
+ # Create a new EISCPPacket object with a given command and parameter
18
+ # -+command+ - an ISCP command like "PWR" for "system-power"
19
+ # -+parameter+ - an ISCP command parameter like "01" for "on" for
20
+ # "system-power"
21
+
13
22
  def initialize(command, parameter, unit_type = "1", start = "!")
14
23
  @iscp_message = ISCPMessage.new(command, parameter, unit_type, start)
15
24
  @header = { :magic => MAGIC, :header_size => HEADER_SIZE, :data_size => @iscp_message.to_s.length, :version => VERSION, :reserved => RESERVED }
16
25
  end
17
26
 
27
+ # Returns a raw packet string for sending on the network using EISCP object.
28
+
18
29
  def to_s
19
30
  return [ @header[:magic], @header[:header_size], @header[:data_size], @header[:version], @header[:reserved], @iscp_message.to_s ].pack("A4NNAa3A*")
20
31
  end
21
32
 
33
+ # Returns an EISCPPacket from a raw packet string
34
+
22
35
  def self.parse(eiscp_message_string)
23
36
  array = eiscp_message_string.unpack("A4NNAa3A*")
24
37
  iscp_message = ISCPMessage.parse(array[5])
@@ -0,0 +1,21 @@
1
+ require 'socket'
2
+ require 'eiscp/eiscp_packet'
3
+ require 'eiscp/eiscp'
4
+
5
+ # Mock server that only responds to ECNQSTN.
6
+
7
+ class EISCPServer
8
+
9
+ ONKYO_DISCOVERY_RESPONSE = EISCPPacket.new("ECN", "TX-NR609/60128/DX/001122334455")
10
+
11
+ # Create/start the server object.
12
+
13
+ def initialize
14
+ Socket.udp_server_loop("255.255.255.255", EISCP::ONKYO_PORT) do |msg, msg_src|
15
+ msg_src.reply ONKYO_DISCOVERY_RESPONSE.to_s
16
+ puts msg
17
+ end
18
+ end
19
+
20
+ end
21
+
data/lib/eiscp.rb CHANGED
@@ -1,6 +1,7 @@
1
- # Public: Create and send EISCP messages to control Onkyo receivers.
1
+ # Create and send EISCP messages to control Onkyo receivers.
2
+
2
3
  class EISCP
3
- VERSION = '0.0.1'
4
+ VERSION = '0.0.2'
4
5
  end
5
6
 
6
7
  require 'eiscp/eiscp'
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.test_files = Dir[ 'test/tc*.rb' ]
21
21
  s.executables = %w(
22
22
  onkyo.rb
23
+ onkyo-server.rb
23
24
  )
24
25
 
25
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onkyo_eiscp_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,26 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-01 00:00:00.000000000 Z
12
+ date: 2014-01-02 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! "\n Use the provided binary script or require the library for use
15
15
  in your scripts.\n "
16
16
  email: mikebrodrigues@gmail.com
17
17
  executables:
18
18
  - onkyo.rb
19
+ - onkyo-server.rb
19
20
  extensions: []
20
21
  extra_rdoc_files:
21
22
  - README.md
22
23
  files:
24
+ - bin/onkyo-server.rb
23
25
  - bin/onkyo.rb
26
+ - lib/eiscp/eiscp_server.rb
24
27
  - lib/eiscp/eiscp.rb
25
28
  - lib/eiscp/eiscp_packet.rb
26
29
  - lib/eiscp/command.rb
27
30
  - lib/eiscp/iscp_message.rb
28
31
  - lib/eiscp.rb
29
- - lib/server.rb
30
32
  - test/tc_command.rb
31
33
  - test/tc_iscp_message.rb
32
34
  - test/tc_eiscp.rb
data/lib/server.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'socket'
2
-
3
- class EISCPServer
4
-
5
- ONKYO_DISCOVERY_RESPONSE = "ISCP\u0000\u0000\u0000\u0010\u0000\u0000\u0000&\u0001\u0000\u0000\u0000!1ECNTX-MR909/60128/DX/0009B0C727FE\u0019\r\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
6
- def initialize
7
- Socket.udp_server_loop("255.255.255.255", 60128) do |msg, msg_src|
8
- msg_src.reply ONKYO_DISCOVERY_RESPONSE
9
- puts msg
10
- end
11
- end
12
- end
13
-
14
- EISCPServer.new
15
-