Exemple #1
0
 private void tmrData_Elapsed(object sender, ElapsedEventArgs e)
 {
     if (inDataTicks || inDtuTicks)
     {
         return;
     }
     inDataTicks = true;
     try
     {
         //读取数据
         ModemDataStruct dat = new ModemDataStruct();
         while (this.GetNextData(out dat))
         {
             if (!this.GetStarted())
             {
                 return;
             }
             //byte[] bts = new byte[] { 84, 82, 85, 13, 10 };
             String str = System.Text.Encoding.Default.GetString(dat.m_data_buf);
             //if (str.Contains("1G21") || str.Contains("1G22"))
             //{
             //    InvokeMessage("TRU,modemId: " + dat.m_modemId, "发送");
             //    InvokeMessage("bts: " + bts, "发送");
             //    InvokeMessage("bts.length: " + (ushort)bts.Length, "发送");
             //    // 发送回执
             //    DTUdll.Instance.SendHex(dat.m_modemId, bts, (ushort)bts.Length);
             //}
             // //发送回执
             //DTUdll.Instance.SendHex(dat.m_modemId, bts, (ushort)bts.Length);
             m_mutexListDatas.WaitOne();
             String a = System.Text.Encoding.Default.GetString(dat.m_data_buf);
             // Debug.WriteLine("协议接收数据: " + System.Text.Encoding.Default.GetString(dat.m_data_buf));
             m_listDatas.Add(dat);
             m_semaphoreData.Release(1);
             m_mutexListDatas.ReleaseMutex();
         }
     }
     catch (Exception ee)
     {
         Debug.WriteLine("读取数据", ee.Message);
     }
     finally
     {
         inDataTicks = false;
     }
 }
 public bool GetNextData(out ModemDataStruct dat)
 {
     try
     {
         //WriteToFileClass writeClass = new WriteToFileClass();
         //Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
         //t.Start("Test" +  "\r\n");
         dat = new ModemDataStruct();
         return(DSGetNextData(ref dat, 0));
     }
     catch (Exception e)
     {
         WriteToFileClass writeClass = new WriteToFileClass("Buginfo");
         Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
         t.Start("f**k" + "\r\n");
         dat = new ModemDataStruct();
         return(false);
     }
 }
Exemple #3
0
        // 处理内存缓存中的数据
        private void DealData()
        {
            //InvokeMessage("协议。。。 ", "进入函数6");
            while (true)
            {
                //阻塞0.05s,防止过快获取数据
                Thread.Sleep(50);
                m_semaphoreData.WaitOne(); //阻塞当前线程,知道被其它线程唤醒
                // 获取对data内存缓存的访问权
                m_mutexListDatas.WaitOne();
                List <ModemDataStruct> dataListTmp = m_listDatas;
                m_listDatas = new List <ModemDataStruct>(); //开辟一快新的缓存区
                m_mutexListDatas.ReleaseMutex();
                // 开始处理数据
                for (int i = 0; i < dataListTmp.Count; ++i)
                {
                    try
                    {
                        ModemDataStruct dat    = dataListTmp[i];
                        string          data   = System.Text.Encoding.Default.GetString(dat.m_data_buf).Trim();
                        string          gprsId = ((uint)dat.m_modemId).ToString("X").PadLeft(8, '0');
                        //1119
                        //WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                        //Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                        //string logStr = data.Replace("00000000000", "");
                        //t.Start("GPRS: " + "长度:" + logStr.Length + " " + logStr + "\r\n");

                        if (data.Contains("TRU"))
                        {
                            Debug.WriteLine("接收数据TRU完成,停止计时器");
                            //m_timer.Stop();
                            InvokeMessage("TRU " + ((uint)dat.m_modemId).ToString("X").PadLeft(8, '0'), "接收");
                            if (this.ErrorReceived != null)
                            {
                                this.ErrorReceived.Invoke(null, new ReceiveErrorEventArgs()
                                {
                                    //   Msg = "TRU " + dat.m_modemId
                                    Msg = "TRU " + gprsId
                                });
                            }
                        }
                        if (data.Contains("ATE0"))
                        {
                            Debug.WriteLine("接收数据ATE0完成,停止计时器");
                            //m_timer.Stop();
                            // InvokeMessage("ATE0", "接收");
                            if (this.ErrorReceived != null)
                            {
                                this.ErrorReceived.Invoke(null, new ReceiveErrorEventArgs()
                                {
                                    Msg = "ATE0"
                                });
                            }
                        }
                        if (data.Contains("$"))
                        {
                            if (data.Contains("1G21") || data.Contains("1G22") || data.Contains("1G23"))
                            {
                                // 发送回执
                                SendTru(dat.m_modemId);
                            }

                            if (data.Contains("$TS"))
                            {
                                Debug.WriteLine("接收数据正确完成,停止计时器");
                                int indexStart = data.IndexOf("$");

                                data = data.Substring(indexStart + 3);
                                int length = data.IndexOf(CSpecialChars.ENTER_CHAR);
                                data = data.Substring(0, length);
                                data = "$" + data;
                                data = data.Trim();
                                data = data + "TS";
                                if (this.ParseData(data, gprsId))
                                {
                                    if (this.ModemDataReceived != null)
                                    {
                                        this.ModemDataReceived.Invoke(this, new ModemDataEventArgs()
                                        {
                                            Msg   = data,
                                            Value = dat
                                        });
                                    }
                                }
                            }
                            else
                            {
                                Debug.WriteLine("接收数据正确完成,停止计时器");
                                //m_timer.Stop();
                                int indexStart = data.IndexOf("$");
                                data = data.Substring(indexStart);
                                int length = data.IndexOf(CSpecialChars.ENTER_CHAR);
                                data = data.Substring(0, length);
                                data = data.Trim();
                                //this.ParseData(data,gprsId);
                                if (this.ParseData(data, gprsId))
                                {
                                    if (this.ModemDataReceived != null)
                                    {
                                        this.ModemDataReceived.Invoke(this, new ModemDataEventArgs()
                                        {
                                            Msg   = data,
                                            Value = dat
                                        });
                                    }
                                }
                            }
                        }
                        if (data.Contains("#"))
                        {
                            Debug.WriteLine("接收数据正确完成,停止计时器");
                            //m_timer.Stop();
                            int indexStart = data.IndexOf("#");
                            data = data.Substring(indexStart);
                            int length = data.IndexOf(CSpecialChars.ENTER_CHAR);
                            data = data.Substring(0, length);
                            data = data.Trim();
                            //this.ParseData(data,gprsId);
                            if (this.ParseData(data, gprsId))
                            {
                                if (this.ModemDataReceived != null)
                                {
                                    this.ModemDataReceived.Invoke(this, new ModemDataEventArgs()
                                    {
                                        Msg   = data,
                                        Value = dat
                                    });
                                }
                            }
                        }
                        m_timer.Stop();
                    }
                    catch (Exception exp) { Debug.WriteLine(exp.Message); }
                } //end of for
            }     //end of while
        }
Exemple #4
0
 // 获取下一条指令或者数据
 private bool GetNextData(out ModemDataStruct dat)
 {
     return(DTUdll.Instance.GetNextData(out dat));
 }
 private static extern bool DSGetNextData(ref ModemDataStruct pDataStruct, ushort waitseconds);