예제 #1
0
        private void QueryVerBtn_Click(object sender, EventArgs e)
        {
            MsgDefine.Head QueryVer = new MsgDefine.Head();
            QueryVer.head        = 0xffff;
            QueryVer.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_QUERY_VER;
            QueryVer.data_length = (uint)(Marshal.SizeOf(QueryVer) - 8);

            int lengthRecvRf = Marshal.SizeOf(QueryVer);

            byte[] dataQueryVer = new byte[lengthRecvRf];
            IntPtr intptr       = Marshal.AllocHGlobal(lengthRecvRf);

            Marshal.StructureToPtr(QueryVer, intptr, true);
            Marshal.Copy(intptr, dataQueryVer, 0, lengthRecvRf);
            Marshal.FreeHGlobal(intptr);
            CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();

            dataEvtArg.deivceName = COM.ZCTT.AGI.Common.Global.GCurrentDevice;
            dataEvtArg.data       = dataQueryVer;
            for (int i = 0; i < dataQueryVer.Length; i++)
            {
                System.Diagnostics.Debug.WriteLine(dataQueryVer[i]);
            }
            COM.ZCTT.AGI.Common.Global.tempClass.SendDataToDevice(sender, dataEvtArg);
        }
예제 #2
0
        private void SendUERleaseREQ()
        {
            AGIInterface.CustomDataEvtArg ce1          = new CustomDataEvtArg();
            PC_AG_UE_SILENCE_RPT_RSP      UeSilenceREQ = new PC_AG_UE_SILENCE_RPT_RSP();
            int reqlength = Marshal.SizeOf(UeSilenceREQ);

            byte[] header = new byte[] { 0, 0, 0, 0, 4, 2, 0x0b, 0x40, 0, 0, 0x0f, 0 };//加消息头
            byte[] tempBytes;
            int    dstOffset = 0;

            UeSilenceREQ.mu8ReTrace = 1;
            if (MessageBox.Show("Do you want to release UE?", "NOTE",
                                MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                UeSilenceREQ.mu8ReTrace = 0;
            }
            else
            {
                UeSilenceREQ.mu8ReTrace = 1;
            }
            UeSilenceREQ.mau8Pading = new byte[] { 0, 0, 0 };

            ce1.data = new byte[reqlength];
            System.Buffer.BlockCopy(header, 0, ce1.data, dstOffset, 12);
            dstOffset = dstOffset + 12;
            System.Buffer.BlockCopy(rData, 20, ce1.data, dstOffset, 56);
            dstOffset = dstOffset + 56;
            tempBytes = BitConverter.GetBytes(UeSilenceREQ.mu8ReTrace);
            System.Buffer.BlockCopy(tempBytes, 0, ce1.data, dstOffset, 1);
            dstOffset++;
            System.Buffer.BlockCopy(UeSilenceREQ.mau8Pading, 0, ce1.data, dstOffset, 3);
            ce1.deivceName = Global.GCurrentDevice;
            Global.tempClass.SendDataToDevice(null, ce1);
        }
예제 #3
0
 /// <summary>
 /// 发送设备的状态信息给主窗体
 /// </summary>
 public void SendStatusToMainForm()
 {
     if (Global.GCurrentDevice == deviceName)
     {
         AGIInterface.CustomDataEvtArg ce = new CustomDataEvtArg();
         ce.deviceConnStaus      = (this.connectionState == 0) ? "Connected" : "Disconnected";
         Global.connectionStatus = (this.connectionState == 0) ? true : false;
         ce.deivceName           = this.deviceName;
         if (ce.deviceConnStaus == "Disconnected")
         {
             ce.deviceInstumentState = " ";
             ce.deviceWorkModel      = " ";
         }
         else
         {
             ce.deviceInstumentState = (this.deviceInstrumentState == 0) ? "IDLE" : "Working";
             //2014.4.15 stop按钮和状态异常
             if (Global.testMode != Global.TestMode.PlayBack && ce.deviceInstumentState == "IDLE")
             {
                 Global.testStatus = Global.TestStatus.Stop;
             }
             if (Global.testMode != Global.TestMode.PlayBack && ce.deviceInstumentState == "Working")
             {
                 Global.testStatus = Global.TestStatus.Start;
             }
             ce.deviceWorkModel = Global.testMode.ToString(); //(this.deviceWorkModel == 1) ? "Cell Scanning" : "Protocol Tracking";
         }
         ce.remainingPower = this.remainingPower;
         Global.tempClass.SendStatusToMainForm(this, ce);
     }
 }
예제 #4
0
        private void SendRxAnt(object sender, string dev)
        {
            CustomDataEvtArg EvtArg = CellSearchAndMonitorUnions.RxAntMsg(1);

            EvtArg.deivceName = dev;
            Global.tempClass.SendDataToDevice(sender, EvtArg);
            DeviceManger.FindDevice(EvtArg.deivceName).SendRexAnt = true;
        }
예제 #5
0
        //private bool sendRexAnt = false;
        private void CellSearchStart()
        {
            string freq   = CSAMForm.CellSearchListView.Items[CellSearchItemIndex].SubItems[1].Text.Trim();
            string earfcn = CSAMForm.CellSearchListView.Items[CellSearchItemIndex].SubItems[2].Text.Trim();
            string pci    = CSAMForm.CellSearchListView.Items[CellSearchItemIndex].SubItems[3].Text.Trim();

            CustomDataEvtArg CDEArgMes = CellSearchAndMonitorUnions.GenerateMessage(earfcn, pci, 2);
            //Global.GCurrentDevice = DeviceManger.deviceList[0].DeviceName;
            string lteMode = Global.EARFCNToLteMode(Convert.ToInt32(earfcn));

            DeviceManger.flashDeviceConnect();
            foreach (Device dev in DeviceManger.deviceConnect)
            {
                if (dev.LteMode == lteMode)
                {
                    Global.GCurrentDevice = dev.DeviceName;
                    CDEArgMes.deivceName  = dev.DeviceName;
                    if (dev.SendRexAnt == false)
                    {
                        SendRxAnt(CellSearchSender, dev.DeviceName);
                    }
                    break;
                }
            }
            if (String.IsNullOrEmpty(CDEArgMes.deivceName))
            {
                MessageBox.Show("没有" + lteMode + "板卡!");
                foreach (Device dev in DeviceManger.deviceList)
                {
                    if (dev.SendRexAnt)
                    {
                        dev.SendRexAnt = false;
                    }
                }
                CSAMForm.CellMonitorButton.Enabled = true;
                CSAMForm.CellStopBtn.Enabled       = false;
                isStop = true;
                Global.tempClass.CSAMStop();
                return;
            }
            Global.CurrentSender = CSAMForm.Name;
            //Global.tempClass.Start(CellSearchSender, CDEArgMes);
            if (CellSearchSender != null)
            {
                Global.tempClass.SendDataToDevice(CellSearchSender, CDEArgMes);
                CSAMRunning = true;
                //IsWitingForRelAck = false;
                CSAMForm.CellMonitorButton.Enabled = false;
                CSAMForm.CellStopBtn.Enabled       = true;
                Global.tempClass.CSAMStart();
                //CSAMForm.StopMonitorButton.Enabled = true;
                mutexRrace = 0;
                //CustomDataEvtArg getAGTStatus = new CustomDataEvtArg();
                //getAGTStatus.deivceName = Global.GCurrentDevice;
                //getAGTStatus.data = new byte[] { 0, 0, 0, 0, 0, 0, 0x01, 0x40, 0, 0, 0, 0 };
                //Global.tempClass.SendDataToDevice(CellSearchSender, getAGTStatus);
            }
        }
예제 #6
0
        private void DlSniffReceived(object send, CustomDataEvtArg ce)
        {
            if (this.InvokeRequired)
            {
                try
                {
                    this.BeginInvoke(new Class1.SendToDlSniffFormHandler(DlSniffReceived), send, ce);
                }
                catch { }
            }
            else
            {
                MsgDefine.SendDlSniff DlSniff = new MsgDefine.SendDlSniff();
                int    lengthDlSinff          = Marshal.SizeOf(DlSniff);
                IntPtr intptr = Marshal.AllocHGlobal(lengthDlSinff);
                Marshal.Copy(ce.data, 0, intptr, lengthDlSinff);
                DlSniff = (MsgDefine.SendDlSniff)Marshal.PtrToStructure(intptr, typeof(MsgDefine.SendDlSniff));
                Marshal.FreeHGlobal(intptr);

                byte numberCell = DlSniff.numberCell;
                for (int i = 0; i < numberCell; i++)
                {
                    byte   mcc   = DlSniff.cellInfomation[i].Mcc;
                    byte   mnc   = DlSniff.cellInfomation[i].Mnc;
                    ushort tac   = DlSniff.cellInfomation[i].Tac;
                    ushort pciNo = DlSniff.cellInfomation[i].PciNo;
                    String ecgi  = "";
                    for (int j = 0; j < 7; j++)
                    {
                        ecgi += DlSniff.cellInfomation[i].CellId[j].ToString("X");
                    }
                    ushort earfcn = DlSniff.cellInfomation[i].Earfcn;
                    byte   cpType = DlSniff.cellInfomation[i].CP_Type;
                    ushort crsRp  = DlSniff.cellInfomation[i].Crs_RP;
                    ushort crsRq  = DlSniff.cellInfomation[i].Crs_RQ;

                    ListViewItem item = new ListViewItem(new String[9]);
                    item.SubItems[0].Text = mcc.ToString();
                    item.SubItems[1].Text = mnc.ToString();
                    item.SubItems[2].Text = pciNo.ToString();
                    item.SubItems[3].Text = tac.ToString();
                    item.SubItems[4].Text = ecgi;
                    item.SubItems[5].Text = earfcn.ToString();
                    if (cpType == 0)
                    {
                        item.SubItems[6].Text = "常规";
                    }
                    else
                    {
                        item.SubItems[6].Text = "扩展";
                    }
                    item.SubItems[7].Text = "-" + (crsRp * 0.125).ToString() + "dBm";
                    item.SubItems[8].Text = (crsRq * 0.0625).ToString() + "dB";
                    listView1.Items.Add(item);
                }
            }
        }
예제 #7
0
 /// <summary>
 /// 停止“协议跟踪”事件绑定的方法
 /// </summary>
 /// <param name="sender">sender</param>
 /// <param name="ex">自定义的事件参数</param>
 public void StopEvent(object sender, CustomDataEvtArg ex)
 {
     if (ex.moduleName == "ProtocolTrace")
     {
         //AGIInterface.CustomDataEvtArg cusArg = new CustomDataEvtArg();
         //cusArg.data = new byte[] { 0, 0, 0, 0, 4, 2, 0x0c, 0x40, 1, 0, 0, 0 };//加消息头。。
         //cusArg.deivceName = Global.GCurrentDevice;
         //Global.tempClass.SendDataToDevice(sender, cusArg);
     }
 }
예제 #8
0
        /// <summary>
        /// 改变状态栏状态事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StatusChanged(object sender, CustomDataEvtArg e)
        {
            if (this.InvokeRequired)
            {
                try
                {
                    this.BeginInvoke(new Class1.DeviceSendStatusToMainForm(StatusChanged), sender, e);
                }
                catch
                {
                }
            }
            else
            {
                int index     = 0;
                int connCount = 0;
                int idleCount = 0;
                foreach (Device temdev in DeviceManger.deviceList)
                {
                    if (temdev.ConnectionState == 0)
                    {
                        //statusList[index].Text = " ";
                        statusList[index].Image = imageList1.Images[0];
                        connCount++;
                        if (temdev.DeviceInstrumentState == 0)
                        {
                            idleCount++;
                        }
                    }
                    else
                    {
                        //statusList[index].Text = " ";
                        statusList[index].Image = imageList1.Images[1];
                    }

                    index++;
                }
                if (connCount == 0)
                {
                    Device.Text           = "设备状态:";
                    DeviceColor.BackColor = System.Drawing.SystemColors.Control;
                }
                else if (idleCount == connCount)
                {
                    Device.Text           = "设备状态:IDLE";
                    DeviceColor.BackColor = System.Drawing.Color.Green;
                }
                else
                {
                    Device.Text           = "设备状态:Working";
                    DeviceColor.BackColor = System.Drawing.Color.Red;
                }
            }
        }
예제 #9
0
 private void ReleaseProtocolTracing()
 {
     if (mutexRelease == 1)
     {
         Global.CurrentSender = CSAMForm.Name;
         AGIInterface.CustomDataEvtArg cusArg = new CustomDataEvtArg();
         cusArg.data       = new byte[] { 0, 0, 0, 0, 4, 2, 0x0c, 0x40, 1, 0, 0, 0 };//加消息头。。
         cusArg.deivceName = Global.GCurrentDevice;
         //IsWitingForRelAck = true;
         Global.tempClass.SendDataToDevice(CellSearchSender, cusArg);
         mutexRelease = 0;
     }
 }
예제 #10
0
 /// <summary>
 /// 开始“协议跟踪”事件绑定的方法
 /// </summary>
 /// <param name="sender">sender</param>
 /// <param name="ex">自定义的事件参数</param>
 public void StartEvent(object sender, CustomDataEvtArg ex)
 {
     if (ex.moduleName == "ProtocolTrace"
         &&
         ex.isRealTime == true)
     {
         //CustomDataEvtArg cusArg = new CustomDataEvtArg();
         //cusArg.data = Global.ProTracReq;
         //cusArg.deivceName = Global.GCurrentDevice;
         //Global.tempClass.SendDataToDevice(sender, cusArg);
         //Global.FirstTime = true;
     }
 }
        public static CustomDataEvtArg RxAntMsg(byte RxAntNum)
        {
            PC_AG_SET_AGT_INFO_REQ SetAgtInfoReq = new PC_AG_SET_AGT_INFO_REQ();

            SetAgtInfoReq.msgHeader.reserved      = 0;
            SetAgtInfoReq.msgHeader.SrcID         = 4;
            SetAgtInfoReq.msgHeader.destID        = 2;
            SetAgtInfoReq.msgHeader.msgType       = 0x4000;/* V1.0 */
            SetAgtInfoReq.msgHeader.transactionID = 0;

            SetAgtInfoReq.u8WorkMode     = 2;
            SetAgtInfoReq.u8IterfaceType = 1;
            SetAgtInfoReq.u8OutDataType  = 2;
            SetAgtInfoReq.u8SaveMode     = 2;
            SetAgtInfoReq.RptInterval    = 0;

            SetAgtInfoReq.u8RxAntNum = RxAntNum;
            if (RxAntNum == 1)
            {
                SetAgtInfoReq.u8RxAntStatus = 1;
            }
            else if (RxAntNum == 2)
            {
                SetAgtInfoReq.u8RxAntStatus = 3;
            }
            SetAgtInfoReq.mu8GpsValidFlag = 0;
            int DataLength = Marshal.SizeOf(SetAgtInfoReq);

            //消息头中的消息长度
            SetAgtInfoReq.msgHeader.MsgLen = (UInt16)((DataLength - 12) / 4);

            CustomDataEvtArg testOKArgs = new CustomDataEvtArg();

            testOKArgs.data = new byte[DataLength];

            int reqlength = Marshal.SizeOf(SetAgtInfoReq);

            byte[] reqdata = new byte[reqlength];
            IntPtr intptr  = Marshal.AllocHGlobal(reqlength);

            Marshal.StructureToPtr(SetAgtInfoReq, intptr, true);
            Marshal.Copy(intptr, reqdata, 0, reqlength);
            Marshal.FreeHGlobal(intptr);
            System.Buffer.BlockCopy(reqdata, 0, testOKArgs.data, 0, reqlength);

            testOKArgs.deivceName = Global.GCurrentDevice;
            Global.ProTracReq     = testOKArgs.data;
            return(testOKArgs);
        }
예제 #12
0
        private void PagingPwrReceived(object sender, CustomDataEvtArg ce)
        {
            if (this.InvokeRequired)
            {
                try
                {
                    this.BeginInvoke(new Class1.SendUeInfoToMainFormHandler(PagingPwrReceived), sender, ce);
                }
                catch { }
            }
            else
            {
                MsgDefine.SendPagingPwr PagingPwr = new MsgDefine.SendPagingPwr();
                int lengthPagingPwr = Marshal.SizeOf(PagingPwr);
                if (lengthPagingPwr > ce.data.Length)
                {
                    return;
                }
                IntPtr intptr = Marshal.AllocHGlobal(lengthPagingPwr);
                Marshal.Copy(ce.data, 0, intptr, lengthPagingPwr);
                PagingPwr = (MsgDefine.SendPagingPwr)Marshal.PtrToStructure(intptr, typeof(MsgDefine.SendPagingPwr));
                Marshal.FreeHGlobal(intptr);

                String imsi = "";
                for (int i = 0; i < 8; i++)
                {
                    imsi += PagingPwr.pagingImsi[i].ToString("X");
                }
                imsi = imsi.Substring(1, 15);

                byte   pwrNo  = PagingPwr.uePwrNo;
                double avePwr = 0;
                for (byte i = 0; i < pwrNo; i++)
                {
                    avePwr += PagingPwr.uePwr[i];
                }
                avePwr = avePwr / pwrNo - 135;
                ListViewItem item = new ListViewItem(new String[3]);
                item.SubItems[0].Text = imsi;
                item.SubItems[1].Text = pwrNo.ToString();
                item.SubItems[2].Text = avePwr.ToString() + "dbm";
                this.listView1.Items.Add(item);
            }
        }
예제 #13
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!LTEUnion.IsDigitalString(textBox2.Text))
            {
                MessageBox.Show("请输入正确的定时器间隔!");
            }
            else if (Convert.ToUInt32(textBox2.Text) < 0 || Convert.ToUInt32(textBox2.Text) > 500)
            {
                MessageBox.Show("定时器间隔应为0~500");
            }
            else if (Convert.ToUInt32(textBox2.Text) % 10 != 0)
            {
                MessageBox.Show("定时器间隔应为10的整数倍!");
            }
            else if (Global.GCurrentDevice == "")
            {
                MessageBox.Show("设备未连接!");
            }
            else
            {
                MsgDefine.RecvNewTac NewTac = new MsgDefine.RecvNewTac();
                NewTac.head.head        = 0xffff;
                NewTac.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_NEW_TAC;
                NewTac.head.data_length = (uint)(Marshal.SizeOf(NewTac) - 8);

                NewTac.newSysNo = Convert.ToUInt16(textBox1.Text);
                NewTac.newTimer = Convert.ToUInt16(textBox2.Text);

                int    lengthNewTac   = Marshal.SizeOf(NewTac);
                byte[] dataRecvNewTac = new byte[lengthNewTac];
                IntPtr intptr         = Marshal.AllocHGlobal(lengthNewTac);
                Marshal.StructureToPtr(NewTac, intptr, true);
                Marshal.Copy(intptr, dataRecvNewTac, 0, lengthNewTac);
                Marshal.FreeHGlobal(intptr);
                CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();
                dataEvtArg.deivceName = Global.GCurrentDevice;
                dataEvtArg.data       = dataRecvNewTac;
                for (int i = 0; i < dataRecvNewTac.Length; i++)
                {
                    System.Diagnostics.Debug.WriteLine(dataRecvNewTac[i]);
                }
                Global.tempClass.SendDataToDevice(sender, dataEvtArg);
            }
        }
