protected static void SetupKnownDeviceModel(IVRModuleDeviceStateRW deviceState)
            {
                if (s_viveRgx.IsMatch(deviceState.modelNumber) || s_viveRgx.IsMatch(deviceState.renderModelName))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveController;
                        return;

                    case VRModuleDeviceClass.GenericTracker:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveTracker;
                        return;

                    case VRModuleDeviceClass.TrackingReference:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveBaseStation;
                        return;
                    }
                }
                else if (s_oculusRgx.IsMatch(deviceState.modelNumber))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.OculusHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        if (s_leftRgx.IsMatch(deviceState.modelNumber))
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.OculusTouchLeft;
                            return;
                        }
                        else if (s_rightRgx.IsMatch(deviceState.modelNumber))
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.OculusTouchRight;
                            return;
                        }
                        break;

                    case VRModuleDeviceClass.TrackingReference:
                        deviceState.deviceModel = VRModuleDeviceModel.OculusSensor;
                        return;
                    }
                }
                else if (s_wmrRgx.IsMatch(deviceState.modelNumber) || s_wmrRgx.IsMatch(deviceState.renderModelName))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.WMRHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        if (s_leftRgx.IsMatch(deviceState.modelNumber) && VRModule.GetLeftControllerDeviceIndex() == deviceState.deviceIndex)
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.WMRControllerLeft;
                            return;
                        }
                        else if (s_rightRgx.IsMatch(deviceState.modelNumber) && VRModule.GetRightControllerDeviceIndex() == deviceState.deviceIndex)
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.WMRControllerRight;
                            return;
                        }
                        break;
                    }
                }
                else if (deviceState.deviceClass == VRModuleDeviceClass.Controller && s_knucklesRgx.IsMatch(deviceState.modelNumber))
                {
                    if (s_leftRgx.IsMatch(deviceState.renderModelName))
                    {
                        deviceState.deviceModel = VRModuleDeviceModel.KnucklesLeft;
                        return;
                    }
                    else if (s_rightRgx.IsMatch(deviceState.renderModelName))
                    {
                        deviceState.deviceModel = VRModuleDeviceModel.KnucklesRight;
                        return;
                    }
                }
                else if (s_daydreamRgx.IsMatch(deviceState.modelNumber))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.DaydreamHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        deviceState.deviceModel = VRModuleDeviceModel.DaydreamController;
                        return;
                    }
                }


                deviceState.deviceModel = VRModuleDeviceModel.Unknown;
            }
            protected static void SetupKnownDeviceModel(IVRModuleDeviceStateRW deviceState)
            {
                if (s_viveRgx.IsMatch(deviceState.modelNumber) || s_viveRgx.IsMatch(deviceState.renderModelName))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        if (s_viveCosmosRgx.IsMatch(deviceState.modelNumber))
                        {
                            if (s_leftRgx.IsMatch(deviceState.renderModelName))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.ViveCosmosControllerLeft;
                            }
                            else if (s_rightRgx.IsMatch(deviceState.renderModelName))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.ViveCosmosControllerRight;
                            }
                            deviceState.input2DType = VRModuleInput2DType.JoystickOnly;
                        }
                        else
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.ViveController;
                            deviceState.input2DType = VRModuleInput2DType.TouchpadOnly;
                        }
                        return;

                    case VRModuleDeviceClass.GenericTracker:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveTracker;
                        return;

                    case VRModuleDeviceClass.TrackingReference:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveBaseStation;
                        return;
                    }
                }
                else if (s_oculusRgx.IsMatch(deviceState.modelNumber))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.OculusHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        if (Application.platform == RuntimePlatform.Android)
                        {
                            if (deviceState.modelNumber.Contains("Go"))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.OculusGoController;
                                deviceState.input2DType = VRModuleInput2DType.TouchpadOnly;
                                return;
                            }
                            else if (s_leftRgx.IsMatch(deviceState.modelNumber))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.OculusQuestControllerLeft;
                                deviceState.input2DType = VRModuleInput2DType.JoystickOnly;
                                return;
                            }
                            else if (s_rightRgx.IsMatch(deviceState.modelNumber))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.OculusQuestControllerRight;
                                deviceState.input2DType = VRModuleInput2DType.JoystickOnly;
                                return;
                            }
                        }
                        else
                        {
                            if (s_leftRgx.IsMatch(deviceState.modelNumber))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.OculusTouchLeft;
                                deviceState.input2DType = VRModuleInput2DType.JoystickOnly;
                                return;
                            }
                            else if (s_rightRgx.IsMatch(deviceState.modelNumber))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.OculusTouchRight;
                                deviceState.input2DType = VRModuleInput2DType.JoystickOnly;
                                return;
                            }
                        }
                        break;

                    case VRModuleDeviceClass.TrackingReference:
                        deviceState.deviceModel = VRModuleDeviceModel.OculusSensor;
                        return;
                    }
                }
                else if (s_wmrRgx.IsMatch(deviceState.modelNumber) || s_wmrRgx.IsMatch(deviceState.renderModelName))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.WMRHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        if (s_leftRgx.IsMatch(deviceState.modelNumber) && VRModule.GetLeftControllerDeviceIndex() == deviceState.deviceIndex)
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.WMRControllerLeft;
                            deviceState.input2DType = VRModuleInput2DType.Both;
                            return;
                        }
                        else if (s_rightRgx.IsMatch(deviceState.modelNumber) && VRModule.GetRightControllerDeviceIndex() == deviceState.deviceIndex)
                        {
                            deviceState.deviceModel = VRModuleDeviceModel.WMRControllerRight;
                            deviceState.input2DType = VRModuleInput2DType.Both;
                            return;
                        }
                        break;
                    }
                }
                else if (s_indexRgx.IsMatch(deviceState.modelNumber) || s_indexRgx.IsMatch(deviceState.renderModelName))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.IndexHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        deviceState.input2DType = VRModuleInput2DType.TouchpadOnly;
                        if (s_leftRgx.IsMatch(deviceState.renderModelName))
                        {
                            if (s_knucklesRgx.IsMatch(deviceState.renderModelName))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.KnucklesLeft;
                            }
                            else
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.IndexControllerLeft;
#if VIU_STEAMVR_2_0_0_OR_NEWER
                                deviceState.input2DType = VRModuleInput2DType.Both;
#endif
                            }
                        }
                        else if (s_rightRgx.IsMatch(deviceState.renderModelName))
                        {
                            if (s_knucklesRgx.IsMatch(deviceState.renderModelName))
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.KnucklesRight;
                            }
                            else
                            {
                                deviceState.deviceModel = VRModuleDeviceModel.IndexControllerRight;
#if VIU_STEAMVR_2_0_0_OR_NEWER
                                deviceState.input2DType = VRModuleInput2DType.Both;
#endif
                            }
                        }
                        return;

                    case VRModuleDeviceClass.TrackingReference:
                        deviceState.deviceModel = VRModuleDeviceModel.ViveBaseStation;
                        return;
                    }
                }
                else if (s_daydreamRgx.IsMatch(deviceState.modelNumber))
                {
                    switch (deviceState.deviceClass)
                    {
                    case VRModuleDeviceClass.HMD:
                        deviceState.deviceModel = VRModuleDeviceModel.DaydreamHMD;
                        return;

                    case VRModuleDeviceClass.Controller:
                        deviceState.deviceModel = VRModuleDeviceModel.DaydreamController;
                        deviceState.input2DType = VRModuleInput2DType.TrackpadOnly;
                        return;
                    }
                }


                deviceState.deviceModel = VRModuleDeviceModel.Unknown;
            }