I.MX6 Linux、Jni ioctl 差异

简介: /*********************************************************************** * I.MX6 Linux、Jni ioctl 差异 * 声明: * 在使用Jni的ioctl()的过程中,发现不能像普通的Linux函数那样使用, * 必须使用3各参数的ioctl()函数。
/***********************************************************************
 *                      I.MX6 Linux、Jni ioctl 差异
 * 声明:
 *     在使用Jni的ioctl()的过程中,发现不能像普通的Linux函数那样使用,
 * 必须使用3各参数的ioctl()函数。
 * 
 *                                   2015-12-20 深圳 南山平山村 曾剑锋
 **********************************************************************/


#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <jni.h>

#include "android/log.h"
static const char *TAG="Buzz";
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)

#define BUZZER_ENABLE   82
#define BUZZER_FREQENCY 83
#define BUZZER_DISABLE  84

/*
 * Class:     com_android_buzz_Buzz
 * Method:    enable
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_android_buzz_Buzz_enable
  (JNIEnv *env, jobject obj) {
    int fd = open("/dev/buzzer", O_RDWR);
    if ( fd == -1 ) {
        LOGE("open buzzer device error.");
        return;
    }

    // ioctl(fd, BUZZER_ENABLE);        // 不能这样使用
    ioctl(fd, BUZZER_ENABLE, 0);        // 得这么使用

    close(fd);

    //LOGE("enable buzzer device. ");
}

/*
 * Class:     com_android_buzz_Buzz
 * Method:    setFrequency
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_android_buzz_Buzz_setFrequency
  (JNIEnv *env, jobject obj, jint frequency) {

    int fd = open("/dev/buzzer", O_RDWR);
    if ( fd == -1 ) {
        LOGE("open buzzer device error.");
        return;
    }

    ioctl(fd, BUZZER_FREQENCY, frequency);

    close(fd);

    //LOGE("set buzzer device frequency. ");
}

/*
 * Class:     com_android_buzz_Buzz
 * Method:    disable
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_android_buzz_Buzz_disable
  (JNIEnv *env, jobject obj) {

    int fd = open("/dev/buzzer", O_RDWR);
    if ( fd == -1 ) {
        LOGE("open buzzer device error.");
        return;
    }

    // ioctl(fd, BUZZER_DISABLE);       // 不能这样使用
    ioctl(fd, BUZZER_DISABLE, 0);       // 得这么使用

    close(fd);

    //LOGE("disable buzzer device. ");
}

 

目录
相关文章
|
8月前
|
算法 Linux API
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
172 0
|
关系型数据库 MySQL Linux
ADB MySQL湖仓版在Linux和Windows上的性能差异
ADB MySQL湖仓版在Linux和Windows上的性能差异
124 1
|
Linux iOS开发 UED
Linux简介和比较:开源操作系统的优势与差异
Linux简介和比较:开源操作系统的优势与差异
627 0
|
8月前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
149 0
|
5月前
|
IDE 数据可视化 Linux
在Linux中,如何比较两个文件差异?
在Linux中,如何比较两个文件差异?
|
6月前
|
Arthas 存储 Java
JVM内存问题之Linux使用ptmalloc2导致的JNI内存溢出问题如何解决
JVM内存问题之Linux使用ptmalloc2导致的JNI内存溢出问题如何解决
101 3
|
6月前
|
Ubuntu Linux UED
|
7月前
|
Ubuntu Linux 编译器
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
167 2
|
6月前
|
Linux Perl
Linux命令sdiff详解:并排比较与差异显示
`sdiff`是Linux下的命令行工具,用于并排比较两个文件的差异。它直观地显示不同之处,用`&gt;`和`&lt;`标记差异。主要特点包括并排显示、灵活性和交互性。参数如`-s`仅显示差异行,`-i`忽略大小写,`-o FILE`将结果输出到文件。示例:`sdiff file1.txt file2.txt`。最佳实践包括根据需要调整输出宽度,结合其他命令使用,和利用交互功能。注意用于文本文件比较,大文件可能消耗资源。
|
7月前
|
移动开发 程序员 Linux
老程序员分享:linux驱动开发笔记_ioctl函数
老程序员分享:linux驱动开发笔记_ioctl函数