예제 #14
0
        private void SysOptionBtn_Click(object sender, EventArgs e)
        {
            MsgDefine.RecvSysOption RecvSysOpt = new MsgDefine.RecvSysOption();
            RecvSysOpt.head.head        = 0xffff;
            RecvSysOpt.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_SYS_OPTION;
            RecvSysOpt.head.data_length = (uint)(Marshal.SizeOf(RecvSysOpt) - 8);

            RecvSysOpt.opSysNo = Convert.ToUInt16(textBox6.Text);
            if (checkBox3.Checked)
            {
                RecvSysOpt.opLuImei = 1;
            }
            else
            {
                RecvSysOpt.opLuImei = 0;
            }
            if (checkBox4.Checked)
            {
                RecvSysOpt.opLuSTMSI = 1;
            }
            else
            {
                RecvSysOpt.opLuSTMSI = 0;
            }

            int lengthRecvSysOpt = Marshal.SizeOf(RecvSysOpt);

            byte[] dataRecvSysOpt = new byte[lengthRecvSysOpt];
            IntPtr intptr         = Marshal.AllocHGlobal(lengthRecvSysOpt);

            Marshal.StructureToPtr(RecvSysOpt, intptr, true);
            Marshal.Copy(intptr, dataRecvSysOpt, 0, lengthRecvSysOpt);
            Marshal.FreeHGlobal(intptr);
            CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();

            dataEvtArg.deivceName = COM.ZCTT.AGI.Common.Global.GCurrentDevice;
            dataEvtArg.data       = dataRecvSysOpt;
            for (int i = 0; i < dataRecvSysOpt.Length; i++)
            {
                System.Diagnostics.Debug.WriteLine(dataRecvSysOpt[i]);
            }
            COM.ZCTT.AGI.Common.Global.tempClass.SendDataToDevice(sender, dataEvtArg);
        }
