@@ -33,6 +33,7 @@ extern "C" uint16_t tusb_msc_load_descriptor(uint8_t *dst, uint8_t *itf) {
33
33
34
34
typedef struct {
35
35
bool media_present;
36
+ bool is_writable;
36
37
uint8_t vendor_id[8 ];
37
38
uint8_t product_id[16 ];
38
39
uint8_t product_rev[4 ];
@@ -179,11 +180,17 @@ int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, u
179
180
return resplen;
180
181
}
181
182
183
+ bool tud_msc_is_writable_cb (uint8_t lun) {
184
+ log_v (" [%u]: %u" , lun, msc_luns[lun].is_writable );
185
+ return msc_luns[lun].is_writable ; // RAM disk is always ready
186
+ }
187
+
182
188
USBMSC::USBMSC () {
183
189
if (MSC_ACTIVE_LUN < MSC_MAX_LUN) {
184
190
_lun = MSC_ACTIVE_LUN;
185
191
MSC_ACTIVE_LUN++;
186
192
msc_luns[_lun].media_present = false ;
193
+ msc_luns[_lun].is_writable = true ;
187
194
msc_luns[_lun].vendor_id [0 ] = 0 ;
188
195
msc_luns[_lun].product_id [0 ] = 0 ;
189
196
msc_luns[_lun].product_rev [0 ] = 0 ;
@@ -213,6 +220,7 @@ bool USBMSC::begin(uint32_t block_count, uint16_t block_size) {
213
220
214
221
void USBMSC::end () {
215
222
msc_luns[_lun].media_present = false ;
223
+ msc_luns[_lun].is_writable = false ;
216
224
msc_luns[_lun].vendor_id [0 ] = 0 ;
217
225
msc_luns[_lun].product_id [0 ] = 0 ;
218
226
msc_luns[_lun].product_rev [0 ] = 0 ;
@@ -247,6 +255,10 @@ void USBMSC::onWrite(msc_write_cb cb) {
247
255
msc_luns[_lun].write = cb;
248
256
}
249
257
258
+ void USBMSC::isWritable (bool is_writable) {
259
+ msc_luns[_lun].is_writable = is_writable;
260
+ }
261
+
250
262
void USBMSC::mediaPresent (bool media_present) {
251
263
msc_luns[_lun].media_present = media_present;
252
264
}
0 commit comments