2022-08-10 01:56:22 +01:00
|
|
|
mod api;
|
2022-07-30 21:33:31 +01:00
|
|
|
mod persist;
|
|
|
|
mod settings;
|
2022-08-10 01:56:22 +01:00
|
|
|
mod state;
|
2022-07-30 21:33:31 +01:00
|
|
|
|
2022-08-10 01:56:22 +01:00
|
|
|
mod resume_worker;
|
|
|
|
mod save_worker;
|
|
|
|
mod utility;
|
|
|
|
|
|
|
|
use simplelog::{LevelFilter, WriteLogger};
|
2022-07-30 21:33:31 +01:00
|
|
|
|
|
|
|
use usdpl_back::core::serdes::Primitive;
|
2022-08-10 01:56:22 +01:00
|
|
|
use usdpl_back::Instance;
|
2022-07-30 21:33:31 +01:00
|
|
|
|
|
|
|
const PORT: u16 = 44443;
|
|
|
|
|
|
|
|
const PACKAGE_NAME: &'static str = env!("CARGO_PKG_NAME");
|
|
|
|
const PACKAGE_VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
|
|
|
|
2022-08-10 01:56:22 +01:00
|
|
|
const DEFAULT_SETTINGS_FILE: &str = "default_settings.json";
|
|
|
|
|
2022-07-30 21:33:31 +01:00
|
|
|
fn main() -> Result<(), ()> {
|
|
|
|
let log_filepath = format!("/tmp/{}.log", PACKAGE_NAME);
|
|
|
|
WriteLogger::init(
|
2022-08-10 01:56:22 +01:00
|
|
|
#[cfg(debug_assertions)]
|
|
|
|
{
|
|
|
|
LevelFilter::Debug
|
|
|
|
},
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
{
|
|
|
|
LevelFilter::Info
|
|
|
|
},
|
2022-07-30 21:33:31 +01:00
|
|
|
Default::default(),
|
2022-08-10 01:56:22 +01:00
|
|
|
std::fs::File::create(&log_filepath).unwrap(),
|
|
|
|
)
|
|
|
|
.unwrap();
|
2022-07-30 21:33:31 +01:00
|
|
|
log::info!("Starting back-end ({} v{})", PACKAGE_NAME, PACKAGE_VERSION);
|
|
|
|
println!("Starting back-end ({} v{})", PACKAGE_NAME, PACKAGE_VERSION);
|
2022-08-10 01:56:22 +01:00
|
|
|
|
|
|
|
let default_settings = persist::SettingsJson::open(settings_dir().join(DEFAULT_SETTINGS_FILE))
|
|
|
|
.map(|settings| settings::Settings::from_json(settings, DEFAULT_SETTINGS_FILE.into()))
|
|
|
|
.unwrap_or_else(|_| settings::Settings::system_default(DEFAULT_SETTINGS_FILE.into()));
|
|
|
|
|
2022-07-30 21:33:31 +01:00
|
|
|
log::debug!("Settings: {:?}", default_settings);
|
2022-08-10 01:56:22 +01:00
|
|
|
|
|
|
|
let (_save_handle, save_sender) = save_worker::spawn(default_settings.clone());
|
|
|
|
let _resume_handle = resume_worker::spawn(default_settings.clone());
|
|
|
|
|
2022-07-30 21:33:31 +01:00
|
|
|
Instance::new(PORT)
|
2022-08-10 01:56:22 +01:00
|
|
|
.register("hello", |_: Vec<Primitive>| {
|
|
|
|
vec![format!("Hello {}", PACKAGE_NAME).into()]
|
|
|
|
})
|
|
|
|
// battery API functions
|
|
|
|
.register("BATTERY_current_now", api::battery::current_now)
|
|
|
|
.register(
|
|
|
|
"BATTERY_set_charge_rate",
|
|
|
|
api::battery::set_charge_rate(default_settings.battery.clone(), save_sender.clone()),
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"BATTERY_get_charge_rate",
|
|
|
|
api::battery::get_charge_rate(default_settings.battery.clone()),
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"BATTERY_unset_charge_rate",
|
|
|
|
api::battery::unset_charge_rate(default_settings.battery.clone(), save_sender.clone()),
|
|
|
|
)
|
|
|
|
// cpu API functions
|
|
|
|
.register("CPU_count", api::cpu::max_cpus)
|
|
|
|
.register(
|
|
|
|
"CPU_set_online",
|
|
|
|
api::cpu::set_cpu_online(default_settings.cpus.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"CPU_get_online",
|
|
|
|
api::cpu::get_cpus_online(default_settings.cpus.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"CPU_set_clock_limits",
|
|
|
|
api::cpu::set_clock_limits(default_settings.cpus.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"CPU_get_clock_limits",
|
|
|
|
api::cpu::get_clock_limits(default_settings.cpus.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"CPU_unset_clock_limits",
|
|
|
|
api::cpu::unset_clock_limits(default_settings.cpus.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"CPU_set_governor",
|
|
|
|
api::cpu::set_cpu_governor(default_settings.cpus.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"CPU_get_governors",
|
|
|
|
api::cpu::get_cpu_governors(default_settings.cpus.clone())
|
|
|
|
)
|
|
|
|
// gpu API functions
|
|
|
|
.register(
|
|
|
|
"GPU_set_ppt",
|
|
|
|
api::gpu::set_ppt(default_settings.gpu.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_get_ppt",
|
|
|
|
api::gpu::get_ppt(default_settings.gpu.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_unset_ppt",
|
|
|
|
api::gpu::unset_ppt(default_settings.gpu.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_set_clock_limits",
|
|
|
|
api::gpu::set_clock_limits(default_settings.gpu.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_get_clock_limits",
|
|
|
|
api::gpu::get_clock_limits(default_settings.gpu.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_unset_clock_limits",
|
|
|
|
api::gpu::unset_clock_limits(default_settings.gpu.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_set_slow_memory",
|
|
|
|
api::gpu::set_slow_memory(default_settings.gpu.clone(), save_sender.clone())
|
|
|
|
)
|
|
|
|
.register(
|
|
|
|
"GPU_get_slow_memory",
|
|
|
|
api::gpu::get_slow_memory(default_settings.gpu.clone())
|
|
|
|
)
|
2022-07-30 21:33:31 +01:00
|
|
|
.run_blocking()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn settings_dir() -> std::path::PathBuf {
|
|
|
|
usdpl_back::api::dirs::home()
|
|
|
|
.unwrap_or_else(|| "/home/deck".into())
|
|
|
|
.join(".config/powertools/")
|
|
|
|
}
|