Example #1
0
        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;
 }
Example #5
0
        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)));
        }
Example #6
0
 public static int GetId(this MaxApduLength length)
 {
     return((int)length);
 }
Example #7
0
 public AcknowledgementService send(Address address, OctetString linkService, MaxApduLength maxAPDULength,
                                    Segmentation segmentationSupported, ConfirmedRequestService serviceRequest)
 {
     return(applicationLayer.send(address, linkService, (uint)maxAPDULength.GetMaxApduLength(), segmentationSupported, serviceRequest));
 }