public TurnOnOffDevice(string vendorName, string model, string version,
                               string serialNumber, string description, ITurnOnOffModule module)
            : base(module.Name, vendorName, model, version, serialNumber, description)
        {
            Module = module;
            AdapterBusObject busObject = new AdapterBusObject("Guybrush");

            Interface = new AdapterInterface("com.guybrush.devices.onoffcontrol");
            var attr = new AdapterAttribute("Status", module.Status)
            {
                COVBehavior = SignalBehavior.Always, Access = E_ACCESS_TYPE.ACCESS_READ
            };

            attr.Annotations.Add("com.guybrush.devices.onoffcontrol.status", "The device status");
            Interface.Properties.Add(attr);

            List <IAdapterValue> inputs = new List <IAdapterValue>(1);

            inputs.Add(new AdapterValue("TargetStatus", false));

            AdapterMethod method = new AdapterMethod("Switch", "Switches devices on or off.", ChangeStatus, inputs);

            Interface.Methods.Add(method);

            busObject.Interfaces.Add(Interface);
            BusObjects.Add(busObject);
            CreateEmitSignalChangedSignal();

            Module.ValueChanged += Module_ValueChanged;
        }
        public void AddCondition(AdapterMethod sender, IReadOnlyDictionary <string, object> inputParams, IDictionary <string, object> outputParams)
        {
            var condition = new ConditionBuilder().BuildCondition((DeviceType)inputParams["SourceDeviceType"],
                                                                  (string)inputParams["SourceDevice"], (string)inputParams["TargetDevice"],
                                                                  (int)inputParams["RequiredValue"], (ConditionType)inputParams["ConditionType"], (int)inputParams["TargetValue"]);

            _conditionManager.RegisterCondition(condition);
        }
 private async void ChangeStatus(AdapterMethod sender, IReadOnlyDictionary <string, object> inputParams, IDictionary <string, object> outputParams)
 {
     await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                                                 () =>
     {
         bool targetStatus = (bool)inputParams["TargetStatus"];
         Module.Status     = targetStatus;
     });
 }
        public SmarthomeAdapter(BridgeConfiguration configuration, ConditionManager conditionMgr) : base(configuration)
        {
            _conditionManager = conditionMgr;

            _abo = new AdapterBusObject("Guybrush");
            AdapterInterface conditionInterface = new AdapterInterface("com.guybrush.station.conditions");

            var addConInputParams = new List <AdapterValue>();

            addConInputParams.Add(new AdapterValue("SourceDeviceType", -1));
            addConInputParams.Add(new AdapterValue("SourceDevice", ""));
            addConInputParams.Add(new AdapterValue("TargetDevice", ""));
            addConInputParams.Add(new AdapterValue("RequiredValue", -1));
            addConInputParams.Add(new AdapterValue("ConditionType", -1));
            addConInputParams.Add(new AdapterValue("TargetValue", -1));

            var addConOutParams = new List <AdapterValue>();

            addConOutParams.Add(new AdapterValue("Response", ""));

            AdapterMethod addCondAttr = new AdapterMethod("AddCondition", "Calling this method will add new condition.", AddCondition, addConInputParams, addConOutParams);

            conditionInterface.Methods.Add(addCondAttr);



            var getCondOutParams = new List <AdapterValue>();

            getCondOutParams.Add(new AdapterValue("SourceDeviceType", ""));
            getCondOutParams.Add(new AdapterValue("SourceDevice", ""));
            getCondOutParams.Add(new AdapterValue("TargetDevice", ""));
            getCondOutParams.Add(new AdapterValue("RequiredValue", ""));
            getCondOutParams.Add(new AdapterValue("ConditionType", ""));
            getCondOutParams.Add(new AdapterValue("TargetValue", ""));

            AdapterMethod getCondAttr = new AdapterMethod("GetConditions", "Calling this method returns list of conditions", GetConditions, null, getCondOutParams);

            conditionInterface.Methods.Add(getCondAttr);

            var removeCondInputParams = new List <AdapterValue>();

            removeCondInputParams.Add(new AdapterValue("SourceDevice", ""));
            removeCondInputParams.Add(new AdapterValue("TargetDevice", ""));

            var removeConOutParams = new List <AdapterValue>();

            removeConOutParams.Add(new AdapterValue("Response", ""));

            AdapterMethod removeCondAttr = new AdapterMethod("RemoveCondition", "Calling this method will remove a condition", RemoveCondition, removeCondInputParams, removeConOutParams);

            conditionInterface.Methods.Add(removeCondAttr);

            _abo.Interfaces.Add(conditionInterface);
            BusObjects.Add(_abo);
        }
        private void GetConditions(AdapterMethod sender, IReadOnlyDictionary <string, object> inputParams, IDictionary <string, object> outputParams)
        {
            lock (_conditionManager.Locker)
            {
                var conditions = _conditionManager.Conditions;


                var condArrays = new ConditionMapper().MapToParams(conditions);

                outputParams["SourceDeviceType"] = condArrays.SourceDeviceTypes ?? string.Empty;
                outputParams["SourceDevice"]     = condArrays.SourceDeviceNames ?? string.Empty;
                outputParams["TargetDevice"]     = condArrays.TargetDeviceNames ?? string.Empty;
                outputParams["RequiredValue"]    = condArrays.RequiredValues ?? string.Empty;
                outputParams["ConditionType"]    = condArrays.ConditionTypes ?? string.Empty;
                outputParams["TargetValue"]      = condArrays.TargetValues ?? string.Empty;
            }
        }
 /*
     <interface name="org.alljoyn.SmartSpaces.Operation.OnControl">
         <annotation name="org.alljoyn.Bus.DocString.En" value="This interface provides capability to switch on the device."/>
         <annotation name="org.alljoyn.Bus.Secure" value="true"/>
         <property name="Version" type="q" access="read">
             <annotation name="org.alljoyn.Bus.DocString.En" value="The interface version."/>
             <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
         </property>
         <method name="SwitchOn">
             <annotation name="org.alljoyn.Bus.DocString.En" value="Switch on the device."/>
         </method>
     </interface>
 */
 public static AdapterInterface CreateOnControl(Action switchOnAction)
 {
     var iface = new AdapterInterface("org.alljoyn.SmartSpaces.Operation.OnControl");
     iface.Properties.Add(new AdapterAttribute("Version", (ushort)1) { COVBehavior = SignalBehavior.Never });
     iface.Properties[0].Annotations.Add("org.alljoyn.Bus.DocString.En", "The interface version");
     var m = new AdapterMethod("SwitchOn", "Switch on the device.", (sender, input, output) =>
     {
         switchOnAction();
     });
     iface.Methods.Add(m);
     return iface;
 }
 private void RemoveCondition(AdapterMethod sender, IReadOnlyDictionary <string, object> inputParams, IDictionary <string, object> outputParams)
 {
     _conditionManager.RemoveCondition((string)inputParams["SourceDevice"], (string)inputParams["TargetDevice"]);
 }
 private void OnMethodInvoked(RequestContext context, Type adapterType, AdapterMethod method, object[] requestArgs, object[] passedArgs, object returnVal) {
    var handler = MethodInvoked;
    if (handler != null) {
       handler(this, new InvokeAdapterMethodEventArgs(context, adapterType, method, requestArgs, passedArgs, returnVal));
    }
 }