16 package com.sonycsl.echo;
18 import java.io.DataInputStream;
19 import java.io.IOException;
20 import java.io.InputStream;
21 import java.net.InetAddress;
22 import java.nio.ByteBuffer;
23 import java.nio.ByteOrder;
24 import java.util.ArrayList;
25 import java.util.List;
41 private static final byte EHD1 = 0x10;
42 private static final byte EHD2 = (byte)0x81;
68 private short mSrcEchoClassCode;
69 private byte mSrcEchoInstanceCode;
70 private String mSrcEchoAddress;
71 private short mDstEchoClassCode;
72 private byte mDstEchoInstanceCode;
73 private String mDstEchoAddress;
80 public EchoFrame(
short srcEchoClassCode, byte srcEchoInstanceCode
81 ,
short dstEchoClassCode, byte dstEchoInstanceCode
82 , String dstEchoAddress, byte esv) {
84 mSrcEchoClassCode = srcEchoClassCode;
85 mSrcEchoInstanceCode = srcEchoInstanceCode;
88 mDstEchoClassCode = dstEchoClassCode;
89 mDstEchoInstanceCode = dstEchoInstanceCode;
90 mDstEchoAddress = dstEchoAddress;
99 public EchoFrame(String srcEchoAddress, byte[] data) {
101 mSrcEchoAddress = srcEchoAddress;
104 if(data[0] != EHD1)
return;
105 if(data[1] != EHD2)
return;
106 ByteBuffer buffer = ByteBuffer.allocate(2);
107 buffer.order(ByteOrder.BIG_ENDIAN);
110 mTID = buffer.getShort(0);
116 buffer = ByteBuffer.allocate(2);
117 buffer.order(ByteOrder.BIG_ENDIAN);
120 mSrcEchoClassCode = buffer.getShort(0);
121 mSrcEchoInstanceCode = data[6];
122 buffer = ByteBuffer.allocate(2);
123 buffer.order(ByteOrder.BIG_ENDIAN);
126 mDstEchoClassCode = buffer.getShort(0);
127 mDstEchoInstanceCode = data[9];
129 int size = data[11] & 0xFF;
131 for(
int i = 0, j = 12; i < size; i++) {
132 if(data.length == j)
return;
137 if(data.length == j)
return;
143 if(data.length < j+(pdc & 0xFF))
return;
144 edt =
new byte[(int)(pdc & 0xFF)];
145 System.arraycopy(data, j, edt, 0, (int)(pdc & 0xFF));
155 boolean validHeader =
false;
159 while(!validHeader) {
160 while(in.available() < 11) {
164 ehd2 = in.readByte();
165 if(ehd1 == EHD1 && ehd2 == EHD2) {
172 ArrayList<Byte> data =
new ArrayList<Byte>();
173 data.add(EHD1); data.add(EHD2);
174 for(
int i = 0; i < 10; i++) {
175 data.add(in.readByte());
177 int propertyListSize = data.get(11) & 0xFF;
178 for(
int i = 0; i < propertyListSize; i++) {
179 data.add(in.readByte());
180 int pdc = in.readUnsignedByte();
182 for(
int j = 0; j < pdc; j++) {
183 data.add(in.readByte());
186 byte[] b =
new byte[data.size()];
187 for(
int i = 0; i < data.size(); i++) {
195 protected EchoFrame(
short srcEchoClassCode, byte srcEchoInstanceCode,
196 String srcEchoAddress
197 ,
short dstEchoClassCode, byte dstEchoInstanceCode
198 , String dstEchoAddress, byte esv,
short tid, List<EchoProperty> propertyList) {
202 mSrcEchoClassCode = srcEchoClassCode;
203 mSrcEchoInstanceCode = srcEchoInstanceCode;
204 mSrcEchoAddress = srcEchoAddress;
205 mDstEchoClassCode = dstEchoClassCode;
206 mDstEchoInstanceCode = dstEchoInstanceCode;
207 mDstEchoAddress = dstEchoAddress;
215 mPropertyList.add(property.copy());
232 return mSrcEchoClassCode;
236 return mSrcEchoInstanceCode;
240 return mSrcEchoAddress;
244 return mDstEchoClassCode;
248 mDstEchoInstanceCode = dstEchoInstanceCode;
252 return mDstEchoInstanceCode;
256 mDstEchoAddress = dstEchoAddress;
260 return mDstEchoAddress;
272 int propertyListSize = mPropertyList.size();
273 if(propertyListSize > 255) {
274 propertyListSize = 255;
277 for(
int i = 0; i < propertyListSize; i++) {
278 size += mPropertyList.get(i).size();
281 ByteBuffer buffer = ByteBuffer.allocate(size);
282 buffer.order(ByteOrder.BIG_ENDIAN);
286 buffer.putShort(mTID);
287 buffer.putShort(mSrcEchoClassCode);
288 buffer.put(mSrcEchoInstanceCode);
289 buffer.putShort(mDstEchoClassCode);
290 buffer.put(mDstEchoInstanceCode);
292 buffer.put((byte)propertyListSize);
299 return buffer.array();
314 mPropertyList.add(property);
317 if(property.
pdc != 0) {
322 if(property.
pdc != 0) {
327 if(property.
pdc == 0) {
332 if(property.
pdc == 0) {
340 mPropertyList.add(property);
346 , mDstEchoClassCode, mDstEchoInstanceCode
EchoFrame(String srcEchoAddress, byte[] data)
static final String SELF_ADDRESS
void addProperty(EchoProperty property)
short getDstEchoClassCode()
static final byte ESV_SET_GET_SNA
static final byte ESV_SET_GET_RES
String getDstEchoAddress()
void addPropertyForResponse(byte epc)
void addPropertyForResponse(EchoProperty property)
EchoProperty[] getProperties()
void setDstEchoInstanceCode(byte dstEchoInstanceCode)
static final byte ESV_SET_NO_RES
EchoFrame(short srcEchoClassCode, byte srcEchoInstanceCode, short dstEchoClassCode, byte dstEchoInstanceCode, String dstEchoAddress, byte esv)
static final byte ESV_SETI_SNA
List< EchoProperty > getPropertyList()
static final byte ESV_SET_GET
static EchoFrame getEchoFrameFromStream(String srcEchoAddress, DataInputStream in)
void setDstEchoAddress(String dstEchoAddress)
static final byte ESV_INFC_RES
static final byte ESV_INFC
List< EchoProperty > mPropertyList
byte getSrcEchoInstanceCode()
short getSrcEchoClassCode()
static final int MIN_FRAME_SIZE
static final byte ESV_INF
static final byte ESV_INF_SNA
byte[] getFrameByteArray()
byte getDstEchoInstanceCode()
static int UDP_MAX_PACKET_SIZE
String getSrcEchoAddress()
static final byte ESV_SETI
static final byte ESV_GET_SNA
static final byte ESV_GET_RES
static final byte ESV_GET
static final byte ESV_SETC
EchoFrame(short srcEchoClassCode, byte srcEchoInstanceCode, String srcEchoAddress, short dstEchoClassCode, byte dstEchoInstanceCode, String dstEchoAddress, byte esv, short tid, List< EchoProperty > propertyList)
static final byte ESV_SETC_SNA
static final byte ESV_SET_RES
void addPropertyForResponse(byte epc, byte[] edt)
static final byte ESV_INF_REQ