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