• 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可以发送了*/
    				}	
    			}
    		}
    	}
    }
    

     先写到这,后面继续:

  • 相关阅读:
    美团霸面---我想说说心里话。
    docker在ubuntu14.04下的安装笔记
    ubuntu14.04 upgrade出现【Ubuntu is running in low-graphics mode】问题的一个解决办法
    Python2和Python3在windows下共存
    Python发送邮件
    Python在安装第三方模块遇到的问题及解决办法
    127.0.0.1和localhost完全相等吗?
    vim总结
    linux shell学习笔记
    Jenkins +JUnit
  • 原文地址:https://www.cnblogs.com/tao560532/p/2419324.html
Copyright © 2020-2023  润新知