Ejemplo n.º 1
0
        internal byte Read(mcp23s17Register port)
        {
            ISpiTransferBuffer transferBuffer = spiConnection.CreateTransferBuffer(3, SpiTransferMode.ReadWrite);

            transferBuffer.Tx[0] = CMD_READ;
            transferBuffer.Tx[1] = (byte)port;
            transferBuffer.Tx[2] = 0;
            var result = spiConnection.Transfer(transferBuffer);

            return(transferBuffer.Rx[2]);
        }
Ejemplo n.º 2
0
        private int Write(Mcp23S17Register port, byte data)
        {
            ISpiTransferBuffer transferBuffer = this.spiConnection.CreateTransferBuffer(3, SpiTransferMode.Write);

            transferBuffer.Tx[0] = CmdWrite;
            transferBuffer.Tx[1] = (byte)port;
            transferBuffer.Tx[2] = data;
            var result = this.spiConnection.Transfer(transferBuffer);

            return(result);
        }
        private int Write(mcp23s17Register port, byte data)
        {
            ISpiTransferBuffer transferBuffer = spiConnection.CreateTransferBuffer(3, SpiTransferMode.Write);

            transferBuffer.Tx[0] = CMD_WRITE;
            transferBuffer.Tx[1] = (byte)port;
            transferBuffer.Tx[2] = data;
            var result = spiConnection.Transfer(transferBuffer);

            return(result);
        }
Ejemplo n.º 4
0
        internal byte Read(Mcp23S17Register port)
        {
            ISpiTransferBuffer transferBuffer = this.spiConnection.CreateTransferBuffer(3, SpiTransferMode.ReadWrite);

            transferBuffer.Tx[0] = CmdRead;
            transferBuffer.Tx[1] = (byte)port;
            transferBuffer.Tx[2] = 0;
            var result = this.spiConnection.Transfer(transferBuffer);

            return(transferBuffer.Rx[2]);
        }
        /// <summary>
        /// Starts the SPI data transfer.
        /// </summary>
        /// <param name="buffer">The transfer buffer that contains data to be send and/or the received data.</param>
        /// <returns>An <see cref="int"/> that contains the result of the transfer operation.</returns>
        public int Transfer(ISpiTransferBuffer buffer)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }

            var request   = Interop.Interop.GetSpiMessageRequest(1);
            var structure = buffer.ControlStructure;
            var result    = deviceFile.Control(request, ref structure);

            result.ThrowOnPInvokeError <SendSpiMessageException>("Can't send SPI message. Error {1}: {2}");

            return(result);
        }
        /// <summary>
        /// Creates a new instance of the <see cref="Tlc59711Connection"/> class and initializes it.
        /// </summary>
        /// <param name="connection">A open SPI connection</param>
        /// <param name="initializeWithDefault">If <c>true</c> the SPI connection will be initialized with common data transfers settings.</param>
        /// <param name="numberOfDevices">Number of <see cref="ITlc59711Device"/>s connected together.</param>
        public Tlc59711Connection(INativeSpiConnection connection, bool initializeWithDefault, int numberOfDevices) {
            if (ReferenceEquals(connection, null))
                throw new ArgumentNullException("connection");

            if (numberOfDevices <= 0)
                throw new ArgumentOutOfRangeException("numberOfDevices", "You need at least one device.");

            this.connection = connection;
            
            if (initializeWithDefault) {
                connection.SetBitsPerWord(BITS_PER_WORD);
                connection.SetSpiMode(SPI_MODE_0);
                connection.SetMaxSpeed(SPEED);
                connection.SetDelay(DELAY);
            }

            var requiredMemorySize = numberOfDevices * Tlc59711Device.COMMAND_SIZE;
            transferBuffer = connection.CreateTransferBuffer(requiredMemorySize, SpiTransferMode.Write);

            deviceCluster = new Tlc59711Cluster(transferBuffer.Tx, numberOfDevices);
        }
        protected override void EstablishContext()
        {
            // SPI control structure we expect to see during the P/Invoke call
            controlStructure = new SpiTransferControlStructure
            {
                BitsPerWord      = BITS_PER_WORD,
                Length           = 5,
                Delay            = DELAY,
                ChipSelectChange = 1,
                Speed            = SPEED_IN_HZ
            };

            controlDeviceMock = new Mock <ISpiControlDevice>();
            controlDevice     = controlDeviceMock.Object;
            controlDeviceMock.Setup(x => x.Control(It.IsAny <uint>(), ref It.Ref <SpiTransferControlStructure> .IsAny)).Returns(IOCTL_PINVOKE_RESULT_CODE);

            connection = new NativeSpiConnection(controlDevice);

            bufferMock = new Mock <ISpiTransferBuffer>();
            buffer     = bufferMock.Object;
            bufferMock.Setup(x => buffer.ControlStructure).Returns(controlStructure);
        }
        protected override void EstablishContext()
        {
            // SPI control structure we expect to see during the P/Invoke call
            controlStructure = new SpiTransferControlStructure
            {
                BitsPerWord      = BITS_PER_WORD,
                Length           = 5,
                Delay            = DELAY,
                ChipSelectChange = 1,
                Speed            = SPEED_IN_HZ
            };

            controlDevice = A.Fake <ISpiControlDevice>();
            A.CallTo(() => controlDevice.Control(A <uint> .Ignored, ref controlStructure))
            .WithAnyArguments()
            .Returns(IOCTL_PINVOKE_RESULT_CODE);

            connection = new NativeSpiConnection(controlDevice);

            buffer = A.Fake <ISpiTransferBuffer>();
            A.CallTo(() => buffer.ControlStructure)
            .Returns(controlStructure);
        }
 /// <summary>
 /// Sets up the transfer buffer for reading input pins;
 /// </summary>
 private void CreateReusableBufferForInputPolling()
 {
     inputPollBuffer = spiConnection.CreateTransferBuffer(3, SpiTransferMode.ReadWrite);
     inputPollBuffer.Tx[0] = CMD_READ;
     inputPollBuffer.Tx[1] = (byte)mcp23s17Register.GPIOB;
     inputPollBuffer.Tx[2] = 0;
 }
 protected override void BecauseOf()
 {
     buffer = connection.CreateTransferBuffer(REQUESTED_SIZE, SpiTransferMode.ReadWrite);
 }
