Ejemplo n.º 1
0
        public DWORD InitLoad()
        {
            var pciDevList = PCIE_DeviceList.TheDeviceList();

            //GlobalHost.DependencyResolver.Register(typeof(PCIE_DeviceList), () => pciDevList);

            try
            {
                if (DeviceStatus)
                {
                    return(0);
                }
                DWORD dwStatus = pciDevList.Init(Settings.Default.License);
                if (dwStatus != (DWORD)wdc_err.WD_STATUS_SUCCESS)
                {
                    LogHelper.WriteLog(string.Format("设备初始化异常,错误码:{0}", dwStatus));
                    return(dwStatus);
                }
                LogHelper.WriteLog(string.Format("总发现{0}张设备卡", pciDevList.Count));
                DeviceStatus = true;
                return(dwStatus);
            }
            catch (Exception ex)
            {
                LogHelper.ErrorLog(ex);
                return(1000);
            }
        }
Ejemplo n.º 2
0
 public PCIE_diag()         //默认构造方法
 {
     InitializeComponent(); //pcie_diag 窗口初始化方法
     //实例化委托  delegate ac = new delegate(TraceLog) 那么 ac就代表TraceLog函数
     log = new Log(new Log.TRACE_LOG(TraceLog),
                   new Log.ERR_LOG(ErrLog));       //将log的实现方法传入Log类中
     pciDevList = PCIE_DeviceList.TheDeviceList(); //获取设备列表对象
 }
Ejemplo n.º 3
0
        public void CloseScanDevice()
        {
            var devices = PCIE_DeviceList.TheDeviceList();

            for (int i = 0; i < devices.Count; i++)
            {
                var dev = (PCIE_Device)devices[i];
                dev.WriteBAR0(0, 0x28, 0);
                dev.WriteBAR0(0, 0x10, 0);
            }
        }
Ejemplo n.º 4
0
        public string InitDeviceInfo(int index)
        {
            DeviceChannelList.Clear();
            string desc   = string.Empty;
            var    device = PCIE_DeviceList.TheDeviceList().Get(index);

            for (int i = 0; i < PCIE_DeviceList.TheDeviceList().Count; i++)
            {
                var item = PCIE_DeviceList.TheDeviceList().Get(i);
                DeviceChannelList.Add(item, AddChannel(i));
            }
            DWORD outData = 0;

            device.ReadBAR0(0, 0x00, ref outData);
            if ((outData & 0x10) == 0x10)
            {
                desc += "链路速率:2.5Gb/s\r\n";
            }
            else if ((outData & 0x20) == 0x20)
            {
                desc += "链路速率:5.0Gb/s\r\n";
            }
            else
            {
                desc += "speed judge error/s\r\n";
            }

            outData = (outData & 0xF);
            if (outData == 1)
            {
                desc += "链路宽度:x1";
            }
            else if (outData == 2)
            {
                desc += "链路宽度:x2";
            }
            else if (outData == 4)
            {
                desc += "链路宽度:x4";
            }
            else if (outData == 8)
            {
                desc += "链路宽度:x8";
            }
            else
            {
                desc += "width judge error/s\r\n";
            }
            Clients.Client(Context.ConnectionId).NoticeMessage("已成功获取链路信息!" + "\n");
            return(desc);
        }
Ejemplo n.º 5
0
        public void CloseDma()
        {
            IsStop = true;
            var devices = PCIE_DeviceList.TheDeviceList();

            for (int i = 0; i < devices.Count; i++)
            {
                var dev = (PCIE_Device)devices[i];
                dev.WriteBAR0(0, 0x28, 0);
                dev.WriteBAR0(0, 0x10, 0);
                dev.Status = 0;
            }
            readSize = 0;
        }
