140 lines
3.6 KiB
C#
140 lines
3.6 KiB
C#
//#define ENABLE_LOG
|
|
/*
|
|
* Copyright (c) 2014 - 2022 t_saki@serenegiant.com
|
|
*/
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
/*
|
|
* THETA S vid:1482, pid:1001
|
|
* THETA V vid:1482, pid:1002
|
|
* THETA Z1 vid:1482, pid:1005
|
|
*/
|
|
|
|
namespace Serenegiant.UVC
|
|
{
|
|
|
|
[Serializable]
|
|
public class UVCDevice
|
|
{
|
|
public readonly Int32 id;
|
|
public readonly int vid;
|
|
public readonly int pid;
|
|
public readonly int deviceClass;
|
|
public readonly int deviceSubClass;
|
|
public readonly int deviceProtocol;
|
|
|
|
public readonly string name;
|
|
|
|
public UVCDevice(IntPtr devicePtr) {
|
|
id = GetId(devicePtr);
|
|
vid = GetVendorId(devicePtr);
|
|
pid = GetProductId(devicePtr);
|
|
name = GetName(devicePtr);
|
|
deviceClass = GetDeviceClass(devicePtr);
|
|
deviceSubClass = GetDeviceSubClass(devicePtr);
|
|
deviceProtocol = GetDeviceProtocol(devicePtr);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"{base.ToString()}(id={id},vid={vid},pid={pid},name={name},deviceClass={deviceClass},deviceSubClass={deviceSubClass},deviceProtocol={deviceProtocol})";
|
|
}
|
|
|
|
|
|
/**
|
|
* Ricohの製品かどうか
|
|
* @param info
|
|
*/
|
|
public bool IsRicoh
|
|
{
|
|
get { return (vid == 1482); }
|
|
}
|
|
|
|
/**
|
|
* THETA S/V/Z1のいずれかかどうか
|
|
*/
|
|
public bool IsTHETA
|
|
{
|
|
get { return IsTHETA_S || IsTHETA_V || IsTHETA_Z1; }
|
|
}
|
|
|
|
/**
|
|
* THETA Sかどうか
|
|
*/
|
|
public bool IsTHETA_S
|
|
{
|
|
get { return (vid == 1482) && (pid == 10001); }
|
|
}
|
|
|
|
/**
|
|
* THETA Vかどうか
|
|
*/
|
|
public bool IsTHETA_V
|
|
{
|
|
// THETA Vからのpid=872はUVCでなくて動かないので注意(THETA側は静止画/動画モード)
|
|
get { return (vid == 1482) && (pid == 10002); }
|
|
}
|
|
|
|
/**
|
|
* THETA Z1かどうか
|
|
* @param info
|
|
*/
|
|
public bool IsTHETA_Z1
|
|
{
|
|
// THETA Z1からのpid=877はUVCではなくて動かないので注意(THETA側は静止画/動画モード)
|
|
get { return (vid == 1482) && (pid == 10005); }
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// プラグインのインターフェース関数
|
|
//--------------------------------------------------------------------------------
|
|
/**
|
|
* 機器idを取得(これだけはpublicにする)
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_id")]
|
|
public static extern Int32 GetId(IntPtr devicePtr);
|
|
|
|
/**
|
|
* デバイスクラスを取得
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_device_class")]
|
|
private static extern Byte GetDeviceClass(IntPtr devicePtr);
|
|
|
|
/**
|
|
* デバイスサブクラスを取得
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_device_sub_class")]
|
|
private static extern Byte GetDeviceSubClass(IntPtr devicePtr);
|
|
|
|
/**
|
|
* デバイスプロトコルを取得
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_device_protocol")]
|
|
private static extern Byte GetDeviceProtocol(IntPtr devicePtr);
|
|
|
|
/**
|
|
* ベンダーIDを取得
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_vendor_id")]
|
|
private static extern UInt16 GetVendorId(IntPtr devicePtr);
|
|
|
|
/**
|
|
* プロダクトIDを取得
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_product_id")]
|
|
private static extern UInt16 GetProductId(IntPtr devicePtr);
|
|
|
|
/**
|
|
* 機器名を取得
|
|
*/
|
|
[DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_name")]
|
|
[return: MarshalAs(UnmanagedType.LPStr)]
|
|
private static extern string GetName(IntPtr devicePtr);
|
|
|
|
} // UVCDevice
|
|
|
|
} // namespace Serenegiant.UVC
|
|
|