void OutputPin::setDefaultPinState(pin_output_mode_e *outputMode) { #if EFI_GPIO pin_output_mode_e mode = *outputMode; assertOMode(mode); this->modePtr = outputMode; #endif setValue(false); // initial state }
static void outputPinRegisterExt(const char *msg, OutputPin *output, GPIO_TypeDef *port, uint32_t pin, pin_output_mode_e *outputMode) { #if EFI_GPIO if (port == GPIO_NULL) { // that's for GRIO_NONE output->port = port; return; } assertOMode(*outputMode); iomode_t mode = (*outputMode == OM_DEFAULT || *outputMode == OM_INVERTED) ? PAL_MODE_OUTPUT_PUSHPULL : PAL_MODE_OUTPUT_OPENDRAIN; initOutputPinExt(msg, output, port, pin, mode); output->setDefaultPinState(outputMode); #endif }
void OutputPin::initPin(const char *msg, brain_pin_e brainPin, pin_output_mode_e *outputMode) { #if EFI_GPIO_HARDWARE || defined(__DOXYGEN__) if (brainPin == GPIO_UNASSIGNED) return; ioportid_t port = getHwPort(msg, brainPin); int pin = getHwPin(msg, brainPin); /** * This method is used for digital GPIO pins only, for peripheral pins see mySetPadMode */ if (port == GPIO_NULL) { // that's for GRIO_NONE this->port = port; return; } assertOMode(*outputMode); iomode_t mode = (*outputMode == OM_DEFAULT || *outputMode == OM_INVERTED) ? PAL_MODE_OUTPUT_PUSHPULL : PAL_MODE_OUTPUT_OPENDRAIN; /** * @brief Initialize the hardware output pin while also assigning it a logical name */ if (this->port != NULL && (this->port != port || this->pin != pin)) { /** * here we check if another physical pin is already assigned to this logical output */ // todo: need to clear '&outputs' in io_pins.c warning(CUSTOM_OBD_PIN_CONFLICT, "outputPin [%s] already assigned to %x%d", msg, this->port, this->pin); engine->withError = true; return; } this->currentLogicValue = INITIAL_PIN_STATE; this->port = port; this->pin = pin; efiSetPadMode(msg, brainPin, mode); setDefaultPinState(outputMode); #endif /* EFI_GPIO_HARDWARE */ }