Difference between revisions of "User:Bulek"

From LinuxMCE
Jump to: navigation, search
Line 1: Line 1:
 
<pre><nowiki>
 
<pre><nowiki>
Power
+
Power
 
#193 Off
 
#193 Off
SendMultiZoneCommand(cmd, ["@PWR:1", "@MSP:1", "@MAM:2"]) #SendMultiZoneCommand(cmd, ["@AMT:2", "@MSP:1", "@MAM:2"])
+
#SendMultiZoneCommand(cmd, ["@PWR:1", "@MSP:1", "@MAM:2"]) SendMultiZonePowerOffCommand(cmd, ["@AMT:2", "@MSP:1", "@MAM:2"])
  
 
#192 On
 
#192 On
SendMultiZoneCommand(cmd, ["@PWR:2", "@MSP:2", "@MAM:1"]) #SendMultiZoneCommand(cmd, ["@AMT:1", "@MSP:2", "@MAM:1"])
+
#SendMultiZoneCommand(cmd, ["@PWR:2", "@MSP:2", "@MAM:1"]) SendMultiZonePowerOnCommand(cmd, ["@AMT:1", "@MSP:2", "@MAM:1"])
  
Inputs
+
#194 Toggle Power
#169 AM
+
SendMultiZoneCommand(cmd, ["@SRC:H", "@MSC:H", "@MSC:H"])
+
  
 +
Inputs
 
#164 Aux
 
#164 Aux
 
SendMultiZoneCommand(cmd, ["@SRC:9", "@MSC:9", "@MSC:9"])
 
SendMultiZoneCommand(cmd, ["@SRC:9", "@MSC:9", "@MSC:9"])
Line 47: Line 47:
 
#891 All Ch Stereo
 
#891 All Ch Stereo
 
#<$"@SUR:0H\r"$> SendIrCommand("@SUR:0H")
 
#<$"@SUR:0H\r"$> SendIrCommand("@SUR:0H")
 
Disk Handle
 
#48 Eject Disk
 
 
 
General
 
#190 Enter/Go
 
 
  
 
Internal
 
Internal
 
#373 Private Method Listing
 
