// Created with MonoDevelop
//
//    Copyright (C) 2023 Hiperscan GmbH Dresden, Germany
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.



using System;
using System.Runtime.InteropServices;
using static Hiperscan.SGS.SgsNt.Protocol.BaseProtocol;

namespace Hiperscan.SGS.Splitter
{
    public static class SplitterProtocol
    {
        public const int BLOCK_INTERVAL = 150;

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct SplitterOperationTimeoutData : Hiperscan.SGS.SgsNt.Protocol.BaseProtocol.ITransferStruct
        {
            [MarshalAs(UnmanagedType.U4)] public uint OperationTimeout;
        }

            
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct SplitterUsbTimeoutData : Hiperscan.SGS.SgsNt.Protocol.BaseProtocol.ITransferStruct
        {
            [MarshalAs(UnmanagedType.U4)] public uint UsbReadTimeout;
            [MarshalAs(UnmanagedType.U4)] public uint UsbWriteTimeout;
        }

        public static Command SetSplitterOperationTimeout = new Command(AddressType.Splitter, 'S', 'O', typeof(SplitterOperationTimeoutData), (UInt16)Marshal.SizeOf(typeof(SplitterOperationTimeoutData)), null);
        public static Command SetSplitterUsbTimeouts = new Command(AddressType.Splitter, 'S', 'U', typeof(SplitterUsbTimeoutData), (UInt16)Marshal.SizeOf(typeof(SplitterUsbTimeoutData)), null);
    }
}
