rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
io_pins.cpp
Go to the documentation of this file.
1/**
2 * @file io_pins.cpp
3 * @brief his file is about general input/output utility methods, not much EFI-specifics
4 *
5 *
6 * @date Jan 24, 2013
7 * @author Andrey Belomutskiy, (c) 2012-2020
8 */
9
10#include "pch.h"
11
12#if EFI_PROD_CODE
13
14#include "gpio/gpio_ext.h"
15
16#include "status_loop.h"
17#include "console_io.h"
18#endif /* EFI_PROD_CODE */
19
21#if EFI_PROD_CODE
22 /* input with pull up, is it safe? */
23 iomode_t mode = PAL_STM32_MODE_INPUT | PAL_STM32_PUPDR_PULLUP;
24
25 if (brain_pin_is_onchip(brainPin)) {
26 ioportid_t port = getHwPort("unused", brainPin);
27 ioportmask_t pin = getHwPin("unused", brainPin);
28
29 /* input with pull up, is it safe?
30 * todo: shall we reuse 'default state' constants with board.h?
31 * */
32 palSetPadMode(port, pin, mode);
33 palWritePad(port, pin, 0);
34 }
35 #if (BOARD_EXT_GPIOCHIPS > 0)
36 else {
37 gpiochips_setPadMode(brainPin, mode);
38 }
39 #endif
40#endif /* EFI_PROD_CODE */
41
42 brain_pin_markUnused(brainPin);
43}
44
45/**
46 * This method would set an error condition if pin is already used
47 */
48void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode) {
49 if (!isBrainPinValid(brainPin)) {
50 // No pin configured, nothing to do here.
51 return;
52 }
53
54 bool wasUsed = brain_pin_markUsed(brainPin, msg);
55
56 if (!wasUsed) {
58 }
59}
60
61void efiSetPadModeWithoutOwnershipAcquisition(const char *msg, brain_pin_e brainPin, iomode_t mode) {
62#if EFI_PROD_CODE
63 /*check if on-chip pin or external */
64 if (brain_pin_is_onchip(brainPin)) {
65 /* on-chip */
66 ioportid_t port = getHwPort(msg, brainPin);
67 ioportmask_t pin = getHwPin(msg, brainPin);
68 /* paranoid */
69 if (!port)
70 return;
71
72 palSetPadMode(port, pin, mode);
73 }
74 #if (BOARD_EXT_GPIOCHIPS > 0)
75 else {
76 gpiochips_setPadMode(brainPin, mode);
77 }
78 #endif
79
80#endif /* EFI_PROD_CODE */
81}
82
83#if EFI_PROD_CODE
84
85#if EFI_ENGINE_CONTROL
87#endif /* EFI_ENGINE_CONTROL */
88
90 if (!isBrainPinValid(pin))
91 return false;
93 return palReadPad(getHwPort("readPin", pin), getHwPin("readPin", pin));
94 #if (BOARD_EXT_GPIOCHIPS > 0)
95 else if (brain_pin_is_ext(pin))
96 return (gpiochips_readPad(pin) > 0);
97 #endif
98
99 /* incorrect pin */
100 return false;
101}
102
104 switch (mode) {
105 case PI_PULLUP:
106 case PI_INVERTED_PULLUP:
107 return PAL_MODE_INPUT_PULLUP;
108 case PI_PULLDOWN:
109 case PI_INVERTED_PULLDOWN:
110 return PAL_MODE_INPUT_PULLDOWN;
111 case PI_DEFAULT:
112 case PI_INVERTED_DEFAULT:
113 default:
114 return PAL_MODE_INPUT;
115 }
116}
117
118void writePad(const char *msg, brain_pin_e pin, int bit) {
119 palWritePad(getHwPort(msg, pin), getHwPin(msg, pin), bit);
120}
121
122#else /* EFI_PROD_CODE */
123
124// This has been made global so we don't need to worry about efiReadPin having access the object
125// we store it in, every time we need to use efiReadPin.
126bool mockPinStates[BRAIN_PIN_COUNT];
127
129 return mockPinStates[static_cast<int>(pin)];
130}
131
133 mockPinStates[static_cast<int>(pin)] = state;
134}
135
136#endif /* EFI_PROD_CODE */
137
139 return ((mode == PI_INVERTED_DEFAULT) ||
140 (mode == PI_INVERTED_PULLUP) ||
141 (mode == PI_INVERTED_PULLDOWN));
142}
143
int gpiochips_readPad(brain_pin_e pin)
Get value to gpio of gpiochip.
Definition core.cpp:363
int gpiochips_setPadMode(brain_pin_e pin, iomode_t mode)
Set pin mode of gpiochip.
Definition core.cpp:317
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin)
ioportmask_t getHwPin(const char *msg, brain_pin_e brainPin)
uint32_t ioportmask_t
Digital I/O port sized unsigned type.
Definition hal_pal_lld.h:78
GPIO_TypeDef * ioportid_t
Port Identifier.
uint32_t iomode_t
Digital I/O modes.
Definition hal_pal_lld.h:83
void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode)
Definition io_pins.cpp:48
iomode_t getInputMode(pin_input_mode_e mode)
Definition io_pins.cpp:103
bool efiIsInputPinInverted(pin_input_mode_e mode)
Definition io_pins.cpp:138
bool efiReadPin(brain_pin_e pin)
Definition io_pins.cpp:89
bool mockPinStates[BRAIN_PIN_COUNT]
Definition io_pins.cpp:126
void efiSetPadUnused(brain_pin_e brainPin)
Definition io_pins.cpp:20
void setMockState(brain_pin_e pin, bool state)
Definition io_pins.cpp:132
void efiSetPadModeWithoutOwnershipAcquisition(const char *msg, brain_pin_e brainPin, iomode_t mode)
Definition io_pins.cpp:61
void writePad(const char *msg, brain_pin_e pin, int bit)
Definition io_pins.cpp:118
Main logic header.
bool brain_pin_markUsed(Gpio brainPin, const char *msg)
bool brain_pin_is_onchip(brain_pin_e brainPin)
void brain_pin_markUnused(brain_pin_e brainPin)
bool isBrainPinValid(brain_pin_e brainPin)
bool brain_pin_is_ext(brain_pin_e brainPin)
pin_input_mode_e
state("state", SensorCategory.SENSOR_INPUTS, FieldType.INT8, 1871, 1.0, -1.0, -1.0, "")
brain_pin_e pin
Definition stm32_adc.cpp:15