#373 Private Method Listing
def ReceiveReportCommand() buff = conn_.RecvDelimited("\r", 1000) print "Cmd response from Marantz: " + buff + "\n" log("Cmd response from Marantz: " + buff + "\n") end def SendIrCommand(command) conn_.Send(command+ "\r") log("Sending Command: " + command + "\n") ReceiveReportCommand() end def log(word) logTime = Time.now timeStr = logTime.strftime("%d-%m-%Y %H:%M:%S ") print( timeStr + " " + word) if( $logFile.nil? == false ) then $logFile.print( timeStr + " " + word ) $logFile.flush() end end def SendMultiZoneCommand(cmd, commandsArray, commandParam="") log("Got Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) log("Determine zone for command : " + zone.to_s + "\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) else log("SendMultiZoneCommand: invalid zone " + zone.to_s) end end def GetZone(deviceDestination) if( device_.mapDevice_PortChannel_.has_key?(deviceDestination) and device_.mapDevice_PortChannel_[deviceDestination] != nil and !device_.mapDevice_PortChannel_[deviceDestination].empty? ) return device_.mapDevice_PortChannel_[deviceDestination].to_i end return 0 end def ShowZones() log("####### Dev 2 PortChanel") device_.mapDevice_PortChannel_.each do |key, value| log(key.to_s + " => " + value.to_s) end log("======= PortChanel 2 Dev") device_.mapPortChannel_Device_.each do |key, value| log(key.to_s + " => " + value.to_s) end end
+
def ReceiveReportCommand() buff = conn_.RecvDelimited("\r", 1000) log("Cmd response from Marantz: " + buff + "\n") end def SendIrCommand(command) log("SendIrCommand: " + command + "\n") conn_.Send(command+ "\r") log("Sending Command: " + command + "\n") ReceiveReportCommand() end def log_older(word) logTime = Time.now timeStr = logTime.strftime("%d-%m-%Y %H:%M:%S ") print( timeStr + " " + word) if( $logFile.nil? == false ) then $logFile.print( timeStr + " " + word ) $logFile.flush() end end def log(line) # $log = File.open("/var/log/pluto/" + device_.devid_.to_s + "_Generic_Serial_Device.log", "a") $log = File.open("/var/log/pluto/Marantz_SR5600.log", "a") logTime = Time.now timeStr = logTime.strftime("%d-%m-%Y %H:%M:%S ") $log.puts timeStr + "(***):" + line.to_s $log.close end def SendMultiZoneCommand(cmd, commandsArray, commandParam="") log("Got Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) zone_desc=device_.childdevices_[cmd.devidto_].devdata_[186] log("Determine zone for command : " + zone_desc + "[" + zone.to_s + "]\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) else log("SendMultiZoneCommand: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end end def SendMultiZonePowerOnCommand(cmd, commandsArray, commandParam="") #It will Unmute Zone first and then see also global power should be turned on... log("Got Power On Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) zone_desc=device_.childdevices_[cmd.devidto_].devdata_[186] log("Determine zone for command : " + zone_desc + "[" + zone.to_s + "]\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) $ZoneStatus[zone.to_s] = 'ON' log("*** Setting zone : " + zone_desc + "[" + zone.to_s + "] to ON\n") ShowZones() if ($DevicePower == 0) SendIrCommand("@PWR:2") end $DevicePower = 1 elsif (zone == -1) if ($DevicePower == 0) SendIrCommand("@PWR:2") end $DevicePower = 1 log("####### Powering device On\n") else log("SendMultiZonePowerOnCommand: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end end def SendMultiZonePowerOffCommand(cmd, commandsArray, commandParam="") #It will Mute Zone first and then see if also global power can be turned off... log("Got Power Off Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) zone_desc=device_.childdevices_[cmd.devidto_].devdata_[186] log("Determine zone for command : " + zone_desc + "[" + zone.to_s + "]\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) $ZoneStatus[zone.to_s] = 'OFF' log("*** Setting zone : " + zone_desc + "[" + zone.to_s + "] to OFF\n") ShowZones() if (($ZoneStatus["0"] == 'OFF') and ($ZoneStatus["1"] == 'OFF') and ($ZoneStatus["2"] == 'OFF')) SendIrCommand("@PWR:1") $DevicePower = 0 log("####### All zones are muted - device is powered Off\n") end else log("SendMultiZonePowerOffCommand: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end end def GetZone(deviceDestination) if( device_.mapDevice_PortChannel_.has_key?(deviceDestination) and device_.mapDevice_PortChannel_[deviceDestination] != nil and !device_.mapDevice_PortChannel_[deviceDestination].empty? ) return device_.mapDevice_PortChannel_[deviceDestination].to_i end return -1 end def ShowZonesDebug() log("####### Dev 2 PortChanel\n") device_.mapDevice_PortChannel_.each do |key, value| log(key.to_s + " => " + value.to_s + "\n") end log("======= PortChanel 2 Dev\n") device_.mapPortChannel_Device_.each do |key, value| log(key.to_s + " => " + value.to_s+ "\n") end end def ShowZonesInitialVolumes() log("####### Show Initial Volume Levels for zones\n") device_.mapDevice_PortChannel_.each do |key, value| volume = device_.childdevices_[key].devdata_[208] log("Zone " + value.to_s + " => " + volume.to_s + "\n") SetVolumeInZone(volume,value) end end def ShowZones() temp = "####### Zones Status : " device_.mapDevice_PortChannel_.each do |key, value| temp = temp + " | Zone " + value.to_s + " => " + $ZoneStatus[value] end temp = temp + "\n" log(temp) end def SetZones(state) log("####### Setting all zones to " + state + "\n") device_.mapDevice_PortChannel_.each do |key, value| $ZoneStatus[value] = state log("Zone " + value.to_s + " => " + state + "\n") end end def InitZones() log("####### Initializing all zones to OFF\n") device_.mapDevice_PortChannel_.each do |key, value| $ZoneStatus[value] = 'OFF' log("Zone " + value.to_s + " => " + $ZoneStatus[value] + "\n") end log("####### Print $ZoneStatus Hash:\n") $ZoneStatus.each do |key, value| log("Zone " + key.to_s + " => " + value.to_s + "\n") end end def SetVolumeInZone(level,zone) # Sets Normalized Volume Level (0..100) in certain zone log("SetVolumeInZone: volume: " + level.to_s + " => Zone: " + zone + "\n") if ( zone == "0") log("SetVolumeInZone0: volume: " + level.to_s + " => Zone: " + zone + "\n") new_level = DeNormalizeVolume_MainZone(level.to_i) log("SetVolumeInZone00: volume: " + level.to_s + " => Zone: " + zone + "\n") temp_str="@VOL:0"+new_level.to_s; log("SetVolumeInZone: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) elsif ( zone == "1") log("SetVolumeInZone1: volume: " + level.to_s + " => Zone: " + zone + "\n") new_level = DeNormalizeVolume_OtherZone(level.to_i) log("SetVolumeInZone11: volume: " + level.to_s + " => Zone: " + zone + "\n") temp_str="@MSV:0"+new_level.to_s; log("SetVolumeInZone: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) elsif ( zone == "2") log("SetVolumeInZone2: volume: " + level.to_s + " => Zone: " + zone + "\n") new_level = DeNormalizeVolume_OtherZone(level.to_i) # log("SetVolumeInZone22: volume: " + level + " => Zone: " + zone + "\n") temp_str="@MVL:0"+new_level.to_s; log("SetVolumeInZone: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) else log("SetVolumeInZone: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end log("SetVolumeInZone End: volume: " + level.to_s + " => Zone: " + zone + "\n") end def NormalizeVolume_MainZone(level) # Normalizes Marantz Volume Level (-99..+10) to 0-100 boundaries for Main Zone temp = (level+100)/110.0*100.0 log("Normalizing Main Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end def NormalizeVolume_OtherZone(level) # Normalizes Marantz Volume Level to 0-100 boundaries for Second Zone (-90..0) temp = ((level+90.0)/90.0)*100.0 log("Normalizing Other Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end def DeNormalizeVolume_MainZone(level) # DeNormalizes volume level in 0-100 boundaries to Marantz Volume Level (-99..+10) for Main Zone temp = (level/100.0)*110.0-99 log("DeNormalizing Main Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end def DeNormalizeVolume_OtherZone(level) # DeNormalizes volume level in 0-100 boundaries to Marantz Volume Level (-90..0) for Other Zone temp = ((level/100.0)*90.0)-90.0 log("DeNormalizing Other Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end
  
 
#351 Process IDLE
 
