#include #include #include #include #include #include #include #include #include #include #include #include namespace tt::hal { static const auto LOGGER = Logger("Hal"); void registerDevices(const Configuration& configuration) { LOGGER.info("Registering devices"); auto devices = configuration.createDevices(); for (auto& device : devices) { registerDevice(device); // Register attached devices if (device->getType() == Device::Type::Display) { const auto display = std::static_pointer_cast(device); assert(display != nullptr); const std::shared_ptr touch = display->getTouchDevice(); if (touch != nullptr) { registerDevice(touch); } } } } static void startDisplays() { LOGGER.info("Starting displays & touch"); auto displays = hal::findDevices(Device::Type::Display); for (auto& display : displays) { LOGGER.info("{} starting", display->getName()); if (!display->start()) { LOGGER.error("{} start failed", display->getName()); } else { LOGGER.info("{} started", display->getName()); if (display->supportsBacklightDuty()) { LOGGER.info("Setting backlight"); display->setBacklightDuty(0); } auto touch = display->getTouchDevice(); if (touch != nullptr) { LOGGER.info("{} starting", touch->getName()); if (!touch->start()) { LOGGER.error("{} start failed", touch->getName()); } else { LOGGER.info("{} started", touch->getName()); } } } } } void init(const Configuration& configuration) { kernel::publishSystemEvent(kernel::SystemEvent::BootInitHalBegin); check(spi::init(configuration.spi), "SPI init failed"); check(uart::init(configuration.uart), "UART init failed"); if (configuration.initBoot != nullptr) { check(configuration.initBoot(), "Init boot failed"); } registerDevices(configuration); sdcard::mountAll(); // Warning: This needs to happen BEFORE displays are initialized on the SPI bus startDisplays(); // Warning: SPI displays need to start after SPI SD cards are mounted kernel::publishSystemEvent(kernel::SystemEvent::BootInitHalEnd); } const Configuration* getConfiguration() { return tt::getConfiguration()->hardware; } } // namespace