Example #1
0
        public void Write(byte[] data)
        {
            if (data.Length == 0)
            {
                this.Log(LogLevel.Warning, "Unexpected write with no data");
                return;
            }

            this.Log(LogLevel.Noisy, "Write with {0} bytes of data: {1}", data.Length, Misc.PrettyPrintCollectionHex(data));
            registerAddress = (Registers)data[0];

            if (data.Length > 1)
            {
                // skip the first byte as it contains register address
                foreach (var b in data.Skip(1))
                {
                    this.Log(LogLevel.Noisy, "Writing 0x{0:X} to register {1} (0x{1:X})", b, registerAddress);
                    RegistersCollection.Write((byte)registerAddress, b);
                }
            }
            else
            {
                this.Log(LogLevel.Noisy, "Preparing to read register {0} (0x{0:X})", registerAddress);
            }
        }
Example #2
0
 public void WriteDoubleWord(long offset, uint value)
 {
     lock (innerLock)
     {
         RegistersCollection.Write(offset, value);
     }
 }
        public override void Reset()
        {
            enabled = false;

            base.Reset();
            RegistersCollection.Reset();
        }
Example #4
0
        public byte Transmit(byte data)
        {
            this.Log(LogLevel.Noisy, "Received byte: 0x{0:X} in state {1}", data, state);
            byte result = 0;

            switch (state)
            {
            case State.Idle:
                HandleCommandByte(data);
                result = RegistersCollection.Read((long)RegisterType.HostIrqPending);
                break;

            case State.Writing:
                this.Log(LogLevel.Noisy, "Writing value 0x{0:X} to register {1} (0x{1:X})", data, lastRegister);
                RegistersCollection.Write((long)lastRegister, data);
                break;

            case State.Reading:
                this.Log(LogLevel.Noisy, "Reading value from register {0} (0x{0:X})", lastRegister);
                result = RegistersCollection.Read((long)lastRegister);
                break;

            default:
                this.Log(LogLevel.Error, "Received byte 0x{0:X} in an unexpected state: {1}. Ignoring it...", data, state);
                break;
            }

            this.Log(LogLevel.Noisy, "Returning byte: 0x{0:X}", result);
            return(result);
        }
 public override void Reset()
 {
     receiveFifo.Clear();
     enabled = false;
     RegistersCollection.Reset();
     UpdateInterrupts();
 }
Example #6
0
        private void Write(byte b)
        {
            parent.NoisyLog("OV2640: Received byte 0x{0:X} in state {1}", b, state);
            switch (state)
            {
            case State.Idle:
            {
                address = b;
                state   = State.Processing;

                parent.NoisyLog("OV2640: Selected register {0}", DecodeRegister(address));
                break;
            }

            case State.Processing:
            {
                parent.NoisyLog("OV2640: Writing 0x{0:X} to register {1}", b, DecodeRegister(address));
                RegistersCollection.Write(address, b);
                break;
            }

            default:
                parent.Log(LogLevel.Error, "OV2640: Writing byte in an unexpected state: {0}", state);
                break;
            }
        }
Example #7
0
 public void Reset()
 {
     RegistersCollection.Reset();
     registerAddress = 0;
     Int1.Unset();
     this.Log(LogLevel.Noisy, "Reset registers");
 }
Example #8
0
 public void Reset()
 {
     RegistersCollection.Reset();
     chipSelected     = false;
     selectedRegister = 0x0;
     state            = State.Idle;
 }
        public byte[] Read(int count = 1)
        {
            var dequeued = false;

            switch (address)
            {
            case (byte)Registers.AccelerometerOutputXLow:
                dequeued = accelerationFifo.TryDequeueNewSample();
                break;

            case (byte)Registers.GyroscopeOutputXLow:
                dequeued = angularRateFifo.TryDequeueNewSample();
                break;

            case (byte)Registers.TemperatureOutputLow:
                // temperature data is not queued
                temperatureFifo.TryDequeueNewSample();
                break;
            }

            if (dequeued)
            {
                if (currentReportedFifoDepth > 0)
                {
                    currentReportedFifoDepth--;
                }
            }

            var result = RegistersCollection.Read(address);

            this.NoisyLog("Reading register {1} (0x{1:X}) from device: 0x{0:X}", result, (Registers)address);
            TryIncrementAddress();

            return(new byte [] { result });
        }
