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