Reverse-engineer DWARF II telescope API and build open-source Go client

Complete reverse-engineering of the DWARFLAB Android app (v3.4.0) protocol
and implementation of a working CLI tool to control DWARF II telescopes.

Analysis (from APK decompilation with jadx):
- Extracted 17 protobuf definitions (382 messages) from embedded descriptors
- Mapped all 323 WebSocket command IDs across 16 modules
- Documented the full protocol: BLE discovery, WebSocket control (port 9900),
  RTSP preview, WsPacket envelope (proto v2.3)
- Documented the Android UI structure (screens, navigation, shooting modes)
- Key discovery: telescope responds with type=3 (reply), not type=1 (response),
  and several commands are fire-and-forget (RGB, camera open/close)

dwarfctl Go client:
- Protobuf bindings generated from extracted .proto files (397 messages)
- WebSocket transport layer with request-response matching and notification fan-out
- Typed API covering cameras, motors, astrophotography, focus, tracking, system, power
- Cobra CLI with 30+ subcommands and --debug traffic logging
- 57 unit tests (transport round-trip, command routing, proto encoding)
- Validated on real hardware: state, photo, motor slew (all directions/speeds),
  focus, RGB, time/location sync all confirmed working

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
Jacquin Antoine
2026-07-12 15:18:56 +02:00
commit 814a836c5a
54 changed files with 35973 additions and 0 deletions

368
analysis/protos/Astro.proto Normal file
View File

@ -0,0 +1,368 @@
// source: astro.proto
syntax = "proto3";
message ReqStartCalibration {
double lon = 1;
double lat = 2;
}
message ReqStopCalibration {
}
message ReqGotoDSO {
double ra = 1;
double dec = 2;
string target_name = 3;
bool goto_only = 4;
}
message ReqGotoSolarSystem {
int32 index = 1;
double lon = 2;
double lat = 3;
string target_name = 4;
bool force_start = 5;
}
message ResGotoSolarSystem {
int32 code = 1;
ReqGotoSolarSystem req = 2;
}
message ReqStopGoto {
}
message ReqCaptureRawLiveStacking {
int32 ir_index = 1;
bool force_start = 2;
}
message ReqStopCaptureRawLiveStacking {
}
message ReqFastStopCaptureRawLiveStacking {
}
message ReqCheckDarkFrame {
}
message ResCheckDarkFrame {
int32 progress = 1;
int32 code = 2;
}
message ReqCaptureDarkFrame {
int32 reshoot = 1;
}
message ReqStopCaptureDarkFrame {
}
message ReqCaptureDarkFrameWithParam {
int32 exp_index = 1;
int32 gain_index = 2;
int32 bin_index = 3;
int32 cap_size = 4;
}
message ReqStopCaptureDarkFrameWithParam {
}
message ReqGetDarkFrameList {
}
message ResGetDarkFrameInfo {
// oneof _temperature
int32 exp_index = 1;
int32 gain_index = 2;
int32 bin_index = 3;
string exp_name = 4;
string gain_name = 5;
string bin_name = 6;
int32 temperature = 7;
}
message ResGetDarkFrameInfoList {
int32 code = 1;
repeated ResGetDarkFrameInfo results = 2;
}
message ReqDelDarkFrame {
int32 exp_index = 1;
int32 gain_index = 2;
int32 bin_index = 3;
int32 temp_value = 4;
}
message ReqDelDarkFrameList {
repeated ReqDelDarkFrame dark_list = 1;
}
message ResDelDarkFrameList {
int32 code = 1;
}
message ReqGoLive {
}
message ReqTrackSpecialTarget {
int32 index = 1;
double lon = 2;
double lat = 3;
}
message ReqStopTrackSpecialTarget {
}
message ReqOneClickGotoDSO {
double ra = 1;
double dec = 2;
string target_name = 3;
double lon = 4;
double lat = 5;
int32 shooting_mode = 6;
bool goto_only = 7;
}
message ResOneClickGoto {
int32 step = 1;
int32 code = 2;
bool all_end = 3;
}
message ReqOneClickGotoSolarSystem {
int32 index = 1;
double lon = 2;
double lat = 3;
string target_name = 4;
int32 shooting_mode = 5;
bool force_start = 6;
}
message ResOneClickGotoSolarSystem {
int32 step = 1;
int32 code = 2;
bool all_end = 3;
ReqOneClickGotoSolarSystem req = 4;
}
message ReqStopOneClickGoto {
}
message ReqCaptureWideRawLiveStacking {
bool force_start = 1;
}
message ReqStopCaptureWideRawLiveStacking {
}
message ReqFastStopCaptureWideRawLiveStacking {
}
message ReqStartEqSolving {
double lon = 1;
double lat = 2;
}
message ResStartEqSolving {
double azi_err = 1;
double alt_err = 2;
int32 code = 3;
}
message ReqStopEqSolving {
}
message ReqStartAiEnhance {
}
message ReqStopAiEnhance {
}
message ReqStartMosaic {
int32 horizontal_scale = 1;
int32 vertical_scale = 2;
int32 rotation = 3;
int32 ir_index = 4;
bool force_start = 5;
}
message ReqStartMakeFitsThumb {
string src_dir = 1;
}
message ReqStopMakeFitsThumb {
}
message ResMakeFitsThumb {
int32 code = 1;
string src_dir = 2;
}
message MakeFitsThumbTaskParam {
string src_dir = 1;
}
message ReqIsImageStackable {
repeated string src_dirs = 1;
}
message ResIsImageStackable {
int32 code = 1;
repeated ResGetDarkFrameInfo need_dark_frame_info = 2;
}
message ReqStartRepostprocess {
repeated string src_dirs = 1;
}
message ReqStopRepostprocess {
}
message ResRepostprocess {
int32 code = 1;
string result_dir = 2;
}
message RepostprocessTaskParam {
string result_dir = 1;
}
message ReqGetAstroShootingTime {
int32 exp_index = 1;
int32 horizontal_scale = 2;
int32 vertical_scale = 3;
int32 rotation = 4;
int32 cam_id = 5;
int32 shooting_mode = 6;
}
message ResGetAstroShootingTime {
enum AstroMode {
NORMAL = 0;
MOSAIC = 1;
}
int32 code = 1;
int32 shooting_time = 2;
int32 cam_id = 3;
ResGetAstroShootingTime.AstroMode astro_mode = 4;
int32 shooting_mode = 5;
}
message ReqGetCaliFrameList {
int32 camera_type = 1;
int32 cali_frame_type = 2;
}
message CaliFrameInfo {
// oneof _filter_type
// oneof _info_id
// oneof _temp_value
string exp_name = 1;
int32 gain = 2;
int32 resolution = 3;
int32 camera_type = 4;
int32 progress = 5;
int32 cali_frame_type = 6;
int32 filter_type = 7;
int32 info_id = 8;
int32 temp_value = 9;
}
message ResGetCaliFrameList {
int32 code = 1;
repeated CaliFrameInfo list = 2;
int32 camera_type = 3;
int32 cali_frame_type = 4;
}
message ReqDelCaliFrameList {
repeated int32 info_ids = 1;
}
message ReqCaptureCaliFrame {
// oneof _filter_type
int32 exp_index = 1;
int32 gain = 2;
int32 resolution = 3;
int32 cap_size = 4;
int32 camera_type = 5;
int32 cali_frame_type = 6;
int32 filter_type = 7;
int32 scene_type = 8;
}
message ReqStopCaptureCaliFrame {
int32 camera_type = 1;
}
message CaptureCaliFrameTaskParam {
int32 camera_type = 1;
int32 cali_frame_type = 2;
}
message ReqGetQuickSetList {
int32 camera_type = 1;
}
message QuikSetInfo {
string exp_name = 1;
int32 exp_index = 2;
int32 gain = 3;
int32 resolution = 4;
int32 camera_type = 5;
string info_id = 6;
}
message ResGetQuikSetList {
int32 code = 1;
repeated QuikSetInfo quick_set_list = 2;
int32 camera_type = 3;
}
message ReqSetQuickSet {
string info_id = 1;
}
message ResSetQuickSet {
int32 code = 1;
string info_id = 2;
}
message ReqOneClickShooting {
}
message ResAstroShooting {
// oneof _exp_name
// oneof _gain
// oneof _resolution
// oneof _filter_type
// oneof _temp_threshold
int32 code = 1;
string exp_name = 2;
int32 gain = 3;
int32 resolution = 4;
int32 filter_type = 5;
int32 temp_threshold = 6;
}
message ReqStartSkyTargetFinder {
double lon = 1;
double lat = 2;
bool force_restart = 3;
int32 scene_type = 4;
}
message ResStartSkyTargetFinder {
int32 code = 1;
double zenith_azi = 2;
double zenith_alt = 3;
double center_azi = 4;
double center_alt = 5;
double center_roll = 6;
int32 scene_type = 7;
}
message ReqStopSkyTargetFinder {
}

