예제 #1
0
        public void Encode(EncodeBuffer buffer)
        {
            ASN1.encode_tag(buffer, (byte)BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, false, 4);
            ASN1.encode_bacnet_time(buffer, Time.Time);

            ASN1.bacapp_encode_application_data(buffer, Value);
        }
        public void Encode(EncodeBuffer buffer)
        {
            for (int i = 0; i < 1; i++)
            {
                ASN1.encode_opening_tag(buffer, 0);

                List <ExceptionScheduleArray> loArray = loExceptionScheduleArray[i];

                for (int j = 0; j < 1; j++)
                {
                    var loExceptionScheduleTimeValue = loArray[j];
                    ASN1.bacapp_encode_application_data(buffer, new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, loArray[j].period));

                    foreach (var ds in loExceptionScheduleTimeValue.loExceptionScheduleTimeValue)
                    {
                        var loTime  = ds[0].dt;
                        var loValue = ds[0].Value;

                        ASN1.bacapp_encode_application_data(buffer, new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, loTime));
                        ASN1.bacapp_encode_application_data(buffer, new BacnetValue(loValue));
                    }
                }

                ASN1.encode_closing_tag(buffer, 0);
            }
        }
        // no test here if buffer is to small
        private void WriteEffectiveWeeklySchedule()
        {
            // Write Default Schedule First
            try
            {
                BacnetValue[] bv = new BacnetValue[1];
                bv[0] = Property.DeserializeValue(TxtScheduleDefault.Text, ScheduleType);
                comm.WritePropertyRequest(adr, schedule_id, BacnetPropertyIds.PROP_SCHEDULE_DEFAULT, bv);
            }
            catch { }

            // Manual ASN.1/BER encoding
            EncodeBuffer b = comm.GetEncodeBuffer(0);

            ASN1.encode_opening_tag(b, 3);

            // Monday
            //  Time
            //  Value
            //  Time
            //  Value
            // Thusday
            //  ....
            for (int i = 0; i < 7; i++)
            {
                ASN1.encode_opening_tag(b, 0);
                TreeNode T = Schedule.Nodes[i];

                foreach (TreeNode entry in T.Nodes)
                {
                    String[] s = entry.Text.Split('=');

                    BacnetValue bdt = Property.DeserializeValue(s[0], BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME);
                    BacnetValue bval;
                    if (s[1].ToLower().Contains("null"))
                    {
                        bval = new BacnetValue(null);
                    }
                    else
                    {
                        bval = Property.DeserializeValue(s[1], ScheduleType);
                    }

                    ASN1.bacapp_encode_application_data(b, bdt);
                    ASN1.bacapp_encode_application_data(b, bval);
                }

                ASN1.encode_closing_tag(b, 0);
            }
            ASN1.encode_closing_tag(b, 3);

            Array.Resize <byte>(ref b.buffer, b.offset);
            byte[] InOutBuffer = b.buffer;
            comm.RawEncodedDecodedPropertyConfirmedRequest(adr, schedule_id, BacnetPropertyIds.PROP_WEEKLY_SCHEDULE, BacnetConfirmedServices.SERVICE_CONFIRMED_WRITE_PROPERTY, ref InOutBuffer);
        }
 public void ASN1encode(EncodeBuffer buffer)
 {
     for (int i = 0; i < 7; i++)
     {
         ASN1.encode_opening_tag(buffer, 0);
         if (days[i] != null)
         {
             List <DaySchedule> dsl = days[i];
             foreach (DaySchedule ds in dsl)
             {
                 ASN1.bacapp_encode_application_data(buffer, new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, ds.dt));
                 ASN1.bacapp_encode_application_data(buffer, new BacnetValue(ds.Value));
             }
         }
         ASN1.encode_closing_tag(buffer, 0);
     }
 }
예제 #5
0
 public void ASN1encode(EncodeBuffer buffer)
 {
     ASN1.bacapp_encode_application_data(buffer, new BacnetValue(WeekofDay));
     ASN1.bacapp_encode_application_data(buffer, new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, fromTime));
     ASN1.bacapp_encode_application_data(buffer, new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, toTime));
     if (adr != null)
     {
         adr.ASN1encode(buffer);
     }
     else
     {
         ASN1.encode_context_object_id(buffer, 0, Id.type, Id.instance);         // BacnetObjectId is context specific encoded
     }
     ASN1.bacapp_encode_application_data(buffer, new BacnetValue(processIdentifier));
     ASN1.bacapp_encode_application_data(buffer, new BacnetValue(Ack_Required));
     ASN1.bacapp_encode_application_data(buffer, new BacnetValue(evenType));
 }