tianheiGE 发表于 2014-12-8 22:14:30

EasyARM-iMX283串口虚拟鼠标实现,驱动+应用程序+PC上位机(C#)

RT,买了EasyARM-iMX283的第一版不带触摸有点蛋疼,还非得上电前插上USB鼠标才能移动光标,于是萌生一个想法,如果直接用PC端的鼠标直接控制开发板的指针岂不是很方便{:lol:}

这样也正好可以学习学习,然后查了一些相关资料,把它记下来把





然后就开始折腾了,就这一个想法,前前后后看了两本书,利用下班时间,搞搞停停,弄了三四个月{:sad:}

1、首先是驱动程序,输入设备的驱动程序网上有很多资料,然后依葫芦画瓢,一个很简单的驱动程序就好了,主要实现了加载后自动创建设备节点,然后应用程序就可以通过该节点向驱动

程序写入收到的鼠标信息,驱动程序响应并向上层报告输入事件。需要注意的是输入设备驱动程序需要在QT启动窗口服务前加载,这样QT才能响应到该输入设备报告的事件,具体的介绍在

用户手册中有介绍。让他启动就加载就需要把加载指令写在/etc/rc.d/init.d/start_userapp文件中(用户手册中有介绍),如我的:





2、linux端应用程序,这个程序折腾了我最久,虽然写的时间不是很多,但是为了写他看了很多资料,其中串口的操作部分就是来着论坛。主要实现了两个线程,一个线程用于串口数据的接收,

并把数据处理成一帧一帧放入一个单向链表然后通知主线程来处理数据,接收线程会因为串口没有数据到来而阻塞,主线程会因为事件计数为零而阻塞。主要用到了线程的同步。



3、PC端应用程序,首先这个我是打算用MFC来做的,而且已经做好一点,但后来我的VS2005过期了,找破解方法没成功,还好我有破解版的VS2010,用它打开编译结果各种头文件位置不对找不到

报错,蛋疼。论坛看到C#不错,那就试试把,然后看了两个晚上的MSDN,用起来真是太方便了,自动提示语法错误,并会给出解决方案,太好用了,三四个晚上就把这样一个简单的程序写好了,

主要实现了,通过制定的握手指令自动找出串口并连接。响应窗口的鼠标事件并通过串口发送数据。



写的不太好,主要还是我的一些感受,感兴趣的可以下载源码看下有问题也可在这讨论{:smile:}

第一次在飞思卡尔发帖{:lol:} ,前几天的换的FRDM-KE02Z也到了,感谢飞思卡尔,感谢阿莫站长!

tianheiGE 发表于 2014-12-8 22:17:47

其中的不足还请各位大神多拍砖指点

fengyunyu 发表于 2014-12-8 22:24:58

非单片机,i.mx实战帖,学习!

湛泸骏驰 发表于 2014-12-8 22:44:43

MSDN 这个怎么看,,一直都没有搜到,。能够给个链接。。

liao-ljj 发表于 2014-12-8 22:51:12

最近刚刚够买了287的板子,做工非常棒!比那个友善的2440超值多了,入门文档非常棒!

lzl000 发表于 2014-12-8 22:59:36

不错的想法,楼主多加油

ijlc1314 发表于 2014-12-8 23:09:51

不知道这板子有没有移植好的ucos,想先来点容易点的

jxcylxh 发表于 2014-12-9 00:22:29

你上班很悠哉哦,这个星期过去请你喝茶,{:titter:}

fengyunyu 发表于 2014-12-9 00:44:00

也买过一块EasyARM-iMX283的板子,放着吃灰半年时间了。

kinsno 发表于 2014-12-9 08:13:49

tianheiGE 发表于 2014-12-8 22:17
其中的不足还请各位大神多拍砖指点

这是周立功那个所谓的"零利润"板子吗? 听说反响不太好啊,你这个都玩起来,真心给力;

tianheiGE 发表于 2014-12-9 08:31:07

湛泸骏驰 发表于 2014-12-8 22:44
MSDN 这个怎么看,,一直都没有搜到,。能够给个链接。。

看VS2010的帮助,上微软中国可看在线帮助

tianheiGE 发表于 2014-12-9 08:32:34

jxcylxh 发表于 2014-12-9 00:22
你上班很悠哉哦,这个星期过去请你喝茶,

好啊{:lol:}

tianheiGE 发表于 2014-12-9 08:36:16

kinsno 发表于 2014-12-9 08:13
这是周立功那个所谓的"零利润"板子吗? 听说反响不太好啊,你这个都玩起来,真心给力; ...

是的,就是那块板子。

fengyunyu 发表于 2014-12-9 08:47:26

LZ工作以i.mx之类为主,还是单片机为主?i.mx是自学么?

fengyunyu 发表于 2014-12-9 08:48:42

湛泸骏驰 发表于 2014-12-8 22:44
MSDN 这个怎么看,,一直都没有搜到,。能够给个链接。。

msdn,百度一搜一堆。

songjie 发表于 2014-12-9 09:11:38

Linux果断 收藏, 感谢LZ。

songjie 发表于 2014-12-9 09:14:29

附件1 是shell script 吗?

insmod 模块加载, 不用mknod 节点吗?

还有LZ有没有 Linux上的 串口调试助手 之类的 工具?再谢!

子鱼 发表于 2014-12-9 09:29:08

用过周立功的那块开发板 虽然价格便宜 但不太好用

tianheiGE 发表于 2014-12-9 09:51:01

fengyunyu 发表于 2014-12-9 08:47
LZ工作以i.mx之类为主,还是单片机为主?i.mx是自学么?

我工作搞单片机的,这些多是下班了玩玩

jingyite 发表于 2014-12-9 09:57:01

楼主很厉害,这款开发板支持摄像头吗?

tianheiGE 发表于 2014-12-9 09:57:05

songjie 发表于 2014-12-9 09:14
附件1 是shell script 吗?

insmod 模块加载, 不用mknod 节点吗?


附件一就是普通的文档,创建设备节点我在驱动里面实现的,加载的时候自动创建,linux 上的串口调试助手我也没,也打算学下Qt写个试下

魏茂才MCU 发表于 2014-12-9 09:59:13

楼主厉害,,,

FSL_TICS_ZP 发表于 2014-12-9 10:02:07

楼主很用心,谢谢你的分享,期待你关于FRDM-KE02的经验分享哦!

tianheiGE 发表于 2014-12-9 10:31:09

jingyite 发表于 2014-12-9 09:57
楼主很厉害,这款开发板支持摄像头吗?

有USB HOST接口,所以USB摄像头的话有驱动就行

songjie 发表于 2014-12-9 11:11:21

tianheiGE 发表于 2014-12-9 09:57
附件一就是普通的文档,创建设备节点我在驱动里面实现的,加载的时候自动创建,linux 上的串口调试助手我 ...

艹~公司jiba玩意,不能大块的复制粘贴~
只能一行一行的复制。


看到代码里面的
/*自动创建设备节点文件*/
dev_class = class_create(THIS_MODULE, "vms_class"); /*1.注册设备类/sys/class/vms_class的文件夹*/
if(IS_ERR(dev_class)){
      printk("class_create failed!\r\n");
        ret = PTR_ERR("dev_class");
      goto failure_class_create;
    }

这个代码的作用相同于?

mknod /dev/驱动名字 c major 0

tianheiGE 发表于 2014-12-9 12:20:15

songjie 发表于 2014-12-9 11:11
艹~公司jiba玩意,不能大块的复制粘贴~
只能一行一行的复制。



对的,用shell还需要知道他的设备号,自动创建就不需要事先指定设备号了

kinsno 发表于 2014-12-9 12:47:26

tianheiGE 发表于 2014-12-9 09:51
我工作搞单片机的,这些多是下班了玩玩

不得不说,你的学习劲头保持的不错,我下班了,全部扔以一边,眼不见为净啊;

tianheiGE 发表于 2014-12-9 14:04:28

kinsno 发表于 2014-12-9 12:47
不得不说,你的学习劲头保持的不错,我下班了,全部扔以一边,眼不见为净啊; ...

惭愧,我也是搞搞停停,这么久才现实这样一个简单的想法。

秦天 发表于 2014-12-9 14:05:04

恭喜楼主了 过几天也要学习下飞卡的ARM9了

songjie 发表于 2014-12-9 16:33:26

tianheiGE 发表于 2014-12-9 12:20
对的,用shell还需要知道他的设备号,自动创建就不需要事先指定设备号了

那你代码调试的时候用的什么工具?

tianheiGE 发表于 2014-12-9 19:32:19

songjie 发表于 2014-12-9 16:33
那你代码调试的时候用的什么工具?

就它的调试串口,打印到电脑上

songjie 发表于 2014-12-9 20:45:12

tianheiGE 发表于 2014-12-9 19:32
就它的调试串口,打印到电脑上

printk吗 ,这个有点 慢啊~

tianheiGE 发表于 2014-12-9 20:52:01

songjie 发表于 2014-12-9 20:45
printk吗 ,这个有点 慢啊~

对的,还好把,就打印点数据看下就知道了

qs6361036 发表于 2014-12-9 22:15:28

把USB驱动写好 ,插上鼠标就可以操作QT界面的 。

holts2 发表于 2014-12-9 22:21:11

专业选手,出手就是不一样

fhslh 发表于 2014-12-9 22:33:18

跟楼主一样的板,在吃灰。
说没时间是骗自己,不过工作用不到,学的动力不是很强。
等忙完这段时间再说。先谢谢了

fengyunyu 发表于 2014-12-11 13:34:37

tianheiGE 发表于 2014-12-9 19:32
就它的调试串口,打印到电脑上

是所谓的“GDB Server远程调试”么?

bitcoin2 发表于 2014-12-11 15:12:40

收藏了 飞思卡尔发帖

tianheiGE 发表于 2014-12-11 19:14:39

fengyunyu 发表于 2014-12-11 13:34
是所谓的“GDB Server远程调试”么?

没,还没用过GDB,只是简单的打印下数据

fengyunyu 发表于 2014-12-11 19:53:32

tianheiGE 发表于 2014-12-11 19:14
没,还没用过GDB,只是简单的打印下数据

看网上文章说,用gdb方式可以设断点、查看变量等,不清楚是否能做到像用仿真器调试单片机程序一样?

浪里白条 发表于 2014-12-11 20:03:19

学习了,感谢楼主分享。

qs6361036 发表于 2014-12-11 22:04:37

ijlc1314 发表于 2014-12-8 23:09
不知道这板子有没有移植好的ucos,想先来点容易点的

这么强大的片子 ,不跑ucos ,常用来跑 linux ,wince 或者安卓 。

tianheiGE 发表于 2014-12-11 23:05:47

fengyunyu 发表于 2014-12-11 19:53
看网上文章说,用gdb方式可以设断点、查看变量等,不清楚是否能做到像用仿真器调试单片机程序一样? ...

我也看过一点,断点,单步,查看内存多是可以的,就是没有IDE用着方便吧

ijlc1314 发表于 2014-12-12 08:34:11

qs6361036 发表于 2014-12-11 22:04
这么强大的片子 ,不跑ucos ,常用来跑 linux ,wince 或者安卓 。

linux那些太复杂了

qs6361036 发表于 2014-12-12 15:51:25

ijlc1314 发表于 2014-12-12 08:34
linux那些太复杂了

其实还好 , 没想象中那么复杂 。

ijlc1314 发表于 2014-12-12 15:57:12

qs6361036 发表于 2014-12-12 15:51
其实还好 , 没想象中那么复杂 。

现在都没勇气去学这个了

qs6361036 发表于 2014-12-12 16:00:16

ijlc1314 发表于 2014-12-12 15:57
现在都没勇气去学这个了

有板子的话 ,自动动手一步一步搞 ,就明白啦 。刚开始感觉比较难,不知道从那入门 ,入门就好啦 。

fengyunyu 发表于 2014-12-12 16:07:42

ijlc1314 发表于 2014-12-12 15:57
现在都没勇气去学这个了

你要是定位为把linux内核代码都搞懂的话,可能头发白了都学不会。定位为会写驱动、会写应用程序,和你学单片机软件开发的时间不会差别很大。

ijlc1314 发表于 2014-12-12 16:39:14

qs6361036 发表于 2014-12-12 16:00
有板子的话 ,自动动手一步一步搞 ,就明白啦 。刚开始感觉比较难,不知道从那入门 ,入门就好啦 。 ...

谢谢,现在180,都有点想买块板回来了

ijlc1314 发表于 2014-12-12 16:40:50

fengyunyu 发表于 2014-12-12 16:07
你要是定位为把linux内核代码都搞懂的话,可能头发白了都学不会。定位为会写驱动、会写应用程序,和你学 ...

从没想过看懂源码,最多驱动或应用,现在工作虽然也是软件,不过离Linux太遥远了

fengyunyu 发表于 2020-10-22 10:56:46

大神几天时间搞定C#,厉害!电工果然都是全栈
页: [1]
查看完整版本: EasyARM-iMX283串口虚拟鼠标实现,驱动+应用程序+PC上位机(C#)