资源简介
Android串口工具源码,通过JNI实现串口的连接,发送数据,接收数据。不需要第三方包就可以实现我们自己的串口功能
![](http://www.nz998.com/pic/36513.jpg)
代码片段和文件信息
/**
* 由于要用到串口硬件,但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毕业设计
- 百度地图自定义Markerandroid
- Android分区工具包
- android-support-v4.jar已打包进去源代码
- u-blox_Android_GNSS_Driver_v3.10驱动源码+中
- 个人根据Android移动开发案例详解手写
- android 视频播放器 项目和原码
- Android【动画】【特效】 17种动画特效
- 基于Android智能家居详细设计(经典)
- android通过JDBC连接Mysql数据库
- Android通讯录的源代码
- android 瀑布流Demo
- 指纹传感器FPC1080在android下的驱动
- delphi xe5 android 调用照相机摄像头拍照
- java编写的扫描仪程序
- Android手机连连看游戏源码
- android-sdk-windows v2.3离线完整版
- android 底部弹出菜单(带透明背景)
- Android工程模式简介.rar
- Android蓝牙和Cors网络开发源码
- Android powermanger wakelock
- USB串口通讯助手OTG转USB
- Java串口调试工具源码
- Android v7的一些jar包
- 最新android supportV7包
- android图片压缩工具类分享
- 单机搭建Android(解决Network is unreach
- Android上监听收到的短信(SMS)
- android电商app源码
- Android代码-多功能拨号盘源码.zip
评论
共有 条评论