View File

@ -0,0 +1,52 @@
// source: base.proto
syntax = "proto3";
enum WsMajorVersion {
WS_MAJOR_VERSION_UNKNOWN = 0;
WS_MAJOR_VERSION_NUMBER = 2;
}
enum WsMinorVersion {
WS_MINOR_VERSION_UNKNOWN = 0;
WS_MINOR_VERSION_NUMBER = 3;
}
message WsPacket {
uint32 major_version = 1;
uint32 minor_version = 2;
uint32 device_id = 3;
uint32 module_id = 4;
uint32 cmd = 5;
uint32 type = 6;
bytes data = 7;
string client_id = 8;
}
message ComResponse {
int32 code = 1;
}
message ComResWithInt {
int32 value = 1;
int32 code = 2;
}
message ComResWithDouble {
double value = 1;
int32 code = 2;
}
message ComResWithString {
string str = 1;
int32 code = 2;
}
message CommonParam {
bool hasAuto = 1;
int32 auto_mode = 2;
int32 id = 3;
int32 mode_index = 4;
int32 index = 5;
double continue_value = 6;
}

203
analysis/protos/Ble.proto Normal file
View File

@ -0,0 +1,203 @@
// source: ble.proto
syntax = "proto3";
enum VocalType {
VT_UNKNOWN = 0;
VT_PING = 1;
VT_ECHO = 2;
}
message ReqGetconfig {
int32 cmd = 1;
string ble_psd = 2;
string client_id = 3;
}
message ReqAp {
int32 cmd = 1;
int32 wifi_type = 2;
int32 auto_start = 3;
int32 country_list = 4;
string country = 5;
string ble_psd = 6;
string client_id = 7;
bool force_restart = 8;
}
message ReqSta {
int32 cmd = 1;
int32 auto_start = 2;
string ble_psd = 3;
string ssid = 4;
string psd = 5;
string client_id = 6;
}
message ReqSetblewifi {
int32 cmd = 1;
int32 mode = 2;
string ble_psd = 3;
string value = 4;
string client_id = 5;
}
message ReqReset {
int32 cmd = 1;
string client_id = 2;
}
message ReqGetwifilist {
int32 cmd = 1;
string client_id = 2;
}
message ReqGetsysteminfo {
int32 cmd = 1;
string client_id = 2;
}
message ReqCheckFile {
int32 cmd = 1;
string file_path = 2;
string md5 = 3;
}
message ResCommon {
int32 cmd = 1;
int32 code = 2;
}
message ResGetconfig {
int32 cmd = 1;
int32 code = 2;
int32 state = 3;
int32 wifi_mode = 4;
int32 ap_mode = 5;
int32 auto_start = 6;
int32 ap_country_list = 7;
string ssid = 8;
string psd = 9;
string ip = 10;
string ap_country = 11;
}
message ResAp {
int32 cmd = 1;
int32 code = 2;
int32 mode = 3;
string ssid = 4;
string psd = 5;
}
message ResSta {
int32 cmd = 1;
int32 code = 2;
string ssid = 3;
string psd = 4;
string ip = 5;
}
message ResSetblewifi {
int32 cmd = 1;
int32 code = 2;
int32 mode = 3;
string value = 4;
}
message ResReset {
int32 cmd = 1;
int32 code = 2;
}
message WifiInfo {
int32 signal_level = 1;
string ssid = 2;
string security_capability = 3;
}
message ResWifilist {
int32 cmd = 1;
int32 code = 2;
repeated string ssid = 4;
repeated WifiInfo wifi_info_list = 5;
}
message ResGetsysteminfo {
int32 cmd = 1;
int32 code = 2;
int32 protocol_version = 3;
string device = 4;
string mac_address = 5;
string dwarf_ota_version = 6;
}
message ResReceiveDataError {
int32 cmd = 1;
int32 code = 2;
}
message ResCheckFile {
int32 cmd = 1;
int32 code = 2;
}
message ComDwarfMsg {
VocalType vocaltype = 1;
}
message DwarfPing {
VocalType vocaltype = 1;
uint64 timestamp = 2;
bytes magic = 3;
repeated bytes vocals = 4;
repeated bytes mutes = 5;
}
message StationModel {
uint32 family = 1;
uint32 revision = 2;
}
message NifAP {
// oneof _ipv6
string ifname = 1;
int32 mode = 2;
string country_code = 3;
string ssid = 4;
string sec = 5;
string psw = 6;
bytes ipv4 = 7;
bytes ipv6 = 8;
}
message NifSTA {
// oneof _ssid
// oneof _psw
// oneof _rssi
// oneof _ipv4
// oneof _ipv6
string ifname = 1;
string ssid = 2;
string psw = 3;
int32 rssi = 4;
bytes ipv4 = 5;
bytes ipv6 = 6;
}
message DwarfEcho {
VocalType vocaltype = 1;
uint64 timestamp = 2;
bytes magic = 3;
uint64 ts_ping = 4;
bytes mac_address = 5;
StationModel model = 6;
string sn = 7;
string name = 8;
string psw = 9;
string fw_version = 10;
string ws_scheme = 11;
uint32 session = 12;
NifAP ap = 13;
NifSTA sta = 14;
}

