/** * takes next digital_input_s from the registeredIcus pool */ digital_input_s * addWaveAnalyzerDriver(const char *msg, brain_pin_e brainPin) { ICUDriver *driver = getInputCaptureDriver(msg, brainPin); if (driver == NULL) { warning(CUSTOM_ERR_INVALID_INPUT_ICU_PIN, "w_not input pin"); return NULL; } digital_input_s *hw = registeredIcus.add(); hw->widthListeners.clear(); hw->periodListeners.clear(); hw->started = false; hw->brainPin = brainPin; hw->driver = driver; turnOnCapturePin(msg, brainPin); return hw; }
static ICUDriver *turnOnTriggerInputPin(brain_pin_e hwPin) { // configure pin turnOnCapturePin(hwPin); shaft_icucfg.channel = ICU_CHANNEL_1; ICUDriver *driver = getInputCaptureDriver(hwPin); scheduleMsg(logger, "turnOnTriggerInputPin %s", hwPortname(hwPin)); // todo: reuse 'setWaveReaderMode' method here? if (driver != NULL) { bool_t needWidthCallback = !CONFIG(useOnlyFrontForTrigger) || TRIGGER_SHAPE(useRiseEdge); shaft_icucfg.width_cb = needWidthCallback ? shaft_icu_width_callback : NULL; bool_t needPeriodCallback = !CONFIG(useOnlyFrontForTrigger) || !TRIGGER_SHAPE(useRiseEdge); shaft_icucfg.period_cb = needPeriodCallback ? shaft_icu_period_callback : NULL; efiIcuStart(driver, &shaft_icucfg); icuEnable(driver); } return driver; }