参考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. 《java 语言程序设计》第2章编程练习

    2.1 public class test { public static void main(String[] args) { Scanner input = new Scanner(System. ...

  2. JAVA , TOMCAT , AXIS2 环境变量配置

    想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 安装JDK 向导进行相关参数设置.如图: 正在安装程序的相关功能,如图: 选择安装的路径,可以自定义,也可以默认路径.如图: 成 ...

  3. 根据WSDL文件生成代理类

    D:\Program Files\Microsoft Visual Studio 10.0\VC>wsdl  /l:c#  /n:cmsserver  /out:E:\ospsoft\Trave ...

  4. Transformer中引用iqd作为数据源导入报错TR1907与TR3312

    好久没和transform接触了,初次接触就给我送了个大礼,在选择好iqd文件执行最后一步导入的时候,要求我对数据源输入用户名密码,我连续输入了三次用户名和密码,在我十分肯定用户名和密码没错的情况下, ...

  5. k-means聚类算法C++实现

    原文:http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069594.html Clustering 中文翻译作“聚类”,简单地说就是把相似的东 ...

  6. MySQL之myisamchk

    Description, check and repair of MyISAM tables.Used without options all tables on the command will b ...

  7. MySQL中的锁、隔离等级和读场景

    一.导言 关于MySQL中的锁还有隔离等级这类话题,其概念性的解释早已泛滥.记住其概念,算不上什么.更重要的是思考:他们的区别和联系在哪儿,为什么会有这样的概念. 1)MySQL的锁(Lock)分为行 ...

  8. 数据库选型之MySQL(固态硬盘)

    刘勇    Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库 ...

  9. panel,dialog,window组件越界(超出范围)问题汇总

    参考地址 之前分别写过panel,dialog,window三个组件因为拖曳或者reSize造成组件越界而无法还原的问题,两篇文章分别针对拖曳和reSize给出了解决方案.不过根据朋友的反馈,reSi ...

  10. Linux下将/TMP和/Var移动到共享分区

    2007-03-09 03:25:08    整理数据 首先,必须创建一个新分区专门用于存储频繁修改的文件.您可能希望将这个分区置于单独的磁盘上以增强性能.接下来,我将逐步说明将 /tmp 和 /va ...