Example #1
0
        public byte[] ToArray()
        {
            var stack = new SimpleStack();
            stack.PushName(_pin);
            stack.Push(_value);
            stack.Push((byte)(_isActive ?  1 : 0));

            return stack.Data;
        }
Example #2
0
        public byte[] ToArray()
        {
            var stack = new SimpleStack();
            stack.Push(Index);
            stack.PushName(Device);
            stack.Push(Status);

            return stack.Data;
        }
Example #3
0
        public byte[] ToArray()
        {
            var stack = new SimpleStack();
            stack.Push(Index);
            stack.PushName(Pin);
            stack.Push(Value);

            return stack.Data;
        }
Example #4
0
        public byte[] ToArray()
        {
            var stack = new SimpleStack();
            stack.PushName(_device);
            stack.Push(_action);
            stack.Push(_values);

            return stack.Data;
        }
Example #5
0
        public byte[] ToArray()
        {
            var stack = new SimpleStack();
            stack.PushName(_device);
            stack.Push(_event);
            stack.Push(_status);
            stack.Push(_time);
            stack.Push(_values);

            return stack.Data;
        }
Example #6
0
        public byte[] ToArray()
        {
            var stack = new SimpleStack();

            stack.PushName(Name);
            stack.Push(Description);
            stack.Push(Location);
            stack.Push(Address);
            stack.Push(Type);
            stack.PushName(Hardware);
            stack.PushName(Version);
            stack.Push(DigitalInputs);
            stack.Push(DigitalOutputs);
            stack.Push(AnalogInputs);
            stack.Push(CounterInputs);
            stack.Push(PwmOutputs);
            stack.Push(WiresCount);
            stack.Push(DevicesCount);
            stack.Push(SensorsCount);
            //stack.Push(SupportedCommands);
            stack.Push(ResetPin);

            return stack.Data;
        }
Example #7
0
    public HBusProcessor(BusController hbus)
    {
      _bus = hbus;
      _bus.CommandReceived += OnCommandReceived;
      _bus.AckReceived += OnAckReceived;
      _scheduler = Scheduler.GetScheduler();
      _hbusEvents = new Dictionary<string, IList<Event>>();
      //Event from ep source
      OnSourceEvent = (@event, point) =>
      {
        if (@event.Channel != Channel && !string.IsNullOrEmpty(@event.Channel)) return;

        var address = !string.IsNullOrEmpty(@event.Address) ? Address.Parse(@event.Address) : Address.BroadcastAddress;

        var stack = new SimpleStack();

        ////Create new page event list
        //if (!_hbusEvents.ContainsKey(@event.Subscriber))
        //    _hbusEvents.Add(@event.Subscriber, new List<Event>());

        switch (@event.Name)
        {
          case "node-subscribe":
            _bus.SendCommand(NodeCommands.CMD_ADD_NODE_LISTENER, address);
            break;
          case "node-unsubscribe":
            _bus.SendCommand(NodeCommands.CMD_DELETE_NODE_LISTENER, address);
            break;
          case "pin-activate":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_ACTIVATE, address, stack.Data);
            break;
          case "pin-deactivate":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_DEACTIVATE, address, stack.Data);
            break;
          case "pin-subscribe":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_ADD_PIN_LISTENER, address, stack.Data);
            break;
          case "pin-unsubscribe":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_DELETE_PIN_LISTENER, address, stack.Data);
            break;
          case "device-subscribe":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_ADD_DEVICE_LISTENER, address, stack.Data);
            break;
          case "device-unsubscribe":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_DELETE_DEVICE_LISTENER, address, stack.Data);
            break;
          case "sensor-subscribe":
            //This is extracted only for explantion
            //@event.Data could be used as it is
            var interval = @event.Data[0];
            var expires = (ushort) (@event.Data[2] << 8 + @event.Data[1]);
            stack.PushName(@event.Source);
            stack.Push(interval);
            stack.Push(expires);
            _bus.SendCommand(NodeCommands.CMD_ADD_SENSOR_LISTENER, address, stack.Data);
            break;
          case "sensor-unsubscribe":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_DELETE_SENSOR_LISTENER, address, stack.Data);
            break;
          case "sensor-read":
            stack.PushName(@event.Source);
            _bus.SendCommand(NodeCommands.CMD_READ_SENSOR, address, stack.Data);
            break;
          //TODO: other HBus commands
          default:
            if (@event.Name.IndexOf("device-") == 0)
            {
              //Send device action
              var devaction = new DeviceAction(@event.Source, @event.Name.Substring(7), @event.Data);
              _bus.SendCommand(NodeCommands.CMD_EXECUTE_DEVICE_ACTION, address, devaction.ToArray());
            }
            break;
        }
      };

      //Error from ep source
      OnSourceError = (exception, sender) =>
      {
        Log.Error("Error from source endpoint", exception);
      };

      //Close connection with ep source
      OnSourceClose = (sender) =>
      {
        //Close HBus endpoint
        Stop();

        Log.Debug("closed on source close");
      };
    }
