//
// Copyright (c) 2022 Google LLC
//
// This file is licensed under the MIT License.
// Full license text is available in 'licenses/MIT.txt'.
//

using Antmicro.Renode.Core;
using Antmicro.Renode.Core.Structure;
using Antmicro.Renode.Core.Structure.Registers;
using Antmicro.Renode.Logging;
using Antmicro.Renode.Peripherals.Bus;
using Antmicro.Renode.Peripherals.Sensor;
using System;

namespace Antmicro.Renode.Peripherals.Sensors
{
    public class CamCtrl : IDoubleWordPeripheral, IKnownSize
    {
        public CamCtrl()
        {
            TriggerOut = new GPIO();
        }

        public void Reset()
        {
            TriggerOut.Unset();
        }

        public uint ReadDoubleWord(long offset)
        {
            return 0;
        }

        public void WriteDoubleWord(long offset, uint value)
        {
            TriggerOut.Set(Convert.ToBoolean(value));
        }

        public GPIO TriggerOut { get; }

        public long Size => 0x4;
    }
}
