14
14
// 8KB is the smallest size that windows allow to mount
15
15
#define DISK_BLOCK_NUM 16
16
16
#define DISK_BLOCK_SIZE 512
17
+
17
18
#include " ramdisk.h"
18
19
19
20
Adafruit_USBD_MSC usb_msc;
@@ -42,6 +43,10 @@ void setup() {
42
43
TinyUSB_Device_Init (0 );
43
44
#endif
44
45
46
+ #ifdef BTN_EJECT
47
+ pinMode (BTN_EJECT, activeState ? INPUT_PULLDOWN : INPUT_PULLUP);
48
+ #endif
49
+
45
50
// Set disk vendor id, product id and revision with string up to 8, 16, 4 characters respectively
46
51
usb_msc.setID (" Adafruit" , " Mass Storage" , " 1.0" );
47
52
@@ -50,33 +55,27 @@ void setup() {
50
55
51
56
// Set callback
52
57
usb_msc.setReadWriteCallback (msc_read_callback, msc_write_callback, msc_flush_callback);
58
+ usb_msc.setStartStopCallback (msc_start_stop_callback);
59
+ usb_msc.setReadyCallback (msc_ready_callback);
53
60
54
61
// Set Lun ready (RAM disk is always ready)
55
62
usb_msc.setUnitReady (true );
56
-
57
- #ifdef BTN_EJECT
58
- pinMode (BTN_EJECT, activeState ? INPUT_PULLDOWN : INPUT_PULLUP);
59
- usb_msc.setReadyCallback (msc_ready_callback);
60
- #endif
61
-
62
63
usb_msc.begin ();
63
64
64
65
Serial.begin (115200 );
65
- // while ( !Serial ) delay(10); // wait for native usb
66
+ // while ( !Serial ) delay(10); // wait for native usb
66
67
67
68
Serial.println (" Adafruit TinyUSB Mass Storage RAM Disk example" );
68
69
}
69
70
70
- void loop ()
71
- {
71
+ void loop () {
72
72
// nothing to do
73
73
}
74
74
75
75
// Callback invoked when received READ10 command.
76
76
// Copy disk's data to buffer (up to bufsize) and
77
77
// return number of copied bytes (must be multiple of block size)
78
- int32_t msc_read_callback (uint32_t lba, void * buffer, uint32_t bufsize)
79
- {
78
+ int32_t msc_read_callback (uint32_t lba, void * buffer, uint32_t bufsize) {
80
79
uint8_t const * addr = msc_disk[lba];
81
80
memcpy (buffer, addr, bufsize);
82
81
@@ -86,8 +85,7 @@ int32_t msc_read_callback (uint32_t lba, void* buffer, uint32_t bufsize)
86
85
// Callback invoked when received WRITE10 command.
87
86
// Process data in buffer to disk's storage and
88
87
// return number of written bytes (must be multiple of block size)
89
- int32_t msc_write_callback (uint32_t lba, uint8_t * buffer, uint32_t bufsize)
90
- {
88
+ int32_t msc_write_callback (uint32_t lba, uint8_t * buffer, uint32_t bufsize) {
91
89
uint8_t * addr = msc_disk[lba];
92
90
memcpy (addr, buffer, bufsize);
93
91
@@ -96,18 +94,22 @@ int32_t msc_write_callback (uint32_t lba, uint8_t* buffer, uint32_t bufsize)
96
94
97
95
// Callback invoked when WRITE10 command is completed (status received and accepted by host).
98
96
// used to flush any pending cache.
99
- void msc_flush_callback (void )
100
- {
97
+ void msc_flush_callback (void ) {
101
98
// nothing to do
102
99
}
103
100
101
+ bool msc_start_stop_callback (uint8_t power_condition, bool start, bool load_eject) {
102
+ Serial.printf (" Start/Stop callback: power condition %u, start %u, load_eject %u\n " , power_condition, start, load_eject);
103
+ return true ;
104
+ }
104
105
105
- #ifdef BTN_EJECT
106
106
// Invoked when received Test Unit Ready command.
107
107
// return true allowing host to read/write this LUN e.g SD card inserted
108
- bool msc_ready_callback (void )
109
- {
108
+ bool msc_ready_callback (void ) {
109
+ # ifdef BTN_EJECT
110
110
// button not active --> medium ready
111
111
return digitalRead (BTN_EJECT) != activeState;
112
+ #else
113
+ return true ;
114
+ #endif
112
115
}
113
- #endif
0 commit comments