public void Read_Property_Ack_Handler(ref Byte[] request, UInt16 request_len, ref BACNET_ADDRESS src, ref BACNET_CONFIRMED_SERVICE_ACK_DATA service_data) { int len = 0; BACnet_Read_Property_Data data = new BACnet_Read_Property_Data(); len = Decode_Ack_Service_Request(ref request, request_len, ref data); BACNET_APPLICATION_DATA_VALUE value = new BACNET_APPLICATION_DATA_VALUE(); BasicalProcessor.Decode_Application_Data(ref request, (uint)data.application_data_len, ref value, data.application_data_pos); MessageBox.Show(value.value.Unsigned_Int.ToString(), data.object_property.ToString()); // if (len > 0) // rp_ack_print_data(ref data); //此处添加对读取到的data的处理 }
private int Unconfirm_Cov_Decode(ref Byte[] request, uint service_len, ref BACNET_COV_DATA data) { int len = 0; /* return value */ Byte tag_number = 0; UInt32 len_value = 0; UInt32 decoded_value = 0; /* for decoding */ UInt16 decoded_type = 0; /* for decoding */ UInt32 property = 0; /* for decoding */ /* value in list */ /* tag 0 - subscriberProcessIdentifier */ // if (decode_is_context_tag(&apdu[len], 0)) len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Unsigned(ref request, len_value, ref decoded_value, len); data.subscriberProcessIdentifier = decoded_value; /* tag 1 - initiatingDeviceIdentifier */ len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Object_Id(ref request, ref decoded_type, ref data.initiatingDeviceIdentifier, len); /* tag 2 - monitoredObjectIdentifier */ len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Object_Id(ref request, ref decoded_type, ref data.monitoredObjectIdentifier.instance, len); /* tag 3 - timeRemaining */ len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Unsigned(ref request, len_value, ref decoded_value, len); data.timeRemaining = decoded_value; /* tag 4: opening context tag - listOfValues */ // if (!decode_is_opening_tag_number(&apdu[len], 4)) { len++; while (true) //应该设置遇到时间戳就BREAK? 下面CLOSING TAG有break { BACNET_PROPERTY_VALUE value = new BACNET_PROPERTY_VALUE(); /* tag 0 - propertyIdentifier */ if (BasicalProcessor.Decode_Is_Context_Tag(ref request, 0, len)) { len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Enumerated(ref request, len_value, ref property, len); value.propertyIdentifier = (BACNET_PROPERTY_ID)property; } else { return(-1); } /* tag 1 - propertyArrayIndex OPTIONAL */ if (BasicalProcessor.Decode_Is_Context_Tag(ref request, 1, len)) { len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Unsigned(ref request, len_value, ref decoded_value, len); value.propertyArrayIndex = (UInt32)decoded_value; } else { value.propertyArrayIndex = BacnetConst.BACNET_ARRAY_ALL;//#define BACNET_ARRAY_ALL (~(unsigned int)0) } /* tag 2: opening context tag - value */ if (!BasicalProcessor.Decode_Is_Opening_Tag_Number(ref request, 2, len)) { return(-1); } len++; len += BasicalProcessor.Decode_Application_Data(ref request, (uint)(service_len - len), ref value.value, len); if (!BasicalProcessor.Decode_Is_Closing_Tag_Number(ref request, 2, len)) { return(-1); } len++; /* tag 3 - priority OPTIONAL */ if (BasicalProcessor.Decode_Is_Context_Tag(ref request, 3, len)) { len += BasicalProcessor.Decode_Tag_number_and_Value(ref request, ref tag_number, ref len_value, len); len += BasicalProcessor.Decode_Unsigned(ref request, len_value, ref decoded_value, len); value.priority = (Byte)decoded_value; } else { value.priority = 0; } data.listOfValues.Add(value); if (BasicalProcessor.Decode_Is_Closing_Tag_Number(ref request, 4, len)) { break; } } return(len); }