Beispiel #1
0
 public uint ReadDoubleWord(long offset)
 {
     lock (innerLock)
     {
         return(RegistersCollection.Read(offset));
     }
 }
        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 });
        }
Beispiel #3
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 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 });
        }
Beispiel #5
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 });
        }
Beispiel #6
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 });
        }
Beispiel #7
0
        public byte[] Read(int count)
        {
            this.Log(LogLevel.Debug, "Reading {0} bytes from register {1} (0x{1:X})", count, registerAddress);
            var result = new byte[count];

            for (var i = 0; i < result.Length; i++)
            {
                result[i] = RegistersCollection.Read((byte)registerAddress);
                this.Log(LogLevel.Noisy, "Read value: {0}", result[i]);
                RegistersAutoIncrement();
            }
            return(result);
        }
Beispiel #8
0
        public byte[] Read(int count)
        {
            this.Log(LogLevel.Noisy, "Reading {0} bytes from register {1} (0x{1:X})", count, regAddress);
            var result = new byte[count];

            readyPending.Value = false;
            UpdateInterrupts();
            for (var i = 0; i < result.Length; i++)
            {
                result[i] = RegistersCollection.Read((byte)regAddress);
                this.Log(LogLevel.Noisy, "Read value {0}", result[i]);
                RegistersAutoIncrement();
            }
            return(result);
        }
        public byte[] Read(int count)
        {
            if (registerAddress == Registers.Data0)
            {
                fifoP.TryDequeueNewSample();
                fifoT.TryDequeueNewSample();
            }

            var result = new byte[registerAddress == Registers.Data0?6 : registerAddress == Registers.OSR?4 : registerAddress == Registers.Calib0?21 : 1];

            for (var i = 0; i < result.Length; i++)
            {
                result[i] = RegistersCollection.Read((byte)registerAddress + i);
                this.Log(LogLevel.Noisy, "Read value 0x{0:X} from register {1} (0x{1:X})", result[i], (Registers)registerAddress + i);
            }
            return(result);
        }
        public byte[] Read(int count)
        {
            this.Log(LogLevel.Debug, "Reading {0} bytes from register {1} (0x{1:X})", count, regAddress);
            var result = new byte[count];

            for (var i = 0; i < result.Length; i++)
            {
                if (regAddress == Registers.DataOutXH)
                {
                    dataLock.Value = true;
                }
                result[i] = RegistersCollection.Read((byte)regAddress);
                this.Log(LogLevel.Noisy, "Read value {0}", result[i]);
                regAddress = (Registers)((int)regAddress + 1);
            }
            return(result);
        }
        public byte[] Read(int count)
        {
            parent.NoisyLog("OV2640: Reading from the device in state {0}", state);
            switch (state)
            {
            case State.Processing:
            {
                var result = RegistersCollection.Read(address);
                parent.NoisyLog("OV2640: Read 0x{0:X} from register {1}", result, DecodeRegister(address));
                return(new [] { result });
            }

            default:
                parent.Log(LogLevel.Error, "OV2640: Reading in an unexpected state: {0}", state);
                return(new byte[0]);
            }
        }
Beispiel #12
0
        public byte[] Read(int count)
        {
            if (registerAddress == Registers.RateXLSB)
            {
                fifo.TryDequeueNewSample();
            }
            // If registerAddress = 0x02 (xLSB) return 6 bytes (x,y,z)
            // else return 1 byte i.e. the register
            var result = new byte[registerAddress == Registers.RateXLSB?6:1];

            for (var i = 0; i < result.Length; i++)
            {
                result[i] = RegistersCollection.Read((byte)registerAddress + i);
                this.Log(LogLevel.Noisy, "Read value 0x{0:X} from register {1} (0x{1:X})", result[i], (Registers)registerAddress + i);
            }
            return(result);
        }
        public byte[] Read(int count = 1)
        {
            switch (address)
            {
            case (byte)Registers.OutputXLow:
            {
                // magnetic data is not queued
                fifo.TryDequeueNewSample();
            }
            break;
            }

            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 });
        }
