| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 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 | ||||
| 22 | struct 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 | ||||
| 40 | int statusCode; | |||
| 41 | }; | |||
| 42 | ||||
| 43 | int gpiochips_getPinOffset(brain_pin_e pin); | |||
| 44 | const char *gpiochips_getChipName(brain_pin_e pin); | |||
| 45 | const char *gpiochips_getPinName(brain_pin_e pin); | |||
| 46 | ||||
| 47 | /* register/unregister GPIO chip */ | |||
| 48 | int gpiochip_register(brain_pin_e base, const char *name, GpioChip& chip, size_t size); | |||
| 49 | ||||
| 50 | /* Set individual names for pins */ | |||
| 51 | int gpiochips_setPinNames(brain_pin_e base, const char **names); | |||
| 52 | ||||
| 53 | /* gpio extenders subsystem init */ | |||
| 54 | int gpiochips_init(void); | |||
| 55 | ||||
| 56 | int gpiochips_setPadMode(brain_pin_e pin, iomode_t mode); | |||
| 57 | int gpiochips_writePad(brain_pin_e pin, int value); | |||
| 58 | int gpiochips_readPad(brain_pin_e pin); | |||
| 59 | brain_pin_diag_e gpiochips_getDiag(brain_pin_e pin); | |||
| 60 | ||||
| 61 | void gpiochips_debug(); | |||
| 62 | ||||
| 63 | #if EFI_PROD_CODE | |||
| 64 | hardware_pwm* gpiochip_tryInitPwm(const char* msg, brain_pin_e pin, float frequency, float duty); | |||
| 65 | #endif | |||
| 66 | ||||
| 67 | /* return total number of external gpios */ | |||
| 68 | int gpiochips_get_total_pins(void); | |||
| 69 |