欢迎来到天天文库
浏览记录
ID:48452991
大小:88.72 KB
页数:16页
时间:2020-01-31
《Android 串口编程原理和实现方式(附源码).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、提到串口编程,就不得不提到JNI,不得不提到JavaAPI中的文件描述符类:FileDescriptor。下面我分别对JNI、FileDescriptor以及串口的一些知识点和实现的源码进行分析说明。这里主要是参考了开源项目android-serialport-api。 串口编程需要了解的基本知识点:对于串口编程,我们只需对串口进行一系列的设置,然后打开串口,这些操作我们可以参考串口调试助手的源码进行学习。在Java中如果要实现串口的读写功能只需操作文件设备类:FileDescriptor即可,
2、其他的事都由驱动来完成不用多管!当然,你想了解,那就得看驱动代码了。这里并不打算对驱动进行说明,只初略阐述应用层的实现方式。 (一)JNI: 关于JNI的文章网上有很多,不再多做解释,想详细了解的朋友可以查看云中漫步的技术文章,写得很好,分析也很全面,那么在这篇拙文中我强调3点: 1、如何将编译好的SO文件打包到APK中?(方法很简单,直接在工程目录下新建文件夹libs/armeabi,将SO文件Copy到此目录即可) 2、命名要注意的地方?(在编译好的SO文件中,将文件重命名为:libfi
3、lename.so即可。其中filename.so是编译好后生成的文件) 3、MakeFile文件的编写(不用多说,可以直接参考package/apps目录下用到JNI的相关项目写法) 这是关键的代码:[cpp] viewplaincopy1. int fd; 2. speed_t speed; 3. jobject mFileDescriptor; 4. 5. /* C
4、heck arguments */ 6. { 7. speed = getBaudrate(baudrate); 8. if (speed == -1) { 9. /* TODO: throw an exception */ 10. LOGE("Invalid baudrate"); 11.
5、 return NULL; 12. } 13. } 14. 15. /* Opening device */ 16. { 17. jboolean iscopy; 1. const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy); 2.
6、 LOGD("Opening serial port %s with flags 0x%x", path_utf, O_RDWR
7、 flags); 3. fd = open(path_utf, O_RDWR
8、 flags); 4. LOGD("open() fd = %d", fd); 5. (*env)->ReleaseStringUTFChars(env, path, path_utf);
9、 6. if (fd == -1) 7. { 8. /* Throw an exception */ 9. LOGE("Cannot open port"); 10. /* TODO: throw an exception */ 11. retur
10、n NULL; 12. } 13. } 14. 15. /* Configure device */ 16. { 17. struct termios cfg; 18. LOGD("Configuring serial port"); 19. if (tcgetattr(fd, &cfg)) 20.
此文档下载收益归作者所有