#351 Process IDLE
+
#ShowZonesDebug() ShowZones()
  
 
#350 Process Incoming Data
 
#350 Process Incoming Data
Line 67: Line 59:
  
 
#355 Process Initialize
 
#355 Process Initialize
$logFile = File.new("/var/log/pluto/Marantz_SR5600.log", "w") log("Initializing Marantz GSD Device\n") #<$"@AST:F\r"$> # max level of feedback SendIrCommand("@AST:F") #<$"@MPW:2\r"$> # multi room always on SendIrCommand("@MPW:2") #<$"@MSP:1\r"$> # turn multi room speakers off by default SendIrCommand("@MSP:1") #<$"@MAM:2\r"$> # mute multi room line out by default SendIrCommand("MAM:2") #<$"@VOL:0-20\r"$> # default main volume -20 SendIrCommand("@VOL:0-20") #<$"@MSV:0-60\r"$> # default multi speaker volume SendIrCommand("@MSV:0-60") #<$"@MVL:0-60\r"$> # default multi room line out volume SendIrCommand("@MVL:0-60") log("Initialization of Marantz GSD Device finished !!!!\n")
+
$DevicePower = 1 SendIrCommand("@PWR:2") log("Initializing Marantz GSD Device\n") SendIrCommand("@AST:F") # max level of feedback SendIrCommand("@MPW:2") # multi room always on SendIrCommand("@MSP:1") # turn multi room speakers off by default SendIrCommand("@MAM:2") # mute multi room line out by default SendIrCommand("@VOL:0-20") # default main volume -20 SendIrCommand("@MSV:0-60") # default multi speaker volume SendIrCommand("@MVL:0-60") # default multi room line out volume $ZoneStatus = Hash.new() InitZones() ShowZonesInitialVolumes() #$DevicePower = 0 #SendIrCommand("@PWR:1") log("Initialization of Marantz GSD Device finished - Device is powered off!!!!\n")
  
 
#384 Process Receive Command For Child
 
#384 Process Receive Command For Child
Line 73: Line 65:
  
 
#356 Process Release
 
#356 Process Release
log("Shutting down Marantz GSD Device\n") SendIrCommand("@MAM:2") SendIrCommand("@MSP:1") log("Sending Marantz : Power Off: PWR:1\n") #<$"@PWR:1\r"</s></s>$> SendIrCommand("@PWR:1")
+
log("Shutting down Marantz GSD Device\n") SendIrCommand("@MAM:2") SendIrCommand("@MSP:1") log("Sending Marantz : Power Off: PWR:1\n") SendIrCommand("@PWR:1")
  
 
Misc
 
Misc
 
#587 Preset/Prog/Freq
 
