Tab5 camera + other stuff (#558)

* Tab5 camera + other stuff

Tab5 camera driver - SC2356
Custom SliderBox widget - slider with plus and minus buttons + value label and snapping
Rtc Time service + rtc api
Sdk release - only include drivers built for that specific target, eg: sc2356 driver is mipi / p4 only.
No more hardcoded manual sdk cmakelists
New function to find device by compatible string match. no more static cast bool wildness when trying to match a single device (like M5Stack PaperS3 for example)

* feedback + fixes

Fixed external app user data path.
fix(gui): block app teardown until onHide() completes, preventing ELF unload racing a still-running app
added camera device type and api

* drain the snake sssem

---------

Co-authored-by: Ken Van Hoeylandt <git@kenvanhoeylandt.net>
This commit is contained in:
Shadowtrance
2026-07-10 16:45:03 +10:00
committed by GitHub
parent 16a61a087c
commit 7a7f09be35
47 changed files with 1894 additions and 83 deletions
+5 -13
View File
@@ -2,6 +2,7 @@
#pragma once
#include <stdint.h>
#include <tactility/drivers/rtc.h>
#include <tactility/error.h>
struct Device;
@@ -15,30 +16,21 @@ struct Bm8563Config {
uint8_t address;
};
struct Bm8563DateTime {
uint16_t year; // 20002199
uint8_t month; // 112
uint8_t day; // 131
uint8_t hour; // 023
uint8_t minute; // 059
uint8_t second; // 059
};
/**
* Read the current date and time from the RTC.
* @param[in] device bm8563 device
* @param[out] dt Pointer to Bm8563DateTime to populate
* @param[out] dt Pointer to RtcDateTime to populate
* @return ERROR_NONE on success
*/
error_t bm8563_get_datetime(struct Device* device, struct Bm8563DateTime* dt);
error_t bm8563_get_datetime(struct Device* device, struct RtcDateTime* dt);
/**
* Write the date and time to the RTC.
* @param[in] device bm8563 device
* @param[in] dt Pointer to Bm8563DateTime to write (year must be 20002199)
* @param[in] dt Pointer to RtcDateTime to write (year must be 20002199)
* @return ERROR_NONE on success, ERROR_INVALID_ARGUMENT if any field is out of range
*/
error_t bm8563_set_datetime(struct Device* device, const struct Bm8563DateTime* dt);
error_t bm8563_set_datetime(struct Device* device, const struct RtcDateTime* dt);
#ifdef __cplusplus
}
+9 -4
View File
@@ -52,7 +52,7 @@ static error_t stop(Device* device) {
extern "C" {
error_t bm8563_get_datetime(Device* device, Bm8563DateTime* dt) {
error_t bm8563_get_datetime(Device* device, RtcDateTime* dt) {
auto* i2c_controller = device_get_parent(device);
auto address = GET_CONFIG(device)->address;
@@ -78,7 +78,7 @@ error_t bm8563_get_datetime(Device* device, Bm8563DateTime* dt) {
return ERROR_NONE;
}
error_t bm8563_set_datetime(Device* device, const Bm8563DateTime* dt) {
error_t bm8563_set_datetime(Device* device, const RtcDateTime* dt) {
if (dt->year < 2000 || dt->year > 2199 ||
dt->month < 1 || dt->month > 12 ||
dt->day < 1 || dt->day > 31 ||
@@ -104,13 +104,18 @@ error_t bm8563_set_datetime(Device* device, const Bm8563DateTime* dt) {
return i2c_controller_write_register(i2c_controller, address, REG_SECONDS, buf, sizeof(buf), I2C_TIMEOUT_TICKS);
}
RtcApi bm8563_rtc_api = {
.get_time = bm8563_get_datetime,
.set_time = bm8563_set_datetime
};
Driver bm8563_driver = {
.name = "bm8563",
.compatible = (const char*[]) { "belling,bm8563", nullptr },
.start_device = start,
.stop_device = stop,
.api = nullptr,
.device_type = nullptr,
.api = &bm8563_rtc_api,
.device_type = &RTC_TYPE,
.owner = &bm8563_module,
.internal = nullptr
};
+1 -3
View File
@@ -21,13 +21,11 @@ static error_t stop() {
return ERROR_NONE;
}
extern const ModuleSymbol bm8563_module_symbols[];
Module bm8563_module = {
.name = "bm8563",
.start = start,
.stop = stop,
.symbols = bm8563_module_symbols,
.symbols = nullptr,
.internal = nullptr
};
-9
View File
@@ -1,9 +0,0 @@
// SPDX-License-Identifier: Apache-2.0
#include <drivers/bm8563.h>
#include <tactility/module.h>
const struct ModuleSymbol bm8563_module_symbols[] = {
DEFINE_MODULE_SYMBOL(bm8563_get_datetime),
DEFINE_MODULE_SYMBOL(bm8563_set_datetime),
MODULE_SYMBOL_TERMINATOR
};