1
1
#![ allow( missing_docs) ]
2
2
3
3
use crate :: class_prelude:: * ;
4
- use crate :: descriptor:: lang_id:: LangID ;
5
4
use crate :: device:: { StringDescriptors , UsbDevice , UsbDeviceBuilder , UsbVidPid } ;
6
5
use crate :: Result ;
6
+ use core:: cell:: UnsafeCell ;
7
7
use core:: cmp;
8
8
9
9
#[ cfg( feature = "test-class-high-speed" ) ]
@@ -22,7 +22,7 @@ mod sizes {
22
22
pub const INTERRUPT_ENDPOINT : u16 = 31 ;
23
23
}
24
24
25
- static mut CONTROL_BUFFER : [ u8 ; 256 ] = [ 0 ; 256 ] ;
25
+ static mut CONTROL_BUFFER : UnsafeCell < [ u8 ; 256 ] > = UnsafeCell :: new ( [ 0 ; 256 ] ) ;
26
26
27
27
/// Test USB class for testing USB driver implementations. Supports various endpoint types and
28
28
/// requests for testing USB peripheral drivers on actual hardware.
@@ -114,14 +114,16 @@ impl<B: UsbBus> TestClass<'_, B> {
114
114
& self ,
115
115
usb_bus : & ' a UsbBusAllocator < B > ,
116
116
) -> 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 ( )
125
127
}
126
128
127
129
/// Must be called after polling the UsbDevice.
0 commit comments