Esempio n. 1
0
        public static string GetMacMsg(byte[] msg, HeartBeatType htype)
        {
            if (msg != null && msg.Length > 0)
            {
                if (htype == HeartBeatType.HANFEN)
                {
                    var msg_str = Encoding.UTF8.GetString(msg);
                    //66ff00ff+ACCF23B87DAB,172.20.10.4
                    var hanfeng = msg_str.Split(new string[] { "+", "," }, StringSplitOptions.RemoveEmptyEntries);
                    if (hanfeng.Length >= 3)
                    {
                        //66ff00ff+ACCF2349A932,192.168.1.150
                        var mac = hanfeng[1].ToLower();
                        return(mac);
                    }
                }
                else if (htype == HeartBeatType.YILIN)
                {
                    var trans_data = StrHelper.GetHexStr(msg);
                    var split_data = trans_data.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

                    var mac_flag = "0079"; ///开始是mac 地址
                                           ///长度6个字节
                    var mac_len = 12;
                    ///心跳包开始标识
                    var heartBeatStart = "55ff";
                    /////表示心跳包
                    //var index_18_len_2 = "ff";
                    trans_data = trans_data.Replace(" ", "");
                    if (trans_data.IndexOf(mac_flag) != -1)
                    {
                        if (trans_data.Length > 20)
                        {
                            var flag_char = trans_data.Substring(18, 2);
                            if (trans_data.StartsWith(heartBeatStart) && flag_char.Equals("ff"))
                            {
                                var index = trans_data.IndexOf(mac_flag);
                                ///mac地址
                                if (trans_data.IndexOf(mac_flag) != -1)
                                {
                                    var start = trans_data.IndexOf(mac_flag) + mac_flag.Length;
                                    if (trans_data.Length >= start && trans_data.Length >= (start + mac_len))
                                    {
                                        var mac = trans_data.Substring(start, mac_len).ToLower();
                                        return(mac);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(string.Empty);
        }
Esempio n. 2
0
 public void Read(DataReader reader)
 {
     t = (HeartBeatType)reader.ReadInt32();
     time = reader.ReadDateTime().UtcDateTime;
     cc = reader.ReadInt64();
     asdf = reader.ReadInt64();
     peak = reader.ReadInt64();
     max0 = reader.ReadUInt64();
     max1 = reader.ReadUInt64();
     ave0 = reader.ReadUInt64();
     ave1 = reader.ReadUInt64();
     ave = reader.ReadUInt64();
     beat = reader.ReadUInt64();
     audio = reader.ReadUInt64();
     noAudio = reader.ReadUInt64();
 }
Esempio n. 3
0
        public static MacIPVersionInfo GetHearBeatInfo(byte[] msg)
        {
            HeartBeatType ht = GetMsgType(msg);
            var           mo = new MacIPVersionInfo();

            mo.heartBeatType = ht;
            if (ht == HeartBeatType.HANFEN)
            {
                var mac = string.Empty;
                mo.IP      = GetHANFENIP(msg, out mac);
                mo.mac     = mac;
                mo.version = "";
            }
            else if (ht == HeartBeatType.YILIN)
            {
                var mac = string.Empty;
                mo.IP      = "";
                mo.mac     = GetMacMsg(msg, HeartBeatType.YILIN);
                mo.version = "";
            }
            else if (ht == HeartBeatType.DEFAULT)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.CMD)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.BUFANGCHEFANG)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.CHECK_TIME)
            {
                var mac = string.Empty;
                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.BAOJING)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.DEVICE_RESTART)
            {
                string mac = string.Empty;
                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.NUANTONG)
            {
                /*
                 * 16) 暖通设备控制支持
                 * 目前暖通控制通过云端执行操作,格式如
                 * 0x55 + 0xFF + 0x11 + mac(6B) +tCount(1B) + [cCount(1B) + command]+ CRC
                 *
                 * tCount:表示有几个指令
                 * []:表示的是指令集,个数由tCount决定, 每个指令为指令长度+指令内容组成;
                 * 云端收到操作后按照指令集依次发送到对应mac设备, 如mac设备离线忽略操作;
                 */

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.version       = "";


                var str = StrHelper.GetHexStr(msg).Replace(" ", "");

                if (str.Length >= 20)
                {
                    ///mac
                    var mac = str.Substring(6, 12);

                    LogHelper.LogFilter(true, "暖通==>" + str);
                    var tcount = str.Substring(18, 2);
                    var count  = Convert.ToInt32(tcount, 16);
                    //index=14
                    //55ff11 262040589573 01 07 0110660130fc9b
                    //55ff11 262040589573 02 07 0110660130fc9b 78070110660130fc9b78
                    //55ff11 262040589573 02 07 0110660130fc9b 07 0110660130fc9b78
                    var start = 20;
                    for (var i = 0; i < count; i++)
                    {
                        if (start >= str.Length)
                        {
                            break;
                        }
                        var cmdCount = Convert.ToInt32(str.Substring(start, 2).ToLower(), 16);
                        var cmd      = str.Substring(start + 2, cmdCount * 2);
                        mo.listcmd.Add(cmd);
                        start = start + cmdCount * 2 + 2;
                    }
                }
            }

            return(mo);
        }
Esempio n. 4
0
 private void ThreadDelegate(HeartBeatType t, TimeWindow w , TDESample[] tde, AudioSample[] a)
 {
     try
     {
         var ign = Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
         {
             lock(accessLock)
             {
                 beat++;
                 if (w != null && tde != null && a != null)
                 {
                     var l = w.End();
                     if (t == HeartBeatType.BUFFERING)
                     {
                         l = w.Begin();
                         UpdateUI(t, w, tde, a);
                     }
                     UpdateUI(t, w, tde, a);
                     //client.AddMessage(t, cc0, asdf0, peak0, max0, max1, ave0, ave1, ave_all, beat, b - lastTimeStamp, l - b);
                     lastTimeStamp = l;
                 }
             }
         });
     }
     catch (Exception ex)            {
         Error("ThreadDelegate: " + ex.ToString() + " " + ex.Message + " " + ex.HResult);
     }        
 }
Esempio n. 5
0
 private void SetLabels(HeartBeatType t)
 {
     label1.Text = "STATUS";
     switch (t)
     {
         case HeartBeatType.STARTING:
         case HeartBeatType.DEVICE_ERROR:
         case HeartBeatType.NODEVICE:
             {
                 label2.Text = "BEAT";
                 label3.Text = "";
                 label4.Text = "";
                 label5.Text = "";
                 label6.Text = "";
                 label7.Text = "";
                 label8.Text = "";
                 label9.Text = "";
                 break;
             };       
         case HeartBeatType.DATA:
             {
                 label2.Text = "BEAT";
                 label3.Text = "CC";
                 label4.Text = "ASDF";
                 label5.Text = "PEAK";
                 label6.Text = "ALIGN";
                 label7.Text = "MAX";
                 label8.Text = "AVERAGE";
                 label9.Text = "SAMPLES";
                 break;
             };
         case HeartBeatType.INVALID:
         case HeartBeatType.SILENCE:
             {
                 label2.Text = "BEAT";
                 label3.Text = "";
                 label4.Text = "";
                 label5.Text = "";
                 label6.Text = "";
                 label7.Text = "MAX";
                 label8.Text = "AVERAGE";
                 label9.Text = "SAMPLES";
                 break;
             };
         case HeartBeatType.BUFFERING:
             {
                 label2.Text = "BEAT";
                 label3.Text = "PAC";
                 label4.Text = "DIS";
                 label5.Text = "REM";
                 label6.Text = "";
                 label7.Text = "TIMESTAMP 0";
                 label8.Text = "TIMESTAMP 1";
                 label9.Text = "SAMPLES";
                 break;
             }
     }
 }
Esempio n. 6
0
        private void UpdateUI(HeartBeatType t, TimeWindow w , TDESample[] tde, AudioSample[] a)
        {
            try
            {
                SetLabels(t);
                text1.Text = client.HeartBeatText(t);
                text2.Text = beat.ToString();

                text03.Text = tde[0].Value().ToString();
                text04.Text = tde[1].Value().ToString();
                text05.Text = tde[2].Value().ToString();
                text06.Text = a[1].Align().ToString();
                text07.Text = a[1].MaxAmplitude().ToString();
                text08.Text = a[1].Average().ToString();

                text13.Text = tde[3].Value().ToString();
                text14.Text = tde[4].Value().ToString();
                text15.Text = tde[5].Value().ToString();
                text16.Text = a[2].Align().ToString();
                text17.Text = a[2].MaxAmplitude().ToString();
                text18.Text = a[2].Average().ToString();

                text23.Text = tde[6].Value().ToString();
                text24.Text = tde[7].Value().ToString();
                text25.Text = tde[8].Value().ToString();
                text06.Text = a[3].Align().ToString();
                text07.Text = a[3].MaxAmplitude().ToString();
                text08.Text = a[3].Average().ToString();

                switch (t)
                {
                    case HeartBeatType.DATA:
                    case HeartBeatType.INVALID:
                    case HeartBeatType.SILENCE:
                        buffering = 0;
                        rebootPending = false;
                        break;
                    case HeartBeatType.BUFFERING:
                        buffering++;
                        break;
                    case HeartBeatType.DEVICE_ERROR:
                        rebootPending = true;
                        ResetEngine(10, "ERROR");
                        break;
                    case HeartBeatType.NODEVICE:
                        rebootPending = true;
                        break;
                }

                if (buffering == 30) { rebootPending = true; }
                else if (buffering >= 10 && buffering % 10 == 0) { ResetEngine(10, "RESET"); }
                
                if (t != HeartBeatType.BUFFERING) canvas.Children.Clear();
                if (t == HeartBeatType.DATA)
                {
                    SoundDirection(w.Samples(), 0.3, -1 * tde[0].Value(), 600, 200, 0, 200, new SolidColorBrush(Colors.Red), 4);
                    SoundDirection(w.Samples(), 0.3, -1 * tde[1].Value(), 600, 200, 0, 200, new SolidColorBrush(Colors.Green), 2);
                    SoundDirection(w.Samples(), 0.3, -1 * tde[2].Value(), 600, 200, 0, 200, new SolidColorBrush(Colors.Blue), 1);
                    samples++;       
                }
                text9.Text = samples.ToString();
            }
            catch (Exception ex)
            {
                Error("UpdateUI: " + ex.ToString() + " " + ex.Message + " " + ex.HResult);
            }
        }
Esempio n. 7
0
 public string HeartBeatText(HeartBeatType t)
 {
     switch (t)
     {
         case HeartBeatType.DATA: return "DATA";
         case HeartBeatType.INVALID: return "INVALID";
         case HeartBeatType.SILENCE: return "SILENCE";
         case HeartBeatType.BUFFERING: return "BUFFERING";
         case HeartBeatType.DEVICE_ERROR: return "ERROR";
         case HeartBeatType.NODEVICE: return "NO DEVICES";
         case HeartBeatType.STATUS: return "STATUS";
         default: return "";
     }
 }
Esempio n. 8
0
        public void AddMessage(HeartBeatType t, long cc, long asdf, long peak, ulong max0, ulong max1, ulong ave0, ulong ave1, ulong ave, ulong beat, ulong noAudio, ulong audio)
        {
            DataPoint p = new DataPoint();
            p.time = DateTime.UtcNow;
            p.t = t;
            p.cc = cc;
            p.asdf = asdf;
            p.peak = peak;
            p.max0 = max0;
            p.max1 = max1;
            p.ave0 = ave0;
            p.ave1 = ave1;
            p.ave = ave;
            p.beat = beat;
            p.noAudio = noAudio;
            p.audio = audio;

            lock (thisLock)
            {
                if (t == HeartBeatType.DATA)
                {
                    if (queue.Count == MAX_MESSAGES) queue.Dequeue();
                    queue.Enqueue(p);
                }
                else if (queue.Count < MAX_MESSAGES) queue.Enqueue(p);
            }
        }