Tactility/TactilityC/Source/tt_hal_gpio.cpp
Ken Van Hoeylandt 399dca5e14
Partial reimplementation of TactilityC GPIO (#469)
* **New Features**
  * Added a GPIO hardware abstraction layer for reading pin levels from applications.
  * Applications can now query the number of available GPIO pins so they can adapt to different devices.
* **Chores**
  * Integrations updated so GPIO capabilities are discoverable and exported to running applications.
2026-01-31 12:34:45 +01:00

40 lines
1.1 KiB
C++

#include "tt_hal_gpio.h"
#include <Tactility/hal/gpio/Gpio.h>
#include <tactility/device.h>
#include <tactility/drivers/gpio_controller.h>
extern "C" {
using namespace tt::hal;
static Device* find_first_gpio_controller() {
Device* device_result = nullptr;
for_each_device_of_type(&GPIO_CONTROLLER_TYPE, &device_result, [](Device* device, void* context) {
if (device_is_ready(device)) {
auto** device_result_ptr = static_cast<Device**>(context);
*device_result_ptr = device;
return false;
}
return true;
});
return device_result;
}
bool tt_hal_gpio_get_level(GpioPin pin) {
Device* device_result = find_first_gpio_controller();
if (device_result == nullptr) return false;
bool pin_state = false;
if (!gpio_controller_get_level(device_result, pin, &pin_state)) return false;
return pin_state;
}
int tt_hal_gpio_get_pin_count() {
Device* device_result = find_first_gpio_controller();
if (device_result == nullptr) return 0;
uint32_t pin_count = 0;
if (!gpio_controller_get_pin_count(device_result, &pin_count)) return 0;
return (int)pin_count;
}
}