From d1e139ad715c7ce36b2d7eb9b7e670a18002a204 Mon Sep 17 00:00:00 2001 From: zhanghao <774378400@qq.com> Date: Wed, 22 Jul 2026 09:37:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AF=B9=E8=AE=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proto/cmvr/api/arm_service.proto | 1 + server/proto/cmvr/api/common.proto | 16 ++++ .../proto/cmvr/api/microphone_command.proto | 92 +++++++++++++++++++ .../proto/cmvr/api/microphone_service.proto | 17 ++++ server/proto/cmvr/api/speaker_command.proto | 92 +++++++++++++++++++ server/proto/cmvr/api/speaker_service.proto | 17 ++++ src/views/Home.vue | 20 +++- src/views/arm/MechanicalArm.vue | 2 +- 8 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 server/proto/cmvr/api/microphone_command.proto create mode 100644 server/proto/cmvr/api/microphone_service.proto create mode 100644 server/proto/cmvr/api/speaker_command.proto create mode 100644 server/proto/cmvr/api/speaker_service.proto diff --git a/server/proto/cmvr/api/arm_service.proto b/server/proto/cmvr/api/arm_service.proto index 565b493..92562f4 100644 --- a/server/proto/cmvr/api/arm_service.proto +++ b/server/proto/cmvr/api/arm_service.proto @@ -8,6 +8,7 @@ import "cmvr/api/arm_command.proto"; service ArmService { rpc torqueOff(CommandHeader.Request) returns (CommandHeader.Feedback); rpc torqueOn(CommandHeader.Request) returns (CommandHeader.Feedback); + rpc clearFault(CommandHeader.Request) returns (CommandHeader.Feedback); rpc moveJ(MoveJ.Request) returns (MoveJ.Response); rpc moveL(MoveL.Request) returns (MoveL.Response); rpc speedJ(SpeedJ.Request) returns (SpeedJ.Response); diff --git a/server/proto/cmvr/api/common.proto b/server/proto/cmvr/api/common.proto index accb936..53ecd55 100644 --- a/server/proto/cmvr/api/common.proto +++ b/server/proto/cmvr/api/common.proto @@ -29,6 +29,22 @@ message CommandHeader { } } +message AudioData { + enum AudioFormat { + PCM = 0; + MP3 = 1; + AAC = 2; + WAV = 3; + } + bytes data = 1; + int32 sample_rate = 2; + int32 channels = 3; + AudioFormat format = 4; + string codec = 5; + int64 pts = 6; + int32 nb_samples = 7; +} + message ConfigParam { string param_name = 1; diff --git a/server/proto/cmvr/api/microphone_command.proto b/server/proto/cmvr/api/microphone_command.proto new file mode 100644 index 0000000..71a6f4e --- /dev/null +++ b/server/proto/cmvr/api/microphone_command.proto @@ -0,0 +1,92 @@ +syntax = "proto3"; + +import "cmvr/api/common.proto"; + +package cmvr.api; + +message MicState { + bool is_initialized = 1; + bool is_running = 2; + bool is_recording = 3; + int32 volume = 4; + string error_message = 5; +} + +message GetMicStateCommand { + message Request { + CommandHeader.Request header = 1; + } + + message Feedback { + CommandHeader.Feedback header = 1; + MicState state = 2; + } +} + +message StartMicRecordingCommand { + message Request { + CommandHeader.Request header = 1; + string file_path = 2; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message StopMicRecordingCommand { + message Request { + CommandHeader.Request header = 1; + } + + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message PauseMicRecordingCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message ResumeMicRecordingCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message StreamMicAudioCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + AudioData audio = 2; + } +} + +message SetMicPhoneVolumeCommand { + message Request { + CommandHeader.Request header = 1; + int32 volume = 2; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message GetMicPhoneVolumeCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + int32 volume = 2; + } +} diff --git a/server/proto/cmvr/api/microphone_service.proto b/server/proto/cmvr/api/microphone_service.proto new file mode 100644 index 0000000..d9cea81 --- /dev/null +++ b/server/proto/cmvr/api/microphone_service.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +import "cmvr/api/microphone_command.proto"; + +package cmvr.api; + +service MicPhoneService { + rpc GetStatus(GetMicStateCommand.Request) returns (GetMicStateCommand.Feedback); + rpc StartRecord(StartMicRecordingCommand.Request) returns (StartMicRecordingCommand.Feedback); + rpc StopRecord(StopMicRecordingCommand.Request) returns (StopMicRecordingCommand.Feedback); + rpc PauseRecord(PauseMicRecordingCommand.Request) returns (PauseMicRecordingCommand.Feedback); + rpc ResumeRecord(ResumeMicRecordingCommand.Request) returns (ResumeMicRecordingCommand.Feedback); + rpc StreamAudio(StreamMicAudioCommand.Request) returns (stream StreamMicAudioCommand.Feedback); + + rpc SetVolume(SetMicPhoneVolumeCommand.Request) returns (SetMicPhoneVolumeCommand.Feedback); + rpc GetVolume(GetMicPhoneVolumeCommand.Request) returns (GetMicPhoneVolumeCommand.Feedback); +} diff --git a/server/proto/cmvr/api/speaker_command.proto b/server/proto/cmvr/api/speaker_command.proto new file mode 100644 index 0000000..6243b6d --- /dev/null +++ b/server/proto/cmvr/api/speaker_command.proto @@ -0,0 +1,92 @@ +syntax = "proto3"; + +import "cmvr/api/common.proto"; + +package cmvr.api; + +message SpeakerState { + bool is_initialized = 1; + bool is_running = 2; + bool is_decoding = 3; + bool is_paused = 5; + int32 volume = 6; + string error_message = 7; +} + +message GetSpeakerStateCommand { + message Request { + CommandHeader.Request header = 1; + } + + message Feedback { + CommandHeader.Feedback header = 1; + SpeakerState state = 2; + } +} + +message PlayAudioCommand { + message Request { + CommandHeader.Request header = 1; + string audio_path = 2; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message StreamSpeakerAudioCommand { + message Request { + CommandHeader.Request header = 1; + AudioData audio = 2; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message StopSpeakerCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message PauseSpeakerCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message ResumeSpeakerCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message SetSpeakerVolumeCommand { + message Request { + CommandHeader.Request header = 1; + int32 volume = 2; + } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message GetSpeakerVolumeCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + int32 volume = 2; + } +} diff --git a/server/proto/cmvr/api/speaker_service.proto b/server/proto/cmvr/api/speaker_service.proto new file mode 100644 index 0000000..6fc3d92 --- /dev/null +++ b/server/proto/cmvr/api/speaker_service.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +import "cmvr/api/speaker_command.proto"; + +package cmvr.api; + +service SpeakerService { + rpc GetStatus(GetSpeakerStateCommand.Request) returns (GetSpeakerStateCommand.Feedback); + rpc PlayAudio(PlayAudioCommand.Request) returns (PlayAudioCommand.Feedback); + rpc StreamAudio(stream StreamSpeakerAudioCommand.Request) returns (StreamSpeakerAudioCommand.Feedback); + rpc StopPlayback(StopSpeakerCommand.Request) returns (StopSpeakerCommand.Feedback); + rpc PausePlayback(PauseSpeakerCommand.Request) returns (PauseSpeakerCommand.Feedback); + rpc ResumePlayback(ResumeSpeakerCommand.Request) returns (ResumeSpeakerCommand.Feedback); + + rpc SetVolume(SetSpeakerVolumeCommand.Request) returns (SetSpeakerVolumeCommand.Feedback); + rpc GetVolume(GetSpeakerVolumeCommand.Request) returns (GetSpeakerVolumeCommand.Feedback); +} diff --git a/src/views/Home.vue b/src/views/Home.vue index 01c2fc0..4255e2c 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -37,7 +37,12 @@ import Camera from './camera/index.vue' import { useRouter } from 'vue-router'; import autofit from 'autofit.js' -autofit.init() +autofit.init({ + designHeight: 1080, + designWidth: 1920, + renderDom: '#app', + resize: true + }) const router = useRouter() @@ -78,12 +83,25 @@ const back = () => { router.back() } +const resetAutoFit = () => { + autofit.destroy() // 销毁旧缩放 + autofit.init({ + designHeight: 1080, + designWidth: 1920, + renderDom: '#app', + resize: true + }) +} + let clockTimer, binaryTimer; onMounted(() => { updateClock(); clockTimer = setInterval(updateClock, 1000); animateBinary() binaryTimer = setInterval(animateBinary, 400); + + document.addEventListener('fullscreenchange', resetAutoFit) + document.addEventListener('webkitfullscreenchange', resetAutoFit) }) onUnmounted(() => { diff --git a/src/views/arm/MechanicalArm.vue b/src/views/arm/MechanicalArm.vue index 8588257..94747b7 100644 --- a/src/views/arm/MechanicalArm.vue +++ b/src/views/arm/MechanicalArm.vue @@ -523,7 +523,7 @@ onUnmounted(() => { margin-bottom: 12px; .number { - width: 180px; + width: 170px; border-radius: 5px; padding: 6px; background: $color-background-card;