diff --git a/examples/ble_keyboard.rs b/examples/ble_keyboard.rs index 874b214..e376ad3 100644 --- a/examples/ble_keyboard.rs +++ b/examples/ble_keyboard.rs @@ -6,6 +6,7 @@ use esp32_nimble::{ BLEHIDDevice, BLEServer, }; use std::sync::Arc; +use zerocopy::IntoBytes; use zerocopy_derive::{Immutable, IntoBytes}; const KEYBOARD_ID: u8 = 0x01; @@ -298,7 +299,11 @@ impl Keyboard { } fn send_report(&self, keys: &KeyReport) { - self.input_keyboard.lock().set_from(keys).notify(); + self + .input_keyboard + .lock() + .set_value(keys.as_bytes()) + .notify(); esp_idf_svc::hal::delay::Ets::delay_ms(7); } } diff --git a/src/server/att_value.rs b/src/server/att_value.rs index 7c00d96..8d32514 100644 --- a/src/server/att_value.rs +++ b/src/server/att_value.rs @@ -1,5 +1,4 @@ use alloc::vec::Vec; -use zerocopy::{Immutable, IntoBytes}; pub struct AttValue { value: Vec, @@ -54,9 +53,13 @@ impl AttValue { self.value.extend_from_slice(value); } + #[deprecated(note = "Please use `set_value` + zerocopy::IntoBytes")] #[inline] - pub fn set_from(&mut self, value: &T) { - self.set_value(value.as_bytes()); + pub fn set_from(&mut self, p: &T) { + let slice = unsafe { + ::core::slice::from_raw_parts((p as *const T) as *const u8, ::core::mem::size_of::()) + }; + self.set_value(slice); } #[inline] diff --git a/src/server/ble_2904.rs b/src/server/ble_2904.rs index 89f30a9..77bcfb3 100644 --- a/src/server/ble_2904.rs +++ b/src/server/ble_2904.rs @@ -1,4 +1,5 @@ use alloc::sync::Arc; +use zerocopy::IntoBytes; use zerocopy_derive::{Immutable, IntoBytes}; use crate::{utilities::mutex::Mutex, BLEDescriptor}; @@ -51,13 +52,16 @@ pub struct BLE2904 { impl BLE2904 { pub(super) fn new(descriptor: Arc>) -> Self { - descriptor.lock().set_from(&Data { - format: BLE2904Format::OPAQUE, - exponent: 0, - unit: 0, - namespace: 1, - description: 0, - }); + descriptor.lock().set_value( + Data { + format: BLE2904Format::OPAQUE, + exponent: 0, + unit: 0, + namespace: 1, + description: 0, + } + .as_bytes(), + ); Self { descriptor } } diff --git a/src/server/ble_characteristic.rs b/src/server/ble_characteristic.rs index 666dec5..7d30a67 100644 --- a/src/server/ble_characteristic.rs +++ b/src/server/ble_characteristic.rs @@ -2,7 +2,6 @@ use alloc::{boxed::Box, sync::Arc, vec::Vec}; use bitflags::bitflags; use core::{cell::UnsafeCell, ffi::c_void}; use esp_idf_svc::sys; -use zerocopy::{Immutable, IntoBytes}; #[cfg(cpfd)] use crate::cpfd::Cpfd; @@ -160,7 +159,9 @@ impl BLECharacteristic { self } - pub fn set_from(&mut self, value: &T) -> &mut Self { + #[deprecated(note = "Please use `set_value` + zerocopy::IntoBytes")] + pub fn set_from(&mut self, value: &T) -> &mut Self { + #[allow(deprecated)] self.value.set_from(value); self } diff --git a/src/server/ble_descriptor.rs b/src/server/ble_descriptor.rs index 8c4d1b2..926b304 100644 --- a/src/server/ble_descriptor.rs +++ b/src/server/ble_descriptor.rs @@ -4,7 +4,6 @@ use bitflags::bitflags; use core::{cell::UnsafeCell, ffi::c_void}; use esp_idf_svc::sys as esp_idf_sys; use esp_idf_sys::{ble_uuid_any_t, ble_uuid_cmp}; -use zerocopy::{Immutable, IntoBytes}; use crate::{ utilities::{ @@ -53,7 +52,9 @@ impl BLEDescriptor { self } - pub fn set_from(&mut self, value: &T) -> &mut Self { + #[deprecated(note = "Please use `set_value` + zerocopy::IntoBytes")] + pub fn set_from(&mut self, value: &T) -> &mut Self { + #[allow(deprecated)] self.value.set_from(value); self }