diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/adapter/AcFsapPrimitive.java b/javasrc/codec/org/etsi/ttcn/codec/its/adapter/AcFsapPrimitive.java new file mode 100644 index 0000000000000000000000000000000000000000..ef49daf256af310f4073de436cb9206a0b736f64 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/adapter/AcFsapPrimitive.java @@ -0,0 +1,37 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.adapter; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Union; +import org.etsi.ttcn.common.ByteHelper; +import org.etsi.ttcn.tci.UnionValue; + +public class AcFsapPrimitive extends Union { + + public AcFsapPrimitive(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + protected void preEncode(CodecBuffer buf, UnionValue uv) { + String variant = uv.getPresentVariantName(); + int primitiveId = -1; + + // Append AcGnPrimitive message id + buf.appendBytes(ByteHelper.intToByteArray(2, 1)); // AdapterControl Primitive identifer for AcFsapPrimitive + + // Append primitive command identifier + if(variant.equals("inSapPrimitivesUp")) { + primitiveId = 0; + } + else if(variant.equals("stopTransmission")) { + primitiveId = 1; + } + buf.appendBytes(ByteHelper.intToByteArray(primitiveId, 1)); + } +} diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/adapter/Plugin.java b/javasrc/codec/org/etsi/ttcn/codec/its/adapter/Plugin.java index 4335ecf481cd00031292a88dbe7d45b25d39b03d..cef27a92d8409173d3ec8c73f867e080c31f69b8 100644 --- a/javasrc/codec/org/etsi/ttcn/codec/its/adapter/Plugin.java +++ b/javasrc/codec/org/etsi/ttcn/codec/its/adapter/Plugin.java @@ -15,5 +15,6 @@ public class Plugin { CodecFactory cf = CodecFactory.getInstance(); cf.setCodec(TciTypeClass.UNION, "AdapterControl", "AcGnPrimitive", AcGnPrimitive.class); cf.setCodec(TciTypeClass.UNION, "AdapterControl", "AcGnResponse", AcGnResponse.class); + cf.setCodec(TciTypeClass.UNION, "AdapterControl", "AcFsapPrimitive", AcFsapPrimitive.class); } } \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/atsp/AtspInd.java b/javasrc/codec/org/etsi/ttcn/codec/its/atsp/AtspInd.java new file mode 100644 index 0000000000000000000000000000000000000000..4579d6372f6f01fdc33a9e0b1d0f9a8a93a55b32 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/atsp/AtspInd.java @@ -0,0 +1,35 @@ +package org.etsi.ttcn.codec.its.atsp; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Record; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class AtspInd extends Record { + + public AtspInd(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + protected void preDecodeField(String fieldName, CodecBuffer buf, Type decodingHypothesis, RecordValue rv) { + + System.out.println("FntpInd.preDecodeField: " + fieldName + " - " + decodingHypothesis.getName()); + if(fieldName.equals("receptionTime")) { + buf.overwriteWith(receptionTime); + } + } + + @Override + protected void preDecode(CodecBuffer buf, Type decodingHypothesis) { + int msgLen = buf.getNbBits() - 6/*Time48IAT*/ * Byte.SIZE; + + receptionTime = buf.getBuffer(msgLen, 6 * Byte.SIZE); + } + + private CodecBuffer receptionTime = null; + +} // End of class FntpInd + diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/atsp/Plugin.java b/javasrc/codec/org/etsi/ttcn/codec/its/atsp/Plugin.java new file mode 100644 index 0000000000000000000000000000000000000000..2d3c13a4eadd55821d79c4283a42fd00f2ac71db --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/atsp/Plugin.java @@ -0,0 +1,19 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.atsp; + +import org.etsi.ttcn.tci.TciTypeClass; +import org.etsi.ttcn.codec.CodecFactory; + +public class Plugin { + + public static void init() { + + CodecFactory cf = CodecFactory.getInstance(); + + cf.setCodec(TciTypeClass.RECORD, "LibIts_Interface", "AtspInd", AtspInd.class); + } +} \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfBoolean.java b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfBoolean.java new file mode 100644 index 0000000000000000000000000000000000000000..bf5ef83dba1c27889cfce640e26c696ebc1f6f10 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfBoolean.java @@ -0,0 +1,41 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.configtester; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Boolean; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class CfBoolean extends Boolean { + + public CfBoolean(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + public Value decode(CodecBuffer buf, Type decodingHypothesis) { + + Byte id = CfPduId.value(decodingHypothesis.getName()); + if(id != null) { + byte[] readId = buf.readBytes(1); + if(readId[0] != id) { + return null; + } + } + return super.decode(buf, decodingHypothesis); + } + + @Override + public CodecBuffer preEncode(Value value) { + Byte id = CfPduId.value(value.getType().getName()); + if(id != null) { + return new CodecBuffer(new byte[] {id.byteValue()}); + } + return null; + } +} diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfPduId.java b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfPduId.java new file mode 100644 index 0000000000000000000000000000000000000000..4413f3eceaf9cde099f3ec89b6b93062c33cb20d --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfPduId.java @@ -0,0 +1,55 @@ +/** + * @author ETSI / STF462 / STF455 + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.configtester; + +import java.util.HashMap; +import java.util.Map; + +public enum CfPduId { + + /* From LibItsCommon_TypesAndValues */ + CfResult(0x25), + + /* From LibItsFntp_TypesAndValues */ + CfInitialize_cfFntpInitialize (0x10), + CfFntpEventInd_mnRequestRequest (0x1a), + + /* From LibItsFsap_TypesAndValues */ + CfInitialize_cfFsapInitialize (0x20), + CfFsapEventInd_mfRequestRequest (0x2a), + + /* From LibItsAtsp_TypesAndValues */ + CfInitialize_cfIicpInitialize (0x30), + + /* From LibItsAtsp_TypesAndValues */ + CfInitialize_cfAtspInitialize (0x40), + + /* Reserved */ + reserved(0xFF); + + private byte value; + private static final Map UtPduIds = new HashMap(); + private static final Map UtPduNames = new HashMap(); + + private CfPduId(int value) { + this.value = (byte)value; + } + + public static Byte value(String name) { + return UtPduIds.get(name); + } + + public static String name(Byte value) { + return UtPduNames.get(value); + } + + static { + for (CfPduId item : CfPduId.values()) { + UtPduIds.put(item.name(), new Byte(item.value)); + UtPduNames.put(new Byte(item.value), item.name()); + } + } +} \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfRecord.java b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..93c6d2dad137ad57e440a22d461c0d3ce2adbd28 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfRecord.java @@ -0,0 +1,44 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.configtester; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Record; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class CfRecord extends Record { + + public CfRecord(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + public Value decode(CodecBuffer buf, Type decodingHypothesis) { + + System.out.println("CfRecord.decode: " + decodingHypothesis.getName()); + Byte id = CfPduId.value(decodingHypothesis.getName()); + if(id != null) { + byte[] readId = buf.readBytes(1); + if(readId[0] != id) { + return null; + } + } + return super.decode(buf, decodingHypothesis); + } + + @Override + public CodecBuffer preEncode(Value value) { + System.out.println("UtRecord.preEncode: " + value.getType().getName()); + Byte id = CfPduId.value(value.getType().getName()); + if(id != null) { + return new CodecBuffer(new byte[] {id.byteValue()}); + } + return null; + } + +} diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfUnion.java b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfUnion.java new file mode 100644 index 0000000000000000000000000000000000000000..f47ed55106bcfb16c4aad2d6a8929bccea832582 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/CfUnion.java @@ -0,0 +1,56 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.configtester; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Union; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.UnionValue; +import org.etsi.ttcn.tci.Value; + +public class CfUnion extends Union { + + public CfUnion(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + public Value decode(CodecBuffer buf, Type decodingHypothesis) { + + String variant = ""; + Byte type = new Byte((byte)(0x00FF & buf.readBytes(1)[0])); + Pattern variantNamePattern = Pattern.compile(decodingHypothesis.getName() + "_(\\S+)"); + System.out.println("CfUnion.decode: " + variantNamePattern + " / " + decodingHypothesis.getName()); + + Matcher matcher = variantNamePattern.matcher(CfPduId.name(type)); + if (matcher.find()) { + variant = matcher.group(1); + } + else { + return null; + } + + mainCodec.setHint(decodingHypothesis.getName(), variant); + return super.decode(buf, decodingHypothesis); + } + + @Override + public CodecBuffer preEncode(Value value) { + + UnionValue uv = (UnionValue)value; + + System.out.println("CfUnion.preEncode: " + value.getType().getName() + "_" + uv.getPresentVariantName()); + Byte id = CfPduId.value(value.getType().getName() + "_" + uv.getPresentVariantName()); + if(id != null) { + return new CodecBuffer(new byte[] {id.byteValue()}); + } + return null; + } +} diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/configtester/Plugin.java b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/Plugin.java new file mode 100644 index 0000000000000000000000000000000000000000..de2bf5fd6cd6633eb47776757a890f655946342d --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/configtester/Plugin.java @@ -0,0 +1,20 @@ +/** + * @author ETSI / STF455 / Yann Garcia + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.configtester; + +import org.etsi.ttcn.codec.CodecFactory; +import org.etsi.ttcn.tci.TciTypeClass; + +public class Plugin { + + public static void init() { + + CodecFactory cf = CodecFactory.getInstance(); + cf.setCodec(TciTypeClass.RECORD, "ConfigTester", "", CfRecord.class); + cf.setCodec(TciTypeClass.UNION, "ConfigTester", "", CfUnion.class); + cf.setCodec(TciTypeClass.BOOLEAN, "ConfigTester", "", CfBoolean.class); + } +} \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fntp/FntpInd.java b/javasrc/codec/org/etsi/ttcn/codec/its/fntp/FntpInd.java new file mode 100644 index 0000000000000000000000000000000000000000..6cf34ff73b2b0aebd09136d7b4c17ead41cf481d --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fntp/FntpInd.java @@ -0,0 +1,35 @@ +package org.etsi.ttcn.codec.its.fntp; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Record; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class FntpInd extends Record { + + public FntpInd(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + protected void preDecodeField(String fieldName, CodecBuffer buf, Type decodingHypothesis, RecordValue rv) { + + System.out.println("FntpInd.preDecodeField: " + fieldName + " - " + decodingHypothesis.getName()); + if(fieldName.equals("receptionTime")) { + buf.overwriteWith(receptionTime); + } + } + + @Override + protected void preDecode(CodecBuffer buf, Type decodingHypothesis) { + int msgLen = buf.getNbBits() - 6/*Time48IAT*/ * Byte.SIZE; + + receptionTime = buf.getBuffer(msgLen, 6 * Byte.SIZE); + } + + private CodecBuffer receptionTime = null; + +} // End of class FntpInd + diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fntp/Plugin.java b/javasrc/codec/org/etsi/ttcn/codec/its/fntp/Plugin.java new file mode 100644 index 0000000000000000000000000000000000000000..f3c6f7026e43af6f0a1cf9c5802a427102258316 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fntp/Plugin.java @@ -0,0 +1,21 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.fntp; + +import org.etsi.ttcn.tci.TciTypeClass; +import org.etsi.ttcn.codec.CodecFactory; +import org.etsi.ttcn.codec.generic.Union; + +public class Plugin { + + public static void init() { + + CodecFactory cf = CodecFactory.getInstance(); + + cf.setCodec(TciTypeClass.RECORD, "LibIts_Interface", "FntpInd", FntpInd.class); + cf.setCodec(TciTypeClass.UNION, "LibIts_Interface", "FntpReq", Union.class); + } +} \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapInd.java b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapInd.java new file mode 100644 index 0000000000000000000000000000000000000000..0dec5b161fcf3a28fd3ec63b6b71ad07524b016a --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapInd.java @@ -0,0 +1,34 @@ +package org.etsi.ttcn.codec.its.fsap; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Record; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.Type; + +public class FsapInd extends Record { + + public FsapInd(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + protected void preDecodeField(String fieldName, CodecBuffer buf, Type decodingHypothesis, RecordValue rv) { + + System.out.println("FsapInd.preDecodeField: " + fieldName + " - " + decodingHypothesis.getName()); + if(fieldName.equals("receptionTime")) { + buf.overwriteWith(receptionTime); + } + } + + @Override + protected void preDecode(CodecBuffer buf, Type decodingHypothesis) { + int msgLen = buf.getNbBits() - 6/*Time48IAT*/ * Byte.SIZE; + + receptionTime = buf.getBuffer(msgLen, 6 * Byte.SIZE); + } + + private CodecBuffer receptionTime = null; + +} // End of class FsapInd + diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapMsg.java b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapMsg.java new file mode 100644 index 0000000000000000000000000000000000000000..60025af2fafdec3a0c972123e17ee3a311a2c43b --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapMsg.java @@ -0,0 +1,33 @@ +package org.etsi.ttcn.codec.its.fsap; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Union; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class FsapMsg extends Union { + + public FsapMsg(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + public Value decode(CodecBuffer buf, Type decodingHypothesis) { + + System.out.println(String.format("FsapMsg.decode: %s - 0x%02x", decodingHypothesis.getName(), buf.getBytes()[0])); + String variant = ""; + Byte spRef = buf.getBytes()[0]; // Cf. CALMllsap/INsapPrimitivesDown data structure description + switch (spRef) { // FIXME How to distinguish between the 2 variants of FsapMsg? + case 0x00: + variant = "msgIn_in"; + mainCodec.setHint(decodingHypothesis.getName(), variant); + break; + default: + return null; + } // End of 'switch' statement + + return super.decode(buf, decodingHypothesis); + } + +} // End of class FsapMsg diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapPduId.java b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapPduId.java new file mode 100644 index 0000000000000000000000000000000000000000..af75b3700ff7b330cb86d7d7fbd00f95ad95a02c --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapPduId.java @@ -0,0 +1,36 @@ +package org.etsi.ttcn.codec.its.fsap; + +import java.util.HashMap; +import java.util.Map; + + +public enum FsapPduId { + + /* From */ + IN_UNITDATA_request(0x00), + ; + + private byte value; + private static final Map FsapPduIds = new HashMap(); + private static final Map FsapPduNames = new HashMap(); + + private FsapPduId(int value) { + this.value = (byte)value; + } + + public static Byte value(String name) { + return FsapPduIds.get(name); + } + + public static String name(Byte value) { + return FsapPduNames.get(value); + } + + static { + for (FsapPduId item : FsapPduId.values()) { + FsapPduIds.put(item.name(), new Byte(item.value)); + FsapPduNames.put(new Byte(item.value), item.name()); + } + } + +} // End of enum FsapPduId \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapReq.java b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapReq.java new file mode 100644 index 0000000000000000000000000000000000000000..4e88225c6f21097bf0676942dc13e8cd3a87cd76 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/FsapReq.java @@ -0,0 +1,12 @@ +package org.etsi.ttcn.codec.its.fsap; + +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Union; + +public class FsapReq extends Union { + + public FsapReq(MainCodec mainCodec) { + super(mainCodec); + } + +} // End of class FsapReq diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/fsap/Plugin.java b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/Plugin.java new file mode 100644 index 0000000000000000000000000000000000000000..568ad5fc9aba15b0495b03fa9921b9a8418f7533 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/fsap/Plugin.java @@ -0,0 +1,21 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.fsap; + +import org.etsi.ttcn.tci.TciTypeClass; +import org.etsi.ttcn.codec.CodecFactory; + +public class Plugin { + + public static void init() { + + CodecFactory cf = CodecFactory.getInstance(); + + cf.setCodec(TciTypeClass.RECORD, "LibIts_Interface", "FsapInd", FsapInd.class); + cf.setCodec(TciTypeClass.UNION, "LibIts_Interface", "FsapMsg", FsapMsg.class); + cf.setCodec(TciTypeClass.UNION, "LibIts_Interface", "FsapReq", FsapReq.class); + } +} \ No newline at end of file diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpInd.java b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpInd.java new file mode 100644 index 0000000000000000000000000000000000000000..0065b1f62aa85dd817f95236e5ef5ebf8c17514f --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpInd.java @@ -0,0 +1,34 @@ +package org.etsi.ttcn.codec.its.iicp; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Record; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.Type; + +public class IicpInd extends Record { + + public IicpInd(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + protected void preDecodeField(String fieldName, CodecBuffer buf, Type decodingHypothesis, RecordValue rv) { + + System.out.println("IicpInd.preDecodeField: " + fieldName + " - " + decodingHypothesis.getName()); + if(fieldName.equals("receptionTime")) { + buf.overwriteWith(receptionTime); + } + } + + @Override + protected void preDecode(CodecBuffer buf, Type decodingHypothesis) { + int msgLen = buf.getNbBits() - 6/*Time48IAT*/ * Byte.SIZE; + + receptionTime = buf.getBuffer(msgLen, 6 * Byte.SIZE); + } + + private CodecBuffer receptionTime = null; + +} // End of class IicpInd + diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpMsg.java b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpMsg.java new file mode 100644 index 0000000000000000000000000000000000000000..1752716b17267b29b4ecf9e3f3a77d94e8c95eae --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpMsg.java @@ -0,0 +1,37 @@ +package org.etsi.ttcn.codec.its.iicp; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Union; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class IicpMsg extends Union { + + public IicpMsg(MainCodec mainCodec) { + super(mainCodec); + } + + @Override + public Value decode(CodecBuffer buf, Type decodingHypothesis) { + + System.out.println(String.format("IicpMsg.decode: %s - 0x%02x", decodingHypothesis.getName(), buf.getBytes()[6])); + String variant = ""; + Byte spRef = buf.getBytes()[6]; // Cf. IIC-Request/IIC-Response data structure description (RequestID field) + switch (spRef) { + case 0x00: // IIC-Request + variant = "msg_req"; + mainCodec.setHint(decodingHypothesis.getName(), variant); + break; + case 0x01: // IIC-Response + variant = "msg_resp"; + mainCodec.setHint(decodingHypothesis.getName(), variant); + break; + default: + return null; + } // End of 'switch' statement + + return super.decode(buf, decodingHypothesis); + } + +} // End of class IicpMsg diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpPduId.java b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpPduId.java new file mode 100644 index 0000000000000000000000000000000000000000..c5f920d25cb402129b37bb010ec6562923f85062 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpPduId.java @@ -0,0 +1,35 @@ +package org.etsi.ttcn.codec.its.iicp; + +import java.util.HashMap; +import java.util.Map; + +public enum IicpPduId { + IicpReq (0xa0), + IicpReq_msgOut (0xa1), + + /* Reserved */ + reserved(0xFF); + + private byte value; + private static final Map IicpPduIds = new HashMap(); + private static final Map IicpPduNames = new HashMap(); + + private IicpPduId(int value) { + this.value = (byte)value; + } + + public static Byte value(String name) { + return IicpPduIds.get(name); + } + + public static String name(Byte value) { + return IicpPduNames.get(value); + } + + static { + for (IicpPduId item : IicpPduId.values()) { + IicpPduIds.put(item.name(), new Byte(item.value)); + IicpPduNames.put(new Byte(item.value), item.name()); + } + } +} diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpRecord.java b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..757623355d6da16d16ebd645ce56492cb59ab5bf --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/IicpRecord.java @@ -0,0 +1,45 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.iicp; + +import org.etsi.ttcn.codec.CodecBuffer; +import org.etsi.ttcn.codec.MainCodec; +import org.etsi.ttcn.codec.generic.Record; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.Value; + +public class IicpRecord extends Record { // TODO Check to remove it + + public IicpRecord(MainCodec mainCodec) { + super(mainCodec); + } + +// @Override +// public Value decode(CodecBuffer buf, Type decodingHypothesis) { +// +// System.out.println("UtRecord.decode: " + decodingHypothesis.getName()); +// Byte id = IicpPduId.value(decodingHypothesis.getName()); +// if(id != null) { +// byte[] readId = buf.readBytes(1); +// if(readId[0] != id) { +// return null; +// } +// } +// return super.decode(buf, decodingHypothesis); +// } +// +// @Override +// public CodecBuffer preEncode(Value value) { +// +// System.out.println("UtRecord.preEncode: " + value.getType().getName()); +// Byte id = IicpPduId.value(value.getType().getName()); +// if(id != null) { +// return new CodecBuffer(new byte[] {id.byteValue()}); +// } +// return null; +// } + +} diff --git a/javasrc/codec/org/etsi/ttcn/codec/its/iicp/Plugin.java b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/Plugin.java new file mode 100644 index 0000000000000000000000000000000000000000..396d586af54d2cc656a565259f3ef96294daaf02 --- /dev/null +++ b/javasrc/codec/org/etsi/ttcn/codec/its/iicp/Plugin.java @@ -0,0 +1,21 @@ +/** + * @author ETSI / STF462 / Alexandre Berge + * @version $URL$ + * $Id$ + */ +package org.etsi.ttcn.codec.its.iicp; + +import org.etsi.ttcn.codec.CodecFactory; +import org.etsi.ttcn.tci.TciTypeClass; + +public class Plugin { + + public static void init() { + + CodecFactory cf = CodecFactory.getInstance(); + + cf.setCodec(TciTypeClass.RECORD, "LibIts_Interface", "IicpReq", IicpRecord.class); // TODO Check to remove it + cf.setCodec(TciTypeClass.RECORD, "LibIts_Interface", "IicpInd", IicpInd.class); + cf.setCodec(TciTypeClass.UNION, "LibIts_Interface", "IicpMsg", IicpMsg.class); + } +} \ No newline at end of file