public bool Write(byte[] data, bool disableAck = false, int timeout = 1000) { Stopwatch stopwatch = Stopwatch.StartNew(); StatusRegister statusRegister = _registerContainer.StatusRegister; while (statusRegister.TransmitFifoFull) { if (statusRegister.MaximunTransmitRetries) { //ReuseTransmitPayload(); bool checkOperatingMode = _commandProcessor.CheckOperatingMode; _commandProcessor.CheckOperatingMode = false; statusRegister.ResetToDefault(); _commandProcessor.CheckOperatingMode = checkOperatingMode; return(false); } //if (stopwatch.ElapsedMilliseconds() > timeout) // return false; statusRegister.Load(); } if (data.Length > Constants.MaxPayloadWidth) { throw new ArgumentOutOfRangeException(nameof(data), string.Format("Data should be 0-{0} bytes", Constants.MaxPayloadWidth)); } _commandProcessor.ExecuteCommand(disableAck ? DeviceCommands.W_TX_PAYLOAD_NO_ACK : DeviceCommands.W_TX_PAYLOAD, RegisterAddresses.EMPTY_ADDRESS, data); return(true); }
public override string ToString() { StringBuilder sb = new StringBuilder(); StatusRegister statusRegister = _registerContainer.StatusRegister; statusRegister.Load(); byte status = statusRegister; sb.AppendFormat("STATUS\t\t\t = 0x{0} RX_DR={1} TX_DS={2} MAX_RT={3} RX_P_NO={4} TX_FULL={5}\r\n", status.ToString("X").PadLeft(2, '0'), statusRegister.ReceiveDataReady, statusRegister.TransmitDataSent, statusRegister.MaximunTransmitRetries, statusRegister.ReceiveDataPipeNumber, statusRegister.TransmitFifoFull); sb.AppendLine(GetAddressRegister("RX_ADDR_P0-1", RegisterAddresses.RX_ADDR_P0, 2)); sb.AppendLine(GetByteRegister("RX_ADDR_P2-5", RegisterAddresses.RX_ADDR_P2, 4)); sb.AppendLine(GetAddressRegister("TX_ADDR", RegisterAddresses.TX_ADDR, 1)); sb.AppendLine(GetByteRegister("RX_PW_P0-6", RegisterAddresses.RX_PW_P0, 6)); sb.AppendLine(GetByteRegister("EN_AA", RegisterAddresses.EN_AA, 1)); sb.AppendLine(GetByteRegister("EN_RXADDR", RegisterAddresses.EN_RXADDR, 1)); sb.AppendLine(GetByteRegister("RF_CH", RegisterAddresses.RF_CH, 1)); sb.AppendLine(GetByteRegister("RF_SETUP", RegisterAddresses.RF_SETUP, 1)); sb.AppendLine(GetByteRegister("CONFIG", RegisterAddresses.CONFIG, 1)); sb.AppendLine(GetByteRegister("DYNPD/FEATURE", RegisterAddresses.DYNPD, 2)); sb.AppendLine("Data Rate\t\t = " + _configuration.DataRate.GetName()); sb.AppendLine("Model\t\t\t = " + _configuration.RadioModel.GetName()); sb.AppendLine("CRC Length\t\t = " + _configuration.CrcEncodingScheme.GetName()); sb.AppendLine("PA Power\t\t = " + _configuration.PowerLevel.GetName()); string output = sb.ToString(); _logger.InfoFormat("Arduino Details\r\n{0}", output); return(output); }