Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,82 @@
using RobotNet10.CANOpen.Interfaces;
namespace RobotNet10.CANOpen;
/// <summary>
/// Service quản lý ICanBus và CanOpenDevice instances
/// Đảm bảo chỉ có một ICanBus instance cho mỗi CAN interface
/// </summary>
public interface ICanOpenManager : IDisposable
{
/// <summary>
/// Lấy hoặc tạo ICanBus instance cho interface name
/// Nếu đã tồn tại, trả về instance hiện có
/// </summary>
/// <param name="interfaceName">Tên CAN interface (ví dụ: "can0", "can1")</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>ICanBus instance (đã được connect)</returns>
Task<ICanBus> GetOrCreateCanBusAsync(string interfaceName, CancellationToken cancellationToken = default);
/// <summary>
/// Lấy ICanBus instance đã tồn tại (không tạo mới nếu chưa có)
/// </summary>
/// <param name="interfaceName">Tên CAN interface</param>
/// <returns>ICanBus instance hoặc null nếu chưa tồn tại</returns>
ICanBus? GetCanBus(string interfaceName);
/// <summary>
/// Lấy hoặc tạo CanOpenDevice instance cho (interfaceName, nodeId) pair
/// </summary>
/// <param name="interfaceName">Tên CAN interface</param>
/// <param name="nodeId">NodeId của device (1-127)</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>CanOpenDevice instance</returns>
Task<CanOpenDevice> GetOrCreateDeviceAsync(string interfaceName, byte nodeId, CancellationToken cancellationToken = default);
/// <summary>
/// Lấy CanOpenDevice instance đã tồn tại (không tạo mới nếu chưa có)
/// </summary>
/// <param name="interfaceName">Tên CAN interface</param>
/// <param name="nodeId">NodeId của device</param>
/// <returns>CanOpenDevice instance hoặc null nếu chưa tồn tại</returns>
CanOpenDevice? GetDevice(string interfaceName, byte nodeId);
/// <summary>
/// Xóa CanOpenDevice instance khỏi cache và dispose nó
/// </summary>
/// <param name="interfaceName">Tên CAN interface</param>
/// <param name="nodeId">NodeId của device</param>
/// <returns>True nếu đã xóa thành công</returns>
bool RemoveDevice(string interfaceName, byte nodeId);
/// <summary>
/// Xóa ICanBus instance khỏi cache và dispose nó
/// Lưu ý: Sẽ dispose tất cả CanOpenDevice đang sử dụng ICanBus này
/// </summary>
/// <param name="interfaceName">Tên CAN interface</param>
/// <returns>True nếu đã xóa thành công</returns>
Task<bool> RemoveCanBusAsync(string interfaceName, CancellationToken cancellationToken = default);
/// <summary>
/// Lấy danh sách tất cả interface names đang được quản lý
/// </summary>
IReadOnlyList<string> GetManagedInterfaces();
/// <summary>
/// Lấy danh sách tất cả nodeIds đang được quản lý cho một interface
/// </summary>
/// <param name="interfaceName">Tên CAN interface</param>
/// <returns>Danh sách nodeIds</returns>
IReadOnlyList<byte> GetManagedNodeIds(string interfaceName);
/// <summary>
/// Kiểm tra xem interface có đang được quản lý không
/// </summary>
bool IsInterfaceManaged(string interfaceName);
/// <summary>
/// Kiểm tra xem device có đang được quản lý không
/// </summary>
bool IsDeviceManaged(string interfaceName, byte nodeId);
}