예제 #15
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!LTEUnion.IsDigitalString(textBox2.Text))
            {
                MessageBox.Show("请输入正确的EARFCN!");
            }
            else
            {
                MsgDefine.RecvDlRxPara DlSniff = new MsgDefine.RecvDlRxPara();
                DlSniff.head.head        = 0xffff;
                DlSniff.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_DLRX_PARA;
                DlSniff.head.data_length = (uint)(Marshal.SizeOf(DlSniff) - 8);

                DlSniff.dlSysNo = Convert.ToUInt16(textBox1.Text);
                DlSniff.earfcn  = Convert.ToUInt16(textBox2.Text);
                DlSniff.dlFn    = Convert.ToUInt32(textBox3.Text);
                DlSniff.dlRxMod = (byte)(comboBox1.SelectedIndex + 1);
                if (checkBox1.Checked)
                {
                    DlSniff.dlEnable = 1;
                }
                else
                {
                    DlSniff.dlEnable = 0;
                }

                int    lengthDlSniff = Marshal.SizeOf(DlSniff);
                byte[] dataDlSniff   = new byte[lengthDlSniff];
                IntPtr intptr        = Marshal.AllocHGlobal(lengthDlSniff);
                Marshal.StructureToPtr(DlSniff, intptr, true);
                Marshal.Copy(intptr, dataDlSniff, 0, lengthDlSniff);
                Marshal.FreeHGlobal(intptr);
                CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();
                dataEvtArg.deivceName = Global.GCurrentDevice;
                dataEvtArg.data       = dataDlSniff;
                for (int i = 0; i < dataDlSniff.Length; i++)
                {
                    System.Diagnostics.Debug.WriteLine(dataDlSniff[i]);
                }
                Global.tempClass.SendDataToDevice(sender, dataEvtArg);
            }
        }
예제 #16
0
        private void IBOperMsg(object sender, EventArgs e)
        {
            MsgDefine.RecvIbOper RecvIbOp = new MsgDefine.RecvIbOper();
            RecvIbOp.head.head        = 0xffff;
            RecvIbOp.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_IB_OPER;
            RecvIbOp.head.data_length = (uint)(Marshal.SizeOf(RecvIbOp) - 8);

            RecvIbOp.ibSysNo   = Convert.ToByte(textBox1.Text);
            RecvIbOp.ibCmdType = (byte)(comboBox1.SelectedIndex + 1);

            String imsi = "0" + textBox2.Text;

            RecvIbOp.ibImsi = new byte[8];
            for (int i = 0; i < 8; i++)
            {
                RecvIbOp.ibImsi[i] = Convert.ToByte(imsi.Substring(i * 2, 2), 16);
            }

            int lengthRecvIbOp = Marshal.SizeOf(RecvIbOp);

            byte[] dataRecvRecvRf = new byte[lengthRecvIbOp];
            IntPtr intptr         = Marshal.AllocHGlobal(lengthRecvIbOp);

            Marshal.StructureToPtr(RecvIbOp, intptr, true);
            Marshal.Copy(intptr, dataRecvRecvRf, 0, lengthRecvIbOp);
            Marshal.FreeHGlobal(intptr);
            CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();

            dataEvtArg.deivceName = Global.GCurrentDevice;
            dataEvtArg.data       = dataRecvRecvRf;
            for (int i = 0; i < dataRecvRecvRf.Length; i++)
            {
                System.Diagnostics.Debug.WriteLine(dataRecvRecvRf[i]);
            }
            Global.tempClass.SendDataToDevice(sender, dataEvtArg);
        }
예제 #17
0
        private void button2_Click(object sender, EventArgs e)
        {
            MsgDefine.RecvNcPara NcPara = new MsgDefine.RecvNcPara();
            NcPara.head.head        = 0xffff;
            NcPara.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_NC_PARA;
            NcPara.head.data_length = (uint)(Marshal.SizeOf(NcPara) - 8);

            NcPara.ncSysNo           = Convert.ToUInt16(textBox0.Text);
            NcPara.ncCmdType         = (byte)(comboBox1.SelectedIndex + 1);
            NcPara.intraFreqCell.PCI = new byte[6];
            NcPara.interFreqCellList.interFreqList = new MsgDefine.interFreqList[6];

            byte NumInterFreq = 0;

            foreach (ListViewItem item in listView1.Items)
            {
                if (item.SubItems[0].Text == "待添加")
                {
                    switch (item.SubItems[1].Text)
                    {
                    case "同频邻区表":
                    {
                        for (int i = 0; i < 6; i++)
                        {
                            if (item.SubItems[i + 2].Text == "")
                            {
                                NcPara.intraFreqCell.NumIntraFreqCell = (byte)i;
                                break;
                            }
                            else
                            {
                                NcPara.intraFreqCell.PCI[i] = Convert.ToByte(item.SubItems[i + 2].Text);
                            }
                        }
                        break;
                    }

                    case "异频邻区表1":
                    case "异频邻区表2":
                    case "异频邻区表3":
                    case "异频邻区表4":
                    case "异频邻区表5":
                    case "异频邻区表6":
                    {
                        NcPara.interFreqCellList.interFreqList[NumInterFreq].PCI = new byte[6];
                        for (int i = 0; i < 6; i++)
                        {
                            if (item.SubItems[i + 2].Text == "")
                            {
                                NcPara.interFreqCellList.interFreqList[NumInterFreq].NumInterFreqCell = (byte)i;
                                break;
                            }
                            else
                            {
                                NcPara.interFreqCellList.interFreqList[NumInterFreq].PCI[i] = Convert.ToByte(item.SubItems[i + 2].Text);
                            }
                        }
                        NumInterFreq++;
                        break;
                    }
                    }
                }
            }
            NcPara.interFreqCellList.NumInterFreq = NumInterFreq;


            int lengthNcPara = Marshal.SizeOf(NcPara);

            byte[] dataNcPara = new byte[lengthNcPara];
            IntPtr intptr     = Marshal.AllocHGlobal(lengthNcPara);

            Marshal.StructureToPtr(NcPara, intptr, true);
            Marshal.Copy(intptr, dataNcPara, 0, lengthNcPara);
            Marshal.FreeHGlobal(intptr);
            CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();

            dataEvtArg.deivceName = Global.GCurrentDevice;
            dataEvtArg.data       = dataNcPara;
            for (int i = 0; i < dataNcPara.Length; i++)
            {
                System.Diagnostics.Debug.WriteLine(dataNcPara[i]);
            }
            Global.tempClass.SendDataToDevice(sender, dataEvtArg);
        }
예제 #18
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!LTEUnion.IsDigitalString(textBox2.Text))
            {
                MessageBox.Show("请输入正确的寻呼间隔!");
            }
            else if (Convert.ToInt32(textBox2.Text) < 1 || Convert.ToInt32(textBox2.Text) > 255)
            {
                MessageBox.Show("寻呼间隔范围为1~255秒!");
            }
            else if (comboBox2.SelectedIndex == 1 && !LTEUnion.IsIMSI(textBox3.Text))
            {
                MessageBox.Show("请输入正确的15位IMSI!");
            }
            else if (comboBox2.SelectedIndex == 0 && !LTEUnion.IsSTMSI(textBox3.Text))
            {
                MessageBox.Show("请输入正确的10位STMSI!");
            }
            else if (Global.GCurrentDevice == "")
            {
                MessageBox.Show("设备未连接!");
            }
            else
            {
                MsgDefine.RecvCtrlCmd RecvCtrl = new MsgDefine.RecvCtrlCmd();
                RecvCtrl.head.head        = 0xffff;
                RecvCtrl.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_CTRL_CMD;
                RecvCtrl.head.data_length = (uint)(Marshal.SizeOf(RecvCtrl) - 8);

                RecvCtrl.ctrlSysNo        = Convert.ToByte(textBox1.Text);
                RecvCtrl.ctrlCmdType      = (byte)(comboBox1.SelectedIndex + 1);
                RecvCtrl.ctrlCmdPara      = Convert.ToByte(textBox2.Text);
                RecvCtrl.ctrlPagingIDType = (byte)(comboBox2.SelectedIndex + 1);
                if (comboBox2.SelectedIndex == 1)
                {
                    String imsi = "0" + textBox3.Text;
                    RecvCtrl.ctrlImsi = new byte[8];
                    for (int i = 0; i < 8; i++)
                    {
                        RecvCtrl.ctrlImsi[i] = Convert.ToByte(imsi.Substring(i * 2, 2), 16);
                    }
                }
                else if (comboBox2.SelectedIndex == 0)
                {
                    String imsi = "000000" + textBox3.Text;
                    RecvCtrl.ctrlImsi = new byte[8];
                    for (int i = 0; i < 8; i++)
                    {
                        RecvCtrl.ctrlImsi[i] = Convert.ToByte(imsi.Substring(i * 2, 2), 16);
                    }
                }

                int    lengthRecvCtrl = Marshal.SizeOf(RecvCtrl);
                byte[] dataRecvCtrl   = new byte[lengthRecvCtrl];
                IntPtr intptr         = Marshal.AllocHGlobal(lengthRecvCtrl);
                Marshal.StructureToPtr(RecvCtrl, intptr, true);
                Marshal.Copy(intptr, dataRecvCtrl, 0, lengthRecvCtrl);
                Marshal.FreeHGlobal(intptr);
                CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();
                dataEvtArg.deivceName = Global.GCurrentDevice;
                dataEvtArg.data       = dataRecvCtrl;
                for (int i = 0; i < dataRecvCtrl.Length; i++)
                {
                    System.Diagnostics.Debug.WriteLine(dataRecvCtrl[i]);
                }
                Global.tempClass.SendDataToDevice(sender, dataEvtArg);
            }
        }
