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);
        }
Beispiel #2
0
        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);
        }