Ejemplo n.º 6
0
        /* Close handle to a NEWAMD86 device */
        public bool DeviceClose(int iSelectedIndex)
        {
            readSize = 0;
            //pBoard->pci_e.WriteBAR0(0, 0x10, regval);
            LogHelper.WriteLog(string.Format("断开第{0}张板卡", iSelectedIndex + 1));
            var         devices = PCIE_DeviceList.TheDeviceList();
            PCIE_Device device  = PCIE_DeviceList.TheDeviceList().Get(iSelectedIndex);
            bool        bStatus = false;

            try
            {
                Clients.Client(Context.ConnectionId).NoticeMessage("正在停止数据读取...\n");
                CloseDma();
                Clients.Client(Context.ConnectionId).NoticeMessage("已停止数据读取!\n");
                for (int i = 0; i < devices.Count; i++)
                {
                    var dev = devices.Get(i);
                    if (dev != null)
                    {
                        if (dev.Handle != IntPtr.Zero && !(bStatus = dev.Close()))
                        {
                            string str = "断开设备: 关闭设备失败 (" + dev.ToString(false) + ")";
                            Clients.Client(Context.ConnectionId).NoticeMessage(str);
                            LogHelper.WriteLog(str);
                        }
                        else
                        {
                            dev.Handle          = IntPtr.Zero;
                            dev.ppwDma          = IntPtr.Zero;
                            dev.pReportWrBuffer = IntPtr.Zero;
                            dev.pReportWrDMA    = IntPtr.Zero;
                            dev.pWbuffer        = IntPtr.Zero;
                            bStatus             = true;
                        }
                    }
                }
                if (bStatus)
                {
                    Clients.Client(Context.ConnectionId).NoticeMessage("已成功断开设备!\n");
                }
                return(bStatus);
            }
            catch (Exception ex)
            {
                LogHelper.ErrorLog(ex, "DeviceClose");
                Clients.Client(Context.ConnectionId).NoticeMessage(ex.Message + "close \n");
            }
            return(false);
        }
