16 package com.sonycsl.echo;
18 import java.net.Inet4Address;
19 import java.net.InetAddress;
20 import java.net.NetworkInterface;
21 import java.net.SocketException;
22 import java.nio.ByteBuffer;
23 import java.nio.ByteOrder;
24 import java.util.ArrayList;
25 import java.util.Enumeration;
26 import java.util.HashMap;
27 import java.util.List;
38 return new byte[]{eoj.getClassGroupCode(), eoj.
getClassCode()};
42 return new byte[]{eoj.getClassGroupCode(), eoj.
getClassCode(), eoj.getInstanceCode()};
50 int length = devices.length;
55 if(length > 84) num = 84;
59 if(length < 85)
return null;
60 if(length > 168) num = 84;
61 else num = length - 84;
64 if(length < 169)
return null;
65 if(length > 252) num = 84;
66 else num = length - 168;
69 if(length < 253)
return null;
70 if(length > 255)
return null;
77 ret =
new byte[num * 3 + 1];
79 for(
int i = 0; i < num; i++) {
89 int length = devices.length;
90 byte[] ret =
new byte[length * 3 + 1];
91 ret[0] = (byte)length;
92 for(
int i = 0; i < length; i++) {
102 ByteBuffer buffer = ByteBuffer.allocate(2);
103 buffer.order(ByteOrder.BIG_ENDIAN);
104 buffer.put(classGroupCode);
105 buffer.put(classCode);
106 return buffer.getShort(0);
111 ByteBuffer buffer = ByteBuffer.allocate(4);
112 buffer.order(ByteOrder.BIG_ENDIAN);
114 buffer.put(classGroupCode);
115 buffer.put(classCode);
116 buffer.put(instanceCode);
117 return buffer.getInt(0);
121 ByteBuffer buffer = ByteBuffer.allocate(4);
122 buffer.order(ByteOrder.BIG_ENDIAN);
124 buffer.putShort(echoClassCode);
125 buffer.put(instanceCode);
126 return buffer.getInt(0);
130 return (
short)((objectCode >> 8) & 0xFFFF);
133 return (byte)(objectCode & 0xFF);
137 Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
138 while(en.hasMoreElements()) {
139 NetworkInterface intf = en.nextElement();
140 Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
141 while(enumIpAddr.hasMoreElements()) {
142 InetAddress inetAddress = enumIpAddr.nextElement();
143 if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
153 Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
154 while(en.hasMoreElements()) {
155 NetworkInterface intf = en.nextElement();
156 Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
157 while(enumIpAddr.hasMoreElements()) {
158 InetAddress inetAddress = enumIpAddr.nextElement();
159 if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
171 if(data == null)
return "";
172 StringBuilder sb =
new StringBuilder();
174 sb.append(String.format(
"%02x"+sep, b));
177 return new String(sb);
181 return String.format(
"%02x", b);
185 return String.format(
"%04x", s);
190 int length = properties.length;
192 ret =
new byte[length + 1];
193 ret[0] = (byte)length;
194 for(
int i = 0; i < length; i++) {
195 ret[i+1] = properties[i];
199 ret[0] = (byte)length;
203 for(
int i = 1; i < ret.length; i++) {
206 for(byte p : properties) {
207 int high = (int)((p >> 4) & 0x0F);
211 int low = (int)(p & 0x0F);
213 ret[low+1] = (byte)((ret[low+1] & 0xFF) | (1 << (high - 0x08)));
220 if(map == null || map.length == 0)
return new byte[]{};
221 byte[] ret =
new byte[(int)(map[0] & 0xFF)];
222 if(ret.length < 16) {
223 for(
int i = 0; i < ret.length; i++) {
228 for(
int low = 0; low < 16; low++) {
229 byte tmp = map[low + 1];
230 for(
int high = 0; high < 8; high++) {
231 if((tmp & 0x01) == 0x01) {
233 ret[n] = (byte)(low | ((high + 0x08) << 4));
236 tmp = (byte)(tmp >> 1);
245 byte[] ret =
new byte[length];
247 for(
int i = length - 1; i >= 0; i--) {
248 ret[i] = (byte)(num & 0xFF);
259 byte[] ret =
new byte[length];
261 for(
int i = length - 1; i >= 0; i--) {
262 ret[i] = (byte)(num & 0xFF);
273 byte[] ret =
new byte[length];
275 for(
int i = length - 1; i >= 0; i--) {
276 ret[i] = (byte)(num & 0xFF);
287 byte[] ret =
new byte[length];
289 for(
int i = length - 1; i >= 0; i--) {
290 ret[i] = (byte)(num & 0xFF);
300 private static HashMap<Short, Byte> sAllocatedSelfDeviceInstanceCode =
new HashMap<Short, Byte>();
304 if (sAllocatedSelfDeviceInstanceCode.containsKey(echoClassCode)) {
306 byte code = sAllocatedSelfDeviceInstanceCode.get(echoClassCode);
308 sAllocatedSelfDeviceInstanceCode.put(echoClassCode, code);
311 sAllocatedSelfDeviceInstanceCode.put(echoClassCode, (byte)1);
static byte[] propertiesToPropertyMap(byte[] properties)
static byte[] toByteArray(long arg, int length)
static String toHexString(byte[] data, String sep)
static byte[] devicesToByteArray(DeviceObject[] devices, int index)
static final byte[] instanceToByteArray(EchoObject eoj)
static int getEchoObjectCode(short echoClassCode, byte instanceCode)
static byte[] devicesToByteArray(DeviceObject[] devices)
static String toHexString(byte[] data)
static String toHexString(short s)
static byte[] toByteArray(byte arg, int length)
static byte[] toByteArray(int arg)
static String toHexString(byte b)
static InetAddress getLocalIpAddress()
static byte[] toByteArray(short arg, int length)
static int getEchoObjectCode(byte classGroupCode, byte classCode, byte instanceCode)
static byte[] toByteArray(short arg)
static final byte[] classToByteArray(EchoObject eoj)
static byte[] toByteArray(long arg)
static short getEchoClassCode(byte classGroupCode, byte classCode)
final byte getClassCode()
static short getEchoClassCodeFromObjectCode(int objectCode)
static byte allocateSelfDeviceInstanceCode(short echoClassCode)
static NetworkInterface getNetworkInterface()
static byte[] toByteArray(int arg, int length)
static byte getInstanceCodeFromObjectCode(int objectCode)
static byte[] toByteArray(byte arg)
static byte[] propertyMapToProperties(byte[] map)