#[rustfmt::skip]
#[allow(missing_docs)]
pub mod instruction_id {
pub const PING : u8 = 0x01;
pub const READ : u8 = 0x02;
pub const WRITE : u8 = 0x03;
pub const REG_WRITE : u8 = 0x04;
pub const ACTION : u8 = 0x05;
pub const FACTORY_RESET : u8 = 0x06;
pub const REBOOT : u8 = 0x08;
pub const CLEAR : u8 = 0x10;
pub const SYNC_READ : u8 = 0x82;
pub const SYNC_WRITE : u8 = 0x83;
pub const BULK_READ : u8 = 0x92;
pub const BULK_WRITE : u8 = 0x93;
pub const STATUS : u8 = 0x55;
}
pub mod packet_id {
pub const BROADCAST: u8 = 0xFE;
}
mod action;
mod bulk_read;
mod bulk_write;
mod clear;
mod factory_reset;
mod ping;
mod read;
mod reboot;
mod reg_write;
mod sync_read;
mod sync_write;
mod write;
pub use factory_reset::FactoryResetKind;
pub use ping::Ping;
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct SyncWriteData<T> {
pub motor_id: u8,
pub data: T,
}
impl<T> AsRef<SyncWriteData<T>> for SyncWriteData<T> {
fn as_ref(&self) -> &Self {
self
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct BulkWriteData<T> {
pub motor_id: u8,
pub address: u16,
pub data: T,
}
impl<T> AsRef<BulkWriteData<T>> for BulkWriteData<T> {
fn as_ref(&self) -> &Self {
self
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct BulkReadData {
pub motor_id: u8,
pub address: u16,
pub count: u16,
}
impl AsRef<BulkReadData> for BulkReadData {
fn as_ref(&self) -> &Self {
self
}
}
fn read_response_if_not_broadcast<ReadBuffer, WriteBuffer>(
bus: &mut crate::Bus<ReadBuffer, WriteBuffer>,
motor_id: u8,
) -> Result<crate::Response<()>, crate::error::ReadError>
where
ReadBuffer: AsRef<[u8]> + AsMut<[u8]>,
WriteBuffer: AsRef<[u8]> + AsMut<[u8]>,
{
if motor_id == packet_id::BROADCAST {
Ok(crate::Response {
motor_id: packet_id::BROADCAST,
alert: false,
data: (),
})
} else {
Ok(bus.read_status_response(0)?.try_into()?)
}
}