public static object GetAppTagValue(byte[] apdu, int startIndex, BacNetTag metaTag, ref int len) { object res = null; switch (metaTag.Number) { case 1: //UNSIGNED_INT var boolValue = new BacNetBool(metaTag); res = boolValue; break; case 2: //UNSIGNED_INT var uIntValue = new BacNetUInt(apdu, len, metaTag.Length, ref len); res = uIntValue; break; case 3: //SIGNED_INT var intValue = new BacNetInt(apdu, len, metaTag.Length, ref len); res = intValue; break; case 4: //REAL var realValue = new BacNetReal(apdu, len, metaTag.Length, ref len); res = realValue; break; case 5: //DOUBLE var doubleValue = new BacNetDouble(apdu, len, metaTag.Length, ref len); res = doubleValue; break; case 7: //CHARACTER STRING var str = new BacNetString(apdu, len, metaTag.Length, ref len); res = str; break; case 9: //ENUMERATION var enumValue = new BacNetEnumeration(apdu, len, metaTag.Length, ref len); res = enumValue; break; case 11: //TIME var time = new BacNetTime(apdu, len, ref len); res = time; break; case 12: //OBJECT IDENTIFIER var obj = new BacNetObject(apdu, len, ref len); res = obj; break; } return(res); }
public byte[] GetBytes() { ArrayList res = new ArrayList(); res.Add((byte)((byte)BacNetEnums.BACNET_PDU_TYPE.PDU_TYPE_CONFIRMED_SERVICE_REQUEST | (1 << 1))); res.Add((byte)84); res.Add((byte)InvokeId); res.Add((byte)BacNetEnums.BACNET_CONFIRMED_SERVICE.SERVICE_CONFIRMED_SUBSCRIBE_COV); //Process ID var processIdTag = new BacNetTag { Class = true, Length = (byte)ProccessId.GetLength(), Number = 0 }; res.AddRange(processIdTag.GetBytes()); res.AddRange(ProccessId.GetBytes()); //Object ID var objectTag = new BacNetTag { Class = true, Length = 4, Number = 1 }; res.AddRange(objectTag.GetBytes()); res.AddRange(ObjectId.GetObjectBytes()); //Issue Confirmed Notifications var icn = new BacNetBool(); icn.Value = false; var icnTag = new BacNetTag { Class = true, Length = (byte)icn.GetLength(), Number = 2 }; res.AddRange(icnTag.GetBytes()); res.AddRange(icn.GetBytes()); //Lifetime var lifeTime = new BacNetUInt(); lifeTime.Value = 360; var lifeTimeTag = new BacNetTag { Class = true, Length = (byte)lifeTime.GetLength(), Number = 3 }; res.AddRange(lifeTimeTag.GetBytes()); res.AddRange(lifeTime.GetBytes()); return((byte[])res.ToArray(typeof(byte))); }