コード例 #1
0
            public static void Save(IValueSink sink, ChangeOfValue value)
            {
                sink.EnterSequence();
                Value <NewValue> .Save(sink, value.NewValue);

                Value <StatusFlags> .Save(sink, value.StatusFlags);

                sink.LeaveSequence();
            }
コード例 #2
0
ファイル: EventParameter.cs プロジェクト: fanzcsoft/bacstack
            public static void Save(IValueSink sink, ChangeOfValue value)
            {
                sink.EnterSequence();
                Value <uint> .Save(sink, value.TimeDelay);

                Value <COVCriteria> .Save(sink, value.CovCriteria);

                sink.LeaveSequence();
            }
コード例 #3
0
 public ChangeOfValueWrapper(ChangeOfValue item)
 {
     this.Item = item;
 }
コード例 #4
0
 public static void Save(IValueSink sink, ChangeOfValue value)
 {
     sink.EnterSequence();
     Value<NewValue>.Save(sink, value.NewValue);
     Value<StatusFlags>.Save(sink, value.StatusFlags);
     sink.LeaveSequence();
 }
コード例 #5
0
ファイル: DeviceStorage.cs プロジェクト: hahanonym/BACnet
        public ErrorCodes WriteProperty(BacnetObjectId objectId, BacnetPropertyIds propertyId, uint arrayIndex, IList <BacnetValue> value, bool addIfNotExits = false)
        {
            //wildcard device_id
            if (objectId.type == BacnetObjectTypes.OBJECT_DEVICE && objectId.instance >= Serialize.ASN1.BACNET_MAX_INSTANCE)
            {
                objectId.instance = DeviceId;
            }

            //overrides
            if (WriteOverride != null)
            {
                bool       handled;
                ErrorCodes status;
                WriteOverride(objectId, propertyId, arrayIndex, value, out status, out handled);
                if (handled)
                {
                    return(status);
                }
            }

            //find
            var p = FindProperty(objectId, propertyId);

            if (p == null)
            {
                if (!addIfNotExits)
                {
                    return(ErrorCodes.NotExist);
                }

                //add obj
                var obj = FindObject(objectId);
                if (obj == null)
                {
                    obj = new Object
                    {
                        Type     = objectId.type,
                        Instance = objectId.instance
                    };
                    var arr = Objects;
                    Array.Resize(ref arr, arr.Length + 1);
                    arr[arr.Length - 1] = obj;
                    Objects             = arr;
                }

                //add property
                p = new Property {
                    Id = propertyId
                };
                var props = obj.Properties;
                Array.Resize(ref props, props.Length + 1);
                props[props.Length - 1] = p;
                obj.Properties          = props;
            }

            //set type if needed
            if (p.Tag == BacnetApplicationTags.BACNET_APPLICATION_TAG_NULL && value != null)
            {
                foreach (var v in value)
                {
                    if (v.Tag == BacnetApplicationTags.BACNET_APPLICATION_TAG_NULL)
                    {
                        continue;
                    }

                    p.Tag = v.Tag;
                    break;
                }
            }

            //write
            p.BacnetValue = value;

            //send event ... for subscriptions
            ChangeOfValue?.Invoke(this, objectId, propertyId, arrayIndex, value);

            return(ErrorCodes.Good);
        }
コード例 #6
0
 public ChangeOfValueWrapper(ChangeOfValue item)
 {
     this.Item = item;
 }
コード例 #7
0
ファイル: EventParameter.cs プロジェクト: LorenVS/bacstack
 public static void Save(IValueSink sink, ChangeOfValue value)
 {
     sink.EnterSequence();
     Value<uint>.Save(sink, value.TimeDelay);
     Value<COVCriteria>.Save(sink, value.CovCriteria);
     sink.LeaveSequence();
 }