美文网首页
Android应用通过jni往节点写数据

Android应用通过jni往节点写数据

作者: 依玲之风 | 来源:发表于2018-12-15 17:58 被阅读0次

android应用与节点通讯的方式有很多种,比如可以通过LocalSoeckt、FileOutputStream、jni等方式进行通讯。
这里用jni的方式介绍一下如何向节点写数据,要向节点里面写数据要知道节点名是什么,节点名一般是由android系统开发人员提供。向节点写数据通常来说就是应用直接向驱动写数据。
具体代码如下:


#include "LEDOption.h"
#include <fcntl.h>
#include <unistd.h>
#include <android/log.h>

#define LOGE(FORMAT,...)__android_log_print(ANDROID_LOG_INFO,"Wayne",FORMAT,##__VA_ARGS__)


char OPEN_LED = '0';
char CLOSE_LED = '1';

int openLED() {

    //1.首先要打开节点,fcntl.h下的open函数打开节点
    int pointState = -1;
    int result = 0;
    pointState = open(AUX_SOURCE_LED, O_RDWR);//打开节点如果成功返回值会大于0,如果失败返回-1

    if (pointState < 0) {
        //说明打开该节点失败,那就会把通道关闭
        close(pointState);
        pointState = -1;
        LOGE("open point failure = %s",AUX_SOURCE_LED);
        return pointState;
    }

    //如果成功那就可以向节点写数据了
    //这里要注意一下write和ioctl的区别,向驱动写数据应该要用write,ioctl也可以写数据,
    // 但是ioctl是用来向I/O写数据,如果用ioctl向驱动是写失败的

    result = write(pointState,&OPEN_LED,1);//write的返回值是如果成功写入会返回写到驱动的数据大小,如果失败则返回0
    if(result>0){
        LOGE("write data successful data size is %d",result);
    }
    close(pointState);
    return result;


}


int closeLED() {
    int pointState = -1;
    int result = 0;
    pointState = open(AUX_SOURCE_LED, O_RDWR);//打开节点如果成功返回值会大于0,如果失败返回-1

    if (pointState < 0) {
        //说明打开该节点失败,那就会把通道关闭
        close(pointState);
        pointState = -1;
        LOGE("open point failure = %s",AUX_SOURCE_LED);
        return pointState;
    }

    //如果成功那就可以向节点写数据了
    //这里要注意一下write和ioctl的区别,向驱动写数据应该要用write,ioctl也可以写数据,
    // 但是ioctl是用来向I/O写数据,如果用ioctl向驱动是写失败的

    result = write(pointState,&CLOSE_LED,1);//write的返回值是如果成功写入会返回写到驱动的数据大小,如果失败则返回0
    if(result>0){
        LOGE("write data successful data size is %d",result);
    }
    close(pointState);
    return result;
}

可以发现用jni向节点写数据代码量会比java的要少。
好啦!今天就分享到这里了。

相关文章

网友评论

      本文标题:Android应用通过jni往节点写数据

      本文链接:https://www.haomeiwen.com/subject/ghuahqtx.html