Beispiel #1
0
        public void ProcessCommand(Queue <String> arguments)
        {
            string command = arguments.Dequeue().ToLower();

            switch (command)
            {
            case "reset":
                _bus.Reset();
                break;

            case "rescan":
                _bus.Rescan();
                break;

            case "start":
                _bus.StartPolling();
                break;

            case "stop":
                _bus.StopPolling();
                break;

            case "device":
                byte      address = byte.Parse(arguments.Dequeue());
                EosDevice device  = _bus.Devices.GetByAddress(address);
                if (device != null)
                {
                    ProcessDeviceCommand(device, arguments);
                }
                break;
            }
        }
Beispiel #2
0
        internal EosLed(EosDevice device, byte id)
            : base(device, id)
        {
            _powerPacket = new EosPacket(device.Address, EosBusCommands.LED_POWER);
            _powerPacket.Add((byte)id);
            _powerPacket.Add((byte)0);
            _powerPacket.IsSent = true;

            _levelPacket = new EosPacket(device.Address, EosBusCommands.LED_LEVEL);
            _levelPacket.Add((byte)id);
            _levelPacket.Add((byte)0);
            _levelPacket.IsSent = true;
        }
Beispiel #3
0
        public void ProcessCoilCommand(EosDevice device, Queue <String> arguments)
        {
            byte   coil        = byte.Parse(arguments.Dequeue());
            string coilCommand = arguments.Dequeue().ToLower();

            switch (coilCommand)
            {
            case "position":
                int position = int.Parse(arguments.Dequeue());
                device.SetCoilPosition(coil, position);
                break;
            }
        }
Beispiel #4
0
        public void ProcessStepperCommand(EosDevice device, Queue <String> arguments)
        {
            byte   stepper        = byte.Parse(arguments.Dequeue());
            string stepperCommand = arguments.Dequeue().ToLower();

            switch (stepperCommand)
            {
            case "target":
                long target = long.Parse(arguments.Dequeue());
                device.SetStepperTargetPosition(stepper, target);
                break;

            case "zero":
                device.ZeroStepperPosition(stepper);
                break;
            }
        }
Beispiel #5
0
        public void ProcessLedCommand(EosDevice device, Queue <String> arguments, byte?ledId)
        {
            string ledCommand = arguments.Dequeue().ToLower();

            switch (ledCommand)
            {
            case "level":
                byte level = byte.Parse(arguments.Dequeue());
                if (ledId == null)
                {
                    device.SetBacklightLevel(level);
                }
                else
                {
                    device.SetLedLevel((byte)ledId, level);
                }
                break;

            case "on":
                if (ledId == null)
                {
                    device.SetBacklightPower(true);
                }
                else
                {
                    device.SetLedPower((byte)ledId, true);
                }
                break;

            case "off":
                if (ledId == null)
                {
                    device.SetBacklightPower(false);
                }
                else
                {
                    device.SetLedPower((byte)ledId, false);
                }
                break;
            }
        }
Beispiel #6
0
        public void ProcessSetCommand(EosDevice device, Queue <string> arguments)
        {
            string setCommand = arguments.Dequeue().ToLower();

            switch (setCommand)
            {
            case "address":
                byte newAddress = byte.Parse(arguments.Dequeue());
                device.SetNodeAddress(newAddress);
                break;

            case "group":
                byte newGroup = byte.Parse(arguments.Dequeue());
                device.SetGroup(newGroup);
                break;

            case "name":
                device.SetName(arguments.Dequeue());
                break;
            }
        }
Beispiel #7
0
        public void ProcessDeviceCommand(EosDevice device, Queue <String> arguments)
        {
            string deviceCommand = arguments.Dequeue().ToLower();

            switch (deviceCommand)
            {
            case "set":
                ProcessSetCommand(device, arguments);
                break;

            case "stepper":
                ProcessStepperCommand(device, arguments);
                break;

            case "servo":
                ProcessServoCommand(device, arguments);
                break;

            case "backlight":
                ProcessLedCommand(device, arguments, null);
                break;

            case "led":
                byte led = byte.Parse(arguments.Dequeue());
                ProcessLedCommand(device, arguments, led);
                break;

            case "text":
                ProcessTextCommand(device, arguments);
                break;

            case "coil":
                ProcessCoilCommand(device, arguments);
                break;
            }
        }
Beispiel #8
0
        public void ProcessServoCommand(EosDevice device, Queue <String> arguments)
        {
            byte   servo        = byte.Parse(arguments.Dequeue());
            string servoCommand = arguments.Dequeue().ToLower();

            switch (servoCommand)
            {
            case "value":
                int target = int.Parse(arguments.Dequeue());
                device.SetServoValue(servo, target);
                break;

            case "set":
                int minValue     = int.Parse(arguments.Dequeue());
                int maxValue     = int.Parse(arguments.Dequeue());
                int defaultValue = int.Parse(arguments.Dequeue());
                device.SetServoConfig(servo, minValue, maxValue, defaultValue);
                break;

            case "get":
                device.GetServoConfig(servo);
                break;
            }
        }
Beispiel #9
0
 protected void OnDeviceUpdated(EosDevice device)
 {
     OnDeviceUpdated(new EosDeviceEventArgs(device));
 }
Beispiel #10
0
 /// <summary>
 /// Creates an output for a device and it's unique id.
 /// </summary>
 /// <param name="device">Device this output belongs to.</param>
 /// <param name="id">Unique id by type for this output.</param>
 internal EosOutput(EosDevice device, byte id)
 {
     _id     = id;
     _device = device;
 }
