Skip to content

Commit ba23152

Browse files
authored
Merge pull request #179 from homeodor/master
Added setStartStopCallback
2 parents 7264c14 + bce0afa commit ba23152

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/arduino/msc/Adafruit_USBD_MSC.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ 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,
112+
start_stop_callback_t cb) {
113+
_lun_info[lun].start_stop_cb = cb;
114+
}
115+
111116
void Adafruit_USBD_MSC::setReadyCallback(uint8_t lun, ready_callback_t cb) {
112117
_lun_info[lun].ready_cb = cb;
113118
}
@@ -227,6 +232,17 @@ int32_t tud_msc_scsi_cb(uint8_t lun, const uint8_t scsi_cmd[16], void *buffer,
227232
return resplen;
228233
}
229234

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

src/arduino/msc/Adafruit_USBD_MSC.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ 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,
40+
bool load_eject);
3941

4042
Adafruit_USBD_MSC(void);
4143

@@ -53,6 +55,7 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
5355
write_callback_t wr_cb, flush_callback_t fl_cb);
5456
void setReadyCallback(uint8_t lun, ready_callback_t cb);
5557
void setWritableCallback(uint8_t lun, writable_callback_t cb);
58+
void setStartStopCallback(uint8_t lun, start_stop_callback_t cb);
5659

5760
//------------- Single LUN API -------------//
5861
void setID(const char *vendor_id, const char *product_id,
@@ -75,6 +78,9 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
7578
void setWritableCallback(writable_callback_t cb) {
7679
setWritableCallback(0, cb);
7780
}
81+
void setStartStopCallback(start_stop_callback_t cb) {
82+
setStartStopCallback(0, cb);
83+
}
7884

7985
// from Adafruit_USBD_Interface
8086
virtual uint16_t getInterfaceDescriptor(uint8_t itfnum, uint8_t *buf,
@@ -88,6 +94,7 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
8894
flush_callback_t fl_cb;
8995
ready_callback_t ready_cb;
9096
writable_callback_t writable_cb;
97+
start_stop_callback_t start_stop_cb;
9198

9299
const char *_inquiry_vid;
93100
const char *_inquiry_pid;
@@ -114,6 +121,8 @@ class Adafruit_USBD_MSC : public Adafruit_USBD_Interface {
114121
uint8_t *buffer, uint32_t bufsize);
115122
friend void tud_msc_write10_complete_cb(uint8_t lun);
116123
friend bool tud_msc_is_writable_cb(uint8_t lun);
124+
friend bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition,
125+
bool start, bool load_eject);
117126
};
118127

119128
#endif /* ADAFRUIT_USBD_MSC_H_ */

0 commit comments

Comments
 (0)