using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using UnityEngine.Events; namespace DanroJump.Hardware.Com { public interface IComSystem : IComCreditWallet, IComInputSource, IPrizeShowcaseGateway, IComLightingController { bool IsRunning { get; } string MainDeviceId { get; } string PrizeStandDeviceId { get; } IReadOnlyCollection ConnectedDeviceIds { get; } UnityEvent DeviceAuthorized { get; } UnityEvent DeviceDisconnected { get; } void StartSystem(); void StopSystem(bool sendShutdownCommands); bool SendToMain(string command); bool SendToDevice(string deviceId, string command); void SendToAll(string command); string GetDeviceRole(string deviceId); string GetDeviceMac(string deviceId); } public interface IComCreditWallet { int Credits { get; } UnityEvent CreditAdded { get; } UnityEvent CreditRemoved { get; } UnityEvent CreditsChanged { get; } void AddCredit(int amount = 1); bool TrySpendCredits(int amount = 1); void SetCredits(int value); } public interface IComInputSource { string LastMainInputBits { get; } UnityEvent MainInputReceived { get; } UnityEvent HopperSensorTriggered { get; } string GetLastInputBits(string deviceId); } public interface IPrizeShowcaseGateway { UnityEvent PrizeBoxOpened { get; } Task> GetPrizeBoxStatusesAsync( CancellationToken cancellationToken = default); Task GetReadyPrizeBoxesAsync(CancellationToken cancellationToken = default); Task OpenPrizeBoxAsync(int boxNumber, CancellationToken cancellationToken = default); Task ForceOpenPrizeBoxAsync(int boxNumber, CancellationToken cancellationToken = default); bool SetPrizeStandIdleLighting(); bool HighlightPrizeBox(int boxNumber); } public interface IComLightingController { void PlayBoardLight(LightMode mode, float cycles = -1f); void PlayBoardLightSequence(IReadOnlyList steps, bool loop); void PlayDefaultBoardLight(); void StopBoardLightSequence(); void StopAllBoardEffects(); void BlinkHat(); void BlinkHat(float intervalSeconds); void StopHatBlink(bool leaveHatEnabled = true); void PauseLighting(); void ResumeLighting(); } public interface IComPortProvider { string[] GetPortNames(); } public interface IComTransportFactory { IComTransport Create(SerialSettings settings); } public interface IComTransport : IDisposable { bool IsOpen { get; } void Open(); void Close(); void DiscardInBuffer(); void DiscardOutBuffer(); string ReadLine(); void WriteLine(string value); } }