View File

@ -0,0 +1,217 @@
// source: camera.proto
syntax = "proto3";
import "base.proto";
message ReqOpenCamera {
bool binning = 1;
int32 rtsp_encode_type = 2;
}
message ReqCloseCamera {
}
message ReqPhoto {
}
message ReqBurstPhoto {
int32 count = 1;
}
message ReqStopBurstPhoto {
}
message ReqStartRecord {
int32 encode_type = 1;
}
message ReqStopRecord {
}
message ReqSetExpMode {
int32 mode = 1;
}
message ReqGetExpMode {
}
message ReqSetExp {
int32 index = 1;
}
message ReqGetExp {
}
message ReqSetGainMode {
int32 mode = 1;
}
message ReqGetGainMode {
}
message ReqSetGain {
int32 index = 1;
}
message ReqGetGain {
}
message ReqSetBrightness {
int32 value = 1;
}
message ReqGetBrightness {
}
message ReqSetContrast {
int32 value = 1;
}
message ReqGetContrast {
}
message ReqSetHue {
int32 value = 1;
}
message ReqGetHue {
}
message ReqSetSaturation {
int32 value = 1;
}
message ReqGetSaturation {
}
message ReqSetSharpness {
int32 value = 1;
}
message ReqGetSharpness {
}
message ReqSetWBMode {
int32 mode = 1;
}
message ReqGetWBMode {
}
message ReqSetWBSence {
int32 value = 1;
}
message ReqGetWBSence {
}
message ReqSetWBCT {
int32 index = 1;
}
message ReqGetWBCT {
}
message ReqSetIrCut {
int32 value = 1;
}
message ReqGetIrcut {
}
message ReqStartTimeLapse {
}
message ReqStopTimeLapse {
}
message ReqSetAllParams {
int32 exp_mode = 1;
int32 exp_index = 2;
int32 gain_mode = 3;
int32 gain_index = 4;
int32 ircut_value = 5;
int32 wb_mode = 6;
int32 wb_index_type = 7;
int32 wb_index = 8;
int32 brightness = 9;
int32 contrast = 10;
int32 hue = 11;
int32 saturation = 12;
int32 sharpness = 13;
int32 jpg_quality = 14;
}
message ReqGetAllParams {
}
message ResGetAllParams {
repeated CommonParam all_params = 1;
int32 code = 2;
}
message ReqSetFeatureParams {
CommonParam param = 1;
}
message ReqGetAllFeatureParams {
}
message ResGetAllFeatureParams {
repeated CommonParam all_feature_params = 1;
int32 code = 2;
}
message ReqGetSystemWorkingState {
}
message ReqSetJpgQuality {
int32 quality = 1;
}
message ReqGetJpgQuality {
}
message ReqPhotoRaw {
}
message ReqSetRtspBitRateType {
int32 bitrate_type = 1;
}
message ReqDisableAllIspProcessing {
}
message ReqEnableAllIspProcessing {
}
message IspModuleState {
int32 module_id = 1;
bool state = 2;
}
message ReqSetIspModuleState {
repeated IspModuleState module_states = 1;
}
message ReqGetIspModuleState {
repeated int32 module_ids = 1;
}
message ReqSwitchResolution {
int32 resolution_index = 1;
}
message ReqSwitchFrameRate {
int32 fps_index = 1;
}
message ReqSwitchCropRatio {
int32 crop_ratio = 1;
}
message ReqSetPreviewQuality {
uint32 level = 1;
uint32 quality = 2;
}

View File

@ -0,0 +1,18 @@
// source: device.proto
package device;
syntax = "proto3";
import "base.proto";
message ReqLensDefog {
int32 state = 1;
}
message ReqAutoCooling {
int32 state = 1;
}
message ReqAutoShutdown {
int32 state = 1;
}

View File

@ -0,0 +1,39 @@
// source: focus.proto
syntax = "proto3";
message ReqManualSingleStepFocus {
uint32 direction = 1;
}
message ReqManualContinuFocus {
uint32 direction = 1;
}
message ReqStopManualContinuFocus {
}
message ReqNormalAutoFocus {
uint32 mode = 1;
uint32 center_x = 2;
uint32 center_y = 3;
}
message ReqAstroAutoFocus {
uint32 mode = 1;
}
message ReqStopAstroAutoFocus {
}
message ReqGetUserInfinityPos {
}
message ReqSetUserInfinityPos {
int32 pos = 1;
}
message ResUserInfinityPos {
int32 code = 1;
int32 pos = 2;
}

View File

@ -0,0 +1,30 @@
// source: itips.proto
syntax = "proto3";
message ReqITipsGet {
int32 mode = 1;
}
message ResITipsGet {
int32 mode = 1;
string itips_code = 2;
int32 code = 3;
}
message CommonITips {
int32 itips_status = 1;
string itips_code = 2;
}
message CommonStepITips {
int32 step_id = 1;
int32 step_status = 2;
repeated CommonITips step_itips = 3;
}
message ResITipsList {
repeated CommonStepITips itips_list = 1;
int32 mode = 2;
int32 code = 3;
}

View File