Ejemplo n.º 7
0
        /* Open a handle to a device */
        public bool DeviceOpen(int iSelectedIndex)
        {
            LogHelper.WriteLog(string.Format("连接第{0}张板卡", iSelectedIndex + 1));
            DWORD       dwStatus = 0;
            var         devices  = PCIE_DeviceList.TheDeviceList();
            PCIE_Device device   = PCIE_DeviceList.TheDeviceList().Get(iSelectedIndex);

            if (device == null)
            {
                return(false);
            }
            /* Open a handle to the device */
            try
            {
                for (int i = 0; i < devices.Count; i++)
                {
                    var dev = devices.Get(i);
                    if (dev != null)
                    {
                        dwStatus = dev.Open();
                        if (dwStatus != (DWORD)wdc_err.WD_STATUS_SUCCESS)
                        {
                            string str = "打开设备: 连接设备失败 (" + dev.ToString(false) + ")\n";
                            Clients.Client(Context.ConnectionId).NoticeMessage(str);
                            LogHelper.WriteLog(str);
                        }
                    }
                }
                Clients.Client(Context.ConnectionId).NoticeMessage("已成功连接设备!\n");
                if (dwStatus > 0)
                {
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.ErrorLog(ex, "DeviceOpen");
                Clients.Client(Context.ConnectionId).NoticeMessage(ex.Message + " open\n");
                return(false);
            }
        }
Ejemplo n.º 8
0
        public string OnReadDma(string dvireName, int dataSize, int deviceIndex)
        {
            //var findDrive = DriveInfo.GetDrives().FirstOrDefault(o => o.Name == dvireName);
            //if (findDrive != null)
            //{
            //    if (findDrive.AvailableFreeSpace < 1024 * 1024 * 1024.0)
            //    {

            //    }
            //}
            int cout = PCIE_DeviceList.TheDeviceList().Count;

            if (cout == 1 && deviceIndex == 1)
            {
                return("");
            }
            PCIE_Device dev = PCIE_DeviceList.TheDeviceList().Get(deviceIndex);

            if (dev == null)
            {
                Clients.Client(Context.ConnectionId).NoticeMessage("设备DMA读取发生异常" + "\n");
                return("设备读取异常,请重试");
            }
            if (dev.Status == 1)
            {
                return("正在读取数据...");
            }
            Clients.Client(Context.ConnectionId).NoticeMessage("正在读取设备数据...\n");
            dev.FPGAReset(0);
            if (dev.WDC_DMAContigBufLock() != 0)
            {
                Clients.Client(Context.ConnectionId).NoticeMessage("锁定内存空间失败..." + "\n");
                //MessageBox.Show(("分配报告内存失败"));
                DeviceClose(0);
                return("锁定内存空间失败");
            }
            //DWORD wrDMASize = dataSize; //16kb
            if (!dev.DMAWriteMenAlloc((uint)0, (uint)1, (UInt32)dataSize * 1024))
            {
                //MessageBox.Show("内存分配失败!");
                Clients.Client(Context.ConnectionId).NoticeMessage("内存分配失败..." + "\n");
                DeviceClose(0);
                return("内存分配失败");
            }
            string dt = DateTime.Now.ToString("yyyyMMddHHmmss");
            // var list = DeviceChannelList[dev];
            //foreach (var item in list)
            //{
            //    var dir = Path.Combine(dvireName, item.DiskPath);
            //    if (!Directory.Exists(dir))
            //    {
            //        Directory.CreateDirectory(dir);
            //    }
            //    var filePath = Path.Combine(dir, dt);
            //    //File.Create(filePath);
            //    item.FilePath = filePath;
            //    if (item.IsOpen)
            //    {
            //        item.Stream = new FileStream(filePath, FileMode.Append, FileAccess.Write);
            //    }

            //}
            var dir = Path.Combine(dvireName, "device" + deviceIndex.ToString());

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            var filePath = Path.Combine(dir, dt);

            dev.DeviceFile = new FileStream(filePath, FileMode.Append, FileAccess.Write);
            dev.StartWrDMA(0);

            //Thread readThread = new Thread(new ParameterizedThreadStart(p =>);
            //readThread.IsBackground = true;
            //readThread.Start();
            Task.Factory.StartNew(new Action(() => OnScanDrive(dev, dvireName, deviceIndex)));
            //Thread nonParameterThread = new Thread(new ParameterizedThreadStart(p => NonParameterRun(dev, dvireName, dataSize, deviceIndex)));
            //nonParameterThread.Start();
            Task.Factory.StartNew(new Action(() => NonParameterRun(dev, dvireName, dataSize, deviceIndex))).ContinueWith(t =>
            {
                dev.DeviceFile.Flush();
                dev.DeviceFile.Close();
                dev.DeviceFile.Dispose();
            });
            return(string.Empty);
        }
Ejemplo n.º 9
0
        public string ScanDevice(int deviceIndex)
        {
            int         count = PCIE_DeviceList.TheDeviceList().Count;
            PCIE_Device dev   = PCIE_DeviceList.TheDeviceList().Get(deviceIndex);

            if (dev == null)
            {
                return("device");
            }
            if (dev.WDCScan_DMAContigBufLock() != 0)
            {
                //MessageBox.Show(("分配报告内存失败"));
                return("device");
            }
            ////DWORD wrDMASize = dataSize; //16kb
            if (!dev.ScanDMAWriteMenAlloc(16 * 1024))
            {
                //MessageBox.Show("内存分配失败!");
                return("device");
            }
            dev.StartWrDMA(0);
            dev.WriteBAR0(0, 0x60, 1);          //中断屏蔽
            dev.WriteBAR0(0, 0x50, 1);          //dma 写报告使能

            var dma    = (WD_DMA)dev.m_dmaMarshaler.MarshalNativeToManaged(dev.pScanReportWrDMA);
            var ppwDma = (WD_DMA)dev.m_dmaMarshaler.MarshalNativeToManaged(dev.pScanpwDma);

            dev.WriteBAR0(0, 0x58, (uint)dma.Page[0].pPhysicalAddr);           //dma 写报告地址
            //设置初始DMA写地址,长度等
            dev.WriteBAR0(0, 0x4, (uint)ppwDma.Page[0].pPhysicalAddr);         //wr_addr low
            dev.WriteBAR0(0, 0x8, (uint)(ppwDma.Page[0].pPhysicalAddr >> 32)); //wr_addr high
            dev.WriteBAR0(0, 0xC, (UInt32)16 * 1024);                          //dma wr size

            dev.WriteBAR0(0, 0x28, 1);
            //int readIndex = 0;
            var dt = DateTime.Now;

            while (true)
            {
                var current = (DateTime.Now - dt).Seconds;
                if (current > 1)
                {
                    break;
                }
                dev.WriteBAR0(0, 0x10, 1);
            }
            dev.WriteBAR0(0, 0x10, 1);

            dev.WriteBAR0(0, 0x28, 0);
            dev.WriteBAR0(0, 0x10, 0);
            //启动DMA
            //       //dma wr 使能
            byte[] tmpResult = new Byte[16 * 1024];
            Marshal.Copy(dev.pScanWbuffer, tmpResult, 0, 16 * 1024);
            LogHelper.WriteLog(string.Format("设备{0}自检返回数据: ", deviceIndex + 1) + CommonHelper.ByteToString(tmpResult));
            var findItem = tmpResult.Where(o => o == 63).Count();

            LogHelper.WriteLog(findItem.ToString());
            //var findItem = barList.FirstOrDefault(o => o != 63);
            if (findItem > 50)
            {
                // scanStr = "设备所有通道自检正常!";
                return(string.Empty);
            }
            else
            {
                string errorStr = deviceIndex == 0 ? "1,2,3" : " 4,5,6";
                var    query    = tmpResult.Where(o => o == 3).Count();
                if (query > 50)
                {
                    errorStr = deviceIndex == 0 ? "2,3" : " 5,6";
                }
                var query1 = tmpResult.Where(o => o == 12).Count();
                if (query1 > 50)
                {
                    errorStr = deviceIndex == 0 ? "1,3" : " 4,6";
                }
                var query2 = tmpResult.Where(o => o == 15).Count();
                if (query2 > 50)
                {
                    errorStr = deviceIndex == 0 ? "3" : " 6";
                    LogHelper.WriteLog(query2.ToString());
                }
                var query3 = tmpResult.Where(o => o == 48).Count();
                if (query3 > 50)
                {
                    errorStr = deviceIndex == 0 ? "1,2" : " 4,5";
                }
                var query4 = tmpResult.Where(o => o == 51).Count();
                if (query4 > 50)
                {
                    errorStr = deviceIndex == 0 ? "2" : " 5";
                }
                var query5 = tmpResult.Where(o => o == 60);

                if (query5.Count() > 50)
                {
                    errorStr = deviceIndex == 0 ? "1" : " 4";
                    LogHelper.WriteLog(query5.ToString());
                }
                //var query6 = tmpResult.Where(o => o == 0);
                //if (query6.Count()==tmpResult.Count())
                //{
                //    errorStr = deviceIndex == 0 ? "1,2,3" : " 4,5,6";
                //}
                //switch (findItem)
                //{
                //    case 3:
                //        errorStr = deviceIndex == 0 ? "1,2" : " 4,5";
                //        break;
                //    case 12:
                //        errorStr = deviceIndex == 0 ? "1,3" : " 4,6";
                //        break;
                //    case 15:
                //        errorStr = deviceIndex == 0 ? "1" : " 4";
                //        break;
                //    case 48:
                //        errorStr = deviceIndex == 0 ? "2,3" : " 5,6";
                //        break;
                //    case 51:
                //        errorStr = deviceIndex == 0 ? "2" : " 5";
                //        break;
                //    case 60:
                //        errorStr = deviceIndex == 0 ? "3" : " 6";
                //        break;
                //    default:
                //        errorStr ="Error";
                //        break;
                //}
                // scanStr += errorStr;
                //  tmpInfo +=errorStr+"";
                return(errorStr);
            }
        }