Example #10
0
        public void Write(byte[] data)
        {
            if (data.Length == 0)
            {
                this.Log(LogLevel.Warning, "Unexpected write with no data");
                return;
            }

            this.Log(LogLevel.Noisy, "Write with {0} bytes of data: {1}", data.Length, Misc.PrettyPrintCollectionHex(data));
            registerAddress = (Registers)data[0];

            if (data.Length > 1)
            {
                // Skip the first byte as it contains register address
                // Must skip final byte, problem with I2C
                for (var i = 1; i < data.Length - 1; i++)
                {
                    this.Log(LogLevel.Noisy, "Writing 0x{0:X} to register {1} (0x{1:X})", data[i], registerAddress);
                    RegistersCollection.Write((byte)registerAddress, data[i]);
                    registerAddress++;
                }
            }
            else
            {
                this.Log(LogLevel.Noisy, "Preparing to read register {0} (0x{0:X})", registerAddress);
            }
        }
Example #11
0
 public uint ReadDoubleWord(long offset)
 {
     lock (innerLock)
     {
         return(RegistersCollection.Read(offset));
     }
 }
Example #12
0
 public override void Reset()
 {
     RegisteredPeripheral?.Reset();
     RegistersCollection.Reset();
     irqManager.Reset();
     internalBuffer.Clear();
 }
        public void Write(byte[] data)
        {
            if (data.Length == 0)
            {
                this.Log(LogLevel.Warning, "Unexpected write with no data");
                return;
            }

            this.Log(LogLevel.Noisy, "Write with {0} bytes of data", data.Length);
            regAddress = (Registers)data[0];

            if (data.Length > 1)
            {
                // skip the first byte as it contains register address
                foreach (var b in data.Skip(1))
                {
                    this.Log(LogLevel.Debug, "Writing 0x{0:X} to register {1} (0x{1:X})", b, regAddress);
                    RegistersCollection.Write((byte)regAddress, b);
                    regAddress = (Registers)((int)regAddress + 1);
                }
            }
            else
            {
                this.Log(LogLevel.Noisy, "Preparing to read register {0} (0x{0:X})", regAddress);
                dataReady.Value = IsInSleepMode();
                dataLock.Value  = false;
            }
        }
 public void WriteDoubleWord(long offset, uint value)
 {
     if (!memoryManager.TryWriteDoubleWord(offset, value))
     {
         RegistersCollection.Write(offset, value);
     }
 }
Example #15
0
        public override void Reset()
        {
            base.Reset();
            RegistersCollection.Reset();
            Array.Clear(buttonsPending, 0, buttonsPending.Length);

            UpdateInterrupt();
        }
        public byte[] Read(int count)
        {
            var result = RegistersCollection.Read(address);

            this.NoisyLog("Reading register {0} (0x{1:X}) from device: 0x{2:X}", cache.Get(address, x => Enum.GetName(typeof(T), x)), address, result);

            return(new byte [] { result });
        }
 public void Reset()
 {
     memoryManager.ResetMemories();
     RegistersCollection.Reset();
     randomGenerator?.Reset();
     isCompleted = false;
     coreReset   = false;
 }
Example #18
0
 public void Reset()
 {
     RegistersCollection.Reset();
     multipleOperation = false;
     registerAddress   = 0;
     IRQ0.Unset();
     IRQ1.Unset();
 }
Example #19
0
        public byte[] Read(int count)
        {
            var result = RegistersCollection.Read(address);

            this.NoisyLog("Reading register {1} (0x{1:X}) from device: 0x{0:X}", result, Enum.GetName(typeof(T), address));

            return(new byte [] { result });
        }
Example #20
0
        public byte[] Read(int count = 1)
        {
            var result = RegistersCollection.Read(address);

            // this.Log(LogLevel.Warning, "Reading register {1} (0x{1:x}) from device: 0x{0:x}", result, (Registers)address);
            TryIncrementAddress();

            return(new byte[] { result });
        }
