public static int GetMaxApduLength(this MaxApduLength length) { switch (length) { case MaxApduLength.UP_TO_50: return(50); case MaxApduLength.UP_TO_128: return(128); case MaxApduLength.UP_TO_206: return(206); case MaxApduLength.UP_TO_480: return(480); case MaxApduLength.UP_TO_1024: return(1024); case MaxApduLength.UP_TO_1476: return(1476); default: throw new ArgumentOutOfRangeException(nameof(length)); } }
public ConfirmedRequest(bool segmentedMessage, bool moreFollows, bool segmentedResponseAccepted, MaxSegments maxSegmentsAccepted, MaxApduLength maxApduLengthAccepted, byte invokeId, int sequenceNumber, int proposedWindowSize, byte serviceChoice, ByteStream serviceData) { setFields(segmentedMessage, moreFollows, segmentedResponseAccepted, maxSegmentsAccepted, maxApduLengthAccepted, invokeId, sequenceNumber, proposedWindowSize, serviceChoice); ServiceData = serviceData; }
/** * This field is used to allow parsing of only the APDU so that those fields are available in case there is a * problem parsing the service request. */ public ConfirmedRequest(bool segmentedMessage, bool moreFollows, bool segmentedResponseAccepted, MaxSegments maxSegmentsAccepted, MaxApduLength maxApduLengthAccepted, byte invokeId, int sequenceNumber, int proposedWindowSize, ConfirmedRequestService serviceRequest) { setFields(segmentedMessage, moreFollows, segmentedResponseAccepted, maxSegmentsAccepted, maxApduLengthAccepted, invokeId, sequenceNumber, proposedWindowSize, serviceRequest.ChoiceId); ServiceRequest = serviceRequest; }
private void setFields(bool segmentedMessage, bool moreFollows, bool segmentedResponseAccepted, MaxSegments maxSegmentsAccepted, MaxApduLength maxApduLengthAccepted, byte invokeId, int sequenceNumber, int proposedWindowSize, byte serviceChoice) { IsSegmentedMessage = segmentedMessage; IsMoreFollows = moreFollows; IsSegmentedResponseAccepted = segmentedResponseAccepted; MaxSegmentsAccepted = maxSegmentsAccepted; MaxApduLengthAccepted = maxApduLengthAccepted; InvokeId = invokeId; SequenceNumber = sequenceNumber; ProposedWindowSize = proposedWindowSize; this.serviceChoice = serviceChoice; }
public byte[] GetBytes() { ArrayList res = new ArrayList(); res.Add((byte)BacNetEnums.BACNET_PDU_TYPE.PDU_TYPE_UNCONFIRMED_SERVICE_REQUEST); res.Add((byte)BacNetEnums.BACNET_UNCONFIRMED_SERVICE.SERVICE_UNCONFIRMED_I_AM); //Object ID BacNetTag deviceTag = new BacNetTag { Class = false, Length = 4, Number = (byte)BacNetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_OBJECT_ID }; res.AddRange(deviceTag.GetBytes()); BacNetObject device = new BacNetObject { ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE, ObjectId = deviceObject.ObjectId }; res.AddRange(device.GetObjectBytes()); //Max APDU BacNetTag maxApduTag = new BacNetTag { Class = false, Length = (byte)MaxApduLength.GetLength(), Number = (int)BacNetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_UNSIGNED_INT }; res.AddRange(maxApduTag.GetBytes()); res.AddRange(MaxApduLength.GetBytes()); //Segmentation BacNetTag segmentationTag = new BacNetTag { Class = false, Length = 1, Number = (int)BacNetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_ENUMERATED }; res.AddRange(segmentationTag.GetBytes()); res.Add((byte)SegmentationSupported); //Vendor Id BacNetTag vendorIdTag = new BacNetTag { Class = false, Length = (byte)VendorId.GetLength(), Number = (int)BacNetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_UNSIGNED_INT }; res.AddRange(vendorIdTag.GetBytes()); res.AddRange(VendorId.GetBytes()); return((byte[])res.ToArray(typeof(byte))); }
public static int GetId(this MaxApduLength length) { return((int)length); }
public AcknowledgementService send(Address address, OctetString linkService, MaxApduLength maxAPDULength, Segmentation segmentationSupported, ConfirmedRequestService serviceRequest) { return(applicationLayer.send(address, linkService, (uint)maxAPDULength.GetMaxApduLength(), segmentationSupported, serviceRequest)); }