예제 #19
0
        private void RfParaBtn_Click(object sender, EventArgs e)
        {
            MsgDefine.RecvRfPara RecvRf = new MsgDefine.RecvRfPara();
            RecvRf.head.head        = 0xffff;
            RecvRf.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_RF_PARA;
            RecvRf.head.data_length = (uint)(Marshal.SizeOf(RecvRf) - 8);

            RecvRf.rfSysNo = Convert.ToUInt16(textBox1.Text);
            if (checkBox1.Checked)
            {
                RecvRf.rfEnable = 1;
            }
            else
            {
                RecvRf.rfEnable = 0;
            }
            if (checkBox2.Checked)
            {
                RecvRf.fastConfigEarfcn = 0;
            }
            else
            {
                RecvRf.fastConfigEarfcn = 1;
            }
            RecvRf.earfcn_band             = Convert.ToUInt16(BandTextBox.Text);
            RecvRf.DlEarfcn                = Convert.ToUInt16(dlEarfcnBox.Text);
            RecvRf.UlEarfcn                = Convert.ToUInt16(ulEarfcnBox.Text);
            RecvRf.SubframeAssinment       = Convert.ToByte(textBox4.Text);
            RecvRf.specialSubframePatterns = Convert.ToByte(textBox25.Text);
            RecvRf.FrameStrucureType       = (byte)comboBox8.SelectedIndex;

            switch (comboBox9.SelectedIndex)
            {
            case 0: RecvRf.DlBandWidth = 6; break;

            case 1: RecvRf.DlBandWidth = 15; break;

            case 2: RecvRf.DlBandWidth = 25; break;

            case 3: RecvRf.DlBandWidth = 50; break;

            case 4: RecvRf.DlBandWidth = 75; break;

            case 5: RecvRf.DlBandWidth = 100; break;
            }
            switch (comboBox10.SelectedIndex)
            {
            case 0: RecvRf.UlBandWidth = 6; break;

            case 1: RecvRf.UlBandWidth = 15; break;

            case 2: RecvRf.UlBandWidth = 25; break;

            case 3: RecvRf.UlBandWidth = 50; break;

            case 4: RecvRf.UlBandWidth = 75; break;

            case 5: RecvRf.UlBandWidth = 100; break;
            }
            RecvRf.RFchoice            = (byte)comboBox11.SelectedIndex;
            RecvRf.TX1PowerAttenuation = Convert.ToUInt16(textBox2.Text);
            RecvRf.TX2PowerAttenuation = Convert.ToUInt16(textBox3.Text);

            int lengthRecvRf = Marshal.SizeOf(RecvRf);

            byte[] dataRecvRecvRf = new byte[lengthRecvRf];
            IntPtr intptr         = Marshal.AllocHGlobal(lengthRecvRf);

            Marshal.StructureToPtr(RecvRf, intptr, true);
            Marshal.Copy(intptr, dataRecvRecvRf, 0, lengthRecvRf);
            Marshal.FreeHGlobal(intptr);
            CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();

            dataEvtArg.deivceName = "设备0011";//COM.ZCTT.AGI.Common.Global.GCurrentDevice;
            dataEvtArg.data       = dataRecvRecvRf;
            for (int i = 0; i < dataRecvRecvRf.Length; i++)
            {
                System.Diagnostics.Debug.WriteLine(dataRecvRecvRf[i]);
            }
            COM.ZCTT.AGI.Common.Global.tempClass.SendDataToDevice(sender, dataEvtArg);
        }
예제 #20
0
        //mode:0-测向,2-STMSI,3-cellsearch
        public static CustomDataEvtArg GenerateMessage(string band, string earfcn, string pci, byte mode)
        {
            PC_AG_PROTOCOL_TRACE_REQ ProTracReq = new PC_AG_PROTOCOL_TRACE_REQ();

            //消息头
            ProTracReq.msgHeader.Reserved      = 0;
            ProTracReq.msgHeader.Source        = 4;
            ProTracReq.msgHeader.Destination   = 2;
            ProTracReq.msgHeader.MessageType   = 0x400a; /* V1.0 */
            ProTracReq.msgHeader.TransactionID = 0;
            ProTracReq.msgHeader.MsgLen        = 0;      //需要最后发送的时候计算


            //PROTOCOL_TRACE_UE_INFO_STRU mstUeInfo
            ProTracReq.mstUeInfo = new PROTOCOL_TRACE_UE_INFO_STRU();
            ProTracReq.mstUeInfo.mastUEInfoList = new UE_INFO_STRU[16];
            for (int i = 0; i < ProTracReq.mstUeInfo.mastUEInfoList.Length; i++)
            {
                UE_INFO_STRU ueinfo = new UE_INFO_STRU();
                ueinfo.mu8UEIDTYPE           = 0;
                ueinfo.mu8UEIDLength         = 8;
                ueinfo.mu8CellInfoFlag       = 0;
                ueinfo.mu8UeCategory         = 1;
                ueinfo.mstCellInfo           = new CELL_INFO_STRU();
                ueinfo.mstCellInfo.u16EARFCN = 0;
                ueinfo.mstCellInfo.u16PCI    = 0;
                ueinfo.muUeIdData            = new UEID_DATA_STRU();
                ueinfo.muUeIdData.mau8IMSI   = new byte[MAX_SIZE_IMSI + 3];

                ProTracReq.mstUeInfo.mastUEInfoList[i] = ueinfo;
            }
            ProTracReq.mstUeInfo.mastUsimInfoList = new USIM_INFO_STRU[16];
            for (int i = 0; i < ProTracReq.mstUeInfo.mastUsimInfoList.Length; i++)
            {
                USIM_INFO_STRU usiminfo = new USIM_INFO_STRU();
                usiminfo.mau8IMSI        = new byte[MAX_SIZE_IMSI + 3];
                usiminfo.mau16SimAC      = 0;
                usiminfo.mu8KLengthIndex = 1;
                usiminfo.mu8Pading       = 0;
                usiminfo.maU8KDATA       = new byte[32];

                ProTracReq.mstUeInfo.mastUsimInfoList[i] = usiminfo;
            }

            //cellsearch mode
            ProTracReq.mstUeInfo.mu8UESelectMode         = mode;
            ProTracReq.mstUeInfo.mu8TraceUENum           = 1;
            ProTracReq.mstUeInfo.mu8UEIDListCount        = 1;
            ProTracReq.mstUeInfo.mu8KeyGetMode           = 0;
            ProTracReq.mstUeInfo.mu32UeSilenceCheckTimer = 18;
            ProTracReq.mstCellInfo.mu8RATType            = 0;

            //PROTOCOL_TRACE_CELL_INFO_STRU mstCellInfo
            ProTracReq.mstCellInfo = new PROTOCOL_TRACE_CELL_INFO_STRU();
            ProTracReq.mstCellInfo.mu16CellNumber                  = 1;
            ProTracReq.mstCellInfo.mu32PlmnNum                     = 1;
            ProTracReq.mstCellInfo.mu8RATType                      = 0;
            ProTracReq.mstCellInfo.mu16ProtolLayerSelect           = 0x0200;
            ProTracReq.mstCellInfo.mu16AverageFrameNum             = 1;
            ProTracReq.mstCellInfo.mu16statisticalInfoReportPeriod = 1;
            ProTracReq.mstCellInfo.mu16CtrlInfoReportPeriod        = 1;
            ProTracReq.mstCellInfo.mu16FreqBandNum                 = 1;

            ProTracReq.mstCellInfo.PlmnIdList = new PLMNID_STRU[4];
            for (int i = 0; i < ProTracReq.mstCellInfo.PlmnIdList.Length; i++)
            {
                PLMNID_STRU plmnid = new PLMNID_STRU();
                plmnid.mau8AucMcc = new byte[3] {
                    4, 6, 0
                };
                plmnid.mu8Pading1 = 0;
                plmnid.mau8AucMnc = new byte[2] {
                    0, 0
                };
                plmnid.mau8Pading2 = new byte[2] {
                    0, 0
                };

                ProTracReq.mstCellInfo.PlmnIdList[i] = plmnid;
            }

            CELL_INFO_STRU cellinfo = new CELL_INFO_STRU();

            //EARFCN_INFO_STRU earfcninfo = new EARFCN_INFO_STRU();

            ProTracReq.mstCellInfo.mu8CellSelectMode = 0;
            double freq = 0;

            //int freqIndex = 0;
            //switch(band)
            //{
            //    case "38":
            //        freqIndex = 0;
            //        break;
            //    case "39":
            //        freqIndex = 1;
            //        break;
            //    case "40":
            //        freqIndex = 2;
            //        break;
            //    case "41":
            //        freqIndex = 3;
            //        break;
            //    case "1":
            //        freqIndex = 4;
            //        break;
            //    case "3":
            //        freqIndex = 5;
            //        break;
            //    default:
            //        System.Windows.Forms.MessageBox.Show("错误的band!");
            //        break;
            //}
            try
            {
                //freq修改
                freq = Global.FreqToEARFCN(Convert.ToInt32(band), Convert.ToDouble(earfcn), 0, 0, 50);
                if (freq == -1)
                {
                    freq = 0;
                }
                //MessageBox.Show(freq.ToString());
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("Message=" + ex.Message + "\r\nStacktrace:" + ex.StackTrace);
            }

            ProTracReq.mstCellInfo.mu16CellNumber  = 1;
            ProTracReq.mstCellInfo.mu16FreqBandNum = 0;
            cellinfo.u16EARFCN = Convert.ToUInt16(freq);
            cellinfo.u16PCI    = Convert.ToUInt16(pci);

            switch (mode)
            {
            case 0:
                ProTracReq.mstCellInfo.mu16ProtolLayerSelect = 515;
                ProTracReq.mstCellInfo.mu16L1MeasSelect      = 8193;
                break;

            case 2:
                ProTracReq.mstCellInfo.mu16ProtolLayerSelect = 515;
                ProTracReq.mstCellInfo.mu16L1MeasSelect      = 8193;
                break;

            case 3:
                ProTracReq.mstCellInfo.mu16ProtolLayerSelect = 515;
                ProTracReq.mstCellInfo.mu16L1MeasSelect      = 8193;
                break;

            default:
                break;
            }

            UInt16 mcc = 460;
            UInt16 mnc = 00;

            if (mode == 0)
            {
                byte[] CRNTIorRRID = new byte[2];

                ProTracReq.mstUeInfo.mu8UESelectMode = 0;
                int ii = 0;
                int j  = 1;
                ProTracReq.mstUeInfo.mastUEInfoList[0].mu8UEIDTYPE = 1; //GUTI
                ////////////////////////////////////////////////////////////////////////////0806
                ProTracReq.mstUeInfo.mastUEInfoList[0].mu8UEIDLength = 10;

                byte[] TypeGUTI = new byte[16];
                byte[] tempKey  = System.Text.Encoding.Default.GetBytes(LTEUnion.TargetInfoLVItem.SubItems[1].Text);
                for (int i = 0; i < tempKey.Length; i++)
                {
                    if (tempKey[i] >= '0' && tempKey[i] <= '9')
                    {
                        tempKey[i] = (byte)(tempKey[i] - 48);
                    }
                    else if (tempKey[i] >= 'a' && tempKey[i] <= 'f')
                    {
                        tempKey[i] = (byte)(tempKey[i] - 'a' + 10);
                    }
                    else if (tempKey[i] >= 'A' && tempKey[i] <= 'F')
                    {
                        tempKey[i] = (byte)(tempKey[i] - 'A' + 10);
                    }
                }

                for (int num = 5; num < 10; num++)
                {
                    byte tempValue = (byte)(tempKey[ii] << 4);
                    tempValue &= 0xf0;
                    tempValue |= tempKey[j];

                    TypeGUTI[num] = tempValue;
                    ii           += 2;
                    j            += 2;
                }

                //      TypeGUTI[0] = 0;
                //      TypeGUTI[1] = 0xf1;
                //      TypeGUTI[2] = 0x10;
                //      TypeGUTI[3] = 0;
                //      TypeGUTI[4] = 0;

                TypeGUTI[0] = (byte)(mnc / 10);
                TypeGUTI[1] = (byte)(mnc % 10 | 0xf0);
                TypeGUTI[2] = (byte)(mcc % 10);
                TypeGUTI[3] = (byte)(mcc % 100 / 10);
                TypeGUTI[4] = (byte)(mcc / 100);

                int length;
                if (TypeGUTI.Length >= 10)
                {
                    length = 10;
                }
                else
                {
                    length = TypeGUTI.Length;
                }
                System.Buffer.BlockCopy(TypeGUTI,
                                        0,
                                        ProTracReq.mstUeInfo.mastUEInfoList[0].muUeIdData.mau8GUTI,
                                        0,
                                        TypeGUTI.Length);

                ///////////////////////////////////////////////////////////////////////////0806
            }
            byte[] KDATA = new byte[32];
            ProTracReq.mstUeInfo.mastUsimInfoList[0].mu8KLengthIndex = 2;
            ProTracReq.mstUeInfo.mastUsimInfoList[0].maU8KDATA       = KDATA;

            int DataLength = Marshal.SizeOf(ProTracReq);

            DataLength = DataLength + Marshal.SizeOf(cellinfo);


            ProTracReq.mstCellInfo.PlmnIdList[0].mau8AucMcc[0] = (byte)(mcc / 100);
            ProTracReq.mstCellInfo.PlmnIdList[1].mau8AucMcc[0] = (byte)(mcc / 100);
            ProTracReq.mstCellInfo.PlmnIdList[2].mau8AucMcc[0] = (byte)(mcc / 100);
            ProTracReq.mstCellInfo.PlmnIdList[3].mau8AucMcc[0] = (byte)(mcc / 100);

            ProTracReq.mstCellInfo.PlmnIdList[0].mau8AucMcc[1] = (byte)(mcc % 100 / 10);
            ProTracReq.mstCellInfo.PlmnIdList[1].mau8AucMcc[1] = (byte)(mcc % 100 / 10);
            ProTracReq.mstCellInfo.PlmnIdList[2].mau8AucMcc[1] = (byte)(mcc % 100 / 10);
            ProTracReq.mstCellInfo.PlmnIdList[3].mau8AucMcc[1] = (byte)(mcc % 100 / 10);

            ProTracReq.mstCellInfo.PlmnIdList[0].mau8AucMcc[2] = (byte)(mcc % 10);
            ProTracReq.mstCellInfo.PlmnIdList[1].mau8AucMcc[2] = (byte)(mcc % 10);
            ProTracReq.mstCellInfo.PlmnIdList[2].mau8AucMcc[2] = (byte)(mcc % 10);
            ProTracReq.mstCellInfo.PlmnIdList[3].mau8AucMcc[2] = (byte)(mcc % 10);

            ProTracReq.mstCellInfo.PlmnIdList[0].mau8AucMnc[0] = (byte)(mnc / 10);
            ProTracReq.mstCellInfo.PlmnIdList[1].mau8AucMnc[0] = (byte)(mnc / 10);
            ProTracReq.mstCellInfo.PlmnIdList[2].mau8AucMnc[0] = (byte)(mnc / 10);
            ProTracReq.mstCellInfo.PlmnIdList[3].mau8AucMnc[0] = (byte)(mnc / 10);

            ProTracReq.mstCellInfo.PlmnIdList[0].mau8AucMnc[1] = (byte)(mnc % 10);
            ProTracReq.mstCellInfo.PlmnIdList[1].mau8AucMnc[1] = (byte)(mnc % 10);
            ProTracReq.mstCellInfo.PlmnIdList[2].mau8AucMnc[1] = (byte)(mnc % 10);
            ProTracReq.mstCellInfo.PlmnIdList[3].mau8AucMnc[1] = (byte)(mnc % 10);

            //消息头中的消息长度
            ProTracReq.msgHeader.MsgLen = (UInt16)((DataLength - 12) / 4);

            CustomDataEvtArg testOKArgs = new CustomDataEvtArg();

            testOKArgs.data = new byte[DataLength];

            int reqlength = Marshal.SizeOf(ProTracReq);

            byte[] reqdata = new byte[reqlength];
            IntPtr intptr  = Marshal.AllocHGlobal(reqlength);

            Marshal.StructureToPtr(ProTracReq, intptr, true);
            Marshal.Copy(intptr, reqdata, 0, reqlength);
            Marshal.FreeHGlobal(intptr);
            System.Buffer.BlockCopy(reqdata, 0, testOKArgs.data, 0, reqlength);

            int cellinfolength = Marshal.SizeOf(cellinfo);

            byte[] cellinfodata1 = new byte[cellinfolength];
            IntPtr ptr           = Marshal.AllocHGlobal(cellinfolength);

            Marshal.StructureToPtr(cellinfo, ptr, true);
            Marshal.Copy(ptr, cellinfodata1, 0, cellinfolength);
            Marshal.FreeHGlobal(ptr);
            System.Buffer.BlockCopy(cellinfodata1, 0, testOKArgs.data, reqlength, cellinfolength);

            testOKArgs.deivceName  = "AGT";
            testOKArgs.moduleName  = "ProtocolTrace";
            testOKArgs.readyModule = "ProtocolTrace";
            //Global.tempClass.Ready(sender, testOKArgs);
            Global.ProTracReq  = testOKArgs.data;
            Global.ReadyModule = "ProtocolTrace";
            //Global.tempClass.Ready(sender, testOKArgs);

            return(testOKArgs);
        }
