add pump expander
This commit is contained in:
@@ -276,6 +276,7 @@ impl Handler for HttpHandler {
|
||||
let mut chunk = 0;
|
||||
loop {
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
board.board_hal.progress(chunk as u32).await;
|
||||
let read_chunk = board
|
||||
.board_hal
|
||||
.get_esp()
|
||||
@@ -308,6 +309,7 @@ impl Handler for HttpHandler {
|
||||
}
|
||||
|
||||
let mut offset = 0_usize;
|
||||
let mut chunk = 0;
|
||||
loop {
|
||||
let mut buf = [0_u8; 1024];
|
||||
let to_write = conn.read(&mut buf).await?;
|
||||
@@ -316,13 +318,15 @@ impl Handler for HttpHandler {
|
||||
break;
|
||||
} else {
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
board.board_hal.progress(chunk as u32).await;
|
||||
board
|
||||
.board_hal
|
||||
.get_esp()
|
||||
.write_file(filename.to_owned(), offset as u32, &buf[0..to_write])
|
||||
.await?;
|
||||
}
|
||||
offset = offset + to_write
|
||||
offset = offset + to_write;
|
||||
chunk = chunk + 1;
|
||||
}
|
||||
|
||||
Some(200)
|
||||
@@ -437,80 +441,67 @@ async fn get_backup_config<T, const N: usize>(
|
||||
where
|
||||
T: Read + Write,
|
||||
{
|
||||
// First pass: verify checksum without sending data
|
||||
let mut checksum = X25.digest();
|
||||
let mut chunk = 0_usize;
|
||||
loop {
|
||||
info!("Chunk {}", chunk);
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
board.board_hal.progress(chunk as u32).await;
|
||||
let read_chunk = board
|
||||
let (buf, len, expected_crc) = board
|
||||
.board_hal
|
||||
.get_rtc_module()
|
||||
.get_backup_config(chunk)
|
||||
.await?;
|
||||
let length = read_chunk.1;
|
||||
info!("Length {}", length);
|
||||
if length == 0 {
|
||||
let check = checksum.finalize();
|
||||
if check != read_chunk.2 {
|
||||
if check != read_chunk.2 {
|
||||
conn.initiate_response(
|
||||
409,
|
||||
Some(
|
||||
format!("Checksum mismatch expected {} got {}", read_chunk.2, check)
|
||||
.as_str(),
|
||||
),
|
||||
&[],
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
info!("file request for backup finished");
|
||||
break;
|
||||
}
|
||||
let data = &read_chunk.0[0..length];
|
||||
checksum.update(&data);
|
||||
if length < read_chunk.0.len() {
|
||||
let check = checksum.finalize();
|
||||
if check != read_chunk.2 {
|
||||
|
||||
// Update checksum with the actual data bytes of this chunk
|
||||
checksum.update(&buf[..len]);
|
||||
|
||||
let is_last = len == 0 || len < buf.len();
|
||||
if is_last {
|
||||
let actual_crc = checksum.finalize();
|
||||
if actual_crc != expected_crc {
|
||||
conn.initiate_response(
|
||||
409,
|
||||
Some(
|
||||
format!("Checksum mismatch expected {} got {}", read_chunk.2, check)
|
||||
.as_str(),
|
||||
format!(
|
||||
"Checksum mismatch expected {} got {}",
|
||||
expected_crc, actual_crc
|
||||
)
|
||||
.as_str(),
|
||||
),
|
||||
&[],
|
||||
)
|
||||
.await?;
|
||||
return Ok(());
|
||||
}
|
||||
info!("file request for backup finished");
|
||||
break;
|
||||
}
|
||||
chunk = chunk + 1;
|
||||
chunk += 1;
|
||||
}
|
||||
|
||||
// Second pass: stream data
|
||||
conn.initiate_response(200, Some("OK"), &[]).await?;
|
||||
|
||||
let mut chunk = 0;
|
||||
let mut chunk = 0_usize;
|
||||
loop {
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
board.board_hal.progress(chunk as u32).await;
|
||||
let read_chunk = board
|
||||
let (buf, len, _expected_crc) = board
|
||||
.board_hal
|
||||
.get_rtc_module()
|
||||
.get_backup_config(chunk)
|
||||
.await?;
|
||||
let length = read_chunk.1;
|
||||
if length == 0 {
|
||||
info!("file request for backup finished");
|
||||
|
||||
if len == 0 {
|
||||
break;
|
||||
}
|
||||
let data = &read_chunk.0[0..length];
|
||||
conn.write_all(data).await?;
|
||||
if length < read_chunk.0.len() {
|
||||
info!("file request for backup finished");
|
||||
|
||||
conn.write_all(&buf[..len]).await?;
|
||||
|
||||
if len < buf.len() {
|
||||
break;
|
||||
}
|
||||
chunk = chunk + 1;
|
||||
chunk += 1;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@@ -756,18 +747,18 @@ async fn get_time<T, const N: usize>(
|
||||
_request: &mut Connection<'_, T, N>,
|
||||
) -> FatResult<Option<String>> {
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
//TODO do not fail if rtc module is missing
|
||||
|
||||
let native = esp_time().await.to_rfc3339();
|
||||
let rtc = "todo";
|
||||
// board
|
||||
// .board_hal
|
||||
// .get_rtc_module()
|
||||
// .get_rtc_time()
|
||||
// .await?
|
||||
// .to_rfc3339();
|
||||
|
||||
let rtc = match board.board_hal.get_rtc_module().get_rtc_time().await {
|
||||
Ok(time) => time.to_rfc3339(),
|
||||
Err(err) => {
|
||||
format!("Error getting time: {}", err)
|
||||
}
|
||||
};
|
||||
|
||||
let data = LoadData {
|
||||
rtc,
|
||||
rtc: rtc.as_str(),
|
||||
native: native.as_str(),
|
||||
};
|
||||
let json = serde_json::to_string(&data)?;
|
||||
@@ -872,32 +863,6 @@ pub async fn httpd(reboot_now: Arc<AtomicBool>, stack: Stack<'static>) {
|
||||
// cors_response(request, 200, "")
|
||||
// })
|
||||
// .unwrap();
|
||||
// server
|
||||
// .fn_handler("/get_config", Method::Get, move |request| {
|
||||
// handle_error_to500(request, get_config)
|
||||
// })
|
||||
// .unwrap();
|
||||
// server
|
||||
// .fn_handler("/get_backup_config", Method::Get, move |request| {
|
||||
// handle_error_to500(request, get_backup_config)
|
||||
// })
|
||||
// .unwrap();
|
||||
//
|
||||
// server
|
||||
// .fn_handler("/backup_config", Method::Post, move |request| {
|
||||
// handle_error_to500(request, backup_config)
|
||||
// })
|
||||
// .unwrap();
|
||||
// server
|
||||
// .fn_handler("/backup_info", Method::Get, move |request| {
|
||||
// handle_error_to500(request, backup_info)
|
||||
// })
|
||||
// .unwrap();
|
||||
// server
|
||||
// .fn_handler("/files", Method::Get, move |request| {
|
||||
// handle_error_to500(request, list_files)
|
||||
// })
|
||||
// .unwrap();
|
||||
// let reboot_now_for_reboot = reboot_now.clone();
|
||||
// server
|
||||
// .fn_handler("/reboot", Method::Post, move |_| {
|
||||
|
||||
Reference in New Issue
Block a user