dynamixel2/instructions/
write.rs1use super::{instruction_id, read_response_if_not_broadcast};
2use crate::endian::{write_u16_le, write_u32_le};
3use crate::{Bus, Response, TransferError};
4
5impl<ReadBuffer, WriteBuffer> Bus<ReadBuffer, WriteBuffer>
6where
7 ReadBuffer: AsRef<[u8]> + AsMut<[u8]>,
8 WriteBuffer: AsRef<[u8]> + AsMut<[u8]>,
9{
10 pub fn write(&mut self, motor_id: u8, address: u16, data: &[u8]) -> Result<Response<()>, TransferError> {
15 self.write_instruction(motor_id, instruction_id::WRITE, 2 + data.len(), |buffer| {
16 write_u16_le(&mut buffer[0..], address);
17 buffer[2..].copy_from_slice(data)
18 })?;
19 Ok(read_response_if_not_broadcast(self, motor_id)?)
20 }
21
22 pub fn write_u8(&mut self, motor_id: u8, address: u16, value: u8) -> Result<Response<()>, TransferError> {
27 self.write_instruction(motor_id, instruction_id::WRITE, 2 + 1, |buffer| {
28 write_u16_le(&mut buffer[0..], address);
29 buffer[2] = value;
30 })?;
31 Ok(read_response_if_not_broadcast(self, motor_id)?)
32 }
33
34 pub fn write_u16(&mut self, motor_id: u8, address: u16, value: u16) -> Result<Response<()>, TransferError> {
39 self.write_instruction(motor_id, instruction_id::WRITE, 2 + 2, |buffer| {
40 write_u16_le(&mut buffer[0..], address);
41 write_u16_le(&mut buffer[2..], value);
42 })?;
43 Ok(read_response_if_not_broadcast(self, motor_id)?)
44 }
45
46 pub fn write_u32(&mut self, motor_id: u8, address: u16, value: u32) -> Result<Response<()>, TransferError> {
51 self.write_instruction(motor_id, instruction_id::WRITE, 2 + 4, |buffer| {
52 write_u16_le(&mut buffer[0..], address);
53 write_u32_le(&mut buffer[2..], value);
54 })?;
55 Ok(read_response_if_not_broadcast(self, motor_id)?)
56 }
57}