@ -0,0 +1,81 @@
// source: motor_control.proto
syntax = "proto3";
message ReqMotorServiceJoystick {
double vector_angle = 1;
double vector_length = 2;
}
message ReqMotorServiceJoystickFixedAngle {
double vector_angle = 1;
double vector_length = 2;
}
message ReqMotorServiceJoystickStop {
}
message ReqMotorRun {
int32 id = 1;
double speed = 2;
bool direction = 3;
int32 speed_ramping = 4;
int32 resolution_level = 5;
}
message ReqMotorRunInPulse {
int32 id = 1;
int32 frequency = 2;
bool direction = 3;
int32 speed_ramping = 4;
int32 resolution = 5;
int32 pulse = 6;
bool mode = 7;
}
message ReqMotorRunTo {
int32 id = 1;
double end_position = 2;
double speed = 3;
int32 speed_ramping = 4;
int32 resolution_level = 5;
}
message ReqMotorGetPosition {
int32 id = 1;
}
message ReqMotorStop {
int32 id = 1;
}
message ReqMotorReset {
int32 id = 1;
bool direction = 2;
}
message ReqMotorChangeSpeed {
int32 id = 1;
double speed = 2;
}
message ReqMotorChangeDirection {
int32 id = 1;
bool direction = 2;
}
message ResMotor {
int32 id = 1;
int32 code = 2;
}
message ResMotorPosition {
int32 id = 1;
int32 code = 2;
double position = 3;
}
message ReqDualCameraLinkage {
int32 x = 1;
int32 y = 2;
}

View File

