Find HDMI/DP Expansion cards, optionally filter by product ID or serial number
(api: &HidApi, filter_devs: &[u16], sn: Option<&str>)
| 259 | |
| 260 | /// Find HDMI/DP Expansion cards, optionally filter by product ID or serial number |
| 261 | pub fn find_devices(api: &HidApi, filter_devs: &[u16], sn: Option<&str>) -> Vec<DeviceInfo> { |
| 262 | api.device_list() |
| 263 | .filter_map(|dev_info| { |
| 264 | let vid = dev_info.vendor_id(); |
| 265 | let pid = dev_info.product_id(); |
| 266 | let usage_page = dev_info.usage_page(); |
| 267 | |
| 268 | debug!("Found {:X}:{:X} Usage Page: {}", vid, pid, usage_page); |
| 269 | #[cfg(not(target_os = "freebsd"))] |
| 270 | let usage_page_filter = usage_page == CCG_USAGE_PAGE; |
| 271 | // On FreeBSD it seems we don't get different usage pages |
| 272 | // There's just one entry overall |
| 273 | #[cfg(target_os = "freebsd")] |
| 274 | let usage_page_filter = true; |
| 275 | |
| 276 | if vid == FRAMEWORK_VID |
| 277 | && filter_devs.contains(&pid) |
| 278 | && usage_page_filter |
| 279 | && (sn.is_none() || sn == dev_info.serial_number()) |
| 280 | { |
| 281 | Some(dev_info.clone()) |
| 282 | } else { |
| 283 | None |
| 284 | } |
| 285 | }) |
| 286 | .collect() |
| 287 | } |
| 288 | |
| 289 | pub fn flash_firmware(fw_binary: &[u8]) { |
| 290 | let versions = if let Some(versions) = ccgx::binary::read_versions(fw_binary, SiliconId::Ccg3) { |
no outgoing calls
no test coverage detected