Example #21
0
        public void Reset()
        {
            RegistersCollection.Reset();

            address = 0;
            addressAutoIncrement = true;
            isFirstByte          = true;
            isSecondByte         = false;
        }
        public void Reset()
        {
            RegistersCollection.Reset();

            sensor.Reset();
            chipSelected     = false;
            selectedRegister = Register.Test;
            state            = State.Idle;
        }
        public override void Reset()
        {
            continuousTransferInProgress = false;
            selectedDevice = null;
            sizeLeft       = 0;

            outputFifo.Clear();
            RegistersCollection.Reset();
            UpdateInterrupts();
        }
        public void Reset()
        {
            RegistersCollection.Reset();

            magneticSensitivity = Sensitivity.Gauss4;

            address = 0;
            addressAutoIncrement = false;
            state = State.Idle;
        }
Example #25
0
        public void Write(byte[] data)
        {
            if (data.Length == 0)
            {
                this.Log(LogLevel.Warning, "Unexpected write with no data");
                return;
            }

            this.Log(LogLevel.Noisy, "Write with {0} bytes of data", data.Length);
            // Bits 6-0 represent the first register address
            registerAddress = (Registers)(data[0] & 0x7F);
            // The most significant bit means multiple read/write operation
            multipleOperation = data[0] > 0x80;

            if (data.Length > 1)
            {
                // skip the first byte as it contains register address
                foreach (var b in data.Skip(1))
                {
                    this.Log(LogLevel.Noisy, "Writing 0x{0:X} to register {1} (0x{1:X})", b, registerAddress);
                    RegistersCollection.Write((byte)registerAddress, b);
                    RegistersAutoIncrement();
                }
            }
            else
            {
                this.Log(LogLevel.Noisy, "Preparing to read register {0} (0x{0:X})", registerAddress);
                if (dataRate.Value == 0)
                {
                    this.Log(LogLevel.Debug, "Power-down mode is set");
                    xyzDataAvailable.Value = false;
                    xDataAvailable.Value   = false;
                    yDataAvailable.Value   = false;
                    zDataAvailable.Value   = false;
                }
                else
                {
                    if (xAxisEnable.Value && yAxisEnable.Value && zAxisEnable.Value)
                    {
                        xyzDataAvailable.Value = true;
                        xDataAvailable.Value   = false;
                        yDataAvailable.Value   = false;
                        zDataAvailable.Value   = false;
                    }
                    else
                    {
                        xyzDataAvailable.Value = false;
                        xDataAvailable.Value   = xAxisEnable.Value;
                        yDataAvailable.Value   = yAxisEnable.Value;
                        zDataAvailable.Value   = zAxisEnable.Value;
                    }
                }
                UpdateInterrupts();
            }
        }
        public override void Reset()
        {
            slaveToMasterBuffer.Clear();
            masterToSlaveBuffer.Clear();

            selectedSlave = null;
            enabled       = false;

            RegistersCollection.Reset();
            UpdateInterrupts();
        }
Example #27
0
        public void Reset()
        {
            RegistersCollection.Reset();
            state        = State.Idle;
            address      = 0;
            chipSelected = false;

            AccelerationX = 0;
            AccelerationY = 0;
            AccelerationZ = 0;
        }
        public void Reset()
        {
            RegistersCollection.Reset();

            angularRateSensitivity  = AngularRateSensitivity.DPS245;
            accelerationSensitivity = AccelerationSensitivity.G2;

            address = 0;
            currentReportedFifoDepth = 0;
            state = State.Idle;
        }
        public override void Reset()
        {
            base.Reset();

            RegistersCollection.Reset();

            foreach (var pin in Pins)
            {
                pin.Reset();
            }
        }
        public override void Reset()
        {
            RegistersCollection.Reset();
            outputBuffer.Clear();

            repeatCounter = 1;
            dataBytesLeft = 0;
            bytesToRead   = 0;

            state = State.WaitForCommand;
        }