//#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 { // 来自THETAV的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); /** * 获取供应商标识 */ [DllImport("unityuvcplugin", EntryPoint = "DeviceInfo_get_vendor_id")] private static extern UInt16 GetVendorId(IntPtr devicePtr); /** * 获取产品标识 */ [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