using Peak.Can.Basic;
using IOModuleTestBlazor.Models;
namespace IOModuleTestBlazor.Services;
public interface ICanService
{
bool IsConnected { get; }
string ChannelName { get; }
Bitrate CurrentBitrate { get; }
///
/// Gets the latest received messages, indexed by CAN ID.
///
IReadOnlyDictionary GetLatestMessages();
// ── Filters ───────────────────────────────────────────────────────────────
IReadOnlyList Filters { get; }
CanFilter AddFilter(CanFilter filter);
bool RemoveFilter(Guid id);
void ClearFilters();
// ── Bitmasks ──────────────────────────────────────────────────────────────
IReadOnlyList Bitmasks { get; }
CanBitmask AddBitmask(CanBitmask bitmask);
bool RemoveBitmask(Guid id);
void ClearBitmasks();
// ── Helpers used by the worker ────────────────────────────────────────────
bool PassesFilter(uint messageId);
IReadOnlyDictionary ExtractSignals(uint messageId, byte[] data);
void UpdateLatestMessage(CanMessageDto dto);
// ── Channel management ────────────────────────────────────────────────────
/// Returns all PCAN USB channels that are currently available.
IReadOnlyList GetAvailableChannels();
///
/// Asks the worker to reinitialise on the next loop iteration.
/// Non-blocking — the actual reconnect happens asynchronously.
///
void RequestReinitialize(PcanChannel channel, Bitrate bitrate);
/// Called by the worker to pick up a pending reinit request.
bool TryConsumePendingReinit(out PcanChannel channel, out Bitrate bitrate);
// ── PCAN passthrough ──────────────────────────────────────────────────────
void Initialize(PcanChannel channel, Bitrate bitrate);
void Uninitialize();
PcanStatus Read(out PcanMessage msg, out ulong timestamp);
PcanStatus Write(PcanMessage msg);
}