@ -0,0 +1,518 @@
// source: notify.proto
package notify;
syntax = "proto3";
import "base.proto";
enum OperationState {
OPERATION_STATE_IDLE = 0;
OPERATION_STATE_RUNNING = 1;
OPERATION_STATE_STOPPING = 2;
OPERATION_STATE_STOPPED = 3;
}
enum AstroState {
ASTRO_STATE_IDLE = 0;
ASTRO_STATE_RUNNING = 1;
ASTRO_STATE_STOPPING = 2;
ASTRO_STATE_STOPPED = 3;
ASTRO_STATE_PLATE_SOLVING = 4;
}
enum SentryModeState {
SENTRY_MODE_STATE_IDLE = 0;
SENTRY_MODE_STATE_INIT = 1;
SENTRY_MODE_STATE_DETECT = 2;
SENTRY_MODE_STATE_TRACK = 3;
SENTRY_MODE_STATE_TRACK_FINISH = 4;
SENTRY_MODE_STATE_STOPPING = 5;
}
enum SentryObjectType {
SENTRY_OBJECT_TYPE_UNKNOWN = 0;
SENTRY_OBJECT_TYPE_UFO = 1;
SENTRY_OBJECT_TYPE_BIRD = 2;
SENTRY_OBJECT_TYPE_PERSON = 3;
SENTRY_OBJECT_TYPE_ANIMAL = 4;
SENTRY_OBJECT_TYPE_VEHICLE = 5;
SENTRY_OBJECT_TYPE_FLYING = 6;
SENTRY_OBJECT_TYPE_BOAT = 7;
}
message PictureMatching {
uint32 x = 1;
uint32 y = 2;
uint32 width = 3;
uint32 height = 4;
}
message StorageInfo {
uint32 available_size = 1;
uint32 total_size = 2;
int32 storage_type = 3;
bool is_valid = 4;
}
message Temperature {
int32 code = 1;
int32 temperature = 2;
}
message CmosTemperature {
// oneof _temperature
int32 temperature = 1;
int32 camera_type = 2;
}
message RecordTime {
uint32 record_time = 1;
uint32 camera_type = 2;
}
message TimeLapseOutTime {
uint32 interval = 1;
uint32 out_time = 2;
uint32 total_time = 3;
uint32 camera_type = 4;
}
message OperationStateNotify {
notify.OperationState state = 1;
}
message AstroCalibrationState {
notify.AstroState state = 1;
int32 plate_solving_times = 2;
}
message AstroGotoState {
notify.AstroState state = 1;
string target_name = 2;
}
message AstroTrackingState {
notify.OperationState state = 1;
string target_name = 2;
}
message ProgressCaptureRawDark {
int32 progress = 1;
int32 remaining_time = 2;
int32 camera_type = 3;
}
message ProgressCaptureRawLiveStacking {
// oneof _shooting_time
// oneof _stacked_time
int32 total_count = 1;
int32 update_type = 2;
int32 current_count = 3;
int32 stacked_count = 4;
int32 exp_index = 5;
int32 gain_index = 6;
string target_name = 7;
int32 camera_type = 8;
int32 shooting_time = 9;
int32 stacked_time = 10;
}
message Param {
repeated CommonParam param = 1;
}
message BurstProgress {
uint32 total_count = 1;
uint32 completed_count = 2;
uint32 camera_type = 3;
}
message PanoramaProgress {
int32 total_count = 1;
int32 completed_count = 2;
uint32 camera_type = 3;
}
message RgbState {
int32 state = 1;
}
message PowerIndState {
int32 state = 1;
}
message ChargingState {
int32 state = 1;
}
message BatteryInfo {
int32 percentage = 1;
}
message HostSlaveMode {
int32 mode = 1;
bool lock = 2;
}
message MTPState {
int32 mode = 1;
}
message TrackResult {
int32 x = 1;
int32 y = 2;
int32 w = 3;
int32 h = 4;
int32 id = 5;
}
message CPUMode {
int32 mode = 1;
}
message AstroTrackingSpecialState {
notify.OperationState state = 1;
string target_name = 2;
int32 index = 3;
}
message PowerOff {
}
message AlbumUpdate {
int32 media_type = 1;
}
message SentryState {
notify.SentryModeState state = 1;
notify.SentryObjectType object_type = 2;
}
message OneClickGotoState {
// oneof current_state
notify.AstroAutoFocusState astro_auto_focus_state = 1;
notify.AstroCalibrationState astro_calibration_state = 2;
notify.AstroGotoState astro_goto_state = 3;
notify.AstroTrackingState astro_tracking_state = 4;
}
message StreamType {
int32 stream_type = 1;
int32 cam_id = 2;
}
message MultiTrackResult {
repeated notify.TrackResult results = 1;
}
message EqSolvingState {
notify.OperationState state = 1;
}
message LongExpPhotoProgress {
double total_time = 1;
double exposured_time = 2;
uint32 camera_type = 3;
}
message ShootingScheduleResultAndState {
string schedule_id = 1;
int32 result = 2;
int32 state = 3;
}
message ShootingTaskState {
string schedule_task_id = 1;
int32 state = 2;
int32 code = 3;
}
message SkySeacherState {
notify.OperationState state = 1;
}
message ProgressAiEnhance {
int32 progress = 1;
int32 total_time = 2;
}
message CommonProgress {
enum ProgressType {
PROGRESS_TYPE_INITING = 0;
PROGRESS_TYPE_MOSAIC_MOVING = 1;
}
int32 current = 1;
int32 total = 2;
notify.CommonProgress.ProgressType progress_type = 3;
}
message CalibrationResult {
double azi = 1;
double alt = 2;
}
message FocusPosition {
int32 pos = 1;
}
message SentryAutoHand {
int32 mode = 1;
}
message PanoramaStitchUploadComplete {
int32 code = 1;
string user_id = 2;
string busi_no = 3;
string panorama_name = 4;
string mac = 5;
}
message PanoramaCompressionComplete {
int32 code = 1;
string panorama_name = 2;
string zip_file_path = 3;
string zip_file_md5 = 4;
uint64 zip_file_size = 5;
string stitch_param = 6;
}
message PanoramaCompressionProgress {
string panorama_name = 1;
uint32 total_files_num = 2;
uint32 compressed_files_num = 3;
}
message PanoramaUploadCompressionProgress {
string user_id = 1;
string busi_no = 2;
string panorama_name = 3;
string mac = 4;
uint32 total_files_num = 5;
uint32 compressed_files_num = 6;
double speed = 7;
}
message PanoramaUploadProgress {
string user_id = 1;
string busi_no = 2;
string panorama_name = 3;
string mac = 4;
uint64 total_size = 5;
uint64 uploaded_size = 6;
double speed = 7;
}
message PanoramaCurrentUploadState {
int32 code = 1;
string user_id = 2;
string busi_no = 3;
string panorama_name = 4;
string mac = 5;
uint32 total_files_num = 6;
uint32 compressed_files_num = 7;
uint64 total_size = 8;
uint64 uploaded_size = 9;
uint32 step = 10;
}
message LowTempProtectionMode {
int32 mode = 1;
}
message StateSystemResourceOccupation {
enum TaskId {
IDLE = 0;
PANORAMA_UPLOAD = 1;
ASTRO_MULTI_STACK = 2;
}
notify.StateSystemResourceOccupation.TaskId task_id = 1;
notify.OperationState state = 2;
}
message BodyStatus {
enum BodyStatusEnum {
UNKNOWN = 0;
EQ_MODE = 1;
AZI_MODE = 2;
}
notify.BodyStatus.BodyStatusEnum body_status = 1;
}
message ProgressCaptureMosaic {
int32 total_count = 1;
int32 update_type = 2;
int32 current_count = 3;
int32 stacked_count = 4;
int32 exp_index = 5;
int32 gain_index = 6;
string target_name = 7;
int32 horizontal_scale = 8;
int32 vertical_scale = 9;
int32 rotation = 10;
int32 fov_id = 11;
int32 fov_total = 12;
}
message Wb {
uint64 mode = 1;
int32 ct = 2;
int32 scene = 3;
int32 camera_type = 4;
}
message GeneralIntParam {
uint64 param_id = 1;
int32 mode = 2;
int32 value = 3;
}
message GeneralFloatParam {
uint64 param_id = 1;
float value = 2;
}
message GeneralBoolParams {
uint64 param_id = 1;
bool value = 2;
}
message SwitchShootingMode {
int32 state = 1;
int32 source_mode = 2;
int32 dst_mode = 3;
}
message SwitchCropRatioState {
int32 state = 1;
int32 crop_ratio = 2;
}
message ResolutionParam {
uint64 param_id = 1;
int32 current_res_value = 2;
int32 current_fps_value = 3;
repeated int32 supported_fps_list = 4;
repeated int32 supported_resolution_list = 5;
}
message CaptureRawState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message PhotoState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message BurstState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message RecordState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message TimeLapseState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message CaptureRawDarkState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message PanoramaState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message AstroAutoFocusState {
notify.OperationState state = 1;
}
message NormalAutoFocusState {
notify.OperationState state = 1;
}
message AstroAutoFocusFastState {
notify.OperationState state = 1;
}
message AreaAutoFocusState {
notify.OperationState state = 1;
}
message DualCameraLinkageState {
notify.OperationState state = 1;
}
message NormalTrackState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message SwitchResolutionFpsState {
notify.OperationState state = 1;
int32 camera_type = 2;
}
message CaptureCaliFrameState {
notify.OperationState state = 1;
int32 camera_type = 2;
int32 cali_frame_type = 3;
}
message CaptureCaliFrameProgress {
int32 progress = 1;
int32 camera_type = 2;
int32 cali_frame_type = 3;
}
message DeviceAttitude {
double pitch = 1;
double yaw = 2;
double roll = 3;
}
message SkyTargetFinderState {
notify.OperationState state = 1;
int32 scene_type = 2;
}
message PanoFramingThumbnailUpdateNotify {
bytes webp_data = 1;
}
message PanoFramingRectUpdateNotify {
double norm_x_tl = 1;
double norm_y_tl = 2;
double norm_x_br = 3;
double norm_y_br = 4;
double norm_limit_x_left = 5;
double norm_limit_y_top = 6;
double norm_limit_x_right = 7;
double norm_limit_y_bottom = 8;
double rect_hor_fov = 9;
double rect_ver_fov = 10;
int32 error_code = 11;
}
message PanoFramingStateNotify {
int32 state = 1;
}
message AutoShutdown {
int32 state = 1;
}
message LensDefog {
int32 state = 1;
}
message AutoCooling {
int32 state = 1;
}

View File

