splitting wip

This commit is contained in:
2025-06-19 16:56:33 +02:00
parent c429c829b4
commit fc1991523a
9 changed files with 1553 additions and 1675 deletions

View File

@@ -68,26 +68,26 @@ fn write_time(
let actual_data = read_up_to_bytes_from_request(request, None)?;
let time: SetTime = serde_json::from_slice(&actual_data)?;
let parsed = DateTime::parse_from_rfc3339(time.time).map_err(|err| anyhow::anyhow!(err))?;
let mut board = BOARD_ACCESS.lock().unwrap();
let mut board = BOARD_ACCESS.lock().expect("board access");
let now = timeval {
tv_sec: parsed.to_utc().timestamp(),
tv_usec: 0,
};
unsafe { settimeofday(&now, core::ptr::null_mut()) };
board.set_rtc_time(&parsed.to_utc())?;
board.board_hal.set_rtc_time(&parsed.to_utc())?;
anyhow::Ok(None)
}
fn get_time(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let mut board = BOARD_ACCESS.lock().unwrap();
let native = board
let mut board = BOARD_ACCESS.lock().expect("board access");
let native = board.board_hal.get_esp()
.time()
.map(|t| t.to_rfc3339())
.unwrap_or("error".to_string());
let rtc = board
let rtc = board.board_hal
.get_rtc_time()
.map(|t| t.to_rfc3339())
.unwrap_or("error".to_string());
@@ -158,8 +158,8 @@ fn get_live_moisture(
fn get_config(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let board = BOARD_ACCESS.lock().expect("Should never fail");
let json = serde_json::to_string(&board.config)?;
let mut board = BOARD_ACCESS.lock().expect("Should never fail");
let json = serde_json::to_string(&board.board_hal.get_config())?;
anyhow::Ok(Some(json))
}
@@ -167,16 +167,16 @@ fn backup_config(
request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let all = read_up_to_bytes_from_request(request, Some(3072))?;
let mut board = BOARD_ACCESS.lock().unwrap();
board.backup_config(&all)?;
let mut board = BOARD_ACCESS.lock().expect("board access");
board.board_hal.backup_config(&all)?;
anyhow::Ok(Some("saved".to_owned()))
}
fn get_backup_config(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let mut board = BOARD_ACCESS.lock().unwrap();
let json = match board.get_backup_config() {
let mut board = BOARD_ACCESS.lock().expect("board access");
let json = match board.board_hal.get_backup_config() {
Ok(config) => from_utf8(&config)?.to_owned(),
Err(err) => {
println!("Error get backup config {:?}", err);
@@ -190,7 +190,7 @@ fn backup_info(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let mut board = BOARD_ACCESS.lock().expect("Should never fail");
let header = board.get_backup_info();
let header = board.board_hal.get_backup_info();
let json = match header {
Ok(h) => {
let timestamp = DateTime::from_timestamp_millis(h.timestamp).unwrap();
@@ -218,18 +218,18 @@ fn set_config(
let all = read_up_to_bytes_from_request(request, Some(3072))?;
let config: PlantControllerConfig = serde_json::from_slice(&all)?;
let mut board = BOARD_ACCESS.lock().unwrap();
board.esp.set_config(&config)?;
let mut board = BOARD_ACCESS.lock().expect("board access");
board.board_hal.get_esp().save_config(&config)?;
board.config = config;
//TODO fixme board.config = config;
anyhow::Ok(Some("saved".to_owned()))
}
fn get_battery_state(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let mut board = BOARD_ACCESS.lock().unwrap();
let battery_state = board.battery_monitor.get_battery_state();
let mut board = BOARD_ACCESS.lock().expect("board access");
let battery_state = board.board_hal.get_battery_monitor().get_battery_state();
let battery_json = serde_json::to_string(&battery_state)?;
anyhow::Ok(Some(battery_json))
}
@@ -259,7 +259,7 @@ fn pump_test(
let actual_data = read_up_to_bytes_from_request(request, None)?;
let pump_test: TestPump = serde_json::from_slice(&actual_data)?;
let mut board = BOARD_ACCESS.lock().unwrap();
board.test_pump(pump_test.pump)?;
board.board_hal.test_pump(pump_test.pump)?;
anyhow::Ok(None)
}
@@ -269,9 +269,9 @@ fn tank_info(
let mut board = BOARD_ACCESS.lock().unwrap();
let tank_info = determine_tank_state(&mut board);
//should be multsampled
let water_temp = board.water_temperature_c();
let water_temp = board.board_hal.water_temperature_c();
Ok(Some(serde_json::to_string(
&tank_info.as_mqtt_info(&board.config.tank, &water_temp),
&tank_info.as_mqtt_info(&board.board_hal.get_config().tank, &water_temp),
)?))
}
@@ -281,7 +281,7 @@ fn night_lamp_test(
let actual_data = read_up_to_bytes_from_request(request, None)?;
let light_command: NightLampCommand = serde_json::from_slice(&actual_data)?;
let mut board = BOARD_ACCESS.lock().unwrap();
board.light(light_command.active)?;
board.board_hal.light(light_command.active)?;
anyhow::Ok(None)
}
@@ -289,7 +289,7 @@ fn wifi_scan(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let mut board = BOARD_ACCESS.lock().unwrap();
let scan_result = board.wifi_scan()?;
let scan_result = board.board_hal.get_esp().wifi_scan()?;
let mut ssids: Vec<&String<32>> = Vec::new();
scan_result.iter().for_each(|s| ssids.push(&s.ssid));
let ssid_json = serde_json::to_string(&SSIDList { ssids })?;
@@ -300,8 +300,8 @@ fn wifi_scan(
fn list_files(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
let board = BOARD_ACCESS.lock().expect("It should be possible to lock the board for exclusive fs access");
let result = board.esp.list_files();
let mut board = BOARD_ACCESS.lock().expect("It should be possible to lock the board for exclusive fs access");
let result = board.board_hal.get_esp().list_files();
let file_list_json = serde_json::to_string(&result)?;
anyhow::Ok(Some(file_list_json))
}
@@ -323,12 +323,12 @@ fn ota(
total_read += read;
let to_write = &buffer[0..read];
//delay for watchdog and wifi stuff
board.esp.delay.delay_ms(1);
board.board_hal.get_esp().delay.delay_ms(1);
let iter = (total_read / 1024) % 8;
if iter != lastiter {
for i in 0..PLANT_COUNT {
let _ = board.fault(i, iter == i);
let _ = board.board_hal.fault(i, iter == i);
}
lastiter = iter;
}
@@ -345,7 +345,7 @@ fn ota(
let mut finalizer = ota.finalize()?;
println!("changing boot partition");
board.set_restart_to_conf(true);
board.board_hal.get_esp().set_restart_to_conf(true);
drop(board);
finalizer.set_as_boot_partition()?;
anyhow::Ok(None)
@@ -420,7 +420,7 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
.unwrap();
server
.fn_handler("/boardtest", Method::Post, move |_| {
BOARD_ACCESS.lock().unwrap().test()
BOARD_ACCESS.lock().unwrap().board_hal.test()
})
.unwrap();
server
@@ -472,7 +472,7 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
let reboot_now_for_reboot = reboot_now.clone();
server
.fn_handler("/reboot", Method::Post, move |_| {
BOARD_ACCESS.lock().unwrap().set_restart_to_conf(true);
BOARD_ACCESS.lock().unwrap().board_hal.get_esp().set_restart_to_conf(true);
reboot_now_for_reboot.store(true, std::sync::atomic::Ordering::Relaxed);
anyhow::Ok(())
})
@@ -493,7 +493,7 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
let file_handle = BOARD_ACCESS
.lock()
.unwrap()
.esp
.board_hal.get_esp()
.get_file_handle(&filename, false);
match file_handle {
Ok(mut file_handle) => {
@@ -529,8 +529,8 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
server
.fn_handler("/file", Method::Post, move |mut request| {
let filename = query_param(request.uri(), "filename").unwrap();
let mut lock = BOARD_ACCESS.lock().unwrap();
let file_handle = lock.esp.get_file_handle(&filename, true);
let mut board = BOARD_ACCESS.lock().unwrap();
let file_handle = board.board_hal.get_esp().get_file_handle(&filename, true);
match file_handle {
//TODO get free filesystem size, check against during write if not to large
Ok(mut file_handle) => {
@@ -542,7 +542,7 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
let iter = (total_read / 1024) % 8;
if iter != lastiter {
for i in 0..PLANT_COUNT {
let _ = lock.fault(i, iter == i);
let _ = board.board_hal.fault(i, iter == i);
}
lastiter = iter;
}
@@ -564,7 +564,7 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
cors_response(request, 500, &error_text)?;
}
}
drop(lock);
drop(board);
anyhow::Ok(())
})
.unwrap();
@@ -573,8 +573,8 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
.fn_handler("/file", Method::Delete, move |request| {
let filename = query_param(request.uri(), "filename").unwrap();
let copy = filename.clone();
let board = BOARD_ACCESS.lock().unwrap();
match board.esp.delete_file(&filename) {
let mut board = BOARD_ACCESS.lock().unwrap();
match board.board_hal.get_esp().delete_file(&filename) {
Ok(_) => {
let info = format!("Deleted file {copy}");
cors_response(request, 200, &info)?;