7
mirror of https://github.com/EEVengers/ThunderScope.git synced 2025-04-22 17:43:44 +00:00

Horizontal scaling

This commit is contained in:
Ratan Varghese 2021-03-24 16:16:33 -04:00
parent 3f9e46eb67
commit 79608d0273
8 changed files with 70 additions and 30 deletions
Software/waveview/src

View File

@ -12,6 +12,9 @@ import {
import GraphStatus from '../../configuration/enums/graphStatus';
import TestPoints from '../../util/testpoints';
import { convertTime } from '../../util/convert';
import TimeUnit from '../../configuration/enums/timeUnit';
import DefaultValues from '../../configuration/defaultValues';
class Graph extends React.Component<any, any> {
static instanceList: Graph[] = [];
@ -39,6 +42,9 @@ class Graph extends React.Component<any, any> {
}
render() {
let base = this.props.horizontalWidget.horizontalTimeBase.course;
let dCount = DefaultValues.divisions.time;
let winSize = dCount * convertTime(base.value, base.unit, TimeUnit.NanoSecond);
return (
<div className="graph_view">
<div
@ -51,8 +57,8 @@ class Graph extends React.Component<any, any> {
</p>
</div>
<FlexibleXYPlot
yDomain={this.props.graph.yDomain}
xDomain={this.props.graph.xDomain}
yDomain={[-128,128]}
xDomain={[0, winSize]}
margin={{right:0, bottom:0}}
>
<HorizontalGridLines
@ -97,11 +103,12 @@ class Graph extends React.Component<any, any> {
}
}
function mapStateToProps(state: { graph: any, settings: any, verticalWidget: any }) {
function mapStateToProps(state: { graph: any, settings: any, verticalWidget: any, horizontalWidget: any }) {
return {
graph: state.graph,
settings: state.settings,
verticalWidget: state.verticalWidget
verticalWidget: state.verticalWidget,
horizontalWidget: state.horizontalWidget
};
}

View File

@ -3,23 +3,30 @@ import { connect } from 'react-redux';
import './../../../css/sidebar/widgets/horizontalWidget.css';
import ControlMode from '../../../configuration/enums/controlMode';
import TimeUnit from '../../../configuration/enums/timeUnit';
import { Plumber } from '../../../util/plumber';
class HorizontalWidget extends React.Component<any, any> {
class HorizontalWidget extends React.Component<any, any> {
// Horizontal Time Base
incrementTimeBase = () => {
let i = this.props.horizontalWidget.horizontalTimeBase.index + 1;
Plumber.getInstance().handleHoriz(i);
this.props.dispatch({ type: 'horizontal/increaseTimeBase'});
}
decrementTimeBase = () => {
let i = this.props.horizontalWidget.horizontalTimeBase.index - 1;
Plumber.getInstance().handleHoriz(i);
this.props.dispatch({ type: 'horizontal/decreaseTimeBase'});
}
incrementTimeBaseFine = () => {
//TODO: actually scale
this.props.dispatch({ type: 'horizontal/increaseTimeBaseFine'});
}
decrementTimeBaseFine = () => {
//TODO: actually scale
this.props.dispatch({ type: 'horizontal/decreaseTimeBaseFine'});
}
@ -73,12 +80,12 @@ class HorizontalWidget extends React.Component<any, any> {
</div>
<div className="HorizontalWidgetAdjustBlock-HorizontalTimeBase">
<button
<button
className="MinusButton"
onClick={() => this.props.horizontalWidget.horizontalTimeBase.mode === ControlMode.Course ? this.decrementTimeBase() : this.decrementTimeBaseFine()}>
-
</button>
<label
<label
className="AdjustValueBlockHorizontalTimeBase"
style={{color: "white"}}
>
@ -87,7 +94,7 @@ class HorizontalWidget extends React.Component<any, any> {
{this.props.horizontalWidget.horizontalTimeBase.mode === ControlMode.Fine && this.props.horizontalWidget.horizontalTimeBase.fine.value.toString()}
{this.props.horizontalWidget.horizontalTimeBase.mode === ControlMode.Fine && this.props.horizontalWidget.horizontalTimeBase.fine.unit.toString() + "/div"}
</label>
<button
<button
className="PlusButton"
onClick={() => this.props.horizontalWidget.horizontalTimeBase.mode === ControlMode.Course ? this.incrementTimeBase() : this.incrementTimeBaseFine()}>
+
@ -140,24 +147,24 @@ class HorizontalWidget extends React.Component<any, any> {
Offset
</div>
<div className="HorizontalWidgetAdjustBlock-HorizontalOffset">
<button
<button
className="MinusButton"
onClick={() => this.decrementOffset()}>
-
</button>
<label
<label
className="AdjustValueBlockHorizontalOffset"
style={{color: "white"}}
>
{this.props.horizontalWidget.horizontalOffset.value.toString()}{this.props.horizontalWidget.horizontalOffset.unit}
</label>
<button
<button
className="PlusButton"
onClick={() => this.incrementOffset()}>
+
</button>
</div>
</div>
)
}

View File

@ -112,7 +112,7 @@ const x10ProbeValues = [
];
// 13 different voltages per divison presets
// Start at x1ProbeValues[6] and change accordingly
// Start at x1ProbeValues[6] and change accordingly
const horizontalTimeBases = [
{
@ -243,8 +243,14 @@ const horizontalTimeBases = [
// 31 different voltages per division presets
// Start at horizontalTimeBases[15] and change accordingly
let divisions = {
voltage: 10, //TODO: change graph to 8, make this 8
time: 10
}
export default {
x1ProbeValues,
x10ProbeValues,
horizontalTimeBases
horizontalTimeBases,
divisions
};

View File

@ -3,18 +3,10 @@ import HorizontalWidgetInitialState from "./horizontalWidgetInitialState";
import TimeUnit from "../../configuration/enums/timeUnit";
import { convertTime } from "../../util/convert";
let defaultTimeDivisions = 10;
let coarse = HorizontalWidgetInitialState.horizontalTimeBase.course;
let xLimit = convertTime(coarse.value, coarse.unit, TimeUnit.NanoSecond) * defaultTimeDivisions;
const GraphInitialState = {
currentStatus: GraphStatus.On,
singleMode: false,
xDomain: [0,xLimit],
yDomain: [-128,128],
tickCount: 0,
voltageDivisions: 10, //TODO: change graph to 8, make this 8
timeDivisons: defaultTimeDivisions
tickCount: 0
};
export default GraphInitialState;

View File

@ -2,13 +2,15 @@ import DefaultValues from '../../configuration/defaultValues';
import TimeUnit from '../../configuration/enums/timeUnit';
import ControlMode from '../../configuration/enums/controlMode';
let index = 3; //originally 15
const HorizontalWidgetInitialState = {
horizontalTimeBase: {
mode: ControlMode.Course,
index: 15,
index: index,
course: {
value: DefaultValues.horizontalTimeBases[3].value, //originally index 15
unit: DefaultValues.horizontalTimeBases[3].unit //originally index 15
value: DefaultValues.horizontalTimeBases[index].value, //originally index 15
unit: DefaultValues.horizontalTimeBases[index].unit //originally index 15
},
fine: {
value: 0,
@ -17,7 +19,7 @@ const HorizontalWidgetInitialState = {
},
horizontalOffset: {
value: 0,
unit: TimeUnit.MicroSecond
unit: TimeUnit.NanoSecond
}
};

View File

@ -32,7 +32,7 @@ export default function(state = HorizontalWidgetInitialState, action: {type: any
}
}
case "horizontal/increaseTimeBase":
if (state.horizontalTimeBase.index >= 30) {
if (state.horizontalTimeBase.index >= DefaultValues.horizontalTimeBases.length) {
return { ...state };
}
return {

View File

@ -1,6 +1,9 @@
import CMD from '../configuration/enums/cmd';
import { SetChState } from './setChHelper';
import MathOperators from '../configuration/enums/mathOperators';
import DefaultValues from '../configuration/defaultValues';
import { convertTime } from './convert';
import TimeUnit from '../configuration/enums/timeUnit';
export enum SetMathOp {
SetMath_None = 0,
@ -143,6 +146,22 @@ export class Plumber {
this.cycle(mathArgs);
}
public handleHoriz(idx: number) {
let bases = DefaultValues.horizontalTimeBases;
let targIdx = (idx < 0) ? 0 : ((idx >= bases.length) ? bases.length : idx);
let targ = bases[targIdx];
let dCount = DefaultValues.divisions.time;
let winSize = dCount * convertTime(targ.value, targ.unit, TimeUnit.NanoSecond);
let setWinArgs = {
headCheck: () => true,
bodyCheck: () => true,
cmd: CMD.CMD_SetWindowSize,
id: 0,
writeData: new Int8Array((new Uint32Array([winSize])).buffer)
}
this.cycle(setWinArgs);
}
public decodeGetMinMax(args: PlumberArgs, a: Int8Array) {
let maxCh = 4;
let a64u = new BigUint64Array(a.buffer);

View File

@ -2,6 +2,9 @@ import CMD from '../configuration/enums/cmd';
import { PlumberArgs, Plumber, SetMathOp } from './plumber';
import store from '../redux/store';
import { LineSeriesPoint } from 'react-vis';
import DefaultValues from '../configuration/defaultValues';
import { convertTime } from '../util/convert';
import TimeUnit from '../configuration/enums/timeUnit';
class TestPoints {
scope_data: LineSeriesPoint[][] = []; //[ch-1] for channel, [5] for math
@ -43,6 +46,9 @@ class TestPoints {
writeData: [74, 0]
}
let base = state.horizontalWidget.horizontalTimeBase.course;
let dCount = DefaultValues.divisions.time;
let xLimit = dCount * convertTime(base.value, base.unit, TimeUnit.NanoSecond);
this.setWinArgs = {
headCheck: () => {
this.setWinDone = true;
@ -51,7 +57,7 @@ class TestPoints {
bodyCheck: () => true,
cmd: CMD.CMD_SetWindowSize,
id: 0,
writeData: new Int8Array((new Uint32Array([state.graph.xDomain[1]])).buffer)
writeData: new Int8Array((new Uint32Array([xLimit])).buffer)
}
}
@ -64,7 +70,8 @@ class TestPoints {
update() {
if(this.setChDone && this.setFileDone && this.setWinDone) {
let state = store.getState();
let xLimit = state.graph.xDomain[1];
let base = state.horizontalWidget.horizontalTimeBase.course;
let xLimit = convertTime(base.value, base.unit, TimeUnit.NanoSecond);
let doMath = state.mathWidget.mathEnabled as boolean;
let order = state.verticalWidget.getDataChannelOrder as number[];