bluenrg 0.1.0

Interface to ST Micro BlueNRG Bluetooth radios
Documentation
macro_rules! impl_params {
    ($method:ident, $param_type:ident, $opcode:path) => {
        fn $method(&mut self, params: &$param_type) -> nb::Result<(), Self::Error> {
            let mut bytes = [0; $param_type::LENGTH];
            params.copy_into_slice(&mut bytes);

            self.write_command($opcode, &bytes)
        }
    };
}

macro_rules! impl_value_params {
    ($method:ident, $param_type:ident, $opcode:path) => {
        fn $method(&mut self, params: $param_type) -> nb::Result<(), Self::Error> {
            let mut bytes = [0; $param_type::LENGTH];
            params.copy_into_slice(&mut bytes);

            self.write_command($opcode, &bytes)
        }
    };
}

macro_rules! impl_validate_params {
    ($method:ident, $param_type:ident, $opcode:path) => {
        fn $method(&mut self, params: &$param_type) -> nb::Result<(), Error<Self::Error>> {
            params.validate().map_err(nb::Error::Other)?;

            let mut bytes = [0; $param_type::LENGTH];
            params.copy_into_slice(&mut bytes);

            self.write_command($opcode, &bytes).map_err(rewrap_error)
        }
    };
}

macro_rules! impl_variable_length_params {
    ($method:ident, $param_type:ident, $opcode:path) => {
        fn $method(&mut self, params: &$param_type) -> nb::Result<(), Self::Error> {
            let mut bytes = [0; $param_type::MAX_LENGTH];
            let len = params.copy_into_slice(&mut bytes);

            self.write_command($opcode, &bytes[..len])
        }
    };
}

macro_rules! impl_validate_variable_length_params {
    ($method:ident, $param_type:ident, $opcode:path) => {
        fn $method(&mut self, params: &$param_type) -> nb::Result<(), Error<Self::Error>> {
            params.validate().map_err(nb::Error::Other)?;

            let mut bytes = [0; $param_type::MAX_LENGTH];
            let len = params.copy_into_slice(&mut bytes);

            self.write_command($opcode, &bytes[..len])
                .map_err(rewrap_error)
        }
    };
    ($method:ident<$($genlife:lifetime),*>, $param_type:ident<$($lifetime:lifetime),*>, $opcode:path) => {
        fn $method<$($genlife),*>(
            &mut self,
            params: &$param_type<$($lifetime),*>
        ) -> nb::Result<(), Error<Self::Error>> {
            params.validate().map_err(nb::Error::Other)?;

            let mut bytes = [0; $param_type::MAX_LENGTH];
            let len = params.copy_into_slice(&mut bytes);

            self.write_command($opcode, &bytes[..len])
                .map_err(rewrap_error)
        }
    };
}

pub mod gap;
pub mod gatt;
pub mod hal;
pub mod l2cap;