1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type FirmwareName = String;
12
13#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
14#[repr(u8)]
15pub enum McuWakeLockValue {
16 Release = 0,
17 Acquire = 1,
18}
19
20impl McuWakeLockValue {
21 #[inline]
22 pub fn from_primitive(prim: u8) -> Option<Self> {
23 match prim {
24 0 => Some(Self::Release),
25 1 => Some(Self::Acquire),
26 _ => None,
27 }
28 }
29
30 #[inline]
31 pub const fn into_primitive(self) -> u8 {
32 self as u8
33 }
34}
35
36#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
37#[repr(u32)]
38pub enum PinState {
39 Low = 0,
40 High = 1,
41}
42
43impl PinState {
44 #[inline]
45 pub fn from_primitive(prim: u32) -> Option<Self> {
46 match prim {
47 0 => Some(Self::Low),
48 1 => Some(Self::High),
49 _ => None,
50 }
51 }
52
53 #[inline]
54 pub const fn into_primitive(self) -> u32 {
55 self as u32
56 }
57}
58
59#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
60pub struct DeviceGetFirmwareNameResponse {
61 pub firmware_name: String,
62}
63
64impl fidl::Persistable for DeviceGetFirmwareNameResponse {}
65
66#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
67#[repr(C)]
68pub struct DeviceGetFirmwareVersionResponse {
69 pub version_info: McuVersionInfo,
70}
71
72impl fidl::Persistable for DeviceGetFirmwareVersionResponse {}
73
74#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
75pub struct DeviceSetWakeLockRequest {
76 pub value: McuWakeLockValue,
77}
78
79impl fidl::Persistable for DeviceSetWakeLockRequest {}
80
81#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
82#[repr(C)]
83pub struct DeviceSetWakeUpEventDurationRequest {
84 pub duration: i64,
85}
86
87impl fidl::Persistable for DeviceSetWakeUpEventDurationRequest {}
88
89#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
90#[repr(C)]
91pub struct DeviceGetWakeUpEventDurationResponse {
92 pub duration: i64,
93}
94
95impl fidl::Persistable for DeviceGetWakeUpEventDurationResponse {}
96
97#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
98pub struct HardwareResetPinStates {
99 pub isp_pin_0: PinState,
100 pub isp_pin_1: PinState,
101 pub isp_pin_2: PinState,
102}
103
104impl fidl::Persistable for HardwareResetPinStates {}
105
106#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
107#[repr(C)]
108pub struct McuVersionInfo {
109 pub hardware_type: u16,
110 pub hardware_version: u16,
111 pub bootloader_version: u16,
112 pub os_version: u16,
113 pub variant_version: u32,
114}
115
116impl fidl::Persistable for McuVersionInfo {}
117
118#[derive(Clone, Debug, Default, PartialEq)]
119pub struct McuTimeSyncInfo {
120 pub ap_boot_time: Option<i64>,
121 pub mcu_boot_time: Option<i64>,
122 #[doc(hidden)]
123 pub __source_breaking: fidl::marker::SourceBreaking,
124}
125
126impl fidl::Persistable for McuTimeSyncInfo {}
127
128pub mod device_ordinals {
129 pub const DOWNLOAD_FIRMWARE: u64 = 0x7bba8137e24661e5;
130 pub const GET_FIRMWARE_NAME: u64 = 0x1649434b5e5bcb8d;
131 pub const GET_FIRMWARE_VERSION: u64 = 0x4f0599abcc95736b;
132 pub const GET_TIME_SYNC: u64 = 0x4406991222e3975d;
133 pub const SET_WAKE_LOCK: u64 = 0x9f83f614affa1dc;
134 pub const GET_WAKE_UP_EVENT_DURATION: u64 = 0x45c79749f65e7176;
135 pub const SET_WAKE_UP_EVENT_DURATION: u64 = 0x1fa1771ffa5f570;
136 pub const HARDWARE_RESET: u64 = 0x78e3d2ded2f929f;
137}
138
139mod internal {
140 use super::*;
141 unsafe impl fidl::encoding::TypeMarker for McuWakeLockValue {
142 type Owned = Self;
143
144 #[inline(always)]
145 fn inline_align(_context: fidl::encoding::Context) -> usize {
146 std::mem::align_of::<u8>()
147 }
148
149 #[inline(always)]
150 fn inline_size(_context: fidl::encoding::Context) -> usize {
151 std::mem::size_of::<u8>()
152 }
153
154 #[inline(always)]
155 fn encode_is_copy() -> bool {
156 true
157 }
158
159 #[inline(always)]
160 fn decode_is_copy() -> bool {
161 false
162 }
163 }
164
165 impl fidl::encoding::ValueTypeMarker for McuWakeLockValue {
166 type Borrowed<'a> = Self;
167 #[inline(always)]
168 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
169 *value
170 }
171 }
172
173 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
174 for McuWakeLockValue
175 {
176 #[inline]
177 unsafe fn encode(
178 self,
179 encoder: &mut fidl::encoding::Encoder<'_, D>,
180 offset: usize,
181 _depth: fidl::encoding::Depth,
182 ) -> fidl::Result<()> {
183 encoder.debug_check_bounds::<Self>(offset);
184 encoder.write_num(self.into_primitive(), offset);
185 Ok(())
186 }
187 }
188
189 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuWakeLockValue {
190 #[inline(always)]
191 fn new_empty() -> Self {
192 Self::Release
193 }
194
195 #[inline]
196 unsafe fn decode(
197 &mut self,
198 decoder: &mut fidl::encoding::Decoder<'_, D>,
199 offset: usize,
200 _depth: fidl::encoding::Depth,
201 ) -> fidl::Result<()> {
202 decoder.debug_check_bounds::<Self>(offset);
203 let prim = decoder.read_num::<u8>(offset);
204
205 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
206 Ok(())
207 }
208 }
209 unsafe impl fidl::encoding::TypeMarker for PinState {
210 type Owned = Self;
211
212 #[inline(always)]
213 fn inline_align(_context: fidl::encoding::Context) -> usize {
214 std::mem::align_of::<u32>()
215 }
216
217 #[inline(always)]
218 fn inline_size(_context: fidl::encoding::Context) -> usize {
219 std::mem::size_of::<u32>()
220 }
221
222 #[inline(always)]
223 fn encode_is_copy() -> bool {
224 true
225 }
226
227 #[inline(always)]
228 fn decode_is_copy() -> bool {
229 false
230 }
231 }
232
233 impl fidl::encoding::ValueTypeMarker for PinState {
234 type Borrowed<'a> = Self;
235 #[inline(always)]
236 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
237 *value
238 }
239 }
240
241 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PinState {
242 #[inline]
243 unsafe fn encode(
244 self,
245 encoder: &mut fidl::encoding::Encoder<'_, D>,
246 offset: usize,
247 _depth: fidl::encoding::Depth,
248 ) -> fidl::Result<()> {
249 encoder.debug_check_bounds::<Self>(offset);
250 encoder.write_num(self.into_primitive(), offset);
251 Ok(())
252 }
253 }
254
255 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PinState {
256 #[inline(always)]
257 fn new_empty() -> Self {
258 Self::Low
259 }
260
261 #[inline]
262 unsafe fn decode(
263 &mut self,
264 decoder: &mut fidl::encoding::Decoder<'_, D>,
265 offset: usize,
266 _depth: fidl::encoding::Depth,
267 ) -> fidl::Result<()> {
268 decoder.debug_check_bounds::<Self>(offset);
269 let prim = decoder.read_num::<u32>(offset);
270
271 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
272 Ok(())
273 }
274 }
275
276 impl fidl::encoding::ValueTypeMarker for DeviceGetFirmwareNameResponse {
277 type Borrowed<'a> = &'a Self;
278 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
279 value
280 }
281 }
282
283 unsafe impl fidl::encoding::TypeMarker for DeviceGetFirmwareNameResponse {
284 type Owned = Self;
285
286 #[inline(always)]
287 fn inline_align(_context: fidl::encoding::Context) -> usize {
288 8
289 }
290
291 #[inline(always)]
292 fn inline_size(_context: fidl::encoding::Context) -> usize {
293 16
294 }
295 }
296
297 unsafe impl<D: fidl::encoding::ResourceDialect>
298 fidl::encoding::Encode<DeviceGetFirmwareNameResponse, D>
299 for &DeviceGetFirmwareNameResponse
300 {
301 #[inline]
302 unsafe fn encode(
303 self,
304 encoder: &mut fidl::encoding::Encoder<'_, D>,
305 offset: usize,
306 _depth: fidl::encoding::Depth,
307 ) -> fidl::Result<()> {
308 encoder.debug_check_bounds::<DeviceGetFirmwareNameResponse>(offset);
309 fidl::encoding::Encode::<DeviceGetFirmwareNameResponse, D>::encode(
311 (<fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow(
312 &self.firmware_name,
313 ),),
314 encoder,
315 offset,
316 _depth,
317 )
318 }
319 }
320 unsafe impl<
321 D: fidl::encoding::ResourceDialect,
322 T0: fidl::encoding::Encode<fidl::encoding::BoundedString<64>, D>,
323 > fidl::encoding::Encode<DeviceGetFirmwareNameResponse, D> for (T0,)
324 {
325 #[inline]
326 unsafe fn encode(
327 self,
328 encoder: &mut fidl::encoding::Encoder<'_, D>,
329 offset: usize,
330 depth: fidl::encoding::Depth,
331 ) -> fidl::Result<()> {
332 encoder.debug_check_bounds::<DeviceGetFirmwareNameResponse>(offset);
333 self.0.encode(encoder, offset + 0, depth)?;
337 Ok(())
338 }
339 }
340
341 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
342 for DeviceGetFirmwareNameResponse
343 {
344 #[inline(always)]
345 fn new_empty() -> Self {
346 Self { firmware_name: fidl::new_empty!(fidl::encoding::BoundedString<64>, D) }
347 }
348
349 #[inline]
350 unsafe fn decode(
351 &mut self,
352 decoder: &mut fidl::encoding::Decoder<'_, D>,
353 offset: usize,
354 _depth: fidl::encoding::Depth,
355 ) -> fidl::Result<()> {
356 decoder.debug_check_bounds::<Self>(offset);
357 fidl::decode!(
359 fidl::encoding::BoundedString<64>,
360 D,
361 &mut self.firmware_name,
362 decoder,
363 offset + 0,
364 _depth
365 )?;
366 Ok(())
367 }
368 }
369
370 impl fidl::encoding::ValueTypeMarker for DeviceGetFirmwareVersionResponse {
371 type Borrowed<'a> = &'a Self;
372 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
373 value
374 }
375 }
376
377 unsafe impl fidl::encoding::TypeMarker for DeviceGetFirmwareVersionResponse {
378 type Owned = Self;
379
380 #[inline(always)]
381 fn inline_align(_context: fidl::encoding::Context) -> usize {
382 4
383 }
384
385 #[inline(always)]
386 fn inline_size(_context: fidl::encoding::Context) -> usize {
387 12
388 }
389 #[inline(always)]
390 fn encode_is_copy() -> bool {
391 true
392 }
393
394 #[inline(always)]
395 fn decode_is_copy() -> bool {
396 true
397 }
398 }
399
400 unsafe impl<D: fidl::encoding::ResourceDialect>
401 fidl::encoding::Encode<DeviceGetFirmwareVersionResponse, D>
402 for &DeviceGetFirmwareVersionResponse
403 {
404 #[inline]
405 unsafe fn encode(
406 self,
407 encoder: &mut fidl::encoding::Encoder<'_, D>,
408 offset: usize,
409 _depth: fidl::encoding::Depth,
410 ) -> fidl::Result<()> {
411 encoder.debug_check_bounds::<DeviceGetFirmwareVersionResponse>(offset);
412 unsafe {
413 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
415 (buf_ptr as *mut DeviceGetFirmwareVersionResponse)
416 .write_unaligned((self as *const DeviceGetFirmwareVersionResponse).read());
417 }
420 Ok(())
421 }
422 }
423 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<McuVersionInfo, D>>
424 fidl::encoding::Encode<DeviceGetFirmwareVersionResponse, D> for (T0,)
425 {
426 #[inline]
427 unsafe fn encode(
428 self,
429 encoder: &mut fidl::encoding::Encoder<'_, D>,
430 offset: usize,
431 depth: fidl::encoding::Depth,
432 ) -> fidl::Result<()> {
433 encoder.debug_check_bounds::<DeviceGetFirmwareVersionResponse>(offset);
434 self.0.encode(encoder, offset + 0, depth)?;
438 Ok(())
439 }
440 }
441
442 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
443 for DeviceGetFirmwareVersionResponse
444 {
445 #[inline(always)]
446 fn new_empty() -> Self {
447 Self { version_info: fidl::new_empty!(McuVersionInfo, D) }
448 }
449
450 #[inline]
451 unsafe fn decode(
452 &mut self,
453 decoder: &mut fidl::encoding::Decoder<'_, D>,
454 offset: usize,
455 _depth: fidl::encoding::Depth,
456 ) -> fidl::Result<()> {
457 decoder.debug_check_bounds::<Self>(offset);
458 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
459 unsafe {
462 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
463 }
464 Ok(())
465 }
466 }
467
468 impl fidl::encoding::ValueTypeMarker for DeviceSetWakeLockRequest {
469 type Borrowed<'a> = &'a Self;
470 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
471 value
472 }
473 }
474
475 unsafe impl fidl::encoding::TypeMarker for DeviceSetWakeLockRequest {
476 type Owned = Self;
477
478 #[inline(always)]
479 fn inline_align(_context: fidl::encoding::Context) -> usize {
480 1
481 }
482
483 #[inline(always)]
484 fn inline_size(_context: fidl::encoding::Context) -> usize {
485 1
486 }
487 }
488
489 unsafe impl<D: fidl::encoding::ResourceDialect>
490 fidl::encoding::Encode<DeviceSetWakeLockRequest, D> for &DeviceSetWakeLockRequest
491 {
492 #[inline]
493 unsafe fn encode(
494 self,
495 encoder: &mut fidl::encoding::Encoder<'_, D>,
496 offset: usize,
497 _depth: fidl::encoding::Depth,
498 ) -> fidl::Result<()> {
499 encoder.debug_check_bounds::<DeviceSetWakeLockRequest>(offset);
500 fidl::encoding::Encode::<DeviceSetWakeLockRequest, D>::encode(
502 (<McuWakeLockValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),),
503 encoder,
504 offset,
505 _depth,
506 )
507 }
508 }
509 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<McuWakeLockValue, D>>
510 fidl::encoding::Encode<DeviceSetWakeLockRequest, D> for (T0,)
511 {
512 #[inline]
513 unsafe fn encode(
514 self,
515 encoder: &mut fidl::encoding::Encoder<'_, D>,
516 offset: usize,
517 depth: fidl::encoding::Depth,
518 ) -> fidl::Result<()> {
519 encoder.debug_check_bounds::<DeviceSetWakeLockRequest>(offset);
520 self.0.encode(encoder, offset + 0, depth)?;
524 Ok(())
525 }
526 }
527
528 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
529 for DeviceSetWakeLockRequest
530 {
531 #[inline(always)]
532 fn new_empty() -> Self {
533 Self { value: fidl::new_empty!(McuWakeLockValue, D) }
534 }
535
536 #[inline]
537 unsafe fn decode(
538 &mut self,
539 decoder: &mut fidl::encoding::Decoder<'_, D>,
540 offset: usize,
541 _depth: fidl::encoding::Depth,
542 ) -> fidl::Result<()> {
543 decoder.debug_check_bounds::<Self>(offset);
544 fidl::decode!(McuWakeLockValue, D, &mut self.value, decoder, offset + 0, _depth)?;
546 Ok(())
547 }
548 }
549
550 impl fidl::encoding::ValueTypeMarker for DeviceSetWakeUpEventDurationRequest {
551 type Borrowed<'a> = &'a Self;
552 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
553 value
554 }
555 }
556
557 unsafe impl fidl::encoding::TypeMarker for DeviceSetWakeUpEventDurationRequest {
558 type Owned = Self;
559
560 #[inline(always)]
561 fn inline_align(_context: fidl::encoding::Context) -> usize {
562 8
563 }
564
565 #[inline(always)]
566 fn inline_size(_context: fidl::encoding::Context) -> usize {
567 8
568 }
569 #[inline(always)]
570 fn encode_is_copy() -> bool {
571 true
572 }
573
574 #[inline(always)]
575 fn decode_is_copy() -> bool {
576 true
577 }
578 }
579
580 unsafe impl<D: fidl::encoding::ResourceDialect>
581 fidl::encoding::Encode<DeviceSetWakeUpEventDurationRequest, D>
582 for &DeviceSetWakeUpEventDurationRequest
583 {
584 #[inline]
585 unsafe fn encode(
586 self,
587 encoder: &mut fidl::encoding::Encoder<'_, D>,
588 offset: usize,
589 _depth: fidl::encoding::Depth,
590 ) -> fidl::Result<()> {
591 encoder.debug_check_bounds::<DeviceSetWakeUpEventDurationRequest>(offset);
592 unsafe {
593 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
595 (buf_ptr as *mut DeviceSetWakeUpEventDurationRequest)
596 .write_unaligned((self as *const DeviceSetWakeUpEventDurationRequest).read());
597 }
600 Ok(())
601 }
602 }
603 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
604 fidl::encoding::Encode<DeviceSetWakeUpEventDurationRequest, D> for (T0,)
605 {
606 #[inline]
607 unsafe fn encode(
608 self,
609 encoder: &mut fidl::encoding::Encoder<'_, D>,
610 offset: usize,
611 depth: fidl::encoding::Depth,
612 ) -> fidl::Result<()> {
613 encoder.debug_check_bounds::<DeviceSetWakeUpEventDurationRequest>(offset);
614 self.0.encode(encoder, offset + 0, depth)?;
618 Ok(())
619 }
620 }
621
622 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
623 for DeviceSetWakeUpEventDurationRequest
624 {
625 #[inline(always)]
626 fn new_empty() -> Self {
627 Self { duration: fidl::new_empty!(i64, D) }
628 }
629
630 #[inline]
631 unsafe fn decode(
632 &mut self,
633 decoder: &mut fidl::encoding::Decoder<'_, D>,
634 offset: usize,
635 _depth: fidl::encoding::Depth,
636 ) -> fidl::Result<()> {
637 decoder.debug_check_bounds::<Self>(offset);
638 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
639 unsafe {
642 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
643 }
644 Ok(())
645 }
646 }
647
648 impl fidl::encoding::ValueTypeMarker for DeviceGetWakeUpEventDurationResponse {
649 type Borrowed<'a> = &'a Self;
650 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
651 value
652 }
653 }
654
655 unsafe impl fidl::encoding::TypeMarker for DeviceGetWakeUpEventDurationResponse {
656 type Owned = Self;
657
658 #[inline(always)]
659 fn inline_align(_context: fidl::encoding::Context) -> usize {
660 8
661 }
662
663 #[inline(always)]
664 fn inline_size(_context: fidl::encoding::Context) -> usize {
665 8
666 }
667 #[inline(always)]
668 fn encode_is_copy() -> bool {
669 true
670 }
671
672 #[inline(always)]
673 fn decode_is_copy() -> bool {
674 true
675 }
676 }
677
678 unsafe impl<D: fidl::encoding::ResourceDialect>
679 fidl::encoding::Encode<DeviceGetWakeUpEventDurationResponse, D>
680 for &DeviceGetWakeUpEventDurationResponse
681 {
682 #[inline]
683 unsafe fn encode(
684 self,
685 encoder: &mut fidl::encoding::Encoder<'_, D>,
686 offset: usize,
687 _depth: fidl::encoding::Depth,
688 ) -> fidl::Result<()> {
689 encoder.debug_check_bounds::<DeviceGetWakeUpEventDurationResponse>(offset);
690 unsafe {
691 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
693 (buf_ptr as *mut DeviceGetWakeUpEventDurationResponse)
694 .write_unaligned((self as *const DeviceGetWakeUpEventDurationResponse).read());
695 }
698 Ok(())
699 }
700 }
701 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
702 fidl::encoding::Encode<DeviceGetWakeUpEventDurationResponse, D> for (T0,)
703 {
704 #[inline]
705 unsafe fn encode(
706 self,
707 encoder: &mut fidl::encoding::Encoder<'_, D>,
708 offset: usize,
709 depth: fidl::encoding::Depth,
710 ) -> fidl::Result<()> {
711 encoder.debug_check_bounds::<DeviceGetWakeUpEventDurationResponse>(offset);
712 self.0.encode(encoder, offset + 0, depth)?;
716 Ok(())
717 }
718 }
719
720 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
721 for DeviceGetWakeUpEventDurationResponse
722 {
723 #[inline(always)]
724 fn new_empty() -> Self {
725 Self { duration: fidl::new_empty!(i64, D) }
726 }
727
728 #[inline]
729 unsafe fn decode(
730 &mut self,
731 decoder: &mut fidl::encoding::Decoder<'_, D>,
732 offset: usize,
733 _depth: fidl::encoding::Depth,
734 ) -> fidl::Result<()> {
735 decoder.debug_check_bounds::<Self>(offset);
736 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
737 unsafe {
740 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
741 }
742 Ok(())
743 }
744 }
745
746 impl fidl::encoding::ValueTypeMarker for HardwareResetPinStates {
747 type Borrowed<'a> = &'a Self;
748 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
749 value
750 }
751 }
752
753 unsafe impl fidl::encoding::TypeMarker for HardwareResetPinStates {
754 type Owned = Self;
755
756 #[inline(always)]
757 fn inline_align(_context: fidl::encoding::Context) -> usize {
758 4
759 }
760
761 #[inline(always)]
762 fn inline_size(_context: fidl::encoding::Context) -> usize {
763 12
764 }
765 }
766
767 unsafe impl<D: fidl::encoding::ResourceDialect>
768 fidl::encoding::Encode<HardwareResetPinStates, D> for &HardwareResetPinStates
769 {
770 #[inline]
771 unsafe fn encode(
772 self,
773 encoder: &mut fidl::encoding::Encoder<'_, D>,
774 offset: usize,
775 _depth: fidl::encoding::Depth,
776 ) -> fidl::Result<()> {
777 encoder.debug_check_bounds::<HardwareResetPinStates>(offset);
778 fidl::encoding::Encode::<HardwareResetPinStates, D>::encode(
780 (
781 <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_0),
782 <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_1),
783 <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_2),
784 ),
785 encoder,
786 offset,
787 _depth,
788 )
789 }
790 }
791 unsafe impl<
792 D: fidl::encoding::ResourceDialect,
793 T0: fidl::encoding::Encode<PinState, D>,
794 T1: fidl::encoding::Encode<PinState, D>,
795 T2: fidl::encoding::Encode<PinState, D>,
796 > fidl::encoding::Encode<HardwareResetPinStates, D> for (T0, T1, T2)
797 {
798 #[inline]
799 unsafe fn encode(
800 self,
801 encoder: &mut fidl::encoding::Encoder<'_, D>,
802 offset: usize,
803 depth: fidl::encoding::Depth,
804 ) -> fidl::Result<()> {
805 encoder.debug_check_bounds::<HardwareResetPinStates>(offset);
806 self.0.encode(encoder, offset + 0, depth)?;
810 self.1.encode(encoder, offset + 4, depth)?;
811 self.2.encode(encoder, offset + 8, depth)?;
812 Ok(())
813 }
814 }
815
816 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
817 for HardwareResetPinStates
818 {
819 #[inline(always)]
820 fn new_empty() -> Self {
821 Self {
822 isp_pin_0: fidl::new_empty!(PinState, D),
823 isp_pin_1: fidl::new_empty!(PinState, D),
824 isp_pin_2: fidl::new_empty!(PinState, D),
825 }
826 }
827
828 #[inline]
829 unsafe fn decode(
830 &mut self,
831 decoder: &mut fidl::encoding::Decoder<'_, D>,
832 offset: usize,
833 _depth: fidl::encoding::Depth,
834 ) -> fidl::Result<()> {
835 decoder.debug_check_bounds::<Self>(offset);
836 fidl::decode!(PinState, D, &mut self.isp_pin_0, decoder, offset + 0, _depth)?;
838 fidl::decode!(PinState, D, &mut self.isp_pin_1, decoder, offset + 4, _depth)?;
839 fidl::decode!(PinState, D, &mut self.isp_pin_2, decoder, offset + 8, _depth)?;
840 Ok(())
841 }
842 }
843
844 impl fidl::encoding::ValueTypeMarker for McuVersionInfo {
845 type Borrowed<'a> = &'a Self;
846 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
847 value
848 }
849 }
850
851 unsafe impl fidl::encoding::TypeMarker for McuVersionInfo {
852 type Owned = Self;
853
854 #[inline(always)]
855 fn inline_align(_context: fidl::encoding::Context) -> usize {
856 4
857 }
858
859 #[inline(always)]
860 fn inline_size(_context: fidl::encoding::Context) -> usize {
861 12
862 }
863 #[inline(always)]
864 fn encode_is_copy() -> bool {
865 true
866 }
867
868 #[inline(always)]
869 fn decode_is_copy() -> bool {
870 true
871 }
872 }
873
874 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<McuVersionInfo, D>
875 for &McuVersionInfo
876 {
877 #[inline]
878 unsafe fn encode(
879 self,
880 encoder: &mut fidl::encoding::Encoder<'_, D>,
881 offset: usize,
882 _depth: fidl::encoding::Depth,
883 ) -> fidl::Result<()> {
884 encoder.debug_check_bounds::<McuVersionInfo>(offset);
885 unsafe {
886 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
888 (buf_ptr as *mut McuVersionInfo)
889 .write_unaligned((self as *const McuVersionInfo).read());
890 }
893 Ok(())
894 }
895 }
896 unsafe impl<
897 D: fidl::encoding::ResourceDialect,
898 T0: fidl::encoding::Encode<u16, D>,
899 T1: fidl::encoding::Encode<u16, D>,
900 T2: fidl::encoding::Encode<u16, D>,
901 T3: fidl::encoding::Encode<u16, D>,
902 T4: fidl::encoding::Encode<u32, D>,
903 > fidl::encoding::Encode<McuVersionInfo, D> for (T0, T1, T2, T3, T4)
904 {
905 #[inline]
906 unsafe fn encode(
907 self,
908 encoder: &mut fidl::encoding::Encoder<'_, D>,
909 offset: usize,
910 depth: fidl::encoding::Depth,
911 ) -> fidl::Result<()> {
912 encoder.debug_check_bounds::<McuVersionInfo>(offset);
913 self.0.encode(encoder, offset + 0, depth)?;
917 self.1.encode(encoder, offset + 2, depth)?;
918 self.2.encode(encoder, offset + 4, depth)?;
919 self.3.encode(encoder, offset + 6, depth)?;
920 self.4.encode(encoder, offset + 8, depth)?;
921 Ok(())
922 }
923 }
924
925 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuVersionInfo {
926 #[inline(always)]
927 fn new_empty() -> Self {
928 Self {
929 hardware_type: fidl::new_empty!(u16, D),
930 hardware_version: fidl::new_empty!(u16, D),
931 bootloader_version: fidl::new_empty!(u16, D),
932 os_version: fidl::new_empty!(u16, D),
933 variant_version: fidl::new_empty!(u32, D),
934 }
935 }
936
937 #[inline]
938 unsafe fn decode(
939 &mut self,
940 decoder: &mut fidl::encoding::Decoder<'_, D>,
941 offset: usize,
942 _depth: fidl::encoding::Depth,
943 ) -> fidl::Result<()> {
944 decoder.debug_check_bounds::<Self>(offset);
945 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
946 unsafe {
949 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
950 }
951 Ok(())
952 }
953 }
954
955 impl McuTimeSyncInfo {
956 #[inline(always)]
957 fn max_ordinal_present(&self) -> u64 {
958 if let Some(_) = self.mcu_boot_time {
959 return 2;
960 }
961 if let Some(_) = self.ap_boot_time {
962 return 1;
963 }
964 0
965 }
966 }
967
968 impl fidl::encoding::ValueTypeMarker for McuTimeSyncInfo {
969 type Borrowed<'a> = &'a Self;
970 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
971 value
972 }
973 }
974
975 unsafe impl fidl::encoding::TypeMarker for McuTimeSyncInfo {
976 type Owned = Self;
977
978 #[inline(always)]
979 fn inline_align(_context: fidl::encoding::Context) -> usize {
980 8
981 }
982
983 #[inline(always)]
984 fn inline_size(_context: fidl::encoding::Context) -> usize {
985 16
986 }
987 }
988
989 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<McuTimeSyncInfo, D>
990 for &McuTimeSyncInfo
991 {
992 unsafe fn encode(
993 self,
994 encoder: &mut fidl::encoding::Encoder<'_, D>,
995 offset: usize,
996 mut depth: fidl::encoding::Depth,
997 ) -> fidl::Result<()> {
998 encoder.debug_check_bounds::<McuTimeSyncInfo>(offset);
999 let max_ordinal: u64 = self.max_ordinal_present();
1001 encoder.write_num(max_ordinal, offset);
1002 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1003 if max_ordinal == 0 {
1005 return Ok(());
1006 }
1007 depth.increment()?;
1008 let envelope_size = 8;
1009 let bytes_len = max_ordinal as usize * envelope_size;
1010 #[allow(unused_variables)]
1011 let offset = encoder.out_of_line_offset(bytes_len);
1012 let mut _prev_end_offset: usize = 0;
1013 if 1 > max_ordinal {
1014 return Ok(());
1015 }
1016
1017 let cur_offset: usize = (1 - 1) * envelope_size;
1020
1021 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1023
1024 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1029 self.ap_boot_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1030 encoder,
1031 offset + cur_offset,
1032 depth,
1033 )?;
1034
1035 _prev_end_offset = cur_offset + envelope_size;
1036 if 2 > max_ordinal {
1037 return Ok(());
1038 }
1039
1040 let cur_offset: usize = (2 - 1) * envelope_size;
1043
1044 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1046
1047 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1052 self.mcu_boot_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1053 encoder,
1054 offset + cur_offset,
1055 depth,
1056 )?;
1057
1058 _prev_end_offset = cur_offset + envelope_size;
1059
1060 Ok(())
1061 }
1062 }
1063
1064 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuTimeSyncInfo {
1065 #[inline(always)]
1066 fn new_empty() -> Self {
1067 Self::default()
1068 }
1069
1070 unsafe fn decode(
1071 &mut self,
1072 decoder: &mut fidl::encoding::Decoder<'_, D>,
1073 offset: usize,
1074 mut depth: fidl::encoding::Depth,
1075 ) -> fidl::Result<()> {
1076 decoder.debug_check_bounds::<Self>(offset);
1077 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1078 None => return Err(fidl::Error::NotNullable),
1079 Some(len) => len,
1080 };
1081 if len == 0 {
1083 return Ok(());
1084 };
1085 depth.increment()?;
1086 let envelope_size = 8;
1087 let bytes_len = len * envelope_size;
1088 let offset = decoder.out_of_line_offset(bytes_len)?;
1089 let mut _next_ordinal_to_read = 0;
1091 let mut next_offset = offset;
1092 let end_offset = offset + bytes_len;
1093 _next_ordinal_to_read += 1;
1094 if next_offset >= end_offset {
1095 return Ok(());
1096 }
1097
1098 while _next_ordinal_to_read < 1 {
1100 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1101 _next_ordinal_to_read += 1;
1102 next_offset += envelope_size;
1103 }
1104
1105 let next_out_of_line = decoder.next_out_of_line();
1106 let handles_before = decoder.remaining_handles();
1107 if let Some((inlined, num_bytes, num_handles)) =
1108 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1109 {
1110 let member_inline_size =
1111 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1112 if inlined != (member_inline_size <= 4) {
1113 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1114 }
1115 let inner_offset;
1116 let mut inner_depth = depth.clone();
1117 if inlined {
1118 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1119 inner_offset = next_offset;
1120 } else {
1121 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1122 inner_depth.increment()?;
1123 }
1124 let val_ref = self.ap_boot_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
1125 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1126 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1127 {
1128 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1129 }
1130 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1131 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1132 }
1133 }
1134
1135 next_offset += envelope_size;
1136 _next_ordinal_to_read += 1;
1137 if next_offset >= end_offset {
1138 return Ok(());
1139 }
1140
1141 while _next_ordinal_to_read < 2 {
1143 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1144 _next_ordinal_to_read += 1;
1145 next_offset += envelope_size;
1146 }
1147
1148 let next_out_of_line = decoder.next_out_of_line();
1149 let handles_before = decoder.remaining_handles();
1150 if let Some((inlined, num_bytes, num_handles)) =
1151 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1152 {
1153 let member_inline_size =
1154 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1155 if inlined != (member_inline_size <= 4) {
1156 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1157 }
1158 let inner_offset;
1159 let mut inner_depth = depth.clone();
1160 if inlined {
1161 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1162 inner_offset = next_offset;
1163 } else {
1164 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1165 inner_depth.increment()?;
1166 }
1167 let val_ref = self.mcu_boot_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
1168 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1169 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1170 {
1171 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1172 }
1173 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1174 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1175 }
1176 }
1177
1178 next_offset += envelope_size;
1179
1180 while next_offset < end_offset {
1182 _next_ordinal_to_read += 1;
1183 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1184 next_offset += envelope_size;
1185 }
1186
1187 Ok(())
1188 }
1189 }
1190}