You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
7.7 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#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