修复连续采集时没有时间间隔导致通讯失败从而导致无有法正常连续采集的问题 修改如下
This commit is contained in:
@ -1,51 +0,0 @@
|
||||
|
||||
use super::serport::serport::*;
|
||||
use super::mylog::*;
|
||||
|
||||
|
||||
#[tauri::command]
|
||||
pub fn greet(name: &str) -> String {
|
||||
format!("Hello, {}! You've been greeted from Rust!", name)
|
||||
}
|
||||
#[tauri::command]
|
||||
pub fn getportnames() -> Vec<String> {
|
||||
get_port_name()
|
||||
}
|
||||
#[tauri::command]
|
||||
pub fn opencom(portname: serde_json::Value, baudrate: serde_json::Value) -> String {
|
||||
//tauri
|
||||
let portname = portname.as_str().unwrap();
|
||||
let baudrate = baudrate.as_u64().unwrap() as u32;
|
||||
set_port_info(&portname.to_string(), baudrate);
|
||||
|
||||
println!("opencom portname:{} baudrate:{}", portname, baudrate);
|
||||
logtorust(format!(
|
||||
"opencom portname:{} baudrate:{}",
|
||||
portname, baudrate
|
||||
));
|
||||
tryuseport()
|
||||
}
|
||||
#[tauri::command]
|
||||
pub fn clearportbuff() -> String {
|
||||
clearserilport()
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn setport(data: serde_json::Value) -> String {
|
||||
//判断是否存在portname和baudrate
|
||||
if !data.is_object() {
|
||||
return String::from("Invalid data");
|
||||
}
|
||||
if !data["portname"].is_string() || !data["baudrate"].is_u64() {
|
||||
return String::from("Invalid data");
|
||||
}
|
||||
let portname = data["portname"].as_str().unwrap();
|
||||
let baudrate = data["baudrate"].as_u64().unwrap() as u32;
|
||||
set_port_info(&portname.to_string(), baudrate);
|
||||
//println!("{}",readdatafromport(1000));
|
||||
String::from("Port set ok")
|
||||
}
|
||||
#[tauri::command]
|
||||
pub fn closecome() -> String {
|
||||
closeport()
|
||||
}
|
38
src-tauri/src/comman1.rs
Normal file
38
src-tauri/src/comman1.rs
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
use super::serport::serport::*;
|
||||
use super::mylog::*;
|
||||
|
||||
|
||||
#[tauri::command]
|
||||
pub fn greet(name: &str) -> String {
|
||||
format!("Hello, {}! You've been greeted from Rust!", name)
|
||||
}
|
||||
#[tauri::command]
|
||||
pub fn getportnames() -> Vec<String> {
|
||||
get_port_name()
|
||||
|
||||
}
|
||||
// #[tauri::command]
|
||||
// pub fn opencom(portname: serde_json::Value, baudrate: serde_json::Value) -> String {
|
||||
// //tauri
|
||||
// let portname = portname.as_str().unwrap();
|
||||
// let baudrate = baudrate.as_u64().unwrap() as u32;
|
||||
// set_port_info(&portname.to_string(), baudrate);
|
||||
|
||||
// println!("opencom portname:{} baudrate:{}", portname, baudrate);
|
||||
// logtorust(format!(
|
||||
// "opencom portname:{} baudrate:{}",
|
||||
// portname, baudrate
|
||||
// ));
|
||||
// tryuseport()
|
||||
// }
|
||||
#[tauri::command]
|
||||
pub fn clearportbuff() -> String {
|
||||
clearserilport()
|
||||
}
|
||||
|
||||
|
||||
#[tauri::command]
|
||||
pub fn closecome() -> String {
|
||||
closeport()
|
||||
}
|
@ -55,6 +55,11 @@ pub fn savecalibratefile_iris(gain: Vec<f32>, shutter: u32, direction: bool, fil
|
||||
|
||||
pub fn sendcalibratetodev_iris(gain: Vec<f32>, shutter: u32, direction: bool) -> String {
|
||||
let mut data = IS11DataStruct::default();
|
||||
if gain.len() != data.data.len() {
|
||||
logtorust(format!["Gain data length error"]);
|
||||
return "Gain data length error".to_string();
|
||||
|
||||
}
|
||||
data.data = gain.as_slice().try_into().unwrap();
|
||||
data.shutter_time = shutter as u32;
|
||||
data.direction = if direction { 1 } else { 0 };
|
||||
|
@ -93,9 +93,14 @@ pub fn _is11_opt_snenser(percent: i32) -> i32 {
|
||||
|
||||
pub fn is11_get_data(shuttertime: i32) -> Vec<u16> {
|
||||
let mut outdata: Vec<u16> = vec![0; 2048];
|
||||
|
||||
unsafe {
|
||||
|
||||
let len = IS11GetData(outdata.as_mut_ptr(), shuttertime);
|
||||
outdata.truncate(len as usize);
|
||||
|
||||
|
||||
}
|
||||
|
||||
outdata
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
use super::is11base;
|
||||
use super::super::mydefine::*;
|
||||
use lazy_static::lazy_static;
|
||||
use chrono::{self, Datelike, Timelike};
|
||||
use chrono::{self, format, Datelike, Timelike};
|
||||
use std::thread;
|
||||
#[derive(PartialEq)]
|
||||
enum WorkStat {
|
||||
@ -12,6 +12,7 @@ enum WorkStat {
|
||||
|
||||
}
|
||||
|
||||
|
||||
use std::{
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
@ -19,7 +20,15 @@ struct is11_dev_data {
|
||||
sensor_info: is11base::STRSensorInfo,
|
||||
shuttertime: i32,
|
||||
stat: WorkStat,
|
||||
percent: i32,
|
||||
workname: String,
|
||||
hasdark: bool,
|
||||
hasflat: bool,
|
||||
removedark: bool,
|
||||
computeflat: bool,
|
||||
average_number_data: u32,
|
||||
average_number_dark: u32,
|
||||
average_number_flat: u32,
|
||||
|
||||
}
|
||||
|
||||
@ -28,7 +37,16 @@ lazy_static! {
|
||||
sensor_info: is11base::STRSensorInfo::default(),
|
||||
shuttertime: 0,
|
||||
stat: WorkStat::IDLE,
|
||||
percent: 0,
|
||||
workname: "noting".to_string(),
|
||||
hasdark: false,
|
||||
hasflat: false,
|
||||
removedark: false,
|
||||
computeflat: true,
|
||||
average_number_data: 1,
|
||||
average_number_dark: 1,
|
||||
average_number_flat: 1,
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
@ -64,6 +82,7 @@ pub fn opt_sensor(percent: i32) -> i32 {
|
||||
}
|
||||
|
||||
dev_stat.stat=WorkStat::OPTING;
|
||||
dev_stat.percent=0;
|
||||
dev_stat.workname="opting".to_string();
|
||||
drop(dev_stat); //释放锁
|
||||
thread::spawn(move || {
|
||||
@ -73,6 +92,9 @@ pub fn opt_sensor(percent: i32) -> i32 {
|
||||
dev_statnow.stat=WorkStat::IDLE;
|
||||
dev_statnow.shuttertime=shuttertime;
|
||||
dev_statnow.workname="finish".to_string();
|
||||
dev_statnow.percent=100;
|
||||
dev_statnow.hasdark=false;
|
||||
dev_statnow.hasflat=false;
|
||||
}
|
||||
);
|
||||
|
||||
@ -83,22 +105,22 @@ pub fn opt_sensor(percent: i32) -> i32 {
|
||||
|
||||
}
|
||||
|
||||
pub fn get_now_stat()->(String,String){
|
||||
pub fn get_now_stat()->(String,String,i32){
|
||||
|
||||
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
match dev_stat.stat {
|
||||
WorkStat::IDLE => {
|
||||
return ("finish".to_string(),dev_stat.workname.clone());
|
||||
return ("finish".to_string(),dev_stat.workname.clone(),100);
|
||||
},
|
||||
WorkStat::WOKING => {
|
||||
return ("working".to_string(),dev_stat.workname.clone());
|
||||
return ("working".to_string(),dev_stat.workname.clone(),dev_stat.percent);
|
||||
},
|
||||
WorkStat::STOP => {
|
||||
return ("finish".to_string(),dev_stat.workname.clone());
|
||||
return ("finish".to_string(),dev_stat.workname.clone(),dev_stat.percent);
|
||||
},
|
||||
WorkStat::OPTING => {
|
||||
return ("opting".to_string(),dev_stat.workname.clone());
|
||||
return ("opting".to_string(),dev_stat.workname.clone(),dev_stat.percent);
|
||||
},
|
||||
|
||||
}
|
||||
@ -106,17 +128,36 @@ pub fn get_now_stat()->(String,String){
|
||||
|
||||
}
|
||||
|
||||
pub fn collect(shuttertime:u32){
|
||||
pub fn collect(shuttertime:u32,removedark:bool,computeflat:bool){
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
if dev_stat.stat != WorkStat::IDLE {
|
||||
return ;
|
||||
}
|
||||
|
||||
let averagenumber=dev_stat.average_number_data;
|
||||
dev_stat.stat=WorkStat::WOKING;
|
||||
dev_stat.percent=0;
|
||||
|
||||
dev_stat.workname="采集中".to_string();
|
||||
drop(dev_stat); //释放锁
|
||||
thread::spawn(move || {
|
||||
|
||||
|
||||
let data=is11base::is11_get_data(shuttertime as i32);
|
||||
let mut datasum:Vec<u32>=vec![0;2048];
|
||||
for _i in 0..averagenumber {
|
||||
let data=is11base::is11_get_data(shuttertime as i32);
|
||||
for i in 0..2048 {
|
||||
datasum[i]=datasum[i]+data[i] as u32;
|
||||
}
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
let info=format!("采集中,{}%",_i as f32/averagenumber as f32*100 as f32*0.9);
|
||||
dev_stat.workname=info;
|
||||
dev_stat.percent=((_i+1) as f32/averagenumber as f32*100 as f32*0.9) as i32;
|
||||
drop(dev_stat); //释放锁
|
||||
|
||||
|
||||
}
|
||||
let data=datasum.iter().map(|x| *x as f32/averagenumber as f32).collect::<Vec<f32>>();
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
let _lenth=data.len();
|
||||
println!("data len={}",_lenth);
|
||||
@ -137,8 +178,41 @@ pub fn collect(shuttertime:u32){
|
||||
tempis11data.datatype=0;
|
||||
|
||||
let mut data1=DATA_IS11.lock().unwrap();
|
||||
let darkdata=DARK_DATA.lock().unwrap();
|
||||
*data1=tempis11data;
|
||||
if removedark && dev_stat.hasdark {
|
||||
|
||||
for i in 0.._lenth {
|
||||
data1.data[i]=data1.data[i]-darkdata.data[i];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if computeflat && dev_stat.hasflat {
|
||||
let flatdata=FLAT_DATA.lock().unwrap();
|
||||
for i in 0.._lenth {
|
||||
|
||||
let temp=flatdata.data[i]-darkdata.data[i];
|
||||
if temp<=0.0 {
|
||||
data1.data[i]=10000.0;
|
||||
}else{
|
||||
data1.data[i]=data1.data[i]/temp*10000.0;
|
||||
}
|
||||
if data1.data[i]<0.0 {
|
||||
data1.data[i]=0.0;
|
||||
|
||||
}
|
||||
if data1.data[i]>15000.0 {
|
||||
data1.data[i]=15000.0;
|
||||
}
|
||||
|
||||
// data1.data[i]=data1.data[i]/(flatdata.data[i]-darkdata.data[i])*10000.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dev_stat.stat=WorkStat::IDLE;
|
||||
dev_stat.percent=100;
|
||||
dev_stat.workname="finish".to_string();
|
||||
});
|
||||
|
||||
@ -154,12 +228,27 @@ pub fn collcect_dark(shuttertime:u32)
|
||||
if dev_stat.stat != WorkStat::IDLE {
|
||||
return ;
|
||||
}
|
||||
let averagenumber=dev_stat.average_number_dark;
|
||||
dev_stat.stat=WorkStat::WOKING;
|
||||
dev_stat.workname="采集中".to_string();
|
||||
dev_stat.percent=0;
|
||||
dev_stat.workname="采集Dark中".to_string();
|
||||
drop(dev_stat); //释放锁
|
||||
thread::spawn(move || {
|
||||
let mut datasum:Vec<u32>=vec![0;2048];
|
||||
for _i in 0..averagenumber {
|
||||
let data=is11base::is11_get_data(shuttertime as i32);
|
||||
for i in 0..2048 {
|
||||
datasum[i]=datasum[i]+data[i] as u32;
|
||||
}
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
let info=format!("采集Dark中,{}%",_i as f32/averagenumber as f32*100 as f32*0.9);
|
||||
dev_stat.workname=info;
|
||||
dev_stat.percent=((_i+1) as f32/averagenumber as f32*100 as f32*0.9) as i32;
|
||||
drop(dev_stat); //释放锁
|
||||
}
|
||||
let data=datasum.iter().map(|x| *x as f32/averagenumber as f32).collect::<Vec<f32>>();
|
||||
|
||||
|
||||
let data=is11base::is11_get_data(shuttertime as i32);
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
let _lenth=data.len();
|
||||
println!("data len={}",_lenth);
|
||||
@ -182,7 +271,9 @@ pub fn collcect_dark(shuttertime:u32)
|
||||
let mut data1=DARK_DATA.lock().unwrap();
|
||||
*data1=tempis11data;
|
||||
dev_stat.stat=WorkStat::IDLE;
|
||||
dev_stat.percent=100;
|
||||
dev_stat.workname="finish".to_string();
|
||||
dev_stat.hasdark=true;
|
||||
});
|
||||
|
||||
|
||||
@ -194,12 +285,26 @@ pub fn collcect_flat(shuttertime:u32)
|
||||
if dev_stat.stat != WorkStat::IDLE {
|
||||
return ;
|
||||
}
|
||||
let averagenumber=dev_stat.average_number_flat;
|
||||
dev_stat.stat=WorkStat::WOKING;
|
||||
dev_stat.percent=0;
|
||||
dev_stat.workname="采集中".to_string();
|
||||
drop(dev_stat); //释放锁
|
||||
thread::spawn(move || {
|
||||
let mut datasum:Vec<u32>=vec![0;2048];
|
||||
for _i in 0..averagenumber {
|
||||
let data=is11base::is11_get_data(shuttertime as i32);
|
||||
for i in 0..2048 {
|
||||
datasum[i]=datasum[i]+data[i] as u32;
|
||||
}
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
let info=format!("采集白板中,{}%",_i as f32/averagenumber as f32*100 as f32*0.9);
|
||||
dev_stat.workname=info;
|
||||
dev_stat.percent=((_i+1) as f32/averagenumber as f32*100 as f32*0.9) as i32;
|
||||
drop(dev_stat); //释放锁
|
||||
}
|
||||
let data=datasum.iter().map(|x| *x as f32/averagenumber as f32).collect::<Vec<f32>>();
|
||||
|
||||
let data=is11base::is11_get_data(shuttertime as i32);
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
let _lenth=data.len();
|
||||
println!("data len={}",_lenth);
|
||||
@ -222,7 +327,9 @@ pub fn collcect_flat(shuttertime:u32)
|
||||
let mut data1=FLAT_DATA.lock().unwrap();
|
||||
*data1=tempis11data;
|
||||
dev_stat.stat=WorkStat::IDLE;
|
||||
dev_stat.percent=100;
|
||||
dev_stat.workname="finish".to_string();
|
||||
dev_stat.hasflat=true;
|
||||
});
|
||||
}
|
||||
|
||||
@ -230,4 +337,31 @@ pub fn collcect_flat(shuttertime:u32)
|
||||
pub fn get_data()->IS11DataStruct{
|
||||
let data1=DATA_IS11.lock().unwrap();
|
||||
return data1.clone();
|
||||
}
|
||||
pub fn get_data_flat()->IS11DataStruct{
|
||||
let data1=FLAT_DATA.lock().unwrap();
|
||||
return data1.clone();
|
||||
}
|
||||
pub fn get_data_dark()->IS11DataStruct{
|
||||
let data1=DARK_DATA.lock().unwrap();
|
||||
return data1.clone();
|
||||
}
|
||||
pub fn get_is_computeref()->bool{
|
||||
let dev_stat=DEV_STAT.lock().unwrap();
|
||||
return dev_stat.computeflat;
|
||||
}
|
||||
|
||||
pub fn set_shutter_time(shuttertime:u32){
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
dev_stat.shuttertime=shuttertime as i32;
|
||||
dev_stat.hasdark=false;
|
||||
dev_stat.hasflat=false;
|
||||
}
|
||||
|
||||
|
||||
pub fn set_average_number(arverage_number_data:u32,arverage_number_dark:u32,arverage_number_flat:u32){
|
||||
let mut dev_stat=DEV_STAT.lock().unwrap();
|
||||
dev_stat.average_number_data=arverage_number_data;
|
||||
dev_stat.average_number_dark=arverage_number_dark;
|
||||
dev_stat.average_number_flat=arverage_number_flat;
|
||||
}
|
@ -1,23 +1,26 @@
|
||||
use super::mydefine::*;
|
||||
pub mod is11server;
|
||||
pub mod is11base;
|
||||
pub mod is11server;
|
||||
use super::mylog::*;
|
||||
use is11server::get_shuttertime;
|
||||
use serde_json::json;
|
||||
use std::ffi::CStr;
|
||||
use super::mylog::*;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
pub fn sendtoport_andgetreturn(
|
||||
data: serde_json::Value,
|
||||
datatype: serde_json::Value,
|
||||
) -> Result<RetStruct, String> {
|
||||
|
||||
let command = data.get("command").unwrap().to_string();
|
||||
|
||||
println!("start_collect data:{}", data.to_string());
|
||||
match command.as_str() {
|
||||
|
||||
"\"start_collect_flat\"" => {
|
||||
return start_collect_flat(data, datatype);
|
||||
},
|
||||
|
||||
"\"start_collect_dark\"" => {
|
||||
return start_collect_dark(data, datatype);
|
||||
},
|
||||
"\"get_sensor_info\"" => {
|
||||
is11base::is11_init();
|
||||
logtorust("init is11 ok".to_string());
|
||||
@ -27,7 +30,7 @@ pub fn sendtoport_andgetreturn(
|
||||
let serilnumber_cstr = unsafe { CStr::from_ptr(sensor_info.serialnumber.as_ptr()) };
|
||||
let serilnumber = serilnumber_cstr.to_str().unwrap();
|
||||
//定义一个json对象
|
||||
let jsonforret= json!({
|
||||
let jsonforret = json!({
|
||||
"bochangxishu":{
|
||||
"a0":sensor_info.a1,
|
||||
"a1":sensor_info.a2,
|
||||
@ -35,22 +38,25 @@ pub fn sendtoport_andgetreturn(
|
||||
"a3":sensor_info.a4,
|
||||
},
|
||||
"serialnumber":serilnumber,
|
||||
"name":sensor_name,
|
||||
|
||||
"name":"IS11",
|
||||
// "name":sensor_name,
|
||||
"version":"1.0.0",
|
||||
"return_data_type":0,
|
||||
"work_mode":"advanced_mode",
|
||||
"sensor":"JZ-IS11",
|
||||
|
||||
});
|
||||
logtorust(format!("get_sensor_info:{}",jsonforret.to_string()));
|
||||
logtorust(format!("get_sensor_info:{}", jsonforret.to_string()));
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: jsonforret.to_string(),
|
||||
data:IS11DataStruct::default() ,
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
}
|
||||
"\"start_opt\"" => {
|
||||
is11server::opt_sensor(90);
|
||||
let jsonforret= json!({
|
||||
let jsonforret = json!({
|
||||
"command":"start_opt"
|
||||
|
||||
});
|
||||
@ -59,82 +65,139 @@ pub fn sendtoport_andgetreturn(
|
||||
content: jsonforret.to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
"\"get_opt\"" => {
|
||||
println!("get_opt");
|
||||
let ret=get_opt_result();
|
||||
let ret = get_opt_result();
|
||||
return ret;
|
||||
|
||||
}
|
||||
"\"start_collect\"" => {
|
||||
return start_collect(data,datatype);
|
||||
|
||||
return start_collect(data, datatype);
|
||||
}
|
||||
|
||||
"\"get_caiji_state\"" =>{
|
||||
let (caiji_state,caiji_state_str)=is11server::get_now_stat();
|
||||
let jsonforret= json!({
|
||||
|
||||
"\"get_caiji_state\"" => {
|
||||
let (caiji_state, caiji_state_str,percent) = is11server::get_now_stat();
|
||||
let jsonforret = json!({
|
||||
"caiji_state":caiji_state,
|
||||
"info":caiji_state_str,
|
||||
"percent":percent,
|
||||
"return_data_type":0,
|
||||
});
|
||||
logtorust(format!("get_caiji_state:{}",jsonforret.to_string()));
|
||||
logtorust(format!("get_caiji_state:{}", jsonforret.to_string()));
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: jsonforret.to_string(),
|
||||
data:IS11DataStruct::default() ,
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
|
||||
}
|
||||
"\"get_data\""=>{
|
||||
return get_data(data,datatype);
|
||||
}
|
||||
"\"get_data\"" => {
|
||||
return get_data(data, datatype);
|
||||
},
|
||||
"\"get_data_flat\"" => {
|
||||
return get_data_flat(data, datatype);
|
||||
},
|
||||
"\"get_data_dark\"" => {
|
||||
return get_data_dark(data, datatype);
|
||||
},
|
||||
"\"set_shutter_time\"" => {
|
||||
return set_shutter_time(data, datatype);
|
||||
},
|
||||
_ => {
|
||||
return Err("command not found ".to_string()+"command is:"+&command);
|
||||
return Err("command not found ".to_string() + "command is:" + &command);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: "指令未实现".to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
pub fn get_opt_result() -> Result<RetStruct, String> {
|
||||
|
||||
|
||||
let shuttertime = is11server::get_shuttertime();
|
||||
|
||||
let jsonret = json!({
|
||||
"opt":shuttertime,
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: jsonret.to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
pub fn start_collect( data: serde_json::Value,
|
||||
pub fn set_shutter_time(data: serde_json::Value,
|
||||
datatype: serde_json::Value) -> Result<RetStruct, String> {
|
||||
let shuttertime = data.get("shutter_time").unwrap().as_u64().unwrap() as u32;
|
||||
logtorust(format!("start_collect,shutter time is:{}",shuttertime));
|
||||
|
||||
is11server::collect(shuttertime);
|
||||
|
||||
let shuttertime: u32;
|
||||
if data.get("shutter_time").is_none() {
|
||||
shuttertime = get_shuttertime() as u32;
|
||||
} else {
|
||||
shuttertime = data.get("shutter_time").unwrap().as_u64().unwrap() as u32;
|
||||
is11server::set_shutter_time(shuttertime);
|
||||
}
|
||||
|
||||
|
||||
let jsonret = json!({
|
||||
"shuttertime":"ok",
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: jsonret.to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
}
|
||||
pub fn start_collect(
|
||||
data: serde_json::Value,
|
||||
datatype: serde_json::Value,
|
||||
) -> Result<RetStruct, String> {
|
||||
|
||||
|
||||
let shuttertime: u32;
|
||||
if data.get("shutter_time").is_none() {
|
||||
shuttertime = get_shuttertime() as u32;
|
||||
} else {
|
||||
shuttertime = data.get("shutter_time").unwrap().as_u64().unwrap() as u32;
|
||||
}
|
||||
//判断是否有这个参数
|
||||
|
||||
let removedark: bool;
|
||||
if data.get("remove_dark").is_none() {
|
||||
removedark = false;
|
||||
} else {
|
||||
if data.get("remove_dark").unwrap().is_boolean() {
|
||||
removedark = data.get("remove_dark").unwrap().as_bool().unwrap();
|
||||
} else if data.get("remove_dark").unwrap().is_string() {
|
||||
let remove_dark_str = data.get("remove_dark").unwrap().as_str().unwrap();
|
||||
if remove_dark_str == "yes" {
|
||||
removedark = true;
|
||||
} else {
|
||||
removedark = false;
|
||||
}
|
||||
} else {
|
||||
removedark = false;
|
||||
}
|
||||
}
|
||||
|
||||
let computeflat = is11server::get_is_computeref();
|
||||
logtorust(format!("start_collect,shutter time is:{}", shuttertime));
|
||||
if !data.get("collect_times").is_none() {
|
||||
if data.get("collect_times").unwrap().is_u64() {
|
||||
let collect_times = data.get("collect_times").unwrap().as_u64().unwrap() as u32;
|
||||
is11server::set_average_number(collect_times,collect_times,collect_times );
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
is11server::collect(shuttertime, removedark, computeflat);
|
||||
let jsonret = json!({
|
||||
"command":"start_collect"
|
||||
|
||||
@ -144,26 +207,116 @@ pub fn start_collect( data: serde_json::Value,
|
||||
content: jsonret.to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
}
|
||||
|
||||
pub fn start_collect_dark(
|
||||
data: serde_json::Value,
|
||||
datatype: serde_json::Value,
|
||||
) -> Result<RetStruct, String> {
|
||||
let shuttertime: u32;
|
||||
if data.get("shutter_time").is_none() {
|
||||
shuttertime = get_shuttertime() as u32;
|
||||
} else {
|
||||
shuttertime = data.get("shutter_time").unwrap().as_u64().unwrap() as u32;
|
||||
}
|
||||
//判断是否有这个参数
|
||||
if !data.get("collect_times").is_none() {
|
||||
if data.get("collect_times").unwrap().is_u64() {
|
||||
let collect_times = data.get("collect_times").unwrap().as_u64().unwrap() as u32;
|
||||
is11server::set_average_number(collect_times,collect_times,collect_times );
|
||||
}
|
||||
}
|
||||
|
||||
is11server::collcect_dark(shuttertime);
|
||||
let jsonret = json!({
|
||||
"command":"start_collect_dark"
|
||||
|
||||
});
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: jsonret.to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
pub fn get_data( data: serde_json::Value,
|
||||
datatype: serde_json::Value) -> Result<RetStruct, String> {
|
||||
pub fn start_collect_flat(
|
||||
data: serde_json::Value,
|
||||
datatype: serde_json::Value,
|
||||
) -> Result<RetStruct, String> {
|
||||
let shuttertime: u32;
|
||||
if data.get("shutter_time").is_none() {
|
||||
shuttertime = get_shuttertime() as u32;
|
||||
} else {
|
||||
shuttertime = data.get("shutter_time").unwrap().as_u64().unwrap() as u32;
|
||||
}
|
||||
//判断是否有这个参数
|
||||
if !data.get("collect_times").is_none() {
|
||||
if data.get("collect_times").unwrap().is_u64() {
|
||||
let collect_times = data.get("collect_times").unwrap().as_u64().unwrap() as u32;
|
||||
is11server::set_average_number(collect_times,collect_times,collect_times );
|
||||
}
|
||||
}
|
||||
|
||||
let is11_data=is11server::get_data() ;
|
||||
|
||||
is11server::collcect_flat(shuttertime);
|
||||
let jsonret = json!({
|
||||
"command":"start_collect_flat"
|
||||
|
||||
});
|
||||
return Ok(RetStruct {
|
||||
datatype: 0,
|
||||
content: jsonret.to_string(),
|
||||
data: IS11DataStruct::default(),
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
pub fn get_data(data: serde_json::Value, datatype: serde_json::Value) -> Result<RetStruct, String> {
|
||||
let is11_data = is11server::get_data();
|
||||
|
||||
let jsonret = json!({
|
||||
"command":"get_data"
|
||||
|
||||
});
|
||||
|
||||
return Ok(RetStruct {
|
||||
datatype: 2,
|
||||
content: jsonret.to_string(),
|
||||
data: is11_data,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn get_data_flat(data: serde_json::Value, datatype: serde_json::Value) -> Result<RetStruct, String> {
|
||||
let is11_data = is11server::get_data_flat();
|
||||
|
||||
let jsonret = json!({
|
||||
"command":"get_data_flat"
|
||||
|
||||
});
|
||||
|
||||
return Ok(RetStruct {
|
||||
datatype: 2,
|
||||
content:jsonret.to_string(),
|
||||
content: jsonret.to_string(),
|
||||
data: is11_data,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_data_dark(data: serde_json::Value, datatype: serde_json::Value) -> Result<RetStruct, String> {
|
||||
let is11_data = is11server::get_data_dark();
|
||||
|
||||
let jsonret = json!({
|
||||
"command":"get_data_dark"
|
||||
|
||||
});
|
||||
|
||||
return Ok(RetStruct {
|
||||
datatype: 2,
|
||||
content: jsonret.to_string(),
|
||||
data: is11_data,
|
||||
});
|
||||
}
|
@ -6,27 +6,90 @@ mod mylog;
|
||||
mod serport;
|
||||
mod irishypersptral;
|
||||
mod mydefine;
|
||||
mod comman;
|
||||
mod comman1;
|
||||
mod jianzhiis11;
|
||||
use comman::*;
|
||||
use comman1::*;
|
||||
use algorithm::interpolate_spline;
|
||||
use algorithm::sg_smooth;
|
||||
use mydefine::*;
|
||||
|
||||
enum DevName {
|
||||
IRIS_IS11,
|
||||
JZ_IS11
|
||||
|
||||
}
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
use tauri::api::version;
|
||||
use std::sync::Mutex;
|
||||
use std::sync::Arc;
|
||||
//设置一个可修改的全局变量
|
||||
lazy_static! {
|
||||
static ref DEVNAME: Mutex<DevName> = Mutex::new(DevName::IRIS_IS11);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[tauri::command]
|
||||
fn setport(data: serde_json::Value) -> String {
|
||||
//判断是否存在portname和baudrate
|
||||
if !data.is_object() {
|
||||
return String::from("Invalid data");
|
||||
}
|
||||
if !data["portname"].is_string() || !data["baudrate"].is_u64() {
|
||||
return String::from("Invalid data");
|
||||
}
|
||||
let portname = data["portname"].as_str().unwrap();
|
||||
let baudrate = data["baudrate"].as_u64().unwrap() as u32;
|
||||
serport::serport::set_port_info(&portname.to_string(), baudrate);
|
||||
//println!("{}",readdatafromport(1000));
|
||||
String::from("Port set ok")
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
fn savecalibratefile(gain: Vec<f32>, shutter: u32, direction: bool, filepath: String) -> String {
|
||||
irishypersptral::savecalibratefile_iris(gain, shutter, direction, filepath)
|
||||
let devname=DEVNAME.lock().unwrap();
|
||||
match *devname {
|
||||
DevName::IRIS_IS11=>{
|
||||
return irishypersptral::savecalibratefile_iris(gain, shutter, direction, filepath);
|
||||
},
|
||||
DevName::JZ_IS11=>{
|
||||
return irishypersptral::savecalibratefile_iris(gain, shutter, direction, filepath);
|
||||
//return jianzhiis11::s(gain, shutter, direction, filepath);
|
||||
}
|
||||
|
||||
}
|
||||
//irishypersptral::savecalibratefile_iris(gain, shutter, direction, filepath)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
fn sendcalibratetodev(gain: Vec<f32>, shutter: u32, direction: bool) -> String {
|
||||
irishypersptral::sendcalibratetodev_iris(gain, shutter, direction)
|
||||
fn sendcalibratetodev(gain: Vec<f32>, shutter: u32, direction: u32) -> String {
|
||||
let devname=DEVNAME.lock().unwrap();
|
||||
println!("sendcalibratetodev");
|
||||
match *devname {
|
||||
DevName::IRIS_IS11=>{
|
||||
return irishypersptral::sendcalibratetodev_iris(gain, shutter, direction !=0);
|
||||
},
|
||||
DevName::JZ_IS11=>{
|
||||
return irishypersptral::sendcalibratetodev_iris(gain, shutter, direction !=0);
|
||||
//return jianzhiis11::s(gain, shutter, direction, filepath);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//irishypersptral::sendcalibratetodev_iris(gain, shutter, direction)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#[tauri::command]
|
||||
fn __sendto_portbinary(data: Vec<u8>, command: u8) -> String {
|
||||
irishypersptral::sendtoportbinary_iris(data, command)
|
||||
@ -42,13 +105,53 @@ fn readformport(commanid: serde_json::Value, wait_time_json: serde_json::Value)
|
||||
irishypersptral::readformport_iris(commanid, wait_time_json)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
fn opencom(portname: serde_json::Value, baudrate: serde_json::Value) -> String {
|
||||
//tauri
|
||||
let portname = portname.as_str().unwrap();
|
||||
let devname=DEVNAME.lock().unwrap();
|
||||
let mut baudrate :u32=0;
|
||||
match *devname {
|
||||
DevName::IRIS_IS11=>{
|
||||
baudrate =115200 as u32;
|
||||
},
|
||||
DevName::JZ_IS11=>{
|
||||
baudrate =921600 as u32;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// let baudrate = baudrate.as_u64().unwrap() as u32;
|
||||
serport::serport::set_port_info(&portname.to_string(), baudrate);
|
||||
|
||||
println!("opencom portname:{} baudrate:{}", portname, baudrate);
|
||||
mylog::logtorust(format!(
|
||||
"opencom portname:{} baudrate:{}",
|
||||
portname, baudrate
|
||||
));
|
||||
serport::serport::tryuseport()
|
||||
}
|
||||
#[tauri::command]
|
||||
fn sendtoport_andgetreturn(
|
||||
data: serde_json::Value,
|
||||
datatype: serde_json::Value,
|
||||
) -> Result<RetStruct, String> {
|
||||
//irishypersptral::sendtoport_andgetreturn_iris(data, datatype)
|
||||
jianzhiis11::sendtoport_andgetreturn(data, datatype)
|
||||
//irishypersptral::sendtoport_andgetreturn_iris(data, datatype)
|
||||
let devname=DEVNAME.lock().unwrap();
|
||||
match *devname {
|
||||
DevName::IRIS_IS11=>{
|
||||
return irishypersptral::sendtoport_andgetreturn_iris(data, datatype);
|
||||
},
|
||||
DevName::JZ_IS11=>{
|
||||
return jianzhiis11::sendtoport_andgetreturn(data, datatype);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//jianzhiis11::sendtoport_andgetreturn(data, datatype)
|
||||
|
||||
}
|
||||
|
||||
@ -69,7 +172,6 @@ fn main() {
|
||||
greet,
|
||||
getportnames,
|
||||
opencom,
|
||||
setport,
|
||||
closecome,
|
||||
sendtoport_andgetreturn,
|
||||
readformport,
|
||||
@ -83,7 +185,18 @@ fn main() {
|
||||
algorithm::find_peek
|
||||
])
|
||||
.setup(|app| {
|
||||
|
||||
|
||||
|
||||
let config = app.config();
|
||||
|
||||
|
||||
// 打印配置信息,例如窗口标题
|
||||
let producnaem = config.package.product_name.clone().unwrap();
|
||||
let version=config.package.version.clone().unwrap();
|
||||
println!("producnaem:{:?}", producnaem);
|
||||
let main_window = app.get_window("main").unwrap();
|
||||
main_window.set_title(&(producnaem+"_v"+&version));
|
||||
|
||||
// 获取屏幕大小
|
||||
if let Some(monitor) = main_window.primary_monitor().unwrap() {
|
||||
|
@ -25,6 +25,9 @@ pub struct IS11DataStruct {
|
||||
pub hour:u8,
|
||||
pub minute:u8,
|
||||
pub second:u8,
|
||||
pub nca:u8,
|
||||
pub ncb:u8,
|
||||
pub ncc:u8,
|
||||
pub shutter_time: u32,
|
||||
pub index: u64,
|
||||
pub temprature: [f32; 8],
|
||||
@ -45,7 +48,9 @@ pub struct IS11DataStruct {
|
||||
hour:0,
|
||||
minute:0,
|
||||
second:0,
|
||||
|
||||
nca:0,
|
||||
ncb:0,
|
||||
ncc:0,
|
||||
shutter_time: 0,
|
||||
index: 0,
|
||||
temprature: [0.0; 8],
|
||||
@ -67,6 +72,10 @@ impl IS11DataStruct {
|
||||
hour: self.hour,
|
||||
minute: self.minute,
|
||||
second: self.second,
|
||||
nca:self.nca,
|
||||
ncb:self.ncb,
|
||||
ncc:self.ncc,
|
||||
|
||||
shutter_time: self.shutter_time,
|
||||
index: self.index,
|
||||
temprature: self.temprature,
|
||||
|
@ -57,7 +57,10 @@ pub fn set_port_info(portname: &String, baudrate: u32) {
|
||||
|
||||
pub fn get_port_name() -> Vec<String> {
|
||||
let ports = serialport::available_ports().expect("No ports found!");
|
||||
println!("Available ports:{}", ports.len());
|
||||
let mut portnames: Vec<String> = Vec::new();
|
||||
println!("{}",portnames.len() );
|
||||
// portnames.push("COM5".to_string());
|
||||
for p in ports {
|
||||
portnames.push(p.port_name);
|
||||
}
|
||||
@ -91,7 +94,8 @@ pub fn closeport() -> String {
|
||||
//关闭端口
|
||||
port_info.port = None;
|
||||
println!("Port is closed");
|
||||
String::from("Port is closed")
|
||||
String::from("串口已关闭")
|
||||
//String::from("Port is closed")
|
||||
}
|
||||
|
||||
pub fn sendtoprot(data: Vec<u8>) -> String {
|
||||
|
Reference in New Issue
Block a user