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