@ -0,0 +1,108 @@
// source: panorama.proto
syntax = "proto3";
message ReqStartPanoramaByGrid {
}
message ReqStartPanoramaByEulerRange {
float yaw_range = 1;
float pitch_range = 2;
}
message ReqStartPanoramaStitchUpload {
uint64 resource_id = 1;
string user_id = 2;
int32 app_platform = 3;
string panorama_name = 4;
string ak = 5;
string sk = 6;
string token = 7;
string bucket = 8;
string bucket_prefix = 9;
string from = 10;
string env_type = 11;
}
message ReqStopPanorama {
}
message ReqStopPanoramaStitchUpload {
string user_id = 1;
}
message ReqGetPanoramaCurrentUploadState {
}
message ResGetPanoramaCurrentUploadState {
int32 code = 1;
string user_id = 2;
string busi_no = 3;
string panorama_name = 4;
string mac = 5;
uint32 total_files_num = 6;
uint32 compressed_files_num = 7;
uint64 total_size = 8;
uint64 uploaded_size = 9;
uint32 step = 10;
}
message ReqGetUploadPredict {
string panorama_name = 1;
}
message ResGetUploadPredict {
int32 code = 1;
string panorama_name = 2;
uint32 file_nums = 3;
string resolution = 4;
uint64 cloud_data_size = 5;
uint64 zip_data_size = 6;
uint64 app_zip_data_size = 7;
}
message PanoramaUploadParam {
string user_id = 1;
string busi_no = 2;
string panorama_name = 3;
string mac = 4;
uint32 total_files_num = 5;
uint32 compressed_files_num = 6;
uint64 total_size = 7;
uint64 uploaded_size = 8;
uint32 step = 9;
}
message ReqCompressPanorama {
string panorama_name = 1;
}
message ReqStopCompressPanorama {
}
message ReqStartPanoramaFraming {
}
message ReqResetPanoramaFraming {
}
message ReqStopPanoramaFraming {
}
message ReqStopPanoramaFramingAndStartGrid {
}
message ResStopPanoramaFraming {
int32 code = 1;
double centerX_degree_offset = 2;
double centerY_degree_offset = 3;
uint32 framing_rows = 4;
uint32 framing_cols = 5;
}
message ReqUpdatePanoramaFramingRect {
double norm_x_tl = 1;
double norm_y_tl = 2;
double norm_x_br = 3;
double norm_y_br = 4;
}

View File

@ -0,0 +1,52 @@
// source: param.proto
package param;
syntax = "proto3";
message ReqSetExposure {
uint64 param_id = 1;
int32 mode = 2;
int32 value = 3;
}
message ReqSetGain {
uint64 param_id = 1;
int32 mode = 2;
int32 value = 3;
}
message ReqSetWb {
uint64 param_id = 1;
int32 mode = 2;
int32 value = 3;
}
message ReqSetGeneralIntParam {
uint64 param_id = 1;
int32 value = 2;
}
message ReqSetGeneralFloatParam {
uint64 param_id = 1;
float value = 2;
}
message ReqSetGeneralBoolParams {
uint64 param_id = 1;
bool value = 2;
}
message ReqSetAutoParam {
int32 camera_type = 1;
int32 shooting_tech = 2;
bool is_auto = 3;
}
message ResSetAutoParam {
int32 shooting_mode = 1;
int32 camera_type = 2;
int32 shooting_tech = 3;
bool is_auto = 4;
bool update_all = 5;
int32 code = 6;
}

21
analysis/protos/RGB.proto Normal file
View File

@ -0,0 +1,21 @@
// source: rgb.proto
syntax = "proto3";
message ReqOpenRgb {
}
message ReqCloseRgb {
}
message ReqPowerDown {
}
message ReqOpenPowerInd {
}
message ReqClosePowerInd {
}
message ReqReboot {
}

View File

@ -0,0 +1,157 @@
// source: shooting_schedule.proto
syntax = "proto3";
enum ShootingScheduleState {
SHOOTING_SCHEDULE_STATE_INITIALIZED = 0;
SHOOTING_SCHEDULE_STATE_PENDING_SHOOT = 1;
SHOOTING_SCHEDULE_STATE_SHOOTING = 2;
SHOOTING_SCHEDULE_STATE_COMPLETED = 3;
SHOOTING_SCHEDULE_STATE_EXPIRED = 4;
}
enum ShootingScheduleSyncState {
SHOOTING_SCHEDULE_SYNC_STATE_PENDING_SYNC = 0;
SHOOTING_SCHEDULE_SYNC_STATE_SYNCED = 1;
}
enum ShootingScheduleResult {
SHOOTING_SCHEDULE_RESULT_PENDING_START = 0;
SHOOTING_SCHEDULE_RESULT_ALL_COMPLETED = 1;
SHOOTING_SCHEDULE_RESULT_PARTIALLY_COMPLETED = 2;
SHOOTING_SCHEDULE_RESULT_ALL_FAILED = 3;
}
enum ShootingTaskState {
SHOOTING_TASK_STATUS_IDLE = 0;
SHOOTING_TASK_STATUS_SHOOTING = 1;
SHOOTING_TASK_STATUS_SUCCESS = 2;
SHOOTING_TASK_STATUS_FAILED = 3;
SHOOTING_TASK_STATUS_INTERRUPTED = 4;
}
enum ShootingScheduleMode {
SHOOTING_SCHEDULE_MODE_ASTRO_DEEP_SKY = 0;
}
message ShootingTaskMsg {
string schedule_id = 1;
string params = 2;
ShootingTaskState state = 3;
int32 code = 4;
int64 created_time = 5;
int64 updated_time = 6;
string schedule_task_id = 7;
int32 param_mode = 8;
int32 param_version = 9;
int32 create_from = 10;
}
message ShootingScheduleMsg {
string schedule_id = 1;
string schedule_name = 2;
int32 device_id = 3;
string mac_address = 4;
int64 start_time = 5;
int64 end_time = 6;
ShootingScheduleResult result = 7;
int64 created_time = 8;
int64 updated_time = 9;
ShootingScheduleState state = 10;
int32 lock = 11;
string password = 12;
repeated ShootingTaskMsg shooting_tasks = 13;
int32 param_mode = 14;
int32 param_version = 15;
string params = 16;
int64 schedule_time = 17;
ShootingScheduleSyncState sync_state = 18;
}
message ReqSyncShootingSchedule {
ShootingScheduleMsg shooting_schedule = 1;
}
message ResSyncShootingSchedule {
ShootingScheduleMsg shooting_schedule = 1;
repeated string time_conflict_schedule_ids = 2;
int32 code = 3;
bool can_replace = 4;
}
message ReqCancelShootingSchedule {
string id = 1;
string password = 2;
}
message ResCancelShootingSchedule {
string id = 1;
int32 code = 2;
}
message ReqGetAllShootingSchedule {
}
message ResGetAllShootingSchedule {
repeated ShootingScheduleMsg shooting_schedule = 1;
int32 code = 2;
}
message ReqGetShootingScheduleById {
string id = 1;
}
message ResGetShootingScheduleById {
ShootingScheduleMsg shooting_schedule = 1;
int32 code = 2;
}
message ReqGetShootingTaskById {
string id = 1;
}
message ResGetShootingTaskById {
ShootingTaskMsg shooting_task = 1;
int32 code = 2;
}
message ReqReplaceShootingSchedule {
ShootingScheduleMsg shooting_schedule = 1;
}
message ResReplaceShootingSchedule {
ShootingScheduleMsg shooting_schedule = 1;
repeated ShootingScheduleMsg replaced_shooting_schedule = 2;
int32 code = 3;
}
message ReqUnlockShootingSchedule {
string id = 1;
string password = 2;
}
message ResUnlockShootingSchedule {
string id = 1;
int32 code = 2;
}
message ReqLockShootingSchedule {
string id = 1;
string password = 2;
}
message ResLockShootingSchedule {
string id = 1;
string password = 2;
int32 code = 3;
}
message ReqDeleteShootingSchedule {
string id = 1;
string password = 2;
}
message ResDeleteShootingSchedule {
string id = 1;
int32 code = 2;
}

