zoukankan      html  css  js  c++  java
  • 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可以发送了*/
    				}	
    			}
    		}
    	}
    }
    

     先写到这,后面继续:

  • 相关阅读:
    微服务下的持续集成-Jenkins自动化部署GitHub项目
    JDK新特性-Lambda表达式的神操作
    ActiveMQ详细入门教程系列(一)
    程序员必须了解的知识点——你搞懂mysql索引机制了吗?
    面试之后,扼腕叹息。
    哎,这让人抠脑壳的 LFU。
    延迟消息的五种实现方案
    Java实现Kafka生产者和消费者的示例
    Pytorch训练时显存分配过程探究
    Python命令行参数定义及注意事项
  • 原文地址:https://www.cnblogs.com/tao560532/p/2419324.html
Copyright © 2011-2022 走看看