[core] Migrate to GPIO-based pin numbering

This commit is contained in:
Kuba Szczodrzyński
2023-03-20 21:28:43 +01:00
parent 201db4668e
commit c51bf0b7db
67 changed files with 3212 additions and 1849 deletions

View File

@@ -32,25 +32,43 @@ void runPeriodicTasks() {
#endif
}
/**
* @brief Check if pin is invalid (too low or too high).
*/
bool pinInvalid(pin_size_t pinNumber) {
#ifdef PINS_COUNT
return pinNumber < 0 || pinNumber >= PINS_COUNT;
#else
return false;
#endif
}
/**
* @brief Get PinInfo struct for the specified number.
* Returns NULL if pin number is invalid.
*/
PinInfo *pinInfo(pin_size_t pinNumber) {
if (pinInvalid(pinNumber))
if (pinNumber < 0 || pinNumber > PINS_GPIO_MAX)
return NULL;
return &(pinTable[pinNumber]);
return lt_arduino_pin_gpio_map[pinNumber];
}
/**
* @brief Get PinInfo struct for the specified index.
* Returns NULL if pin index is invalid.
*/
PinInfo *pinByIndex(uint32_t index) {
if (index < 0 || index >= PINS_COUNT)
return NULL;
return &(lt_arduino_pin_info_list[index]);
}
/**
* @brief Find PinInfo struct by GPIO number.
* Returns NULL if not found.
*/
PinInfo *pinByGpio(uint32_t gpio) {
for (uint32_t i = 0; i < PINS_COUNT; i++) {
if (lt_arduino_pin_info_list[i].gpio == gpio)
return &(lt_arduino_pin_info_list[i]);
}
return NULL;
}
/**
* @brief Get index of PinInfo in the global pin info table.
*/
uint32_t pinIndex(PinInfo *pin) {
return pin - lt_arduino_pin_info_list;
}
/**

View File

@@ -40,7 +40,8 @@ typedef struct {
uint32_t mode;
} PinInfo;
extern PinInfo pinTable[];
extern PinInfo lt_arduino_pin_info_list[PINS_COUNT];
extern PinInfo *lt_arduino_pin_gpio_map[PINS_GPIO_MAX + 1];
// Custom Wiring methods
@@ -54,8 +55,10 @@ bool startMainTask(void);
void mainTask(const void *arg); // implemented in main.cpp
void runPeriodicTasks(); // implemented in wiring_custom.c
bool pinInvalid(pin_size_t pinNumber);
PinInfo *pinInfo(pin_size_t pinNumber);
PinInfo *pinByIndex(uint32_t index);
PinInfo *pinByGpio(uint32_t gpio);
uint32_t pinIndex(PinInfo *pin);
bool pinSupported(PinInfo *pin, uint32_t mask);
bool pinEnabled(PinInfo *pin, uint32_t mask);
bool pinIsOutput(PinInfo *pin);