예제 #21
0
        private void SysParaBtn_Click(object sender, EventArgs e)
        {
            MsgDefine.RecvSysParaBitStream RecvSysPara = new MsgDefine.RecvSysParaBitStream();
            RecvSysPara.head.head        = 0xffff;
            RecvSysPara.head.pkt_type    = (ushort)MsgDefine.RecvPktType.RECV_SYS_PARA;
            RecvSysPara.head.data_length = (uint)(Marshal.SizeOf(RecvSysPara) - 8);

            RecvSysPara.paraSysNo = Convert.ToByte(textBox7.Text);

            if (textBox8.Text.Length == 3)
            {
                byte[] mcc = new byte[3];
                mcc[0] = Convert.ToByte(textBox8.Text.Substring(0, 1));
                mcc[1] = Convert.ToByte(textBox8.Text.Substring(1, 1));
                mcc[2] = Convert.ToByte(textBox8.Text.Substring(2, 1));
                RecvSysPara.paraMcc = mcc;
            }
            else
            {
                MessageBox.Show("请填入正确的MCC");
                return;
            }
            switch (comboBox1.SelectedIndex)
            {
            case 0: RecvSysPara.paraMnc = new byte[2] {
                    0, 0
            }; break;

            case 1: RecvSysPara.paraMnc = new byte[2] {
                    0, 2
            }; break;

            case 2: RecvSysPara.paraMnc = new byte[2] {
                    0, 7
            }; break;

            case 3: RecvSysPara.paraMnc = new byte[2] {
                    0, 1
            }; break;

            case 4: RecvSysPara.paraMnc = new byte[2] {
                    0, 6
            }; break;

            case 5: RecvSysPara.paraMnc = new byte[2] {
                    0, 3
            }; break;

            case 6: RecvSysPara.paraMnc = new byte[2] {
                    0, 5
            }; break;

            case 7: RecvSysPara.paraMnc = new byte[2] {
                    1, 1
            }; break;
            }
            RecvSysPara.paraPciNo = Convert.ToUInt16(textBox9.Text);
            RecvSysPara.paraTac   = Convert.ToUInt16(textBox10.Text);
            RecvSysPara.CellId    = Convert.ToUInt32(textBox11.Text);
            RecvSysPara.TaiPeri   = Convert.ToUInt32(textBox12.Text);

            RecvSysPara.paraIDReqNumOUT = Convert.ToByte(textBox23.Text);
            RecvSysPara.paraIDReqNumIN  = Convert.ToByte(textBox13.Text);

            RecvSysPara.UEcapaEnquiryNumOUT = Convert.ToByte(textBox24.Text);
            RecvSysPara.UEcapaEnquiryNumIN  = Convert.ToByte(textBox14.Text);
            if (checkBox7.Checked)
            {
                RecvSysPara.BoolMeasureOUT = 1;
            }
            else
            {
                RecvSysPara.BoolMeasureOUT = 0;
            }
            if (checkBox6.Checked)
            {
                RecvSysPara.BoolMeasureIN = 1;
            }
            else
            {
                RecvSysPara.BoolMeasureIN = 0;
            }

            switch (comboBox4.SelectedIndex)
            {
            case 0: RecvSysPara.paraTAURejCauOUT = 2; break;

            case 1: RecvSysPara.paraTAURejCauOUT = 3; break;

            case 2: RecvSysPara.paraTAURejCauOUT = 5; break;

            case 3: RecvSysPara.paraTAURejCauOUT = 6; break;

            case 4: RecvSysPara.paraTAURejCauOUT = 11; break;

            case 5: RecvSysPara.paraTAURejCauOUT = 12; break;

            case 6: RecvSysPara.paraTAURejCauOUT = 13; break;

            case 7: RecvSysPara.paraTAURejCauOUT = 15; break;

            case 8: RecvSysPara.paraTAURejCauOUT = 17; break;

            case 9: RecvSysPara.paraTAURejCauOUT = 22; break;
            }
            switch (comboBox2.SelectedIndex)
            {
            case 0: RecvSysPara.paraTAURejCauIN = 2; break;

            case 1: RecvSysPara.paraTAURejCauIN = 3; break;

            case 2: RecvSysPara.paraTAURejCauIN = 5; break;

            case 3: RecvSysPara.paraTAURejCauIN = 6; break;

            case 4: RecvSysPara.paraTAURejCauIN = 11; break;

            case 5: RecvSysPara.paraTAURejCauIN = 12; break;

            case 6: RecvSysPara.paraTAURejCauIN = 13; break;

            case 7: RecvSysPara.paraTAURejCauIN = 15; break;

            case 8: RecvSysPara.paraTAURejCauIN = 17; break;

            case 9: RecvSysPara.paraTAURejCauIN = 22; break;
            }
            switch (comboBox5.SelectedIndex)
            {
            case 0: RecvSysPara.paraATTRejCauOUT = 2; break;

            case 1: RecvSysPara.paraATTRejCauOUT = 3; break;

            case 2: RecvSysPara.paraATTRejCauOUT = 5; break;

            case 3: RecvSysPara.paraATTRejCauOUT = 6; break;

            case 4: RecvSysPara.paraATTRejCauOUT = 11; break;

            case 5: RecvSysPara.paraATTRejCauOUT = 12; break;

            case 6: RecvSysPara.paraATTRejCauOUT = 13; break;

            case 7: RecvSysPara.paraATTRejCauOUT = 15; break;

            case 8: RecvSysPara.paraATTRejCauOUT = 17; break;

            case 9: RecvSysPara.paraATTRejCauOUT = 22; break;
            }
            switch (comboBox3.SelectedIndex)
            {
            case 0: RecvSysPara.paraATTRejCauIN = 2; break;

            case 1: RecvSysPara.paraATTRejCauIN = 3; break;

            case 2: RecvSysPara.paraATTRejCauIN = 5; break;

            case 3: RecvSysPara.paraATTRejCauIN = 6; break;

            case 4: RecvSysPara.paraATTRejCauIN = 11; break;

            case 5: RecvSysPara.paraATTRejCauIN = 12; break;

            case 6: RecvSysPara.paraATTRejCauIN = 13; break;

            case 7: RecvSysPara.paraATTRejCauIN = 15; break;

            case 8: RecvSysPara.paraATTRejCauIN = 17; break;

            case 9: RecvSysPara.paraATTRejCauIN = 22; break;
            }
            RecvSysPara.redirectedRATOUT     = (byte)(comboBox7.SelectedIndex);
            RecvSysPara.redirectedCarrierOUT = Convert.ToUInt16(textBox18.Text);
            RecvSysPara.PriorityOUT          = Convert.ToByte(textBox19.Text);
            RecvSysPara.redirectedRATIN      = (byte)(comboBox6.SelectedIndex);
            RecvSysPara.redirectedCarrierIN  = Convert.ToUInt16(textBox15.Text);
            RecvSysPara.PriorityIN           = Convert.ToByte(textBox16.Text);
            RecvSysPara.redirectedCellIN     = Convert.ToByte(textBox17.Text);

            int lengthRecvSysPara = Marshal.SizeOf(RecvSysPara);

            byte[] dataRecvSysPara = new byte[lengthRecvSysPara];
            IntPtr intPtr          = Marshal.AllocHGlobal(lengthRecvSysPara);

            Marshal.StructureToPtr(RecvSysPara, intPtr, true);
            Marshal.Copy(intPtr, dataRecvSysPara, 0, lengthRecvSysPara);
            Marshal.FreeHGlobal(intPtr);
            CustomDataEvtArg dataEvtArg = new CustomDataEvtArg();

            dataEvtArg.data       = dataRecvSysPara;
            dataEvtArg.deivceName = COM.ZCTT.AGI.Common.Global.GCurrentDevice;
            for (int i = 0; i < dataRecvSysPara.Length; i++)
            {
                System.Diagnostics.Debug.WriteLine(dataRecvSysPara[i]);
            }
            COM.ZCTT.AGI.Common.Global.tempClass.SendDataToDevice(sender, dataEvtArg);
        }
