#include "devices/Display.h"
#include "devices/TpagerEncoder.h"
#include "devices/TpagerKeyboard.h"
#include "devices/TpagerPower.h"
#include <tactility/device.h>

#include <Tactility/hal/Configuration.h>
#include <Bq25896.h>
#include <Drv2605.h>

bool tpagerInit();

using namespace tt::hal;

static DeviceVector createDevices() {
    auto* i2c = device_find_by_name("i2c0");
    auto bq27220 = std::make_shared<Bq27220>(i2c);
    auto power = std::make_shared<TpagerPower>(bq27220);

    auto tca8418 = std::make_shared<Tca8418>(i2c);
    auto keyboard = std::make_shared<TpagerKeyboard>(tca8418);

    return std::vector<std::shared_ptr<tt::hal::Device>> {
        tca8418,
        std::make_shared<Bq25896>(i2c),
        bq27220,
        std::make_shared<Drv2605>(i2c),
        power,
        createDisplay(),
        keyboard,
        std::make_shared<TpagerEncoder>()
    };
}

extern const Configuration hardwareConfiguration = {
    .initBoot = tpagerInit,
    .createDevices = createDevices
};
