Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SDFileSystem by
Diff: SDFileSystem.cpp
- Revision:
- 20:2c1e8d442f68
- Parent:
- 18:2286a4e7fa31
- Child:
- 21:d10a519c0910
--- a/SDFileSystem.cpp Thu Nov 26 16:19:53 2015 +0000 +++ b/SDFileSystem.cpp Tue Dec 08 16:02:44 2015 +0000 @@ -56,19 +56,19 @@ } } -SDFileSystem::CardType SDFileSystem::card_type() +bool SDFileSystem::card_present() { - //Check if there's a card in the socket + //Check the card socket checkSocket(); - //Check if a card is present, but not initialized - if (!(m_Status & STA_NODISK) && (m_Status & STA_NOINIT)) { - //Initialize the card in order to determine the card type - disk_initialize(); + //Return whether or not a card is present + return !(m_Status & STA_NODISK); +} - //Change the status back to uninitialized so that FatFs will handle the card change properly - m_Status |= STA_NOINIT; - } +SDFileSystem::CardType SDFileSystem::card_type() +{ + //Check the card socket + checkSocket(); //Return the card type return m_CardType; @@ -82,7 +82,7 @@ void SDFileSystem::crc(bool enabled) { - //Check if there's a card in the socket + //Check the card socket checkSocket(); //Just update the member variable if the card isn't initialized @@ -132,9 +132,9 @@ //Unmount the filesystem FATFileSystem::unmount(); - //Change the status to not initialized, and the card type to none + //Change the status to not initialized, and the card type to unknown m_Status |= STA_NOINIT; - m_CardType = CARD_NONE; + m_CardType = CARD_UNKNOWN; //Always succeeds return 0; @@ -308,7 +308,7 @@ int SDFileSystem::disk_status() { - //Check if there's a card in the socket + //Check the card socket checkSocket(); //Return the disk status @@ -403,20 +403,27 @@ void SDFileSystem::onCardRemoval() { - //Check if there's a card in the socket + //Check the card socket checkSocket(); } inline void SDFileSystem::checkSocket() { //Use the card detect switch (if available) to determine if the socket is occupied - if (m_CdAssert == -1 || m_Cd == m_CdAssert) { - //The socket is occupied - m_Status &= ~STA_NODISK; - } else { - //The socket is empty - m_Status |= (STA_NODISK | STA_NOINIT); - m_CardType = CARD_NONE; + if (m_CdAssert != -1) { + if (m_Status & STA_NODISK) { + if (m_Cd == m_CdAssert) { + //The socket is now occupied + m_Status &= ~STA_NODISK; + m_CardType = CARD_UNKNOWN; + } + } else { + if (m_Cd != m_CdAssert) { + //The socket is now empty + m_Status |= (STA_NODISK | STA_NOINIT); + m_CardType = CARD_NONE; + } + } } }