Ejemplo n.º 1
0
        public ConfigCameraReplyE?ConfigCamera(ConfigCameraModel configCamera, int millisecondsTimeout)
        {
            if (client == null)
            {
                return(ConfigCameraReplyE.DisconnectStatus);
            }

            ConfigCameraRequest request = new ConfigCameraRequest
            {
                ConfigCamera = configCamera,
            };

            configCameraSuccess = null;
            configCameraWaitHandle.Reset();
            if (this.client.Send(request) > 0)
            {
                if (configCameraWaitHandle.WaitOne(millisecondsTimeout))
                {
                    return(configCameraSuccess);
                }
                else
                {
                    return(null);
                }
            }
            return(configCameraSuccess);
        }
Ejemplo n.º 2
0
        public ConfigCameraViewModel(IInitCamera initCamera, IDialogService dialogService, ICommunication communication, IRegionManager regionManager, IEventAggregator eventAggregator)
            : base(regionManager, eventAggregator)
        {
            this.comm            = communication;
            this.dialogService   = dialogService;
            IntegrationTimeRange = initCamera.InitIntegrationTimesRange();
            Frequencies          = initCamera.InitFrequencies();
            configCameraModel    = initCamera.InitConfigCamera(SubWorkModeE._4PHASE_GRAY_4PHASE_BG);
            InitWorkModes();

            InitBinningModes();

            Resolution = CalculateResolution(ROISize, XStep, YStep, configCameraModel.BinningMode);

            ApplyConfigCameraCmd   = new DelegateCommand(ApplyConfigCameraAsync);
            BinningModeSelectedCmd = new DelegateCommand <int?>(BinningModeSelected);

            this.EventAggregator.GetEvent <ConfigCameraRequestEvent>().Subscribe(ApplyConfigCamera, ThreadOption.PublisherThread, true);

            this.EventAggregator.GetEvent <IsStreamingEvent>().Subscribe(isStreaming => IsEnable = !isStreaming, ThreadOption.BackgroundThread, true);

            this.EventAggregator.GetEvent <ConfigCorrectionAEChangedEvent>().Subscribe(enable => EnableAE = enable, ThreadOption.BackgroundThread, true);

            this.EventAggregator.GetEvent <ConfigArithParamsReplyEvent>().Subscribe(reply =>
            {
                if (reply.AEAck == 0)
                {
                    this.IntegrationTimes = reply.IntegrationTimes;
                }
            }, ThreadOption.BackgroundThread, true);

            this.EventAggregator.GetEvent <ConnectCameraReplyEvent>().Subscribe(reply =>
            {
                MaxImageSize = new Size(reply.ToFMaxImageWidth, reply.ToFMaxImageHeight);
            }, true);

            this.EventAggregator.GetEvent <UserAccessChangedEvent>().Subscribe(type =>
            {
                if (type == SIFP.Core.Enums.UserAccessType.Expert)
                {
                    IsExpert = true;
                }
                else
                {
                    IsExpert = false;
                }
            }, true);
        }
