⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 HOST和DSP利用USB通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						bulkControl.pipeNum = 0;					
						package->type = MPEG_ENCODE_PACKAGE;
						package->dataLength = USB_PACKAGE_DATA_LEN;
						for (int j = 0; j < USB_PACKAGE_DATA_LEN; j++)
							usbBuf[USB_PACKAGE_HEADER_LEN + j] = (j % 26) + '9';
						char* data = usbBuf;						
						Sx2BulkdataTrans( &bulkControl,
										   data,
										   USB_BUF_LEN,
										   &recnBytes);						
						theApp.Out("send encode mp4 package. \n");								
						times ++;
						ifdone = true;
					}
					break;
				case DSP_READY:
					if (*type == ACK) {
						theApp.Out("got ack. \n");
						// send encode mp4 package
						// send encode mp4 package by endpoint2
						int dl = USB_PACKAGE_DATA_LEN;
						if (times > 5) {
							ifreturn = true;
							dl = 26;
						}
						bulkControl.pipeNum = 0;					
						package->type = MPEG_ENCODE_PACKAGE;
						package->dataLength = dl;
						for (int j = 0; j < dl; j++)
							usbBuf[USB_PACKAGE_HEADER_LEN + j] = (j % 26) + '!';
						char* data = usbBuf;						
						Sx2BulkdataTrans( &bulkControl,
										   data,
										   length,
										   &recnBytes);						
						theApp.Out("send encode mp4 package. \n");								
						times ++;
						ifdone = true;
					}
					else if (*type == DSP_BUSY) {
						state = DSP_BUSY;
						ifreturn = true;
						ifdone = true;
					}
					break;
				default:
					state = DSP_BUSY;
					i = 0;
				}
			}
			//Sleep(250);
			if (ifreturn)
				break;
		}
	}
	
	/*按默认的配置,读回Endpoint8的数据并显示*/
	int n = 0;
	do {	
		bulkControl.pipeNum = 3;
		buffer = &recievedat[0];
		length = theApp.m_USBbufferlong;
		Sx2BulkdataTrans( &bulkControl,
			buffer,
			length,
			&recnBytes);
		/*显示读回数据*/
		i = 0;
		while (i <= recnBytes - 8) {				
			type = (unsigned int*) (buffer + i);
			i++;				
			
			if (*type == MPEG_DECODED_PACKAGE) {	
				theApp.Out("The data read from the endpiont 8:\n");
				//theApp.Out("The data is odd data.\n");
				for(i += 8; i<recnBytes;i++)
				{
					theApp.Out("%c ", buffer[i]);
				}
				n++;
				// send ack by ENDPOINT 
				bulkControl.pipeNum = 1;					
				package->type = ACK;
				package->dataLength = 0;
				char* data = usbBuf;						
				Sx2BulkdataTrans( &bulkControl,
					data,
					length,
					&recnBytes);						
				theApp.Out("send ack. \n");												
			}
		}
	} while (n < 2);
}

