aca-device-modules 1.0.4 → 1.0.5
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 +4 -4
- data/lib/aca-device-modules/version.rb +1 -1
- data/modules/aca/lifter_logic_auto.rb +71 -0
- data/modules/aca/lifter_logic_manual.rb +105 -0
- data/modules/aca/pc_control.rb +111 -111
- data/modules/axis/camera/vapix.rb +10 -3
- data/modules/biamp/nexia.rb +149 -128
- data/modules/bss/blu100.rb +8 -8
- data/modules/chiyu/cyt.rb +6 -1
- data/modules/clipsal/c_bus.rb +233 -235
- data/modules/epson/projector/esc_vp21.rb +232 -232
- data/modules/extron/mixer/dmp44.rb +174 -174
- data/modules/extron/mixer/dmp64.rb +192 -181
- data/modules/extron/switcher/dxp.rb +210 -210
- data/modules/global_cache/gc100.rb +6 -2
- data/modules/kramer/switcher/protocol3000.rb +209 -209
- data/modules/kramer/switcher/vs_hdmi.rb +111 -110
- data/modules/nec/display/all.rb +440 -443
- data/modules/nec/projector/np_series.rb +609 -597
- data/modules/panasonic/camera/he50.rb +1 -1
- data/modules/panasonic/projector/tcp.rb +239 -234
- data/modules/philips/dynalite.rb +196 -0
- data/modules/samsung/displays/md_series.rb +34 -16
- data/modules/screen_technics/connect.rb +53 -53
- data/modules/sony/display/id_talk.rb +275 -275
- data/modules/sony/projector/pj_talk.rb +257 -257
- data/modules/vaddio/camera/clear_view_ptz_telnet.rb +7 -3
- metadata +6 -3
@@ -15,181 +15,181 @@ module Extron::Mixer; end
|
|
15
15
|
|
16
16
|
|
17
17
|
class Extron::Mixer::Dmp44
|
18
|
-
|
18
|
+
include ::Orchestrator::Constants
|
19
19
|
include ::Orchestrator::Transcoder
|
20
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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
21
|
+
|
22
|
+
def on_load
|
23
|
+
#
|
24
|
+
# Setup constants
|
25
|
+
#
|
26
|
+
self[:output_volume_max] = 2168
|
27
|
+
self[:output_volume_min] = 1048
|
28
|
+
self[:mic_gain_max] = 2298
|
29
|
+
self[:mic_gain_min] = 1698
|
30
|
+
|
31
|
+
config({
|
32
|
+
:clear_queue_on_disconnect => true # Clear the queue as we may need to send login
|
33
|
+
})
|
34
|
+
end
|
35
|
+
|
36
|
+
def connected
|
37
|
+
device_ready
|
38
|
+
@polling_timer = schedule.every('2m') do
|
39
|
+
logger.debug "-- Extron Maintaining Connection"
|
40
|
+
send('Q', :priority => 0) # Low priority poll to maintain connection
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def disconnected
|
45
|
+
#
|
46
|
+
# Disconnected may be called without calling connected
|
47
|
+
# Hence the check if timer is nil here
|
48
|
+
#
|
49
|
+
@polling_timer.cancel unless @polling_timer.nil?
|
50
|
+
@polling_timer = nil
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def call_preset(number)
|
55
|
+
if number < 0 || number > 32
|
56
|
+
number = 0 # Current configuration
|
57
|
+
end
|
58
|
+
send("#{number}.") # No Carriage return for presents
|
59
|
+
# Response: Rpr#{number}
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# Input control
|
64
|
+
#
|
65
|
+
def adjust_gain(input, value) # \e == 0x1B == ESC key
|
66
|
+
input -= 1
|
67
|
+
do_send("\eG3000#{input}*#{value}AU")
|
68
|
+
# Response: DsG3000#{input}*#{value}
|
69
|
+
end
|
70
|
+
|
71
|
+
def adjust_gain_relative(input, value) # \e == 0x1B == ESC key
|
72
|
+
input -= 1
|
73
|
+
current = do_send("\eG3000#{input}AU", :emit => "mic#{input + 1}_gain")
|
74
|
+
do_send("\eG3000#{input}*#{current + (value * 10)}AU")
|
75
|
+
|
76
|
+
# Response: DsG3000#{input}*#{value}
|
77
|
+
end
|
78
|
+
|
79
|
+
def mute_input(input)
|
80
|
+
input -= 1
|
81
|
+
do_send("\eM3000#{input}*1AU")
|
82
|
+
# Response: DsM3000#{input}*1
|
83
|
+
end
|
84
|
+
|
85
|
+
def unmute_input(input)
|
86
|
+
input -= 1
|
87
|
+
do_send("\eM3000#{input}*0AU")
|
88
|
+
# Response: DsM3000#{input}*0
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
#
|
93
|
+
# Group control
|
94
|
+
#
|
95
|
+
def mute_group(group)
|
96
|
+
do_send("\eD#{group}*1GRPM")
|
97
|
+
# Response: GrpmD#{group}*+00001
|
98
|
+
end
|
99
|
+
|
100
|
+
def unmute_group(group)
|
101
|
+
do_send("\eD#{group}*0GRPM")
|
102
|
+
# Response: GrpmD#{group}*+00000
|
103
|
+
end
|
104
|
+
|
105
|
+
def volume(group, value) # \e == 0x1B == ESC key
|
106
|
+
do_send("\eD#{group}*#{value * 10}*GRPM")
|
107
|
+
# Response: GrpmD#{group}*#{value}*GRPM
|
108
|
+
end
|
109
|
+
|
110
|
+
def volume_relative(group, value) # \e == 0x1B == ESC key
|
111
|
+
|
112
|
+
if value < 0
|
113
|
+
value = -value
|
114
|
+
do_send("\eD#{group}*#{value * 10}-GRPM")
|
115
|
+
else
|
116
|
+
do_send("\eD#{group}*#{value * 10}+GRPM")
|
117
|
+
end
|
118
|
+
# Response: GrpmD#{group}*#{value}*GRPM
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
def response_delimiter
|
123
|
+
[0x0D, 0x0A] # Used to interpret the end of a message
|
124
|
+
end
|
125
|
+
|
126
|
+
#
|
127
|
+
# Sends copyright information
|
128
|
+
# Then sends password prompt
|
129
|
+
#
|
130
|
+
def received(data, resolve, command)
|
131
|
+
logger.debug "Extron DSP 44 sent #{data}"
|
132
|
+
|
133
|
+
if command.nil? && data =~ /Copyright/i
|
134
|
+
device_ready
|
135
|
+
else
|
136
|
+
case data[0..2].to_sym
|
137
|
+
when :Grp # Mute or Volume
|
138
|
+
data = data.split('*')
|
139
|
+
if data[1][0] == '+' # mute
|
140
|
+
self["ouput#{data[0][5..-1].to_i}_mute"] = data[1][-1] == '1' # 1 == true
|
141
|
+
else
|
142
|
+
self["ouput#{data[0][5..-1].to_i}_volume"] = data[1].to_i
|
143
|
+
end
|
144
|
+
when :DsG # Input gain
|
145
|
+
self["input#{data[7].to_i + 1}_gain"] = data[9..-1].to_i
|
146
|
+
when :DsM # Input Mute
|
147
|
+
self["input#{data[7].to_i + 1}_mute"] = data[-1] == '1' # 1 == true
|
148
|
+
when :Rpr # Preset called
|
149
|
+
logger.debug "Extron DSP called preset #{data[3..-1]}"
|
150
|
+
else
|
151
|
+
if data == 'E22' # Busy! We should retry this one
|
152
|
+
command[:delay_on_receive] = 1 unless command.nil?
|
153
|
+
return :failed
|
154
|
+
elsif data[0] == 'E'
|
155
|
+
logger.info "Extron Error #{ERRORS[data[1..2].to_i]}"
|
156
|
+
logger.info "- for command #{command[:data]}" unless command.nil?
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
return :success
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
private
|
166
|
+
|
167
|
+
|
168
|
+
ERRORS = {
|
169
|
+
10 => 'Invalid command',
|
170
|
+
11 => 'Invalid preset',
|
171
|
+
12 => 'Invalid port number',
|
172
|
+
13 => 'Invalid parameter (number is out of range)',
|
173
|
+
14 => 'Not valid for this configuration',
|
174
|
+
17 => 'System timed out',
|
175
|
+
23 => 'Checksum error (for file uploads)',
|
176
|
+
24 => 'Privilege violation',
|
177
|
+
25 => 'Device is not present',
|
178
|
+
26 => 'Maximum connections exceeded',
|
179
|
+
27 => 'Invalid event number',
|
180
|
+
28 => 'Bad filename or file not found'
|
181
|
+
}
|
182
|
+
|
183
|
+
|
184
|
+
def device_ready
|
185
|
+
do_send("\e3CV") # Verbose mode and tagged responses
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
def do_send(data, options = {})
|
192
|
+
send(data << 0x0D, options)
|
193
|
+
end
|
194
194
|
end
|
195
195
|
|
@@ -25,188 +25,199 @@ module Extron::Mixer; end
|
|
25
25
|
|
26
26
|
|
27
27
|
class Extron::Mixer::Dmp64
|
28
|
-
|
28
|
+
include ::Orchestrator::Constants
|
29
29
|
include ::Orchestrator::Transcoder
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
31
|
+
|
32
|
+
def on_load
|
33
|
+
#
|
34
|
+
# Setup constants
|
35
|
+
#
|
36
|
+
self[:output_volume_max] = 2168
|
37
|
+
self[:output_volume_min] = 1048
|
38
|
+
self[:mic_gain_max] = 2298
|
39
|
+
self[:mic_gain_min] = 1698
|
40
|
+
|
41
|
+
config({
|
42
|
+
:clear_queue_on_disconnect => true # Clear the queue as we may need to send login
|
43
|
+
})
|
44
|
+
end
|
45
|
+
|
46
|
+
def connected
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def disconnected
|
51
|
+
#
|
52
|
+
# Disconnected may be called without calling connected
|
53
|
+
# Hence the check if timer is nil here
|
54
|
+
#
|
55
|
+
@polling_timer.cancel unless @polling_timer.nil?
|
56
|
+
@polling_timer = nil
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def call_preset(number)
|
61
|
+
if number < 0 || number > 32
|
62
|
+
number = 0 # Current configuration
|
63
|
+
end
|
64
|
+
send("#{number}.") # No Carriage return for presents
|
65
|
+
# Response: Rpr#{number}
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# Input control
|
70
|
+
#
|
71
|
+
def adjust_gain(mic, value) # \e == 0x1B == ESC key
|
72
|
+
do_send("\eG4010#{mic}*#{value}AU")
|
73
|
+
# Response: DsG4010#{mic}*#{value}
|
74
|
+
end
|
75
|
+
|
76
|
+
def adjust_gain_relative(mic, value) # \e == 0x1B == ESC key
|
77
|
+
current = do_send("\eG4010#{mic}AU", :emit => "mic#{mic}_gain")
|
78
|
+
do_send("\eG4010#{mic}*#{current + (value * 10)}AU")
|
79
|
+
|
80
|
+
# Response: DsG4010#{mic}*#{value}
|
81
|
+
end
|
82
|
+
|
83
|
+
def mute_mic(mic)
|
84
|
+
do_send("\eM4000#{mic}*1AU") # 4000 (input gain), 4010 (pre-mixer gain)
|
85
|
+
# Response: DsM4010#{mic}*1
|
86
|
+
end
|
87
|
+
|
88
|
+
def unmute_mic(mic)
|
89
|
+
do_send("\eM4000#{mic}*0AU")
|
90
|
+
# Response: DsM4010#{mic}*0
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
#
|
95
|
+
# Output control
|
96
|
+
#
|
97
|
+
def mute(group, value = true, index = nil)
|
98
|
+
group = index if index
|
99
|
+
val = is_affirmative?(value) ? 1 : 0
|
100
|
+
|
101
|
+
faders = group.is_a?(Array) ? group : [group]
|
102
|
+
faders.each do |fad|
|
103
|
+
do_send("\eD#{fad}*#{val}GRPM", :group_type => :mute)
|
104
|
+
end
|
105
|
+
# Response: GrpmD#{group}*+00001
|
106
|
+
end
|
107
|
+
|
108
|
+
def unmute(group, index = nil)
|
109
|
+
mute(group, false, index)
|
110
|
+
#do_send("\eD#{group}*0GRPM", :group_type => :mute)
|
111
|
+
# Response: GrpmD#{group}*+00000
|
112
|
+
end
|
113
|
+
|
114
|
+
def fader(group, value, index = nil) # \e == 0x1B == ESC key
|
115
|
+
faders = group.is_a?(Array) ? group : [group]
|
116
|
+
faders.each do |fad|
|
117
|
+
do_send("\eD#{fad}*#{value}GRPM", :group_type => :volume)
|
118
|
+
end
|
119
|
+
|
120
|
+
# Response: GrpmD#{group}*#{value}*GRPM
|
121
|
+
end
|
122
|
+
|
123
|
+
def fader_status(group, type)
|
124
|
+
do_send("\eD#{group}GRPM", :group_type => type)
|
125
|
+
end
|
126
|
+
|
127
|
+
def fader_relative(group, value) # \e == 0x1B == ESC key
|
128
|
+
if value < 0
|
129
|
+
value = -value
|
130
|
+
do_send("\eD#{group}*#{value}-GRPM")
|
131
|
+
else
|
132
|
+
do_send("\eD#{group}*#{value}+GRPM")
|
133
|
+
end
|
134
|
+
# Response: GrpmD#{group}*#{value}*GRPM
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def response_delimiter
|
139
|
+
[0x0D, 0x0A] # Used to interpret the end of a message
|
140
|
+
end
|
141
|
+
|
142
|
+
#
|
143
|
+
# Sends copyright information
|
144
|
+
# Then sends password prompt
|
145
|
+
#
|
146
|
+
def received(data, resolve, command)
|
147
|
+
logger.debug "Extron DSP sent #{data}"
|
148
|
+
|
149
|
+
if command.nil? && data =~ /Copyright/i
|
150
|
+
pass = setting(:password)
|
151
|
+
if pass.nil?
|
152
|
+
device_ready
|
153
|
+
else
|
154
|
+
do_send(pass) # Password set
|
155
|
+
end
|
156
|
+
elsif data =~ /Login/i
|
157
|
+
device_ready
|
158
|
+
else
|
159
|
+
case data[0..2].to_sym
|
160
|
+
when :Grp # Mute or Volume
|
161
|
+
data = data.split('*')
|
162
|
+
if command.present? && command[:group_type] == :mute
|
163
|
+
self["fader#{data[0][5..-1].to_i}_mute"] = data[1][-1] == '1' # 1 == true
|
164
|
+
elsif command.present? && command[:group_type] == :volume
|
165
|
+
self["fader#{data[0][5..-1].to_i}"] = data[1].to_i
|
166
|
+
else
|
167
|
+
return :failed
|
168
|
+
end
|
169
|
+
when :DsG # Mic gain
|
170
|
+
self["mic#{data[7]}_gain"] = data[9..-1].to_i
|
171
|
+
when :DsM # Mic Mute
|
172
|
+
self["mic#{data[7]}_mute"] = data[-1] == '1' # 1 == true
|
173
|
+
when :Rpr # Preset called
|
174
|
+
logger.debug "Extron DSP called preset #{data[3..-1]}"
|
175
|
+
else
|
176
|
+
if data == 'E22' # Busy! We should retry this one
|
177
|
+
command[:delay_on_receive] = 1 unless command.nil?
|
178
|
+
return :failed
|
179
|
+
elsif data[0] == 'E'
|
180
|
+
logger.info "Extron Error #{ERRORS[data[1..2].to_i]}"
|
181
|
+
logger.info "- for command #{command[:data]}" unless command.nil?
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
return :success
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
private
|
191
|
+
|
192
|
+
|
193
|
+
ERRORS = {
|
194
|
+
1 => 'Invalid input number (number is too large)',
|
195
|
+
12 => 'Invalid port number',
|
196
|
+
13 => 'Invalid parameter (number is out of range)',
|
197
|
+
14 => 'Not valid for this configuration',
|
198
|
+
17 => 'System timed out',
|
199
|
+
23 => 'Checksum error (for file uploads)',
|
200
|
+
24 => 'Privilege violation',
|
201
|
+
25 => 'Device is not present',
|
202
|
+
26 => 'Maximum connections exceeded',
|
203
|
+
27 => 'Invalid event number',
|
204
|
+
28 => 'Bad filename or file not found'
|
205
|
+
}
|
206
|
+
|
207
|
+
|
208
|
+
def device_ready
|
209
|
+
do_send("\e3CV") # Verbose mode and tagged responses
|
210
|
+
@polling_timer = schedule.every('2m') do
|
211
|
+
logger.debug "-- Extron Maintaining Connection"
|
212
|
+
send('Q', :priority => 0) # Low priority poll to maintain connection
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
def do_send(data, options = {})
|
220
|
+
send(data << 0x0D, options)
|
221
|
+
end
|
211
222
|
end
|
212
223
|
|