#587 Preset/Prog/Freq
identifier = cmd.params_[216] # Main volume "TFQ:0xxxxx" from 08700 till + 10800 # Multiroom Frequency “MTF:0xxxxx“ from 08700 till + 10800 # Multiroom Speakers “MTF:0xxxxx“ from 08700 till + 10800 # switch to tuner mode first SendMultiZoneCommand(cmd, ["@SRC:G", "@MSC:G", "@MSC:G"]) # tune to desired frequency SendMultiZoneCommand(cmd, ["@TFQ:0"+identifier, "@MTF:0"+identifier, "@MTF:0"+identifier]) log("Sending Marantz : Setting tuner frequency to "+identifier+"\n")
+
identifier = cmd.params_[216] # Main Frequency "TFQ:0xxxxx" from 08700 till + 10800 # Multiroom Frequency “MTF:0xxxxx“ from 08700 till + 10800 # switch to tuner mode first SendMultiZoneCommand(cmd, ["@SRC:G", "@MSC:G", "@MSC:G"]) # tune to desired frequency SendMultiZoneCommand(cmd, ["@TFQ:0"+identifier, "@MTF:0"+identifier, "@MTF:0"+identifier]) log("Sending Marantz : Setting tuner frequency to "+identifier+"\n")
 
+
On-Screen Menu Navig
+
#240 Back / Prior Menu
+
+
 
+
#225 Display
+
+
 
+
#368 Help
+
+
 
+
#86 Menu (Show Menu)
+
+
 
+
#201 Move Down
+
+
 
+
#202 Move Left
+
+
 
+
#203 Move Right
+
+
 
+
#200 Move Up
+
+
  
 
Simple Control
 
Simple Control
#92 Pause
 
 
 
#139 Play
 
 
 
#102 Record
 
 
 
 
#64 Skip Back - Channel/Track Lower
 
#64 Skip Back - Channel/Track Lower
 
 
  
 
#63 Skip Fwd - Channel/Track Greater
 
#63 Skip Fwd - Channel/Track Greater
 
 
#95 Stop
 
 
 
  
Line 128: Line 83:
  
 
#313 Set Volume
 
#313 Set Volume
level = cmd.params_[76] # Main volume “VOL:0xxx” from - 99 till + 18 # Multiroom Speakers "MSV:0xxx" from - 99 till + 0 # Multiroom Speakers “MVL:0xxx” from - 99 till + 0 SendMultiZoneCommand(cmd, ["@VOL:0"+level, "@MSV:0"+level, "@MVL:0"+level]) log("Sending Marantz : Set Volume Level to "+level+"\n")
+
level = cmd.params_[76] # Main volume “VOL:0xxx” from - 99 till + 18 # Multiroom Speakers "MSV:0xxx" from - 99 till + 0 # Multiroom Speakers “MVL:0xxx” from - 99 till + 0 zone = GetZone(cmd.devidto_) log("313:Set Volume Command: Got Cmd with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + " | Zone : " + zone.to_s + "\n") if ( zone == 0) new_level = DeNormalizeVolume_MainZone(level.to_i) temp_str = "@VOL:0"+new_level.to_s log("SetVolumeCommand: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) elsif ( zone == 1) new_level = DeNormalizeVolume_OtherZone(level.to_i) temp_str = "@MSV:0"+new_level.to_s SendIrCommand(temp_str) elsif ( zone == 2) new_level = DeNormalizeVolume_OtherZone(level.to_i) temp_str = "@MVL:0"+new_level.to_s log("SetVolumeCommand: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) else log("SetVolumeCommand: invalid zone " + zone.to_s + ":" + zone.to_i + ". Send commands only to valid child devices!!!\n") end
  
 
#90 Vol Down
 
#90 Vol Down
Line 143: Line 98:
 
 
  
#98 Slow Scan Back
+
DSP Modes
+
 
+
#99 Slow Scan Forward
+
+
 
+
DSP ModesDSP Mode commands not implemented: Dolby Digital, DTS Surround, Surround (Click to add)
+
 
+
 
+
 
+
def ReceiveReportCommand()
+
buff = conn_.RecvDelimited("\r", 1000)
+
print "Cmd response from Marantz: " + buff + "\n"
+
log("Cmd response from Marantz: " + buff + "\n")
+
end
+
 
+
def SendIrCommand(command)
+
conn_.Send(command+ "\r")
+
        log("Sending Command: " + command + "\n")
+
ReceiveReportCommand()
+
end
+
 
+
def log(word)
+
logTime = Time.now
+
timeStr = logTime.strftime("%d-%m-%Y  %H:%M:%S  ")
+
 
+
print( timeStr + " " + word)
+
if( $logFile.nil? == false ) then
+
$logFile.print( timeStr + " " + word )
+
$logFile.flush()
+
end
+
end
+
 
