Exemple #1
0
        static async Task Main(string[] args)
        {
            if (args.Length != 2)
            {
                Usage();
                return;
            }

            int channel;

            if (!int.TryParse(args[0], out channel))
            {
                Usage();
                return;
            }

            if (channel != 0 && channel != 1)
            {
                Usage();
                return;
            }

            Role role;

            if (Enum.TryParse(typeof(Role), args[1], true, out var roleObj))
            {
                role = (Role)roleObj;
            }
            else
            {
                Usage();
                return;
            }

            Console.WriteLine($"NRF role {role} on channel {channel}");

            var channels = new Dictionary <int, ChannelDef>
            {
                [0] = new ChannelDef
                {
                    Spi        = Pi.Spi.Channel0,
                    ChipEnable = Pi.Gpio[WiringPiPin.Pin06],
                    Irq        = Pi.Gpio[WiringPiPin.Pin05]
                },
                [1] = new ChannelDef
                {
                    Spi        = Pi.Spi.Channel1,
                    ChipEnable = Pi.Gpio[WiringPiPin.Pin26],
                    Irq        = Pi.Gpio[WiringPiPin.Pin27]
                }
            };

            Pi.Spi.Channel0Frequency = 2 * 1000 * 1000;
            Pi.Spi.Channel1Frequency = 2 * 1000 * 1000;

            var nrf = new NRFDriver(channels[channel].Spi, channels[channel].ChipEnable, channels[channel].Irq);

            nrf.PowerDown();

            Thread.Sleep(100);

            nrf.PowerUp();

            Thread.Sleep(100);

            nrf.Setup();

            Console.WriteLine($"Module status = 0x{nrf.ReadStatus():X}");

            if (role == Role.RX)
            {
                RunReceiver(nrf);
            }
            else if (role == Role.TX)
            {
                await RunTransmitter(nrf);
            }
        }