public static void ConfigureReporting( KeysDTO controlsState, FPGA.Signal <bool> TXD, FPGA.Signal <bool> LED) { Sequential reportHandler = () => { FPGA.Config.Suppress("W0002", LED); /* * bool internalTXD = true; * Func<bool> inv = () => !internalTXD; * * FPGA.Config.Link(internalTXD, TXD); * FPGA.Config.Link(inv, LED); */ while (true) { //UART.RegisteredWrite(115200, 64, out internalTXD); FPGA.Runtime.Delay(TimeSpan.FromMilliseconds(20)); JSON.SerializeToUART(ref controlsState, TXD); } }; FPGA.Config.OnStartup(reportHandler); }
static void SimulatedInput(Subject <byte> byteStream, string input) { Task.Factory.StartNew(async() => { int idx = 0; var lookup = new Dictionary <char, KeypadKeyCode>() { { '0', KeypadKeyCode.D0 }, { '1', KeypadKeyCode.D1 }, { '2', KeypadKeyCode.D2 }, { '3', KeypadKeyCode.D3 }, { '4', KeypadKeyCode.D4 }, { '5', KeypadKeyCode.D5 }, { '6', KeypadKeyCode.D6 }, { '7', KeypadKeyCode.D7 }, { '8', KeypadKeyCode.D8 }, { '9', KeypadKeyCode.D9 }, }; while (true) { await Task.Delay(TimeSpan.FromMilliseconds(100)); var dto = new KeysDTO() { KeyCode = KeypadKeyCode.D6 }; if (lookup.TryGetValue(input[idx % input.Length], out KeypadKeyCode keyCode)) { dto.KeyCode = keyCode; } var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new List <KeysDTO>() { dto })); foreach (var b in bytes) { byteStream.OnNext(b); } byteStream.OnNext(10); idx++; } }); }
public static void Controls( // ADC FPGA.OutputSignal <bool> ADC1NCS, FPGA.OutputSignal <bool> ADC1SLCK, FPGA.OutputSignal <bool> ADC1DIN, FPGA.InputSignal <bool> ADC1DOUT, // keypad FPGA.OutputSignal <bool> K7, FPGA.OutputSignal <bool> K6, FPGA.OutputSignal <bool> K5, FPGA.OutputSignal <bool> K4, FPGA.InputSignal <bool> K3, FPGA.InputSignal <bool> K2, FPGA.InputSignal <bool> K1, FPGA.InputSignal <bool> K0, ref KeysDTO controlsState) { KeypadKeyCode internalCode = 0; FPGA.Config.Link(internalCode, out controlsState.KeyCode); ushort adcChannel1Value = 32767, adcChannel2Value = 32767; FPGA.Config.Link(adcChannel1Value, controlsState.X); FPGA.Config.Link(adcChannel2Value, controlsState.Y); Sequential keypadHandler = () => { Keypad4x4.ReadASCIICode(K7, K6, K5, K4, K3, K2, K1, K0, out internalCode); }; FPGA.Config.OnTimer(TimeSpan.FromMilliseconds(20), keypadHandler); Sequential joystickHandler = () => { while (true) { ADC102S021.Read(out adcChannel1Value, out adcChannel2Value, ADC1NCS, ADC1SLCK, ADC1DIN, ADC1DOUT); } }; FPGA.Config.OnStartup(joystickHandler); }
public static async Task Aggregator( // blinker FPGA.OutputSignal <bool> LED1, FPGA.OutputSignal <bool> LED2, // keypad FPGA.OutputSignal <bool> K7, FPGA.OutputSignal <bool> K6, FPGA.OutputSignal <bool> K5, FPGA.OutputSignal <bool> K4, FPGA.InputSignal <bool> K3, FPGA.InputSignal <bool> K2, FPGA.InputSignal <bool> K1, FPGA.InputSignal <bool> K0, // banks FPGA.OutputSignal <bool> Bank1, FPGA.OutputSignal <bool> Bank2, // ADC FPGA.OutputSignal <bool> ADC1NCS, FPGA.OutputSignal <bool> ADC1SLCK, FPGA.OutputSignal <bool> ADC1DIN, FPGA.InputSignal <bool> ADC1DOUT, // UART FPGA.InputSignal <bool> RXD, FPGA.OutputSignal <bool> TXD ) { IsAlive.Blink(LED1); QuokkaBoard.OutputBank(Bank1); QuokkaBoard.InputBank(Bank2); KeysDTO controlsState = new KeysDTO(); Peripherals.Controls( ADC1NCS, ADC1SLCK, ADC1DIN, ADC1DOUT, K7, K6, K5, K4, K3, K2, K1, K0, ref controlsState); ConfigureReporting(controlsState, TXD, LED2); }