View File

@ -0,0 +1,72 @@
// source: system.proto
syntax = "proto3";
message ReqSetTime {
uint64 timestamp = 1;
double timezone_offset = 2;
}
message ReqSetTimezone {
string timezone = 1;
}
message ReqSetMtpMode {
int32 mode = 1;
}
message ReqSetCpuMode {
int32 mode = 1;
}
message ReqsetMasterLock {
bool lock = 1;
}
message ReqGetDeviceActivateInfo {
int32 issuer = 1;
}
message ResDeviceActivateInfo {
int32 activate_state = 1;
int32 activate_process_state = 2;
string request_param = 3;
}
message ReqDeviceActivateWriteFile {
string request_param = 1;
}
message ResDeviceActivateWriteFile {
int32 code = 1;
string request_param = 2;
}
message ReqDeviceActivateSuccessfull {
string request_param = 1;
}
message ResDeviceActivateSuccessfull {
int32 code = 1;
int32 activate_state = 2;
}
message ReqDisableDeviceActivate {
string request_param = 1;
}
message ResDisableDeviceActivate {
int32 code = 1;
int32 activate_state = 2;
}
message ReqSetLocation {
double latitude = 1;
double longitude = 2;
double altitude = 3;
string country_region = 4;
string province = 5;
string city = 6;
string district = 7;
bool enable = 8;
}

View File

@ -0,0 +1,204 @@
// source: task_center.proto
syntax = "proto3";
import "notify.proto";
import "panorama.proto";
import "astro.proto";
enum TaskId {
TASK_ID_IDLE = 0;
TASK_ID_PANORAMA_UPLOAD = 1;
TASK_ID_ASTRO_MULTI_STACK_THUMBNAIL_GENERATION = 2;
TASK_ID_ASTRO_MULTI_STACK = 3;
TASK_ID_CAPTURE_CALI_FRAME = 4;
}
enum ExclusiveTaskType {
EXCLUSIVE_TYPE_NONE = 0;
EXCLUSIVE_TYPE_CAMERA = 1;
EXCLUSIVE_TYPE_MOTOR = 2;
EXCLUSIVE_TYPE_FOCUS_MOTOR = 4;
EXCLUSIVE_TYPE_SYSTEM_IO = 8;
EXCLUSIVE_TYPE_SYSTEM_WIFI = 16;
}
message TaskAttr {
int32 exclusive_mask = 1;
int32 priority = 2;
}
message TaskState {
// oneof extendedState
notify.OperationState base_state = 1;
notify.AstroState astro_extended_state = 2;
}
message TaskParam {
// oneof param
PanoramaUploadParam panorama_upload = 1;
MakeFitsThumbTaskParam make_fits_thumb_task_param = 2;
RepostprocessTaskParam repostprocess_task_param = 3;
CaptureCaliFrameTaskParam capture_cali_frame_task_param = 4;
}
message ResNotifyTaskState {
TaskId task_id = 1;
TaskAttr task_attr = 2;
TaskState state = 3;
TaskParam param = 4;
}
message ReqStartTask {
// oneof param
TaskId task_id = 1;
ReqStartMakeFitsThumb req_make_fits_thumb_param = 2;
ReqStartRepostprocess req_repostprocess_param = 3;
}
message ReqStopTask {
TaskId task_id = 1;
}
message ResTaskCenter {
int32 code = 1;
TaskId task_id = 2;
}
message ClientParams {
int32 encode_type = 1;
}
message ReqEnterCamera {
ClientParams client_param = 3;
}
message ResEnterCamera {
int32 code = 1;
int32 shooting_mode_id = 2;
}
message ReqSwitchShootingMode {
int32 mode = 1;
}
message ResSwitchShootingMode {
int32 code = 1;
int32 shooting_mode_id = 2;
}
message ReqSwitchShootingTech {
int32 tech = 1;
}
message ResSwitchShootingTech {
int32 code = 1;
int32 shooting_tech_id = 2;
}
message ReqGetDeviceStateInfo {
}
message ExclusiveCameraState {
// oneof current_state
notify.CaptureRawState capture_raw_state = 1;
notify.PhotoState photo_state = 2;
notify.BurstState burst_state = 3;
notify.RecordState record_state = 4;
notify.TimeLapseState timelapse_state = 5;
notify.CaptureCaliFrameState capture_cali_frame_state = 6;
notify.PanoramaState panorama_state = 7;
notify.SentryState sentry_state = 8;
}
message TeleCameraStateInfo {
// oneof _cmos_temperature
ExclusiveCameraState exclusive_state = 1;
notify.StreamType stream_type = 2;
double h_fov = 3;
double v_fov = 4;
uint32 resolution_width = 5;
uint32 resolution_height = 6;
notify.CmosTemperature cmos_temperature = 7;
}
message WideCameraStateInfo {
// oneof _cmos_temperature
ExclusiveCameraState exclusive_state = 1;
notify.StreamType stream_type = 2;
double h_fov = 3;
double v_fov = 4;
uint32 resolution_width = 5;
uint32 resolution_height = 6;
notify.CmosTemperature cmos_temperature = 7;
}
message ExclusiveFocusMotorState {
// oneof current_state
notify.AstroAutoFocusState astro_auto_focus_state = 1;
notify.NormalAutoFocusState normal_auto_focus_state = 2;
notify.AstroAutoFocusFastState astro_auto_focus_fast_state = 3;
notify.AreaAutoFocusState area_auto_focus_state = 4;
}
message FocusMotorStateInfo {
// oneof _focus_position
ExclusiveFocusMotorState exclusive_state = 1;
notify.FocusPosition focus_position = 2;
}
message ExclusiveMotionMotorState {
// oneof current_state
notify.AstroCalibrationState astro_calibration_state = 1;
notify.AstroGotoState astro_goto_state = 2;
notify.AstroTrackingState astro_tracking_state = 3;
notify.NormalTrackState normal_track_state = 4;
notify.OneClickGotoState one_click_goto_state = 5;
notify.EqSolvingState eq_state = 6;
notify.SentryState sentry_state = 7;
notify.SkyTargetFinderState sky_target_finder_state = 8;
}
message MotionMotorStateInfo {
ExclusiveMotionMotorState exclusive_state = 1;
notify.SentryAutoHand sentry_auto_hand = 2;
}
message DeviceStateInfo {
notify.RgbState rgb_state = 1;
notify.PowerIndState power_ind_state = 2;
notify.ChargingState charging_state = 3;
notify.StorageInfo storage_info = 4;
notify.MTPState mtp_state = 5;
notify.CPUMode cpu_mode = 6;
notify.Temperature temperature = 7;
notify.BodyStatus body_status = 8;
notify.BatteryInfo battery_info = 9;
notify.CalibrationResult calibration_result = 10;
notify.PictureMatching picture_matching = 11;
notify.AutoShutdown auto_shutdown = 12;
notify.LensDefog lens_defog = 13;
notify.AutoCooling auto_cooling = 14;
}
message ConnectionStateInfo {
notify.HostSlaveMode host_slave_mode = 1;
}
message ShootingModeAndTech {
int32 shooting_mode = 1;
int32 parent_shooting_mode = 2;
repeated int32 shooting_techs = 3;
}
message ResGetDeviceStateInfo {
int32 shooting_mode = 1;
TeleCameraStateInfo tele_camera_state_info = 2;
WideCameraStateInfo wide_camera_state_info = 3;
FocusMotorStateInfo focus_motor_state_info = 4;
MotionMotorStateInfo motion_motor_state_info = 5;
DeviceStateInfo device_state_info = 6;
int32 code = 7;
ConnectionStateInfo connection_state_info = 8;
repeated ShootingModeAndTech shooting_mode_and_techs = 9;
}

