public void setNotificationListener(IntPtr sdkContext, UInt32 deviceID, bool isMasterDevice) { //TODO Configure zone to test alarm notification. //To test input detect notification. BS2TriggerActionConfig triggerActionConfig; Console.WriteLine("Trying to get trigger-action config."); BS2ErrorCode result = (BS2ErrorCode)API.BS2_GetTriggerActionConfig(sdkContext, deviceID, out triggerActionConfig); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } triggerActionConfig.numItems = 1; triggerActionConfig.items[0].trigger.deviceID = deviceID; triggerActionConfig.items[0].trigger.type = (byte)BS2TriggerTypeEnum.INPUT; BS2InputTrigger inputTrigger = Util.AllocateStructure <BS2InputTrigger>(); inputTrigger.port = 0; inputTrigger.switchType = (byte)BS2SwitchTypeEnum.NORMAL_OPEN; inputTrigger.duration = 10; inputTrigger.scheduleID = (UInt32)BS2ScheduleIDEnum.ALWAYS; byte[] inputTriggerArray = Util.ConvertTo <BS2InputTrigger>(ref inputTrigger); Array.Clear(triggerActionConfig.items[0].trigger.triggerUnion, 0, triggerActionConfig.items[0].trigger.triggerUnion.Length); Array.Copy(inputTriggerArray, triggerActionConfig.items[0].trigger.triggerUnion, inputTriggerArray.Length); triggerActionConfig.items[0].action.deviceID = deviceID; triggerActionConfig.items[0].action.type = (byte)BS2ActionTypeEnum.SOUND; BS2SoundAction soundAction = Util.AllocateStructure <BS2SoundAction>(); soundAction.count = 1; soundAction.soundIndex = (UInt16)BS2SoundIndexEnum.WELCOME; Array.Clear(soundAction.reserved, 0, soundAction.reserved.Length); byte[] inputActionArray = Util.ConvertTo <BS2SoundAction>(ref soundAction); Array.Clear(triggerActionConfig.items[0].action.actionUnion, 0, triggerActionConfig.items[0].action.actionUnion.Length); Array.Copy(inputActionArray, triggerActionConfig.items[0].action.actionUnion, inputActionArray.Length); Console.WriteLine("Trying to set trigger-action config."); result = (BS2ErrorCode)API.BS2_SetTriggerActionConfig(sdkContext, deviceID, ref triggerActionConfig); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } Console.WriteLine("Trying to activate notification listening."); cbOnAlarmFired = new API.OnAlarmFired(AlarmFired); cbOnInputDetected = new API.OnInputDetected(InputDetected); cbOnConfigChanged = new API.OnConfigChanged(ConfigChanged); result = (BS2ErrorCode)API.BS2_SetNotificationListener(sdkContext, cbOnAlarmFired, cbOnInputDetected, cbOnConfigChanged); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } Console.WriteLine("Press ESC to stop notification listening."); while (Console.ReadKey(true).Key != ConsoleKey.Escape) { Thread.Sleep(100); } Console.WriteLine("Trying to deactivate notification listening."); result = (BS2ErrorCode)API.BS2_SetNotificationListener(sdkContext, null, null, null); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); } cbOnAlarmFired = null; cbOnInputDetected = null; cbOnConfigChanged = null; }
public static string getActionMsg(BS2Action action) { BS2ActionTypeEnum actionType = (BS2ActionTypeEnum)action.type; switch (actionType) { case BS2ActionTypeEnum.NONE: return("Not specified"); case BS2ActionTypeEnum.RELAY: { BS2RelayAction relay = Util.ConvertTo <BS2RelayAction>(action.actionUnion); return(String.Format("RelayAction relayIndex[{0}] signalID[{1}] count[{2}] onDuration[{3}ms] offDuration[{4}ms] delay[{5}ms]", relay.relayIndex, relay.signal.signalID, relay.signal.count, relay.signal.onDuration, relay.signal.offDuration, relay.signal.delay)); } case BS2ActionTypeEnum.TTL: { BS2OutputPortAction outputPort = Util.ConvertTo <BS2OutputPortAction>(action.actionUnion); return(String.Format("OutputPortAction relayIndex[{0}] signalID[{1}] count[{2}] onDuration[{3}ms] offDuration[{4}ms] delay[{5}ms]", outputPort.portIndex, outputPort.signal.signalID, outputPort.signal.count, outputPort.signal.onDuration, outputPort.signal.offDuration, outputPort.signal.delay)); } case BS2ActionTypeEnum.DISPLAY: { BS2DisplayAction display = Util.ConvertTo <BS2DisplayAction>(action.actionUnion); return(String.Format("DisplayAction displayID[{0}] resourceID[{1}] delay[{2}ms]", display.displayID, display.resourceID, display.duration)); } case BS2ActionTypeEnum.SOUND: { BS2SoundAction sound = Util.ConvertTo <BS2SoundAction>(action.actionUnion); return(String.Format("SoundAction soundIndex[{0}] count[{1}]", sound.soundIndex, sound.count)); } case BS2ActionTypeEnum.LED: { BS2LedAction led = Util.ConvertTo <BS2LedAction>(action.actionUnion); string ledSignalStr = ""; for (int idx = 0; idx < BS2Environment.BS2_LED_SIGNAL_NUM; ++idx) { ledSignalStr += String.Format("[color[{0}] duration[{1}ms] delay[{2}ms]]", (BS2LedColorEnum)led.signal[idx].color, led.signal[idx].duration, led.signal[idx].delay); if (idx + 1 < BS2Environment.BS2_LED_SIGNAL_NUM) { ledSignalStr += ", "; } } return(String.Format("LedAction count[{0}] {1}", led.count, ledSignalStr)); } case BS2ActionTypeEnum.BUZZER: { BS2BuzzerAction buzzer = Util.ConvertTo <BS2BuzzerAction>(action.actionUnion); string buzzerSignalStr = ""; for (int idx = 0; idx < BS2Environment.BS2_BUZZER_SIGNAL_NUM; ++idx) { buzzerSignalStr += String.Format("[tone[{0}] fadeout[{1}] duration[{2}ms] delay[{3}ms]]", (BS2BuzzerToneEnum)buzzer.signal[idx].tone, Convert.ToBoolean(buzzer.signal[idx].fadeout), buzzer.signal[idx].duration, buzzer.signal[idx].delay); if (idx + 1 < BS2Environment.BS2_BUZZER_SIGNAL_NUM) { buzzerSignalStr += ", "; } } return(String.Format("BuzzerAction count[{0}] {1}", buzzer.count, buzzerSignalStr)); } case BS2ActionTypeEnum.LIFT: { BS2LiftAction lift = Util.ConvertTo <BS2LiftAction>(action.actionUnion); return(String.Format("LiftAction deviceID[{0}] type[{1}]", lift.liftID, (BS2LiftActionTypeEnum)lift.type)); } default: return("Not implemented yet."); } }