+
def SendMultiZoneCommand(cmd, commandsArray, commandParam="")
+
        log("Got Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n")
+
zone = GetZone(cmd.devidto_)
+
if( zone >= 0 and zone < commandsArray.size )
+
log("Determine zone for command : " + zone.to_s + "\n")
+
SendIrCommand(commandsArray[zone] + commandParam.to_s)
+
else
+
log("SendMultiZoneCommand: invalid zone " + zone.to_s)
+
end
+
end
+
 
+
def GetZone(deviceDestination)
+
if( device_.mapDevice_PortChannel_.has_key?(deviceDestination) and
+
device_.mapDevice_PortChannel_[deviceDestination] != nil and
+
!device_.mapDevice_PortChannel_[deviceDestination].empty? )
+
return device_.mapDevice_PortChannel_[deviceDestination].to_i
+
end
+
+
return 0
+
end
+
 
+
def ShowZones()
+
log("####### Dev 2 PortChanel")
+
device_.mapDevice_PortChannel_.each do |key, value|
+
log(key.to_s + " => " + value.to_s)
+
end
+
+
log("======= PortChanel 2 Dev")
+
device_.mapPortChannel_Device_.each do |key, value|
+
log(key.to_s + " => " + value.to_s)
+
end
+
end
+
 
+
 
+
buff = conn_.RecvDelimited("\r", 1000)
+
print "Info from Marantz: " + buff + "\n"
+
log("Info from Marantz: " + buff + "\n")
+
 
+
 
+
$logFile = File.new("/var/log/pluto/Marantz_SR5600.log", "w")
+
log("Initializing Marantz GSD Device\n")
+
 
+
 
+
#<$"@AST:F\r"$> # max level of feedback
+
SendIrCommand("@AST:F")
+
 
+
 
+
#<$"@MPW:2\r"$> # multi room always on
+
SendIrCommand("@MPW:2")
+
 
+
#<$"@MSP:1\r"$> # turn multi room speakers off by default
+
SendIrCommand("@MSP:1")
+
 
+
#<$"@MAM:2\r"$> # mute multi room line out by default
+
SendIrCommand("MAM:2")
+
 
+
#<$"@VOL:0-20\r"$> # default main volume -20
+
SendIrCommand("@VOL:0-20")
+
#<$"@MSV:0-60\r"$> # default multi speaker volume
+
SendIrCommand("@MSV:0-60")
+
#<$"@MVL:0-60\r"$> # default multi room line out volume
+
SendIrCommand("@MVL:0-60")
+
 
+
log("Initialization of Marantz GSD Device finished !!!!\n")
+
 
+
 
+
 
+
 
+
 
+
log("Shutting down Marantz GSD Device\n")
+
SendIrCommand("@MAM:2")
+
SendIrCommand("@MSP:1")
+
log("Sending Marantz : Power Off:  PWR:1\n")
+
#<$"@PWR:1\r"</s></s>$>
+
SendIrCommand("@PWR:1")
+
 
+
 
+
 
+
identifier = cmd.params_[216]
+
# Main volume "TFQ:0xxxxx"  from 08700 till + 10800
+
# Multiroom Frequency “MTF:0xxxxx“  from 08700 till + 10800
+
# Multiroom Speakers “MTF:0xxxxx“  from 08700 till + 10800
+
 
+
# switch to tuner mode first
+
SendMultiZoneCommand(cmd, ["@SRC:G", "@MSC:G", "@MSC:G"])
+
 
+
# tune to desired frequency
+
SendMultiZoneCommand(cmd, ["@TFQ:0"+identifier, "@MTF:0"+identifier, "@MTF:0"+identifier])
+
log("Sending Marantz : Setting tuner frequency to "+identifier+"\n")
+
 
+
 
+
 
+
 
+
level = cmd.params_[76]
+
# Main volume “VOL:0xxx”  from - 99 till + 18
+
# Multiroom Speakers "MSV:0xxx"  from - 99 till + 0
+
# Multiroom Speakers “MVL:0xxx”  from - 99 till + 0
+
SendMultiZoneCommand(cmd, ["@VOL:0"+level, "@MSV:0"+level, "@MVL:0"+level])
+
log("Sending Marantz : Set Volume Level to "+level+"\n")
+
 
</nowiki></pre>
 
</nowiki></pre>

Revision as of 00:35, 26 June 2008

 Power
