rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
gpio_ext.h
Go to the documentation of this file.
1/*
2 * @file gpio_ext.h
3 *
4 * Abstraction layer definitions for extrenal gpios
5 *
6 * @date Mar 8, 2019
7 * @author Andrey Gusakov, (c) 2019
8 */
9
10#pragma once
11
12#if EFI_PROD_CODE
13#include "board.h"
14#endif /* EFI_PROD_CODE */
15
16#include "rusefi_enums.h"
17
18/*==========================================================================*/
19/* Checks */
20/*==========================================================================*/
21
22struct GpioChip {
23 virtual int init() = 0;
24
25 // These functions need not be implemented if not supported by the particular chip.
26 /* pin argument is pin number within gpio chip, not a global number */
27 virtual int setPadMode(size_t /*pin*/, iomode_t /*mode*/) { return -1; }
28 virtual int writePad(size_t /*pin*/, int /*value*/) { return -1; }
29 virtual int readPad(size_t /*pin*/) { return -1; }
30 virtual int setPadPWM(size_t /*pin*/, float /*frequency*/, float /*duty*/) { return -1; }
31 virtual brain_pin_diag_e getDiag(size_t /*pin*/) { return PIN_OK; }
32 virtual int deinit() { return 0; }
33 virtual void debug() { }
34
35 /* chip needs reinitialization due to some critical issue */
36 bool need_init = 0;
37 int init_cnt = 0;
38 int alive_cnt = 0;
39
41};
42
46
47/* register/unregister GPIO chip */
48int gpiochip_register(brain_pin_e base, const char *name, GpioChip& chip, size_t size);
49
50/* Set individual names for pins */
51int gpiochips_setPinNames(brain_pin_e base, const char **names);
52
53/* gpio extenders subsystem init */
54int gpiochips_init(void);
55
57int gpiochips_writePad(brain_pin_e pin, int value);
60
61void gpiochips_debug();
62
63#if EFI_PROD_CODE
64hardware_pwm* gpiochip_tryInitPwm(const char* msg, brain_pin_e pin, float frequency, float duty);
65#endif
66
67/* return total number of external gpios */
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
const char * gpiochips_getChipName(brain_pin_e pin)
Get external chip name.
Definition core.cpp:148
void gpiochips_debug()
Definition core.cpp:413
int gpiochips_init(void)
Init all registered gpiochips.
Definition core.cpp:284
int gpiochips_writePad(brain_pin_e pin, int value)
Set value to gpio of gpiochip.
Definition core.cpp:336
int gpiochips_get_total_pins(void)
Get total pin count allocated for external gpio chips.
Definition core.cpp:396
hardware_pwm * gpiochip_tryInitPwm(const char *msg, brain_pin_e pin, float frequency, float duty)
Try to init PWM on given pin.
Definition core.cpp:439
const char * gpiochips_getPinName(brain_pin_e pin)
Get external chip port name.
Definition core.cpp:162
int gpiochip_register(brain_pin_e base, const char *name, GpioChip &chip, size_t size)
Register gpiochip.
Definition core.cpp:186
int gpiochips_setPinNames(brain_pin_e base, const char **names)
Set pins names for registered gpiochip.
Definition core.cpp:266
brain_pin_diag_e gpiochips_getDiag(brain_pin_e pin)
Get diagnostic for given gpio.
Definition core.cpp:381
int gpiochips_getPinOffset(brain_pin_e pin)
Definition core.cpp:132
uint32_t iomode_t
Digital I/O modes.
Definition hal_pal_lld.h:83
static float frequency
Definition init_flex.cpp:21
Fundamental rusEFI enumerable types live here.
brain_pin_diag_e
brain_pin_e pin
Definition stm32_adc.cpp:15
virtual int setPadPWM(size_t, float, float)
Definition gpio_ext.h:30
bool need_init
Definition gpio_ext.h:36
int statusCode
Definition gpio_ext.h:40
virtual brain_pin_diag_e getDiag(size_t)
Definition gpio_ext.h:31
virtual int writePad(size_t, int)
Definition gpio_ext.h:28
virtual int readPad(size_t)
Definition gpio_ext.h:29
virtual int deinit()
Definition gpio_ext.h:32
virtual int init()=0
int init_cnt
Definition gpio_ext.h:37
virtual void debug()
Definition gpio_ext.h:33
int alive_cnt
Definition gpio_ext.h:38
virtual int setPadMode(size_t, iomode_t)
Definition gpio_ext.h:27
static float duty
composite packet size