コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: SwitchOffsetType.cs プロジェクト: xfyer/SysBot.NET
 /// <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
 {