#193 Off
	#SendMultiZoneCommand(cmd, ["@PWR:1", "@MSP:1", "@MAM:2"]) SendMultiZonePowerOffCommand(cmd, ["@AMT:2", "@MSP:1", "@MAM:2"]) 	

#192 On
	#SendMultiZoneCommand(cmd, ["@PWR:2", "@MSP:2", "@MAM:1"]) SendMultiZonePowerOnCommand(cmd, ["@AMT:1", "@MSP:2", "@MAM:1"]) 	

#194 Toggle Power
		

Inputs
#164 Aux
	SendMultiZoneCommand(cmd, ["@SRC:9", "@MSC:9", "@MSC:9"]) 	

#172 Aux 2
	SendMultiZoneCommand(cmd, ["@SRC:A", "@MSC:A", "@MSC:A"]) 	

#162 CD
	SendMultiZoneCommand(cmd, ["@SRC:C", "@MSC:C", "@MSC:C"]) 	

#420 CDR
	SendMultiZoneCommand(cmd, ["@SRC:D", "@MSC:D", "@MSC:D"]) 	

#178 DSS
	SendMultiZoneCommand(cmd, ["@SRC:4", "@MSC:4", "@MSC:4"]) 	

#165 DVD
	SendMultiZoneCommand(cmd, ["@SRC:2", "@MSC:2", "@MSC:2"]) 	

#170 FM
	SendMultiZoneCommand(cmd, ["@SRC:G", "@MSC:G", "@MSC:G"]) 	

#160 Tape / Tape 1
	SendMultiZoneCommand(cmd, ["@SRC:E", "@MSC:E", "@MSC:E"]) 	

#166 Tuner
	SendMultiZoneCommand(cmd, ["@SRC:F", "@MSC:F", "@MSC:F"]) 	

#161 TV
	SendMultiZoneCommand(cmd, ["@SRC:1", "@MSC:1", "@MSC:1"]) 	

#282 VCR-1
	SendMultiZoneCommand(cmd, ["@SRC:3", "@MSC:3", "@MSC:3"]) 	

DSP Modes (Audio)
#891 All Ch Stereo
	#<$"@SUR:0H\r"$> SendIrCommand("@SUR:0H") 	

