VC++ 6.0 C8051F340 USB 通信 CAN 数据解析
- // HelloWorld.cpp : Defines the entry point for the console application.
- //
- /*****************************************************************************
- * VC++ 6.0 C8051F340 USB 通信 CAN 数据解析
- * 声明:
- * 1. 这是在《VC++ 6.0 C8051F340 USB PC侧通信 Demo》的基础上的代码;
- * 2. 由一可知,本文会只注释了相对重要的内容。
- * 3. 本文主要是通过USB获取CAN的数据,并解析出其中的数据。
* 4. 帧格式可以参考:http://wenku.baidu.com/view/f508511d6bd97f192279e902.html- *
- * 2015-7-11 晴 深圳 南山平山村 曾剑锋
- ****************************************************************************/
- #include "stdafx.h"
- #include <windows.h>
- #include <time.h>
- #include "SiUSBXp.h"
- #include <string.h>
- int main(int argc, char* argv[])
- {
- printf("Hello World!\n");
- HANDLE m_hUSBDevice = INVALID_HANDLE_VALUE;
- DWORD dwNumDevices = ;
- SI_GetNumDevices(&dwNumDevices);
- printf("zengjf debug: dwNumDevices = %d.\n", dwNumDevices);
- if ( dwNumDevices == )
- return FALSE;
- if ( SI_Open(, &m_hUSBDevice) == SI_SUCCESS )
- printf("zengjf debug: SI_Open USBDevice success.\n");
- else
- printf("zengjf debug: SI_Open USBDevice fails.\n");
- char testData[] = "zengjf";
- DWORD hasWritten = ;
- DWORD hasRead = ;
- DWORD timeCount = ;
- while ( true ) {
- Sleep();
- // 接收6帧数据就退出程序,作为测试程序,这个量也就差不多了
- if ( timeCount++ > )
- break;
- memset(testData, , sizeof(testData));
- if ( SI_Read( m_hUSBDevice, testData, , &hasRead) == SI_SUCCESS ) {
- printf("zengjf debug: SI_Read USBDevice success, hasRead length = %d.\n", hasRead);
- // 以16进制的形式打印出接收到的一帧数据
- printf("printf all data:\n\t");
- for ( DWORD i = ; i < hasRead; i++ )
- printf(" %02x ", testData[i] & 0xff);
- printf("\n");
- // 判断接收到的数据是远程帧,还是数据帧
- if ( testData[] & ( << ) )
- printf("Frame Format: Remote Frame.\n");
- else
- printf("Frame Format: Data Frame.\n");
- // 输出数据长度
- printf("Frame data length: %d.\n", testData[] & 0xf);
- // 输出是扩展帧,还是标准帧
- if ( testData[] & ( << ) ) {
- printf("Frame Type: Extend Frame.\n");
- // 解析扩展帧的ID
- printf("ID: %X.\n", (((testData[] & 0x0ff) << ) | \
- ((testData[] & 0x0ff) << ) | \
- ((testData[] & 0x0ff) << ) | \
- ((testData[] >> ) & 0x1f)));
- // 将二进制数值转换成字符数字
- for ( DWORD i = ; i < hasRead; i++ )
- testData[i] += '';
- // 显示所有的接收的数据
- printf("zengjf debug: show data from C8051F340 -- testData[ %s ].\n", testData+);
- } else {
- printf("Frame Type: Standard Frame.\n");
- // 解析标准帧的ID
- printf("ID: %X.\n", (((testData[] & 0x0ff) << ) | ((testData[] >> ) & 0x7)));
- // 将二进制数值转换成字符数字
- for ( DWORD i = ; i < hasRead; i++ )
- testData[i] += '';
- // 显示所有的接收的数据
- printf("zengjf debug: show data from C8051F340 -- testData[ %s ].\n", testData+);
- }
- } else {
- printf("zengjf debug: SI_Read USBDevice fails.\n");
- break;
- }
- }
- if ( SI_Close(m_hUSBDevice) == SI_SUCCESS )
- printf("zengjf debug: SI_Close USBDevice success.\n");
- else
- printf("zengjf debug: SI_Close USBDevice fails.\n");
- return ;
- }
VC++ 6.0 C8051F340 USB 通信 CAN 数据解析的更多相关文章
- VC++ 6.0 C8051F340 USB PC侧通信 Demo
// HelloWorld.cpp : Defines the entry point for the console application. // /*********************** ...
- VC++ 6.0 C8051F340 MFC programming note
/************************************************************************************** * VC++ 6.0 C ...
- 使用Wireshark捕捉USB通信数据
USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯.USB接口支持设备的即插即用和热插拔功能 ...
- 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记
VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...
- VC++ 6.0中实现三叉切分窗口与多视图 [转]
一.引用 当用户需要同时对文当的不同部分进行编辑时,常常会用到切分窗口;这些窗口可以都是相同的视,或者一个窗口为列表视,而另一个为树型视图.应用程序框架有多种方式来表示多视图,切分窗口是其中的方式之一 ...
- usb通信小结
2010-07-25 16:52:00 目前了解了usb通信层面的一些基础知识如下.如果有空还要再了解hid报告描述符及协议的数据包波形. 一,USB的一些基本概念 1. 管道(Pipe) 是主机和设 ...
- 基于usb4java实现的java下的usb通信
项目地址:点击打开 使用java开发的好处就是跨平台,基本上java的开发的程序在linux.mac.MS上都可以运行,对应这java的那句经典名言:一次编写,到处运行.这个项目里面有两种包选择,一个 ...
- C8051F340 USB Fn hacking
/************************************************************************************ * C8051F340 US ...
- Windows平台VC++ 6.0 下的网络编程学习 - 简单的测试winsock.h头文件
最近学习数据结构和算法学得有点累了(貌似也没那么累...)...找了本网络编程翻了翻当做打一个小基础吧,打算一边继续学习数据结构一边也看看网络编程相关的... 简单的第一次尝试,就大致梳理一下看书+自 ...
随机推荐
- 《剑指offer》第三十五题(复杂链表的复制)
// 面试题35:复杂链表的复制 // 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复 // 制一个复杂链表.在复杂链表中,每个结点除 ...
- C#中正确使用enum做Key的姿势
C#中自定义enum,然后将其作为Dictionary的Key,通常的做法如下: using System; using System.Text; using System.Collections.G ...
- JPA、SpringData JPA 、Hibernate和Mybatis 的区别和联系
一.JPA 概述 1. Java Persistence API(Java 持久层 API):用于对象持久化的 API 2. 作用:使得应用程序以统一的方式访问持久层 3. 前言中提到了 Hibern ...
- C#实现的UDP收发请求工具类实例
本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...
- IE6不兼容hover已解决
新建一个csshover.htc文件,一下是csshover.htc内容 <public:attach event="ondocumentready" onevent=&qu ...
- stl算法:next_permutation剖析
在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组数据的全排列.但是怎么用,原理如何,我做了简单的剖析. 首先查看stl中相关信息.函数原型: templa ...
- iframe刷新父页面
iframe页面是内嵌到父页面的,当点击iframe页面的服务器控件时,默认只刷新iframe页面,父页面是不会刷新的.若想刷新父页面,可以使用js来实现,如 1. parent.location.r ...
- IOS7 UI设计的十大准则
陈子木 iOS7 的用户界面设计比以往更卓越,并为用户提供了更具吸引力的独特体验,带来更大的机遇.在正式写代码之前,认真考虑UI设计是否符合这十条设计准则,可以提高App的可用性与吸引力.如果要更深入 ...
- AOJ2025 Eight Princes
我们查看更一般的情况,设人数为m 则n < m * 2无解 然后n为奇数的情况: 我们把一个人和一个空格打包,于是剩下m个"人"和n - m个空格,随便排列这些"人 ...
- POJ 1128 拓扑排序 + 深搜
/* (⊙v⊙)嗯 貌似是一个建图 拓扑+深搜的过程.至于为什么要深搜嘛..一个月前敲得题现在全部推了重敲,于是明白了.因为题意要求如果有多个可能的解的话. * 就要输出字典序最小的那个.所以可以对2 ...