예제 #22
0
        /// <summary>
        /// 确定按钮单击时的处理方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_OK_Click(object sender, EventArgs e)
        {
            try
            {
                Device thisDevice = new Device();
                foreach (Device tempDevice in DeviceManger.deviceList)
                {
                    if (tempDevice.DeviceName == this.comboBox_DeviceName.Text.Trim())
                    {
                        thisDevice = tempDevice;
                        break;
                    }
                }
                if (this.comboBox_WorkMode.Text.Trim() == "CellScan")
                {
                    thisDevice.DeviceWorkModel = (byte)COM.ZCTT.AGI.Common.Global.WorkModeValue.CellScan;
                }
                else if (this.comboBox_WorkMode.Text.Trim() == "ProtocolTrack")
                {
                    thisDevice.DeviceWorkModel = (byte)COM.ZCTT.AGI.Common.Global.WorkModeValue.ProtocolTrack;
                }
                if (this.comboBox_InterfaceType.Text.Trim() == "LAN")
                {
                    thisDevice.PortType       = (byte)COM.ZCTT.AGI.Common.Global.PortTypeValue.LAN;
                    thisDevice.IpAddress      = this.textBox_IpAddress.Text.Trim();
                    thisDevice.DataPortNum    = int.Parse(this.textBox_DataPortNum.Text.Trim());
                    thisDevice.MessagePortNum = int.Parse(this.textBox_MsgPortNum.Text.Trim());
                }
                else if (this.comboBox_InterfaceType.Text.Trim() == "USB")
                {
                    thisDevice.PortType = (byte)COM.ZCTT.AGI.Common.Global.PortTypeValue.USB;
                }
                if (this.comboBox_OutDataType.Text.Trim() == "IQ")
                {
                    thisDevice.OutputDataType = (byte)COM.ZCTT.AGI.Common.Global.OutDataTypeValue.IQ;
                }
                else if (this.comboBox_OutDataType.Text.Trim() == "TestData")
                {
                    thisDevice.OutputDataType = (byte)COM.ZCTT.AGI.Common.Global.OutDataTypeValue.TestData;
                }
                else if (this.comboBox_OutDataType.Text.Trim() == "MeasuringData")
                {
                    thisDevice.OutputDataType = (byte)COM.ZCTT.AGI.Common.Global.OutDataTypeValue.MeasuringData;
                }
                else if (this.comboBox_OutDataType.Text.Trim() == "LayerOutData")
                {
                    thisDevice.OutputDataType = (byte)COM.ZCTT.AGI.Common.Global.OutDataTypeValue.LayerOutData;
                }

                if (this.comboBox_DataStoreMode.Text.Trim() == "ExternalStore")
                {
                    thisDevice.DataStoreMode = (byte)COM.ZCTT.AGI.Common.Global.DataSaveMode.ExternalStore;
                }
                else if (this.comboBox_DataStoreMode.Text.Trim() == "TimingSave")
                {
                    thisDevice.DataStoreMode = (byte)COM.ZCTT.AGI.Common.Global.DataSaveMode.TimingSave;
                }
                else if (this.comboBox_DataStoreMode.Text.Trim() == "StoredContiguously")
                {
                    thisDevice.DataStoreMode = (byte)COM.ZCTT.AGI.Common.Global.DataSaveMode.StoredContiguously;
                }
                else if (this.comboBox_DataStoreMode.Text.Trim() == "TriggerSave")
                {
                    thisDevice.DataStoreMode = (byte)COM.ZCTT.AGI.Common.Global.DataSaveMode.TriggerSave;
                }
                if (this.textBox_DataStoreTime.Text.Length != 0)
                {
                    thisDevice.DataStoreTime = UInt16.Parse(this.textBox_DataStoreTime.Text.Trim());
                }

                if (this.comboBox_SaveDataType.Text.Trim() == "CSV")
                {
                    thisDevice.DataStoreType = (byte)COM.ZCTT.AGI.Common.Global.DataSaveType.CSV;
                }
                else if (this.comboBox_SaveDataType.Text.Trim() == "TXT")
                {
                    thisDevice.DataStoreType = (byte)COM.ZCTT.AGI.Common.Global.DataSaveType.TXT;
                }

                if (checkBox1.Enabled && checkBox1.Checked)
                {
                    if (MessageBox.Show("Are you sure to reset IP and Port of this device?", "", MessageBoxButtons.OKCancel)
                        == DialogResult.OK)
                    {
                        #region reset AGT ip and prot ,edit at 20141110
                        PC_AG_RENEW_IP_REQ stu_PC_AG_RENEW_IP_REQ = new PC_AG_RENEW_IP_REQ();
                        stu_PC_AG_RENEW_IP_REQ.msgHeader.Reserved      = 0;
                        stu_PC_AG_RENEW_IP_REQ.msgHeader.Source        = 3;
                        stu_PC_AG_RENEW_IP_REQ.msgHeader.Destination   = 2;
                        stu_PC_AG_RENEW_IP_REQ.msgHeader.MessageType   = 0x4008;
                        stu_PC_AG_RENEW_IP_REQ.msgHeader.TransactionID = 0;
                        stu_PC_AG_RENEW_IP_REQ.msgHeader.MsgLen        = (UInt16)((Marshal.SizeOf(stu_PC_AG_RENEW_IP_REQ) - 12) / 4);
                        //stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num = new byte[4];
                        //stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num = new byte[4];
                        stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num = Convert.ToUInt32(thisDevice.DataPortNum);
                        stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num = Convert.ToUInt32(thisDevice.MessagePortNum);
                        stu_PC_AG_RENEW_IP_REQ.mau8AgtIPAdress = new byte[4];
                        //for (int i = 0; i < 4; i++)
                        //{
                        //    stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num[i] = GetByte(thisDevice.DataPortNum, i);
                        //    stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num[i] = GetByte(thisDevice.MessagePortNum, i);
                        //}
                        string[] s = thisDevice.IpAddress.Split(new char[] { '.' });
                        for (int i = 0; i < 4; i++)
                        {
                            stu_PC_AG_RENEW_IP_REQ.mau8AgtIPAdress[i] = Convert.ToByte(s[i]);
                        }
                        stu_PC_AG_RENEW_IP_REQ.mu32AgtGateAdress = 0;
                        stu_PC_AG_RENEW_IP_REQ.mu32AgtMacAdress  = 0;

                        byte[] configData = new byte[1024];
                        byte[] tempBytes;
                        int    dstOffset = 0;

                        //Head
                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.msgHeader.Reserved);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 4);
                        dstOffset = dstOffset + 4;

                        configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.msgHeader.Source;
                        dstOffset++;

                        configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.msgHeader.Destination;
                        dstOffset++;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.msgHeader.MessageType);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 2);
                        dstOffset = dstOffset + 2;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.msgHeader.TransactionID);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 2);
                        dstOffset = dstOffset + 2;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.msgHeader.MsgLen);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 2);
                        dstOffset = dstOffset + 2;

                        //Body
                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.mu32ModefyMode);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 4);
                        dstOffset = dstOffset + 4;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 4);
                        dstOffset = dstOffset + 4;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 4);
                        dstOffset = dstOffset + 4;

                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num[0];
                        //dstOffset++;
                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num[1];
                        //dstOffset++;
                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num[2];
                        //dstOffset++;
                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort0Num[3];
                        //dstOffset++;

                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num[0];
                        //dstOffset++;
                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num[1];
                        //dstOffset++;
                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num[2];
                        //dstOffset++;
                        //configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtPort1Num[3];
                        //dstOffset++;

                        configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtIPAdress[0];
                        dstOffset++;
                        configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtIPAdress[1];
                        dstOffset++;
                        configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtIPAdress[2];
                        dstOffset++;
                        configData[dstOffset] = stu_PC_AG_RENEW_IP_REQ.mau8AgtIPAdress[3];
                        dstOffset++;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.mu32AgtGateAdress);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 4);
                        dstOffset = dstOffset + 4;

                        tempBytes = BitConverter.GetBytes(stu_PC_AG_RENEW_IP_REQ.mu32AgtMacAdress);
                        Buffer.BlockCopy(tempBytes, 0, configData, dstOffset, 4);
                        dstOffset = dstOffset + 4;

                        tempBytes = new byte[dstOffset];
                        System.Buffer.BlockCopy(configData, 0, tempBytes, 0, dstOffset);

                        CustomDataEvtArg cusArg = new CustomDataEvtArg();
                        cusArg.data       = tempBytes;
                        cusArg.deivceName = comboBox_DeviceName.Text;
                        Global.tempClass.SendDataToDevice(sender, cusArg);
                        ////////////////////////////////////////////
                        #endregion
                    }
                }
                this.Close();

                if (AGIInterface.Class1.OnChangeDeviceInfoList != null)
                {
                    AGIInterface.Class1.OnChangeDeviceInfoList(this.comboBox_DeviceName.Text.Trim());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Instrument configuration is exception:" + ex.Message);
            }
        }
