/// <summary>
        /// Get protocol activation
        /// </summary>
        /// <param name="data">>received data</param>
        public void ProcessStatusResponse(RFData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            if (data.Fields["Protocol"] != "STATUS" ||
                !data.Fields.ContainsKey("setRF433") ||
                !data.Fields.ContainsKey("setNodoNRF") ||
                !data.Fields.ContainsKey("setMilight") ||
                !data.Fields.ContainsKey("setLivingColors") ||
                !data.Fields.ContainsKey("setAnsluta") ||
                !data.Fields.ContainsKey("setGPIO") ||
                !data.Fields.ContainsKey("setMysensors") ||
                !data.Fields.ContainsKey("setBLE"))
            {
                throw new FormatException("RF Data did not contain correct status data");
            }

            SetRF433        = ProtocolParser.ToBoolean(data.Fields["setRF433"]);
            SetNodoNRF      = ProtocolParser.ToBoolean(data.Fields["setNodoNRF"]);
            SetMiLight      = ProtocolParser.ToBoolean(data.Fields["setMilight"]);
            SetLivingColors = ProtocolParser.ToBoolean(data.Fields["setLivingColors"]);
            SetAnsluta      = ProtocolParser.ToBoolean(data.Fields["setAnsluta"]);
            SetGPIO         = ProtocolParser.ToBoolean(data.Fields["setGPIO"]);
            SetMySensors    = ProtocolParser.ToBoolean(data.Fields["setMysensors"]);
            SetBLE          = ProtocolParser.ToBoolean(data.Fields["setBLE"]);
        }
Exemplo n.º 2
0
        internal static RFData ProcessData(string indata)
        {
            RFData rf = new RFData();

            string[] splitProtocol = indata.Split(DataDelim);

            if (splitProtocol.Length == 1 || // RTS Record: 0 Address: FFFFFF RC: FFFF …
                splitProtocol[1].Equals("PING"))    // ping

            {
                rf.Fields.Add("LOG", indata);
                return(rf);
            }

            // data sent
            if (indata.StartsWith(((int)Direction.MasterToRF).ToString()))
            {
                rf.Protocol = splitProtocol[1];
                rf.Fields.Add("Protocol", rf.Protocol);
                rf.Fields.Add("ID", splitProtocol[2]);
                rf.Fields.Add("SWITCH", splitProtocol[3]);
                rf.Fields.Add("CMD", splitProtocol[4]);
            }
            else // data received
            {
                rf.Counter  = splitProtocol[1];
                rf.Protocol = splitProtocol[2];
                rf.Fields.Add("Protocol", rf.Protocol);

                ProcessesFields(splitProtocol, ref rf);
            }

            return(rf);
        }
Exemplo n.º 3
0
        internal static void ProcessesFields(string[] fields, ref RFData rf)
        {
            string[] labelSplit;

            // Skip pass "20;xx;
            for (int i = 3; i < fields.Length - 1; i++)
            {
                try
                {
                    labelSplit = fields[i].Split(FieldDelim);
                    rf.Fields.Add(labelSplit[0], labelSplit[1]);
                }
                catch { }//todo: remove?
            }
        }
        /// <summary>
        /// Get rflink software version
        /// </summary>
        /// <param name="data">received data</param>
        public void ProcessVerResponse(RFData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            if (!data.Fields["Protocol"].StartsWith("VER") || !data.Fields.ContainsKey("REV") || !data.Fields.ContainsKey("BUILD"))
            {
                throw new FormatException("RF Data did not contain correct version data");
            }

            Version = data.Fields["Protocol"];
            Rev     = data.Fields["REV"];
            Build   = data.Fields["BUILD"];
        }
Exemplo n.º 5
0
        /// <summary>
        /// Data to be processed when received by the RFlink serial port
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">Data received over serial port</param>
        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            lock (receiveLock)
            {
                SerialPort sp     = sender as SerialPort;
                string     indata = sp.ReadLine();

                try
                {
                    RFData rf = ProtocolParser.ProcessData(indata);

                    if (rf != null)
                    {
                        if (!string.IsNullOrWhiteSpace(rf.Protocol) && rf.Protocol == "PONG")
                        {
                            LastPong = DateTime.Now;
                        }
                        else if (!string.IsNullOrWhiteSpace(rf.Protocol) && rf.Protocol == "STATUS")
                        {
                            Settings.ProcessStatusResponse(rf);
                            statusReceived.Set();
                        }
                        else if (!string.IsNullOrWhiteSpace(rf.Protocol) && rf.Protocol.StartsWith("VER"))
                        {
                            Settings.ProcessVerResponse(rf);
                            versionReceived.Set();
                        }
                        else if (libraryStatus == LibraryStatus.Ready)
                        {
                            ReturnRFOutput(rf);
                        }
                    }
                }
                catch (FormatException)
                {
                    // Failed to process settings/version, ignore
                }
                catch (Exception ex)
                {
                    ReturnStdOut($"Invalid data «{indata}». \r\nException {ex.Message} \r\n {ex.StackTrace}");
                }
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// Callback for rflink rf log
 /// </summary>
 protected void ReturnRFOutput(RFData data)
 {
     EventRFOut?.Invoke(this, data);
 }