void CMainFrame::OnBulkWrite() 
{
	//BULK数据的写操作
	int i = 0;
	char *buffer;
	char senddat[512] = {0};
    ULONG length;
    BULK_TRANSFER_CONTROL bulkControl;
	int recnBytes = 0;
	/*写Endpoint2*/
	bulkControl.pipeNum = 0;
	for(i = 0;i<512;i++)
	{
		senddat[i] = i;
	}
	buffer = &senddat[0];
	length =theApp.m_USBbufferlong;
	Sx2BulkdataTrans( &bulkControl,
					  buffer,
					  length,
					  &recnBytes);
	/*读回Endpoint6,并显示*/
	bulkControl.pipeNum = 2;
	for(i = 0;i<512;i++)
	{
		senddat[i] = 0;
	}
	buffer = &senddat[0];
	length = theApp.m_USBbufferlong;
	Sx2BulkdataTrans( &bulkControl,
					  buffer,
					  length,
					  &recnBytes);
	/*显示读回数据*/
	theApp.Out("The data send to the endpiont2 is:\n0,1,2,3.......to 0x3f.\n");
	theApp.Out("The data read from the endpiont 6:\n");
	for(i = 0; i<64 ;)
	{
		int j = 0;
		bool drawover = FALSE;
		for(j = 0 ;j<9;j++)
		{
			if(i+j == 63)
			{
				theApp.Out("0x%04x\n",(buffer[i+j]&0xff));
				drawover = TRUE;
				break;
			}
			else
			{
				theApp.Out("0x%04x    ",(buffer[i+j]&0xff));
			}
		}
		if(drawover)
		{
			break;
		}
		i = i +9;
		theApp.Out("0x%04x\n",(buffer[i]&0xff));
		i= i +1;
	}
	/*写Endpoint4*/
	bulkControl.pipeNum = 1;
	for(i = 0;i<theApp.m_USBbufferlong;i++)
	{
		senddat[i] = 0x3F-i;
	}
	buffer = &senddat[0];
	length =theApp.m_USBbufferlong;
	Sx2BulkdataTrans( &bulkControl,
					  buffer,
					  length,
					  &recnBytes);
	/*读回Endpoint6,并显示*/
	bulkControl.pipeNum = 3;
	for(i = 0;i<512;i++)
	{
		senddat[i] = 0;
	}
	buffer = &senddat[0];
	length = theApp.m_USBbufferlong;
	Sx2BulkdataTrans( &bulkControl,
					  buffer,
					  length,
					  &recnBytes);
	/*显示读回数据*/
	theApp.Out("The data send to the endpiont4 is:\n0x3f,0x3e,0x3d.......to 0.\n");
	theApp.Out("The data read from the endpiont 8:\n");
	for(i = 0; i<64 ;)
	{
		int j = 0;
		bool drawover = FALSE;
		for(j = 0 ;j<9;j++)
		{
			if(i+j == 63)
			{
				theApp.Out("0x%04x\n",(buffer[i+j]&0xff));
				drawover = TRUE;
				break;
			}
			else
			{
				theApp.Out("0x%04x    ",(buffer[i+j]&0xff));
			}
		}
		if(drawover)
		{
			break;
		}
		i = i +9;
		theApp.Out("0x%04x\n",(buffer[i]&0xff));
		i= i +1;
	}
}

void CMainFrame::OnLedOn() 
{
	// 点亮LED灯
	/*命令请求定义*/
	char buffer1[64];
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
	ULONG venderlong;
	int recnBytes = 0;
	/*发送命令,使DSP先定入固定的数据*/
	myRequest.direction = 0;
	myRequest.index = 0;
	myRequest.value = LED_ON;
	myRequest.request = VR_LED_OPTION;
	// vendor specific request type (2)
	myRequest.requestType=2; 
    // recepient is device (0)
	myRequest.recepient=0;
	venderlong = 0;
	Sx2SendVendorReq(&myRequest,
					 &buffer1[0],
					 venderlong,
					 &recnBytes);
	theApp.Out("We have turn on the LED D8 on the SEED DEC67XX board.\n");	
}

void CMainFrame::OnLedOff() 
{
	//关掉LED
	/*命令请求定义*/
	char buffer1[64];
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
	ULONG venderlong;
	int recnBytes = 0;
	/*发送命令,使DSP先定入固定的数据*/
	myRequest.direction = 0;
	myRequest.index = 0;
	myRequest.value = LED_OFF;
	myRequest.request = VR_LED_OPTION;
	// vendor specific request type (2)
	myRequest.requestType=2; 
    // recepient is device (0)
	myRequest.recepient=0;
	venderlong = 0;
	Sx2SendVendorReq(&myRequest,
					 &buffer1[0],
					 venderlong,
					 &recnBytes);
	theApp.Out("We have turn off the LED D8 on the SEED DEC67XX board.\n");	
}

