Skip to content

Commit d701019

Browse files
author
Alexander Homeodor Golovanov
committed
Added setStartStopCallback
1 parent 7264c14 commit d701019

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/arduino/msc/Adafruit_USBD_MSC.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ void Adafruit_USBD_MSC::setReadWriteCallback(uint8_t lun, read_callback_t rd_cb,
108108
_lun_info[lun].fl_cb = fl_cb;
109109
}
110110

111+
void Adafruit_USBD_MSC::setStartStopCallback(uint8_t lun, start_stop_callback_t cb) {
112+
_lun_info[lun].start_stop_cb = cb;
113+
}
114+
111115
void Adafruit_USBD_MSC::setReadyCallback(uint8_t lun, ready_callback_t cb) {
112116
_lun_info[lun].ready_cb = cb;
113117
}
@@ -227,6 +231,16 @@ int32_t tud_msc_scsi_cb(uint8_t lun, const uint8_t scsi_cmd[16], void *buffer,
227231
return resplen;
228232
}
229233

234+
// Callback invoked on start/stop
235+
bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject)
236+
{
237+
if (!(_msc_dev && _msc_dev->_lun_info[lun].start_stop_cb)) {
238+
return true;
239+
}
240+
241+
return _msc_dev->_lun_info[lun].start_stop_cb(power_condition, start, load_eject);
242+
}
243+
230244
// Callback invoked when received READ10 command.
231245
// Copy disk's data to buffer (up to bufsize) and return number of copied bytes.
232246
int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset,

src/arduino/msc/Adafruit_USBD_MSC.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
3636
typedef void (*flush_callback_t)(void);
3737
typedef bool (*ready_callback_t)(void);
3838
typedef bool (*writable_callback_t)(void);
39+
typedef bool (*start_stop_callback_t)(uint8_t power_condition, bool start, bool load_eject);
3940

4041
Adafruit_USBD_MSC(void);
4142

@@ -53,6 +54,7 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
5354
write_callback_t wr_cb, flush_callback_t fl_cb);
5455
void setReadyCallback(uint8_t lun, ready_callback_t cb);
5556
void setWritableCallback(uint8_t lun, writable_callback_t cb);
57+
void setStartStopCallback(uint8_t lun, start_stop_callback_t cb);
5658

5759
//------------- Single LUN API -------------//
5860
void setID(const char *vendor_id, const char *product_id,
@@ -75,6 +77,9 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
7577
void setWritableCallback(writable_callback_t cb) {
7678
setWritableCallback(0, cb);
7779
}
80+
void setStartStopCallback(start_stop_callback_t cb) {
81+
setStartStopCallback(0, cb);
82+
}
7883

7984
// from Adafruit_USBD_Interface
8085
virtual uint16_t getInterfaceDescriptor(uint8_t itfnum, uint8_t *buf,
@@ -88,6 +93,7 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
8893
flush_callback_t fl_cb;
8994
ready_callback_t ready_cb;
9095
writable_callback_t writable_cb;
96+
start_stop_callback_t start_stop_cb;
9197

9298
const char *_inquiry_vid;
9399
const char *_inquiry_pid;
@@ -114,6 +120,7 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
114120
uint8_t *buffer, uint32_t bufsize);
115121
friend void tud_msc_write10_complete_cb(uint8_t lun);
116122
friend bool tud_msc_is_writable_cb(uint8_t lun);
123+
friend bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject);
117124
};
118125

119126
#endif /* ADAFRUIT_USBD_MSC_H_ */

0 commit comments

Comments
 (0)