private void ReceiveProgramHandler(byte[] data) { try { SelectedProgramFile = null; suppressRefresh = true; currentProgram = data; var parsed = Mp2Sysex.ParseProgram(data); State.SetProgram(parsed.Item2); ProgramName = parsed.Item1.Trim(); newProgram = Mp2Sysex.CreateProgram(currentProgram, midiChannel, programName, State); NotifyPropertyChanged(nameof(Values)); NotifyPropertyChanged(nameof(Readouts)); NotifyPropertyChanged(nameof(CurrentProgramHex)); NotifyPropertyChanged(nameof(NewProgramHex)); isRetry = false; } catch (Exception ex) { if (ex.Message.Contains("Computed checksum does match program value")) { if (!isRetry) { isRetry = true; RequestProgram(null); return; } else { isRetry = false; throw; } } if (ex is FieldAccessException) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Warning); } else { MainWindow.OnUnhandledException(ex); } } finally { suppressRefresh = false; } }
public void Refresh() { if (suppressRefresh) { return; } State.RefreshAll(); NotifyPropertyChanged(() => Readouts); if (currentProgram != null && programName != null && State != null) { newProgram = Mp2Sysex.CreateProgram(currentProgram, midiChannel, programName, State); NotifyPropertyChanged(nameof(NewProgramHex)); if (AutoUpdate) { lock (sendLock) { programToSend = newProgram; } } } }
private void RequestProgram(object obj) { midiConnection.SendSysex(Mp2Sysex.RequestDumpSysex(midiChannel)); }