public static void EncodeUnconfirmedServiceRequest(EncodeBuffer buffer, BacnetPduTypes type, BacnetUnconfirmedServices service) { buffer.buffer[buffer.offset++] = (byte)type; buffer.buffer[buffer.offset++] = (byte)service; }
public static int DecodeUnconfirmedServiceRequest(byte[] buffer, int offset, out BacnetPduTypes type, out BacnetUnconfirmedServices service) { int org_offset = offset; type = (BacnetPduTypes)buffer[offset++]; service = (BacnetUnconfirmedServices)buffer[offset++]; return(offset - org_offset); }
protected void ProcessUnconfirmedServiceRequest(BacnetAddress adr, BacnetPduTypes type, BacnetUnconfirmedServices service, byte[] buffer, int offset, int length) { try { Trace.WriteLine("UnconfirmedServiceRequest", null); if (OnUnconfirmedServiceRequest != null) OnUnconfirmedServiceRequest(this, adr, type, service, buffer, offset, length); if (service == BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_I_AM && OnIam != null) { uint device_id; uint max_adpu; BacnetSegmentations segmentation; ushort vendor_id; if (Services.DecodeIamBroadcast(buffer, offset, out device_id, out max_adpu, out segmentation, out vendor_id) >= 0) OnIam(this, adr, device_id, max_adpu, segmentation, vendor_id); else Trace.TraceWarning("Couldn't decode IamBroadcast"); } else if (service == BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_WHO_IS && OnWhoIs != null) { int low_limit; int high_limit; if (Services.DecodeWhoIsBroadcast(buffer, offset, length, out low_limit, out high_limit) >= 0) OnWhoIs(this, adr, low_limit, high_limit); else Trace.TraceWarning("Couldn't decode WhoIsBroadcast"); } else if (service == BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_COV_NOTIFICATION && OnCOVNotification != null) { uint subscriberProcessIdentifier; BacnetObjectId initiatingDeviceIdentifier; BacnetObjectId monitoredObjectIdentifier; uint timeRemaining; ICollection<BacnetPropertyValue> values; if (Services.DecodeCOVNotifyUnconfirmed(buffer, offset, length, out subscriberProcessIdentifier, out initiatingDeviceIdentifier, out monitoredObjectIdentifier, out timeRemaining, out values) >= 0) OnCOVNotification(this, adr, 0, subscriberProcessIdentifier, initiatingDeviceIdentifier, monitoredObjectIdentifier, timeRemaining, false, values, BacnetMaxSegments.MAX_SEG0); else Trace.TraceWarning("Couldn't decode COVNotifyUnconfirmed"); } else if (service == BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_TIME_SYNCHRONIZATION && OnTimeSynchronize != null) { DateTime dateTime; if (Services.DecodeTimeSync(buffer, offset, length, out dateTime) >= 0) OnTimeSynchronize(this, adr, dateTime, false); else Trace.TraceWarning("Couldn't decode TimeSynchronize"); } else if (service == BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_UTC_TIME_SYNCHRONIZATION && OnTimeSynchronize != null) { DateTime dateTime; if (Services.DecodeTimeSync(buffer, offset, length, out dateTime) >= 0) OnTimeSynchronize(this, adr, dateTime, true); else Trace.TraceWarning("Couldn't decode TimeSynchronize"); } else if (service == BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_EVENT_NOTIFICATION && OnEventNotify!=null) // F. Chaxel { BacnetEventNotificationData EventData; if (Services.DecodeEventNotifyData(buffer, offset, length, out EventData) >= 0) { OnEventNotify(this, adr, EventData); } else Trace.TraceWarning("Couldn't decode Event/Alarm Notification"); } else { Trace.TraceWarning("Unconfirmed service not handled: " + service.ToString()); } } catch (Exception ex) { Trace.TraceError("Error in ProcessUnconfirmedServiceRequest: " + ex.Message); } }