예제 #23
0
        private void UeInfoReceived(object sender, CustomDataEvtArg ce)
        {
            if (this.InvokeRequired)
            {
                try
                {
                    this.BeginInvoke(new Class1.SendUeInfoToMainFormHandler(UeInfoReceived), sender, ce);
                }
                catch { }
            }
            else
            {
                MsgDefine.SendUeInfo UeInfo = new MsgDefine.SendUeInfo();
                int lengthUeInfo            = Marshal.SizeOf(UeInfo);
                if (lengthUeInfo > ce.data.Length)
                {
                    return;
                }
                IntPtr intptr = Marshal.AllocHGlobal(lengthUeInfo);
                Marshal.Copy(ce.data, 0, intptr, lengthUeInfo);
                UeInfo = (MsgDefine.SendUeInfo)Marshal.PtrToStructure(intptr, typeof(MsgDefine.SendUeInfo));
                Marshal.FreeHGlobal(intptr);

                String imsi = "";
                for (int i = 0; i < 16; i++)
                {
                    imsi += UeInfo.ueImsi[i];
                }
                String imei = "";
                for (int i = 0; i < 16; i++)
                {
                    imei += UeInfo.ueImei[i];
                }
                String sTmsi = "";
                for (int i = 0; i < 12; i++)
                {
                    sTmsi += UeInfo.ueSTmsi[i];
                }
                String taType = "";
                switch (UeInfo.ueTaType)
                {
                case 1: taType = "EpsAtt"; break;

                case 2: taType = "EPSImsiAtt"; break;

                case 6: taType = "EpsEmerAtt"; break;

                case 16: taType = "TAu"; break;

                case 17: taType = "TaLau"; break;

                case 18: taType = "TaLauImsi"; break;

                case 19: taType = "PeriU"; break;

                case 24: taType = "TaUBr"; break;

                case 25: taType = "TaLaUBr"; break;

                case 26: taType = "TaLaImsiBr"; break;

                case 27: taType = "PeriUBr"; break;
                }
                String ueType = "";
                switch (UeInfo.ueType)
                {
                case 0: ueType = "LTE"; break;

                case 1: ueType = "LTE/GSM"; break;

                case 2: ueType = "LTE/CDMA2000"; break;

                case 3: ueType = "LTE/CDMA2000/GSM"; break;

                case 4: ueType = "LTE/TD-S"; break;

                case 5: ueType = "LTE/TD-S/GSM"; break;

                case 6: ueType = "LTE/TD-S/CDMA2000"; break;

                case 7: ueType = "LTE/TD-S/CDMA2000/GSM"; break;

                case 8: ueType = "LTE/WCDMA"; break;

                case 9: ueType = "LTE/WCDMA/GSM"; break;

                case 10: ueType = "LTE/WCDMA/CDMA2000"; break;

                case 11: ueType = "LTE/WCDMA/CDMA2000/GSM"; break;

                case 12: ueType = "LTE/WCDMA/TD-S"; break;

                case 13: ueType = "LTE/WCDMA/TD-S/GSM"; break;

                case 14: ueType = "LTE/WCDMA/TD-S/CDMA2000"; break;

                case 15: ueType = "LTE/WCDMA/TD-S/CDMA2000/GSM"; break;
                }
                String taTime = DateTime.Now.ToString();
                byte   pwrNo  = UeInfo.uePwrNo;
                double avePwr = 0;
                for (byte i = 0; i < pwrNo; i++)
                {
                    avePwr += UeInfo.uePwr[i];
                }
                avePwr = avePwr / pwrNo - 135;

                //foreach(ListViewItem item in this.listView1.Items)
                //{
                //    if (imsi == item.SubItems[0].Text)
                //    {
                //        item.SubItems[1].Text = imei;
                //        item.SubItems[2].Text = sTmsi;
                //        item.SubItems[3].Text = taType;
                //        item.SubItems[4].Text = ueType;
                //        item.SubItems[5].Text = taTime;
                //        item.SubItems[6].Text = (Convert.ToInt32(item.SubItems[6].Text) + 1).ToString();
                //        this.listView1.Items.Add(item);
                //        return;

                //    }
                ListViewItem item = new ListViewItem(new String[8]);
                item.SubItems[0].Text = imsi;
                item.SubItems[1].Text = imei;
                item.SubItems[2].Text = sTmsi;
                item.SubItems[3].Text = taType;
                item.SubItems[4].Text = ueType;
                item.SubItems[5].Text = taTime;
                item.SubItems[6].Text = pwrNo.ToString();
                item.SubItems[7].Text = avePwr.ToString() + "dbm";

                this.listView1.Items.Add(item);
                //}
            }
        }
예제 #24
0
        /// <summary>
        /// ACK处理
        /// </summary>
        /// <param name="buffer">接收ACK的buffer</param>
        /// <param name="receiveDateLength">接收的数据长度</param>
        /// <returns></returns>
        private int AckDataHander(byte[] buffer, int receiveDateLength)
        {
            if (receiveDateLength >= 12)
            {
                UInt16 msgLength = System.BitConverter.ToUInt16(buffer, 10);
                int    bodyCount = msgLength * 4;
                if (bodyCount == 4)      //标准ACK响应
                {
                    if (buffer[12] == 1) //ACK失败
                    {
                        MessageBox.Show("Message ACK failed!");
                        return(1);
                    }
                }
                //需要特殊处理的ACK响应
                UInt16 msgType = System.BitConverter.ToUInt16(buffer, 6);
                System.Diagnostics.Debug.WriteLine(" receive a ACK ,msg type :  " + Convert.ToString(msgType, 16));
                ///////////////////////////////////////
                if (Convert.ToString(msgType, 16) == "ffff" && receiveDateLength == 12 && buffer[0] == 0x48 && buffer[1] == 0xc && buffer[2] == 0xf4 && buffer[3] == 0x7e && buffer[4] == 0x2 && buffer[5] == 0x4 && buffer[6] == 0xff && buffer[7] == 0xff && buffer[8] == 0 && buffer[9] == 0 && buffer[10] == 0 && buffer[11] == 0)
                {
                    //######查看收到的0000消息########
                    //AGIInterface.CustomDataEvtArg ce = new CustomDataEvtArg();
                    //ce.data = buffer;
                    //Global.tempClass.SendDataToDebug(this, ce);
                    //#####################
                    MessageBox.Show("The Instrument has been connected by another AGI!");
                    if (AGIInterface.Class1.OnChangeDeviceInfoList != null)
                    {
                        AGIInterface.Class1.OnChangeDeviceInfoList("exception");
                    }
                }
                else
                {
                    if (connectcount == 0)
                    {
                        if (ConnectionState == (byte)Global.DeviceStateValue.Disconnection)
                        {
                            //如果连接成功,改变设备底色为绿色
                            if (AGIInterface.Class1.OnConnOk != null)
                            {
                                AGIInterface.Class1.OnConnOk(this.deviceName);
                            }
                            //SendStatusToMainForm();
                        }
                    }
                }
                //////////////////////////////////////////

                switch (msgType)
                {
                case COM.ZCTT.AGI.Common.AGIMsgDefine.AG_PC_PROTOCOL_TRACE_REL_ACK_MSG_TYPE:
                case COM.ZCTT.AGI.Common.AGIMsgDefine.L1_AG_PROTOCOL_TRACE_REL_ACK_MSG_TYPE:
                {
                    AGIInterface.CustomDataEvtArg ce = new CustomDataEvtArg();
                    ce.deivceName = Global.GCurrentDevice;
                    Global.tempClass.SendACKToCellSearch(this, ce);
                    break;
                }

                //获取设备状态消息的ACK消息
                case COM.ZCTT.AGI.Common.AGIMsgDefine.AG_PC_GET_AGT_INFO_REQ_ACK_MSG_TYPE:
                {
                    this.deviceInstrumentState = buffer[12];
                    this.deviceWorkModel       = buffer[13];
                    this.PortType       = buffer[14];
                    this.OutputDataType = buffer[15];
                    this.DataStoreMode  = buffer[16];

                    if (this.deviceInstrumentState == 1)
                    {
                        if (this.deviceWorkModel == 1)
                        {
                            Global.testMode    = Global.TestMode.RealTime;
                            Global.ReadyModule = "ProtocolTrace";
                        }
                        else if (this.deviceWorkModel == 2)
                        {
                            //Global.testMode = Global.TestMode.CellScan;
                            //Global.CRModule = "CellScan";
                        }
                        else if (this.deviceWorkModel == 3)
                        {
                            //Global.testMode = Global.TestMode.CellScan;
                            //Global.CRModule = "UnSpCellScan";
                        }
                    }
                    else
                    {
                    }

                    //按照新的接口协议,下面的处理是错误的,如果需要获取值,请参看新接口协议
                    //16 saveTime = System.BitConverter.ToUInt16(buffer,20);
                    //this.dataStoreTime = saveTime;
                    //this.remainingPower =Convert.ToInt16((byte)buffer[19]).ToString();UInt

                    if (this.deviceInstrumentState == 1)
                    {
                        if (Global.isReboot == true)
                        {
                            byte[] stop = new byte[] { };
                            if (this.deviceWorkModel == 1)
                            {
                                stop = new byte[] { 0, 0, 0, 0, 4, 2, 0x0c, 0x40, 1, 0, 0, 0 };        //加消息头。。
                            }
                            else if (this.deviceWorkModel == 2)
                            {
                                stop = new byte[] { 0, 0, 0, 0, //reserved
                                                    1,          //srdID
                                                    0,          //destID
                                                    0x03,       //msgType
                                                    0x40,
                                                    0,          //transactionID
                                                    0,
                                                    0,          //msgLen
                                                    0 };
                            }
                            else if (this.deviceWorkModel == 3)
                            {
                                stop = new byte[] { 0, 0, 0, 0, //reserved
                                                    1,          //srdID
                                                    0,          //destID
                                                    0x05,       //msgType
                                                    0x40,
                                                    0,          //transactionID
                                                    0,
                                                    0,          //msgLen
                                                    0 };
                            }

                            sendMessage(stop);
                            // CloseDeviceConn();
                        }
                    }
                    //发送设备状态信息到主程序
                    SendStatusToMainForm();
                    break;
                }

                default: break;
                }
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("ACK is not the right format!");
            }
            return(0);
        }
