91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 656KB
    文件類型: .zip
    金幣: 2
    下載: 1 次
    發(fā)布日期: 2021-06-24
  • 語言: Java
  • 標(biāo)簽: Android??JNI??串口??

資源簡介

Android串口工具源碼,通過JNI實現(xiàn)串口的連接,發(fā)送數(shù)據(jù),接收數(shù)據(jù)。不需要第三方包就可以實現(xiàn)我們自己的串口功能

資源截圖

代碼片段和文件信息


/**
?*?由于要用到串口硬件,但android沒有串口相關(guān)的API函數(shù),所以就必須用到JNI層來控制串口設(shè)備。
?*?這里用到的都是LINUX編程。還有一些JNI函數(shù)。
?*
?*?@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)函數(shù)相關(guān)聯(lián)。
?*?作用是打開串口設(shè)備
?*/
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);

//?打開設(shè)備
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;
}

//設(shè)置串口參數(shù)
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函數(shù)創(chuàng)建一個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);

//?記錄設(shè)備ID
serial?=?fd;
isInit?=?1;
//?用完這個device指針后要釋放。
(*env)->ReleaseStringUTFChars(env?deviceName?device);
LOGI(“Open?fd=%d“?fd);
return?obj;

exit:?//?錯誤跳轉(zhuǎn)處。
if(fd?!=?-1)
close(fd);?//關(guān)閉設(shè)備
isInit?=?0;
//?用完這個device指針后要釋放。
(*env)->ReleaseStringUTFChars(env?deviceName?device);
return?NULL;
}

/**
?*?與SerialPort.java中的close(FileDescriptor?fd);函數(shù)相關(guān)聯(lián)。
?*?作用是關(guān)閉串口設(shè)備。
?*/
JNIEXPORT?jboolean?JNICALL?Java_com_CES_SerialPort_SerialPort_close
??(JNIEnv?*env?jobject?object?jobject?descriptor)
{
if(descriptor?!=?NULL)?{
//?用JNI函數(shù)來得到參數(shù)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);
//?關(guān)閉設(shè)備。
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.xml
?????目錄???????????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.xml
?????目錄???????????0??2016-04-20?08:57??SerialPort\res\menu\
............此處省略21個文件信息

評論

共有 條評論