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