Internal
#373 Private Method Listing
	def ReceiveReportCommand() buff = conn_.RecvDelimited("\r", 1000) log("Cmd response from Marantz: " + buff + "\n") end def SendIrCommand(command) log("SendIrCommand: " + command + "\n") conn_.Send(command+ "\r") log("Sending Command: " + command + "\n") ReceiveReportCommand() end def log_older(word) logTime = Time.now timeStr = logTime.strftime("%d-%m-%Y %H:%M:%S ") print( timeStr + " " + word) if( $logFile.nil? == false ) then $logFile.print( timeStr + " " + word ) $logFile.flush() end end def log(line) # $log = File.open("/var/log/pluto/" + device_.devid_.to_s + "_Generic_Serial_Device.log", "a") $log = File.open("/var/log/pluto/Marantz_SR5600.log", "a") logTime = Time.now timeStr = logTime.strftime("%d-%m-%Y %H:%M:%S ") $log.puts timeStr + "(***):" + line.to_s $log.close end def SendMultiZoneCommand(cmd, commandsArray, commandParam="") log("Got Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) zone_desc=device_.childdevices_[cmd.devidto_].devdata_[186] log("Determine zone for command : " + zone_desc + "[" + zone.to_s + "]\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) else log("SendMultiZoneCommand: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end end def SendMultiZonePowerOnCommand(cmd, commandsArray, commandParam="") #It will Unmute Zone first and then see also global power should be turned on... log("Got Power On Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) zone_desc=device_.childdevices_[cmd.devidto_].devdata_[186] log("Determine zone for command : " + zone_desc + "[" + zone.to_s + "]\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) $ZoneStatus[zone.to_s] = 'ON' log("*** Setting zone : " + zone_desc + "[" + zone.to_s + "] to ON\n") ShowZones() if ($DevicePower == 0) SendIrCommand("@PWR:2") end $DevicePower = 1 elsif (zone == -1) if ($DevicePower == 0) SendIrCommand("@PWR:2") end $DevicePower = 1 log("####### Powering device On\n") else log("SendMultiZonePowerOnCommand: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end end def SendMultiZonePowerOffCommand(cmd, commandsArray, commandParam="") #It will Mute Zone first and then see if also global power can be turned off... log("Got Power Off Command with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + "\n") zone = GetZone(cmd.devidto_) if( zone >= 0 and zone < commandsArray.size ) zone_desc=device_.childdevices_[cmd.devidto_].devdata_[186] log("Determine zone for command : " + zone_desc + "[" + zone.to_s + "]\n") SendIrCommand(commandsArray[zone] + commandParam.to_s) $ZoneStatus[zone.to_s] = 'OFF' log("*** Setting zone : " + zone_desc + "[" + zone.to_s + "] to OFF\n") ShowZones() if (($ZoneStatus["0"] == 'OFF') and ($ZoneStatus["1"] == 'OFF') and ($ZoneStatus["2"] == 'OFF')) SendIrCommand("@PWR:1") $DevicePower = 0 log("####### All zones are muted - device is powered Off\n") end else log("SendMultiZonePowerOffCommand: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end end def GetZone(deviceDestination) if( device_.mapDevice_PortChannel_.has_key?(deviceDestination) and device_.mapDevice_PortChannel_[deviceDestination] != nil and !device_.mapDevice_PortChannel_[deviceDestination].empty? ) return device_.mapDevice_PortChannel_[deviceDestination].to_i end return -1 end def ShowZonesDebug() log("####### Dev 2 PortChanel\n") device_.mapDevice_PortChannel_.each do |key, value| log(key.to_s + " => " + value.to_s + "\n") end log("======= PortChanel 2 Dev\n") device_.mapPortChannel_Device_.each do |key, value| log(key.to_s + " => " + value.to_s+ "\n") end end def ShowZonesInitialVolumes() log("####### Show Initial Volume Levels for zones\n") device_.mapDevice_PortChannel_.each do |key, value| volume = device_.childdevices_[key].devdata_[208] log("Zone " + value.to_s + " => " + volume.to_s + "\n") SetVolumeInZone(volume,value) end end def ShowZones() temp = "####### Zones Status : " device_.mapDevice_PortChannel_.each do |key, value| temp = temp + " | Zone " + value.to_s + " => " + $ZoneStatus[value] end temp = temp + "\n" log(temp) end def SetZones(state) log("####### Setting all zones to " + state + "\n") device_.mapDevice_PortChannel_.each do |key, value| $ZoneStatus[value] = state log("Zone " + value.to_s + " => " + state + "\n") end end def InitZones() log("####### Initializing all zones to OFF\n") device_.mapDevice_PortChannel_.each do |key, value| $ZoneStatus[value] = 'OFF' log("Zone " + value.to_s + " => " + $ZoneStatus[value] + "\n") end log("####### Print $ZoneStatus Hash:\n") $ZoneStatus.each do |key, value| log("Zone " + key.to_s + " => " + value.to_s + "\n") end end def SetVolumeInZone(level,zone) # Sets Normalized Volume Level (0..100) in certain zone log("SetVolumeInZone: volume: " + level.to_s + " => Zone: " + zone + "\n") if ( zone == "0") log("SetVolumeInZone0: volume: " + level.to_s + " => Zone: " + zone + "\n") new_level = DeNormalizeVolume_MainZone(level.to_i) log("SetVolumeInZone00: volume: " + level.to_s + " => Zone: " + zone + "\n") temp_str="@VOL:0"+new_level.to_s; log("SetVolumeInZone: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) elsif ( zone == "1") log("SetVolumeInZone1: volume: " + level.to_s + " => Zone: " + zone + "\n") new_level = DeNormalizeVolume_OtherZone(level.to_i) log("SetVolumeInZone11: volume: " + level.to_s + " => Zone: " + zone + "\n") temp_str="@MSV:0"+new_level.to_s; log("SetVolumeInZone: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) elsif ( zone == "2") log("SetVolumeInZone2: volume: " + level.to_s + " => Zone: " + zone + "\n") new_level = DeNormalizeVolume_OtherZone(level.to_i) # log("SetVolumeInZone22: volume: " + level + " => Zone: " + zone + "\n") temp_str="@MVL:0"+new_level.to_s; log("SetVolumeInZone: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) else log("SetVolumeInZone: invalid zone " + zone.to_s + ". Send commands only to valid child devices!!!") end log("SetVolumeInZone End: volume: " + level.to_s + " => Zone: " + zone + "\n") end def NormalizeVolume_MainZone(level) # Normalizes Marantz Volume Level (-99..+10) to 0-100 boundaries for Main Zone temp = (level+100)/110.0*100.0 log("Normalizing Main Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end def NormalizeVolume_OtherZone(level) # Normalizes Marantz Volume Level to 0-100 boundaries for Second Zone (-90..0) temp = ((level+90.0)/90.0)*100.0 log("Normalizing Other Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end def DeNormalizeVolume_MainZone(level) # DeNormalizes volume level in 0-100 boundaries to Marantz Volume Level (-99..+10) for Main Zone temp = (level/100.0)*110.0-99 log("DeNormalizing Main Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end def DeNormalizeVolume_OtherZone(level) # DeNormalizes volume level in 0-100 boundaries to Marantz Volume Level (-90..0) for Other Zone temp = ((level/100.0)*90.0)-90.0 log("DeNormalizing Other Zone Volume Level from : " + level.to_s + " to " + temp.to_s + "\n") return temp.round end 	

