internal void ThreadButtonState() { int LastSearchTime = Config.ButtonStateUpdateInterval; while (true) { if (Form.NTRConnection.HardwarePID != null) { SearchCriteria Criteria = new SearchCriteria(); Criteria.ProcessID = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Form.NTRConnection.HardwarePID), 0); Criteria.DataType = DataTypeExact.Bytes1; Criteria.StartAddress = BUTTON_STATES_START; Criteria.Length = BUTTON_STATES_SIZE; Criteria.SearchType = SearchTypeBase.Unknown; Criteria.SearchValue = new byte[] { 0 }; Criteria.Size = 1; Criteria.HideSearch = true; Form.NTRConnection.SearchCriteria.Add(Criteria); Form.NTRConnection.SendReadMemoryPacket(Criteria); ButtonState = (ButtonState)Criteria.AddressesFound[BUTTON_STATES_START + Offset_Button][0]; ShoulderState = (ShoulderState)Criteria.AddressesFound[BUTTON_STATES_START + Offset_Shoulder][0]; StickState = (StickState)Criteria.AddressesFound[BUTTON_STATES_START + Offset_Stick][0]; StickHoriz = Criteria.AddressesFound[BUTTON_STATES_START + Offset_Horiz][0]; StickVert = Criteria.AddressesFound[BUTTON_STATES_START + Offset_Vert][0]; LastSearchTime = Math.Max(LastSearchTime, (int)Criteria.Duration); Form.NTRConnection.SetCurrentOperationText2 = ButtonState.ToString() + "|" + ShoulderState.ToString() + "|" + StickState.ToString() + "|" + StickHoriz + "|" + StickVert + "|" + LastSearchTime; } Thread.Sleep(LastSearchTime * 2); } }