public override bool CustomActivate() { // Create EiscApis try { foreach (var device in DeviceManager.AllDevices) { if (device.Key == this.Properties.connectionDeviceKey) { Debug.Console(2, "deviceKey {0} Matches", device.Key); DmSwitch = DeviceManager.GetDeviceForKey(device.Key) as PepperDash.Essentials.DM.DmChassisController; } else { Debug.Console(2, "deviceKey {0} doesn't match", device.Key); } } if (Properties.EiscApiIpids != null) { foreach (string Ipid in Properties.EiscApiIpids) { var ApiEisc = new BridgeApiEisc(Ipid); for (uint x = 1; x <= DmSwitch.Chassis.NumberOfInputs; x++) { uint tempX = x; Debug.Console(2, "Creating EiscActions {0}", tempX); ApiEisc.Eisc.SetUShortSigAction(ApiMap.OutputVideoRoutes[tempX], u => DmSwitch.ExecuteSwitch(u, tempX, eRoutingSignalType.Video)); ApiEisc.Eisc.SetUShortSigAction(ApiMap.OutputAudioRoutes[tempX], u => DmSwitch.ExecuteSwitch(u, tempX, eRoutingSignalType.Audio)); if (DmSwitch.TxDictionary.ContainsKey(tempX)) { Debug.Console(2, "Creating Tx Feedbacks {0}", tempX); var TxKey = DmSwitch.TxDictionary[tempX]; var TxDevice = DeviceManager.GetDeviceForKey(TxKey) as DmTxControllerBase; TxDevice.IsOnline.LinkInputSig(ApiEisc.Eisc.BooleanInput[ApiMap.TxOnlineStatus[tempX]]); TxDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(ApiEisc.Eisc.BooleanInput[ApiMap.TxVideoSyncStatus[tempX]]); ApiEisc.Eisc.SetUShortSigAction((ApiMap.HdcpSupport[tempX]), u => TxDevice.SetHdcpSupportAll((ePdtHdcpSupport)(u))); TxDevice.HdcpSupportAllFeedback.LinkInputSig(ApiEisc.Eisc.UShortInput[ApiMap.HdcpSupport[tempX]]); ApiEisc.Eisc.UShortInput[ApiMap.HdcpSupportCapability[tempX]].UShortValue = TxDevice.HdcpSupportCapability; } else { DmSwitch.VideoInputSyncFeedbacks[tempX].LinkInputSig(ApiEisc.Eisc.BooleanInput[ApiMap.TxVideoSyncStatus[tempX]]); } if (DmSwitch.RxDictionary.ContainsKey(tempX)) { Debug.Console(2, "Creating Rx Feedbacks {0}", tempX); var RxKey = DmSwitch.RxDictionary[tempX]; var RxDevice = DeviceManager.GetDeviceForKey(RxKey) as DmRmcControllerBase; RxDevice.IsOnline.LinkInputSig(ApiEisc.Eisc.BooleanInput[ApiMap.RxOnlineStatus[tempX]]); } // DmSwitch.InputEndpointOnlineFeedbacks[(ushort)tempOutputNum].LinkInputSig(ApiEisc.Eisc.BooleanInput[ApiMap.OutputVideoRoutes[tempOutputNum]]); DmSwitch.VideoOutputFeedbacks[(ushort)tempX].LinkInputSig(ApiEisc.Eisc.UShortInput[ApiMap.OutputVideoRoutes[tempX]]); DmSwitch.AudioOutputFeedbacks[(ushort)tempX].LinkInputSig(ApiEisc.Eisc.UShortInput[ApiMap.OutputAudioRoutes[tempX]]); DmSwitch.InputNameFeedbacks[(ushort)tempX].LinkInputSig(ApiEisc.Eisc.StringInput[ApiMap.InputNames[tempX]]); DmSwitch.OutputNameFeedbacks[(ushort)tempX].LinkInputSig(ApiEisc.Eisc.StringInput[ApiMap.OutputNames[tempX]]); DmSwitch.OutputRouteNameFeedbacks[(ushort)tempX].LinkInputSig(ApiEisc.Eisc.StringInput[ApiMap.OutputRouteNames[tempX]]); } DmSwitch.IsOnline.LinkInputSig(ApiEisc.Eisc.BooleanInput[ApiMap.ChassisOnline]); ApiEisc.Eisc.Register(); } } Debug.Console(2, "Name {0} Activated", this.Name); return(true); } catch (Exception e) { Debug.Console(2, "BRidge {0}", e); return(false); } }
/// <summary> /// Factory method to create a new chassis controller from config data. Limited to 8x8 right now /// </summary> public static DmChassisController GetDmChassisController(string key, string name, string type, DMChassisPropertiesConfig properties) { try { type = type.ToLower(); uint ipid = properties.Control.IpIdInt; DmMDMnxn chassis = null; switch (type) { case "dmmd8x8": chassis = new DmMd8x8(ipid, Global.ControlSystem); break; case "dmmd8x8rps": chassis = new DmMd8x8rps(ipid, Global.ControlSystem); break; case "dmmd8x8cpu3": chassis = new DmMd8x8Cpu3(ipid, Global.ControlSystem); break; case "dmmd8x8cpu3rps": chassis = new DmMd8x8Cpu3rps(ipid, Global.ControlSystem); break; case "dmmd16x16": chassis = new DmMd16x16(ipid, Global.ControlSystem); break; case "dmmd16x16rps": chassis = new DmMd16x16rps(ipid, Global.ControlSystem); break; case "dmmd16x16cpu3": chassis = new DmMd16x16Cpu3(ipid, Global.ControlSystem); break; case "dmmd16x16cpu3rps": chassis = new DmMd16x16Cpu3rps(ipid, Global.ControlSystem); break; case "dmmd32x32": chassis = new DmMd32x32(ipid, Global.ControlSystem); break; case "dmmd32x32rps": chassis = new DmMd32x32rps(ipid, Global.ControlSystem); break; case "dmmd32x32cpu3": chassis = new DmMd32x32Cpu3(ipid, Global.ControlSystem); break; case "dmmd32x32cpu3rps": chassis = new DmMd32x32Cpu3rps(ipid, Global.ControlSystem); break; } if (chassis == null) { return(null); } var controller = new DmChassisController(key, name, chassis); // add the cards and port names foreach (var kvp in properties.InputSlots) { controller.AddInputCard(kvp.Value, kvp.Key); } foreach (var kvp in properties.OutputSlots) { controller.AddOutputCard(kvp.Value, kvp.Key); } foreach (var kvp in properties.VolumeControls) { // get the card // check it for an audio-compatible type // make a something-something that will make it work // retire to mountain village var outNum = kvp.Key; var card = controller.Chassis.Outputs[outNum].Card; Audio.Output audio = null; if (card is DmcHdo) { audio = (card as DmcHdo).Audio; } else if (card is Dmc4kHdo) { audio = (card as Dmc4kHdo).Audio; } if (audio == null) { continue; } // wire up the audio to something here... controller.AddVolumeControl(outNum, audio); } controller.InputNames = properties.InputNames; controller.OutputNames = properties.OutputNames; if (!string.IsNullOrEmpty(properties.NoRouteText)) { controller.NoRouteText = properties.NoRouteText; Debug.Console(1, controller, "Setting No Route Text value to: {0}", controller.NoRouteText); } else { Debug.Console(1, controller, "NoRouteText not specified. Defaulting to blank string.", controller.NoRouteText); } controller.PropertiesConfig = properties; return(controller); } catch (Exception e) { Debug.Console(0, "Error creating DM chassis:\r{0}", e); } return(null); }