[core] Migrate to GPIO-based pin numbering
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user