pokeys_lib/protocols/
onewire.rs1use crate::device::PoKeysDevice;
4use crate::error::Result;
5
6impl PoKeysDevice {
8 pub fn onewire_init(&mut self) -> Result<()> {
10 self.send_request(0xC0, 0, 0, 0, 0)?;
11 Ok(())
12 }
13
14 pub fn onewire_reset(&mut self) -> Result<bool> {
16 let response = self.send_request(0xC1, 0, 0, 0, 0)?;
17 Ok(response[8] != 0) }
19
20 pub fn onewire_write_byte(&mut self, data: u8) -> Result<()> {
22 self.send_request(0xC2, data, 0, 0, 0)?;
23 Ok(())
24 }
25
26 pub fn onewire_read_byte(&mut self) -> Result<u8> {
28 let response = self.send_request(0xC3, 0, 0, 0, 0)?;
29 Ok(response[8])
30 }
31
32 pub fn onewire_search(&mut self) -> Result<Vec<[u8; 8]>> {
34 let response = self.send_request(0xC4, 0, 0, 0, 0)?;
35
36 let mut devices = Vec::new();
37 let device_count = response[8] as usize;
38
39 for i in 0..device_count {
40 let start_idx = 9 + (i * 8);
41 if start_idx + 7 < response.len() {
42 let mut device_id = [0u8; 8];
43 device_id.copy_from_slice(&response[start_idx..start_idx + 8]);
44 devices.push(device_id);
45 }
46 }
47
48 Ok(devices)
49 }
50}