View File

@ -0,0 +1,41 @@
// source: track.proto
syntax = "proto3";
message ReqStartTrack {
int32 x = 1;
int32 y = 2;
int32 w = 3;
int32 h = 4;
int32 cam_id = 5;
}
message ReqStopTrack {
}
message ReqPauseTrack {
}
message ReqContinueTrack {
}
message ReqStartSentryMode {
int32 type = 1;
}
message ReqStopSentryMode {
}
message ReqMOTTrackOne {
int32 id = 1;
}
message ReqUFOAutoHandMode {
int32 mode = 1;
}
message ReqStartTrackClick {
int32 x = 1;
int32 y = 2;
int32 cam_id = 3;
}

View File

@ -0,0 +1,140 @@
// source: voice_assistant.proto
syntax = "proto3";
import "base.proto";
import "notify.proto";
import "task_center.proto";
enum VoiceCommandType {
VOICE_CMD_UNKNOWN = 0;
VOICE_CMD_GET_STATUS = 1;
VOICE_CMD_TAKE_PHOTO = 2;
VOICE_CMD_START_RECORD = 3;
VOICE_CMD_STOP_RECORD = 4;
VOICE_CMD_START_TIMELAPSE = 5;
VOICE_CMD_STOP_TIMELAPSE = 6;
VOICE_CMD_START_BURST = 7;
VOICE_CMD_STOP_BURST = 8;
VOICE_CMD_START_ASTRO = 9;
VOICE_CMD_STOP_ASTRO = 10;
VOICE_CMD_START_SENTRY = 11;
VOICE_CMD_STOP_SENTRY = 12;
VOICE_CMD_MOVE = 13;
VOICE_CMD_GOTO_TARGET = 14;
VOICE_CMD_CALIBRATION = 15;
VOICE_CMD_AUTO_FOCUS = 16;
VOICE_CMD_STOP_FOCUS = 17;
VOICE_CMD_STOP_ALL = 18;
}
message ReqVoiceCommand {
// oneof params
VoiceCommandType command_type = 1;
int32 shooting_mode = 2;
VoicePhotoParams photo_params = 10;
VoiceRecordParams record_params = 11;
VoiceTimelapseParams timelapse_params = 12;
VoiceBurstParams burst_params = 13;
VoiceAstroParams astro_params = 14;
VoiceSentryParams sentry_params = 15;
VoiceMoveParams move_params = 16;
VoiceGotoParams goto_params = 17;
VoiceCalibrationParams calibration_params = 18;
VoiceFocusParams focus_params = 19;
}
message VoicePhotoParams {
int32 camera_type = 1;
}
message VoiceRecordParams {
int32 camera_type = 1;
int32 duration_seconds = 2;
}
message VoiceTimelapseParams {
int32 camera_type = 1;
int32 interval_seconds = 2;
int32 duration_seconds = 3;
}
message VoiceBurstParams {
int32 camera_type = 1;
int32 count = 2;
}
message VoiceAstroParams {
string target_name = 1;
double ra = 2;
double dec = 3;
int32 index = 4;
double lon = 5;
double lat = 6;
bool auto_goto = 7;
bool force_start = 8;
}
message VoiceSentryParams {
int32 type = 1;
}
message VoiceMoveParams {
double azimuth_angle = 1;
double altitude_angle = 2;
int32 speed = 3;
}
message VoiceGotoParams {
string target_name = 1;
double ra = 2;
double dec = 3;
int32 index = 4;
double lon = 5;
double lat = 6;
int32 shooting_mode = 7;
}
message VoiceCalibrationParams {
double lon = 1;
double lat = 2;
}
message VoiceFocusParams {
bool is_infinity = 1;
}
message ResVoiceCommand {
// oneof result
int32 code = 1;
string message = 2;
VoiceCommandType command_type = 3;
VoiceStatusResult status_result = 10;
VoiceOperationResult operation_result = 11;
}
message AstroShootingProgress {
string target_name = 1;
int32 captured_count = 2;
int32 total_count = 3;
int32 stacked_count = 4;
int32 progress_percentage = 5;
int64 elapsed_time = 6;
int64 remaining_time = 7;
}
message VoiceStatusResult {
ResGetDeviceStateInfo device_state_info = 1;
AstroShootingProgress astro_progress = 2;
}
message VoiceOperationResult {
bool success = 1;
string detail_message = 2;
}
message ResNotifyVoiceAssistant {
VoiceCommandType command_type = 1;
notify.OperationState state = 2;
string message = 4;
}