android串口操作--清除缓存

项目需要,用到了google的串口通讯代码:SerialPort_Project,具体代码参照github里面的。

代码里面默认的native api只有简单的open和close,没有关于清除缓存的api,故添加之。

在改代码前先配置好ndk和环境变量。

以android studio为例:

    android studio从3.0开始貌似默认集成ndk选项,但仍然需要自行下载。


先在如上选项中勾选:Auto-detect proxy settings ,否则看不到下一步的操作。


勾选CMAKE,LLDB,NDK,如果用的是国内镜像地址,可能是没有这几项的。

下载完成后接着配置android NDK location


android studio段配置完成后,还需要配置windows端的系统环境变量。在path中加入ndk路径,记得重启一下电脑。

这时候在Terminal中输入ndk-build,会有相应的提示,如果提示无法找到相关命令,请认真检查一遍。


接着是改代码。

google项目的jni里面有源码,我主要改动的是SerialPort.c和SerialPort.h:

在SerialProt.c里面添加:

/*
*Class : android_serial_SerialPort
*Method : tcflush
*Signature ()V
*/
JNIEXPORT void JNICALL Java_android_1serialport_1api_SerialPort_tcflush
   (JNIEnv *env, jobject thiz)
{
      
   jclass SerialPortClass = (*env)->GetObjectClass(env, thiz);
   jclass FileDescriptorClass = (*env)->FindClass(env, "java/io/FileDescriptor");

   jfieldID mFdID = (*env)->GetFieldID(env, SerialPortClass, "mFd", "Ljava/io/FileDescriptor;");
   jfieldID descriptorID = (*env)->GetFieldID(env, FileDescriptorClass, "descriptor", "I");

   jobject mFd = (*env)->GetObjectField(env, thiz, mFdID);
   jint descriptor = (*env)->GetIntField(env, mFd, descriptorID);

   LOGD("tcflush(fd = %d)", descriptor);
   tcflush(descriptor, TCIOFLUSH);          
      
}
 
 

另外在.h文件里面添加相关的申明。

jni目录里面的Android.mk和Application.mk都是现成可用的,把APP_PLATFORM版本对应上。

打开android sdutio的Treminal,cd到jni目录,直接输入:ndk-build,就会自动生成相应的libserial_port.so .

最后在SerialPort.java中添加刚加入的

public native void tcflush();
然后在应用中就可以有清除缓存这个api了。


猜你喜欢

转载自blog.csdn.net/rayxiang520/article/details/80482693