예제 #25
0
        /// <summary>
        /// 数据接收线程
        /// </summary>
        private void DataRecvThread()
        {
            dataRecvClient = new TcpClient();
            try
            {
                dataRecvClient.Connect(ipAddress, dataPortNum);
                dataRecvClient.ReceiveBufferSize = 30000000;//edit by zhouyt 20140723
                dataStrem = dataRecvClient.GetStream();
            }
            catch (Exception ex)
            {
                Console.WriteLine(">>>Message= " + ex.Message + "\r\n StrackTrace: " + ex.StackTrace);
                CloseDeviceConn();
                //////////////////////////////////
                SendStatusToMainForm();
                if (AGIInterface.Class1.OnChangeDeviceInfoList != null)
                {
                    AGIInterface.Class1.OnChangeDeviceInfoList("exception");
                }
                ////////////////////////////////////
            }
            while (true)
            {
                try
                {
                    byte[] dataBuffer = new byte[10240];
                    int    headerLen  = dataStrem.Read(dataBuffer, 0, 8);
                    //先收头,再收数据
                    lastTime = DateTime.Now;//收到任何数据都表示没有断开连接
                    while (headerLen < 8)
                    {
                        headerLen += dataStrem.Read(dataBuffer, headerLen, 8 - headerLen);
                    }
                    if (System.BitConverter.ToUInt16(dataBuffer, 0) != 0xffff)
                    {
                        continue;
                    }
                    //用于区分消息所属设备,12.10
                    string str2 = "";
                    //byte[] byteArray = new byte[4];
                    for (int i = 0; i < DeviceName.Length; i++)
                    {
                        if ((DeviceName[i] >= '0') && (DeviceName[i] <= '9'))
                        {
                            str2 += DeviceName[i];
                        }
                    }
                    //byteArray = System.Text.Encoding.Default.GetBytes(str2);
                    //Array.Copy(byteArray, dataBuffer, 4);
                    ////for test
                    string str = "设备" + str2;
                    // string str = "AGT"+System.Text.Encoding.ASCII.GetString(byteArray);
                    Console.WriteLine("消息所属设备:" + str);

                    UInt32 msgLength   = System.BitConverter.ToUInt32(dataBuffer, 4);
                    UInt16 msgType     = System.BitConverter.ToUInt16(dataBuffer, 2);
                    int    bodyCount   = (int)msgLength;
                    int    bodyReadLen = dataStrem.Read(dataBuffer, 8, bodyCount);
                    lastTime = DateTime.Now;        //收到任何数据都表示没有断开连接
                    while (bodyReadLen < bodyCount) //如果一次没有接收完成再继续接收
                    {
                        bodyReadLen += dataStrem.Read(dataBuffer, 8 + bodyReadLen, bodyCount - bodyReadLen);
                    }
                    lastTime = DateTime.Now;//收到任何数据都表示没有断开连接
                    int    receivedDataLength = bodyReadLen + 8;
                    byte[] receivedData       = new byte[receivedDataLength];
                    Array.Copy(dataBuffer, receivedData, receivedDataLength);
                    //Debug Output
                    System.Diagnostics.Debug.WriteLine("receive a data , msgType : " + Convert.ToString(msgType, 16) + "  dataLength : " + receivedDataLength);

                    switch (msgType)
                    {
                    case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_HEART_BEAT:        //1
                    {
                        heartBeatCount++;
                        Global.tempClass.HeartBeatCount(heartBeatCount);
                        connectcount = 0;
                        break;
                    }

                    case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_UE_INFO:        //2
                    {
                        CustomDataEvtArg ce = new CustomDataEvtArg();
                        ce.data = receivedData;
                        Global.tempClass.SendUeInfoToMainForm(this, ce);
                        break;
                    }

                    case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_REQ_CNF:        //3
                    {
                        ushort cnfType = System.BitConverter.ToUInt16(receivedData, 10);
                        ushort cnfInd  = System.BitConverter.ToUInt16(receivedData, 12);
                        switch (cnfType)
                        {
                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_SYS_PARA:                                   //系统参数,MCC、MNC等
                        {
                            if (cnfInd == 0)
                            {
                                MessageBox.Show("系统参数发送成功");
                            }
                            else
                            {
                                MessageBox.Show("系统参数发送失败");
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_SYS_OPTION:                                         //系统选项,如是否上报IMEI等
                        {
                            if (cnfInd == 0)
                            {
                                MessageBox.Show("系统选项发送成功");
                            }
                            else
                            {
                                MessageBox.Show("系统选项发送失败");
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_DLRX_PARA:                                                  //下行接收参数,用于获取公网信息
                        {
                            if (cnfInd == 0)
                            {
                                MessageBox.Show("下行测试参数发送成功");
                            }
                            else
                            {
                                MessageBox.Show("下行测试参数发送失败");
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_NC_PARA:                                                            //邻区表参数
                        {
                            if (cnfInd == 0)
                            {
                                Global.tempClass.NcSniffStatus(0);
                            }
                            else if (cnfInd == 1)
                            {
                                Global.tempClass.NcSniffStatus(1);
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_IB_OPER:                                                    //IMSI库处理
                        {
                            if (cnfInd == 0)
                            {
                                Global.tempClass.IBOPERStatus(0);
                            }
                            else if (cnfInd == 1)
                            {
                                Global.tempClass.IBOPERStatus(1);
                                MessageBox.Show("IMSI操作失败,请重新操作!");
                            }
                            else if (cnfInd == 2)
                            {
                                Global.tempClass.IBOPERStatus(1);
                                MessageBox.Show("IMSI操作失败,请重新操作!");
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_CTRL_CMD:                                                   //寻呼控制命令
                        {
                            if (cnfInd == 0)
                            {
                                MessageBox.Show("寻呼命令发送成功");
                            }
                            else
                            {
                                MessageBox.Show("寻呼命令发送失败");
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_RF_PARA:                                                    //射频参数,如频点、功率等
                        {
                            if (cnfInd == 0)
                            {
                                MessageBox.Show("射频参数发送成功");
                            }
                            else
                            {
                                MessageBox.Show("射频参数发送失败");
                            }
                            break;
                        }

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_QUERY_VER:                                          //查询版本
                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_RX_PARA:                                            //接收参数,如RACH接收功率门限等
                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_NEW_TAC:                                            //重新获取新的MCC、MNC、TAC和Cell ID
                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_NOW_PARA:                                           //获取当前设备内的参数

                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_HEART_BEAT_CNF:                                     //心跳包确认
                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_DEV_STATE:                                          //返回设备状态
                        case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_REDIRECT_R9:
                            //case (ushort)COM.ZCTT.AGI.Common.MsgDefine.RecvPktType.RECV_REBOOT_ENB:
                            break;
                        }
                        break;
                    }

                    case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_NOW_PARA:        //4
                        break;

                    case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_PAGING_PWR:        //5
                    {
                        if (CtrlCmdFormIsClosed)
                        {
                            CustomDataEvtArg ce = new CustomDataEvtArg();
                            ce.data = receivedData;
                            Global.tempClass.SendPagingPwrToCtrlForm(this, ce);
                        }

                        break;
                    }

                    case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_DEV_VERSION:        //7
                    {
                        MsgDefine.SendDevVersion DevVersion = new MsgDefine.SendDevVersion();
                        int lengthDevVersion = Marshal.SizeOf(DevVersion);
                        if (lengthDevVersion > receivedData.Length)
                        {
                            return;
                        }
                        IntPtr intptr = Marshal.AllocHGlobal(lengthDevVersion);
                        Marshal.Copy(receivedData, 0, intptr, lengthDevVersion);
                        DevVersion = (MsgDefine.SendDevVersion)Marshal.PtrToStructure(intptr, typeof(MsgDefine.SendDevVersion));
                        Marshal.FreeHGlobal(intptr);

                        String fpgaVersion = "";
                        for (int i = 0; i < 4; i++)
                        {
                            fpgaVersion += DevVersion.fpgaVersion[i];
                        }
                        String bbuVersion = "";
                        for (int i = 0; i < 4; i++)
                        {
                            bbuVersion += DevVersion.BBUVersion[i].ToString();
                        }
                        String SoftWareVersion = "";
                        for (int i = 0; i < DevVersion.SoftWareVersion.Length; i++)
                        {
                            if (DevVersion.SoftWareVersion[i] != '\0')
                            {
                                SoftWareVersion += DevVersion.SoftWareVersion[i].ToString();
                            }
                        }
                        MessageBox.Show("FPGA版本:" + fpgaVersion + "\n" + "BBU版本 :" + bbuVersion + "\n" + "软件版本 :" + SoftWareVersion + "\n");
                        break;
                    }
                    //case (ushort)COM.ZCTT.AGI.Common.MsgDefine.SendPktType.SEND_DL_SNIFF:

                    default: break;
                    }

                    //if (msgType != 0x8002)//心跳信息
                    //{
                    if (AGIInterface.Class1.OnSaveData != null)
                    {
                        AGIInterface.Class1.OnSaveData(receivedData);
                    }
                    //}
                }
                catch (Exception ex)
                {
                    Console.WriteLine(">>>Message= " + ex.Message + "\r\n StrackTrace: " + ex.StackTrace);
                    break;
                }
            }
        }