From 0ec9755b7dd23f7817ccce0eea0a628b32d8f872 Mon Sep 17 00:00:00 2001 From: "alterwain@protonmail.com" Date: Mon, 2 Dec 2024 22:20:43 +0200 Subject: [PATCH] Changes to be committed: modified: Cargo.lock modified: Cargo.toml new file: src/disk_util/mod.rs modified: src/main.rs Changes not staged for commit: deleted: src/disk_util/mod.rs modified: src/main.rs Untracked files: src/disk_util.rs src/ipod_util.rs --- Cargo.lock | 47 +++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 ++- src/disk_util/mod.rs | 19 ++++++++++++++++++ src/main.rs | 18 +++++++++-------- 4 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 src/disk_util/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 3a0a9f6..47eaef6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,15 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] [[package]] name = "cc" @@ -15,6 +24,7 @@ dependencies = [ name = "iloader" version = "0.1.0" dependencies = [ + "regex", "rusb", ] @@ -36,12 +46,47 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + [[package]] name = "pkg-config" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "rusb" version = "0.9.4" diff --git a/Cargo.toml b/Cargo.toml index 5675e78..31c2ee5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,4 +4,5 @@ version = "0.1.0" edition = "2021" [dependencies] -rusb = "0.9.4" \ No newline at end of file +rusb = "0.9.4" +regex = "1.11.1" \ No newline at end of file diff --git a/src/disk_util/mod.rs b/src/disk_util/mod.rs new file mode 100644 index 0000000..e4cc31e --- /dev/null +++ b/src/disk_util/mod.rs @@ -0,0 +1,19 @@ +use core::str; +use std::process::Command; + +use regex::Regex; + +pub fn list() { + let r = Command::new("diskutil") + .arg("list") + .output() + .expect("failed to access Disk Utility"); + if !r.status.success() { panic!("Unable to get result from Disk Utility"); } + let a = str::from_utf8(&r.stdout).unwrap(); + for cap in Regex::new(r"\/dev\/.+\(external\, physical\):").unwrap().find_iter(a) { + println!("{:#?}", cap); + let b = &a[cap.end()..]; + // split the string and get before double \n. + // then parse using diskutil info /dev/disk2 + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index d1fb86c..9dbd61f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,15 @@ -use rusb::{Device, DeviceDescriptor, GlobalContext}; + +mod disk_util; + +const VENDOR_ID: u16 = 1452; +const PRODUCT_ID: u16 = 4617; fn main() { - // vendor_id: 3141 - // product_id: 32777 - - loop { - for device in rusb::devices().unwrap().iter() { - let device_desc = device.device_descriptor().unwrap(); - println!("VendorId: {:?}; productId: {:?}", device_desc.vendor_id(), device_desc.product_id()); + for device in rusb::devices().unwrap().iter() { + let device_desc = device.device_descriptor().unwrap(); + if VENDOR_ID == device_desc.vendor_id() && PRODUCT_ID == device_desc.product_id() { + println!("FOUND!"); + disk_util::list(); } } }