Ejemplo n.º 3
0
        public ConfigCameraModel InitConfigCamera(SubWorkModeE subWorkMode)
        {
#if false //CreateJsonFile
            ConfigCameraModel configCamera = new ConfigCameraModel
            {
                DoReset       = 0,
                StandByMode   = StandByModeE.None,
                SysXtalClkKHz = 19800,
                UserCases     = new List <UserCaseModel>
                {
                    new UserCaseModel
                    {
                        WorkMode                    = WorkModeE.SINGLE_FREQ,
                        SubWorkMode                 = SubWorkModeE._4PHASE,
                        SubFrameModes               = new SubFrameModeE[] { 0, 0, 0, 0 },
                        NumSubFramePerFrame         = new uint[] { 1, 0, 0, 0 },
                        SpecialFrameModes           = new SpecialFrameModeE[] { 0, 0, 0, 0 },
                        DifferentialBG              = 0,
                        NumDepthSequencePerDepthMap = 1,
                        MIPI_FS_FE_Pos              = MIPI_FS_FE_PosE.SubFrame,
                        FrameSeqSchedule            = new FrameSeqSchedule
                        {
                            Slot0FrameNum = 0,
                            Slot1FrameNum = 1,
                            Slot2FrameNum = 2,
                            Slot3FrameNum = 3,
                        },
                        IntegrationTimes = new IntegrationTime[]
                        {
                            new IntegrationTime {
                                Phase1_4Int = 1000000, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                        },
                        PLLDLLDivs = new PLLDLLDiv[]
                        {
                            new PLLDLLDiv {
                                Phase1_4Div = 5, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                        },
                    },
                    new UserCaseModel
                    {
                        WorkMode                    = WorkModeE.SINGLE_FREQ,
                        SubWorkMode                 = SubWorkModeE._4PHASE_GRAY,
                        SubFrameModes               = new SubFrameModeE[] { SubFrameModeE.Mode_5Phase, 0, 0, 0 },
                        NumSubFramePerFrame         = new uint[] { 1, 0, 0, 0 },
                        SpecialFrameModes           = new SpecialFrameModeE[] { SpecialFrameModeE.Gray, 0, 0, 0 },
                        DifferentialBG              = 0,
                        NumDepthSequencePerDepthMap = 1,
                        MIPI_FS_FE_Pos              = MIPI_FS_FE_PosE.SubFrame,
                        FrameSeqSchedule            = new FrameSeqSchedule
                        {
                            Slot0FrameNum = 0,
                            Slot1FrameNum = 1,
                            Slot2FrameNum = 2,
                            Slot3FrameNum = 3,
                        },
                        IntegrationTimes = new IntegrationTime[]
                        {
                            new IntegrationTime {
                                Phase1_4Int = 1000000, Phase5_8Int = 0, SpecialPhaseInt = 1000000,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                        },
                        PLLDLLDivs = new PLLDLLDiv[]
                        {
                            new PLLDLLDiv {
                                Phase1_4Div = 5, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                        },
                    },
                    new UserCaseModel
                    {
                        WorkMode                    = WorkModeE.DOUBLE_FREQ,
                        SubWorkMode                 = SubWorkModeE._4PHASE_GRAY_4PHASE_BG,
                        SubFrameModes               = new SubFrameModeE[] { SubFrameModeE.Mode_5Phase, SubFrameModeE.Mode_5Phase, 0, 0 },
                        NumSubFramePerFrame         = new uint[] { 1, 1, 0, 0 },
                        SpecialFrameModes           = new SpecialFrameModeE[] { SpecialFrameModeE.Gray, SpecialFrameModeE.Bg, 0, 0 },
                        DifferentialBG              = 0,
                        NumDepthSequencePerDepthMap = 1,
                        MIPI_FS_FE_Pos              = MIPI_FS_FE_PosE.SubFrame,
                        FrameSeqSchedule            = new FrameSeqSchedule
                        {
                            Slot0FrameNum = 0,
                            Slot1FrameNum = 1,
                            Slot2FrameNum = 2,
                            Slot3FrameNum = 3,
                        },
                        IntegrationTimes = new IntegrationTime[]
                        {
                            new IntegrationTime {
                                Phase1_4Int = 1000000, Phase5_8Int = 0, SpecialPhaseInt = 1000000,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 1000000, Phase5_8Int = 0, SpecialPhaseInt = 1000000,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                            new IntegrationTime {
                                Phase1_4Int = 0, Phase5_8Int = 0, SpecialPhaseInt = 0,
                            },
                        },
                        PLLDLLDivs = new PLLDLLDiv[]
                        {
                            new PLLDLLDiv {
                                Phase1_4Div = 5, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 8, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                            new PLLDLLDiv {
                                Phase1_4Div = 2, Phase5_8Div = 2, SpecialPhaseDiv = 2,
                            },
                        },
                    },
                },
                MIPIFrameRate       = 5,
                SequencerRepeatMode = SequencerRepeatModeE.Auto_Repeat,
                TriggerMode         = TriggerModeE.Master_Mode,
                ROISetting          = new ROISetting {
                    XStart = 0, XSize = 640, XStep = 1, YStart = 0, YSize = 480, YStep = 1
                },
                BinningMode       = BinningModeE.None,
                MirrorMode        = MirrorModeE.None,
                TSensorMode       = TSensorModeE.EveryPhase,
                PerformClkChanges = 0,
                ClkDivOverride    = new ClkDIvOverride {
                    ClkDigSlowDiv = 0, PLLFBDiv = 0, PLLPreDiv = 0
                },
            };
            var json = JsonSerializer.Serialize(configCamera);
            File.WriteAllText(@"Configs\ConfigCamera.json", json);
#endif
            try
            {
                var json = File.ReadAllText(@"Configs\ConfigCamera.json");

                var configs = JsonSerializer.Deserialize <ConfigCameraModel>(json);

                //计算每一个UserCase的最大深度帧帧率
                foreach (var usercase in configs.UserCases)
                {
                    Int32[] numPhasePerFrame = new Int32[4];
                    for (int i = 0; i < usercase.NumSubFramePerFrame.Length; i++)
                    {
                        switch (usercase.SubFrameModes[i])
                        {
                        case SubFrameModeE.Mode_4Phase:
                            numPhasePerFrame[i] = (int)(4 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_2Phase:
                            numPhasePerFrame[i] = (int)(2 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_8Phase:
                            numPhasePerFrame[i] = (int)(8 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_2Phase_2Phase:
                            numPhasePerFrame[i] = (int)(4 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_1SpecialPhase:
                            numPhasePerFrame[i] = (int)(1 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_5Phase:
                            numPhasePerFrame[i] = (int)(5 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_9Phase:
                            numPhasePerFrame[i] = (int)(9 * usercase.NumSubFramePerFrame[i]);
                            break;

                        case SubFrameModeE.Mode_3Phase:
                            numPhasePerFrame[i] = (int)(3 * usercase.NumSubFramePerFrame[i]);
                            break;

                        default:
                            break;
                        }
                    }
                    usercase.NumPhasePerFrameStruct = (uint)numPhasePerFrame.Sum() * usercase.NumDepthSequencePerDepthMap;

                    usercase.MaxFPS = Math.Min(30, 240 / usercase.NumPhasePerFrameStruct);
                }

                if (configs.UserCases.Exists(config => config.SubWorkMode == subWorkMode))
                {
                    configs.CurrentUserCase = configs.UserCases.Find(config => config.SubWorkMode == subWorkMode);
                }
                else
                {
                    configs.CurrentUserCase = configs.UserCases.First();
                }

                return(configs);
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex.Message);
            }
            return(null);
        }