use async_labjack::client::LabjackClient;
use async_labjack::{
Error, LabjackErrorCode, FILE_IO_CLOSE, FILE_IO_DIR_CHANGE, FILE_IO_DIR_CURRENT,
FILE_IO_DIR_FIRST, FILE_IO_DIR_NEXT, FILE_IO_OPEN, FILE_IO_PATH_READ,
FILE_IO_PATH_READ_LEN_BYTES, FILE_IO_PATH_WRITE, FILE_IO_PATH_WRITE_LEN_BYTES, FILE_IO_READ,
FILE_IO_SIZE_BYTES,
};
use bytes::{BufMut, Bytes, BytesMut};
use tokio::time::Duration;
#[tokio::main()]
async fn main() {
env_logger::init();
let socket_addr = "192.168.42.100:502".parse().unwrap();
let client = &mut LabjackClient::connect_with_timeout(socket_addr, Duration::from_millis(3000))
.await
.unwrap();
let current_working_directory = Bytes::from_static(b"/\0");
FILE_IO_PATH_WRITE_LEN_BYTES
.write(client, current_working_directory.len() as u32)
.await
.unwrap();
FILE_IO_PATH_WRITE
.write(client, current_working_directory)
.await
.unwrap();
FILE_IO_DIR_CHANGE.write(client, 1).await.unwrap();
FILE_IO_DIR_CURRENT.write(client, 1).await.unwrap();
let num_bytes = FILE_IO_PATH_READ_LEN_BYTES.read(client).await.unwrap();
println!("reading num_bytes: {num_bytes:?}");
let cwd = FILE_IO_PATH_READ
.read_string(client, num_bytes)
.await
.unwrap();
println!("The current working directory is '{cwd:?}'");
assert_eq!(cwd, "/");
FILE_IO_DIR_FIRST.write(client, 1).await.unwrap();
let num_bytes = FILE_IO_PATH_READ_LEN_BYTES.read(client).await.unwrap();
println!("reading num_bytes: {num_bytes:?}");
let path = FILE_IO_PATH_READ
.read_string(client, num_bytes)
.await
.unwrap();
let num_file_content_bytes = FILE_IO_SIZE_BYTES.read(client).await.unwrap();
println!("path: {path:?}");
println!("file byte size: {num_file_content_bytes:?}");
let file_path = format!("{cwd}{path}");
let mut filename = BytesMut::from(&file_path[..]);
filename.put_u8(0);
let filename = filename.freeze();
let fname_num_bytes = filename.len();
println!("fname bytes: {filename:?}");
FILE_IO_PATH_WRITE_LEN_BYTES
.write(client, fname_num_bytes as u32)
.await
.unwrap();
println!("wrote fname_num_bytes: {fname_num_bytes:?}");
FILE_IO_PATH_WRITE.write(client, filename).await.unwrap();
println!("wrote filename to FILE_IO_PATH_WRITE");
FILE_IO_OPEN.write(client, 1).await.unwrap();
println!("wrote 1 to FILE_IO_OPEN");
let num_file_content_bytes = FILE_IO_SIZE_BYTES.read(client).await.unwrap();
println!("number of bytes to read from file: {num_file_content_bytes:?}");
let file_data = FILE_IO_READ
.read_file(client, num_file_content_bytes)
.await
.unwrap();
println!("file_data: {file_data:?}");
FILE_IO_CLOSE.write(client, 1).await.unwrap();
loop {
match FILE_IO_DIR_NEXT.write(client, 1).await {
Ok(_) => {
}
Err(e) => {
assert!(matches!(
e,
Error::LabjackErrorCode(LabjackErrorCode::FileIoEndOfCwd)
));
break; }
}
}
println!("Success! Disconnecting...");
client.disconnect().await.unwrap();
}