Ejemplo n.º 11
0
 protected override void BecauseOf() {
     buffer = new SpiTransferBuffer(REQUESTED_SIZE, SpiTransferMode.Read);
 }
Ejemplo n.º 12
0
 protected override void Cleanup() {
     if (!ReferenceEquals(buffer, null)) {
         buffer.Dispose();
         buffer = null;
     }
 }
        /// <summary>
        /// Starts the SPI data transfer.
        /// </summary>
        /// <param name="buffer">The transfer buffer that contains data to be send and/or the received data.</param>
        /// <returns>An <see cref="int"/> that contains the result of the transfer operation.</returns>
        public int Transfer(ISpiTransferBuffer buffer)
        {
            if (buffer == null) {
                throw new ArgumentNullException("buffer");
            }

            var request = Interop.GetSpiMessageRequest(1);
            var structure = buffer.ControlStructure;
            var result = deviceFile.Control(request, ref structure);

            result.ThrowOnPInvokeError<SendSpiMessageException>("Can't send SPI message. Error {1}: {2}");

            return result;
        }
 protected override void BecauseOf()
 {
     buffer = connection.CreateTransferBuffer(REQUESTED_SIZE, SpiTransferMode.ReadWrite);
 }
Ejemplo n.º 15
0
 protected override void BecauseOf()
 {
     buffer = new SpiTransferBuffer(REQUESTED_SIZE, SpiTransferMode.Read);
 }
        protected override void EstablishContext()
        {
            // SPI control structure we expect to see during the P/Invoke call
            controlStructure = new SpiTransferControlStructure {
                BitsPerWord = BITS_PER_WORD,
                Length = 5,
                Delay = DELAY,
                ChipSelectChange = 1,
                Speed = SPEED_IN_HZ
            };

            controlDevice = A.Fake<ISpiControlDevice>();
            controlDevice
                .CallsTo(device => device.Control(A<uint>.Ignored, ref controlStructure))
                .WithAnyArguments()
                .Returns(IOCTL_PINVOKE_RESULT_CODE);

            connection = new NativeSpiConnection(controlDevice);

            buffer = A.Fake<ISpiTransferBuffer>();
            buffer
                .CallsTo(b => b.ControlStructure)
                .Returns(controlStructure);
        }
        protected override void EstablishContext()
        {
            controlDevice = A.Fake<ISpiControlDevice>();
            controlDevice
                .CallsTo(device => device.Control(A<uint>.Ignored, A<SpiTransferControlStructure[]>.Ignored))
                .Returns(IOCTL_PINVOKE_RESULT_CODE);

            connection = new NativeSpiConnection(controlDevice);

            // SPI control structure we expect to see during the P/Invoke call
            controlStructure = new SpiTransferControlStructure {
                BitsPerWord = BITS_PER_WORD,
                Length = 5,
                Delay = DELAY,
                ChipSelectChange = 1,
                Speed = SPEED_IN_HZ
            };

            buffer = A.Fake<ISpiTransferBuffer>();
            buffer
                .CallsTo(b => b.ControlStructure)
                .Returns(controlStructure);

            // setup fake collection to return our "prepared" fake buffer
            collection = A.Fake<ISpiTransferBufferCollection>();
            collection
                .CallsTo(c => c.Length)
                .Returns(1);
            collection
                .CallsTo(c => c.GetEnumerator())
                .ReturnsLazily(call => new List<ISpiTransferBuffer>{buffer}.GetEnumerator());
        }