fix: 完善I2c ReadData函数

This commit is contained in:
alivender 2025-07-14 14:08:11 +08:00
parent 2b1ee90af7
commit 533e2561ab
1 changed files with 9 additions and 9 deletions

View File

@ -196,15 +196,15 @@ public class I2c
/// </summary> /// </summary>
/// <param name="devAddr">I2C设备地址</param> /// <param name="devAddr">I2C设备地址</param>
/// <param name="data">要写入的数据dummy数据</param> /// <param name="data">要写入的数据dummy数据</param>
/// <param name="length">要读取的数据长度</param> /// <param name="dataReadLength">要读取的数据长度</param>
/// <param name="proto">I2C协议类型</param> /// <param name="proto">I2C协议类型</param>
/// <returns>操作结果,成功返回读取到的数据,否则返回异常信息</returns> /// <returns>操作结果,成功返回读取到的数据,否则返回异常信息</returns>
public async ValueTask<Result<byte[]>> ReadData(UInt32 devAddr, byte[] data, int length, I2cProtocol proto) public async ValueTask<Result<byte[]>> ReadData(UInt32 devAddr, byte[] data, int dataReadLength, I2cProtocol proto)
{ {
if (length <= 0 || length > 0x0000_FFFF) if (dataReadLength <= 0 || dataReadLength > 0x0000_FFFF)
{ {
logger.Error($"Read length {length} is invalid or exceeds maximum allowed 0x0000_FFFF"); logger.Error($"Read length {dataReadLength} is invalid or exceeds maximum allowed 0x0000_FFFF");
return new(new ArgumentException($"Read length {length} is invalid or exceeds maximum allowed 0x0000_FFFF")); return new(new ArgumentException($"Read length {dataReadLength} is invalid or exceeds maximum allowed 0x0000_FFFF"));
} }
if (data.Length > 0x0000_FFFF) if (data.Length > 0x0000_FFFF)
@ -244,9 +244,9 @@ public class I2c
} }
} }
// 配置本次传输数据量:[15:0]为dummy长度data.Length-1[31:16]为读长度length-1 // 配置本次传输数据量:[15:0]为读长度length-1[31:16]为dummy长度data.Length-1
{ {
uint tranConfig = ((uint)(data.Length - 1)) | (((uint)(length - 1)) << 16); uint tranConfig = ((uint)(dataReadLength - 1)) | (((uint)(data.Length - 1)) << 16);
var ret = await UDPClientPool.WriteAddr(this.ep, this.taskID, I2cAddr.TranConfig, tranConfig); var ret = await UDPClientPool.WriteAddr(this.ep, this.taskID, I2cAddr.TranConfig, tranConfig);
if (!ret.IsSuccessful) if (!ret.IsSuccessful)
{ {
@ -296,14 +296,14 @@ public class I2c
// 读取数据 // 读取数据
{ {
var ret = await UDPClientPool.ReadAddr(this.ep, this.taskID, I2cAddr.Read, length); var ret = await UDPClientPool.ReadAddr(this.ep, this.taskID, I2cAddr.Read, dataReadLength);
if (!ret.IsSuccessful) if (!ret.IsSuccessful)
{ {
logger.Error($"Failed to read data from I2C FIFO: {ret.Error}"); logger.Error($"Failed to read data from I2C FIFO: {ret.Error}");
return new(ret.Error); return new(ret.Error);
} }
if (ret.Value.Options.Data == null || ret.Value.Options.Data.Length != length) if (ret.Value.Options.Data == null || ret.Value.Options.Data.Length != dataReadLength)
{ {
logger.Error($"ReadAddr returned unexpected data length: {ret.Value.Options.Data?.Length ?? 0}"); logger.Error($"ReadAddr returned unexpected data length: {ret.Value.Options.Data?.Length ?? 0}");
return new(new Exception("Failed to read expected amount of data from I2C FIFO")); return new(new Exception("Failed to read expected amount of data from I2C FIFO"));