资源简介
Android串口工具源码,通过JNI实现串口的连接,发送数据,接收数据。不需要第三方包就可以实现我们自己的串口功能
代码片段和文件信息
/**
* 由于要用到串口硬件,但android没有串口相关的API函数,所以就必须用到JNI层来控制串口设备。
* 这里用到的都是LINUX编程。还有一些JNI函数。
*
* @author Hong
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “com_CES_SerialPort_SerialPort.h“
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO “SerialPort_JNI“ __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR “SerialPort_JNI“ __VA_ARGS__)
static speed_t getBaudrate(jint baudrate);
int serial = -1;
int isInit = 0;
/**
* 与SerialPort.java中的open(String path int baudrate)函数相关联。
* 作用是打开串口设备
*/
JNIEXPORT jobject JNICALL Java_com_CES_SerialPort_SerialPort_open
(JNIEnv *env jobject object jstring deviceName jint baudrate)
{
// 获取String的字符。不能直接的用device = deviceName;最后还要释放device指针。
const char *device = (*env)->GetStringUTFChars(env deviceName 0);
LOGI(“Device=%s BaudRate= %d“ device baudrate);
// 打开设备
int fd = open(device O_RDWR);
if (-1 == fd) {
LOGE(“Can‘t Open %s[%d]: %s“ device errno strerror(errno));
goto exit;
}
speed_t speed = getBaudrate(baudrate);
if (speed == -1) {
LOGE(“Invalid baudrate“);
goto exit;
}
//设置串口参数
struct termios Opt;
tcgetattr(fd &Opt);
cfmakeraw(&Opt);
tcflush(fd TCIFLUSH);
cfsetispeed(&Opt speed);
cfsetospeed(&Opt speed);
Opt.c_cflag |= CS8;
Opt.c_cflag &= ~PARENB;
Opt.c_oflag &= ~(OPOST);
Opt.c_cflag &= ~CSTOPB;
Opt.c_lflag &= ~(ICANON | ISIG | ECHO | IEXTEN);
Opt.c_iflag &= ~(INPCK | BRKINT | ICRNL | ISTRIP | IXON);
Opt.c_cc[VMIN] = 0;
Opt.c_cc[VTIME] = 0;
if (tcsetattr(fd TCSANOW &Opt) != 0) {
LOGE(“SetupSerial![%d]: %s“ errno strerror(errno));
goto exit;
}
// 用JNI函数创建一个FileDescriptor类的实例
jclass cls = (*env)->FindClass(env “java/io/FileDescriptor“);
jmethodID initId = (*env)->GetMethodID(env cls ““ “()V“);
jfieldID fieldId = (*env)->GetFieldID(env cls “descriptor“ “I“);
jobject obj = (*env)->Newobject(env cls initId);
(*env)->SetIntField(env obj fieldId (jint)fd);
// 记录设备ID
serial = fd;
isInit = 1;
// 用完这个device指针后要释放。
(*env)->ReleaseStringUTFChars(env deviceName device);
LOGI(“Open fd=%d“ fd);
return obj;
exit: // 错误跳转处。
if(fd != -1)
close(fd); //关闭设备
isInit = 0;
// 用完这个device指针后要释放。
(*env)->ReleaseStringUTFChars(env deviceName device);
return NULL;
}
/**
* 与SerialPort.java中的close(FileDescriptor fd);函数相关联。
* 作用是关闭串口设备。
*/
JNIEXPORT jboolean JNICALL Java_com_CES_SerialPort_SerialPort_close
(JNIEnv *env jobject object jobject descriptor)
{
if(descriptor != NULL) {
// 用JNI函数来得到参数descriptor里的“descriptor”属性值。
// “descriptor”属性是在FileDescriptor类里的。
jclass cls = (*env)->FindClass(env “java/io/FileDescriptor“);
jfieldID fieldId = (*env)->GetFieldID(env cls “descriptor“ “I“);
jint fd = (*env)->GetIntField(env descriptor fieldId);
LOGI(“Close fd=%d“ fd);
// 关闭设备。
close(fd);
}
serial = -1;
isInit = 0;
retu
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-04-20 08:57 SerialPort\
文件 364 2013-07-08 17:01 SerialPort\.classpath
文件 1187 2013-08-22 14:19 SerialPort\.project
文件 876 2013-07-08 17:01 SerialPort\AndroidManifest.xm
目录 0 2016-12-14 15:37 SerialPort\assets\
目录 0 2014-05-07 18:15 SerialPort\bin\
文件 210307 2014-01-08 16:29 SerialPort\bin\SerialPort.apk
文件 51394 2013-07-08 17:01 SerialPort\ic_launcher-web.png
目录 0 2016-04-20 08:57 SerialPort\jni\
文件 213 2013-07-08 17:05 SerialPort\jni\Android.mk
文件 773 2013-07-08 17:11 SerialPort\jni\com_CES_SerialPort_SerialPort.h
文件 4388 2014-01-08 16:11 SerialPort\jni\serial_port.c
目录 0 2014-05-07 17:29 SerialPort\libs\
文件 393154 2013-07-08 17:01 SerialPort\libs\android-support-v4.jar
目录 0 2016-04-20 08:57 SerialPort\libs\armeabi\
文件 13436 2014-01-08 16:11 SerialPort\libs\armeabi\libSerialPort.so
文件 781 2013-07-08 17:01 SerialPort\proguard-project.txt
文件 563 2013-07-08 17:01 SerialPort\project.properties
目录 0 2014-05-07 17:29 SerialPort\res\
目录 0 2014-05-07 17:29 SerialPort\res\drawable-hdpi\
文件 7658 2013-07-08 17:01 SerialPort\res\drawable-hdpi\ic_launcher.png
目录 0 2016-12-14 15:37 SerialPort\res\drawable-ldpi\
目录 0 2014-05-07 17:29 SerialPort\res\drawable-mdpi\
文件 3777 2013-07-08 17:01 SerialPort\res\drawable-mdpi\ic_launcher.png
目录 0 2014-05-07 17:29 SerialPort\res\drawable-xhdpi\
文件 12516 2013-07-08 17:01 SerialPort\res\drawable-xhdpi\ic_launcher.png
目录 0 2014-05-07 17:29 SerialPort\res\drawable-xxhdpi\
文件 24777 2013-07-08 17:01 SerialPort\res\drawable-xxhdpi\ic_launcher.png
目录 0 2016-04-20 08:57 SerialPort\res\layout\
文件 3124 2013-07-09 10:40 SerialPort\res\layout\activity_main.xm
目录 0 2016-04-20 08:57 SerialPort\res\menu\
............此处省略21个文件信息
- 上一篇:JAVA-比赛评分系统
- 下一篇:android高德地图封装工具类
相关资源
- Android代码-多功能拨号盘源码.zip
- printershare直接破解版--11.5(适配andr
- android RDP远程桌面客户端源码
- 手机远程控制手机android
- spring boot+ios app+android app 即时通讯项目
- Androidrepo文件
- Aandroid 多线程断点续传同时多个大文
- Vue项目实现手机端上传图片,使用于
- Android多文件断点续传
- Android多线程文件夹及断点续传
- android 安卓 FTP 文件 管理
- Android-5.1.1_r1源码.7z
- mac版adb工具
- NFC Card万能读卡android程序
- Android直连Mysql数据库需要导入的jar包
- android实现谷歌地图项目
- Android日历239876
- 主页面框架
- Android双列滑动表格(双表头不动)
- android绘制心电图
- Android安卓中文API开发文档参考手册官
- Android开发的UI图标大全
- Crypto++ 7.0.0 for Android 已编译
- Android手机通过otg线外接usb摄像头
- AndroidStudio使用svn第一次提交忽略文件
- Android编程设计模式之原型模式详解
- 浅谈Android客户端与服务器的数据交互
- 基于android框架的客户端和基于java服务
- 好用的支持android 6.0以上的libserial_p
- AndroidStudio插件配置
评论
共有 条评论