Ejemplo n.º 1
0
        /*
         * private SPIEngine.SPIResult SpiTransferBuffer__(List<byte> buffer, bool software = false)
         * {
         *  var r = new SPIEngine.SPIResult();
         *  var shouldSelectUnSelect = _alreadySelected == false;
         *  try
         *  {
         *      if(shouldSelectUnSelect)
         *          this.SelectDevice(true);
         *
         *      if (software)
         *      {
         *          for (var i = 0; i < buffer.Count; i++)
         *          {
         *              Shift.ShiftOut(this._nusbio, Nusbio.GetGpioIndex(this._spiEngine.MosiGpio), Nusbio.GetGpioIndex(this._spiEngine.ClockGpio), buffer[i]);
         *          }
         *      }
         *      else
         *      {
         *          var gs = new GpioSequence((this._nusbio as Nusbio).GetGpioMask(), this._nusbio.GetTransferBufferSize());
         *          var i  = 0;
         *          while (i < buffer.Count)
         *          {
         *              if (gs.EmptySpace >= GpioSequence.BIT_PER_BYTE)
         *              {
         *                  // Add one byte to the gpio sequence
         *                  gs.ShiftOut(this._nusbio as Nusbio, this._spiEngine.MosiGpio, this._spiEngine.ClockGpio, buffer[i], dataAndClockOptimized:false);
         *                  i += 1;
         *              }
         *              else
         *              {
         *                  if (gs.Send(this._nusbio as Nusbio))
         *                  {
         *                      var lastMaskValue = gs[gs.Count - 1];
         *                      gs = new GpioSequence(lastMaskValue, this._nusbio.GetTransferBufferSize());
         *                  }
         *                  else
         *                  {
         *                      r.Fail("SPI buffer was not sent");
         *                      break;
         *                  }
         *              }
         *          }
         *          if (gs.Count > 0)
         *          {
         *              if (gs.Send(this._nusbio as Nusbio))
         *                  r.Succeeded = true;
         *              else
         *                  r.Fail("SPI buffer was not sent");
         *          }
         *      }
         *  }
         *  finally
         *  {
         *      if(shouldSelectUnSelect)
         *          this.SelectDevice(false);
         *  }
         *  return r;
         * }
         */
        private SPIEngine.SPIResult SpiTransferBuffer(List <byte> buffer, bool software = false)
        {
            var r = new SPIEngine.SPIResult();
            var shouldSelectUnSelect = _alreadySelected == false;

            try
            {
                if (shouldSelectUnSelect)
                {
                    this.SelectDevice(true);
                }

                if (software)
                {
                    for (var i = 0; i < buffer.Count; i++)
                    {
                        Shift.ShiftOut(this._nusbio, Nusbio.GetGpioIndex(this._spiEngine.MosiGpio), Nusbio.GetGpioIndex(this._spiEngine.ClockGpio), buffer[i]);
                    }
                }
                else
                {
                    r = this._spiEngine.Transfer(buffer, select: false);
                }
            }
            finally
            {
                if (shouldSelectUnSelect)
                {
                    this.SelectDevice(false);
                }
            }
            return(r);
        }
Ejemplo n.º 2
0
        public SPIEngine.SPIResult WriteRow(int deviceIndex, int row, bool computeBufferOnly = false)
        {
            var r = new SPIEngine.SPIResult();

            if (deviceIndex < 0 || deviceIndex >= _deviceCount)
            {
                return(r);
            }

            int offset = deviceIndex * MATRIX_ROW_SIZE;

            r = SpiTransfer(deviceIndex, (byte)(row + 1), _pixels[offset + row], computeBufferOnly: computeBufferOnly);
            return(r);
        }
Ejemplo n.º 3
0
        /*
         * Set the number of digits (or rows) to be displayed.
         * See datasheet for sideeffects of the scanlimit on the brightness
         * of the display.
         * Params :
         * devIndex	address of the display to control
         * limit	number of digits to be displayed (1..8)
         */
        public bool SetScanLimit(int devIndex, int limit)
        {
            var r = new SPIEngine.SPIResult();

            if (devIndex < 0 || devIndex >= _deviceCount)
            {
                return(r.Succeeded);
            }

            if (limit >= 0 && limit < 8)
            {
                r = SpiTransfer(devIndex, OP_SCANLIMIT, (byte)limit);
            }

            return(r.Succeeded);
        }
Ejemplo n.º 4
0
        private SPIEngine.SPIResult SpiTransfer(int devIndex, byte opCode, byte data, bool software = false, bool computeBufferOnly = false)
        {
            SPIEngine.SPIResult r = null;
            var buffer            = new List <byte>(10);
            var deviceToSkipFirst = this.DeviceCount - devIndex - 1;

            for (var d = 0; d < deviceToSkipFirst; d++)
            {
                buffer.Add(0); // OpCode
                buffer.Add(0); // Data
            }

            buffer.Add(opCode); // OpCode
            buffer.Add(data);   // Data

            var deviceToSkipAfter = this.DeviceCount - (this.DeviceCount - devIndex);

            for (var d = 0; d < deviceToSkipAfter; d++)
            {
                buffer.Add(0); // OpCode
                buffer.Add(0); // Data
            }

            if (computeBufferOnly)
            {
                r = new SPIEngine.SPIResult()
                {
                    Succeeded = true
                };
                r.ReadBuffer = buffer;
            }
            else
            {
                if (LogDataToFile != null)
                {
                    LogBufferToLogFile(buffer);
                }

                r = SpiTransferBuffer(buffer, software);
            }
            return(r);
        }
Ejemplo n.º 5
0
        /*
         * Set the Shutdown (power saving) mode for the device
         * Params :
         * devIndex	The address of the display to control
         * _pixels	If true the device goes into power-down mode. Set to false
         *		for normal operation.
         */
        public bool Shutdown(bool status, int devIndex = 0)
        {
            var r = new SPIEngine.SPIResult();

            if (devIndex < 0 || devIndex >= _deviceCount)
            {
                return(r.Succeeded);
            }

            if (status)
            {
                r = SpiTransfer(devIndex, OP_SHUTDOWN, 0);
            }
            else
            {
                r = SpiTransfer(devIndex, OP_SHUTDOWN, 1);
            }

            return(r.Succeeded);
        }