EZ驱动下读写代码


void CCYDEMODlg::OnWrtest(LONG nTestCount)
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE);
 PUCHAR outBuffer = NULL;
 BULK_TRANSFER_CONTROL   outBulkControl;//inBulkControl,
 
 HANDLE hOutDevice=NULL;
 char output[256];

 LONG mTotal=512; //дµÄ×Ö½ÚÊý,Ò»¸öÊý¾Ý°ü´óСΪ512×Ö½Ú

 UpdateData(TRUE);

 if (!OnSetOutDir())
    {
  free(outBuffer);
  CloseHandle(hOutDevice);
  return ;
    }

 if (bOpenDriver (&hOutDevice, m_strName.GetBuffer(m_strName.GetLength())) != TRUE)
    {
  CloseHandle(hOutDevice);
  return ;
    }

 outBuffer=(PUCHAR) malloc(mTotal);
 srand(mTotal);
 for(LONG i=0;i<mTotal;i++)
  outBuffer[i]=(BYTE)i;

 BOOLEAN status=FALSE;
 ULONG BytesReturned=0;
 outBulkControl.pipeNum=0;//¶ËµãÑ¡ÔñEP2

 if (nTestCount>2) nTestCount=2; //FPGA¿ªµÄFIFOÖ»ÓÐ1024¡Á16BITS

 for( i=0;i<nTestCount;i++)//¶à´ÎÑ­»·²âÊÔ
 {
  
  status =  DeviceIoControl (hOutDevice,
   IOCTL_EZUSB_BULK_WRITE,
   (PVOID)&outBulkControl,
   sizeof(BULK_TRANSFER_CONTROL),
   outBuffer,//Êä³ö»º³åÇø
   mTotal,//×Ö½ÚÊý
   &BytesReturned,//·µ»Ø×Ö½ÚÊý¾Ý
   NULL);    
 } 
 if(status==TRUE)
 {
  sprintf( output,"²âÊԳɹ¦£¡/r/n¹²·¢ËÍ%03d×Ö½Ú", mTotal );
  m_strTestDisplay=output;  
//Èç¹ûFPGAÖеĶÁµØÖ·ºÍдµØÖ·Ò»Ñù£¬»¹½øÐжÁ²Ù×÷£¬³ÌÐò»áËÀµô£¡
  if (m_FifoWrRdNum>=1000)
  {
   m_FifoWrRdNum = 1000;
  }
  else
  {
   m_FifoWrRdNum++;
  }
 }
 else
 {
  m_strTestDisplay+="²âÊÔʧ°Ü£¡/r/n";
 }
 
 //¹Ø±ÕÉ豸
 free(outBuffer);
 CloseHandle(hOutDevice);
 UpdateData(FALSE);
}

void CCYDEMODlg::OnRdtest(LONG nTestCount)
{
 // TODO: Add your control notification handler code here
 PUCHAR outBuffer = NULL;
 BULK_TRANSFER_CONTROL   inBulkControl;//,outBulkControl
 THREAD_CONTROL  inThreadControl;//,outThreadControl
 HANDLE hInDevice=NULL;

 HANDLE ReadCompleteEvent;
// ReadCompleteEvent = CreateEvent(0,FALSE,FALSE,NULL);

 char output[256];

//Èç¹ûFPGAÖеĶÁµØÖ·ºÍдµØÖ·Ò»Ñù£¬»¹½øÐжÁ²Ù×÷£¬³ÌÐò»áËÀµô£¡
 if (m_FifoWrRdNum<1)
 {
  m_FifoWrRdNum=0;
  AfxMessageBox("          »¹Ã»Ð´ÈëÊý¾Ý/r/n/r/n»òÕßдÈëµÄÊý¾ÝÒѱ»¶Á×ߣ¬²»ÄÜÔÙ±»¶Á³ö£¡");
  free(outBuffer);
  CloseHandle(hInDevice);
  return ;
 }

 UpdateData(TRUE);

 if (!OnSetInDir())
    {
  free(outBuffer);
  CloseHandle(hInDevice);
  return ;
    }

 if (bOpenDriver (&hInDevice, m_strName.GetBuffer(m_strName.GetLength())) != TRUE)
    {
  CloseHandle(hInDevice);
  return ;
    }

 outBuffer=(unsigned char*)malloc(nTestCount*512*1);

 inBulkControl.pipeNum=1;  //¶ËµãÑ¡ÔñEP6
 inThreadControl.hDevice=hInDevice;
 inThreadControl.Ioctl=IOCTL_EZUSB_BULK_READ;
 inThreadControl.InBuffer=(void*)&inBulkControl;
 inThreadControl.InBufferSize=sizeof(BULK_TRANSFER_CONTROL);
 inThreadControl.OutBuffer=outBuffer;
 inThreadControl.OutBufferSize= 512*1;
 inThreadControl.status=FALSE;
 inThreadControl.BytesReturned=0;
 inThreadControl.completionEvent=ReadCompleteEvent;

 DWORD s;

 for( LONG i=0;i<nTestCount;i++)//¶à´ÎÑ­»·²âÊÔ
 {
  inThreadControl.OutBuffer=outBuffer+i*512*1;
  WaitForSingleObject( CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)TransferThread, (LPVOID)&inThreadControl,(DWORD)0,&s),INFINITE); 
  
  for (int j=0;j<512;j++)
  {
   Drawdatabuf[j] = outBuffer[i*512*1+j];
  }
  OnDraw();
  Sleep(100);
//Èç¹ûFPGAÖеĶÁµØÖ·ºÍдµØÖ·Ò»Ñù£¬»¹½øÐжÁ²Ù×÷£¬³ÌÐò»áËÀµô£¡
  m_FifoWrRdNum--;
 }

 if(inThreadControl.status)
 {
  sprintf( output,"²âÊԳɹ¦£¡/r/n¹²½ÓÊÕ%03d×Ö½Ú", nTestCount*512*1 );
  m_strTestDisplay=output;  
 }
 else
 {
  m_strTestDisplay+="²âÊÔʧ°Ü/r/n";
 }

 //¹Ø±ÕÉ豸
 free(outBuffer);
 CloseHandle(hInDevice);
 UpdateData(FALSE);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值