use async_labjack::client::LabjackClient;
use async_labjack::client::LabjackInteractions;
use async_labjack::helpers::calibrations::t7_ain_binary_to_volts;
use async_labjack::helpers::calibrations::T7Calibrations;
use async_labjack::{AIN1, AIN1_BINARY, AIN1_NEGATIVE_CH, AIN1_RANGE, AIN1_RESOLUTION_INDEX};
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();
client.stop_stream().await.unwrap();
AIN1_RANGE.write(client, 0.0).await.unwrap();
AIN1_NEGATIVE_CH.write(client, 199).await.unwrap();
AIN1_RESOLUTION_INDEX.write(client, 0).await.unwrap();
let t7_cal: T7Calibrations = client
.read_calibrations()
.await
.unwrap()
.try_into()
.unwrap();
println!("Calibration constants: {t7_cal:?}");
let readings = client
.read_tags(&[AIN1_BINARY.into(), AIN1.into()])
.await
.unwrap();
let raw_24_bit_ain1_binary = (&readings[0]).try_into().unwrap();
let volt_value = t7_ain_binary_to_volts(raw_24_bit_ain1_binary, &t7_cal.hr_gain_1_ain_cal);
let ain_volt_converted_on_device: f32 = (&readings[1]).try_into().unwrap();
println!("Raw 24-bit value: {raw_24_bit_ain1_binary:?}");
println!("Our conversion: {volt_value:?}V, on device: {ain_volt_converted_on_device:?}V");
println!("Success!");
}