private byte[] Read(ulong offset, int length, SwitchOffsetType type) { var method = type.GetReadMethod(); if (length <= MaximumTransferSize) { var cmd = method(offset, length); Send(cmd); return(ReadResponse(length)); } byte[] result = new byte[length]; for (int i = 0; i < length; i += MaximumTransferSize) { int len = MaximumTransferSize; int delta = length - i; if (delta < MaximumTransferSize) { len = delta; } var cmd = method(offset + (uint)i, len); Send(cmd); var bytes = ReadResponse(length); bytes.CopyTo(result, i); } return(result); }
private void Write(byte[] data, ulong offset, SwitchOffsetType type) { var method = type.GetWriteMethod(); if (data.Length <= MaximumTransferSize) { var cmd = method(offset, data); Send(cmd); return; } int byteCount = data.Length; for (int i = 0; i < byteCount; i += MaximumTransferSize) { var slice = data.SliceSafe(i, MaximumTransferSize); var cmd = method(offset + (uint)i, slice); Send(cmd); } }
/// <summary> /// Gets the Peek command encoder for the input <see cref="SwitchOffsetType"/> /// </summary> /// <param name="type">Offset type</param> /// <param name="crlf">Protocol uses CRLF to terminate messages?</param> public static Func <ulong, int, byte[]> GetReadMethod(this SwitchOffsetType type, bool crlf = true) => type switch {