11#![ allow( missing_docs) ]
22
33use crate :: class_prelude:: * ;
4- use crate :: descriptor:: lang_id:: LangID ;
54use crate :: device:: { StringDescriptors , UsbDevice , UsbDeviceBuilder , UsbVidPid } ;
65use crate :: Result ;
6+ use core:: cell:: UnsafeCell ;
77use core:: cmp;
88
99#[ cfg( feature = "test-class-high-speed" ) ]
@@ -22,7 +22,7 @@ mod sizes {
2222 pub const INTERRUPT_ENDPOINT : u16 = 31 ;
2323}
2424
25- static mut CONTROL_BUFFER : [ u8 ; 256 ] = [ 0 ; 256 ] ;
25+ static mut CONTROL_BUFFER : UnsafeCell < [ u8 ; 256 ] > = UnsafeCell :: new ( [ 0 ; 256 ] ) ;
2626
2727/// Test USB class for testing USB driver implementations. Supports various endpoint types and
2828/// requests for testing USB peripheral drivers on actual hardware.
@@ -114,14 +114,16 @@ impl<B: UsbBus> TestClass<'_, B> {
114114 & self ,
115115 usb_bus : & ' a UsbBusAllocator < B > ,
116116 ) -> UsbDeviceBuilder < ' a , B > {
117- UsbDeviceBuilder :: new ( usb_bus, UsbVidPid ( VID , PID ) , unsafe { & mut CONTROL_BUFFER } )
118- . strings ( & [ StringDescriptors :: default ( )
119- . manufacturer ( MANUFACTURER )
120- . product ( PRODUCT )
121- . serial_number ( SERIAL_NUMBER ) ] )
122- . unwrap ( )
123- . max_packet_size_0 ( sizes:: CONTROL_ENDPOINT )
124- . unwrap ( )
117+ UsbDeviceBuilder :: new ( usb_bus, UsbVidPid ( VID , PID ) , unsafe {
118+ CONTROL_BUFFER . get_mut ( )
119+ } )
120+ . strings ( & [ StringDescriptors :: default ( )
121+ . manufacturer ( MANUFACTURER )
122+ . product ( PRODUCT )
123+ . serial_number ( SERIAL_NUMBER ) ] )
124+ . unwrap ( )
125+ . max_packet_size_0 ( sizes:: CONTROL_ENDPOINT )
126+ . unwrap ( )
125127 }
126128
127129 /// Must be called after polling the UsbDevice.
0 commit comments