void CMainFrame::OnLedBlink() 
{
	// 闪烁LED灯
	/*命令请求定义*/
	char buffer1[64];
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
	ULONG venderlong;
	int recnBytes = 0;
	/*发送命令,使DSP先定入固定的数据*/
	myRequest.direction = 0;
	myRequest.index = 0;
	myRequest.value = LED_BLINK;
	myRequest.request = VR_LED_OPTION;
	// vendor specific request type (2)
	myRequest.requestType=2; 
    // recepient is device (0)
	myRequest.recepient=0;
	venderlong = 0;
	Sx2SendVendorReq(&myRequest,
					 &buffer1[0],
					 venderlong,
					 &recnBytes);
	theApp.Out("We make  the LED D8 on the SEED DEC67XX board blinking.\n");
}

void CMainFrame::OnUsb20or11() 
{
	//得到USB工作在2.0标准,还是1.1标准
	/*命令请求定义*/
	char buffer1[64];
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
	ULONG venderlong;
	int recnBytes = 0;
	/*发送命令,使DSP先定入固定的数据*/
	myRequest.direction = 1;
	myRequest.index = 0;
	myRequest.value = 0;
	myRequest.request = VR_USB_VERION;
	// vendor specific request type (2)
	myRequest.requestType=2; 
    // recepient is device (0)
	myRequest.recepient=0;
	/*传回一个数据长度*/
	venderlong = 1;
	Sx2SendVendorReq(&myRequest,
					 &buffer1[0],
					 venderlong,
					 &recnBytes);
	if(buffer1[0] ==0x55)
	{
		theApp.Out("CY7C68001 is working under USB 2.0!\n");
	}
	else
	{
		if(buffer1[0] ==0x54)
		{
			theApp.Out("CY7C68001 is working under USB 1.1!\n");
		}
		else
		{
			theApp.Out("CY7C68001 is working error!\n");
		}
	}
}

void CMainFrame::OnCodecCircle() 
{
	//CODEC试听
	int i = 0;
	/*命令请求定义*/
	char buffer1[64];
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
	ULONG venderlong;
	int recnBytes = 0;
	/*发送命令,使DSP先写入固定的数据*/
	myRequest.direction = 0;
	myRequest.index = 0;
	myRequest.value = 0;
	myRequest.request = VR_CODEC_CIRCLE;
	// vendor specific request type (2)
	myRequest.requestType=2; 
	// recepient is device (0)
	myRequest.recepient=0;
	venderlong = 0;
	Sx2SendVendorReq(&myRequest,
					 &buffer1[0],
					 venderlong,
					 &recnBytes);
	theApp.Out("The CODEC is runing......\n");
}

void CMainFrame::OnCodecHalt() 
{
	// CODEC 停止
	int i = 0;
	/*命令请求定义*/
	char buffer1[64];
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
	ULONG venderlong;
	int recnBytes = 0;
	/*发送命令,使DSP先写入固定的数据*/
	theApp.m_CodecHalt = TRUE;
	myRequest.direction = 0;
	myRequest.index = 0;
	myRequest.value = 0;
	myRequest.request = VR_CODEC_HALT;
	// vendor specific request type (2)
	myRequest.requestType=2; 
	// recepient is device (0)
	myRequest.recepient=0;
	venderlong = 0;
	Sx2SendVendorReq(&myRequest,
					 &buffer1[0],
					 venderlong,
					 &recnBytes);
	theApp.Out("The CODEC halt!\n");
}


void CMainFrame::OnTestThreads() 
{
	HANDLE hThread[2];
	DWORD dwThreadId[2];
	char *sfile = "D:/pic.jpg";

	hThread[0] = CreateThread(NULL, 0, sendMP4File, sfile, 0, &dwThreadId[0]);
	//hThread[1] = CreateThread(NULL, 0, readDecodedData, dfile, 0, &dwThreadId[1]);	
}

void CMainFrame::OnTestRecvfile() 
{
	HANDLE hThread[2];
	DWORD dwThreadId[2];
	char *dfile = "D:/test.jpg";

	//hThread[0] = CreateThread(NULL, 0, sendMP4File, sfile, 0, &dwThreadId[0]);
	hThread[1] = CreateThread(NULL, 0, readDecodedData, dfile, 0, &dwThreadId[1]);		
}

void CMainFrame::OnTestReset() {	
	DWORD dwThreadId;
	CreateThread(NULL, 0, sysReset, NULL, 0, &dwThreadId);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -