@@ -53,16 +53,24 @@ impl BleAdvertisingDriverFactory {
53
53
#[ non_exhaustive]
54
54
pub struct BleAdvertisingDriver ;
55
55
56
+ pub struct BleAdvertisingBuffer ( [ u8 ; BUFFER_SIZE_ADVERTISE ] ) ;
57
+
58
+ impl AsMut < [ u8 ] > for BleAdvertisingBuffer {
59
+ fn as_mut ( & mut self ) -> & mut [ u8 ] {
60
+ & mut self . 0
61
+ }
62
+ }
63
+
56
64
impl BleAdvertisingDriver {
57
- pub fn create_advertising_buffer ( ) -> [ u8 ; BUFFER_SIZE_ADVERTISE ] {
58
- [ 0 ; BUFFER_SIZE_ADVERTISE ]
65
+ pub fn create_advertising_buffer ( ) -> BleAdvertisingBuffer {
66
+ BleAdvertisingBuffer ( [ 0 ; BUFFER_SIZE_ADVERTISE ] )
59
67
}
60
68
pub fn initialize < ' a > (
61
69
& ' a mut self ,
62
70
interval : usize ,
63
71
service_payload : & BlePayload ,
64
- advertising_buffer : & ' a mut [ u8 ; BUFFER_SIZE_ADVERTISE ] ,
65
- ) -> TockResult < SharedMemory < ' a > > {
72
+ advertising_buffer : BleAdvertisingBuffer ,
73
+ ) -> TockResult < SharedMemory < BleAdvertisingBuffer > > {
66
74
let mut shared_memory = syscalls:: allow (
67
75
DRIVER_NUMBER ,
68
76
allow_nr:: ALLOW_ADVERTISMENT_BUFFER ,
@@ -86,12 +94,19 @@ impl BleAdvertisingDriver {
86
94
87
95
struct BleCallback < ' a > {
88
96
read_value : & ' a Cell < Option < ScanBuffer > > ,
89
- shared_buffer : SharedMemory < ' a > ,
97
+ shared_buffer : SharedMemory < ScanBuffer > ,
90
98
}
91
99
92
- pub ( crate ) type ScanBuffer = [ u8 ; BUFFER_SIZE_SCAN ] ;
100
+ #[ derive( Clone , Copy ) ]
101
+ pub struct ScanBuffer ( [ u8 ; BUFFER_SIZE_SCAN ] ) ;
102
+
103
+ impl AsRef < [ u8 ] > for ScanBuffer {
104
+ fn as_ref ( & self ) -> & [ u8 ] {
105
+ & self . 0
106
+ }
107
+ }
93
108
94
- const EMPTY_SCAN_BUFFER : ScanBuffer = [ 0 ; BUFFER_SIZE_SCAN ] ;
109
+ const EMPTY_SCAN_BUFFER : ScanBuffer = ScanBuffer ( [ 0 ; BUFFER_SIZE_SCAN ] ) ;
95
110
96
111
#[ non_exhaustive]
97
112
pub struct BleScanningDriverFactory ;
@@ -130,13 +145,19 @@ pub struct BleScanningDriver {
130
145
read_value : Cell < Option < ScanBuffer > > ,
131
146
}
132
147
148
+ impl AsMut < [ u8 ] > for ScanBuffer {
149
+ fn as_mut ( & mut self ) -> & mut [ u8 ] {
150
+ & mut self . 0
151
+ }
152
+ }
153
+
133
154
impl BleScanningDriver {
134
155
/// Prepare Ble Scanning Driver to share memory with the ble capsule
135
156
pub fn share_memory ( & mut self ) -> TockResult < BleScanningDriverShared > {
136
- let shared_buffer: SharedMemory = syscalls:: allow (
157
+ let shared_buffer = syscalls:: allow (
137
158
DRIVER_NUMBER ,
138
159
allow_nr:: ALLOW_SCAN_BUFFER ,
139
- & mut self . shared_buffer ,
160
+ self . shared_buffer ,
140
161
)
141
162
. map_err ( Into :: < TockError > :: into) ?;
142
163
Ok ( BleScanningDriverShared {
@@ -195,7 +216,7 @@ impl<'a> Consumer<Self> for BleCallback<'a> {
195
216
fn consume ( callback : & mut Self , _: usize , _: usize , _: usize ) {
196
217
let mut temporary_buffer: ScanBuffer = EMPTY_SCAN_BUFFER ;
197
218
198
- callback. shared_buffer . read_bytes ( & mut temporary_buffer[ .. ] ) ;
219
+ callback. shared_buffer . read_bytes ( temporary_buffer. as_mut ( ) ) ;
199
220
callback. read_value . set ( Some ( temporary_buffer) ) ;
200
221
}
201
222
}
0 commit comments