1mod request;
7mod response;
8
9pub use request::*;
10pub use response::*;
11
12pub type TaskId = String;
13pub type PointId = String;
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
26#[repr(u16)]
27pub enum ApiRequest {
28 State(StateApi),
30 Control(ControlApi),
32 Nav(NavApi),
34 Config(ConfigApi),
36 Kernel(KernelApi),
38 Peripheral(PeripheralApi),
40 Push(PushApi),
42}
43
44impl ApiRequest {
45 pub fn api_no(&self) -> u16 {
47 match *self {
48 ApiRequest::State(api) => api as u16,
49 ApiRequest::Control(api) => api as u16,
50 ApiRequest::Nav(api) => api as u16,
51 ApiRequest::Config(api) => api as u16,
52 ApiRequest::Kernel(api) => api as u16,
53 ApiRequest::Peripheral(api) => api as u16,
54 ApiRequest::Push(api) => api as u16,
55 }
56 }
57}
58
59macro_rules! impl_api_request {
83 ($req_type:ident, $api_variant:expr, res: $res_type:ty $(, $docs:literal)?) => {
85 $(#[doc = $docs])?
86 #[derive(Debug, Clone, Default)]
87 pub struct $req_type;
88
89 impl $req_type {
90 pub fn new() -> Self {
91 Self
92 }
93 }
94
95 impl $crate::api::ToRequestBody for $req_type {
96 fn to_request_body(&self) -> Result<String, serde_json::Error> {
97 Ok(String::new())
98 }
99
100 fn to_api_request(&self) -> ApiRequest {
101 $api_variant
102 }
103 }
104
105 impl $crate::api::FromResponseBody for $req_type {
106 type Response = $res_type;
107 }
108 };
109 ($req_type:ident, $api_variant:expr, req: $req_body_type:ty, res: $res_type:ty $(, $docs:literal)?) => {
111 $(#[doc = $docs])?
112 #[derive(Debug, Clone)]
113 pub struct $req_type {
114 pub req_body: $req_body_type,
115 }
116
117 impl $req_type {
118 pub fn new(req_body: $req_body_type) -> Self {
119 Self { req_body }
120 }
121 }
122
123 impl $req_body_type {
124 pub fn into_request(self) -> $req_type {
125 $req_type { req_body: self }
126 }
127 }
128
129 impl $crate::api::ToRequestBody for $req_type {
130 fn to_request_body(&self) -> Result<String, serde_json::Error> {
131 serde_json::to_string(&self.req_body)
132 }
133
134 fn to_api_request(&self) -> ApiRequest {
135 $api_variant
136 }
137 }
138
139 impl $crate::api::FromResponseBody for $req_type {
140 type Response = $res_type;
141 }
142 };
143}
144
145impl_api_request!(CommonInfoRequest, ApiRequest::State(StateApi::Info), res: CommonInfo);
147impl_api_request!(OperationInfoRequest, ApiRequest::State(StateApi::Run), res: OperationInfo);
148impl_api_request!(RobotPoseRequest, ApiRequest::State(StateApi::Loc), res: RobotPose);
149impl_api_request!(RobotSpeedRequest, ApiRequest::State(StateApi::Speed), res: StatusMessage);
150impl_api_request!(BlockStatusRequest, ApiRequest::State(StateApi::Block), res: BlockStatus);
151impl_api_request!(BatteryStatusRequest, ApiRequest::State(StateApi::Battery), res: BatteryStatus);
152impl_api_request!(RobotLidarDataRequest, ApiRequest::State(StateApi::Laser), res: StatusMessage);
153impl_api_request!(RobotCurrentAreaRequest, ApiRequest::State(StateApi::Area), res: StatusMessage);
154impl_api_request!(RobotEmergencyStatusRequest, ApiRequest::State(StateApi::Emergency), res: StatusMessage);
155impl_api_request!(RobotIODataRequest, ApiRequest::State(StateApi::Io), res: StatusMessage);
156impl_api_request!(NavStatusRequest, ApiRequest::State(StateApi::Nav), req: GetNavStatus, res: NavStatus);
157impl_api_request!(TaskStatusRequest, ApiRequest::State(StateApi::TaskPackage), req: GetTaskStatus, res: TaskPackage);
158impl_api_request!(RobotRelocationStatusRequest, ApiRequest::State(StateApi::Reloc), res: StatusMessage);
159impl_api_request!(RobotLoadMapStatusRequest, ApiRequest::State(StateApi::LoadMap), res: StatusMessage);
160impl_api_request!(RobotSlamStatusRequest, ApiRequest::State(StateApi::Slam), res: StatusMessage);
161impl_api_request!(JackStatusRequest, ApiRequest::State(StateApi::Jack), res: StatusMessage);
162impl_api_request!(RobotAlarmStatusRequest, ApiRequest::State(StateApi::Alarm), res: StatusMessage);
163impl_api_request!(RobotAllStatus1Request, ApiRequest::State(StateApi::All1), res: StatusMessage);
164impl_api_request!(RobotAllStatus2Request, ApiRequest::State(StateApi::All2), res: StatusMessage);
165impl_api_request!(RobotAllStatus3Request, ApiRequest::State(StateApi::All3), res: StatusMessage);
166impl_api_request!(RobotMapInfoRequest, ApiRequest::State(StateApi::Map), res: StatusMessage);
167impl_api_request!(RobotParamsRequest, ApiRequest::State(StateApi::Params), res: StatusMessage);
168
169impl_api_request!(StopExerciseRequest, ApiRequest::Control(ControlApi::Stop), res: StatusMessage);
171impl_api_request!(RelocateRequest, ApiRequest::Control(ControlApi::Reloc), res: StatusMessage);
172impl_api_request!(ConfirmLocationRequest, ApiRequest::Control(ControlApi::ComfirmLoc), res: StatusMessage);
173impl_api_request!(OpenLoopMotionRequest, ApiRequest::Control(ControlApi::Motion), res: StatusMessage);
174impl_api_request!(SwitchMapRequest, ApiRequest::Control(ControlApi::LoadMap), res: StatusMessage);
175
176impl_api_request!(PauseTaskRequest, ApiRequest::Nav(NavApi::Pause), res: StatusMessage);
178impl_api_request!(ResumeTaskRequest, ApiRequest::Nav(NavApi::Resume), res: StatusMessage);
179impl_api_request!(CancelTaskRequest, ApiRequest::Nav(NavApi::Cancel), res: StatusMessage);
180impl_api_request!(MoveToTargetRequest, ApiRequest::Nav(NavApi::MoveToTarget), req: MoveToTarget, res: StatusMessage);
181impl_api_request!(TranslateRequest, ApiRequest::Nav(NavApi::Translate), res: StatusMessage);
182impl_api_request!(TurnRequest, ApiRequest::Nav(NavApi::Turn), res: StatusMessage);
183impl_api_request!(MoveDesignedPathRequest, ApiRequest::Nav(NavApi::MoveToTargetList), req: MoveDesignedPath, res: StatusMessage);
184
185impl_api_request!(LoadJackRequest, ApiRequest::Peripheral(PeripheralApi::JackLoad), res: StatusMessage);
187impl_api_request!(UnloadJackRequest, ApiRequest::Peripheral(PeripheralApi::JackUnload), res: StatusMessage);
188impl_api_request!(StopJackRequest, ApiRequest::Peripheral(PeripheralApi::JackStop), res: StatusMessage);
189impl_api_request!(SetJackHeightRequest, ApiRequest::Peripheral(PeripheralApi::JackSetHeight), req: SetJackHeight, res: StatusMessage);
190
191#[derive(Debug, Clone, Copy, PartialEq, Eq)]
192#[repr(u16)]
193pub enum StateApi {
194 Info = 1000,
196 Run = 1002,
198 Loc = 1004,
200 Speed = 1005,
202 Block = 1006,
204 Battery = 1007,
206 Laser = 1009,
208 Area = 1011,
210 Emergency = 1012,
212 Io = 1013,
214 Imu = 1014,
216 Rfid = 1015,
218 Ultrasonic = 1016,
220 Pgv = 1017,
222 Encoder = 1018,
224 Nav = 1020,
226 Reloc = 1021,
228 LoadMap = 1022,
230 Slam = 1025,
232 Jack = 1027,
234 Fork = 1028,
236 Roller = 1029,
238 Motor = 1040,
240 Alarm = 1050,
242 CurrentLock = 1060,
244 Modbus = 1071,
246 All1 = 1100,
248 All2 = 1101,
250 All3 = 1102,
252 TaskPackage = 1110,
254 Map = 1300,
256 Station = 1301,
258 MapMd5 = 1302,
260 GetPath = 1303,
262 Params = 1400,
264 Model = 1500,
266 ScriptInfo = 1506,
268 ScriptDetailsList = 1507,
270 ScriptArgs = 1508,
272 CalibSupportList = 1509,
274 CalibStatus = 1510,
276 CalibData = 1511,
278 Tag3D = 1665,
280 ArmStatus = 1669,
282 ArmCalculate = 1670,
284 ArmTask = 1671,
286 ArmMove = 1673,
288 ArmOperation = 1674,
290 CloudProjection = 1675,
292 RecoFiles = 1676,
294 CanFrame = 1750,
296 GnssCheck = 1760,
298 GnssList = 1761,
300 ListFile = 1798,
302 UploadFile = 1799,
304 DownloadFile = 1800,
306 Bins = 1803,
308 Sound = 1850,
310 JoystickKeymap = 1852,
312 TransparentData = 1900,
314 StartBatteryScript = 1901,
316 StopBatteryScript = 1902,
318 StartDmxScript = 1903,
320 StopDmxScript = 1904,
322}
323
324#[derive(Debug, Clone, Copy, PartialEq, Eq)]
325#[repr(u16)]
326pub enum ControlApi {
327 Stop = 2000,
329 Reloc = 2002,
331 ComfirmLoc = 2003,
333 CancelReloc = 2004,
335 Motion = 2010,
337 LoadMap = 2022,
339 ClearMotorEncoder = 2024,
341 UploadAndLoadMap = 2025,
343 ClearWeightdevvalue = 2026,
345}
346
347#[derive(Debug, Clone, Copy, PartialEq, Eq)]
348#[repr(u16)]
349pub enum NavApi {
350 Pause = 3001,
352 Resume = 3002,
354 Cancel = 3003,
356 MoveToTarget = 3051,
358 TargetPath = 3053,
360 Translate = 3055,
362 Turn = 3056,
364 Spin = 3057,
366 Circular = 3058,
368 Path = 3059,
370 MoveToTargetList = 3066,
372 ClearTargetList = 3067,
374 SafeClearMovements = 3068,
376 TaskListStatus = 3101,
378 TaskListName = 3106,
380 TaskListList = 3115,
382}
383
384#[derive(Debug, Clone, Copy, PartialEq, Eq)]
385#[repr(u16)]
386pub enum ConfigApi {
387 Lock = 4005,
389 Unlock = 4006,
391 ClearAllErrors = 4009,
393 UploadMap = 4010,
395 DownloadMap = 4011,
397 RemoveMap = 4012,
399 UploadScript = 4021,
401 DownloadScript = 4022,
403 RemoveScript = 4023,
405 Push = 4091,
407 SetParams = 4100,
409 SaveParams = 4101,
411 ReloadParams = 4102,
413 Ultrasonic = 4130,
415 Di = 4140,
417 MotorCalib = 4150,
419 MotorClearFault = 4151,
421 Model = 4200,
423 CalibPushData = 4201,
425 CalibConfirm = 4202,
427 CalibClear = 4203,
429 CalibClearAll = 4209,
431 AddObstacle = 4350,
433 AddGObstacle = 4351,
435 RemoveObstacle = 4352,
437 Tag3DMapping = 4353,
439 ClearGoodsShape = 4356,
441 SetShelfShape = 4357,
443 SendCanFrame = 4400,
445 ClearOdo = 4450,
447 ResetGnss = 4460,
449 SetGnssBaudrate = 4461,
451 SetGnssRover = 4462,
453 JoystickBindKeymap = 4470,
455 SetError = 4800,
457 ClearError = 4801,
459 SetWarning = 4802,
461 ClearWarning = 4803,
463}
464
465#[derive(Debug, Clone, Copy, PartialEq, Eq)]
466#[repr(u16)]
467pub enum KernelApi {
468 Shutdown = 5000,
470 Reboot = 5003,
472 ResetFirmware = 5005,
474}
475
476#[derive(Debug, Clone, Copy, PartialEq, Eq)]
477#[repr(u16)]
478pub enum PeripheralApi {
479 PlayAudio = 6000,
481 SetDo = 6001,
483 SetDos = 6002,
485 SetRelay = 6003,
487 SoftEmc = 6004,
489 SetChargingRelay = 6005,
491 PauseAudio = 6010,
493 ResumeAudio = 6011,
495 StopAudio = 6012,
497 SetVdi = 6020,
499 UploadAudio = 6030,
501 DownloadAudio = 6031,
503 AudioList = 6033,
505 SetForkHeight = 6040,
507 StopFork = 6041,
509 WritePeripheralData = 6049,
511 RollerFrontRoll = 6051,
513 RollerBackRoll = 6052,
515 RollerLeftRoll = 6053,
517 RollerRightRoll = 6054,
519 RollerFrontLoad = 6055,
521 RollerFrontUnload = 6056,
523 RollerFrontPreLoad = 6057,
525 RollerBackLoad = 6058,
527 RollerBackUnload = 6059,
529 RollerBackPreLoad = 6060,
531 RollerLeftLoad = 6061,
533 RollerLeftUnload = 6062,
535 RollerRightLoad = 6063,
537 RollerRightUnload = 6064,
539 RollerLeftPreLoad = 6065,
541 RollerRightPreLoad = 6066,
543 RollerStop = 6067,
545 RollerLeftRightInverse = 6068,
547 RollerFrontBackInverse = 6069,
549 JackLoad = 6070,
551 JackUnload = 6071,
553 JackStop = 6072,
555 JackSetHeight = 6073,
557 ResetCargo = 6080,
559 HookLoad = 6082,
561 HookUnload = 6083,
563 SetModbus = 6086,
565 Slam = 6100,
567 EndSlam = 6101,
569 Calibrate = 6110,
571 EndCalibrate = 6111,
573 CalibResult = 6112,
575 CalibAllinone2 = 6115,
577 SetMotorEnable = 6201,
579 ClearGoods = 6801,
581 ClearContainer = 6802,
583 ClearAllContainersGoods = 6803,
585 SetContainerGoods = 6804,
587 UpdateTransparentData = 6900,
589 BinDetect = 6901,
591 Replay = 6910,
593}
594
595#[derive(Debug, Clone, Copy, PartialEq, Eq)]
596#[repr(u16)]
597pub enum PushApi {
598 Config = 9300,
600 Push = 19301,
602}