/* * 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); }
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); }
/* * 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); }
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); }
/* * 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); }