// Stops a waveform on a pin int stopWaveform(uint8_t pin) { // Can't possibly need to stop anything if there is no timer active if (!timerRunning) { return false; } for (size_t i = 0; i < countof(waveform); i++) { if (!waveform[i].enabled) { continue; // Skip fast to next one, can't need to stop this one since it's not running } if (((pin == 16) && waveform[i].gpio16Mask) || ((pin != 16) && (waveform[i].gpioMask == 1<<pin))) { // Note that there is no interrupt unsafety here. The IRQ can only ever change .enabled from 1->0 // We're also doing that, so even if an IRQ occurred it would still stay as 0. waveform[i].enabled = 0; int cnt = timer1CB ? 1 : 0; for (size_t i = 0; (cnt == 0) && (i < countof(waveform)); i++) { cnt += waveform[i].enabled ? 1 : 0; } if (!cnt) { deinitTimer(); } return true; } } return false; }
void VideoConverter::finished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) { deinitTimer(); if (QFile::exists(videoItem->getVideoFileSavedTo())) { QFile output(videoItem->getVideoFileSavedTo()); // has been converted?! if (output.size() == 0) // no { QFile::remove(videoItem->getVideoFileSavedTo()); videoItem->setVideoFileSavedTo(videoItem->getVideoFile(), this); } else // yes if (deleteOriginalVideo) QFile::remove(videoItem->getVideoFile()); } else videoItem->setVideoFileSavedTo(videoItem->getVideoFile(), this); videoItem->setAsConverted(this); videoItem->unlock(this); emit conversionFinished(videoItem); }
// Set a callback. Pass in NULL to stop it void setTimer1Callback(uint32_t (*fn)()) { timer1CB = fn; if (!timerRunning && fn) { initTimer(); } else if (timerRunning && !fn) { int cnt = 0; for (size_t i = 0; i < countof(waveform); i++) { cnt += waveform[i].enabled ? 1 : 0; } if (!cnt) { deinitTimer(); } } ReloadTimer(MicrosecondsToCycles(1)); // Cause an interrupt post-haste }