Configurable CPU Governor (fixed)
modified: .vscode/launch.json modified: react/CMakeLists.txt modified: react/public/var/config.json new file: react/src/GovernorSettings.tsx modified: react/src/JackHostStatus.tsx new file: react/src/ListSelectDialog.tsx modified: react/src/PiPedalModel.tsx modified: react/src/SettingsDialog.tsx modified: react/tmp.txt modified: src/BeastServer.cpp modified: src/BeastServer.hpp modified: src/CMakeLists.txt modified: src/ConfigMain.cpp new file: src/CpuGovernor.cpp new file: src/CpuGovernor.hpp new file: src/GovernorSettings.cpp new file: src/GovernorSettings.hpp new file: src/Ipv6Helpers.cpp new file: src/Ipv6Helpers.hpp modified: src/JackHost.cpp modified: src/PiPedalModel.cpp
This commit is contained in:
+75
-76
@@ -21,89 +21,88 @@ add_custom_command(
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/react
|
||||
|
||||
DEPENDS
|
||||
src/NumericInput.tsx
|
||||
src/RenameDialog.tsx
|
||||
src/ToobInputStageView.tsx
|
||||
src/ToobCabSimView.tsx
|
||||
src/SearchFilter.tsx
|
||||
src/Draggable.tsx
|
||||
src/SelectHoverBackground.tsx
|
||||
src/JackStatusView.tsx
|
||||
src/SplitControlView.tsx
|
||||
src/MidiBindingsDialog.tsx
|
||||
src/WifiChannel.tsx
|
||||
src/PluginControlView.tsx
|
||||
src/TemporaryDrawer.tsx
|
||||
src/logo.svg
|
||||
src/AlsaDeviceInfo.tsx
|
||||
src/JackServerSettingsDialog.tsx
|
||||
src/ZoomedUiControl.tsx
|
||||
src/PedalBoardView.tsx
|
||||
src/MainPage.tsx
|
||||
src/App.tsx
|
||||
src/AppThemed.tsx
|
||||
src/PresetDialog.tsx
|
||||
src/PluginPreset.tsx
|
||||
src/react-app-env.d.ts
|
||||
src/ToobSpectrumResponseView.tsx
|
||||
src/SettingsDialog.tsx
|
||||
src/SelectChannelsDialog.tsx
|
||||
src/StringBuilder.tsx
|
||||
src/ToobPowerStage2View.tsx
|
||||
src/SearchControl.tsx
|
||||
src/XxxSnippet.tsx
|
||||
src/Units.tsx
|
||||
src/Jack.tsx
|
||||
src/PluginControl.tsx
|
||||
src/ResizeResponsiveComponent.tsx
|
||||
src/Lv2Plugin.tsx
|
||||
src/index.tsx
|
||||
src/NoChangePassword.tsx
|
||||
src/VuMeter.tsx
|
||||
src/ControlViewFactory.tsx
|
||||
src/JackServerSettings.tsx
|
||||
src/MidiBinding.tsx
|
||||
src/UploadDialog.tsx
|
||||
src/PiPedalSocket.tsx
|
||||
src/PedalBoard.tsx
|
||||
src/JackHostStatus.tsx
|
||||
src/ZoomedDial.tsx
|
||||
src/Rect.tsx
|
||||
src/SvgPathBuilder.tsx
|
||||
src/IControlViewFactory.tsx
|
||||
src/PiPedalModel.tsx
|
||||
src/PluginInfoDialog.tsx
|
||||
src/reportWebVitals.ts
|
||||
src/PiPedalError.tsx
|
||||
src/BankDialog.tsx
|
||||
src/PluginIcon.tsx
|
||||
src/WifiConfigDialog.tsx
|
||||
src/PresetSelector.tsx
|
||||
src/LoadPluginDialog.tsx
|
||||
src/ToobFrequencyResponseView.tsx
|
||||
src/SplitControlView.tsx
|
||||
src/WifiConfigSettings.tsx
|
||||
src/setupTests.ts
|
||||
src/AboutDialog.tsx
|
||||
src/index.css
|
||||
src/Banks.tsx
|
||||
src/DialogEx.tsx
|
||||
src/ToobWaveShapeView.tsx
|
||||
src/FullScreenIME.tsx
|
||||
src/AppThemed.css
|
||||
src/JackHostStatus.tsx
|
||||
src/SearchFilter.tsx
|
||||
src/MainPage.tsx
|
||||
src/PiPedalModel.tsx
|
||||
src/PluginPresetSelector.tsx
|
||||
src/Utility.tsx
|
||||
src/SelectMidiChannelsDialog.tsx
|
||||
src/App.test.tsx
|
||||
src/MidiBindingView.tsx
|
||||
src/SplitUiControls.tsx
|
||||
src/PluginClass.tsx
|
||||
src/ObservableProperty.tsx
|
||||
src/Pedal.tsx
|
||||
src/GxTunerControl.tsx
|
||||
src/DraggableGrid.tsx
|
||||
src/ToobMLView.tsx
|
||||
src/SettingsDialog.tsx
|
||||
src/PiPedalSocket.tsx
|
||||
src/ToobFrequencyResponseView.tsx
|
||||
src/ControlViewFactory.tsx
|
||||
src/Utility.tsx
|
||||
src/ToobToneStackView.tsx
|
||||
src/SelectHoverBackground.tsx
|
||||
src/MidiBindingsDialog.tsx
|
||||
src/TemporaryDrawer.tsx
|
||||
src/GxTunerView.tsx
|
||||
src/ToobInputStageView.tsx
|
||||
src/DraggableGrid.tsx
|
||||
src/JackStatusView.tsx
|
||||
src/PluginControl.tsx
|
||||
src/XxxSnippet.tsx
|
||||
src/PluginPreset.tsx
|
||||
src/Jack.tsx
|
||||
src/AlsaDeviceInfo.tsx
|
||||
src/MidiBinding.tsx
|
||||
src/PiPedalError.tsx
|
||||
src/IControlViewFactory.tsx
|
||||
src/Lv2Plugin.tsx
|
||||
src/PedalBoard.tsx
|
||||
src/PedalBoardView.tsx
|
||||
src/PresetDialog.tsx
|
||||
src/AppThemed.tsx
|
||||
src/ZoomedDial.tsx
|
||||
src/RenameDialog.tsx
|
||||
src/SplitUiControls.tsx
|
||||
src/GovernorSettings.tsx
|
||||
src/AboutDialog.tsx
|
||||
src/ToobSpectrumResponseView.tsx
|
||||
src/PluginControlView.tsx
|
||||
src/NoChangePassword.tsx
|
||||
src/ToobSpectrumAnalyzerView.tsx
|
||||
|
||||
src/MidiBindingView.tsx
|
||||
src/GxTunerControl.tsx
|
||||
src/Banks.tsx
|
||||
src/PluginPresetsDialog.tsx
|
||||
src/BankDialog.tsx
|
||||
src/UploadDialog.tsx
|
||||
src/ToobPowerStage2View.tsx
|
||||
src/index.tsx
|
||||
src/Units.tsx
|
||||
src/VuMeter.tsx
|
||||
src/App.test.tsx
|
||||
src/DialogEx.tsx
|
||||
src/StringBuilder.tsx
|
||||
src/SelectChannelsDialog.tsx
|
||||
src/Draggable.tsx
|
||||
src/ZoomedUiControl.tsx
|
||||
src/Rect.tsx
|
||||
src/PluginClass.tsx
|
||||
src/PluginIcon.tsx
|
||||
src/App.tsx
|
||||
src/ResizeResponsiveComponent.tsx
|
||||
src/SvgPathBuilder.tsx
|
||||
src/NumericInput.tsx
|
||||
src/JackServerSettings.tsx
|
||||
src/ListSelectDialog.tsx
|
||||
src/JackServerSettingsDialog.tsx
|
||||
src/ObservableProperty.tsx
|
||||
src/SelectMidiChannelsDialog.tsx
|
||||
src/WifiChannel.tsx
|
||||
src/LoadPluginDialog.tsx
|
||||
src/WifiConfigDialog.tsx
|
||||
src/PluginInfoDialog.tsx
|
||||
src/ToobWaveShapeView.tsx
|
||||
src/ToobCabSimView.tsx
|
||||
src/PresetSelector.tsx
|
||||
|
||||
public/css/roboto.css
|
||||
public/fonts/Roboto-BlackItalic.woff2
|
||||
public/fonts/Roboto-Black.woff2
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"socket_server_port": 8080,
|
||||
"socket_server_address": "*",
|
||||
"socket_server_address": "[fe80::df30:41b9:1ede:c23c]",
|
||||
|
||||
"max_upload_size": 1048576,
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
// Copyright (c) 2022 Robin Davies
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
// this software and associated documentation files (the "Software"), to deal in
|
||||
// the Software without restriction, including without limitation the rights to
|
||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
// the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
// subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
|
||||
export default class GovernorSettings {
|
||||
deserialize(input: any) : GovernorSettings{
|
||||
this.governors = input.governors;
|
||||
this.governor = input.governor;
|
||||
return this;
|
||||
}
|
||||
clone(): GovernorSettings
|
||||
{
|
||||
return new GovernorSettings().deserialize(this);
|
||||
}
|
||||
governors: string[] = ["ondemand","performance"];
|
||||
governor: string = "performance";
|
||||
|
||||
}
|
||||
@@ -93,10 +93,10 @@ export default class JackHostStatus {
|
||||
{
|
||||
(status.cpuFreqMax === status.cpuFreqMin)?
|
||||
(
|
||||
<span> {fmtCpuFreq(status.cpuFreqMax)} {status.governor} </span>
|
||||
<span> {status.governor} {fmtCpuFreq(status.cpuFreqMax)} </span>
|
||||
)
|
||||
:(
|
||||
<span> {fmtCpuFreq(status.cpuFreqMax)}-{fmtCpuFreq(status.cpuFreqMax)} {status.governor} </span>
|
||||
<span> {status.governor} {fmtCpuFreq(status.cpuFreqMax)}-{fmtCpuFreq(status.cpuFreqMax)} </span>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
// Copyright (c) 2022 Robin Davies
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
// this software and associated documentation files (the "Software"), to deal in
|
||||
// the Software without restriction, including without limitation the rights to
|
||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
// the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
// subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import React from 'react';
|
||||
import Button from '@mui/material/Button';
|
||||
|
||||
|
||||
import Radio from '@mui/material/Radio';
|
||||
import List from '@mui/material/List';
|
||||
import ListItem from '@mui/material/ListItem';
|
||||
import ListItemButton from '@mui/material/ListItemButton';
|
||||
import ListItemIcon from '@mui/material/ListItemIcon';
|
||||
import ListItemText from '@mui/material/ListItemText';
|
||||
|
||||
import Dialog from '@mui/material/Dialog';
|
||||
import DialogActions from '@mui/material/DialogActions';
|
||||
import ResizeResponsiveComponent from './ResizeResponsiveComponent';
|
||||
|
||||
|
||||
export interface ListSelectDialogProps {
|
||||
open: boolean,
|
||||
title: string,
|
||||
width: number,
|
||||
selectedItem: string,
|
||||
items: string[],
|
||||
onOk: (selectedItem: string) => void,
|
||||
onClose: () => void
|
||||
};
|
||||
|
||||
export interface ListSelectDialogState {
|
||||
fullScreen: boolean;
|
||||
};
|
||||
|
||||
export default class ListSelectDialog extends ResizeResponsiveComponent<ListSelectDialogProps, ListSelectDialogState> {
|
||||
|
||||
refText: React.RefObject<HTMLInputElement>;
|
||||
|
||||
constructor(props: ListSelectDialogProps) {
|
||||
super(props);
|
||||
this.state = {
|
||||
fullScreen: false
|
||||
};
|
||||
this.refText = React.createRef<HTMLInputElement>();
|
||||
}
|
||||
mounted: boolean = false;
|
||||
|
||||
|
||||
|
||||
onWindowSizeChanged(width: number, height: number): void {
|
||||
this.setState({ fullScreen: height < 200 })
|
||||
}
|
||||
|
||||
|
||||
componentDidMount() {
|
||||
super.componentDidMount();
|
||||
this.mounted = true;
|
||||
}
|
||||
componentWillUnmount() {
|
||||
super.componentWillUnmount();
|
||||
this.mounted = false;
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
<Dialog onClose={()=>this.props.onClose()} open={this.props.open}>
|
||||
<List sx={{pt: 0}}>
|
||||
{
|
||||
this.props.items.map(
|
||||
(value: string, index: number) => {
|
||||
return (
|
||||
<ListItem key={index} >
|
||||
<ListItemButton role={undefined} onClick={()=> this.props.onOk(value)} dense>
|
||||
<ListItemIcon>
|
||||
<Radio
|
||||
edge="start"
|
||||
checked={value === this.props.selectedItem}
|
||||
disableRipple
|
||||
/>
|
||||
</ListItemIcon>
|
||||
<ListItemText primary={value} />
|
||||
</ListItemButton>
|
||||
</ListItem>
|
||||
);
|
||||
}
|
||||
)
|
||||
}
|
||||
</List>
|
||||
<DialogActions>
|
||||
<Button onClick={()=> this.props.onClose()} color="primary">
|
||||
Cancel
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
+64
-29
@@ -31,8 +31,9 @@ import { BankIndex } from './Banks';
|
||||
import JackHostStatus from './JackHostStatus';
|
||||
import JackServerSettings from './JackServerSettings';
|
||||
import MidiBinding from './MidiBinding';
|
||||
import {PluginUiPresets} from './PluginPreset';
|
||||
import { PluginUiPresets } from './PluginPreset';
|
||||
import WifiConfigSettings from './WifiConfigSettings';
|
||||
import GovernorSettings from './GovernorSettings';
|
||||
import WifiChannel from './WifiChannel';
|
||||
import AlsaDeviceInfo from './AlsaDeviceInfo';
|
||||
|
||||
@@ -316,6 +317,7 @@ export interface PiPedalModel {
|
||||
banks: ObservableProperty<BankIndex>;
|
||||
jackServerSettings: ObservableProperty<JackServerSettings>;
|
||||
wifiConfigSettings: ObservableProperty<WifiConfigSettings>;
|
||||
governorSettings: ObservableProperty<GovernorSettings>;
|
||||
|
||||
presets: ObservableProperty<PresetIndex>;
|
||||
|
||||
@@ -350,7 +352,7 @@ export interface PiPedalModel {
|
||||
saveCurrentPreset(): void;
|
||||
saveCurrentPresetAs(newName: string): void;
|
||||
|
||||
saveCurrentPluginPresetAs(pluginInstanceId: number,newName: string): void;
|
||||
saveCurrentPluginPresetAs(pluginInstanceId: number, newName: string): void;
|
||||
|
||||
loadPreset(instanceId: number): void;
|
||||
updatePresets(presets: PresetIndex): Promise<void>;
|
||||
@@ -397,7 +399,7 @@ export interface PiPedalModel {
|
||||
addControlValueChangeListener(instanceId: number, onValueChanged: ControlValueChangedHandler): ControlValueChangedHandle
|
||||
removeControlValueChangeListener(handle: ControlValueChangedHandle): void;
|
||||
|
||||
addPluginPresetsChangedListener(onPluginPresetsChanged: PluginPresetsChangedHandler) : PluginPresetsChangedHandle;
|
||||
addPluginPresetsChangedListener(onPluginPresetsChanged: PluginPresetsChangedHandler): PluginPresetsChangedHandle;
|
||||
removePluginPresetsChangedListener(handle: PluginPresetsChangedHandle): void;
|
||||
|
||||
listenForAtomOutput(instanceId: number, onComplete: (instanceId: number, atomOutput: any) => void): ListenHandle;
|
||||
@@ -405,12 +407,13 @@ export interface PiPedalModel {
|
||||
|
||||
|
||||
|
||||
download(targetType: string, isntanceId: number|string): void;
|
||||
download(targetType: string, isntanceId: number | string): void;
|
||||
|
||||
uploadPreset(uploadPage: string,file: File, uploadAfter: number): Promise<number>;
|
||||
uploadPreset(uploadPage: string, file: File, uploadAfter: number): Promise<number>;
|
||||
uploadBank(file: File, uploadAfter: number): Promise<number>;
|
||||
|
||||
setWifiConfigSettings(wifiConfigSettings: WifiConfigSettings): Promise<void>;
|
||||
setGovernorSettings(governor: string): Promise<void>;
|
||||
|
||||
getWifiChannels(countryIso3661: string): Promise<WifiChannel[]>;
|
||||
|
||||
@@ -447,6 +450,7 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
= new ObservableProperty<JackServerSettings>(new JackServerSettings());
|
||||
|
||||
wifiConfigSettings: ObservableProperty<WifiConfigSettings> = new ObservableProperty<WifiConfigSettings>(new WifiConfigSettings());
|
||||
governorSettings: ObservableProperty<GovernorSettings> = new ObservableProperty<GovernorSettings>(new GovernorSettings());
|
||||
|
||||
|
||||
presets: ObservableProperty<PresetIndex> = new ObservableProperty<PresetIndex>
|
||||
@@ -575,6 +579,12 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
} else if (message === "onWifiConfigSettingsChanged") {
|
||||
let wifiConfigSettings = new WifiConfigSettings().deserialize(body);
|
||||
this.wifiConfigSettings.set(wifiConfigSettings);
|
||||
}
|
||||
else if (message === "onGovernorSettingsChanged") {
|
||||
let governor = body as string;
|
||||
let newSettings = this.governorSettings.get().clone();
|
||||
newSettings.governor = governor;
|
||||
this.governorSettings.set(newSettings);
|
||||
} else if (message === "onBanksChanged") {
|
||||
let banks = new BankIndex().deserialize(body);
|
||||
this.banks.set(banks);
|
||||
@@ -660,6 +670,12 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
.then(data => {
|
||||
this.wifiConfigSettings.set(new WifiConfigSettings().deserialize(data));
|
||||
|
||||
return this.getWebSocket().request<any>("getGovernorSettings");
|
||||
})
|
||||
.then(data => {
|
||||
this.governorSettings.set(new GovernorSettings().deserialize(data));
|
||||
|
||||
|
||||
return this.getWebSocket().request<any>("getJackServerSettings");
|
||||
})
|
||||
.then(data => {
|
||||
@@ -792,6 +808,11 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
.then(data => {
|
||||
this.wifiConfigSettings.set(new WifiConfigSettings().deserialize(data));
|
||||
|
||||
return this.getWebSocket().request<any>("getGovernorSettings");
|
||||
})
|
||||
.then(data => {
|
||||
this.governorSettings.set(new GovernorSettings().deserialize(data));
|
||||
|
||||
|
||||
return this.getWebSocket().request<any>("getJackServerSettings");
|
||||
})
|
||||
@@ -994,7 +1015,7 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
|
||||
_pluginPresetsChangedHandles: PluginPresetsChangedHandle[] = [];
|
||||
|
||||
addPluginPresetsChangedListener(onPluginPresetsChanged: PluginPresetsChangedHandler) : PluginPresetsChangedHandle {
|
||||
addPluginPresetsChangedListener(onPluginPresetsChanged: PluginPresetsChangedHandler): PluginPresetsChangedHandle {
|
||||
let handle = ++this.nextListenHandle;
|
||||
let t: PluginPresetsChangedHandle = {
|
||||
_id: handle,
|
||||
@@ -1003,28 +1024,23 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
this._pluginPresetsChangedHandles.push(t);
|
||||
return t;
|
||||
}
|
||||
removePluginPresetsChangedListener(handle: PluginPresetsChangedHandle): void
|
||||
{
|
||||
removePluginPresetsChangedListener(handle: PluginPresetsChangedHandle): void {
|
||||
let pos = -1;
|
||||
for (let i = 0; i < this._pluginPresetsChangedHandles.length; ++i)
|
||||
{
|
||||
if (this._pluginPresetsChangedHandles[i]._id === handle._id)
|
||||
{
|
||||
for (let i = 0; i < this._pluginPresetsChangedHandles.length; ++i) {
|
||||
if (this._pluginPresetsChangedHandles[i]._id === handle._id) {
|
||||
pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pos !== -1)
|
||||
{
|
||||
this._pluginPresetsChangedHandles.splice(pos,1);
|
||||
if (pos !== -1) {
|
||||
this._pluginPresetsChangedHandles.splice(pos, 1);
|
||||
}
|
||||
}
|
||||
firePluginPresetsChanged(pluginUri: string): void {
|
||||
for (let i = 0; i < this._pluginPresetsChangedHandles.length; ++i)
|
||||
{
|
||||
for (let i = 0; i < this._pluginPresetsChangedHandles.length; ++i) {
|
||||
this._pluginPresetsChangedHandles[i]._handler(pluginUri);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1298,7 +1314,7 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
return data;
|
||||
});
|
||||
}
|
||||
saveCurrentPluginPresetAs(pluginInstanceId: number,newName: string): Promise<number> {
|
||||
saveCurrentPluginPresetAs(pluginInstanceId: number, newName: string): Promise<number> {
|
||||
// default behaviour is to save after the currently selected preset.
|
||||
let request: any = {
|
||||
instanceId: pluginInstanceId,
|
||||
@@ -1567,22 +1583,21 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
this.webSocket?.send("loadPluginPreset", { pluginInstanceId: pluginInstanceId, presetInstanceId: presetInstanceId });
|
||||
}
|
||||
|
||||
handlePluginPresetsChanged(pluginUri: string):void {
|
||||
handlePluginPresetsChanged(pluginUri: string): void {
|
||||
this.uncachePluginPreset(pluginUri);
|
||||
this.firePluginPresetsChanged(pluginUri);
|
||||
}
|
||||
|
||||
|
||||
updatePluginPresets(pluginUri: string, presets: PluginUiPresets): Promise<void>
|
||||
{
|
||||
updatePluginPresets(pluginUri: string, presets: PluginUiPresets): Promise<void> {
|
||||
this.presetCache[pluginUri] = presets;
|
||||
this.firePluginPresetsChanged(pluginUri);
|
||||
return nullCast(this.webSocket).request<void>("updatePluginPresets", presets);
|
||||
}
|
||||
duplicatePluginPreset(pluginUri: string, instanceId: number): Promise<number>
|
||||
{
|
||||
return nullCast(this.webSocket).request<number>("copyPluginPreset", {
|
||||
pluginUri: pluginUri, instanceId: instanceId });
|
||||
duplicatePluginPreset(pluginUri: string, instanceId: number): Promise<number> {
|
||||
return nullCast(this.webSocket).request<number>("copyPluginPreset", {
|
||||
pluginUri: pluginUri, instanceId: instanceId
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@@ -1692,7 +1707,7 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
window.open(url, "_blank");
|
||||
}
|
||||
|
||||
uploadPreset(uploadPage: string,file: File, uploadAfter: number): Promise<number> {
|
||||
uploadPreset(uploadPage: string, file: File, uploadAfter: number): Promise<number> {
|
||||
let result = new Promise<number>((resolve, reject) => {
|
||||
try {
|
||||
if (file.size > this.maxUploadSize) {
|
||||
@@ -1775,6 +1790,27 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
});
|
||||
return result;
|
||||
}
|
||||
setGovernorSettings(governor: string): Promise<void> {
|
||||
let newSettings = this.governorSettings.get().clone();
|
||||
newSettings.governor = governor;
|
||||
this.governorSettings.set(newSettings);
|
||||
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
|
||||
let ws = this.webSocket;
|
||||
if (!ws) return;
|
||||
ws.request<void>(
|
||||
"setGovernorSettings",
|
||||
governor
|
||||
)
|
||||
.then(() => {
|
||||
resolve();
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
setWifiConfigSettings(wifiConfigSettings: WifiConfigSettings): Promise<void> {
|
||||
let result = new Promise<void>((resolve, reject) => {
|
||||
let oldSettings = this.wifiConfigSettings.get();
|
||||
@@ -1866,8 +1902,7 @@ class PiPedalModelImpl implements PiPedalModel {
|
||||
|
||||
preloadImages(imageList: string): void {
|
||||
let imageNames = imageList.split(';');
|
||||
for (let i = 0; i < imageNames.length; ++i)
|
||||
{
|
||||
for (let i = 0; i < imageNames.length; ++i) {
|
||||
let imageName = imageNames[i];
|
||||
let img = new Image();
|
||||
img.src = "/img/" + imageName;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import React, { SyntheticEvent, Component } from 'react';
|
||||
import ListSelectDialog from './ListSelectDialog';
|
||||
import IconButton from '@mui/material/IconButton';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import { PiPedalModel, PiPedalModelFactory, State } from './PiPedalModel';
|
||||
@@ -36,6 +37,7 @@ import JackHostStatus from './JackHostStatus';
|
||||
import WifiConfigSettings from './WifiConfigSettings';
|
||||
import WifiConfigDialog from './WifiConfigDialog';
|
||||
import DialogEx from './DialogEx'
|
||||
import GovernorSettings from './GovernorSettings';
|
||||
|
||||
import Slide, {SlideProps} from '@mui/material/Slide';
|
||||
import { createStyles, Theme } from '@mui/material/styles';
|
||||
@@ -55,10 +57,12 @@ interface SettingsDialogState {
|
||||
jackSettings: JackChannelSelection;
|
||||
jackServerSettings: JackServerSettings;
|
||||
jackStatus?: JackHostStatus;
|
||||
governorSettings: GovernorSettings;
|
||||
|
||||
wifiConfigSettings: WifiConfigSettings;
|
||||
|
||||
showWifiConfigDialog: boolean;
|
||||
showGovernorSettingsDialog: boolean;
|
||||
showInputSelectDialog: boolean;
|
||||
showOutputSelectDialog: boolean;
|
||||
showMidiSelectDialog: boolean;
|
||||
@@ -146,7 +150,9 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
jackStatus: undefined,
|
||||
jackSettings: this.model.jackSettings.get(),
|
||||
wifiConfigSettings: this.model.wifiConfigSettings.get(),
|
||||
governorSettings: this.model.governorSettings.get(),
|
||||
showWifiConfigDialog: false,
|
||||
showGovernorSettingsDialog: false,
|
||||
showInputSelectDialog: false,
|
||||
showOutputSelectDialog: false,
|
||||
showMidiSelectDialog: false,
|
||||
@@ -160,6 +166,7 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
this.handleJackSettingsChanged = this.handleJackSettingsChanged.bind(this);
|
||||
this.handleJackServerSettingsChanged = this.handleJackServerSettingsChanged.bind(this);
|
||||
this.handleWifiConfigSettingsChanged = this.handleWifiConfigSettingsChanged.bind(this);
|
||||
this.handleGovernorSettingsChanged = this.handleGovernorSettingsChanged.bind(this);
|
||||
this.handleConnectionStateChanged = this.handleConnectionStateChanged.bind(this);
|
||||
|
||||
}
|
||||
@@ -182,6 +189,15 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
this.model.showAlert(err);
|
||||
});
|
||||
}
|
||||
handleApplyGovernorSettings(governor: string): void {
|
||||
this.model.setGovernorSettings(governor)
|
||||
.then(() => {
|
||||
|
||||
})
|
||||
.catch((err) => {
|
||||
this.model.showAlert(err);
|
||||
});
|
||||
}
|
||||
|
||||
handleWifiConfigSettingsChanged(): void {
|
||||
this.setState(
|
||||
@@ -190,6 +206,14 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
}
|
||||
)
|
||||
}
|
||||
handleGovernorSettingsChanged(): void {
|
||||
this.setState(
|
||||
{
|
||||
governorSettings: this.model.governorSettings.get()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
handleJackSettingsChanged(): void {
|
||||
this.setState({
|
||||
jackSettings: this.model.jackSettings.get()
|
||||
@@ -233,6 +257,7 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
this.model.jackConfiguration.addOnChangedHandler(this.handleJackConfigurationChanged);
|
||||
this.model.jackServerSettings.addOnChangedHandler(this.handleJackServerSettingsChanged);
|
||||
this.model.wifiConfigSettings.addOnChangedHandler(this.handleWifiConfigSettingsChanged);
|
||||
this.model.governorSettings.addOnChangedHandler(this.handleGovernorSettingsChanged);
|
||||
this.model.getJackStatus()
|
||||
.then((jackStatus) =>
|
||||
this.setState(
|
||||
@@ -261,6 +286,7 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
this.model.jackSettings.removeOnChangedHandler(this.handleJackSettingsChanged);
|
||||
this.model.jackServerSettings.removeOnChangedHandler(this.handleJackServerSettingsChanged);
|
||||
this.model.wifiConfigSettings.removeOnChangedHandler(this.handleWifiConfigSettingsChanged);
|
||||
this.model.wifiConfigSettings.removeOnChangedHandler(this.handleGovernorSettingsChanged);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -314,6 +340,7 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
let newSelection = this.state.jackSettings.clone();
|
||||
newSelection.inputMidiPorts = channels;
|
||||
this.model.setJackSettings(newSelection);
|
||||
|
||||
}
|
||||
this.setState({
|
||||
showMidiSelectDialog: false,
|
||||
@@ -358,6 +385,11 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
showWifiConfigDialog: true
|
||||
});
|
||||
}
|
||||
handleShowGovernorSettingsDialogDialog() {
|
||||
this.setState({
|
||||
showGovernorSettingsDialog: true
|
||||
});
|
||||
}
|
||||
handleRestart() {
|
||||
this.setState({ restarting: true });
|
||||
this.model.restart()
|
||||
@@ -417,19 +449,19 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
>
|
||||
<div >
|
||||
<Typography className={classes.sectionHead} display="block" variant="caption" color="secondary">
|
||||
AUDIO
|
||||
STATUS
|
||||
</Typography>
|
||||
{(!isConfigValid) ?
|
||||
(
|
||||
<div style={{ paddingLeft: 48, position: "relative", top: -12 }}>
|
||||
<Typography display="block" variant="caption" color="textSecondary">Status: <span style={{ color: "#F00" }}>Not configured.</span></Typography>
|
||||
<Typography display="block" variant="caption" color="textSecondary">CPU: </Typography>
|
||||
<Typography display="block" variant="caption" color="textSecondary">Governor: </Typography>
|
||||
</div>
|
||||
) :
|
||||
(
|
||||
<div style={{ paddingLeft: 48, position: "relative", top: -12 }}>
|
||||
{JackHostStatus.getDisplayView("Status:\u00A0", this.state.jackStatus)}
|
||||
{JackHostStatus.getCpuInfo("CPU:\u00A0", this.state.jackStatus)}
|
||||
{JackHostStatus.getDisplayView("", this.state.jackStatus)}
|
||||
{ JackHostStatus.getCpuInfo("Governor:\u00A0", this.state.jackStatus)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -442,6 +474,9 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
|
||||
)
|
||||
}
|
||||
<Typography className={classes.sectionHead} display="block" variant="caption" color="secondary">
|
||||
AUDIO
|
||||
</Typography>
|
||||
<ButtonBase className={classes.setting} onClick={() => this.handleJackServerSettings()}
|
||||
>
|
||||
<SelectHoverBackground selected={false} showHover={true} />
|
||||
@@ -512,6 +547,18 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
|
||||
</div>
|
||||
</ButtonBase>
|
||||
<ButtonBase className={classes.setting} disabled={!this.state.wifiConfigSettings.valid}
|
||||
onClick={() => this.handleShowGovernorSettingsDialogDialog()} >
|
||||
<SelectHoverBackground selected={false} showHover={true} />
|
||||
<div style={{ width: "100%" }}>
|
||||
<Typography className={classes.primaryItem} display="block" variant="body2" color="textPrimary" noWrap>
|
||||
CPU Governor</Typography>
|
||||
<Typography display="block" variant="caption" noWrap color="textSecondary">
|
||||
{this.state.governorSettings.governor }
|
||||
</Typography>
|
||||
|
||||
</div>
|
||||
</ButtonBase>
|
||||
<ButtonBase className={classes.setting} disabled={!isConfigValid || disableShutdown}
|
||||
onClick={() => this.handleRestart()} >
|
||||
<SelectHoverBackground selected={false} showHover={true} />
|
||||
@@ -556,6 +603,32 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
|
||||
)
|
||||
}
|
||||
{
|
||||
(this.state.showGovernorSettingsDialog) &&
|
||||
(
|
||||
<ListSelectDialog
|
||||
width={220}
|
||||
open={this.state.showGovernorSettingsDialog}
|
||||
items={this.state.governorSettings.governors}
|
||||
selectedItem={this.state.governorSettings.governor}
|
||||
title="Governor"
|
||||
onClose={()=> this.setState({showGovernorSettingsDialog: false})}
|
||||
onOk={(selectedValue) => {
|
||||
this.model.setGovernorSettings(selectedValue)
|
||||
.then(()=>{
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
this.model.showAlert(error);
|
||||
});
|
||||
|
||||
this.setState({showGovernorSettingsDialog: false})
|
||||
}}
|
||||
>
|
||||
</ListSelectDialog>
|
||||
)
|
||||
|
||||
}
|
||||
{
|
||||
(this.state.showMidiSelectDialog) &&
|
||||
(
|
||||
|
||||
+74
-76
@@ -1,83 +1,81 @@
|
||||
src
|
||||
src/NumericInput.tsx
|
||||
src/RenameDialog.tsx
|
||||
src/ToobInputStageView.tsx
|
||||
src/ToobCabSimView.tsx
|
||||
src/SearchFilter.tsx
|
||||
src/Draggable.tsx
|
||||
src/SelectHoverBackground.tsx
|
||||
src/JackStatusView.tsx
|
||||
src/SplitControlView.tsx
|
||||
src/MidiBindingsDialog.tsx
|
||||
src/WifiChannel.tsx
|
||||
src/PluginControlView.tsx
|
||||
src/TemporaryDrawer.tsx
|
||||
src/LoadPluginDialogBackup.tsx
|
||||
src/logo.svg
|
||||
src/AlsaDeviceInfo.tsx
|
||||
src/JackServerSettingsDialog.tsx
|
||||
src/ZoomedUiControl.tsx
|
||||
src/PedalBoardView.tsx
|
||||
src/MainPage.tsx
|
||||
src/App.tsx
|
||||
src/PresetDialog.tsx
|
||||
src/PluginPreset.tsx
|
||||
src/react-app-env.d.ts
|
||||
src/ToobSpectrumResponseView.tsx
|
||||
src/SettingsDialog.tsx
|
||||
src/SelectChannelsDialog.tsx
|
||||
src/StringBuilder.tsx
|
||||
src/ToobPowerStage2View.tsx
|
||||
src/SearchControl.tsx
|
||||
src/XxxSnippet.tsx
|
||||
src/Units.tsx
|
||||
src/Jack.tsx
|
||||
src/PluginControl.tsx
|
||||
src/ResizeResponsiveComponent.tsx
|
||||
src/Lv2Plugin.tsx
|
||||
src/index.tsx
|
||||
src/NoChangePassword.tsx
|
||||
src/VuMeter.tsx
|
||||
src/ControlViewFactory.tsx
|
||||
src/JackServerSettings.tsx
|
||||
src/MidiBinding.tsx
|
||||
src/UploadDialog.tsx
|
||||
src/PiPedalSocket.tsx
|
||||
src/PedalBoard.tsx
|
||||
src/JackHostStatus.tsx
|
||||
src/ZoomedDial.tsx
|
||||
src/Rect.tsx
|
||||
src/SvgPathBuilder.tsx
|
||||
src/IControlViewFactory.tsx
|
||||
src/PiPedalModel.tsx
|
||||
src/PluginInfoDialog.tsx
|
||||
src/reportWebVitals.ts
|
||||
src/PiPedalError.tsx
|
||||
src/BankDialog.tsx
|
||||
src/PluginIcon.tsx
|
||||
src/WifiConfigDialog.tsx
|
||||
src/PresetSelector.tsx
|
||||
src/LoadPluginDialog.tsx
|
||||
src/ToobFrequencyResponseView.tsx
|
||||
src/SplitControlView.tsx
|
||||
src/WifiConfigSettings.tsx
|
||||
src/setupTests.ts
|
||||
src/AboutDialog.tsx
|
||||
src/index.css
|
||||
src/Banks.tsx
|
||||
src/DialogEx.tsx
|
||||
src/ToobWaveShapeView.tsx
|
||||
src/FullScreenIME.tsx
|
||||
src/App.css
|
||||
src/JackHostStatus.tsx
|
||||
src/SearchFilter.tsx
|
||||
src/MainPage.tsx
|
||||
src/PiPedalModel.tsx
|
||||
src/PluginPresetSelector.tsx
|
||||
src/Utility.tsx
|
||||
src/SelectMidiChannelsDialog.tsx
|
||||
src/App.test.tsx
|
||||
src/MidiBindingView.tsx
|
||||
src/SplitUiControls.tsx
|
||||
src/PluginClass.tsx
|
||||
src/ObservableProperty.tsx
|
||||
src/Pedal.tsx
|
||||
src/GxTunerControl.tsx
|
||||
src/DraggableGrid.tsx
|
||||
src/ToobMLView.tsx
|
||||
src/SettingsDialog.tsx
|
||||
src/PiPedalSocket.tsx
|
||||
src/ToobFrequencyResponseView.tsx
|
||||
src/ControlViewFactory.tsx
|
||||
src/Utility.tsx
|
||||
src/ToobToneStackView.tsx
|
||||
src/SelectHoverBackground.tsx
|
||||
src/MidiBindingsDialog.tsx
|
||||
src/TemporaryDrawer.tsx
|
||||
src/GxTunerView.tsx
|
||||
src/ToobInputStageView.tsx
|
||||
src/DraggableGrid.tsx
|
||||
src/JackStatusView.tsx
|
||||
src/PluginControl.tsx
|
||||
src/XxxSnippet.tsx
|
||||
src/PluginPreset.tsx
|
||||
src/Jack.tsx
|
||||
src/AlsaDeviceInfo.tsx
|
||||
src/MidiBinding.tsx
|
||||
src/PiPedalError.tsx
|
||||
src/IControlViewFactory.tsx
|
||||
src/Lv2Plugin.tsx
|
||||
src/PedalBoard.tsx
|
||||
src/PedalBoardView.tsx
|
||||
src/PresetDialog.tsx
|
||||
src/AppThemed.tsx
|
||||
src/ZoomedDial.tsx
|
||||
src/RenameDialog.tsx
|
||||
src/SplitUiControls.tsx
|
||||
src/GovernorSettings.tsx
|
||||
src/AboutDialog.tsx
|
||||
src/ToobSpectrumResponseView.tsx
|
||||
src/PluginControlView.tsx
|
||||
src/NoChangePassword.tsx
|
||||
src/ToobSpectrumAnalyzerView.tsx
|
||||
src/MidiBindingView.tsx
|
||||
src/GxTunerControl.tsx
|
||||
src/Banks.tsx
|
||||
src/PluginPresetsDialog.tsx
|
||||
src/BankDialog.tsx
|
||||
src/UploadDialog.tsx
|
||||
src/ToobPowerStage2View.tsx
|
||||
src/index.tsx
|
||||
src/Units.tsx
|
||||
src/VuMeter.tsx
|
||||
src/App.test.tsx
|
||||
src/DialogEx.tsx
|
||||
src/StringBuilder.tsx
|
||||
src/SelectChannelsDialog.tsx
|
||||
src/Draggable.tsx
|
||||
src/ZoomedUiControl.tsx
|
||||
src/Rect.tsx
|
||||
src/PluginClass.tsx
|
||||
src/PluginIcon.tsx
|
||||
src/App.tsx
|
||||
src/ResizeResponsiveComponent.tsx
|
||||
src/SvgPathBuilder.tsx
|
||||
src/NumericInput.tsx
|
||||
src/JackServerSettings.tsx
|
||||
src/ListSelectDialog.tsx
|
||||
src/JackServerSettingsDialog.tsx
|
||||
src/ObservableProperty.tsx
|
||||
src/SelectMidiChannelsDialog.tsx
|
||||
src/WifiChannel.tsx
|
||||
src/LoadPluginDialog.tsx
|
||||
src/WifiConfigDialog.tsx
|
||||
src/PluginInfoDialog.tsx
|
||||
src/ToobWaveShapeView.tsx
|
||||
src/ToobCabSimView.tsx
|
||||
src/PresetSelector.tsx
|
||||
|
||||
Reference in New Issue
Block a user