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); }
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(); }
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); }
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); } }
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; } } }
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); } }
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 ""; } }
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); } }