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:
Robin Davies
2022-03-09 21:35:01 -05:00
parent 5d42ec0753
commit 8ad2de8c72
31 changed files with 1642 additions and 377 deletions
+75 -76
View File
@@ -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 -1
View File
@@ -1,6 +1,6 @@
{
"socket_server_port": 8080,
"socket_server_address": "*",
"socket_server_address": "[fe80::df30:41b9:1ede:c23c]",
"max_upload_size": 1048576,
+35
View File
@@ -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";
}
+2 -2
View File
@@ -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>
)
}
+116
View File
@@ -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
View File
@@ -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;
+77 -4
View File
@@ -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
View File
@@ -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