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. ");
}

 

目录
相关文章
|
6月前
|
关系型数据库 MySQL Linux
ADB MySQL湖仓版在Linux和Windows上的性能差异
ADB MySQL湖仓版在Linux和Windows上的性能差异
63 1
|
7月前
|
Linux iOS开发 UED
Linux简介和比较:开源操作系统的优势与差异
Linux简介和比较:开源操作系统的优势与差异
220 0
|
28天前
|
存储 算法 Linux
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
25 0
|
2月前
|
安全 Linux 开发工具
Linux与Windows系统的差异分析
Linux与Windows系统的差异分析
35 0
|
9月前
|
Linux
【Linux命令200例】diff比较两个文件的差异
diff命令是Linux系统中的一个非常实用且常用的命令。它用于比较两个文件的差异,并输出不同之处的详细说明。diff命令可以帮助我们快速找出两个文件之间的差异,从而方便我们进行文件对比、合并和版本控制等操作。
499 0
|
6月前
|
存储 Linux API
嵌入式Linux 字符设备驱动标准ioctl接口
嵌入式Linux 字符设备驱动标准ioctl接口
|
7月前
|
算法 Linux C语言
Linux驱动IO篇——ioctl设备操作
Linux驱动IO篇——ioctl设备操作
|
Linux 数据安全/隐私保护 开发者
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
240 0
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
|
Linux
Linux 使用 diff 分栏对比文本差异
使用 `-y` 表示两列查看,使用 `-W` 设定宽度,这样就可以在终端里分栏查看文件差异
413 0
|
Java Linux iOS开发
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
117 0