git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4382 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
gdisirio 2012-07-01 17:10:40 +00:00
parent de68bed34a
commit 3440f11481
2 changed files with 14 additions and 20 deletions

View File

@ -62,14 +62,7 @@ static EventSource inserted_event, removed_event;
static void tmrfunc(void *p) { static void tmrfunc(void *p) {
BaseBlockDevice *bbdp = p; BaseBlockDevice *bbdp = p;
/* The presence check is performed only while the driver is not in a
transfer state because it is often performed by changing the mode of
the pin connected to the CS/D3 contact of the card, this could disturb
the transfer.*/
blkstate_t state = blkGetDriverState(bbdp);
chSysLockFromIsr(); chSysLockFromIsr();
if ((state != BLK_READING) && (state != BLK_WRITING)) {
/* Safe to perform the check.*/
if (cnt > 0) { if (cnt > 0) {
if (blkIsInserted(bbdp)) { if (blkIsInserted(bbdp)) {
if (--cnt == 0) { if (--cnt == 0) {
@ -85,7 +78,6 @@ static void tmrfunc(void *p) {
chEvtBroadcastI(&removed_event); chEvtBroadcastI(&removed_event);
} }
} }
}
chVTSetI(&tmr, MS2ST(POLLING_DELAY), tmrfunc, bbdp); chVTSetI(&tmr, MS2ST(POLLING_DELAY), tmrfunc, bbdp);
chSysUnlockFromIsr(); chSysUnlockFromIsr();
} }
@ -284,11 +276,12 @@ static void InsertHandler(eventid_t id) {
static void RemoveHandler(eventid_t id) { static void RemoveHandler(eventid_t id) {
(void)id; (void)id;
sdcDisconnect(&SDCD1);
fs_ready = FALSE; fs_ready = FALSE;
} }
/* /*
* Red LED blinker thread, times are in milliseconds. * LEDs blinker thread, times are in milliseconds.
*/ */
static WORKING_AREA(waThread1, 128); static WORKING_AREA(waThread1, 128);
static msg_t Thread1(void *arg) { static msg_t Thread1(void *arg) {

View File

@ -584,6 +584,7 @@ static void InsertHandler(eventid_t id) {
static void RemoveHandler(eventid_t id) { static void RemoveHandler(eventid_t id) {
(void)id; (void)id;
sdcDisconnect(&SDCD1);
fs_ready = FALSE; fs_ready = FALSE;
} }