15,471
社区成员
发帖
与我相关
我的任务
分享
char* pBits = (char*)::GlobalLock(g_hPictureGlobal); // 锁定同步内存块
if (!pBits) // 锁定失败
{
GlobalUnlock(g_hPictureGlobal);
g_hPictureGlobal = NULL;
AfxMessageBox("Picture Alloc Error!");
}
while (TRUE)
{
int nResult = g_USBPort._USBGetPicFromDSP(pBits, BMP_SIZE); // 从DSP端获取图像数据
g_nIndex++; // 显示图像数目
if (nResult == IO_READ_DATA_FAILED)
{
GlobalUnlock(g_hPictureGlobal);
g_hPictureGlobal = NULL;
AfxMessageBox("_USBGetPicFromDSP Error!");
break;
}
Sleep(1); // 线程暂停
if (!g_bStartThread)
{
GlobalUnlock(g_hPictureGlobal);
g_hPictureGlobal = NULL;
break;
}
}
GlobalUnlock(g_hPictureGlobal);
AfxEndThread(0); // 结束进程
return 0;
}
int CUSBPort::_USBGetPicFromDSP(char* pPicBuffer, ULONG nPicSize)
{
int nResult = 0;
char *pcTemp = pPicBuffer;
ULONG nCountCurrent = 0;
ULONG nLeftSize = nPicSize;
//ULONG nLeftSize = (nPicSize / BLOCKSIZE) * BLOCKSIZE;// 图像整数大小
BOOL bIOStatus = FALSE;
int nBlockIndex = 0;
while (nLeftSize >= BLOCKSIZE)
{
_USBSendCommand(USB_GETPIC); // 发送获取图像命令
// 读取图像数据
bIOStatus = ReadPipe(m_hRead, pcTemp, BLOCKSIZE, &nCountCurrent);
if (!bIOStatus)
return IO_READ_DATA_FAILED;
pcTemp += nCountCurrent;
nLeftSize -= BLOCKSIZE;
if (nResult != OPERATION_PASSED)
return IO_READ_DATA_FAILED;
}
if (nLeftSize > 0)
{
if (!ReadPipe(m_hRead, pcTemp, nLeftSize, &nCountCurrent))
{
return IO_READ_DATA_FAILED;
}
}
return OPERATION_PASSED;
}