Beispiel #14
0
        public byte[] Read(int count = 0)
        {
            var ret = new byte[count];

            for (int i = 0; i < count; i++)
            {
                ret[i] = RegistersCollection.Read(registerAddress);
                this.Log(LogLevel.Noisy, "Reading from {0}: 0x{1:X}", (Registers)registerAddress, ret[i]);

                if (registerAddress == (uint)(wrapAfterStatus.Value ? Registers.Status2 : Registers.ZoutMsb))
                {
                    registerAddress = (byte)Registers.XoutLsb;
                }
                else
                {
                    registerAddress++;
                }
            }
            return(ret);
        }
Beispiel #15
0
        public byte[] Read(int count = 1)
        {
            byte[] result = null;

            switch (state)
            {
            case State.Idle:
                this.Log(LogLevel.Noisy, "Unexpected reading in Idle state");
                result = new byte[] { };
                break;

            case State.Processing:
                result = new byte[] { RegistersCollection.Read(address) };
                address++;
                break;

            default:
                throw new ArgumentException($"Unexpected state: {state}");
            }

            return(result);
        }
Beispiel #16
0
        public byte Transmit(byte data)
        {
            byte result = 0;

            switch (state)
            {
            case State.Idle:
            {
                selectedRegister = (Registers)BitHelper.GetValue(data, 0, 7);
                var isRead = BitHelper.IsBitSet(data, 7);

                this.NoisyLog("Decoded register {0} (0x{0:X}) and isRead bit as {1}", selectedRegister, isRead);
                state = isRead
                        ? State.Reading
                        : State.Writing;

                break;
            }

            case State.Reading:
                this.NoisyLog("Reading register {0} (0x{0:X})", selectedRegister);
                result = RegistersCollection.Read((long)selectedRegister);
                break;

            case State.Writing:
                this.NoisyLog("Writing 0x{0:X} to register {1} (0x{1:X})", data, selectedRegister);
                RegistersCollection.Write((long)selectedRegister, data);
                UpdateDataAvailable();
                break;

            default:
                this.Log(LogLevel.Error, "Received byte in an unexpected state: {0}", state);
                break;
            }

            this.NoisyLog("Received byte 0x{0:X}, returning 0x{1:X}", data, result);
            return(result);
        }
Beispiel #17
0
        public byte Transmit(byte b)
        {
            if (!chipSelected)
            {
                this.Log(LogLevel.Warning, "Received transmission, but CS pin is not selected");
                return(0);
            }

            byte result = 0;

            switch (state)
            {
            case State.Idle:
                result = HandleIdle(b);
                break;

            case State.Reading:
                this.NoisyLog("Reading register {0} (0x{0:X})", (Registers)address);
                result = RegistersCollection.Read(address);
                address++;
                break;

            case State.Writing:
                this.NoisyLog("Writing 0x{0:X} to register {1} (0x{1:X})", b, (Registers)address);
                RegistersCollection.Write(address, b);
                address++;
                break;

            default:
                this.Log(LogLevel.Error, "Received byte in an unexpected state!");
                break;
            }

            this.Log(LogLevel.Noisy, "Transmitting - received 0x{0:X}, sending 0x{1:X} back", b, result);
            return(result);
        }
 public ushort ReadWord(long offset)
 {
     return(RegistersCollection.Read(offset));
 }
 public byte ReadRegister(byte offset)
 {
     return(RegistersCollection.Read(offset));
 }
 public virtual byte ReadByte(long offset)
 {
     return(RegistersCollection.Read(offset));
 }
Beispiel #21
0
 public virtual uint ReadDoubleWord(long offset)
 {
     return(RegistersCollection.Read(offset));
 }
 public uint ReadDoubleWord(long offset)
 {
     return(memoryManager.TryReadDoubleWord(offset, out uint result)
         ? result
         : RegistersCollection.Read(offset));
 }