Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions Platforms/PlatformEsp32/Source/drivers/esp32_gpio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ static int get_options(Device* device, gpio_pin_t pin, gpio_flags_t* options) {
return ERROR_NONE;
}

error_t get_pin_count(struct Device* device, uint32_t* count) {
*count = GET_CONFIG(device)->gpioCount;
return ERROR_NONE;
}

static error_t start(Device* device) {
ESP_LOGI(TAG, "start %s", device->name);
return ERROR_NONE;
Expand All @@ -104,7 +109,8 @@ const static GpioControllerApi esp32_gpio_api = {
.set_level = set_level,
.get_level = get_level,
.set_options = set_options,
.get_options = get_options
.get_options = get_options,
.get_pin_count = get_pin_count
};

extern struct Module platform_module;
Expand All @@ -115,7 +121,7 @@ Driver esp32_gpio_driver = {
.startDevice = start,
.stopDevice = stop,
.api = (void*)&esp32_gpio_api,
.deviceType = nullptr,
.deviceType = &GPIO_CONTROLLER_TYPE,
.owner = &platform_module,
.driver_private = nullptr
};
Expand Down
3 changes: 2 additions & 1 deletion TactilityC/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ if (DEFINED ENV{ESP_IDF_VERSION})
INCLUDE_DIRS "Include/"
PRIV_INCLUDE_DIRS "Private/"
REQUIRES lvgl
PRIV_REQUIRES Tactility TactilityCore elf_loader
PRIV_REQUIRES Tactility TactilityCore elf_loader TactilityKernel
)

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
Expand All @@ -28,6 +28,7 @@ else()
target_link_libraries(TactilityC
PRIVATE Tactility
PRIVATE TactilityCore
PRIVATE TactilityKernel
PUBLIC lvgl
)
endif()
Expand Down
30 changes: 30 additions & 0 deletions TactilityC/Include/tt_hal_gpio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#pragma once

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/** Logical GPIO pin identifier used by the HAL. Typically maps to the SoC GPIO number. */
typedef unsigned int GpioPin;
/** Value indicating that no GPIO pin is used/applicable. */
#define GPIO_NO_PIN -1

/** Read the current logic level of a pin.
* The pin should be configured for input or input/output.
* @param[in] pin The pin to read.
* @return true if the level is high, false if low. If the pin is invalid, the
* behavior is implementation-defined and may return false.
*/
bool tt_hal_gpio_get_level(GpioPin pin);

/** Get the number of GPIO pins available on this platform.
* @return The count of valid GPIO pins.
*/
int tt_hal_gpio_get_pin_count();

#ifdef __cplusplus
}
#endif
39 changes: 39 additions & 0 deletions TactilityC/Source/tt_hal_gpio.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#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;
}

}
3 changes: 3 additions & 0 deletions TactilityC/Source/tt_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "tt_hal.h"
#include "tt_hal_device.h"
#include "tt_hal_display.h"
#include "tt_hal_gpio.h"
#include "tt_hal_touch.h"
#include "tt_hal_uart.h"
#include <tt_lock.h>
Expand Down Expand Up @@ -217,6 +218,8 @@ const esp_elfsym main_symbols[] {
ESP_ELFSYM_EXPORT(tt_hal_display_driver_lock),
ESP_ELFSYM_EXPORT(tt_hal_display_driver_unlock),
ESP_ELFSYM_EXPORT(tt_hal_display_driver_supported),
ESP_ELFSYM_EXPORT(tt_hal_gpio_get_level),
ESP_ELFSYM_EXPORT(tt_hal_gpio_get_pin_count),
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_supported),
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_alloc),
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_free),
Expand Down
18 changes: 18 additions & 0 deletions TactilityKernel/Include/tactility/drivers/gpio_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ struct GpioControllerApi {
* @return ERROR_NONE if successful
*/
error_t (*get_options)(struct Device* device, gpio_pin_t pin, gpio_flags_t* options);

/**
* @brief Gets the number of pins supported by the controller.
* @param[in] device the GPIO controller device
* @param[out] count pointer to store the number of pins
* @return ERROR_NONE if successful
*/
error_t (*get_pin_count)(struct Device* device, uint32_t* count);
};

/**
Expand Down Expand Up @@ -83,6 +91,14 @@ error_t gpio_controller_set_options(struct Device* device, gpio_pin_t pin, gpio_
*/
error_t gpio_controller_get_options(struct Device* device, gpio_pin_t pin, gpio_flags_t* options);

/**
* @brief Gets the number of pins supported by the controller.
* @param[in] device the GPIO controller device
* @param[out] count pointer to store the number of pins
* @return ERROR_NONE if successful
*/
error_t gpio_controller_get_pin_count(struct Device* device, uint32_t* count);

/**
* @brief Configures the options for a GPIO pin using a pin configuration structure.
* @param[in] device the GPIO controller device
Expand All @@ -93,6 +109,8 @@ static inline error_t gpio_set_options_config(struct Device* device, const struc
return gpio_controller_set_options(device, config->pin, config->flags);
}

extern const struct DeviceType GPIO_CONTROLLER_TYPE;

#ifdef __cplusplus
}
#endif
7 changes: 7 additions & 0 deletions TactilityKernel/Source/drivers/gpio_controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,11 @@ error_t gpio_controller_get_options(Device* device, gpio_pin_t pin, gpio_flags_t
return GPIO_DRIVER_API(driver)->get_options(device, pin, options);
}

error_t gpio_controller_get_pin_count(struct Device* device, uint32_t* count) {
const auto* driver = device_get_driver(device);
return GPIO_DRIVER_API(driver)->get_pin_count(device, count);
}

const struct DeviceType GPIO_CONTROLLER_TYPE { 0 };

}