Example #8
0
        /// <summary>
        /// Serialize node status to byte array
        /// </summary>
        /// <returns>data stream (byte array)</returns>
        public byte[] ToArray()
        {
            var stack = new SimpleStack();

            //Node global status
            stack.Push(Mask);
            stack.Push(Time);
            stack.Push((byte)NodeStatus);
            stack.Push((byte)BusStatus);
            stack.Push((byte)LastError);
            stack.Push(TotalErrors);

            stack.Push((byte)(Inputs!= null ? Inputs.Length : 0));
            stack.Push((byte)(Outputs != null ? Outputs.Length : 0));
            stack.Push((byte)(Analogs != null ? Analogs.Length : 0));
            stack.Push((byte)(Counters != null ? Counters.Length : 0));
            stack.Push((byte)(Pwms != null ? Pwms.Length : 0));
            stack.Push((byte)(Devices != null ? Devices.Length : 0));
            stack.Push((byte)(Sensors != null ? Sensors.Length : 0));

            stack.PushName(LastActivatedInput);
            stack.PushName(LastActivatedOutput);

            //Inputs
            if ((Mask & 0x01) != 0 && Inputs != null && Inputs.Length > 0)
                foreach (var input in Inputs)
                    stack.Push(input);

            //Outputs
            if ((Mask & 0x02) != 0 && Outputs != null && Outputs.Length > 0)
                foreach (var output in Outputs)
                    stack.Push(output);
            //Analogs
            if ((Mask & 0x04) != 0 && Analogs != null && Analogs.Length > 0)
                foreach (var analog in Analogs)
                    stack.Push(analog);
            //Counters
            if ((Mask & 0x08) != 0 && Counters != null && Counters.Length > 0)
                foreach (var counter in Counters)
                    stack.Push(counter);
            //Pwms
            if ((Mask & 0x10) != 0 && Pwms != null && Pwms.Length > 0)
                foreach (var pwm in Pwms)
                    stack.Push(pwm);
            //Devices
            if ((Mask & 0x20) != 0 && Devices != null && Devices.Length > 0)
                foreach (var device in Devices)
                    stack.Push(device);
            //Sensors
            if ((Mask & 0x40) != 0 && Sensors != null && Sensors.Length > 0)
                foreach (var sensor in Sensors)
                    stack.Push(sensor);

            return stack.Data;
        }
Example #9
0
 /// <summary>
 /// Convert shared information
 /// to transmit to other devices
 /// </summary>
 /// <returns></returns>
 public byte[] ToArray()
 {
     var stack = new SimpleStack();
     stack.Push(Index);
     stack.PushName(Name);
     //stack.Push(Address);
     stack.Push(Description);
     stack.Push(Location);
     stack.Push(Class);
     stack.Push(Hardware);
     stack.Push(Version);
     stack.PushStringArray(Actions);
     return stack.Data;
 }