Beispiel #11
0
        private void Parser_PacketReady(object sender, EosPacketEventArgs e)
        {
            lock (this)
            {
                //Console.WriteLine("Packet Received (masterState {0}, responseAddress {1})", _masterState, _resposneAddress);
                OnPacketReceived(e.Packet);

                // Check to see if we got the response before we checked for done transmitting
                if (_masterState == BusMasterState.TRANSMITTING && _resposneAddress != 0xff && !IsWriting)
                {
                    _masterState = BusMasterState.WAITINGRESPONSE;
                    switch (State)
                    {
                    case EosBusState.TRANSMITTING:
                        State = EosBusState.WAITING_RESPONSE;
                        break;

                    case EosBusState.POLLING:
                    case EosBusState.IDLE:
                        State = _polling ? EosBusState.POLLING : EosBusState.IDLE;
                        break;
                    }
                }

                if (_masterState == BusMasterState.WAITINGRESPONSE && e.Packet.Source == _resposneAddress)
                {
                    _busTimer.Stop();
                    _masterState = BusMasterState.IDLE;
                    switch (State)
                    {
                    case EosBusState.POLLING:
                        //Console.WriteLine("Polling Received");

                        if (e.Packet.Data.Count > 0)
                        {
                            EosDevice device = Devices.GetByAddress(e.Packet.Source);
                            device.UpdateState(e.Packet);
                            OnDeviceUpdated(device);
                        }

                        _busTimer.Interval = POLL_INTERVAL;
                        _busTimer.Start();
                        break;

                    case EosBusState.SCANNING:
                        // Scan found a valid response
                        _devices.Add(new EosDevice(this, e.Packet.Source, e.Packet.Data));
                        NextScan();
                        break;

                    case EosBusState.WAITING_RESPONSE:
                        //Console.WriteLine("Response sent");
                        OnResponseReceived(e.Packet);
                        if (_polling)
                        {
                            State = EosBusState.POLLING;
                            _busTimer.Interval = POLL_INTERVAL;
                            _busTimer.Start();
                        }
                        else
                        {
                            State = EosBusState.IDLE;
                        }
                        break;
                    }
                }
                else if (_masterState == BusMasterState.CLEARINGSCAN)
                {
                    _masterState = BusMasterState.IDLE;
                    Rescan();
                }
                else if (_masterState == BusMasterState.CLEARINGRESET)
                {
                    _masterState = BusMasterState.IDLE;
                    Reset();
                }
                else
                {
                    // Received errored packet when we are not waiting on one.
                    _stats.Collisions++;
                }
            }
        }
Beispiel #12
0
        public void ProcessTextCommand(EosDevice device, Queue <String> arguments)
        {
            byte display = byte.Parse(arguments.Dequeue());

            device.SetDisplayText(display, arguments.Dequeue());
        }
Beispiel #13
0
        public override void ProcessData(byte[] buffer, int offset, int length)
        {
            for (int i = 0; i < length; i++)
            {
                byte data = buffer[offset + i];
                switch (_parseState)
                {
                case ParseStates.COMMAND:
                    ProcessCommand(data);
                    break;

                case ParseStates.MODE:
                    ProcessMode(data);
                    break;

                case ParseStates.PACKET:
                    _parseBuffer[_parseBufferCount++] = data;

                    if ((_parseBufferCount == 4 && _parseBuffer[3] == 0) ||
                        (_parseBufferCount > 4 && _parseBufferCount == (4 + _parseBuffer[3])))
                    {
                        EosPacket packet = new EosPacket();
                        packet.Destination = _parseBuffer[0];
                        packet.Source      = _parseBuffer[1];
                        packet.Command     = _parseBuffer[2];
                        for (int j = 0; j < _parseBuffer[3]; j++)
                        {
                            packet.Add(_parseBuffer[4 + j]);
                        }
                        OnPacketReceived(packet);

                        if (State == EosBusState.WAITING_RESPONSE)
                        {
                            OnResponseReceived(packet);
                        }

                        if (packet.Command == 127 && packet.Data.Count > 0)
                        {
                            EosDevice device = Devices.GetByAddress(packet.Source);
                            device.UpdateState(packet);
                            OnDeviceUpdated(device);
                        }

                        _parseState = ParseStates.COMMAND;
                        //Console.WriteLine();
                    }
                    break;

                case ParseStates.ENUMERATIONCOUNT:
                    if (data > 0)
                    {
                        _parseBuffer[0] = data;
                        _parseState     = ParseStates.ENUMERATION;
                    }
                    else
                    {
                        _parseState = ParseStates.COMMAND;
                    }
                    break;

                case ParseStates.ENUMERATION:
                    _parseBuffer[1 + _parseBufferCount++] = data;
                    if (_parseBufferCount == 21)
                    {
                        List <byte> deviceData = new List <byte>(20);
                        for (int j = 0; j < 20; j++)
                        {
                            deviceData.Add(_parseBuffer[2 + j]);
                        }
                        _devices.Add(new EosDevice(this, _parseBuffer[1], deviceData));
                        _parseBuffer[0]--;
                        _parseBufferCount = 0;
                        if (_parseBuffer[0] == 0)
                        {
                            _parseState = ParseStates.COMMAND;
                            OnBusReset();
                            //Console.WriteLine();
                        }
                    }
                    break;

                default:
                    if (data == 58)
                    {
                        ProcessCommandData();
                        //Console.WriteLine();
                    }
                    else
                    {
                        _parseBuffer[_parseBufferCount++] = data;
                    }
                    break;
                }
            }
        }
Beispiel #14
0
 public EosDeviceEventArgs(EosDevice device)
 {
     _device = device;
 }