1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_hardware_i2cimpl__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[cfg(feature = "driver")]
15#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
16pub struct DeviceMarker;
17
18#[cfg(feature = "driver")]
19impl fidl_driver::endpoints::DriverProtocolMarker for DeviceMarker {
20 const DEBUG_NAME: &'static str = "fuchsia.hardware.i2cimpl.Device";
21}
22pub type DeviceGetMaxTransferSizeResult = Result<u64, i32>;
23pub type DeviceSetBitrateResult = Result<(), i32>;
24pub type DeviceTransactResult = Result<Vec<ReadData>, i32>;
25
26#[cfg(feature = "driver")]
29#[derive(Debug)]
30pub enum DeviceRequest {
31 GetMaxTransferSize {
32 responder: DeviceGetMaxTransferSizeResponder,
33 },
34 SetBitrate {
36 bitrate: u32,
37 responder: DeviceSetBitrateResponder,
38 },
39 Transact {
45 op: Vec<I2cImplOp>,
46 responder: DeviceTransactResponder,
47 },
48 #[non_exhaustive]
50 _UnknownMethod {
51 ordinal: u64,
53 method_type: fidl::MethodType,
54 },
55}
56
57#[cfg(feature = "driver")]
58impl DeviceRequest {
59 #[allow(irrefutable_let_patterns)]
60 pub fn into_get_max_transfer_size(self) -> Option<(DeviceGetMaxTransferSizeResponder)> {
61 if let DeviceRequest::GetMaxTransferSize { responder } = self {
62 Some((responder))
63 } else {
64 None
65 }
66 }
67
68 #[allow(irrefutable_let_patterns)]
69 pub fn into_set_bitrate(self) -> Option<(u32, DeviceSetBitrateResponder)> {
70 if let DeviceRequest::SetBitrate { bitrate, responder } = self {
71 Some((bitrate, responder))
72 } else {
73 None
74 }
75 }
76
77 #[allow(irrefutable_let_patterns)]
78 pub fn into_transact(self) -> Option<(Vec<I2cImplOp>, DeviceTransactResponder)> {
79 if let DeviceRequest::Transact { op, responder } = self {
80 Some((op, responder))
81 } else {
82 None
83 }
84 }
85
86 pub fn new_get_max_transfer_size(self, tx_id: u32) -> Self {
87 Self::GetMaxTransferSize { responder: DeviceGetMaxTransferSizeResponder { tx_id } }
88 }
89
90 pub fn new_set_bitrate(self, bitrate: u32, tx_id: u32) -> Self {
91 Self::SetBitrate { bitrate, responder: DeviceSetBitrateResponder { tx_id } }
92 }
93
94 pub fn new_transact(self, op: Vec<I2cImplOp>, tx_id: u32) -> Self {
95 Self::Transact { op, responder: DeviceTransactResponder { tx_id } }
96 }
97
98 pub fn r#get_max_transfer_size_as_message(
99 arena: fdf::Arena,
100 tx_id: u32,
101 ) -> Result<fdf::Message<[u8]>, fidl::Error> {
102 let ordinal = 0x4717665a97d2d719;
103 let dynamic_flags = fidl::encoding::DynamicFlags::FLEXIBLE;
104 let body = ();
105 let msg = fidl::encoding::TransactionMessage {
106 header: fidl::encoding::TransactionHeader::new(tx_id, ordinal, dynamic_flags),
107 body,
108 };
109 fidl::encoding::with_tls_encoded::<
110 fidl::encoding::TransactionMessageType<fidl::encoding::EmptyPayload>,
111 fidl::encoding::DefaultFuchsiaResourceDialect,
112 fdf::Message<[u8]>,
113 >(msg, |bytes, mut handles| {
114 let handles = arena.insert_from_iter(
115 std::mem::take(handles)
116 .into_iter()
117 .map(fidl_driver::encoding::mixed_from_handle_disposition),
118 );
119 Ok(fdf::Message::new(&arena, Some(arena.insert_slice(bytes)), Some(handles)))
120 })
121 }
122
123 pub fn r#set_bitrate_as_message(
124 arena: fdf::Arena,
125 mut bitrate: u32,
126 tx_id: u32,
127 ) -> Result<fdf::Message<[u8]>, fidl::Error> {
128 let ordinal = 0x71b6e880efd7faf4;
129 let dynamic_flags = fidl::encoding::DynamicFlags::FLEXIBLE;
130 let body = (bitrate,);
131 let msg = fidl::encoding::TransactionMessage {
132 header: fidl::encoding::TransactionHeader::new(tx_id, ordinal, dynamic_flags),
133 body,
134 };
135 fidl::encoding::with_tls_encoded::<
136 fidl::encoding::TransactionMessageType<DeviceSetBitrateRequest>,
137 fidl::encoding::DefaultFuchsiaResourceDialect,
138 fdf::Message<[u8]>,
139 >(msg, |bytes, mut handles| {
140 let handles = arena.insert_from_iter(
141 std::mem::take(handles)
142 .into_iter()
143 .map(fidl_driver::encoding::mixed_from_handle_disposition),
144 );
145 Ok(fdf::Message::new(&arena, Some(arena.insert_slice(bytes)), Some(handles)))
146 })
147 }
148
149 pub fn r#transact_as_message(
150 arena: fdf::Arena,
151 mut op: &[I2cImplOp],
152 tx_id: u32,
153 ) -> Result<fdf::Message<[u8]>, fidl::Error> {
154 let ordinal = 0x59ad11290fc1b9a6;
155 let dynamic_flags = fidl::encoding::DynamicFlags::FLEXIBLE;
156 let body = (op,);
157 let msg = fidl::encoding::TransactionMessage {
158 header: fidl::encoding::TransactionHeader::new(tx_id, ordinal, dynamic_flags),
159 body,
160 };
161 fidl::encoding::with_tls_encoded::<
162 fidl::encoding::TransactionMessageType<DeviceTransactRequest>,
163 fidl::encoding::DefaultFuchsiaResourceDialect,
164 fdf::Message<[u8]>,
165 >(msg, |bytes, mut handles| {
166 let handles = arena.insert_from_iter(
167 std::mem::take(handles)
168 .into_iter()
169 .map(fidl_driver::encoding::mixed_from_handle_disposition),
170 );
171 Ok(fdf::Message::new(&arena, Some(arena.insert_slice(bytes)), Some(handles)))
172 })
173 }
174
175 #[allow(irrefutable_let_patterns)]
176 pub fn read_from(bytes: &[u8], _handles: &mut [zx::HandleInfo]) -> Result<Self, fidl::Error> {
177 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
178
179 match header.ordinal {
180 0x4717665a97d2d719 => {
181 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
182 let mut req = fidl::new_empty!(
183 fidl::encoding::EmptyPayload,
184 fidl::encoding::DefaultFuchsiaResourceDialect
185 );
186 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, _handles, &mut req)?;
187 Ok(DeviceRequest::GetMaxTransferSize {
188 responder: DeviceGetMaxTransferSizeResponder { tx_id: header.tx_id },
189 })
190 }
191 0x71b6e880efd7faf4 => {
192 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
193 let mut req = fidl::new_empty!(
194 DeviceSetBitrateRequest,
195 fidl::encoding::DefaultFuchsiaResourceDialect
196 );
197 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceSetBitrateRequest>(&header, _body_bytes, _handles, &mut req)?;
198 Ok(DeviceRequest::SetBitrate {
199 bitrate: req.bitrate,
200
201 responder: DeviceSetBitrateResponder { tx_id: header.tx_id },
202 })
203 }
204 0x59ad11290fc1b9a6 => {
205 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
206 let mut req = fidl::new_empty!(
207 DeviceTransactRequest,
208 fidl::encoding::DefaultFuchsiaResourceDialect
209 );
210 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceTransactRequest>(&header, _body_bytes, _handles, &mut req)?;
211 Ok(DeviceRequest::Transact {
212 op: req.op,
213
214 responder: DeviceTransactResponder { tx_id: header.tx_id },
215 })
216 }
217 _ if header.tx_id == 0
218 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
219 {
220 Ok(DeviceRequest::_UnknownMethod {
221 ordinal: header.ordinal,
222 method_type: fidl::MethodType::OneWay,
223 })
224 }
225 _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
226 Ok(DeviceRequest::_UnknownMethod {
227 ordinal: header.ordinal,
228 method_type: fidl::MethodType::TwoWay,
229 })
230 }
231 _ => Err(fidl::Error::UnknownOrdinal {
232 ordinal: header.ordinal,
233 protocol_name:
234 <DeviceMarker as fidl_driver::endpoints::DriverProtocolMarker>::DEBUG_NAME,
235 }),
236 }
237 }
238
239 pub fn read_from_message(
240 mut message: fdf::Message<[u8]>,
241 ) -> Result<(fdf::Arena, Self), fidl::Error> {
242 let (arena, Some(body), handles) = message.take_arena_boxes() else {
243 return Err(fidl::Error::Invalid);
244 };
245 let mut handles =
246 handles
247 .map(|handles| {
248 arena.try_insert_from_iter(handles.into_iter().map(|handle| unsafe {
249 fidl_driver::encoding::mixed_into_handle_info(handle)
250 }))
251 })
252 .transpose();
253 let res = match handles {
254 Ok(ref mut handles) => {
255 Self::read_from(&*body, handles.as_deref_mut().unwrap_or(&mut []))?
256 }
257 Err(_) => return Err(fidl::Error::Invalid),
258 };
259 std::mem::drop((body, handles));
260 Ok((message.take_arena(), res))
261 }
262
263 pub fn method_name(&self) -> &'static str {
265 match *self {
266 DeviceRequest::GetMaxTransferSize { .. } => "get_max_transfer_size",
267 DeviceRequest::SetBitrate { .. } => "set_bitrate",
268 DeviceRequest::Transact { .. } => "transact",
269 DeviceRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
270 "unknown one-way method"
271 }
272 DeviceRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
273 "unknown two-way method"
274 }
275 }
276 }
277}
278
279#[cfg(feature = "driver")]
281impl std::convert::TryFrom<fdf::Message<[u8]>> for DeviceRequest {
282 type Error = fidl::Error;
283 fn try_from(msg: fdf::Message<[u8]>) -> Result<DeviceRequest, fidl::Error> {
284 Ok(DeviceRequest::read_from_message(msg)?.1)
285 }
286}
287
288#[must_use = "FIDL methods require a response to be sent"]
289#[cfg(feature = "driver")]
290#[derive(Debug)]
291pub struct DeviceGetMaxTransferSizeResponder {
292 tx_id: u32,
293}
294
295#[cfg(feature = "driver")]
296impl DeviceGetMaxTransferSizeResponder {
297 pub fn send_response(
298 &self,
299 server_handle: &fdf::Channel<[u8]>,
300 mut result: Result<u64, i32>,
301 ) -> Result<(), fidl::Error> {
302 let msg = fidl::encoding::TransactionMessage {
303 header: fidl::encoding::TransactionHeader::new(
304 self.tx_id,
305 0x4717665a97d2d719,
306 fidl::encoding::DynamicFlags::FLEXIBLE,
307 ),
308 body: fidl::encoding::FlexibleResult::new(result.map(|size| (size,))),
309 };
310 fidl::encoding::with_tls_encoded::<
311 fidl::encoding::TransactionMessageType<
312 fidl::encoding::FlexibleResultType<DeviceGetMaxTransferSizeResponse, i32>,
313 >,
314 fidl::encoding::DefaultFuchsiaResourceDialect,
315 (),
316 >(msg, |body, _handles| {
317 server_handle
318 .write_with_data(fdf::Arena::new(), |arena| arena.insert_slice(&body))
319 .unwrap();
320 Ok(())
321 })
322 }
323}
324
325#[must_use = "FIDL methods require a response to be sent"]
326#[cfg(feature = "driver")]
327#[derive(Debug)]
328pub struct DeviceSetBitrateResponder {
329 tx_id: u32,
330}
331
332#[cfg(feature = "driver")]
333impl DeviceSetBitrateResponder {
334 pub fn send_response(
335 &self,
336 server_handle: &fdf::Channel<[u8]>,
337 mut result: Result<(), i32>,
338 ) -> Result<(), fidl::Error> {
339 let msg = fidl::encoding::TransactionMessage {
340 header: fidl::encoding::TransactionHeader::new(
341 self.tx_id,
342 0x71b6e880efd7faf4,
343 fidl::encoding::DynamicFlags::FLEXIBLE,
344 ),
345 body: fidl::encoding::FlexibleResult::new(result),
346 };
347 fidl::encoding::with_tls_encoded::<
348 fidl::encoding::TransactionMessageType<
349 fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, i32>,
350 >,
351 fidl::encoding::DefaultFuchsiaResourceDialect,
352 (),
353 >(msg, |body, _handles| {
354 server_handle
355 .write_with_data(fdf::Arena::new(), |arena| arena.insert_slice(&body))
356 .unwrap();
357 Ok(())
358 })
359 }
360}
361
362#[must_use = "FIDL methods require a response to be sent"]
363#[cfg(feature = "driver")]
364#[derive(Debug)]
365pub struct DeviceTransactResponder {
366 tx_id: u32,
367}
368
369#[cfg(feature = "driver")]
370impl DeviceTransactResponder {
371 pub fn send_response(
372 &self,
373 server_handle: &fdf::Channel<[u8]>,
374 mut result: Result<&[ReadData], i32>,
375 ) -> Result<(), fidl::Error> {
376 let msg = fidl::encoding::TransactionMessage {
377 header: fidl::encoding::TransactionHeader::new(
378 self.tx_id,
379 0x59ad11290fc1b9a6,
380 fidl::encoding::DynamicFlags::FLEXIBLE,
381 ),
382 body: fidl::encoding::FlexibleResult::new(result.map(|read| (read,))),
383 };
384 fidl::encoding::with_tls_encoded::<
385 fidl::encoding::TransactionMessageType<
386 fidl::encoding::FlexibleResultType<DeviceTransactResponse, i32>,
387 >,
388 fidl::encoding::DefaultFuchsiaResourceDialect,
389 (),
390 >(msg, |body, _handles| {
391 server_handle
392 .write_with_data(fdf::Arena::new(), |arena| arena.insert_slice(&body))
393 .unwrap();
394 Ok(())
395 })
396 }
397}
398
399#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
400pub struct ServiceMarker;
401
402#[cfg(target_os = "fuchsia")]
403impl fidl::endpoints::ServiceMarker for ServiceMarker {
404 type Proxy = ServiceProxy;
405 type Request = ServiceRequest;
406 const SERVICE_NAME: &'static str = "fuchsia.hardware.i2cimpl.Service";
407}
408
409#[cfg(target_os = "fuchsia")]
412pub enum ServiceRequest {}
413
414#[cfg(target_os = "fuchsia")]
415impl fidl::endpoints::ServiceRequest for ServiceRequest {
416 type Service = ServiceMarker;
417
418 fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self {
419 match name {
420 _ => panic!("no such member protocol name for service Service"),
421 }
422 }
423
424 fn member_names() -> &'static [&'static str] {
425 &[]
426 }
427}
428#[cfg(target_os = "fuchsia")]
429pub struct ServiceProxy(#[allow(dead_code)] Box<dyn fidl::endpoints::MemberOpener>);
430
431#[cfg(target_os = "fuchsia")]
432impl fidl::endpoints::ServiceProxy for ServiceProxy {
433 type Service = ServiceMarker;
434
435 fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self {
436 Self(opener)
437 }
438}
439
440#[cfg(target_os = "fuchsia")]
441impl ServiceProxy {
442 pub fn instance_name(&self) -> &str {
443 self.0.instance_name()
444 }
445}
446
447mod internal {
448 use super::*;
449}