#351 Process IDLE
	#ShowZonesDebug() ShowZones() 	

#350 Process Incoming Data
	buff = conn_.RecvDelimited("\r", 1000) print "Info from Marantz: " + buff + "\n" log("Info from Marantz: " + buff + "\n") 	

#355 Process Initialize
	$DevicePower = 1 SendIrCommand("@PWR:2") log("Initializing Marantz GSD Device\n") SendIrCommand("@AST:F") # max level of feedback SendIrCommand("@MPW:2") # multi room always on SendIrCommand("@MSP:1") # turn multi room speakers off by default SendIrCommand("@MAM:2") # mute multi room line out by default SendIrCommand("@VOL:0-20") # default main volume -20 SendIrCommand("@MSV:0-60") # default multi speaker volume SendIrCommand("@MVL:0-60") # default multi room line out volume $ZoneStatus = Hash.new() InitZones() ShowZonesInitialVolumes() #$DevicePower = 0 #SendIrCommand("@PWR:1") log("Initialization of Marantz GSD Device finished - Device is powered off!!!!\n") 	

#384 Process Receive Command For Child
		

#356 Process Release
	log("Shutting down Marantz GSD Device\n") SendIrCommand("@MAM:2") SendIrCommand("@MSP:1") log("Sending Marantz : Power Off: PWR:1\n") SendIrCommand("@PWR:1") 	

Misc
#587 Preset/Prog/Freq
	identifier = cmd.params_[216] # Main Frequency "TFQ:0xxxxx" from 08700 till + 10800 # Multiroom Frequency “MTF:0xxxxx“ from 08700 till + 10800 # switch to tuner mode first SendMultiZoneCommand(cmd, ["@SRC:G", "@MSC:G", "@MSC:G"]) # tune to desired frequency SendMultiZoneCommand(cmd, ["@TFQ:0"+identifier, "@MTF:0"+identifier, "@MTF:0"+identifier]) log("Sending Marantz : Setting tuner frequency to "+identifier+"\n") 	

Simple Control
#64 Skip Back - Channel/Track Lower
		

#63 Skip Fwd - Channel/Track Greater
		

Sound & Volume
#97 Mute
	SendMultiZoneCommand(cmd, ["@AMT:0", "@MSM:0", "@MAM:0"]) 	

#313 Set Volume
	level = cmd.params_[76] # Main volume “VOL:0xxx” from - 99 till + 18 # Multiroom Speakers "MSV:0xxx" from - 99 till + 0 # Multiroom Speakers “MVL:0xxx” from - 99 till + 0 zone = GetZone(cmd.devidto_) log("313:Set Volume Command: Got Cmd with ID: " + cmd.id_.to_s + " from: " + cmd.devidfrom_.to_s + " to: " + cmd.devidto_.to_s + " | Zone : " + zone.to_s + "\n") if ( zone == 0) new_level = DeNormalizeVolume_MainZone(level.to_i) temp_str = "@VOL:0"+new_level.to_s log("SetVolumeCommand: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) elsif ( zone == 1) new_level = DeNormalizeVolume_OtherZone(level.to_i) temp_str = "@MSV:0"+new_level.to_s SendIrCommand(temp_str) elsif ( zone == 2) new_level = DeNormalizeVolume_OtherZone(level.to_i) temp_str = "@MVL:0"+new_level.to_s log("SetVolumeCommand: About to send command :" + temp_str + "\n") SendIrCommand(temp_str) else log("SetVolumeCommand: invalid zone " + zone.to_s + ":" + zone.to_i + ". Send commands only to valid child devices!!!\n") end 	

#90 Vol Down
	SendMultiZoneCommand(cmd, ["@VOL:2", "@MSV:2", "@MVL:2"]) 	

#89 Vol Up
	SendMultiZoneCommand(cmd, ["@VOL:1", "@MSV:1", "@MVL:1"]) 	

Speed Ctrl
#125 Scan Back/Rewind
		

#93 Scan Fwd/Fast Fwd
		

DSP Modes