mirror of https://github.com/ARMmbed/mbed-os.git
USBMSD: Add media removal event check function
parent
0e7f112653
commit
0cd9d24d08
|
@ -66,7 +66,7 @@ enum Status {
|
|||
|
||||
USBMSD::USBMSD(BlockDevice *bd, bool connect_blocking, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
|
||||
: USBDevice(get_usb_phy(), vendor_id, product_id, product_release),
|
||||
_initialized(false), _in_task(&_queue), _out_task(&_queue), _reset_task(&_queue), _control_task(&_queue), _configure_task(&_queue), _bd(bd)
|
||||
_initialized(false), _media_removed(false), _in_task(&_queue), _out_task(&_queue), _reset_task(&_queue), _control_task(&_queue), _configure_task(&_queue), _bd(bd)
|
||||
{
|
||||
_init();
|
||||
if (connect_blocking) {
|
||||
|
@ -78,7 +78,7 @@ USBMSD::USBMSD(BlockDevice *bd, bool connect_blocking, uint16_t vendor_id, uint1
|
|||
|
||||
USBMSD::USBMSD(USBPhy *phy, BlockDevice *bd, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
|
||||
: USBDevice(phy, vendor_id, product_id, product_release),
|
||||
_initialized(false), _in_task(&_queue), _out_task(&_queue), _reset_task(&_queue), _control_task(&_queue), _configure_task(&_queue), _bd(bd)
|
||||
_initialized(false), _media_removed(false), _in_task(&_queue), _out_task(&_queue), _reset_task(&_queue), _control_task(&_queue), _configure_task(&_queue), _bd(bd)
|
||||
{
|
||||
_init();
|
||||
}
|
||||
|
@ -161,6 +161,7 @@ bool USBMSD::connect()
|
|||
//connect the device
|
||||
USBDevice::connect();
|
||||
_initialized = true;
|
||||
_media_removed = false;
|
||||
_mutex.unlock();
|
||||
_mutex_init.unlock();
|
||||
return true;
|
||||
|
@ -213,7 +214,12 @@ void USBMSD::attach(mbed::Callback<void()> cb)
|
|||
unlock();
|
||||
}
|
||||
|
||||
int USBMSD::disk_read(uint8_t *data, uint64_t block, uint8_t count)
|
||||
bool USBMSD::media_removed()
|
||||
{
|
||||
return _media_removed;
|
||||
}
|
||||
|
||||
int USBMSD::disk_read(uint8_t* data, uint64_t block, uint8_t count)
|
||||
{
|
||||
bd_addr_t addr = block * _bd->get_erase_size();
|
||||
bd_size_t size = count * _bd->get_erase_size();
|
||||
|
@ -816,6 +822,7 @@ void USBMSD::CBWDecode(uint8_t *buf, uint16_t size)
|
|||
case MEDIA_REMOVAL:
|
||||
_csw.Status = CSW_PASSED;
|
||||
sendCSW();
|
||||
_media_removed = true;
|
||||
break;
|
||||
default:
|
||||
fail();
|
||||
|
|
|
@ -123,6 +123,13 @@ public:
|
|||
*/
|
||||
void attach(mbed::Callback<void()> cb);
|
||||
|
||||
/**
|
||||
* Check if MSD device was removed/unmounted on the host side.
|
||||
*
|
||||
* @returns true if device was removed/unmounted on the host side
|
||||
*/
|
||||
bool media_removed();
|
||||
|
||||
protected:
|
||||
|
||||
/*
|
||||
|
@ -205,6 +212,9 @@ private:
|
|||
// If this class has been initialized
|
||||
bool _initialized;
|
||||
|
||||
// If msd device has been unmounted by host
|
||||
volatile bool _media_removed;
|
||||
|
||||
//state of the bulk-only state machine
|
||||
Stage _stage;
|
||||
|
||||
|
|
Loading…
Reference in New Issue