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++;
                }
            });
        }
Example #3
0
        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);
        }