Ejemplo n.º 1
0
        /// <summary>
        /// This will check the status of the switches and buttons on the physical front panel
        /// and will update the passed in logical front panel accordingly
        /// </summary>
        /// <param name="frontPanel"></param>
        public void ReadKeys(ref FrontPanel frontPanel)
        {
            string incoming;

            char[] keyedBuffer = new char[36];

            //Read Input Keys. These keys must be read in BEFORE the 'Enter MQ' or 'Enter Instruction' buttons are read.
            incoming       = Converter.ConvertToBinary(inp(PORT3_B0), 8);
            keyedBuffer[0] = incoming[3];
            keyedBuffer[1] = incoming[4];
            keyedBuffer[2] = incoming[5];
            keyedBuffer[3] = incoming[6];
            keyedBuffer[4] = incoming[7];

            incoming        = Converter.ConvertToBinary(inp(PORT3_C0), 8);
            keyedBuffer[5]  = incoming[0];
            keyedBuffer[6]  = incoming[1];
            keyedBuffer[7]  = incoming[2];
            keyedBuffer[8]  = incoming[3];
            keyedBuffer[9]  = incoming[4];
            keyedBuffer[10] = incoming[5];
            keyedBuffer[11] = incoming[6];
            keyedBuffer[12] = incoming[7];

            incoming        = Converter.ConvertToBinary(inp(PORT3_A1), 8);
            keyedBuffer[13] = incoming[0];
            keyedBuffer[14] = incoming[1];
            keyedBuffer[15] = incoming[2];
            keyedBuffer[16] = incoming[3];
            keyedBuffer[17] = incoming[4];
            keyedBuffer[18] = incoming[5];
            keyedBuffer[19] = incoming[6];
            keyedBuffer[20] = incoming[7];

            incoming        = Converter.ConvertToBinary(inp(PORT3_B1), 8);
            keyedBuffer[21] = incoming[0];
            keyedBuffer[22] = incoming[1];
            keyedBuffer[23] = incoming[2];
            keyedBuffer[24] = incoming[3];
            keyedBuffer[25] = incoming[4];
            keyedBuffer[26] = incoming[5];
            keyedBuffer[27] = incoming[6];
            keyedBuffer[28] = incoming[7];

            incoming        = Converter.ConvertToBinary(inp(PORT3_B1), 8);
            keyedBuffer[29] = incoming[0];
            keyedBuffer[30] = incoming[1];
            keyedBuffer[31] = incoming[2];
            keyedBuffer[32] = incoming[3];
            keyedBuffer[33] = incoming[4];
            keyedBuffer[34] = incoming[5];
            keyedBuffer[35] = incoming[6];

            frontPanel.KeyedInWord = new string(keyedBuffer);

            // Read Automatic/Manual Switch. This must be read be any buttons, otherwise users will be able to switch the machine to automatic
            //        and still use buttons that should only be used in manual mode.
            if (incoming[7] == '1')
            {
                if (frontPanel.Mode == RunMode.Manual)
                {
                    frontPanel.ChangeToAutomatic();
                }
            }
            else
            {
                if (frontPanel.Mode == RunMode.Automatic)
                {
                    frontPanel.ChangeToManual();
                }
            }

            //Read From Buttons
            incoming = Converter.ConvertToBinary(inp(PORT3_A0), 8);
            if (incoming[0] == '1')
            {
                frontPanel.SetDisplayIndex(IndexDisplay.IndexA);
            }
            if (incoming[1] == '1')
            {
                frontPanel.SetDisplayIndex(IndexDisplay.IndexB);
            }
            if (incoming[2] == '1')
            {
                frontPanel.SetDisplayIndex(IndexDisplay.IndexC);
            }
            if (incoming[3] == '1')
            {
                frontPanel.MultiStep();
            }
            if (incoming[4] == '1')
            {
                frontPanel.LoadDrum();
            }
            if (incoming[5] == '1')
            {
                frontPanel.SingleStep();
            }
            if (incoming[6] == '1')
            {
                frontPanel.Reset();
            }
            if (incoming[7] == '1')
            {
                frontPanel.Start();
            }

            incoming = Converter.ConvertToBinary(inp(PORT3_B0), 8);
            if (incoming[0] == '1')
            {
                frontPanel.Clear();
            }
            if (incoming[1] == '1')
            {
                frontPanel.EnterMQ();
            }
            if (incoming[2] == '1')
            {
                frontPanel.EnterInstruction();
            }
        }