11import { useAtom , useAtomValue } from "jotai" ;
2- import { motorDebugRunStateAtom , motorStateAtom } from "@/stores/motor.ts" ;
2+ import { motorDebugRunStateAtom } from "@/stores/motor.ts" ;
33import { ButtonGroup , ButtonGroupText } from "@/components/ui/button-group.tsx" ;
44import { Label } from "@/components/ui/label.tsx" ;
5- import { Input } from "@/components/ui/input.tsx" ;
65import { useCallback , useState } from "react" ;
76import {
87 AngleUnit ,
@@ -16,9 +15,9 @@ import { toast } from "sonner";
1615import { invoke } from "@tauri-apps/api/core" ;
1716import { useDegAtom , useRpmAtom } from "@/stores/angle.ts" ;
1817import { deg2rad , rpm2rps } from "@/lib/utils.ts" ;
18+ import { NumericExpressionInput } from "@/components/numeric-expression-input.tsx" ;
1919
2020export default function DebugRunConsole ( ) {
21- const [ motorState , setMotorState ] = useAtom ( motorStateAtom ) ;
2221 const [ runState , setRunState ] = useAtom ( motorDebugRunStateAtom ) ;
2322 const useRpm = useAtomValue ( useRpmAtom ) ;
2423 const useDeg = useAtomValue ( useDegAtom ) ;
@@ -28,6 +27,34 @@ export default function DebugRunConsole() {
2827 useAngleConverter ( { value : position , setValue : setPosition } ) ;
2928 useSpeedConverter ( { value : speed , setValue : setSpeed } ) ;
3029
30+ const emitSpeed = useCallback (
31+ async ( s : number ) => {
32+ try {
33+ await invoke ( "motor_set_speed" , {
34+ speed : useRpm ? rpm2rps ( s ) : s ,
35+ } ) ;
36+ setRunState ( "Speed" ) ;
37+ } catch ( e ) {
38+ toast . error ( `Error: ${ e } ` ) ;
39+ }
40+ } ,
41+ [ setRunState , useRpm ] ,
42+ ) ;
43+
44+ const emitPosition = useCallback (
45+ async ( p : number ) => {
46+ try {
47+ await invoke ( "motor_set_position" , {
48+ position : useDeg ? deg2rad ( p ) : p ,
49+ } ) ;
50+ setRunState ( "Position" ) ;
51+ } catch ( e ) {
52+ toast . error ( `Error: ${ e } ` ) ;
53+ }
54+ } ,
55+ [ setRunState , useDeg ] ,
56+ ) ;
57+
3158 const stop = useCallback ( async ( ) => {
3259 try {
3360 await invoke ( "motor_stop" ) ;
@@ -46,12 +73,11 @@ export default function DebugRunConsole() {
4673 Speed
4774 </ Label >
4875 </ ButtonGroupText >
49- < Input
76+ < NumericExpressionInput
5077 id = "Speed"
51- className = "w-32"
52- type = "number"
5378 value = { speed }
54- onChange = { ( e ) => setSpeed ( e . target . valueAsNumber ) }
79+ onValueChange = { setSpeed }
80+ onEnter = { emitSpeed }
5581 />
5682 < ButtonGroupText asChild >
5783 < Label className = "w-18" htmlFor = "Speed" >
@@ -61,16 +87,7 @@ export default function DebugRunConsole() {
6187 < Button
6288 variant = "outline"
6389 size = "icon"
64- onClick = { async ( ) => {
65- try {
66- await invoke ( "motor_set_speed" , {
67- speed : useRpm ? rpm2rps ( speed ) : speed ,
68- } ) ;
69- setRunState ( "Speed" ) ;
70- } catch ( e ) {
71- toast . error ( `Error: ${ e } ` ) ;
72- }
73- } }
90+ onClick = { ( ) => emitSpeed ( speed ) }
7491 >
7592 < ArrowDownLeft />
7693 </ Button >
@@ -81,12 +98,11 @@ export default function DebugRunConsole() {
8198 Position
8299 </ Label >
83100 </ ButtonGroupText >
84- < Input
101+ < NumericExpressionInput
85102 id = "Position"
86- className = "w-32"
87- type = "number"
88103 value = { position }
89- onChange = { ( e ) => setPosition ( e . target . valueAsNumber ) }
104+ onValueChange = { setPosition }
105+ onEnter = { emitPosition }
90106 />
91107 < ButtonGroupText asChild >
92108 < Label className = "w-18" htmlFor = "Position" >
@@ -96,16 +112,7 @@ export default function DebugRunConsole() {
96112 < Button
97113 variant = "outline"
98114 size = "icon"
99- onClick = { async ( ) => {
100- try {
101- await invoke ( "motor_set_position" , {
102- position : useDeg ? deg2rad ( position ) : position ,
103- } ) ;
104- setRunState ( "Position" ) ;
105- } catch ( e ) {
106- toast . error ( `Error: ${ e } ` ) ;
107- }
108- } }
115+ onClick = { ( ) => emitPosition ( position ) }
109116 >
110117 < ArrowDownLeft />
111118 </ Button >
0 commit comments