imx6 socketcan 发送问题
参考cansend 的方法进行发送can 数据。
cansend 的生成,请查考:http://www.cnblogs.com/chenfulin5/p/6797756.html
cansend 代码跟踪:
// 我今天参考了 NXP 官网,用了旧一版的 libsocket, 但是我觉得总体上来说变话是没有的。
// 参考: https://community.nxp.com/docs/DOC-1437
// 进入 canutils-4.0.6 目录
// 在 src 目录下, 可以看到 cansend.c
vim src/cansend.c
// 直接看到 main 函数
48 int main(int argc, char **argv)
49 {
// 默认的一些参数
56 int family = PF_CAN, type = SOCK_RAW, proto = CAN_RAW;
58 int s, opt, ret, i, dlc = 0, rtr = 0, extended = 0;
// ... ...
// 这里直接是获取了所有的参数并解析它
75 while ((opt = getopt_long(argc, argv, "hf:t:p:vi:lre", long_options, NULL)) != -1) {
76 switch (opt) {
77 case 'h': // 打印帮助信息
78 print_usage(basename(argv[0]));
79 exit(0);
80
81 case 'f': // 家族
82 family = strtoul(optarg, NULL, 0);
83 break;
84
85 case 't': // 类型
86 type = strtoul(optarg, NULL, 0);
87 break;
88
89 case 'p': // 协议
90 proto = strtoul(optarg, NULL, 0);
91 break;
92
93 case 'v': // 打印发送的数据
94 verbose = 1;
95 break;
96
97 case 'l': // 循环次数
98 if (optarg)
99 loopcount = strtoul(optarg, NULL, 0);
100 else // 或是是无数次
101 infinite = 1;
102 break;
103 case 'i': // 指定接口 -ican0
104 frame.can_id = strtoul(optarg, NULL, 0);
105 break;
106
107 case 'r': // 指定是否是远程帧
108 rtr = 1;
109 break;
110
111 case 'e': // 扩展帧
112 extended = 1;
113 break;
114
115 case VERSION_OPTION: // 打印版本信息
116 printf("cansend %s\n", VERSION);
117 exit(0);
118
119 default:
120 fprintf(stderr, "Unknown option %c\n", opt);
121 break;
122 }
123 }
// ... ...
134 interface = argv[optind]; // 指定接口, 这里的话第一个参数应该是要 -i 指定接口
// ... ...
139 s = socket(family, type, proto); // 申请一个套接字,我引用了这里
140 if (s < 0) {
141 perror("socket");
142 return 1;
143 }
// 指定家族
145 addr.can_family = family;
146 strcpy(ifr.ifr_name, interface);
147 if (ioctl(s, SIOCGIFINDEX, &ifr)) {
148 perror("ioctl");
149 return 1;
150 }
151 addr.can_ifindex = ifr.ifr_ifindex;
// ... ... 绑定
153 if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
154 perror("bind");
155 return 1;
156 }
// 数据, 数据包的大小, 我修改了这里,这里我直接获取了qt界面上一个text 的属性。
158 for (i = optind + 1; i < argc; i++) {
159 frame.data[dlc] = strtoul(argv[i], NULL, 0);
160 dlc++;
161 if (dlc == 8)
162 break;
163 }
164 frame.can_dlc = dlc;
// 扩展帧
167 if (extended) {
168 frame.can_id &= CAN_EFF_MASK;
169 frame.can_id |= CAN_EFF_FLAG;
170 } else {
171 frame.can_id &= CAN_SFF_MASK;
172 }
// 远程帧, 远程帧是没有数据发送的请注意
174 if (rtr)
175 frame.can_id |= CAN_RTR_FLAG;
// 这里是判断是否循环, 我参考了这里只发了一次,把循环条件去掉了。
185 while (infinite || loopcount--) {
186 ret = write(s, &frame, sizeof(frame));
187 if (ret == -1) {
188 perror("write");
189 break;
190 }
191 }
// 关闭套接字
193 close(s);
194 return 0;
195 }
imx6 socketcan 发送问题的更多相关文章
- Linux SocketCan client server demo hacking
/*********************************************************************** * Linux SocketCan client se ...
- am335x Qt SocketCAN Demo hacking
/*********************************************************************************** * am335x Qt Soc ...
- PHP实现RTX发送消息提醒
RTX是腾讯公司推出的企业级即时通信平台,大多数公司都在使用它,但是我们很多时候需要将自己系统或者产品的一些通知实时推送给RTX,这就需要用到RTX的服务端SDK,建议先去看看RTX的SDK开发文档( ...
- WPF 微信 MVVM 【续】发送部分QQ表情
今天主要记录的就是发送QQ表情, WPF 微信 MVVM里写了,后期为了发送QQ表情,需要把TextBox替换为RichTextBox,接下来就说说替换的过程. 一.支持Binding的RichTex ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- RestTemplate发送请求并携带header信息
1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new Http ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- C#发送邮箱
之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了. 之后有整理了一下,写了一个类.直接给类传递信息,就可以发送了. 这里还需要说明的是,发送邮箱需要开通POP3/S ...
- XAMARIN.ANDROID SIGNALR 实时消息接收发送示例
SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...
随机推荐
- 文件及文件夹更改通知/监测软件TheFolderSpy
TheFolderSpy是Windows环境下一个监测文件(夹)更改,删除,创建,重命名的绿色免安装小软件,并在文件及文件夹有更改时发送Email通知管理者 该软件使用.Net开发,所以需要安装.Ne ...
- 转:Mac OS X下Sublime Text (V2.0.1)破解
Mac OS X下Sublime Text (V2.0.1)破解 Mac OS X下Sublime Text (V2.0.1)破解 (2013-03-07 14:02:54) 转载▼ 正版的买 ...
- 缓存jQuery对象来提高性能
jQuery使元素的选择变得异常简单,这也是它快速流行起来的一大原因,如果你看刚刚开始使用jQuery朋友写的代码时,会发现很多数人写的代码都在滥用jQuery选择器. 如果你发现同一元素被查找多 ...
- android.content.res.Resources$NotFoundException: String resource ID #0x0
仔细检查是不是在settext的时候设置进去的时int属性的值,所以android会认为这是在strings中的值,所以会拿着这个int值当做string的id值去找,结果当然是找不到的.
- SQL语言 之 SQL概述
SQL(Structured Query Language)语言,自1987年6月被国际标准化组织采纳为国际标准,SQL语言成为关系数据库的标准语言. SQL语言是关系数据库操作的基础语言,将数据查询 ...
- SyntaxError: Non-UTF-8 code starting with '\xc5' in file t.py on line 3,but no encoding declared;see http://python.org/dev/peps/pep-0263/ for details
解决方案是: 在程序最上面加上:# coding=gbk 这样程序就可以正常运行了.
- Hbase总结(八)Hbase中的Coprocessor
1.起因(Why HBase Coprocessor) HBase作为列族数据库最常常被人诟病的特性包含:无法轻易建立"二级索引",难以运行求和.计数.排序等操作.比方,在旧版本 ...
- SQL Server Management Studio 简单使用说明
1.对数据库中的数据生成脚本 a.选中要生成脚本的数据库右键->任务->生成脚本(如下图)->下一步->下一步->选中你想要生成的内容->下一步->完成
- Python 小程序,对文件操作及其它
以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...
- JDBC 元数据信息 getMetaData()
数据库元数据信息: import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLExcept ...