Remove old HAL components and refactored GPS-related code (#583)
- Added generic GPS/GNSS support with device detection, configuration, and persistent settings. - Improved device and module lifecycle management. - Added flexible filesystem locking support for displays and storage. - Improved display-idle and keyboard backlight handling. - Updated architecture, driver, module, testing, and licensing documentation. - Removed old HAL device and related code.
This commit is contained in:
committed by
GitHub
parent
29e80cfd65
commit
2a2558b29a
@@ -1,45 +0,0 @@
|
||||
#include "tt_gps.h"
|
||||
#include <Tactility/service/gps/GpsService.h>
|
||||
|
||||
using namespace tt::service;
|
||||
|
||||
extern "C" {
|
||||
|
||||
bool tt_gps_has_coordinates() {
|
||||
auto service = gps::findGpsService();
|
||||
return service != nullptr && service->hasCoordinates();
|
||||
}
|
||||
|
||||
bool tt_gps_get_coordinates(
|
||||
float* longitude,
|
||||
float* latitude,
|
||||
float* speed,
|
||||
float* course,
|
||||
int* day,
|
||||
int* month,
|
||||
int* year
|
||||
) {
|
||||
auto service = gps::findGpsService();
|
||||
|
||||
if (service == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
minmea_sentence_rmc rmc;
|
||||
|
||||
if (!service->getCoordinates(rmc)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
*longitude = minmea_tocoord(&rmc.longitude);
|
||||
*latitude = minmea_tocoord(&rmc.latitude);
|
||||
*speed = minmea_tocoord(&rmc.speed);
|
||||
*course = minmea_tocoord(&rmc.course);
|
||||
*day = rmc.date.day;
|
||||
*month = rmc.date.month;
|
||||
*year = rmc.date.year;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
#include "tt_hal_device.h"
|
||||
|
||||
#include <tactility/check.h>
|
||||
|
||||
#include <tactility/hal/Device.h>
|
||||
|
||||
static tt::hal::Device::Type toTactilityDeviceType(TtDeviceType type) {
|
||||
switch (type) {
|
||||
case DEVICE_TYPE_I2C:
|
||||
return tt::hal::Device::Type::I2c;
|
||||
case DEVICE_TYPE_DISPLAY:
|
||||
return tt::hal::Device::Type::Display;
|
||||
case DEVICE_TYPE_TOUCH:
|
||||
return tt::hal::Device::Type::Touch;
|
||||
case DEVICE_TYPE_SDCARD:
|
||||
return tt::hal::Device::Type::SdCard;
|
||||
case DEVICE_TYPE_KEYBOARD:
|
||||
return tt::hal::Device::Type::Keyboard;
|
||||
case DEVICE_TYPE_POWER:
|
||||
return tt::hal::Device::Type::Power;
|
||||
case DEVICE_TYPE_GPS:
|
||||
return tt::hal::Device::Type::Gps;
|
||||
default:
|
||||
check(false, "Device::Type not supported");
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
bool tt_hal_device_find(TtDeviceType type, DeviceId* deviceIds, uint16_t* count, uint16_t maxCount) {
|
||||
assert(maxCount > 0);
|
||||
|
||||
int16_t currentIndex = -1;
|
||||
uint16_t maxIndex = maxCount - 1;
|
||||
|
||||
findDevices<tt::hal::Device>(toTactilityDeviceType(type), [&](const auto& device) {
|
||||
currentIndex++;
|
||||
deviceIds[currentIndex] = device->getId();
|
||||
// Continue if there is storage capacity left
|
||||
return currentIndex < maxIndex;
|
||||
});
|
||||
|
||||
*count = currentIndex + 1;
|
||||
|
||||
return currentIndex >= 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
#include "tt_hal_display.h"
|
||||
|
||||
#include <tactility/check.h>
|
||||
|
||||
#include <tactility/hal/Device.h>
|
||||
#include <Tactility/hal/display/DisplayDevice.h>
|
||||
#include <Tactility/hal/display/DisplayDriver.h>
|
||||
|
||||
static ColorFormat toColorFormat(tt::hal::display::ColorFormat format) {
|
||||
switch (format) {
|
||||
case tt::hal::display::ColorFormat::Monochrome:
|
||||
return COLOR_FORMAT_MONOCHROME;
|
||||
case tt::hal::display::ColorFormat::BGR565:
|
||||
return COLOR_FORMAT_BGR565;
|
||||
case tt::hal::display::ColorFormat::BGR565Swapped:
|
||||
return COLOR_FORMAT_BGR565_SWAPPED;
|
||||
case tt::hal::display::ColorFormat::RGB565:
|
||||
return COLOR_FORMAT_RGB565;
|
||||
case tt::hal::display::ColorFormat::RGB565Swapped:
|
||||
return COLOR_FORMAT_RGB565_SWAPPED;
|
||||
case tt::hal::display::ColorFormat::RGB888:
|
||||
return COLOR_FORMAT_RGB888;
|
||||
default:
|
||||
check(false, "ColorFormat not supported");
|
||||
}
|
||||
}
|
||||
|
||||
struct DriverWrapper {
|
||||
std::shared_ptr<tt::hal::display::DisplayDriver> driver;
|
||||
DriverWrapper(std::shared_ptr<tt::hal::display::DisplayDriver> driver) : driver(driver) {}
|
||||
};
|
||||
|
||||
static std::shared_ptr<tt::hal::display::DisplayDevice> findValidDisplayDevice(tt::hal::Device::Id id) {
|
||||
auto device = tt::hal::findDevice(id);
|
||||
if (device == nullptr || device->getType() != tt::hal::Device::Type::Display) {
|
||||
return nullptr;
|
||||
}
|
||||
return std::reinterpret_pointer_cast<tt::hal::display::DisplayDevice>(device);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
bool tt_hal_display_driver_supported(DeviceId id) {
|
||||
auto display = findValidDisplayDevice(id);
|
||||
return display != nullptr && display->supportsDisplayDriver();
|
||||
}
|
||||
|
||||
DisplayDriverHandle tt_hal_display_driver_alloc(DeviceId id) {
|
||||
auto display = findValidDisplayDevice(id);
|
||||
assert(display->supportsDisplayDriver());
|
||||
return new DriverWrapper(display->getDisplayDriver());
|
||||
}
|
||||
|
||||
void tt_hal_display_driver_free(DisplayDriverHandle handle) {
|
||||
auto wrapper = static_cast<DriverWrapper*>(handle);
|
||||
delete wrapper;
|
||||
}
|
||||
|
||||
bool tt_hal_display_driver_lock(DisplayDriverHandle handle, TickType_t timeout) {
|
||||
// TODO: re-implement with SPI lock
|
||||
return true;
|
||||
}
|
||||
|
||||
void tt_hal_display_driver_unlock(DisplayDriverHandle handle) {
|
||||
// TODO: re-implement with SPI lock
|
||||
}
|
||||
|
||||
ColorFormat tt_hal_display_driver_get_colorformat(DisplayDriverHandle handle) {
|
||||
auto wrapper = static_cast<DriverWrapper*>(handle);
|
||||
return toColorFormat(wrapper->driver->getColorFormat());
|
||||
}
|
||||
|
||||
uint16_t tt_hal_display_driver_get_pixel_width(DisplayDriverHandle handle) {
|
||||
auto wrapper = static_cast<DriverWrapper*>(handle);
|
||||
return wrapper->driver->getPixelWidth();
|
||||
}
|
||||
|
||||
uint16_t tt_hal_display_driver_get_pixel_height(DisplayDriverHandle handle) {
|
||||
auto wrapper = static_cast<DriverWrapper*>(handle);
|
||||
return wrapper->driver->getPixelHeight();
|
||||
}
|
||||
|
||||
void tt_hal_display_driver_draw_bitmap(DisplayDriverHandle handle, int xStart, int yStart, int xEnd, int yEnd, const void* pixelData) {
|
||||
auto wrapper = static_cast<DriverWrapper*>(handle);
|
||||
wrapper->driver->drawBitmap(xStart, yStart, xEnd, yEnd, pixelData);
|
||||
}
|
||||
|
||||
uint8_t tt_hal_display_driver_get_frame_buffers(DisplayDriverHandle handle, void* outBuffers[2]) {
|
||||
auto wrapper = static_cast<DriverWrapper*>(handle);
|
||||
return wrapper->driver->getFrameBuffers(outBuffers);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
#include "tt_hal_touch.h"
|
||||
|
||||
#include <tactility/hal/Device.h>
|
||||
#include "Tactility/hal/touch/TouchDevice.h"
|
||||
#include "Tactility/hal/touch/TouchDriver.h"
|
||||
|
||||
struct DriverWrapper {
|
||||
std::shared_ptr<tt::hal::touch::TouchDriver> driver;
|
||||
DriverWrapper(std::shared_ptr<tt::hal::touch::TouchDriver> driver) : driver(driver) {}
|
||||
};
|
||||
|
||||
static std::shared_ptr<tt::hal::touch::TouchDevice> findValidTouchDevice(tt::hal::Device::Id id) {
|
||||
auto device = tt::hal::findDevice(id);
|
||||
if (device == nullptr || device->getType() != tt::hal::Device::Type::Touch) {
|
||||
return nullptr;
|
||||
}
|
||||
return std::reinterpret_pointer_cast<tt::hal::touch::TouchDevice>(device);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
bool tt_hal_touch_driver_supported(DeviceId id) {
|
||||
auto touch = findValidTouchDevice(id);
|
||||
return touch != nullptr && touch->supportsTouchDriver();
|
||||
}
|
||||
|
||||
TouchDriverHandle tt_hal_touch_driver_alloc(DeviceId id) {
|
||||
auto touch = findValidTouchDevice(id);
|
||||
assert(touch->supportsTouchDriver());
|
||||
return new DriverWrapper(touch->getTouchDriver());
|
||||
}
|
||||
|
||||
void tt_hal_touch_driver_free(TouchDriverHandle handle) {
|
||||
DriverWrapper* wrapper = static_cast<DriverWrapper*>(handle);
|
||||
delete wrapper;
|
||||
}
|
||||
|
||||
bool tt_hal_touch_driver_get_touched_points(TouchDriverHandle handle, uint16_t* x, uint16_t* y, uint16_t* strength, uint8_t* pointCount, uint8_t maxPointCount) {
|
||||
DriverWrapper* wrapper = static_cast<DriverWrapper*>(handle);
|
||||
return wrapper->driver->getTouchedPoints(x, y, strength, pointCount, maxPointCount);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
#include "tt_hal_uart.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
extern "C" {
|
||||
|
||||
size_t tt_hal_uart_get_count() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool tt_hal_uart_get_name(size_t index, char* name, size_t nameSizeLimit) {
|
||||
return false;
|
||||
}
|
||||
|
||||
UartHandle tt_hal_uart_alloc(size_t index) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void tt_hal_uart_free(UartHandle handle) {
|
||||
}
|
||||
|
||||
bool tt_hal_uart_start(UartHandle handle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool tt_hal_uart_is_started(UartHandle handle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool tt_hal_uart_stop(UartHandle handle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t tt_hal_uart_read_bytes(UartHandle handle, char* buffer, size_t bufferSize, TickType_t timeout) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool tt_hal_uart_read_byte(UartHandle handle, char* output, TickType_t timeout) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t tt_hal_uart_write_bytes(UartHandle handle, const char* buffer, size_t bufferSize, TickType_t timeout) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t tt_hal_uart_available(UartHandle handle) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool tt_hal_uart_set_baud_rate(UartHandle handle, size_t baud_rate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t tt_hal_uart_get_baud_rate(UartHandle handle) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tt_hal_uart_flush_input(UartHandle handle) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,13 +5,7 @@
|
||||
#include "tt_app_fileselection.h"
|
||||
#include "tt_app_selectiondialog.h"
|
||||
#include "tt_bundle.h"
|
||||
#include "tt_gps.h"
|
||||
#include "tt_hal_device.h"
|
||||
#include "tt_hal_display.h"
|
||||
#include "tt_hal_touch.h"
|
||||
#include "tt_hal_uart.h"
|
||||
#include <tt_lock.h>
|
||||
#include "tt_lvgl.h"
|
||||
#include "tt_lvgl_keyboard.h"
|
||||
#include "tt_lvgl_spinner.h"
|
||||
#include "tt_lvgl_toolbar.h"
|
||||
@@ -299,42 +293,6 @@ const esp_elfsym main_symbols[] {
|
||||
ESP_ELFSYM_EXPORT(tt_bundle_put_bool),
|
||||
ESP_ELFSYM_EXPORT(tt_bundle_put_int32),
|
||||
ESP_ELFSYM_EXPORT(tt_bundle_put_string),
|
||||
ESP_ELFSYM_EXPORT(tt_gps_has_coordinates),
|
||||
ESP_ELFSYM_EXPORT(tt_gps_get_coordinates),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_device_find),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_display_driver_alloc),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_display_driver_draw_bitmap),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_display_driver_free),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_display_driver_get_colorformat),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_display_driver_get_pixel_height),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_display_driver_get_pixel_width),
|
||||
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_display_driver_get_frame_buffers),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_supported),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_alloc),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_free),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_touch_driver_get_touched_points),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_get_count),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_get_name),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_alloc),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_free),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_start),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_is_started),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_stop),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_read_bytes),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_read_byte),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_write_bytes),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_available),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_set_baud_rate),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_get_baud_rate),
|
||||
ESP_ELFSYM_EXPORT(tt_hal_uart_flush_input),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_is_started),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_lock),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_unlock),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_start),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_stop),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_software_keyboard_show),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_software_keyboard_hide),
|
||||
ESP_ELFSYM_EXPORT(tt_lvgl_software_keyboard_is_enabled),
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#include <Tactility/lvgl/Lvgl.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
|
||||
extern "C" {
|
||||
|
||||
bool tt_lvgl_is_started() {
|
||||
return tt::lvgl::isStarted();
|
||||
}
|
||||
|
||||
void tt_lvgl_start() {
|
||||
tt::lvgl::start();
|
||||
}
|
||||
|
||||
void tt_lvgl_stop() {
|
||||
tt::lvgl::stop();
|
||||
}
|
||||
|
||||
bool tt_lvgl_lock(TickType_t timeout) {
|
||||
return tt::lvgl::getSyncLock()->lock(timeout);
|
||||
}
|
||||
|
||||
void tt_lvgl_unlock() {
|
||||
tt::lvgl::getSyncLock()->unlock();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user