您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 如何实现Android串口调试助手_华清远见
如何实现Android串口调试助手本篇文章带来的内容是如何实现Android串口调试助手,相信会给你带来不一样的感受。首先我们需要了解串行接口(SerialInterface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。日常中的很多设备都是通过串口来传输数据的。所以,本项目在安卓的平台上,建立了一个通过串口来收发数据的平台。用户可以通过设定不同的参数来连接不同的串口。第1章使用说明软件共分为三个部分:数据接收区,数据发送区,参数设置区。使用之前需要设置参数:需要打开的设备文件和打开的波特率。点击Open就可以打开串口,如果这时候串口有数据过来,就可以在左侧显示出来,同时可以设定是否以十六进制显示数据。如果想要向串口发送数据,在下方输入数据,点击Send就可以发送。第2章环境搭建2.1Android开发环境的安装与配置Android应用软件开发需要的开发环境在路径“光盘\Android应用开发环境\”下:JDK:JDK\JDK8\jdk-8u5-windows-i586.exe(32bit)或者jdk-8u5-windows-x64.exe(64bit)(从JDK8.0开始不支持WindowsXP操作系统,使用WindowsXP的用户可以使用JDK7目录下的内容)ADT:adt-bundle-windows-x86.7z(32bit)或者adt-bundle-windows-x86_64.7z(64bit)以下主要介绍在Windows环境下搭建Android开发环境的步骤和注意事项。2.2安装JDK和配置Java开发环境双击JDK\JDK8\jdk-8u5-windows-i586.exe(32bit操作系统)或者jdk-8u5-windows-x64.exe(64bit操作系统)进行安装(从JDK8.0开始不支持WindowsXP操作系统,使用WindowsXP的用户可以使用JDK7目录下的内容选择代替JDK8目录下的内容)。接受许可证,选择需要安装的组件和安装路径后,单击“下一步”按钮,完成安装过程。安装完成后,利用以下步骤检查安装是否成功:打开WindowsCMD窗口,在CMD窗口中输入java–version命令,如果屏幕出现下图所示的代码信息,说明JDK安装成功。XP下安装JDK7如下:非XP下安装JDK8如下:2.3解压adt-bundle-windowsJDK安装成功后,使用软件解压ADT目录下的adt-bundle-windows-x86.7z(32bit)或者adt-bundle-windows-x86_64.7z(64bit)。注意:解压路径不包含中文;2.4运行Eclipse解压完毕后,直接执行其中的eclipse\eclipse.exe文件,Eclipse可以自动找到用户前期安装的JDK路径。2.5配置Eclipse运行解压目录下的eclipse\eclipse.exe,为自己选择一个工作目录Workspace,不要有中文路径,不选择默认也可以。需要为Eclipse关联SDK的安装路径,即解压路径下的sdk目录。在Eclipse中,点击Window-Preferences,会看到其中添加了Android的配置,按图所示的操作,然后点击Apply,最后点击OK即可。完成以上步骤后,设置Eclipse环境勾选Android相关的工具,点击OK(如果已经勾选,则不理会)。第3章NDK环境配置3.1安装NDK工具包安装包已经放到“华清远见开发环境”光盘当中,名字为“android-ndk-r10d-windows-x86”,这个是针对32位系统使用的工具包,如果有64位的需求可以到我们提供的网盘上进行下载。将安装包拷贝到E:盘,双击程序即可在当前路径进行安装。3.2配置Eclipse打开Eclipse,点Window-Preferences-Android-NDK,设置NDK路径,例如E:\android-ndk-r10d新建一个Android工程,在工程上右键点击AndroidTools-AddNativeSupport...,然后给我们的.so文件取个名字,例如:my-ndk这时候工程就会多一个jni的文件夹,jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDK工程的Makefile,my-ndk.cpp就是NDK的源文件。完成了,然后运行。运行之前先编译NDK,然后在编译JAVA代码。编译也许会遇到Unabletolaunchcygpath.IsCygwinonthepath等问题?如何解决?如下:工程右键,点Properties-C/C++Build的BuildingSettings中去掉Usedefaultbuildcommand,然后输入${NDKROOT}/ndk-build.cmd在C/C++Build中点击Environment,点Add...添加环境变量NDKROOT,值为NDK的根目录接着,按照如下图所示的位置,根据使用的SDK的版本的不同选择不同的头文件包,例如如果使用的是android4.0.3的话,就选择:E:\android-ndk-r10d\platforms\android-15\arch-arm\usr\include之后,再次编译运行工程,即可成功。第1章源码编译1.1导入源码打开Eclipse环境,选择File-Import。然后,导入光盘资料中的“BlueHelper”工程,勾选下图中的选项。点击finish完成工程的导入1.1运行程序注意:如果在调试开发板的时候,出现ADB连接不上的问题(已知华清远见FSPAD723开源平板),可以试着替换AndroidSDK的ADB工具(把光盘\Android应用开发环境\ADB\ADB1.0.26\下的4个文件拷贝到用户ADT解压目录下的sdk\platform-tools中)开发期间,在实际的设备上运行Android程序与在模拟器上运行该程序的效果几乎相同,需要做的就是用USB电缆连接手机与计算机,并安装一个对应的设备驱动程序。如果模拟器窗口已打开,请将其关闭。只要将开发平台通过USB下载线与计算机相连,应用程序就会在开发平台上加载并运行。在Eclipse中选择“Run”→“Run”(或Debug)命令(或者在工程上点击右键),这时会弹出一个窗口,让你选择用模拟器还是手机来显示,如果选择手机,即可在手机上运行该程序。第2章详细设计2.1UartTool串口工具因为本项目要连接上层java和底层c语言,所以需要先声明本地方法。NormalTextCodeprivatestaticnativeintNativeFileOpen(Stringfilename,intsize);//成功返回0,失败-1privatestaticnativeintNativeFileClose();//返回是否关闭成功privatestaticnativeintNativeFileRead(byte[]buf,intsize);//返回读取数据的个数privatestaticnativeintNativeFileWrite(byte[]buf,intsize);//返回写入的数据长度串口初始化函数,需要传递想要打开的串口的文件名和波特率。NormalTextCodepublicBooleanuartInit(Stringfilename,intsize){if((fd=NativeFileOpen(filename,size))!=-1){uartInit=true;returntrue;}else{log.E(%%%%%_uart_init()==-1!!!!%%%%%);returnfalse;}}接下来要封装读函数和写函数,利用的是底层的read和write。NormalTextCodepublicStringuartRead(intnum){byte[]data=newbyte[num];intre=0;if((re=NativeFileRead(data,data.length))0){returnnewString(data,0,re);}else{log.E(%%%%%_uart_read()!=num!!!!%%%%%);returnnull;}}NormalTextCodepublicBooleanuartWrite(byte[]data){if(NativeFileWrite(data,data.length)0){returntrue;}else{log.E(%%%%%_uart_write(data)==-1!!!!%%%%%);returnfalse;}}2.2Uarthelper调试助手本项目中,线程和UI线程通信是通过Handler机制实现的。作用是将数据传输到UI线程进行显示。NormalTextCodeprivateHandlerhandler=newHandler(){@SuppressLint(SimpleDateFormat)publicvoidhandleMessage(Messagemsg){switch(msg.what){case0:if(!check.isChecked()){treceive.append(recdate+);}else{treceive.append(0x+printHex(recdate.getBytes())+);}scroll.scrollTo(0,treceive.getMeasuredHeight()-scroll.getHeight());recdate=;break;default:break;}}};设定按钮的监听时间,当点击Open按钮的时候,按照设定的参数去打开对应的串口,成功后启动读和写的线程,同时设定按钮文字为Close,屏幕进行提示打开成功。NormalTextCodesave.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){if(open==false){if(!fd.getText().toString().equalsIgnoreCase()){if(uart.uartInit(/dev/+fd.getText().toString(),rate_t)==true){Toast.makeText(Uarthelper.this,打开成功.toString(),Toast.LENGTH_LONG).show();log.E(打开文件+/dev/+fd.getText().toString());open=true;threadon=true;readThread=newReadThread();readThread.start();save.setText(Close.toString());}else{Toast.makeText(Uarthelper.this,文件打开失败.toString(),Toast.LENGTH_SHORT).show();}}else{Toast.makeText(Uarthelper.this,请填写完整.toString(),Toast.LENGTH_SHORT).show();}}else{Toast.makeText(Uarthelper.this,正在关闭串口。。。.toString(),Toast.LENGTH_LONG).show();threadon=false;ua
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:如何实现Android串口调试助手_华清远见
链接地址:https://www.777doc.com/doc-3858985 .html