public byte[] ToArray() { var stack = new SimpleStack(); stack.PushName(_pin); stack.Push(_value); stack.Push((byte)(_isActive ? 1 : 0)); return stack.Data; }
public byte[] ToArray() { var stack = new SimpleStack(); stack.Push(Index); stack.PushName(Device); stack.Push(Status); return stack.Data; }
public byte[] ToArray() { var stack = new SimpleStack(); stack.Push(Index); stack.PushName(Pin); stack.Push(Value); return stack.Data; }
public byte[] ToArray() { var stack = new SimpleStack(); stack.PushName(_device); stack.Push(_action); stack.Push(_values); return stack.Data; }
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; }
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; }
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"); }; }
/// <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; }
/// <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; }