- Onkyo Integra Serial Control Protocol Ipv4 Problems
- Onkyo Integra Serial Control Protocol Ipv4 Address
Looking for a possibility to control my television via HDMI CEC with my Onkyo receiver i found the Excel sheet below. This is the latest version 1.24 of June 8th 2012 and contains all Onkyo ISCP commands and explanation of the ISCP protocol. ISCP stands for Integra Serial Communication Protocol. Onkyo/Integra receivers are another example of devices which use the identical protocol for both serial and network control. Make sure you create a network gateway (not HTTP), on port 20554. The JVC also needs a repeating command sent to it to keep the connection open, or it will drop. * A class that wraps the Onkyo/Integra Serial Control Protocol (eISCP) messages that can be sent in a packet. * This class uses class constants and commandMaps to help handling of the many iscp Commands. Then just set the Onkyo volume once and forget it, and use your Mac and iPhone to control Airplay output levels. You'd probably want Airfoil from Rogue Amoeba ($29) as well if you listen to audio on the Mac on sources other than iTunes. For use with all RS-232 or IP compatible control systems. Onkyo Receivers - Device RS-232 & Network IP Protocol Sheets. Return to the Onkyo Device RS-232 & Network. It has a link to the latest version (v1.21 dated 2011) of Onkyo's protocol doc, and the full source of my Java app. Integra Serial Control Protocol - ISCP.
Home > Tom's Ideas And Notes >
Java eISCP - Integra Serial Control Protocol
Onkyo Integra Serial Control Protocol Ipv4 Problems
posted Nov 1, 2011, 9:45 PM by Tom Gutwin [ updated Dec 9, 2012, 11:19 AM]
Onkyo Integra Serial Control Protocol Ipv4 Address
I wanted to control my Onkyo AV receiver using a computer. Lucky for me, my Onkyo has a published serial control protocol that also works over Ethernet - eISCP. So off to the races!! I wrote a Java Implementation of the eISCP. UPDATE:
Onkyo's protocol doc is attached to this post below in the attachments section. This doc is version 1.21 dated 2011, I just got it from my dealer (Crutchfield.ca), great support! It appears to be newer than any other floating around the net and specifically references the 3008 and 5008 models. There are a few implementations that are floating around the internet - the one I found most useful was a python implementation at https://github.com/compbrain/Onkyo-TX-NR708-Control. It worked but was minimal, plus I wanted to wrap eISCP in a Java class that was robust and extendable. I wrote a simple java class that I plan to continue to expand its functionality: My Eiscp.java file is attached to this post below in the attachments section
While I was implementing the eISCP message packet I found some things that were unclear in the Onkyo protocol document. Specifically the data size part of the message - is actually the size of the entire message, not just the data part. See my comments in the code for details. Here is my code for the method that forms the data message. (full class is attached below) getEiscpMessage Method /** * Wraps a command in a eiscp data message (data characters). * * @param command must be one of the Strings from the eiscp.Eiscp.Command class. **/ public StringBuilder getEiscpMessage(String command) { StringBuilder sb = new StringBuilder(); int eiscpDataSize = command.length() + 2 ; // this is the eISCP data size int eiscpMsgSize = eiscpDataSize + 1 + 16 ; // this is the size of the entire eISCP msg /* This is where I construct the entire message character by character. Each char is represented by a 2 disgit hex value */ sb.append('ISCP'); // the following are all in HEX representing one char // 4 char Big Endian Header sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('10', 16)); // 4 char Big Endian data size sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('00', 16)); // the official ISCP docs say this is supposed to be just the data size (eiscpDataSize) // ** BUT ** // It only works if you send the size of the entire Message size (eiscpMsgSize) sb.append((char)Integer.parseInt(Integer.toHexString(eiscpMsgSize), 16)); // eiscp_version = '01'; sb.append((char)Integer.parseInt('01', 16)); // 3 chars reserved = '00'+'00'+'00'; sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('00', 16)); sb.append((char)Integer.parseInt('00', 16)); // eISCP data // Start Character sb.append('!'); // eISCP data - unittype char '1' is receiver sb.append('1'); // eISCP data - 3 char command and param ie PWR01 sb.append( command); // msg end - this can be a few different cahrs depending on you receiver sb.append((char)Integer.parseInt('0D', 16)); System.out.println('eISCP data size: '+eiscpDataSize +'(0x'+Integer.toHexString(eiscpDataSize) +') chars'); System.out.println('eISCP msg size: '+sb.length() +'(0x'+Integer.toHexString(sb.length()) +') chars'); return sb; } You can take and use the code as per the GNU license. Have fun! and check back, I will continue to extend this until I have a full remote app. Stay tuned, I also want to test this through the Networking module of the Universal DevicesISY-99i home controller. |