2022-11-10 03:09:05 +00:00
|
|
|
use std::sync::mpsc::{Sender, self};
|
|
|
|
use std::sync::Mutex;
|
2022-08-10 01:56:22 +01:00
|
|
|
use usdpl_back::core::serdes::Primitive;
|
|
|
|
|
2022-11-10 03:09:05 +00:00
|
|
|
use super::handler::{ApiMessage, BatteryMessage};
|
2022-08-10 01:56:22 +01:00
|
|
|
|
|
|
|
/// Current current (ha!) web method
|
|
|
|
pub fn current_now(_: super::ApiParameterType) -> super::ApiParameterType {
|
2022-09-05 22:02:02 +01:00
|
|
|
super::utility::map_result(crate::settings::Battery::read_current_now())
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Charge now web method
|
|
|
|
pub fn charge_now(_: super::ApiParameterType) -> super::ApiParameterType {
|
|
|
|
super::utility::map_result(crate::settings::Battery::read_charge_now())
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Charge full web method
|
|
|
|
pub fn charge_full(_: super::ApiParameterType) -> super::ApiParameterType {
|
|
|
|
super::utility::map_result(crate::settings::Battery::read_charge_full())
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Charge design web method
|
|
|
|
pub fn charge_design(_: super::ApiParameterType) -> super::ApiParameterType {
|
|
|
|
super::utility::map_result(crate::settings::Battery::read_charge_design())
|
2022-08-10 01:56:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Generate set battery charge rate web method
|
|
|
|
pub fn set_charge_rate(
|
2022-11-10 03:09:05 +00:00
|
|
|
sender: Sender<ApiMessage>,
|
2022-08-10 01:56:22 +01:00
|
|
|
) -> impl Fn(super::ApiParameterType) -> super::ApiParameterType {
|
2022-11-10 03:09:05 +00:00
|
|
|
let sender = Mutex::new(sender); // Sender is not Sync; this is required for safety
|
|
|
|
let setter = move |rate: f64|
|
|
|
|
sender.lock()
|
|
|
|
.unwrap()
|
|
|
|
.send(ApiMessage::Battery(BatteryMessage::SetChargeRate(Some(rate as u64))))
|
|
|
|
.expect("set_charge_rate send failed");
|
2022-08-10 01:56:22 +01:00
|
|
|
move |params_in: super::ApiParameterType| {
|
2022-11-10 03:09:05 +00:00
|
|
|
if let Some(&Primitive::F64(new_val)) = params_in.get(0) {
|
|
|
|
setter(new_val);
|
|
|
|
vec![(new_val).into()]
|
2022-08-10 01:56:22 +01:00
|
|
|
} else {
|
|
|
|
vec!["set_charge_rate missing parameter".into()]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Generate get battery charge rate web method
|
|
|
|
pub fn get_charge_rate(
|
2022-11-10 03:09:05 +00:00
|
|
|
sender: Sender<ApiMessage>,
|
2022-08-10 01:56:22 +01:00
|
|
|
) -> impl Fn(super::ApiParameterType) -> super::ApiParameterType {
|
2022-11-10 03:09:05 +00:00
|
|
|
let sender = Mutex::new(sender); // Sender is not Sync; this is required for safety
|
|
|
|
let getter = move || {
|
|
|
|
let (tx, rx) = mpsc::channel();
|
|
|
|
let callback = move |rate: Option<u64>| tx.send(rate).expect("get_charge_rate callback send failed");
|
|
|
|
sender.lock().unwrap().send(ApiMessage::Battery(BatteryMessage::GetChargeRate(Box::new(callback)))).expect("get_charge_rate send failed");
|
|
|
|
rx.recv().expect("get_charge_rate callback recv failed")
|
|
|
|
};
|
2022-08-10 01:56:22 +01:00
|
|
|
move |_: super::ApiParameterType| {
|
2022-11-10 03:09:05 +00:00
|
|
|
vec![getter().map(|x| x.into()).unwrap_or(Primitive::Empty)]
|
2022-08-10 01:56:22 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Generate unset battery charge rate web method
|
|
|
|
pub fn unset_charge_rate(
|
2022-11-10 03:09:05 +00:00
|
|
|
sender: Sender<ApiMessage>,
|
2022-08-10 01:56:22 +01:00
|
|
|
) -> impl Fn(super::ApiParameterType) -> super::ApiParameterType {
|
2022-11-10 03:09:05 +00:00
|
|
|
let sender = Mutex::new(sender); // Sender is not Sync; this is required for safety
|
|
|
|
let setter = move || sender.lock().unwrap().send(ApiMessage::Battery(BatteryMessage::SetChargeRate(None))).expect("unset_charge_rate send failed");
|
|
|
|
move |_params_in: super::ApiParameterType| {
|
|
|
|
setter();
|
|
|
|
vec![true.into()]
|
2022-08-10 01:56:22 +01:00
|
|
|
}
|
|
|
|
}
|