public static void EncodeConfirmedServiceRequest(EncodeBuffer buffer, BacnetPduTypes type, BacnetConfirmedServices service, BacnetMaxSegments max_segments, BacnetMaxApdu max_adpu, byte invoke_id, byte sequence_number, byte proposed_window_size) { buffer.buffer[buffer.offset++] = (byte)type; buffer.buffer[buffer.offset++] = (byte)((byte)max_segments | (byte)max_adpu); buffer.buffer[buffer.offset++] = invoke_id; if ((type & BacnetPduTypes.SEGMENTED_MESSAGE) > 0) { buffer.buffer[buffer.offset++] = sequence_number; buffer.buffer[buffer.offset++] = proposed_window_size; } buffer.buffer[buffer.offset++] = (byte)service; }
public static int DecodeConfirmedServiceRequest(byte[] buffer, int offset, out BacnetPduTypes type, out BacnetConfirmedServices service, out BacnetMaxSegments max_segments, out BacnetMaxApdu max_adpu, out byte invoke_id, out byte sequence_number, out byte proposed_window_number) { int org_offset = offset; type = (BacnetPduTypes)buffer[offset++]; max_segments = (BacnetMaxSegments)(buffer[offset] & 0xF0); max_adpu = (BacnetMaxApdu)(buffer[offset++] & 0x0F); invoke_id = buffer[offset++]; sequence_number = 0; proposed_window_number = 0; if ((type & BacnetPduTypes.SEGMENTED_MESSAGE) > 0) { sequence_number = buffer[offset++]; proposed_window_number = buffer[offset++]; } service = (BacnetConfirmedServices)buffer[offset++]; return(offset - org_offset); }
private void m_comm_OnSegment(BacnetClient sender, BacnetAddress adr, BacnetPduTypes type, BacnetConfirmedServices service, byte invoke_id, BacnetMaxSegments max_segments, BacnetMaxApdu max_adpu, byte sequence_number, bool first, bool more_follows, byte[] buffer, int offset, int length) { if (invoke_id == m_wait_invoke_id) { Segmented = true; ((System.Threading.ManualResetEvent)AsyncWaitHandle).Set(); } }