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); }
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); }
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); }