Sys-clk-OC: Fixed #41; Erista support added; Manager is deprecated
This commit is contained in:
@@ -17,13 +17,9 @@
|
||||
static inline std::string formatListFreqMhz(std::uint32_t mhz)
|
||||
{
|
||||
if(mhz == 0)
|
||||
{
|
||||
return FREQ_DEFAULT_TEXT;
|
||||
}
|
||||
else if (mhz == 1862)
|
||||
{
|
||||
if(mhz == 1862) // MEM
|
||||
return "Maximum";
|
||||
}
|
||||
|
||||
char buf[10];
|
||||
return std::string(buf, snprintf(buf, sizeof(buf), "%u MHz", mhz));
|
||||
|
||||
@@ -24,10 +24,10 @@ AppProfileGui::~AppProfileGui()
|
||||
delete this->profileList;
|
||||
}
|
||||
|
||||
void AppProfileGui::openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module, std::uint32_t* hzList)
|
||||
void AppProfileGui::openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module)
|
||||
{
|
||||
tsl::changeTo<FreqChoiceGui>(this->profileList->mhzMap[profile][module] * 1000000, hzList, [this, listItem, profile, module](std::uint32_t hz) {
|
||||
this->profileList->mhzMap[profile][module] = hz / 1000000;
|
||||
tsl::changeTo<FreqChoiceGui>(this->profileList->mhzMap[profile][module], module, profile, [this, listItem, profile, module](std::uint32_t mhz) {
|
||||
this->profileList->mhzMap[profile][module] = mhz;
|
||||
listItem->setValue(formatListFreqMhz(this->profileList->mhzMap[profile][module]));
|
||||
Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList);
|
||||
if(R_FAILED(rc))
|
||||
@@ -40,14 +40,14 @@ void AppProfileGui::openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfil
|
||||
});
|
||||
}
|
||||
|
||||
void AppProfileGui::addModuleListItem(SysClkProfile profile, SysClkModule module, std::uint32_t* hzList)
|
||||
void AppProfileGui::addModuleListItem(SysClkProfile profile, SysClkModule module)
|
||||
{
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(sysclkFormatModule(module, true));
|
||||
listItem->setValue(formatListFreqMhz(this->profileList->mhzMap[profile][module]));
|
||||
listItem->setClickListener([this, listItem, profile, module, hzList](u64 keys) {
|
||||
listItem->setClickListener([this, listItem, profile, module](u64 keys) {
|
||||
if((keys & HidNpadButton_A) == HidNpadButton_A)
|
||||
{
|
||||
this->openFreqChoiceGui(listItem, profile, module, hzList);
|
||||
this->openFreqChoiceGui(listItem, profile, module);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -60,9 +60,9 @@ void AppProfileGui::addModuleListItem(SysClkProfile profile, SysClkModule module
|
||||
void AppProfileGui::addProfileUI(SysClkProfile profile)
|
||||
{
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader(sysclkFormatProfile(profile, true)));
|
||||
this->addModuleListItem(profile, SysClkModule_CPU, &sysclk_g_freq_table_cpu_hz[0]);
|
||||
this->addModuleListItem(profile, SysClkModule_GPU, &sysclk_g_freq_table_gpu_hz[0]);
|
||||
this->addModuleListItem(profile, SysClkModule_MEM, &sysclk_g_freq_table_mem_hz[0]);
|
||||
this->addModuleListItem(profile, SysClkModule_CPU);
|
||||
this->addModuleListItem(profile, SysClkModule_GPU);
|
||||
this->addModuleListItem(profile, SysClkModule_MEM);
|
||||
}
|
||||
|
||||
void AppProfileGui::listUI()
|
||||
|
||||
@@ -20,8 +20,8 @@ class AppProfileGui : public BaseMenuGui
|
||||
std::uint64_t applicationId;
|
||||
SysClkTitleProfileList* profileList;
|
||||
|
||||
void openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module, std::uint32_t* hzList);
|
||||
void addModuleListItem(SysClkProfile profile, SysClkModule module, std::uint32_t* hzList);
|
||||
void openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module);
|
||||
void addModuleListItem(SysClkProfile profile, SysClkModule module);
|
||||
void addProfileUI(SysClkProfile profile);
|
||||
|
||||
public:
|
||||
|
||||
@@ -11,23 +11,33 @@
|
||||
#include "freq_choice_gui.h"
|
||||
|
||||
#include "../format.h"
|
||||
#include "fatal_gui.h"
|
||||
|
||||
FreqChoiceGui::FreqChoiceGui(std::uint32_t selectedHz, std::uint32_t* hzList, FreqChoiceListener listener)
|
||||
FreqChoiceGui::FreqChoiceGui(std::uint32_t selectedMHz, SysClkModule module, SysClkProfile profile, FreqChoiceListener listener)
|
||||
{
|
||||
this->selectedHz = selectedHz;
|
||||
this->hzList = hzList;
|
||||
this->hzTable = new uint32_t[MAX_ENTRIES];
|
||||
Result rc = sysclkIpcGetFrequencyTable(module, profile, MAX_ENTRIES, hzTable);
|
||||
if (R_FAILED(rc)) {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetFrequencyTable", rc);
|
||||
}
|
||||
|
||||
this->selectedMHz = selectedMHz;
|
||||
this->listener = listener;
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t hz, bool selected)
|
||||
FreqChoiceGui::~FreqChoiceGui() {
|
||||
delete[] this->hzTable;
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t mhz, bool selected)
|
||||
{
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(formatListFreqHz(hz));
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(formatListFreqMhz(mhz));
|
||||
listItem->setValue(selected ? "\uE14B" : "");
|
||||
|
||||
listItem->setClickListener([this, hz](u64 keys) {
|
||||
listItem->setClickListener([this, mhz](u64 keys) {
|
||||
if((keys & HidNpadButton_A) == HidNpadButton_A && this->listener)
|
||||
{
|
||||
if(this->listener(hz))
|
||||
if(this->listener(mhz))
|
||||
{
|
||||
tsl::goBack();
|
||||
}
|
||||
@@ -42,11 +52,13 @@ tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t hz, bool sel
|
||||
|
||||
void FreqChoiceGui::listUI()
|
||||
{
|
||||
std::uint32_t* hzPtr = this->hzList;
|
||||
this->listElement->addItem(this->createFreqListItem(0, this->selectedHz == 0));
|
||||
while(*hzPtr)
|
||||
this->listElement->addItem(this->createFreqListItem(0, this->selectedMHz == 0));
|
||||
|
||||
uint32_t* p = this->hzTable;
|
||||
while(*p)
|
||||
{
|
||||
this->listElement->addItem(this->createFreqListItem(*hzPtr, (*hzPtr / 1000000) == (this->selectedHz / 1000000)));
|
||||
hzPtr++;
|
||||
uint32_t mhz = *p / 1000'000;
|
||||
this->listElement->addItem(this->createFreqListItem(mhz, mhz == this->selectedMHz));
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,20 +14,21 @@
|
||||
|
||||
#include "base_menu_gui.h"
|
||||
|
||||
using FreqChoiceListener = std::function<bool(std::uint32_t hz)>;
|
||||
using FreqChoiceListener = std::function<bool(std::uint32_t mhz)>;
|
||||
|
||||
#define FREQ_DEFAULT_TEXT "Do not override"
|
||||
|
||||
class FreqChoiceGui : public BaseMenuGui
|
||||
{
|
||||
protected:
|
||||
std::uint32_t selectedHz;
|
||||
std::uint32_t* hzList;
|
||||
std::uint32_t selectedMHz;
|
||||
static constexpr size_t MAX_ENTRIES = 20;
|
||||
std::uint32_t* hzTable;
|
||||
FreqChoiceListener listener;
|
||||
tsl::elm::ListItem* createFreqListItem(std::uint32_t hz, bool selected);
|
||||
tsl::elm::ListItem* createFreqListItem(std::uint32_t mhz, bool selected);
|
||||
|
||||
public:
|
||||
FreqChoiceGui(std::uint32_t selectedHz, std::uint32_t* hzList, FreqChoiceListener listener);
|
||||
~FreqChoiceGui() {}
|
||||
FreqChoiceGui(std::uint32_t selectedMHz, SysClkModule module, SysClkProfile profile, FreqChoiceListener listener);
|
||||
~FreqChoiceGui();
|
||||
void listUI() override;
|
||||
};
|
||||
|
||||
@@ -22,10 +22,10 @@ GlobalOverrideGui::GlobalOverrideGui()
|
||||
}
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::openFreqChoiceGui(SysClkModule module, std::uint32_t* hzList)
|
||||
void GlobalOverrideGui::openFreqChoiceGui(SysClkModule module)
|
||||
{
|
||||
tsl::changeTo<FreqChoiceGui>(this->context->overrideFreqs[module], hzList, [this, module](std::uint32_t hz) {
|
||||
Result rc = sysclkIpcSetOverride(module, hz);
|
||||
tsl::changeTo<FreqChoiceGui>(this->context->overrideFreqs[module] / 1000'000, module, SysClkProfile_EnumMax, [this, module](std::uint32_t mhz) {
|
||||
Result rc = sysclkIpcSetOverride(module, mhz * 1000'000);
|
||||
if(R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcSetOverride", rc);
|
||||
@@ -33,21 +33,21 @@ void GlobalOverrideGui::openFreqChoiceGui(SysClkModule module, std::uint32_t* hz
|
||||
}
|
||||
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
this->context->overrideFreqs[module] = hz;
|
||||
this->context->overrideFreqs[module] = mhz * 1000'000;
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::addModuleListItem(SysClkModule module, std::uint32_t* hzList)
|
||||
void GlobalOverrideGui::addModuleListItem(SysClkModule module)
|
||||
{
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(sysclkFormatModule(module, true));
|
||||
listItem->setValue(formatListFreqMhz(0));
|
||||
|
||||
listItem->setClickListener([this, module, hzList](u64 keys) {
|
||||
listItem->setClickListener([this, module](u64 keys) {
|
||||
if((keys & HidNpadButton_A) == HidNpadButton_A)
|
||||
{
|
||||
this->openFreqChoiceGui(module, hzList);
|
||||
this->openFreqChoiceGui(module);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -60,9 +60,9 @@ void GlobalOverrideGui::addModuleListItem(SysClkModule module, std::uint32_t* hz
|
||||
|
||||
void GlobalOverrideGui::listUI()
|
||||
{
|
||||
this->addModuleListItem(SysClkModule_CPU, &sysclk_g_freq_table_cpu_hz[0]);
|
||||
this->addModuleListItem(SysClkModule_GPU, &sysclk_g_freq_table_gpu_hz[0]);
|
||||
this->addModuleListItem(SysClkModule_MEM, &sysclk_g_freq_table_mem_hz[0]);
|
||||
this->addModuleListItem(SysClkModule_CPU);
|
||||
this->addModuleListItem(SysClkModule_GPU);
|
||||
this->addModuleListItem(SysClkModule_MEM);
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::refresh()
|
||||
|
||||
@@ -20,8 +20,8 @@ class GlobalOverrideGui : public BaseMenuGui
|
||||
tsl::elm::ListItem* listItems[SysClkModule_EnumMax];
|
||||
std::uint32_t listHz[SysClkModule_EnumMax];
|
||||
|
||||
void openFreqChoiceGui(SysClkModule module, std::uint32_t* hzList);
|
||||
void addModuleListItem(SysClkModule module, std::uint32_t* hzList);
|
||||
void openFreqChoiceGui(SysClkModule module);
|
||||
void addModuleListItem(SysClkModule module);
|
||||
|
||||
public:
|
||||
GlobalOverrideGui();
|
||||
|
||||
@@ -17,6 +17,24 @@ MiscGui::MiscGui()
|
||||
this->configList = new SysClkConfigValueList {};
|
||||
this->chargeInfo = new PsmChargeInfo {};
|
||||
this->i2cInfo = new I2cInfo {};
|
||||
|
||||
u64 hardware_type = 0;
|
||||
splInitialize();
|
||||
splGetConfig(SplConfigItem_HardwareType, &hardware_type);
|
||||
splExit();
|
||||
|
||||
switch (hardware_type) {
|
||||
case 1: //Icosa
|
||||
case 2: //Copper
|
||||
this->isMariko = false;
|
||||
break;
|
||||
// case 3: // Iowa
|
||||
// case 4: // Hoag
|
||||
// case 5: // Aula
|
||||
default:
|
||||
this->isMariko = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
MiscGui::~MiscGui()
|
||||
@@ -24,9 +42,10 @@ MiscGui::~MiscGui()
|
||||
delete this->configList;
|
||||
delete this->chargeInfo;
|
||||
delete this->i2cInfo;
|
||||
this->configToggles.clear();
|
||||
}
|
||||
|
||||
tsl::elm::ToggleListItem* MiscGui::addConfigToggle(SysClkConfigValue configVal) {
|
||||
void MiscGui::addConfigToggle(SysClkConfigValue configVal) {
|
||||
const char* configName = sysclkFormatConfigValue(configVal, true);
|
||||
tsl::elm::ToggleListItem* toggle = new tsl::elm::ToggleListItem(configName, this->configList->values[configVal]);
|
||||
toggle->setStateChangedListener([this, configVal](bool state) {
|
||||
@@ -38,33 +57,28 @@ tsl::elm::ToggleListItem* MiscGui::addConfigToggle(SysClkConfigValue configVal)
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
});
|
||||
this->listElement->addItem(toggle);
|
||||
return toggle;
|
||||
this->configToggles[configVal] = toggle;
|
||||
}
|
||||
|
||||
void MiscGui::updateConfigToggle(tsl::elm::ToggleListItem *toggle, SysClkConfigValue configVal) {
|
||||
if (toggle != nullptr) {
|
||||
toggle->setState(this->configList->values[configVal]);
|
||||
void MiscGui::updateConfigToggles() {
|
||||
for (const auto& [value, toggle] : this->configToggles) {
|
||||
if (toggle != nullptr)
|
||||
toggle->setState(this->configList->values[value]);
|
||||
}
|
||||
}
|
||||
|
||||
void MiscGui::listUI()
|
||||
{
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Temporary toggles"));
|
||||
|
||||
this->backlightToggle = new tsl::elm::ToggleListItem("Screen Backlight", false);
|
||||
backlightToggle->setStateChangedListener([this](bool state) {
|
||||
LblUpdate(true);
|
||||
});
|
||||
this->listElement->addItem(this->backlightToggle);
|
||||
|
||||
sysclkIpcGetConfigValues(this->configList);
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Config"));
|
||||
|
||||
this->unsafeFreqToggle = addConfigToggle(SysClkConfigValue_AllowUnsafeFrequencies);
|
||||
this->cpuBoostToggle = addConfigToggle(SysClkConfigValue_AutoCPUBoost);
|
||||
this->syncModeToggle = addConfigToggle(SysClkConfigValue_SyncReverseNXMode);
|
||||
this->fastChargingToggle = addConfigToggle(SysClkConfigValue_DisableFastCharging);
|
||||
this->governorToggle = addConfigToggle(SysClkConfigValue_GovernorExperimental);
|
||||
if (this->isMariko) {
|
||||
addConfigToggle(SysClkConfigValue_AllowUnsafeFrequencies);
|
||||
addConfigToggle(SysClkConfigValue_AutoCPUBoost);
|
||||
}
|
||||
addConfigToggle(SysClkConfigValue_SyncReverseNXMode);
|
||||
addConfigToggle(SysClkConfigValue_DisableFastCharging);
|
||||
addConfigToggle(SysClkConfigValue_GovernorExperimental);
|
||||
|
||||
this->chargingLimitHeader = new tsl::elm::CategoryHeader("");
|
||||
this->listElement->addItem(this->chargingLimitHeader);
|
||||
@@ -92,11 +106,20 @@ void MiscGui::listUI()
|
||||
renderer->drawString("\uE016 Long-term use may render the battery gauge \ninaccurate!", false, x, y + 20, SMALL_TEXT_SIZE, DESC_COLOR);
|
||||
}), SMALL_TEXT_SIZE * 2 + 20);
|
||||
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Info"));
|
||||
this->listElement->addItem(new tsl::elm::CustomDrawer([this](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
|
||||
renderer->drawString(this->infoNames, false, x, y + 20, SMALL_TEXT_SIZE, DESC_COLOR);
|
||||
renderer->drawString(this->infoVals, false, x + 120, y + 20, SMALL_TEXT_SIZE, VALUE_COLOR);
|
||||
}), SMALL_TEXT_SIZE * 12 + 20);
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Temporary toggles"));
|
||||
this->backlightToggle = new tsl::elm::ToggleListItem("Screen Backlight", false);
|
||||
backlightToggle->setStateChangedListener([this](bool state) {
|
||||
LblUpdate(true);
|
||||
});
|
||||
this->listElement->addItem(this->backlightToggle);
|
||||
|
||||
if (this->isMariko) {
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Info"));
|
||||
this->listElement->addItem(new tsl::elm::CustomDrawer([this](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
|
||||
renderer->drawString(this->infoNames, false, x, y + 20, SMALL_TEXT_SIZE, DESC_COLOR);
|
||||
renderer->drawString(this->infoVals, false, x + 120, y + 20, SMALL_TEXT_SIZE, VALUE_COLOR);
|
||||
}), SMALL_TEXT_SIZE * 12 + 20);
|
||||
}
|
||||
}
|
||||
|
||||
void MiscGui::refresh() {
|
||||
@@ -106,10 +129,7 @@ void MiscGui::refresh() {
|
||||
{
|
||||
frameCounter = 0;
|
||||
sysclkIpcGetConfigValues(this->configList);
|
||||
updateConfigToggle(this->unsafeFreqToggle, SysClkConfigValue_AllowUnsafeFrequencies);
|
||||
updateConfigToggle(this->cpuBoostToggle, SysClkConfigValue_AutoCPUBoost);
|
||||
updateConfigToggle(this->syncModeToggle, SysClkConfigValue_SyncReverseNXMode);
|
||||
updateConfigToggle(this->fastChargingToggle, SysClkConfigValue_DisableFastCharging);
|
||||
updateConfigToggles();
|
||||
|
||||
this->chargingLimitBar->setProgress(this->configList->values[SysClkConfigValue_ChargingLimitPercentage]);
|
||||
snprintf(chargingLimitBarDesc, 30, "Battery Charging Limit: %lu%%", this->configList->values[SysClkConfigValue_ChargingLimitPercentage]);
|
||||
@@ -121,7 +141,9 @@ void MiscGui::refresh() {
|
||||
LblUpdate();
|
||||
this->backlightToggle->setState(lblstatus);
|
||||
|
||||
I2cGetInfo(this->i2cInfo);
|
||||
UpdateInfo(this->infoVals, sizeof(this->infoVals));
|
||||
if (this->isMariko) {
|
||||
I2cGetInfo(this->i2cInfo);
|
||||
UpdateInfo(this->infoVals, sizeof(this->infoVals));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,15 +69,13 @@ class MiscGui : public BaseMenuGui
|
||||
|
||||
cmd.reg = reg;
|
||||
res = i2csessionSendAuto(&_session, &cmd, sizeof(cmd), I2cTransactionOption_All);
|
||||
if (res)
|
||||
{
|
||||
if (res) {
|
||||
i2csessionClose(&_session);
|
||||
return res;
|
||||
}
|
||||
|
||||
res = i2csessionReceiveAuto(&_session, &rec, sizeof(rec), I2cTransactionOption_All);
|
||||
if (res)
|
||||
{
|
||||
if (res) {
|
||||
i2csessionClose(&_session);
|
||||
return res;
|
||||
}
|
||||
@@ -100,15 +98,13 @@ class MiscGui : public BaseMenuGui
|
||||
|
||||
cmd.reg = reg;
|
||||
res = i2csessionSendAuto(&_session, &cmd, sizeof(cmd), I2cTransactionOption_All);
|
||||
if (res)
|
||||
{
|
||||
if (res) {
|
||||
i2csessionClose(&_session);
|
||||
return res;
|
||||
}
|
||||
|
||||
res = i2csessionReceiveAuto(&_session, &rec, sizeof(rec), I2cTransactionOption_All);
|
||||
if (res)
|
||||
{
|
||||
if (res) {
|
||||
i2csessionClose(&_session);
|
||||
return res;
|
||||
}
|
||||
@@ -133,8 +129,7 @@ class MiscGui : public BaseMenuGui
|
||||
if (R_SUCCEEDED(I2cRead_OutU16(Max17050Reg_Current, I2cDevice_Max17050, &tmp)))
|
||||
i2cInfo->batCurrent = (s16)tmp * (1.5625 / (SenseResistor * CGain));
|
||||
|
||||
auto I2cRead_Max77812_M_VOUT = [this](u8 reg)
|
||||
{
|
||||
auto I2cRead_Max77812_M_VOUT = [this](u8 reg) {
|
||||
constexpr u32 MIN_MV = 250;
|
||||
constexpr u32 MV_STEP = 5;
|
||||
constexpr u8 RESET_VAL = 0x78;
|
||||
@@ -229,19 +224,24 @@ class MiscGui : public BaseMenuGui
|
||||
{
|
||||
smInitialize();
|
||||
lblInitialize();
|
||||
|
||||
lblGetBacklightSwitchStatus(&lblstatus);
|
||||
if (shouldSwitch)
|
||||
lblstatus ? lblSwitchBacklightOff(0) : lblSwitchBacklightOn(0);
|
||||
|
||||
lblExit();
|
||||
smExit();
|
||||
}
|
||||
|
||||
tsl::elm::ToggleListItem* addConfigToggle(SysClkConfigValue);
|
||||
void updateConfigToggle(tsl::elm::ToggleListItem*, SysClkConfigValue);
|
||||
bool isMariko = false;
|
||||
|
||||
tsl::elm::ToggleListItem *backlightToggle, *unsafeFreqToggle, *cpuBoostToggle, *syncModeToggle, *fastChargingToggle, *governorToggle;
|
||||
tsl::elm::CategoryHeader *chargingLimitHeader;
|
||||
StepTrackBarIcon *chargingLimitBar;
|
||||
std::map<SysClkConfigValue, tsl::elm::ToggleListItem*> configToggles;
|
||||
void addConfigToggle(SysClkConfigValue);
|
||||
void updateConfigToggles();
|
||||
|
||||
tsl::elm::ToggleListItem* backlightToggle;
|
||||
tsl::elm::CategoryHeader* chargingLimitHeader;
|
||||
StepTrackBarIcon* chargingLimitBar;
|
||||
|
||||
SysClkConfigValueList* configList;
|
||||
PsmChargeInfo* chargeInfo;
|
||||
|
||||
Reference in New Issue
Block a user