diff --git a/README.md b/README.md
index cc6e64b..ab7744a 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
# 通用光谱采集软件
+插入复选框
+aaa Checkbox 1
diff --git a/index.html b/index.html
index 470da4e..16ca539 100644
--- a/index.html
+++ b/index.html
@@ -23,7 +23,7 @@
padding: 0px;
}
-
+
diff --git a/package.json b/package.json
index 29b627a..f96a025 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
"scripts": {
"dev": "vite",
"build": "vite build",
+ "mybuild": "node -e \"require('child_process').exec('powershell -ExecutionPolicy Bypass -File ./src-tauri/pre-build.ps1')\"",
"preview": "vite preview",
"tauri": "tauri"
},
diff --git a/src-tauri/.cargo/config.toml b/src-tauri/.cargo/config.toml
new file mode 100644
index 0000000..0e7dd6c
--- /dev/null
+++ b/src-tauri/.cargo/config.toml
@@ -0,0 +1,4 @@
+[unstable]
+features = ["warn-unused"]
+warn-unused-features = false
+
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 9949c52..937a661 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -1497,9 +1497,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.153"
+version = "0.2.156"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+checksum = "a5f43f184355eefb8d17fc948dbecf6c13be3c141f20d834ae842193a448c72a"
[[package]]
name = "libredox"
@@ -1686,9 +1686,11 @@ dependencies = [
name = "myfirst_tauri"
version = "0.0.0"
dependencies = [
+ "chrono",
"csv",
"find_peaks",
"lazy_static",
+ "libc",
"ndarray",
"ndarray-ndimage",
"ndarray-stats",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 2dd1303..7daf8d8 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -26,6 +26,8 @@ ndarray-ndimage = "0.4.0"
find_peaks = "0.1.5"
csv = "1.3.0"
tklog = "0.0.8"
+libc = "0.2.156"
+chrono = "0.4.38"
diff --git a/src-tauri/aaa.iss b/src-tauri/aaa.iss
new file mode 100644
index 0000000..2d0b7a5
--- /dev/null
+++ b/src-tauri/aaa.iss
@@ -0,0 +1,12 @@
+[Setup]
+AppName=MyApp
+AppVersion=1.0
+DefaultDirName={pf}\MyApp
+OutputDir=.
+OutputBaseFilename=MyAppInstaller
+
+[Files]
+Source: "src-tauri/target/release/bundle/msi/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
+
+[Run]
+Filename: "{app}\path\to\vsruntime\installer.exe"; Parameters: "/quiet /norestart"; Flags: waituntilterminated
\ No newline at end of file
diff --git a/src-tauri/config.json b/src-tauri/config.json
index 22adfc4..7f09fd5 100644
--- a/src-tauri/config.json
+++ b/src-tauri/config.json
@@ -1 +1 @@
-{"pathofsave":"D:\\01Hydata\\123123123\\test2","Filename":"test","caijiavgNumber":"1","useSG":false,"usehighpass":true}
\ No newline at end of file
+{"pathofsave":"D:\\06Learn\\rust\\tarui\\testdarta","Filename":"test","caijiavgNumber":"1","useSG":true,"usehighpass":true}
\ No newline at end of file
diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png
deleted file mode 100644
index 6be5e50..0000000
Binary files a/src-tauri/icons/128x128.png and /dev/null differ
diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png
deleted file mode 100644
index e81bece..0000000
Binary files a/src-tauri/icons/128x128@2x.png and /dev/null differ
diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png
deleted file mode 100644
index a437dd5..0000000
Binary files a/src-tauri/icons/32x32.png and /dev/null differ
diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png
deleted file mode 100644
index 0ca4f27..0000000
Binary files a/src-tauri/icons/Square107x107Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png
deleted file mode 100644
index b81f820..0000000
Binary files a/src-tauri/icons/Square142x142Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png
deleted file mode 100644
index 624c7bf..0000000
Binary files a/src-tauri/icons/Square150x150Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png
deleted file mode 100644
index c021d2b..0000000
Binary files a/src-tauri/icons/Square284x284Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png
deleted file mode 100644
index 6219700..0000000
Binary files a/src-tauri/icons/Square30x30Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png
deleted file mode 100644
index f9bc048..0000000
Binary files a/src-tauri/icons/Square310x310Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png
deleted file mode 100644
index d5fbfb2..0000000
Binary files a/src-tauri/icons/Square44x44Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png
deleted file mode 100644
index 63440d7..0000000
Binary files a/src-tauri/icons/Square71x71Logo.png and /dev/null differ
diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png
deleted file mode 100644
index f3f705a..0000000
Binary files a/src-tauri/icons/Square89x89Logo.png and /dev/null differ
diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png
deleted file mode 100644
index 4556388..0000000
Binary files a/src-tauri/icons/StoreLogo.png and /dev/null differ
diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns
deleted file mode 100644
index 12a5bce..0000000
Binary files a/src-tauri/icons/icon.icns and /dev/null differ
diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico
index b3636e4..f41a54e 100644
Binary files a/src-tauri/icons/icon.ico and b/src-tauri/icons/icon.ico differ
diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png
deleted file mode 100644
index e1cd261..0000000
Binary files a/src-tauri/icons/icon.png and /dev/null differ
diff --git a/src-tauri/is11lib.dll b/src-tauri/is11lib.dll
new file mode 100644
index 0000000..5c6b333
Binary files /dev/null and b/src-tauri/is11lib.dll differ
diff --git a/src-tauri/pre-build.ps1 b/src-tauri/pre-build.ps1
new file mode 100644
index 0000000..34bfa3f
--- /dev/null
+++ b/src-tauri/pre-build.ps1
@@ -0,0 +1,2 @@
+copy ..\\myis11\\project\\is11\\cmake-build-release-visual-studio-2022\\is11lib.dll ./src-tauri
+
diff --git a/src-tauri/src/algorithm/mod.rs b/src-tauri/src/algorithm/mod.rs
index 8dd40e8..49671ef 100644
--- a/src-tauri/src/algorithm/mod.rs
+++ b/src-tauri/src/algorithm/mod.rs
@@ -18,7 +18,7 @@ pub fn sg_smooth(data: Vec, window: usize, order: usize) -> Vec {
smoothmethod::savgol(data, window, order)
}
#[tauri::command]
-pub fn Gaussian_filter_high(data: Vec, sigma: f64) -> Vec {
+pub fn gaussian_filter_high(data: Vec, sigma: f64) -> Vec {
sharpmethod::high_pass_gaussian_filter(data, sigma)
}
diff --git a/src-tauri/src/algorithm/spectraltools.rs b/src-tauri/src/algorithm/spectraltools.rs
index b9ba5c8..3004252 100644
--- a/src-tauri/src/algorithm/spectraltools.rs
+++ b/src-tauri/src/algorithm/spectraltools.rs
@@ -5,9 +5,9 @@ use std::error::Error;
use find_peaks::PeakFinder;
-pub fn interpolate_spline,>(x_T: Vec, y_T: Vec, step: f64) -> Result, Box> {
- let x: Vec = x_T.iter().map(|&x| x.into()).collect();
- let y: Vec = y_T.iter().map(|&y| y.into()).collect();
+pub fn interpolate_spline,>(x_t: Vec, y_t: Vec, step: f64) -> Result, Box> {
+ let x: Vec = x_t.iter().map(|&x| x.into()).collect();
+ let y: Vec = y_t.iter().map(|&y| y.into()).collect();
if x.len() != y.len() {
return Err("x and y must have the same length".into());
@@ -39,9 +39,9 @@ pub fn interpolate_spline,>(x_T: Vec, y_T: Vec, step:
Ok(result)
}
-pub fn interpolate_spline_at_points>(x_T: Vec, y_T: Vec, x_target: Vec) -> Result, Box> {
- let x: Vec = x_T.iter().map(|&x| x.into()).collect();
- let y: Vec = y_T.iter().map(|&y| y.into()).collect();
+pub fn interpolate_spline_at_points>(x_t: Vec, y_t: Vec, x_target: Vec) -> Result, Box> {
+ let x: Vec = x_t.iter().map(|&x| x.into()).collect();
+ let y: Vec = y_t.iter().map(|&y| y.into()).collect();
if x.len() != y.len() {
return Err("x and y must have the same length".into());
diff --git a/src-tauri/src/comman.rs b/src-tauri/src/comman.rs
new file mode 100644
index 0000000..bf1b53b
--- /dev/null
+++ b/src-tauri/src/comman.rs
@@ -0,0 +1,51 @@
+
+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 {
+ 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()
+}
\ No newline at end of file
diff --git a/src-tauri/src/irishypersptral/mod.rs b/src-tauri/src/irishypersptral/mod.rs
new file mode 100644
index 0000000..8661efe
--- /dev/null
+++ b/src-tauri/src/irishypersptral/mod.rs
@@ -0,0 +1,376 @@
+#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
+use core::str;
+use std::fs;
+use std::fs::File;
+use std::io::{self, Read, Write};
+// use std::sync::WaitTimeoutResult;
+use std::path::Path;
+use super::algorithm::interpolate_spline;
+use super::algorithm::sg_smooth;
+use std::mem;
+
+use super::mylog::*;
+use serde::{Deserialize, Serialize};
+use serde_with::serde_as;
+use super::serport::serport::*;
+use super::mydefine::*;
+
+
+
+pub fn savecalibratefile_iris(gain: Vec, shutter: u32, direction: bool, filepath: String) -> String {
+ let mut data = IS11DataStruct::default();
+ data.data = gain.as_slice().try_into().unwrap();
+ data.shutter_time = shutter as u32;
+ data.direction = if direction { 1 } else { 0 };
+ data.datatype = 0x04;
+ let mut buffer = vec![0u8; mem::size_of::()];
+
+ // 序列化为二进制数据
+ unsafe {
+ let ptr = &data as *const IS11DataStruct as *const u8;
+ std::ptr::copy_nonoverlapping(ptr, buffer.as_mut_ptr(), mem::size_of::());
+ }
+ // 序列化为二进制数据
+ let file_path = Path::new(&filepath);
+
+ // 获取文件路径的父目录
+ if let Some(parent) = file_path.parent() {
+ // 确保父目录存在
+ if !parent.exists() {
+ fs::create_dir_all(parent).unwrap();
+ println!("父目录已创建: {:?}", parent);
+ } else {
+ println!("父目录已存在: {:?}", parent);
+ }
+ } else {
+ println!("文件路径没有父目录");
+ }
+ let mut file = File::create(filepath).unwrap();
+ file.write_all(&buffer).unwrap();
+
+ "OK".to_string()
+}
+
+
+
+pub fn sendcalibratetodev_iris(gain: Vec, shutter: u32, direction: bool) -> String {
+ let mut data = IS11DataStruct::default();
+ data.data = gain.as_slice().try_into().unwrap();
+ data.shutter_time = shutter as u32;
+ data.direction = if direction { 1 } else { 0 };
+ data.datatype = 0x04;
+ let mut buffer = vec![0u8; mem::size_of::()];
+ // 序列化为二进制数据
+ unsafe {
+ let ptr = &data as *const IS11DataStruct as *const u8;
+ std::ptr::copy_nonoverlapping(ptr, buffer.as_mut_ptr(), mem::size_of::());
+ }
+ sendtoportbinary_iris(buffer, 0x03);
+ "OK".to_string()
+}
+
+pub fn sendtoportbinary_iris(data: Vec, command: u8) -> String {
+ let lenth = data.len() as u16;
+ let high: u8 = (lenth >> 8) as u8;
+ let low: u8 = (lenth & 0xFF) as u8;
+ let mut header = vec![];
+ header.push(0x55);
+ header.push(0xAA);
+ let mut crcbody = vec![];
+ // crcbody.push(high);
+ // crcbody.push(low);
+ crcbody.extend(data);
+ let crc = iris_calc_crc(&crcbody);
+ let crchigh: u8 = (crc >> 8) as u8;
+ let crclow: u8 = (crc & 0xFF) as u8;
+ let mut senddata = vec![];
+ senddata.extend(header);
+ senddata.push(command);
+ senddata.push(high);
+ senddata.push(low);
+ senddata.extend(crcbody);
+ senddata.push(crchigh);
+ senddata.push(crclow);
+
+ // println!("sendtoport data:{}",senddata.len());
+ println!(
+ "sendtoport data content:{:X?}",
+ senddata
+ .iter()
+ .map(|&byte| format!("{:02X}", byte))
+ .collect::>()
+ .join(" ")
+ );
+ sendtoprot(senddata);
+ "send ok".to_string()
+}
+
+// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
+
+pub fn greet_iris(name: &str) -> String {
+ format!("Hello, {}! You've been greeted from Rust!", name)
+}
+
+pub fn getportnames_iris() -> Vec {
+ get_port_name()
+}
+
+
+pub fn opencom_iris(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()
+}
+
+pub fn closecome_iris() -> String {
+ closeport()
+}
+
+pub fn sendtoport_iris(data: serde_json::Value, datatype: serde_json::Value) -> String {
+ // println!("sendtoport data:{}",data.to_string());
+ //判断是否存在data
+ // if !data.is_object() {
+ // return String::from("Invalid data");
+ // }
+ println!("sendtoport data:{}", data.to_string());
+ logtorust(format!("sendtoport data:{}", data.to_string()));
+ let data = data.to_string().as_bytes().to_vec();
+ let lenth = data.len() as u16;
+ let high: u8 = (lenth >> 8) as u8;
+ let low: u8 = (lenth & 0xFF) as u8;
+ let mut header = vec![];
+ header.push(0x55);
+ header.push(0xAA);
+ let mut command: u8 = 0;
+ let datatype = datatype.as_str().unwrap();
+ println!("datatype:{}", datatype);
+ if datatype == "hex" {
+ command = 0x03;
+ }
+ if datatype == "string" {
+ command = 0x01;
+ }
+ if datatype == "json" {
+ command = 0x00;
+ }
+ let mut crcbody = vec![];
+ // crcbody.push(high);
+ // crcbody.push(low);
+ crcbody.extend(data);
+ let crc = iris_calc_crc(&crcbody);
+ let crchigh: u8 = (crc >> 8) as u8;
+ let crclow: u8 = (crc & 0xFF) as u8;
+ let mut senddata = vec![];
+ senddata.extend(header);
+ senddata.push(command);
+ senddata.push(high);
+ senddata.push(low);
+ senddata.extend(crcbody);
+ senddata.push(crchigh);
+ senddata.push(crclow);
+
+ // println!("sendtoport data:{}",senddata.len());
+ // println!(
+ // "sendtoport data content:{:X?}",
+ // senddata
+ // .iter()
+ // .map(|&byte| format!("{:02X}", byte))
+ // .collect::>()
+ // .join(" ")
+ // );
+ logtorust(format!(
+ "sendtoport data content:{:X?}",
+ senddata
+ .iter()
+ .map(|&byte| format!("{:02X}", byte))
+ .collect::>()
+ .join(" ")
+ ));
+
+ sendtoprot(senddata);
+ "send ok".to_string()
+}
+
+
+pub fn readformport_iris(commanid: serde_json::Value, wait_time_json: serde_json::Value) -> String {
+ let mut waittime = 50;
+ if wait_time_json.is_u64() {
+ waittime = wait_time_json.as_u64().unwrap() as u32;
+ }
+
+ let commanid = commanid.as_u64().unwrap() as u8;
+ let ret = readdatafromport(waittime as u64, commanid);
+ let str = String::from_utf8_lossy(&ret);
+ println!("read data: {}", str);
+ return str.to_string();
+}
+
+
+pub fn sendtoport_andgetreturn_iris(
+ data: serde_json::Value,
+ datatype: serde_json::Value,
+) -> Result {
+ // println!("sendtoport data:{}",data.to_string());
+ //判断是否存在data
+ // if !data.is_object() {
+ // return String::from("Invalid data");
+ // }
+
+ //println!("sendtoport data:{}", data.to_string());
+
+ let command = data.get("command").unwrap().to_string();
+ let mut isneedlog = true;
+ let mut isgetdata = false;
+ if command == "\"get_caiji_state\"" {
+ isneedlog = false;
+ }
+if command == "\"get_data\"" {
+ isgetdata = true;
+
+}
+
+ if isneedlog {
+ logtorust(format!("sendtoport data:{}", data.to_string()));
+ }
+
+ let data = data.to_string().as_bytes().to_vec();
+ let lenth = data.len() as u16;
+ let high: u8 = (lenth >> 8) as u8;
+ let low: u8 = (lenth & 0xFF) as u8;
+ let mut header = vec![];
+ header.push(0x55);
+ header.push(0xAA);
+ let mut command: u8 = 0;
+ let datatype = datatype.as_str().unwrap();
+ println!("datatype:{}", datatype);
+ if datatype == "hex" {
+ command = 0x03;
+ }
+ if datatype == "string" {
+ command = 0x01;
+ }
+ if datatype == "json" {
+ command = 0x00;
+ }
+ let mut crcbody = vec![];
+ // crcbody.push(high);
+ // crcbody.push(low);
+ crcbody.extend(data);
+ let crc = iris_calc_crc(&crcbody);
+ let crchigh: u8 = (crc >> 8) as u8;
+ let crclow: u8 = (crc & 0xFF) as u8;
+ let mut senddata = vec![];
+ senddata.extend(header);
+ senddata.push(command);
+ senddata.push(high);
+ senddata.push(low);
+ senddata.extend(crcbody);
+ senddata.push(crchigh);
+ senddata.push(crclow);
+
+ println!("sendtoport data:{}", senddata.len());
+ // println!(
+ // "sendtoport data content:{:X?}",
+ // senddata
+ // .iter()
+ // .map(|&byte| format!("{:02X}", byte))
+ // .collect::>()
+ // .join(" ")
+ // );
+ if isneedlog {
+ logtorust(format!(
+ "sendtoport data content:{:X?}",
+ senddata
+ .iter()
+ .map(|&byte| format!("{:02X}", byte))
+ .collect::>()
+ .join(" ")
+ ));
+ }
+
+ sendtoprot(senddata);
+ let mut ret = readdatafromport(50, 0xff);
+ let datatype = ret[0];
+
+ if isneedlog {
+ if !isgetdata{
+ logtorust(format!(
+ "read content: {:X?}",
+ ret.iter()
+ .map(|&byte| format!("{:02X}", byte))
+ .collect::>()
+ .join(" ")
+ ));
+ }
+ }
+ if isgetdata{
+ logtorust("Get data Back SUCCESS".to_string());
+ logtorust("_____________________________one_data_over_____________________________\n".to_string());
+ }
+
+
+ ret.remove(0);
+ ret.remove(0);
+ ret.remove(0);
+ if datatype == 0x02 {
+ let mut is11data = IS11DataStruct::default();
+ unsafe {
+ let mut is11data_ptr = &mut is11data as *mut IS11DataStruct;
+ let mut ret_ptr = &mut ret[0] as *mut u8;
+ std::ptr::copy_nonoverlapping(
+ ret_ptr,
+ is11data_ptr as *mut u8,
+ std::mem::size_of::(),
+ );
+ return Ok(RetStruct {
+ datatype: datatype,
+ content: "null".to_string(),
+ data: is11data,
+ });
+ }
+ }
+
+ let str = String::from_utf8_lossy(&ret);
+ // println!("read data: {}", str);
+ if datatype==0x00 &&isneedlog {
+ logtorust(format![
+ "read string: {}",
+ str.to_string()
+ ]);
+
+ }
+ return Ok(RetStruct {
+ datatype: datatype,
+ content: str.to_string(),
+ data: IS11DataStruct::default(),
+ });
+
+ // return str.to_string();
+}
+
+pub fn clearportbuff_iris() -> String {
+ clearserilport()
+}
+
+pub fn setport_iris(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")
+}
diff --git a/src-tauri/src/jianzhiis11/is11base.rs b/src-tauri/src/jianzhiis11/is11base.rs
new file mode 100644
index 0000000..a4524ab
--- /dev/null
+++ b/src-tauri/src/jianzhiis11/is11base.rs
@@ -0,0 +1,101 @@
+use libc::{c_uchar,c_char,c_long,c_float, size_t};
+use std::ffi::CStr;
+use std::slice;
+
+use super::super::serport::serport::*;
+#[repr(C)]
+pub struct STRSensorInfo {
+ pub SensorName: [c_char; 100],
+ pub maxValue: c_long,
+ pub BandNum: c_long,
+ pub serialnumber: [c_char; 100],
+ pub a1: c_float,
+ pub a2: c_float,
+ pub a3: c_float,
+ pub a4: c_float,
+ pub issensorinit: c_uchar,
+}
+
+impl Default for STRSensorInfo {
+ fn default() -> Self {
+ STRSensorInfo {
+ SensorName: [0; 100],
+ maxValue: 0,
+ BandNum: 0,
+ serialnumber: [0; 100],
+ a1: 0.0,
+ a2: 0.0,
+ a3: 0.0,
+ a4: 0.0,
+ issensorinit: 0,
+ }
+ }
+
+}
+
+
+type SerialWrite = Option size_t>;
+#[link(name = "D:/06Learn/rust/tarui/myis11/project/is11/cmake-build-release-visual-studio-2022/is11lib",kind = "dylib")]
+extern "C" {
+ fn Set_Serial_FUN(writefunc:SerialWrite,readfunc:SerialWrite);
+ fn abs1(input: i32) -> i32;
+ fn test();
+ fn IS11SensorInit() -> i32;
+ fn Get_SensorInfo() -> STRSensorInfo;
+ fn IS11OptSnenser(percent:i32) -> i32;
+ fn IS11GetData(outdata: *mut u16, shuttertime: i32) -> i32;
+
+}
+
+unsafe extern "C" fn serialsenddata(data: *mut c_uchar, length: size_t) -> size_t {
+ // 处理数据
+ let data_slice = slice::from_raw_parts(data, length as usize).to_vec();
+ // data_slice转换为Vec
+
+ // 打印数据
+ // for byte in data_slice.clone() {
+ // print!("{:02X} ", byte);
+ // }
+ // println!();
+ sendtoprot(data_slice);
+ length
+}
+use core::ptr;
+unsafe extern "C" fn serialreaddate(data: *mut c_uchar, length: size_t) -> size_t {
+
+ let dataout=readforport();
+ let length1: usize = dataout.len();
+ // 将结果复制给c_uchar
+ // for byte in dataout.clone() {
+ // print!("{:02X} ", byte);
+ // }
+ // println!();
+
+ ptr::copy_nonoverlapping(dataout.as_ptr(), data, length1);
+ // println!("{:?}",data);
+ length1
+}
+
+pub fn is11_init() -> i32 {
+ unsafe {
+ Set_Serial_FUN(Some(serialsenddata), Some(serialreaddate));
+ IS11SensorInit()
+ }
+}
+
+pub fn is11_get_sensor_info() -> STRSensorInfo {
+ unsafe { Get_SensorInfo() }
+}
+
+pub fn _is11_opt_snenser(percent: i32) -> i32 {
+ unsafe { IS11OptSnenser(percent) }
+}
+
+pub fn is11_get_data(shuttertime: i32) -> Vec {
+ let mut outdata: Vec = vec![0; 2048];
+ unsafe {
+ let len = IS11GetData(outdata.as_mut_ptr(), shuttertime);
+ outdata.truncate(len as usize);
+ }
+ outdata
+}
diff --git a/src-tauri/src/jianzhiis11/is11server.rs b/src-tauri/src/jianzhiis11/is11server.rs
new file mode 100644
index 0000000..958c373
--- /dev/null
+++ b/src-tauri/src/jianzhiis11/is11server.rs
@@ -0,0 +1,233 @@
+use super::is11base;
+use super::super::mydefine::*;
+use lazy_static::lazy_static;
+use chrono::{self, Datelike, Timelike};
+use std::thread;
+#[derive(PartialEq)]
+enum WorkStat {
+ IDLE,
+ WOKING,
+ STOP,
+ OPTING,
+
+}
+
+use std::{
+ sync::{Arc, Mutex},
+};
+struct is11_dev_data {
+ sensor_info: is11base::STRSensorInfo,
+ shuttertime: i32,
+ stat: WorkStat,
+ workname: String,
+
+}
+
+lazy_static! {
+ static ref DEV_STAT: Arc> = Arc::new(Mutex::new(is11_dev_data {
+ sensor_info: is11base::STRSensorInfo::default(),
+ shuttertime: 0,
+ stat: WorkStat::IDLE,
+ workname: "noting".to_string(),
+ }));
+}
+
+// lazy_static! {
+// static ref DATA: Arc>> = Arc::new(Mutex::new(Vec::new()));
+// }
+
+lazy_static! {
+ static ref DATA_IS11: Arc> = Arc::new(Mutex::new(IS11DataStruct::default()));
+ static ref DARK_DATA: Arc> = Arc::new(Mutex::new(IS11DataStruct::default()));
+ static ref FLAT_DATA: Arc> = Arc::new(Mutex::new(IS11DataStruct::default()));
+}
+
+
+
+
+
+
+
+pub fn get_shuttertime() -> i32 {
+ let dev_stat=DEV_STAT.lock().unwrap();
+ return dev_stat.shuttertime;
+}
+
+
+pub fn opt_sensor(percent: i32) -> i32 {
+
+
+
+ let mut dev_stat=DEV_STAT.lock().unwrap();
+ if dev_stat.stat != WorkStat::IDLE {
+ return -1;
+ }
+
+ dev_stat.stat=WorkStat::OPTING;
+ dev_stat.workname="opting".to_string();
+ drop(dev_stat); //释放锁
+ thread::spawn(move || {
+
+ let shuttertime= is11base::_is11_opt_snenser(90); //多线程设置曝光时间
+ let mut dev_statnow=DEV_STAT.lock().unwrap();
+ dev_statnow.stat=WorkStat::IDLE;
+ dev_statnow.shuttertime=shuttertime;
+ dev_statnow.workname="finish".to_string();
+ }
+ );
+
+
+ return 0;
+
+
+
+}
+
+pub fn get_now_stat()->(String,String){
+
+
+ let mut dev_stat=DEV_STAT.lock().unwrap();
+ match dev_stat.stat {
+ WorkStat::IDLE => {
+ return ("finish".to_string(),dev_stat.workname.clone());
+ },
+ WorkStat::WOKING => {
+ return ("working".to_string(),dev_stat.workname.clone());
+ },
+ WorkStat::STOP => {
+ return ("finish".to_string(),dev_stat.workname.clone());
+ },
+ WorkStat::OPTING => {
+ return ("opting".to_string(),dev_stat.workname.clone());
+ },
+
+ }
+
+
+}
+
+pub fn collect(shuttertime:u32){
+ let mut dev_stat=DEV_STAT.lock().unwrap();
+ if dev_stat.stat != WorkStat::IDLE {
+ return ;
+ }
+ dev_stat.stat=WorkStat::WOKING;
+ dev_stat.workname="采集中".to_string();
+ drop(dev_stat); //释放锁
+ thread::spawn(move || {
+
+ 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);
+ let mut tempis11data=IS11DataStruct::default();
+ for i in 0.._lenth {
+ tempis11data.data[i]=data[i] as f32;
+ }
+ // 获取当前时间
+ let now = chrono::Local::now();
+ tempis11data.year=(now.year()-2000) as u8;
+ tempis11data.month=now.month() as u8;
+ tempis11data.day=now.day() as u8;
+ tempis11data.hour=now.hour() as u8;
+ tempis11data.minute=now.minute() as u8;
+ tempis11data.second=now.second() as u8;
+ tempis11data.shutter_time=shuttertime;
+ tempis11data.index=0;
+ tempis11data.datatype=0;
+
+ let mut data1=DATA_IS11.lock().unwrap();
+ *data1=tempis11data;
+ dev_stat.stat=WorkStat::IDLE;
+ dev_stat.workname="finish".to_string();
+ });
+
+
+
+
+
+}
+
+pub fn collcect_dark(shuttertime:u32)
+{
+ let mut dev_stat=DEV_STAT.lock().unwrap();
+ if dev_stat.stat != WorkStat::IDLE {
+ return ;
+ }
+ dev_stat.stat=WorkStat::WOKING;
+ dev_stat.workname="采集中".to_string();
+ drop(dev_stat); //释放锁
+ thread::spawn(move || {
+
+ 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);
+ let mut tempis11data=IS11DataStruct::default();
+ for i in 0.._lenth {
+ tempis11data.data[i]=data[i] as f32;
+ }
+ //获取当前时间
+ let now = chrono::Local::now();
+ tempis11data.year=(now.year()-2000) as u8;
+ tempis11data.month=now.month() as u8;
+ tempis11data.day=now.day() as u8;
+ tempis11data.hour=now.hour() as u8;
+ tempis11data.minute=now.minute() as u8;
+ tempis11data.second=now.second() as u8;
+ tempis11data.shutter_time=shuttertime;
+ tempis11data.index=0;
+ tempis11data.datatype=0;
+
+ let mut data1=DARK_DATA.lock().unwrap();
+ *data1=tempis11data;
+ dev_stat.stat=WorkStat::IDLE;
+ dev_stat.workname="finish".to_string();
+ });
+
+
+}
+
+pub fn collcect_flat(shuttertime:u32)
+{
+ let mut dev_stat=DEV_STAT.lock().unwrap();
+ if dev_stat.stat != WorkStat::IDLE {
+ return ;
+ }
+ dev_stat.stat=WorkStat::WOKING;
+ dev_stat.workname="采集中".to_string();
+ drop(dev_stat); //释放锁
+ thread::spawn(move || {
+
+ 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);
+ let mut tempis11data=IS11DataStruct::default();
+ for i in 0.._lenth {
+ tempis11data.data[i]=data[i] as f32;
+ }
+ //获取当前时间
+ let now = chrono::Local::now();
+ tempis11data.year=(now.year()-2000) as u8;
+ tempis11data.month=now.month() as u8;
+ tempis11data.day=now.day() as u8;
+ tempis11data.hour=now.hour() as u8;
+ tempis11data.minute=now.minute() as u8;
+ tempis11data.second=now.second() as u8;
+ tempis11data.shutter_time=shuttertime;
+ tempis11data.index=0;
+ tempis11data.datatype=0;
+
+ let mut data1=FLAT_DATA.lock().unwrap();
+ *data1=tempis11data;
+ dev_stat.stat=WorkStat::IDLE;
+ dev_stat.workname="finish".to_string();
+ });
+}
+
+
+pub fn get_data()->IS11DataStruct{
+ let data1=DATA_IS11.lock().unwrap();
+ return data1.clone();
+}
\ No newline at end of file
diff --git a/src-tauri/src/jianzhiis11/mod.rs b/src-tauri/src/jianzhiis11/mod.rs
new file mode 100644
index 0000000..bf46242
--- /dev/null
+++ b/src-tauri/src/jianzhiis11/mod.rs
@@ -0,0 +1,169 @@
+use super::mydefine::*;
+pub mod is11server;
+pub mod is11base;
+use serde_json::json;
+use std::ffi::CStr;
+use super::mylog::*;
+
+
+
+
+
+
+pub fn sendtoport_andgetreturn(
+ data: serde_json::Value,
+ datatype: serde_json::Value,
+) -> Result {
+
+ let command = data.get("command").unwrap().to_string();
+
+ match command.as_str() {
+ "\"get_sensor_info\"" => {
+ is11base::is11_init();
+ logtorust("init is11 ok".to_string());
+ let sensor_info = is11base::is11_get_sensor_info();
+ let sensor_name_cstr = unsafe { CStr::from_ptr(sensor_info.SensorName.as_ptr()) };
+ let sensor_name = sensor_name_cstr.to_str().unwrap();
+ let serilnumber_cstr = unsafe { CStr::from_ptr(sensor_info.serialnumber.as_ptr()) };
+ let serilnumber = serilnumber_cstr.to_str().unwrap();
+ //定义一个json对象
+ let jsonforret= json!({
+ "bochangxishu":{
+ "a0":sensor_info.a1,
+ "a1":sensor_info.a2,
+ "a2":sensor_info.a3,
+ "a3":sensor_info.a4,
+ },
+ "serialnumber":serilnumber,
+ "name":sensor_name,
+ "version":"1.0.0",
+ "return_data_type":0,
+ "work_mode":"advanced_mode",
+
+ });
+ logtorust(format!("get_sensor_info:{}",jsonforret.to_string()));
+ return Ok(RetStruct {
+ datatype: 0,
+ content: jsonforret.to_string(),
+ data:IS11DataStruct::default() ,
+ });
+ }
+ "\"start_opt\"" => {
+ is11server::opt_sensor(90);
+ let jsonforret= json!({
+ "command":"start_opt"
+
+ });
+ return Ok(RetStruct {
+ datatype: 0,
+ content: jsonforret.to_string(),
+ data: IS11DataStruct::default(),
+ });
+
+
+ }
+ "\"get_opt\"" => {
+ println!("get_opt");
+ let ret=get_opt_result();
+ return ret;
+
+ }
+ "\"start_collect\"" => {
+ return start_collect(data,datatype);
+
+ }
+
+ "\"get_caiji_state\"" =>{
+ let (caiji_state,caiji_state_str)=is11server::get_now_stat();
+ let jsonforret= json!({
+ "caiji_state":caiji_state,
+ "info":caiji_state_str,
+ "return_data_type":0,
+ });
+ logtorust(format!("get_caiji_state:{}",jsonforret.to_string()));
+ return Ok(RetStruct {
+ datatype: 0,
+ content: jsonforret.to_string(),
+ data:IS11DataStruct::default() ,
+ });
+
+ }
+ "\"get_data\""=>{
+ return get_data(data,datatype);
+ }
+ _ => {
+ 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 {
+
+
+ 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,
+ datatype: serde_json::Value) -> Result {
+ let shuttertime = data.get("shutter_time").unwrap().as_u64().unwrap() as u32;
+ logtorust(format!("start_collect,shutter time is:{}",shuttertime));
+
+ is11server::collect(shuttertime);
+ let jsonret = json!({
+ "command":"start_collect"
+
+ });
+ 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 {
+
+ let is11_data=is11server::get_data() ;
+
+
+
+ let jsonret = json!({
+ "command":"get_data"
+
+ });
+
+
+ return Ok(RetStruct {
+ datatype: 2,
+ content:jsonret.to_string(),
+ data: is11_data,
+ });
+ }
\ No newline at end of file
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 6cb11fd..e46ab1e 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -1,418 +1,59 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
-use core::str;
-use serialport::new;
-use std::ffi::c_float;
-use std::fmt::format;
-use std::fs;
-use std::fs::File;
-use std::io::{self, Read, Write};
-// use std::sync::WaitTimeoutResult;
-use std::path::Path;
+
mod algorithm;
mod mylog;
mod serport;
+mod irishypersptral;
+mod mydefine;
+mod comman;
+mod jianzhiis11;
+use comman::*;
use algorithm::interpolate_spline;
use algorithm::sg_smooth;
-use std::mem;
+use mydefine::*;
-use mylog::*;
-use serde::{Deserialize, Serialize};
-use serde_with::serde_as;
-use serport::serport::*;
-#[derive(Serialize, Deserialize)]
-struct RetStruct {
- datatype: u8,
- content: String,
- data: IS11DataStruct,
-}
-#[serde_as]
-#[derive(Serialize, Deserialize)]
-#[repr(C)]
-struct IS11DataStruct {
- datatype: u8, // Using r# to allow the use of the keyword 'type'
- direction: u8,
- tuigan_stat: u8,
- shutter_time: u32,
- index: u64,
- temprature: [f32; 8],
- #[serde_as(as = "[_; 2048]")]
- data: [f32; 2048],
-}
-impl Default for IS11DataStruct {
- fn default() -> Self {
- IS11DataStruct {
- datatype: 0,
- direction: 10,
- tuigan_stat: 0,
- shutter_time: 0,
- index: 0,
- temprature: [0.0; 8],
- data: [0.0; 2048],
- }
- }
+
+
+
+
+#[tauri::command]
+fn savecalibratefile(gain: Vec, shutter: u32, direction: bool, filepath: String) -> String {
+ irishypersptral::savecalibratefile_iris(gain, shutter, direction, filepath)
}
#[tauri::command]
-fn savecalibratefile(Gain: Vec, shutter: u32, direction: bool, filepath: String) -> String {
- let mut data = IS11DataStruct::default();
- data.data = Gain.as_slice().try_into().unwrap();
- data.shutter_time = shutter as u32;
- data.direction = if direction { 1 } else { 0 };
- data.datatype = 0x04;
- let mut buffer = vec![0u8; mem::size_of::()];
-
- // 序列化为二进制数据
- unsafe {
- let ptr = &data as *const IS11DataStruct as *const u8;
- std::ptr::copy_nonoverlapping(ptr, buffer.as_mut_ptr(), mem::size_of::());
- }
- // 序列化为二进制数据
- let file_path = Path::new(&filepath);
-
- // 获取文件路径的父目录
- if let Some(parent) = file_path.parent() {
- // 确保父目录存在
- if !parent.exists() {
- fs::create_dir_all(parent).unwrap();
- println!("父目录已创建: {:?}", parent);
- } else {
- println!("父目录已存在: {:?}", parent);
- }
- } else {
- println!("文件路径没有父目录");
- }
- let mut file = File::create(filepath).unwrap();
- file.write_all(&buffer).unwrap();
-
- "OK".to_string()
-}
-
-#[tauri::command]
-fn sendcalibratetodev(Gain: Vec, shutter: u32, direction: bool) -> String {
- let mut data = IS11DataStruct::default();
- data.data = Gain.as_slice().try_into().unwrap();
- data.shutter_time = shutter as u32;
- data.direction = if direction { 1 } else { 0 };
- data.datatype = 0x04;
- let mut buffer = vec![0u8; mem::size_of::()];
- // 序列化为二进制数据
- unsafe {
- let ptr = &data as *const IS11DataStruct as *const u8;
- std::ptr::copy_nonoverlapping(ptr, buffer.as_mut_ptr(), mem::size_of::());
- }
- sendtoportbinary(buffer, 0x03);
- "OK".to_string()
-}
-
-fn sendtoportbinary(data: Vec, command: u8) -> String {
- let lenth = data.len() as u16;
- let high: u8 = (lenth >> 8) as u8;
- let low: u8 = (lenth & 0xFF) as u8;
- let mut header = vec![];
- header.push(0x55);
- header.push(0xAA);
- let mut crcbody = vec![];
- // crcbody.push(high);
- // crcbody.push(low);
- crcbody.extend(data);
- let crc = iris_calc_crc(&crcbody);
- let crchigh: u8 = (crc >> 8) as u8;
- let crclow: u8 = (crc & 0xFF) as u8;
- let mut senddata = vec![];
- senddata.extend(header);
- senddata.push(command);
- senddata.push(high);
- senddata.push(low);
- senddata.extend(crcbody);
- senddata.push(crchigh);
- senddata.push(crclow);
-
- // println!("sendtoport data:{}",senddata.len());
- println!(
- "sendtoport data content:{:X?}",
- senddata
- .iter()
- .map(|&byte| format!("{:02X}", byte))
- .collect::>()
- .join(" ")
- );
- sendtoprot(senddata);
- "send ok".to_string()
-}
-
-// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
-#[tauri::command]
-fn greet(name: &str) -> String {
- format!("Hello, {}! You've been greeted from Rust!", name)
-}
-
-#[tauri::command]
-fn getportnames() -> Vec {
- get_port_name()
-}
-
-#[tauri::command]
-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()
+fn sendcalibratetodev(gain: Vec, shutter: u32, direction: bool) -> String {
+ irishypersptral::sendcalibratetodev_iris(gain, shutter, direction)
}
#[tauri::command]
-fn closecome() -> String {
- closeport()
+fn __sendto_portbinary(data: Vec, command: u8) -> String {
+ irishypersptral::sendtoportbinary_iris(data, command)
}
+
#[tauri::command]
fn sendtoport(data: serde_json::Value, datatype: serde_json::Value) -> String {
- // println!("sendtoport data:{}",data.to_string());
- //判断是否存在data
- // if !data.is_object() {
- // return String::from("Invalid data");
- // }
- println!("sendtoport data:{}", data.to_string());
- logtorust(format!("sendtoport data:{}", data.to_string()));
- let data = data.to_string().as_bytes().to_vec();
- let lenth = data.len() as u16;
- let high: u8 = (lenth >> 8) as u8;
- let low: u8 = (lenth & 0xFF) as u8;
- let mut header = vec![];
- header.push(0x55);
- header.push(0xAA);
- let mut command: u8 = 0;
- let datatype = datatype.as_str().unwrap();
- println!("datatype:{}", datatype);
- if datatype == "hex" {
- command = 0x03;
- }
- if datatype == "string" {
- command = 0x01;
- }
- if datatype == "json" {
- command = 0x00;
- }
- let mut crcbody = vec![];
- // crcbody.push(high);
- // crcbody.push(low);
- crcbody.extend(data);
- let crc = iris_calc_crc(&crcbody);
- let crchigh: u8 = (crc >> 8) as u8;
- let crclow: u8 = (crc & 0xFF) as u8;
- let mut senddata = vec![];
- senddata.extend(header);
- senddata.push(command);
- senddata.push(high);
- senddata.push(low);
- senddata.extend(crcbody);
- senddata.push(crchigh);
- senddata.push(crclow);
-
- // println!("sendtoport data:{}",senddata.len());
- // println!(
- // "sendtoport data content:{:X?}",
- // senddata
- // .iter()
- // .map(|&byte| format!("{:02X}", byte))
- // .collect::>()
- // .join(" ")
- // );
- logtorust(format!(
- "sendtoport data content:{:X?}",
- senddata
- .iter()
- .map(|&byte| format!("{:02X}", byte))
- .collect::>()
- .join(" ")
- ));
-
- sendtoprot(senddata);
- "send ok".to_string()
+ irishypersptral::sendtoport_iris(data, datatype)
}
#[tauri::command]
fn readformport(commanid: serde_json::Value, wait_time_json: serde_json::Value) -> String {
- let mut waittime = 50;
- if wait_time_json.is_u64() {
- waittime = wait_time_json.as_u64().unwrap() as u32;
- }
-
- let commanid = commanid.as_u64().unwrap() as u8;
- let ret = readdatafromport(waittime as u64, commanid);
- let str = String::from_utf8_lossy(&ret);
- println!("read data: {}", str);
- return str.to_string();
+ irishypersptral::readformport_iris(commanid, wait_time_json)
}
#[tauri::command]
-fn sendtoportAndgetreturn(
+fn sendtoport_andgetreturn(
data: serde_json::Value,
datatype: serde_json::Value,
) -> Result {
- // println!("sendtoport data:{}",data.to_string());
- //判断是否存在data
- // if !data.is_object() {
- // return String::from("Invalid data");
- // }
-
- //println!("sendtoport data:{}", data.to_string());
-
- let command = data.get("command").unwrap().to_string();
- let mut isneedlog = true;
- let mut isgetdata = false;
- if command == "\"get_caiji_state\"" {
- isneedlog = false;
- }
-if command == "\"get_data\"" {
- isgetdata = true;
-
+ //irishypersptral::sendtoport_andgetreturn_iris(data, datatype)
+ jianzhiis11::sendtoport_andgetreturn(data, datatype)
+
}
- if isneedlog {
- logtorust(format!("sendtoport data:{}", data.to_string()));
- }
-
- let data = data.to_string().as_bytes().to_vec();
- let lenth = data.len() as u16;
- let high: u8 = (lenth >> 8) as u8;
- let low: u8 = (lenth & 0xFF) as u8;
- let mut header = vec![];
- header.push(0x55);
- header.push(0xAA);
- let mut command: u8 = 0;
- let datatype = datatype.as_str().unwrap();
- println!("datatype:{}", datatype);
- if datatype == "hex" {
- command = 0x03;
- }
- if datatype == "string" {
- command = 0x01;
- }
- if datatype == "json" {
- command = 0x00;
- }
- let mut crcbody = vec![];
- // crcbody.push(high);
- // crcbody.push(low);
- crcbody.extend(data);
- let crc = iris_calc_crc(&crcbody);
- let crchigh: u8 = (crc >> 8) as u8;
- let crclow: u8 = (crc & 0xFF) as u8;
- let mut senddata = vec![];
- senddata.extend(header);
- senddata.push(command);
- senddata.push(high);
- senddata.push(low);
- senddata.extend(crcbody);
- senddata.push(crchigh);
- senddata.push(crclow);
-
- println!("sendtoport data:{}", senddata.len());
- // println!(
- // "sendtoport data content:{:X?}",
- // senddata
- // .iter()
- // .map(|&byte| format!("{:02X}", byte))
- // .collect::>()
- // .join(" ")
- // );
- if isneedlog {
- logtorust(format!(
- "sendtoport data content:{:X?}",
- senddata
- .iter()
- .map(|&byte| format!("{:02X}", byte))
- .collect::>()
- .join(" ")
- ));
- }
-
- sendtoprot(senddata);
- let mut ret = readdatafromport(50, 0xff);
- let datatype = ret[0];
-
- if isneedlog {
- if !isgetdata{
- logtorust(format!(
- "read content: {:X?}",
- ret.iter()
- .map(|&byte| format!("{:02X}", byte))
- .collect::>()
- .join(" ")
- ));
- }
- }
- if isgetdata{
- logtorust("Get data Back SUCCESS".to_string());
- logtorust("_____________________________one_data_over_____________________________\n".to_string());
- }
-
-
- ret.remove(0);
- ret.remove(0);
- ret.remove(0);
- if datatype == 0x02 {
- let mut is11data = IS11DataStruct::default();
- unsafe {
- let mut is11data_ptr = &mut is11data as *mut IS11DataStruct;
- let mut ret_ptr = &mut ret[0] as *mut u8;
- std::ptr::copy_nonoverlapping(
- ret_ptr,
- is11data_ptr as *mut u8,
- std::mem::size_of::(),
- );
- return Ok(RetStruct {
- datatype: datatype,
- content: "null".to_string(),
- data: is11data,
- });
- }
- }
-
- let str = String::from_utf8_lossy(&ret);
- // println!("read data: {}", str);
- if datatype==0x00 &&isneedlog {
- logtorust(format![
- "read string: {}",
- str.to_string()
- ]);
-
- }
- return Ok(RetStruct {
- datatype: datatype,
- content: str.to_string(),
- data: IS11DataStruct::default(),
- });
-
- // return str.to_string();
-}
-#[tauri::command]
-fn clearportbuff() -> String {
- clearserilport()
-}
-
-#[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;
- set_port_info(&portname.to_string(), baudrate);
- //println!("{}",readdatafromport(1000));
- String::from("Port set ok")
-}
+////////////////////////////////////////////////////////////////////////////////////////
+// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
use tauri::{LogicalSize, Manager, Size};
@@ -430,14 +71,14 @@ fn main() {
opencom,
setport,
closecome,
- sendtoportAndgetreturn,
+ sendtoport_andgetreturn,
readformport,
sendtoport,
interpolate_spline,
sg_smooth,
savecalibratefile,
sendcalibratetodev,
- algorithm::Gaussian_filter_high,
+ algorithm::gaussian_filter_high,
algorithm::interpolate_spline_at_points,
algorithm::find_peek
])
diff --git a/src-tauri/src/mydefine/mod.rs b/src-tauri/src/mydefine/mod.rs
new file mode 100644
index 0000000..af1048e
--- /dev/null
+++ b/src-tauri/src/mydefine/mod.rs
@@ -0,0 +1,77 @@
+
+use serde::{Deserialize, Serialize};
+use serde_with::serde_as;
+
+
+
+#[derive(Serialize, Deserialize)]
+pub struct RetStruct {
+/// 0x00 json 0x01 string 0x02 data binary
+ pub datatype: u8,
+ pub content: String,
+ pub data: IS11DataStruct,
+}
+
+#[serde_as]
+#[derive(Serialize, Deserialize)]
+#[repr(C)]
+pub struct IS11DataStruct {
+ pub datatype: u8, // Using r# to allow the use of the keyword 'type'
+ pub direction: u8,
+ pub tuigan_stat: u8,
+ pub year:u8,
+ pub month:u8,
+ pub day:u8,
+ pub hour:u8,
+ pub minute:u8,
+ pub second:u8,
+ pub shutter_time: u32,
+ pub index: u64,
+ pub temprature: [f32; 8],
+ #[serde_as(as = "[_; 2048]")]
+ pub data: [f32; 2048],
+}
+
+
+ impl Default for IS11DataStruct {
+ fn default() -> Self {
+ IS11DataStruct {
+ datatype: 0,
+ direction: 10,
+ tuigan_stat: 0,
+ year:24,
+ month:1,
+ day:1,
+ hour:0,
+ minute:0,
+ second:0,
+
+ shutter_time: 0,
+ index: 0,
+ temprature: [0.0; 8],
+ data: [0.0; 2048],
+ }
+ }
+
+}
+
+impl IS11DataStruct {
+ pub fn clone(&self) -> IS11DataStruct {
+ IS11DataStruct {
+ datatype: self.datatype,
+ direction: self.direction,
+ tuigan_stat: self.tuigan_stat,
+ year: self.year,
+ month: self.month,
+ day: self.day,
+ hour: self.hour,
+ minute: self.minute,
+ second: self.second,
+ shutter_time: self.shutter_time,
+ index: self.index,
+ temprature: self.temprature,
+ data: self.data,
+ }
+ }
+
+}
diff --git a/src-tauri/src/mylog.rs b/src-tauri/src/mylog.rs
index 1b2e01c..95ce999 100644
--- a/src-tauri/src/mylog.rs
+++ b/src-tauri/src/mylog.rs
@@ -6,19 +6,19 @@ use tklog::{
use lazy_static::lazy_static;
use std::{
// fmt::format,
- borrow::{Borrow, BorrowMut}, sync::{Arc, Mutex}, thread::sleep
+ borrow::{ BorrowMut}, sync::{Arc, Mutex}, thread::sleep
};
struct LOGERME{
- LOGGER_RUST: Arc>,
- LOGGER_JS: Arc>,
+ logger_rust: Arc>,
+ logger_js: Arc>,
}
lazy_static! {
- static ref LOGERGloble: Arc> = Arc::new(Mutex::new(
+ static ref LOGERGLOBLE: Arc> = Arc::new(Mutex::new(
LOGERME{
- LOGGER_RUST:Arc::new( Mutex::new(Logger::new())),
- LOGGER_JS: Arc::new( Mutex::new(Logger::new())),
+ logger_rust:Arc::new( Mutex::new(Logger::new())),
+ logger_js: Arc::new( Mutex::new(Logger::new())),
}
));
@@ -29,14 +29,14 @@ lazy_static! {
-pub fn change_log_path(path: &str,String: &str) {
- if String=="RUST"{
- let mut loggerglobel = LOGERGloble.lock().unwrap();
- let mut log=loggerglobel.LOGGER_RUST.lock().unwrap();
+pub fn change_log_path(path: &str,string: &str) {
+ if string=="RUST"{
+ let mut loggerglobel = LOGERGLOBLE.lock().unwrap();
+ let mut log=loggerglobel.logger_rust.lock().unwrap();
log.set_cutmode_by_time(path, MODE::DAY, 10, false);
- }else if String=="JS"{
- let mut loggerglobel=LOGERGloble.lock().unwrap();
- let mut log=loggerglobel.LOGGER_JS.lock().unwrap();
+ }else if string=="JS"{
+ let mut loggerglobel=LOGERGLOBLE.lock().unwrap();
+ let mut log=loggerglobel.logger_js.lock().unwrap();
log.set_cutmode_by_time(path, MODE::DAY, 10, false);
}
}
@@ -44,13 +44,13 @@ pub fn change_log_path(path: &str,String: &str) {
pub fn initlog() {
//let mut logger = LOGERGloble.lock().unwrap().LOGGER_RUST;
- let mut loggerglobel = LOGERGloble.lock().unwrap();
- let mut log=loggerglobel.LOGGER_RUST.lock().unwrap();
+ let mut loggerglobel = LOGERGLOBLE.lock().unwrap();
+ let mut log=loggerglobel.logger_rust.lock().unwrap();
log.set_console(true).set_format(Format::Date|Format::Time).set_formatter("{time} {file}{level}:{message}\n")
.set_cutmode_by_time("rust_log.log",MODE::DAY, 10, false);
// let mut logger = LOGERGloble.lock().unwrap().LOGGER_JS;
//let mut loggerglobel = LOGERGloble.lock().unwrap();
- let mut log=loggerglobel.LOGGER_JS.lock().unwrap();
+ let mut log=loggerglobel.logger_js.lock().unwrap();
log.set_console(false).set_format(Format::Date|Format::Time).set_formatter("{time}:\t{message}\n")
.set_cutmode_by_time("js_log.log",MODE::DAY, 10, false);
@@ -59,8 +59,8 @@ pub fn initlog() {
pub fn logtorust(str:T)
where T: std::fmt::Display
{
- let mut loggerglobe=LOGERGloble.lock().unwrap();
- let mut log=Arc::clone(&loggerglobe.LOGGER_RUST);
+ let mut loggerglobe=LOGERGLOBLE.lock().unwrap();
+ let mut log=Arc::clone(&loggerglobe.logger_rust);
let log1 = log.borrow_mut();
infos!( log1, str);
@@ -69,8 +69,8 @@ where T: std::fmt::Display
pub fn logtojs(str:T)
where T: std::fmt::Display
{
- let mut loggerglobe=LOGERGloble.lock().unwrap();
- let mut log=Arc::clone(&loggerglobe.LOGGER_JS);
+ let mut loggerglobe=LOGERGLOBLE.lock().unwrap();
+ let mut log=Arc::clone(&loggerglobe.logger_js);
let log1 = log.borrow_mut();
infos!( log1, str);
diff --git a/src-tauri/src/serport/serport.rs b/src-tauri/src/serport/serport.rs
index 4beeb40..c4523eb 100644
--- a/src-tauri/src/serport/serport.rs
+++ b/src-tauri/src/serport/serport.rs
@@ -8,16 +8,16 @@ use std::{
thread::sleep,
};
struct SeriesSettings {
- pub PortName: String,
- pub BaudRate: u32,
+ pub port_name: String,
+ pub band_rate: u32,
pub port: Option>,
pub isopen: bool,
}
lazy_static! {
static ref PORT_INFO: Arc> = Arc::new(Mutex::new(SeriesSettings {
- PortName: String::from("NON"),
- BaudRate: 9600,
+ port_name: String::from("NON"),
+ band_rate: 9600,
port: None,
isopen: false,
}));
@@ -25,7 +25,7 @@ lazy_static! {
pub fn tryuseport() -> String {
let mut port_info = PORT_INFO.lock().unwrap();
- if port_info.PortName == "NON" {
+ if port_info.port_name == "NON" {
return format!("Port is not set");
}
if port_info.isopen {
@@ -36,7 +36,7 @@ pub fn tryuseport() -> String {
- port_info.port = match serialport::new(port_info.PortName.clone(), port_info.BaudRate).open() {
+ port_info.port = match serialport::new(port_info.port_name.clone(), port_info.band_rate).open() {
Ok(p) => Some(p),
Err(e) => {
eprintln!("Failed to open Error: {}", e);
@@ -50,8 +50,8 @@ pub fn tryuseport() -> String {
pub fn set_port_info(portname: &String, baudrate: u32) {
let mut port_info = PORT_INFO.lock().unwrap();
- port_info.PortName = portname.to_string();
- port_info.BaudRate = baudrate;
+ port_info.port_name = portname.to_string();
+ port_info.band_rate = baudrate;
}
@@ -66,13 +66,13 @@ pub fn get_port_name() -> Vec {
pub fn _reopenport() -> String {
let mut port_info = PORT_INFO.lock().unwrap();
- if port_info.PortName == "NON" {
+ if port_info.port_name == "NON" {
return format!("Port is not set");
}
//关闭端口
port_info.port = None;
//重新打开端口
- port_info.port = match serialport::new(port_info.PortName.clone(), port_info.BaudRate).open() {
+ port_info.port = match serialport::new(port_info.port_name.clone(), port_info.band_rate).open() {
Ok(p) => Some(p),
Err(e) => {
eprintln!("Failed to open Error: {}", e);
@@ -85,7 +85,7 @@ pub fn _reopenport() -> String {
pub fn closeport() -> String {
let mut port_info = PORT_INFO.lock().unwrap();
- if port_info.PortName == "NON" {
+ if port_info.port_name == "NON" {
return format!("Port is not set");
}
//关闭端口
@@ -96,7 +96,7 @@ pub fn closeport() -> String {
pub fn sendtoprot(data: Vec) -> String {
let mut port_info = PORT_INFO.lock().unwrap();
- if port_info.PortName == "NON" {
+ if port_info.port_name == "NON" {
return format!("Port is not set");
}
@@ -119,7 +119,7 @@ pub fn sendtoprot(data: Vec) -> String {
pub fn clearserilport() -> String{
let mut port_info = PORT_INFO.lock().unwrap();
- if port_info.PortName == "NON" {
+ if port_info.port_name == "NON" {
return "Port is not set".to_string();
}
let mut buf: Vec = vec![0; 1000];
@@ -148,7 +148,7 @@ pub fn clearserilport() -> String{
pub fn readdatafromport(waittime: u64, commanid: u8) -> Vec {
let mut port_info = PORT_INFO.lock().unwrap();
- if port_info.PortName == "NON" {
+ if port_info.port_name == "NON" {
return "Port is not set".as_bytes().to_vec();
}
let mut buf: Vec = vec![0; 1000];
@@ -236,7 +236,27 @@ pub fn iris_calc_crc(p_buffer: &[u8]) -> u16 {
crc
}
-
+pub fn readforport()->Vec{
+ let mut port_info = PORT_INFO.lock().unwrap();
+ if port_info.port_name == "NON" {
+ return "Port is not set".as_bytes().to_vec();
+ }
+ let mut buf: Vec = vec![0; 1000];
+ match &mut port_info.port {
+ Some(p) => {
+ p.set_timeout(Duration::from_millis(100)).unwrap();
+ let sizeread =match p.read(&mut buf){
+ Ok(size)=>{size},
+ Err(_e)=>{0}
+ };
+ buf.truncate(sizeread);
+ return buf;
+ }
+ None => {
+ return Vec::new();
+ }
+ }
+}
#[test]
fn test() {
tryuseport();
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index ae097b6..8031c1f 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -1,14 +1,16 @@
{
"build": {
"beforeDevCommand": "npm run dev",
- "beforeBuildCommand": "npm run build",
+ "beforeBuildCommand": " npm run mybuild & npm run build",
"devPath": "http://localhost:1420",
"distDir": "../dist",
"withGlobalTauri": true
+
},
+
"package": {
"productName": "SpectralPlot",
- "version": "0.4.141"
+ "version": "0.5.1"
},
"tauri": {
@@ -56,14 +58,18 @@
"targets": "all",
"identifier": "lele.rlx",
"resources": [
- "config.json"
+ "config.json","is11lib.dll"
],
+ "windows": {
+
+ },
+
"icon": [
- "icons/32x32.png",
- "icons/128x128.png",
- "icons/128x128@2x.png",
- "icons/icon.icns",
- "icons/icon.ico"
+ "icons/1.jpg",
+ "icons/1.jpg",
+ "icons/1.jpg",
+ "icons/1.jpg",
+ "icons/1.jpg"
]
}
diff --git a/src-tauri/test.nsi b/src-tauri/test.nsi
new file mode 100644
index 0000000..e69de29
diff --git a/src/components/Greet.vue b/src/components/Greet.vue
index aadc350..6eba292 100644
--- a/src/components/Greet.vue
+++ b/src/components/Greet.vue
@@ -63,7 +63,7 @@ export default {
var that = this;
console.log(this.jsondata);
- invoke("sendtoportAndgetreturn",{data:this.jsondata,datatype:"json"}).then((message) => {
+ invoke("sendtoport_andgetreturn",{data:this.jsondata,datatype:"json"}).then((message) => {
that.greetMsg = message;
that.jsonoutdata = JSON.parse(message.content);
console.log(message);
diff --git a/src/components/SerialPort/SerialportMethod.js b/src/components/SerialPort/SerialportMethod.js
index f18fc0f..b42cf4e 100644
--- a/src/components/SerialPort/SerialportMethod.js
+++ b/src/components/SerialPort/SerialportMethod.js
@@ -8,7 +8,7 @@ async function Dev_Opt() {
data:Command,
datatype:"json"
}
- let message=await invoke("sendtoportAndgetreturn",data);
+ let message=await invoke("sendtoport_andgetreturn",data);
if (message.datatype==0x00)
{
let ret=JSON.parse(message.content);
@@ -16,7 +16,7 @@ async function Dev_Opt() {
}
await EnsureNotWorking();
data.data.command="get_opt";
- message=await invoke("sendtoportAndgetreturn",data);
+ message=await invoke("sendtoport_andgetreturn",data);
var shuttertimes=0;
if (message.datatype==0x00)
{
@@ -58,7 +58,7 @@ async function Get_Date_on_Derction(drection,shuttertimes,autoremovedark=false,
data.data.remove_dark="no";
}
data.data.collect_times=avgnumber;
- let message=await invoke("sendtoportAndgetreturn",data);
+ let message=await invoke("sendtoport_andgetreturn",data);
await EnsureNotWorking();
@@ -81,10 +81,10 @@ async function Get_Date_on_Derction(drection,shuttertimes,autoremovedark=false,
data.data.return_data_type=CommanDeffine.DataTypeforSend.UpDarkDN;
}
- message=await invoke("sendtoportAndgetreturn",data);
+ message=await invoke("sendtoport_andgetreturn",data);
while (message.datatype!=0x02)
{
- message=await invoke("sendtoportAndgetreturn",data);
+ message=await invoke("sendtoport_andgetreturn",data);
}
return message.data
}
@@ -95,7 +95,7 @@ async function Get_Device_Info() {
data:Command,
datatype:"json"
}
- let message=await invoke("sendtoportAndgetreturn",data);
+ let message=await invoke("sendtoport_andgetreturn",data);
if (message.datatype==108)
{
return {error:"error"};
@@ -122,7 +122,7 @@ async function EnsureNotWorking(){
},
datatype:"json"
}
- let message=await invoke("sendtoportAndgetreturn",data);
+ let message=await invoke("sendtoport_andgetreturn",data);
let ret=JSON.parse(message.content);
while (ret.caiji_state!="finish")
@@ -135,7 +135,7 @@ async function EnsureNotWorking(){
}
EventBus.emit('setprogressbar',dataforprocess);
await delay(1000);
- message=await invoke("sendtoportAndgetreturn",data);
+ message=await invoke("sendtoport_andgetreturn",data);
if (message.content=="g time no data retrun")
{
diff --git a/src/components/SiderleftSerilportMethod.js b/src/components/SiderleftSerilportMethod.js
index ace348f..b207dc3 100644
--- a/src/components/SiderleftSerilportMethod.js
+++ b/src/components/SiderleftSerilportMethod.js
@@ -39,7 +39,8 @@ export default {
// let buffer = Buffer.alloc(0);
let portinfo ={
portname: this.Comname,
- baudrate: 115200,
+ // baudrate: 115200,
+ baudrate: 921600,
}
let ret= await invoke("opencom",portinfo);
if (ret!="Port is open")
@@ -153,7 +154,7 @@ export default {
}
if (this.dataprocessconfig.usehighpass)
{
- datatoshow.data=await invoke("Gaussian_filter_high",{data:datatoshow.data,sigma:30});
+ datatoshow.data=await invoke("gaussian_filter_high",{data:datatoshow.data,sigma:30});
//console.log(aaa);
}
@@ -217,7 +218,7 @@ export default {
},
datatype:"json"
}
- let message=await invoke("sendtoportAndgetreturn",data);
+ let message=await invoke("sendtoport_andgetreturn",data);
let ret=JSON.parse(message.content);
while (ret.caiji_state!="finish")
@@ -230,7 +231,7 @@ export default {
}
EventBus.emit('setprogressbar',dataforprocess);
await delay(100);
- message=await invoke("sendtoportAndgetreturn",data);
+ message=await invoke("sendtoport_andgetreturn",data);
if (message.content=="g time no data retrun")
{
@@ -282,10 +283,10 @@ export default {
},
datatype: "json"
}
- let message1=await invoke("sendtoportAndgetreturn",data);
+ let message1=await invoke("sendtoport_andgetreturn",data);
while (message1.datatype!=0x02)
{
- message1=await invoke("sendtoportAndgetreturn",data);
+ message1=await invoke("sendtoport_andgetreturn",data);
}
let datatoshowup=message1.data;
@@ -321,10 +322,10 @@ export default {
},
datatype: "json"
}
- let messagedown=await invoke("sendtoportAndgetreturn",data);
+ let messagedown=await invoke("sendtoport_andgetreturn",data);
while (messagedown.datatype!=0x02)
{
- messagedown=await invoke("sendtoportAndgetreturn",data);
+ messagedown=await invoke("sendtoport_andgetreturn",data);
}
let datatoshowdown=messagedown.data;
this.datadown=datatoshowdown;
@@ -379,7 +380,7 @@ export default {
datatype:"json"
}
let that = this;
- let message=await invoke("sendtoportAndgetreturn",data);
+ let message=await invoke("sendtoport_andgetreturn",data);
if (message.datatype==108)
{
return false;
diff --git a/src/components/commentep.vue b/src/components/commentep.vue
index d0617c3..8e2e0c4 100644
--- a/src/components/commentep.vue
+++ b/src/components/commentep.vue
@@ -16,7 +16,7 @@ export default {
data: Command,
datatype: "json"
}
- let message = await invoke("sendtoportAndgetreturn", data);
+ let message = await invoke("sendtoport_andgetreturn", data);
this.Devinfo = JSON.parse(message);
}
diff --git a/src/components/menubox/SetWavelenth.vue b/src/components/menubox/SetWavelenth.vue
index fd375bd..5272337 100644
--- a/src/components/menubox/SetWavelenth.vue
+++ b/src/components/menubox/SetWavelenth.vue
@@ -46,7 +46,7 @@ export default {
data: Command,
datatype: "json"
}
- let message = await invoke("sendtoportAndgetreturn", data);
+ let message = await invoke("sendtoport_andgetreturn", data);
this.Devinfo = JSON.parse(message.content);
},
diff --git a/src/components/menubox/SetWorkmode.vue b/src/components/menubox/SetWorkmode.vue
index 87a1e8a..9bccf51 100644
--- a/src/components/menubox/SetWorkmode.vue
+++ b/src/components/menubox/SetWorkmode.vue
@@ -24,7 +24,7 @@ export default {
data: Command,
datatype: "json"
}
- let message = await invoke("sendtoportAndgetreturn", data);
+ let message = await invoke("sendtoport_andgetreturn", data);
this.Devinfo = JSON.parse(message.content);
this.Devinfo.start_time = this.convertimetostr(this.Devinfo.start_time);
this.Devinfo.stop_time = this.convertimetostr(this.Devinfo.stop_time);
@@ -99,7 +99,7 @@ export default {
data: command,
datatype: "json"
}
- await invoke("sendtoportAndgetreturn", data);
+ await invoke("sendtoport_andgetreturn", data);
}
diff --git a/src/components/siderleft.vue b/src/components/siderleft.vue
index 35ffd73..9b36638 100644
--- a/src/components/siderleft.vue
+++ b/src/components/siderleft.vue
@@ -147,15 +147,17 @@ export default {
-
+
-
-
-
+
+ SG
+ HighPass
+
保存