USB数据通信笔记一

在调试的时候一共只能传64个字节的数据,但是要求是传输300个字节。

unsigned char SetSourceDataArray()
{
	u8 i = 0, j = 0;
	if( OutReport[0] == 0x01 )
	{
		OutReport[0] = 0x00;
		////////////////////////////第一帧////////////////////////////////////////
		//帧头0x00 0x01 0x02 0x01
		for( i = 0; i < 3; i++ )
		{
			InReport[i] = i;
		}
		InReport[3] = 1;//这个表示原始数据中的第一帧60个字节
		
		//第一帧的60个数据
		for( i = 4, j = 0; i < 64; i++, j++)
		{
			InReport[i] = SourceDataArrayA[j];
		}
		return 1;//格式化后马上返回1表示USB可以发送数据了
	}
	else if( OutReport[0] == 0x02 )
	{
		OutReport[0] = 0x00;
		/////////////////////////////第二帧///////////////////////////////////////
		//帧头0x00 0x01 0x02 0x02
		for( i = 0; i < 3; i++ )
		{
			InReport[i] = i;
		}
		
		InReport[3] = 2;//这个表示原始数据中的第二帧60个字节
		//第二帧的60个数据
		for( i = 4, j = 60; i < 64; i++, j++ )
		{
			InReport[i] = SourceDataArrayA[j];
		}
		
		return 1;//格式化后马上返回1表示USB可以发送数据了

	}
	else if( OutReport[0] == 0x03 )
	{
		OutReport[0] = 0x00;
		//////////////////////////////第三帧//////////////////////////////////////
		//帧头0x00 0x01 0x02 0x03
		for( i = 0; i < 3; i++ )
		{
			InReport[i] = i;
		}
		InReport[3] = 3;//这个表示原始数据中的第二帧60个字节
		//第二帧的60个数据
		for( i = 4, j = 120; i < 44; i++, j++ )
		{
			InReport[i] = SourceDataArrayA[j];//SourceDataArrayA中40个数据
		}
		for( i = 44, j = 0; i < 64; i++, j++)
		{
			InReport[i] = SourceDataArrayB[j];//SourceDataArrayB中20个数据
		}
		return 1;
	}
	else if( OutReport[0] == 0x04 )
	{
		OutReport[0] = 0x00;
		//////////////////////////////第四帧///////////////////////////////////////////////
		//帧头0x00 0x01 0x02 0x04
		for( i = 0; i < 3; i++ )
		{
			InReport[i] = i;
		}
		InReport[3] = 4;//这个表示原始数据中的第二帧60个字节
		//第二帧的60个数据
		for( i = 4, j = 20; i < 64; i++, j++ )
		{
			InReport[i] = SourceDataArrayB[j];
		}
		return 1;
	}
	else if( OutReport[0] == 0x05 )
	{
		OutReport[0] = 0x00;
		//////////////////////////////第五帧///////////////////////////////////////////////
		//帧头0x00 0x01 0x02 0x05
		for( i = 0; i < 3; i++ )
		{
			InReport[i] = i;
		}
		InReport[3] = 5;//这个表示原始数据中的第二帧60个字节
		//第二帧的60个数据
		for( i = 4, j = 80; i < 64; i++, j++ )
		{
			InReport[i] = SourceDataArrayB[j];
		}
		return 1;
	}
	else
		return 0;
}

 上面这段代码就是为了将300个字节分割开来。

下面这部分是主函数:

	u8 xyData, DiffData, SourceData;//初始化三种数据的地址写的数据

	xyData = 0;//读取坐标值时往0x07111写0
	DiffData = 1;//读差值,往0711写1
	SourceData = 1;

	////////////////////////////////////////////////////////
	InitBorad();//整版初始化

	////////////////////////////////////////////////////////
	while(1)
	{
		/*检测到设备则开始*/
		Start_Gt818();
		GT818_Init();
		GT818_CheckOk();
		GT818_WriteBytes(ConfigData, 0x06a2, 106 );//写配置信息

		
		//GT818_WriteBytes(&DiffData, 0x0711, 1); //读取差值数据之前先往0x0711写1
		GT818_WriteBytes(&SourceData, 0x0711, 1);   //读取差值数据之前先往0x0711写0

		while(1)
		{
			if( int_flag == 1 )
			{
				if( SourceDataFlag == 0 )
				{
					Start_Gt818();	
					GT818_ReadBytes( SourceDataArrayA, 0x0880, 160 );/*前面160个*/
					GT818_ReadBytes( SourceDataArrayB, 0x09c0, 140 );/*后面140个*/
					End_Gt818();
					delay_x_ms( 20 );
					SourceDataFlag = 1;/*表示300个原始数据全部接收
										完毕通知USB可以发送了*/
				}	
			}
		}
	}
}

 先写到这,后面继续:

原文地址:https://www.cnblogs.com/tao560532/p/2419324.html