Visa Device Handler ====== Based on the visa crate, this crate aims to provide a wrapper to allow multiple device connections and handling, and make the usage of NI-VISA easier to use. The crate have mutex safe and non mutex safe mode. The crate supports Windows, and sould support Linux and MacOS. but is being tested mainly on Windows. ## Features - **Core (`core`)**: The basic visa wrapper, simillar to the visa.h file. - **Map (`map`)**: Adds the functionality of `DeviceMap`. - **Mutex MAp (`mutex_map`)**: Adds the functionality of `MutexDeviceMap`. - **All Complicated (`all`)**: Enables all features. ## Example ### Visa FFI ```rust let lib = let device_session = device.session; let cmd: &[u8] = "*IDN?\n".as_bytes(); let mut ret_cnt = 0u32; let mut status = self.lib.viWrite( device_session, cmd.as_ptr(), u32::try_from(cmd.len()).map_err(|_| "u32 conversion error".to_string())?, &mut ret_cnt, ); ``` ### Device Maps (Mutex and Non Mutex) ```rust let sdm_result:SafeDeviceMap = SafeDeviceMap::init(None); match sdm_result { Ok(mapper) => { mapper.connect_device("address_01".to_string()); let data = mapper.query_from_device("name_01".to_string(),"cool funcation with args").unwrap(); println!("got {} from the device",data); mapper.disconnect_device("name_01".to_string()); } Err(e) => {/*print codes or anything */} } ``` ## Tauri The next Tauri project utilizes the crate as a peripheral for NI-VISA. https://github.com/LiorBuch/showcaser. this project uses React and Mantine as the UI, it's not failproof as it's just a POC. ## Emulators The next project creates an emulator of a visa device to be used with a TCP connection. As the project is not mine, i cant help much with its usage. One issue i spotted is that read operations always timeout, probably a missing termination character. Link to the project: https://github.com/bluehands/Open-SCPI-Protocol-Emulator/tree/main ## Change Log 0.3.0 - `get_first_device` now returns the device instead of printing. - `get_first_device` and `find_all_devices` now won't print unless `debug` boolean is true. - Fixed the error where the CString parses null terminators. - Added key error map in some functions. ### Change Log 0.3.1 - Opened project as open source. - Added Tauri example project -> https://github.com/LiorBuch/showcaser - Added filter keywords for `get_first_device` and `find_all_devices` ## Change Log 0.4.0 - Fixed the disconnect issue. - Cleaned structure. ## Change Log 0.5.0 - All Device operations now use its address, more uniform approch since the address is always presented. - Linux is now enabled, yet not fully tested. - Added logger to the Map to save all the warnings and suppress them. (set to Debug by default). - status codes are now fully tested to give more accurate information. ## Change Log 0.6.0 - Fixed the problem where unable to use devices mapped since key include [`\0`] chars and address not. - Validated usage of TCP deviecs and emulators. - Added the option to define if a program should terminate by the `Verbosity` of the error, as some error codes can be warnings. defaults to Error level. ### Change Log 0.6.2 - Updated the logger to V1.0.0, adds better log format. - Fixed the find all issue where it cant find more than one device without crashing. ### Change Log 0.6.3 - Fixed the issue of buffer not cleaning when searching for devices. ## Change Log 1.0.0 - Changed SafeDeviceMap to MutexDeviceMap. - Added a non mutex variant of the map. ## Change Log 1.1.0 - Each map is now a feature to save space. - Crate now provide basic NI-VISA Library wrapper. - Dependencies update. - Each map can now close its RM and open a new one.