void sdcardInit(void) { /* static const evhandler_t evhndl[] = { InsertHandler, RemoveHandler }; struct EventListener el0, el1; */ palSetPadMode(GPIOC, 8, PAL_MODE_ALTERNATE(12) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(GPIOC, 9, PAL_MODE_ALTERNATE(12) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(GPIOC, 10, PAL_MODE_ALTERNATE(12) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(GPIOC, 11, PAL_MODE_ALTERNATE(12) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(GPIOC, 12, PAL_MODE_ALTERNATE(12) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(GPIOD, 2, PAL_MODE_ALTERNATE(12) | PAL_STM32_OSPEED_HIGHEST); chThdSleepMilliseconds(50); sdcStart(&SDCD1, NULL); chThdSleepMilliseconds(50); InsertHandler(0); FRESULT err; uint32_t clusters; FATFS *fsp; err = f_getfree("/", &clusters, &fsp); int retries = 3; while (err != FR_OK) { InsertHandler(0); chThdSleepMilliseconds(20); err = f_getfree("/", &clusters, &fsp); chThdSleepMilliseconds(50); retries--; if (!retries) break; } }
void BProcess::ScheduleHandler(BHandler *handler) { // bout << "BProcess::ScheduleHandler: (" << SysCurrentThread() << ")@" << SysGetRunTime() << endl; m_lock.LockQuick(); const BHandler::scheduling s = handler->start_schedule(); if (s != BHandler::CANCEL_SCHEDULE) { handler->IncRefs(this); UnscheduleHandler(handler,false); InsertHandler(&m_pendingHandlers,handler); handler->done_schedule(); } else { UnscheduleHandler(handler,false); } ScheduleNextHandler(); // releases the lock }
void sdAttemptMountIfUnmounted() { if (fs_ready) return; InsertHandler(0); }