#Copyright 2017 Intel Corporation # #Licensed under the Apache License, Version 2.0 (the "License"); #you may not use this file except in compliance with the License. #You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # #Unless required by applicable law or agreed to in writing, software #distributed under the License is distributed on an "AS IS" BASIS, #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #See the License for the specific language governing permissions and #limitations under the License. # The scripts is a part of Metadata enablement for IntelRealsense on Windows10 OS. # # The flow is summarized as follows # Find all the connected Intel Realsense devices # For each device that supports metadata # Check whether the Metadata registry key is present # Add the missing key(s) if necessary # Additionally the script can retrofit the metadata keys for all devices that were registered, but not necessarily connected # Usage: #Launch Windows PowerShell, and navigate to the script directory #PS> .\realsense_metadata_win10.ps1 - Add metadata reg. keys for the connected Realsense devices #PS> .\realsense_metadata_win10.ps1 -op install - See above #PS> .\realsense_metadata_win10.ps1 -op install_all - Add metadata reg. keys for all RealSense devices that were previously connected #PS> .\realsense_metadata_win10.ps1 -op remove - Remove metadata reg. keys for the connected Realsense devices #PS> .\realsense_metadata_win10.ps1 -op remove_all - Remove metadata reg. keys for all RealSense devices that were previously connected #Parse command-line argument param ( [string]$op = "install" ) # Elevate to admin - https://stackoverflow.com/questions/7690994/powershell-running-a-command-as-administrator If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { # The original script is modified to pass through the command-line parameter $arguments = "& '" + $myinvocation.mycommand.definition + "'" + " -op " + $op Start-Process powershell -Verb runAs -ArgumentList $arguments Break } # Base location for the registry keys we need to add $DevConfigRegBase = "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceClasses" # The Registry subtrees for the Metadata keys shall be added $guid1 = "{e5323777-f976-4f5b-9b55-b94699c46e44}"; $guid2 = "{65E8773D-8F56-11D0-A3B9-00A0C9223196}"; $SearchTrees = "$DevConfigRegBase\$guid1", "$DevConfigRegBase\$guid2" # Multipin devices that need additional key MetadataBufferSizeInKB1 $MultiPinDevices = "USB\VID_8086&PID_0AD1&MI_00",# D400(PSR) "USB\VID_8086&PID_0AD2&MI_00",# D410(ASR) "USB\VID_8086&PID_0AD3&MI_00",# D410+RGB(ASRC) "USB\VID_8086&PID_0AD4&MI_00",# D430(AWG) "USB\VID_8086&PID_0AD5&MI_00",# D430+MM(AWGT) "USB\VID_8086&PID_0AD6&MI_00",# D400/ USB2 "USB\VID_8086&PID_0AF6&MI_00",# D420 (PWG) "USB\VID_8086&PID_0AFE&MI_00",# D420+MM(PWGT) "USB\VID_8086&PID_0AFF&MI_00",# D410+MM(ASRT) "USB\VID_8086&PID_0B00&MI_00",# D400+MM(PSRT) "USB\VID_8086&PID_0B01&MI_00",# D430+RGB+MM(AWGCT) "USB\VID_8086&PID_0B03&MI_00",# D460(DS5U) "USB\VID_8086&PID_0B07&MI_00",# D430+RGB(AWGC) "USB\VID_8086&PID_0B0C&MI_00",# D405 "USB\VID_8086&PID_0B0D&MI_00",# L500 "USB\VID_8086&PID_0B3A&MI_00",# D435i "USB\VID_8086&PID_0B3D&MI_00",# L515 PRQ "USB\VID_8086&PID_0B49&MI_00",# F416 "USB\VID_8086&PID_0B4B&MI_00",# D430i "USB\VID_8086&PID_0B4D&MI_00",# D465 "USB\VID_8086&PID_0B52&MI_00",# F416+RGB "USB\VID_8086&PID_0B5B&MI_00",# D405 "USB\VID_8086&PID_0B5C&MI_00",# D455 "USB\VID_8086&PID_0B64&MI_00",# L515 "USB\VID_8086&PID_0B68&MI_00",# L535 "USB\VID_8086&PID_0B56&MI_00" # D555e #Inhibit system warnings and erros, such as permissions or missing values $ErrorActionPreference = "silentlycontinue" $ConnectedDev = @() #Retrieve all connected UVC devices $DevInReg = Get-ChildItem hklm:\SYSTEM\CurrentControlSet\Services\usbvideo | ForEach-Object {Get-ItemProperty $_.pspath} #Transform output into a standard container for ($i=0; $i -lt $DevInReg[0].Count; $i++) { $ConnectedDev +=$DevInReg[0].$i} #Filter Intel Realsense devices $ConnectedDev = $ConnectedDev -like "*VID_8086*" #Progress notification $rs_count = $ConnectedDev.Count echo "$rs_count connected RealSense devices were found:" $ConnectedDev #Search each subtree for values that correspond to the requested Intel Realsense devices foreach ($subtree in $SearchTrees) { "`nProcessing Registry branch $subtree" #Get records for all UVC devices records $Items = Get-ChildItem $subtree | Foreach-Object {Get-ItemProperty $_.PsPath } #Filter Intel RealSense devices "There are " + $Items.Count +" total devices listed" $Items = $Items | Where { $_.DeviceInstance -like "*VID_8086*" } "" + $Items.Count + " of them are Intel Realsense" $remove_keys = 0 switch ($op) { "install" { $Items = $Items | Where { $ConnectedDev -contains $_.DeviceInstance }} "remove" { $Items = $Items | Where { $ConnectedDev -contains $_.DeviceInstance }; $remove_keys = 1 } "install_all" { } "remove_all" { $remove_keys = 1 } default { "Aborting: unrecognized argument "" + $op + "" provided.`nPossible values are:"; "`t`t -op [install/install_all/remove/remove_all].`nRefer to the installation manual for details"; Sleep 2; Exit } } foreach ($item in $Items) { $fullPath = $item.PSPath+'\#global\Device Parameters' if ($remove_keys -ge 1) { "Remove keys for device: " + $item.DeviceInstance.ToString() # Non-present value will be ignored as for script execution policy Remove-ItemProperty -path $fullPath -name MetadataBufferSizeInKB0 Remove-ItemProperty -path $fullPath -name MetadataBufferSizeInKB1 Remove-ItemProperty -path $fullPath -name MetadataBufferSizeInKB2 } else { $val = 0,0,0 $val[0] = Get-ItemPropertyValue -Path $fullPath -Name MetadataBufferSizeInKB0 $val[1] = Get-ItemPropertyValue -Path $fullPath -Name MetadataBufferSizeInKB1 $val[2] = Get-ItemPropertyValue -Path $fullPath -Name MetadataBufferSizeInKB2 if ($val[0] -eq 0) { "Device " + $item.DeviceInstance.ToString() + ": adding metadata key" Set-ItemProperty -path $fullPath -name MetadataBufferSizeInKB0 -value 5 } else { "Device " + $item.DeviceInstance.ToString() + ": skiping - metadata key already exists" } #convert "USB\VID_8086&PID_0B07&MI_03\6&269496df&0&0003" into "USB\VID_8086&PID_0B07&MI_03" if (($MultiPinDevices -contains $item.DeviceInstance.Substring(0,27)) -and ($val[1] -eq 0)) { # Multi-pin interface requires an additional key "Device " + $item.DeviceInstance.ToString() +": adding extra key for multipin interface" Set-ItemProperty -path $fullPath -name MetadataBufferSizeInKB1 -value 5 } #convert "USB\VID_8086&PID_0B07&MI_03\6&269496df&0&0003" into "USB\VID_8086&PID_0B07&MI_03" if (($MultiPinDevices -contains $item.DeviceInstance.Substring(0,27)) -and ($val[2] -eq 0)) { # Multi-pin interface requires an additional key "Device " + $item.DeviceInstance.ToString() +": adding extra key for multipin interface" Set-ItemProperty -path $fullPath -name MetadataBufferSizeInKB2 -value 5 } } } } "`nTask Completed" sleep 1