From bc9bbc1607978e9a21e648c567e1a8a46d47d677 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Thu, 25 Jul 2019 14:49:37 -0400 Subject: Make DataBuf hold a mut pointer. Since this is being used by hardware DMA, and the hardware treats it as mutable, lets mark it as such. --- usbh/src/lib.rs | 12 ++++++------ usbh/src/pipe.rs | 8 ++++---- usbh/src/usbproto.rs | 20 ++++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/usbh/src/lib.rs b/usbh/src/lib.rs index 8f6f0d8..a38ae87 100755 --- a/usbh/src/lib.rs +++ b/usbh/src/lib.rs @@ -401,7 +401,7 @@ where // addr: 0x20007774 let tmp: USBDeviceDescriptor = Default::default(); // addr: 0x20007788 - let vol_descr = ::vcell::VolatileCell::new(tmp); + let mut vol_descr = ::vcell::VolatileCell::new(tmp); self.control_req( 0, 0, @@ -409,7 +409,7 @@ where USBRequest::GetDescriptor, WValue::from((0, USBDescriptor::Device as u8)), 0, - Some(DataBuf::from(&vol_descr)), + Some(DataBuf::from(&mut vol_descr)), )?; let desc = vol_descr.get(); @@ -435,7 +435,7 @@ where info!("getting config with array"); //let tmp: USBConfigurationDescriptor = Default::default(); - let tmp: [u8; 9] = [0; 9]; + let mut tmp: [u8; 9] = [0; 9]; //let vol_descr = ::vcell::VolatileCell::new(tmp); self.control_req( new_address, @@ -444,7 +444,7 @@ where USBRequest::GetConfiguration, WValue::from((0, 0)), 0, - Some(DataBuf::from(&tmp)), + Some(DataBuf::from(&mut tmp)), )?; //let desc = vol_descr.get(); @@ -487,7 +487,7 @@ where /* * Setup stage. */ - let setup_packet = USBSetupPacket { + let mut setup_packet = USBSetupPacket { bm_request_type: bm_request_type, b_request: b_request, w_value: w_value, @@ -500,7 +500,7 @@ where let mut pipe = self.pipe_table.pipe_for(self.usb.host_mut(), addr, ep); pipe.send( USBToken::Setup, - &DataBuf::from(&setup_packet), + &DataBuf::from(&mut setup_packet), NAK_LIMIT, self.millis, )?; diff --git a/usbh/src/pipe.rs b/usbh/src/pipe.rs index 75923ba..e84b898 100644 --- a/usbh/src/pipe.rs +++ b/usbh/src/pipe.rs @@ -345,7 +345,7 @@ pub(crate) enum USBPipeType { } pub(crate) struct DataBuf<'a> { - pub(crate) ptr: *const u8, + pub(crate) ptr: *mut u8, pub(crate) len: usize, _marker: core::marker::PhantomData<&'a ()>, } @@ -363,10 +363,10 @@ impl core::fmt::Debug for DataBuf<'_> { } } -impl<'a, T> From<&'a T> for DataBuf<'a> { - fn from(v: &'a T) -> Self { +impl<'a, T> From<&'a mut T> for DataBuf<'a> { + fn from(v: &'a mut T) -> Self { Self { - ptr: v as *const T as *const u8, + ptr: v as *mut T as *mut u8, len: core::mem::size_of::(), _marker: core::marker::PhantomData, } diff --git a/usbh/src/usbproto.rs b/usbh/src/usbproto.rs index 246a9a4..97d1839 100644 --- a/usbh/src/usbproto.rs +++ b/usbh/src/usbproto.rs @@ -347,7 +347,7 @@ mod test { #[test] fn dev_desc_serialize() { - let desc = USBDeviceDescriptor { + let mut desc = USBDeviceDescriptor { b_length: 18, b_descriptor_type: USBDescriptor::Device, bcd_usb: 0x0110, @@ -363,7 +363,7 @@ mod test { i_serial_number: 0xa2, b_num_configurations: 1, }; - let db = DataBuf::from(&desc); + let db = DataBuf::from(&mut desc); assert_eq!(db.len, 18); let want = [ 0x12, 0x01, 0x10, 0x01, 0x02, 0x03, 0x04, 64, 0xad, 0xde, 0xef, 0xbe, 0x32, 0x54, 0xa0, @@ -375,7 +375,7 @@ mod test { #[test] fn config_desc_serialize() { - let desc = USBConfigurationDescriptor { + let mut desc = USBConfigurationDescriptor { b_length: 18, b_descriptor_type: USBDescriptor::Configuration, w_total_length: 0x20, @@ -385,7 +385,7 @@ mod test { bm_attributes: 0x40, b_max_power: 0xfa, }; - let db = DataBuf::from(&desc); + let db = DataBuf::from(&mut desc); assert_eq!(db.len, 9); let want = [0x12, 0x02, 0x20, 0x00, 0x05, 0x0a, 0x01, 0x40, 0xfa]; let got = unsafe { core::slice::from_raw_parts(db.ptr, db.len) }; @@ -394,7 +394,7 @@ mod test { #[test] fn interface_desc_serialize() { - let desc = USBInterfaceDescriptor { + let mut desc = USBInterfaceDescriptor { b_length: 18, b_descriptor_type: USBDescriptor::Interface, b_interface_number: 2, @@ -405,7 +405,7 @@ mod test { b_interface_protocol: 0x33, i_interface: 10, }; - let db = DataBuf::from(&desc); + let db = DataBuf::from(&mut desc); assert_eq!(db.len, 9); let want = [0x12, 0x04, 0x02, 0xaa, 0x05, 0x11, 0x22, 0x33, 0x0a]; let got = unsafe { core::slice::from_raw_parts(db.ptr, db.len) }; @@ -414,7 +414,7 @@ mod test { #[test] fn endpoint_desc_serialize() { - let desc = USBEndpointDescriptor { + let mut desc = USBEndpointDescriptor { b_length: 18, b_descriptor_type: USBDescriptor::Endpoint, b_endpoint_address: 1, @@ -422,7 +422,7 @@ mod test { w_max_packet_size: 0xdead, b_interval: 0x33, }; - let db = DataBuf::from(&desc); + let db = DataBuf::from(&mut desc); assert_eq!(db.len, 7); let want = [0x12, 0x05, 0x01, 0x22, 0xad, 0xde, 0x33]; let got = unsafe { core::slice::from_raw_parts(db.ptr, db.len) }; @@ -431,14 +431,14 @@ mod test { #[test] fn setup_packet_serialize() { - let setup_packet = USBSetupPacket { + let mut setup_packet = USBSetupPacket { bm_request_type: BMRequestType::get_descr(), b_request: USBRequest::GetDescriptor, w_value: WValue::from((0x00, 0x01)), w_index: 0xbeef, w_length: 18, }; - let db = DataBuf::from(&setup_packet); + let db = DataBuf::from(&mut setup_packet); assert_eq!(db.len, 8); let want = [0x80, 0x06, 0x00, 0x01, 0xef, 0xbe, 0x012, 0x00]; let got = unsafe { core::slice::from_raw_parts(db.ptr, db.len) }; -- cgit v1.2.3