Compare commits

..

No commits in common. "23236b22bdef964499cb16c06adff29ae7835443" and "ff7f7b5a76da602f7eeddd5317ff7224968b041c" have entirely different histories.

1 changed files with 12 additions and 12 deletions

View File

@ -330,23 +330,23 @@ public class UDPClientPool
return new(new Exception("Message bus not working!")); return new(new Exception("Message bus not working!"));
// Calculate read times and segments // Calculate read times and segments
var max4BytesPerRead = 0x80; // 1024 bytes per read var maxBytesPerRead = 256 * (32 / 8); // 1024 bytes per read
var rest4Bytes = dataLength % max4BytesPerRead; var restBytes = dataLength % maxBytesPerRead;
var readTimes = (rest4Bytes != 0) ? var readTimes = restBytes != 0 ?
(dataLength / max4BytesPerRead + 1) : dataLength / maxBytesPerRead + 1 :
(dataLength / max4BytesPerRead); dataLength / maxBytesPerRead;
for (var i = 0; i < readTimes; i++) for (var i = 0; i < readTimes; i++)
{ {
// Calculate current segment size // Calculate current segment size
var isLastSegment = i == readTimes - 1; var isLastSegment = i == readTimes - 1;
var currentSegmentSize = (isLastSegment && rest4Bytes != 0) ? rest4Bytes : max4BytesPerRead; var currentSegmentSize = isLastSegment ? restBytes : maxBytesPerRead;
// Set burst length (in 32-bit words) // Set burst length (in 32-bit words)
opts.BurstLength = (byte)(currentSegmentSize - 1); opts.BurstLength = (byte)(currentSegmentSize / 4 - 1);
// Update address for current segment // Update address for current segment
opts.Address = devAddr + (uint)(i * max4BytesPerRead); opts.Address = devAddr + (uint)(i * maxBytesPerRead);
// Send read address package // Send read address package
ret = await UDPClientPool.SendAddrPackAsync(endPoint, new SendAddrPackage(opts)); ret = await UDPClientPool.SendAddrPackAsync(endPoint, new SendAddrPackage(opts));
@ -365,16 +365,16 @@ public class UDPClientPool
return new(new Exception($"Data is null at segment {i}, package: {retPackOpts.ToString()}")); return new(new Exception($"Data is null at segment {i}, package: {retPackOpts.ToString()}"));
// Validate received data length // Validate received data length
if (retPackOpts.Data.Length != currentSegmentSize * 4) if (retPackOpts.Data.Length != currentSegmentSize)
return new(new Exception($"Expected {currentSegmentSize * 4} bytes but received {retPackOpts.Data.Length} bytes at segment {i}")); return new(new Exception($"Expected {currentSegmentSize} bytes but received {retPackOpts.Data.Length} bytes at segment {i}"));
// Add received data to result // Add received data to result
resultData.AddRange(retPackOpts.Data); resultData.AddRange(retPackOpts.Data);
} }
// Validate total data length // Validate total data length
if (resultData.Count != dataLength * 4) if (resultData.Count != dataLength)
return new(new Exception($"Expected total {dataLength * 4} bytes but received {resultData.Count} bytes")); return new(new Exception($"Expected total {dataLength} bytes but received {resultData.Count} bytes"));
return resultData.ToArray(); return resultData.ToArray();
} }