参考cansend 的方法进行发送can 数据。

    //  我今天参考了 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 发送问题的更多相关文章

  1. Linux SocketCan client server demo hacking

    /*********************************************************************** * Linux SocketCan client se ...

  2. am335x Qt SocketCAN Demo hacking

    /*********************************************************************************** * am335x Qt Soc ...

  3. PHP实现RTX发送消息提醒

    RTX是腾讯公司推出的企业级即时通信平台,大多数公司都在使用它,但是我们很多时候需要将自己系统或者产品的一些通知实时推送给RTX,这就需要用到RTX的服务端SDK,建议先去看看RTX的SDK开发文档( ...

  4. WPF 微信 MVVM 【续】发送部分QQ表情

    今天主要记录的就是发送QQ表情, WPF 微信 MVVM里写了,后期为了发送QQ表情,需要把TextBox替换为RichTextBox,接下来就说说替换的过程. 一.支持Binding的RichTex ...

  5. [转]利用URLConnection来发送POST和GET请求

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

  6. RestTemplate发送请求并携带header信息

    1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new Http ...

  7. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  8. C#发送邮箱

    之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了. 之后有整理了一下,写了一个类.直接给类传递信息,就可以发送了. 这里还需要说明的是,发送邮箱需要开通POP3/S ...

  9. XAMARIN.ANDROID SIGNALR 实时消息接收发送示例

    SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...

随机推荐

  1. PHP实现双向链表、栈

    前期写过一个PHP实现单向链表.实现排序单向链表的一篇文章,传送门:http://www.cnblogs.com/yydcdut/p/3777760.html.双向链表写过了,再拿出来提一提:http ...

  2. HTML-<a>标签添加下划线

    <a href="ddrb/090630.asp" target="_blank" style="text-decoration:underli ...

  3. getActivity nullPointerException

    今天突然出现一个问题. Fragment中getActivity突然不能了,会出现空指针问题.最后也不知道是什么原因引起的. 解决的方法: @Override public void onAttach ...

  4. OpenStack 部署总结之:单节点icehouse网桥的配置

    部署完icehouse,安装完实例之后.假设虚拟主机须要和外部进行通信.还须要对宿主机的网桥进行配置 宿主机的配置 改动ifcfg-em1的内容为下面内容: DEVICE=em1 ONBOOT=yes ...

  5. 2014年七月最佳jQuery插件荟萃

    本月的jQuery插件荟萃我们将介绍几款非常不错的jQuery插件,涵盖了表单,幻灯,页面设计等等方面,相信大家肯定会喜欢! Select or Die 一款帮助开发者美化并且强化选择框的jQuery ...

  6. cocos2d-x eclipse + NDK 自动编译配置

    文章来自:http://www.cocos2dres.com/view.asp?id=90 1. 准备工作: android NDK    r8版本 ADT Bundle 下载地址:http://de ...

  7. Android 4.4 KitKat 支持 u 盘功能

    Android U 盘功能实现和分析 u 盘功能实现结果: u 盘会当成 usb storage 在 Settings Storage 里面显示. 准备工作 内核需支持 usb host,需支持 FU ...

  8. Web应用程序项目OxiteSite已配置为使用IIS.在本地计算机上找不到服务器

    今天还是没事干(我的博客还想都是以这句话开始的),看看小组里边的文章Oxite初探.下载Oxite的41500版本,打开后遇到这样的问题.如下图所示 解决方法: 1.邮件点击OxiteSite项目,选 ...

  9. spark 学习(二) RDD及共享变量

    声明:本文基于spark的programming guide,并融合自己的相关理解整理而成      Spark应用程序总是包括着一个driver program(驱动程序),它运行着用户的main方 ...

  10. Unity3D动画面板编辑器状态属性对照表

    不推荐用AnimationUtility.SetEditorCurve问题很多,推荐AnimationCurve.AddKey.通过AnimationUtility.GetAllCurves可以获得编 ...