I.MX6 Linux、Jni 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. ");
}

 

时间: 2024-07-30 03:56:50

I.MX6 Linux、Jni ioctl 差异的相关文章

I.MX6 Linux Serial Baud Rate hacking

/******************************************************************************** * I.MX6 Linux Serial Baud Rate hacking * 声明: * 1. 本文的源代码来自:myzr_android4_2_2_1_1_0.tar.bz2: * 2. 本文的目的是为了知道I.MX6串口支持的波特率有哪些,最大是多大, * 并加以验证,因为IMX6DQRM_revC.pdf数据手册上说能达到5

I.MX6 linux kernel编译错误处理

/******************************************************************************** * I.MX6 linux kernel编译错误处理 * 声明: * 本文仅仅是对I.MX6的linux内核编译出错,记录其对应的处理方法. * * 2015-10-15 晴 深圳 南山平山村 曾剑锋 *******************************************************************

I.MX6 Linux I2C device&amp; driver hacking

/******************************************************************************************* * I.MX6 Linux I2C device& driver hacking * 声明: * 1. 本文主要是对Linux I2C驱动进行代码跟踪,主要是为了能够对I2C驱动框架有个全面的了解: * 2. 本文源代码来自myzr_android4_2_2_1_1_0.tar.bz2: * 3. 如果你有兴趣,

I.MX6 Linux mipi配置数据合成

/*************************************************************************** * I.MX6 Linux mipi配置数据合成 * 声明: * 由于现有mipi配置数据不符合I.MX6的配置参数,需要将该参数进行数据转换, * 而这又涉及到对数据处理简单算法,主要是为了验证转换代码可靠性. * * 2015-12-24 深圳 南山平山村 曾剑锋 **************************************

I.MX6 Linux udev porting

/*********************************************************************** * I.MX6 Linux udev porting * 声明: * 在嵌入式产品上,我们可以使用mdev来解决热插拔的问题,同时也经常看到 * udev,所以尝试来移植一下,但是最终发现她会丢失内核阶段产生的uevent, * 这导致无法生成内核阶段产生的设备节点,目前采用了mdev来做完成内核阶段的 * 设备节点生成,之后使用udev完成热插拔,这

I.MX6 Linux kernel LVDS backlight enable

/*************************************************************************** * I.MX6 Linux kernel LVDS backlight enable * 说明: * 由于目前U-boot阶段屏出现反白的现象,所以在U-boot阶段关闭了背光,之前 * 尝试在板级文件中打开背光,但由于那个地方Linux LVDS驱动还没有工作,导致 * 反白的现象还是存在,仅仅是时间变短了,于是最后将enable信号放在驱动

I.MX6 Linux eGTouch TouchScreen porting

I.MX6 Linux eGTouch TouchScreen porting 一.Download Driver: http://www.eeti.com.tw/drivers_Linux.html 二.阅读:EETI eGTouch Linux Programming Guide 三.系统启动配置: ...... # 本人直接将驱动放在内核里了,并没有做成模块 # insmod /module/hid-multitouch.ko # 使用eGTouch_v2.5.4330.L-ma/eGTo

I.MX6 linux eGalaxTouch 自动获取设备节点

I.MX6 linux eGalaxTouch 自动获取设备节点 \\\\\\\\\\\\\\-*- 目录 -*-///////////// | 一. 需求: | 二. /proc/bus/input/devices 内容: | 三. 解决方法: | 四. 实际应用: -------------------------------------- 一. 需求: 获取eGalaxTouch的输入设备节点 二. /proc/bus/input/devices 内容: root@freescale /p

I.MX6 Linux Qt 启动流程跟踪

/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 * 声明: * 1. 源代码来源MY-I.MX6: * 2. 本文仅仅是对启动流程的解析,没有解释启动流程为什么是这样的问题. * * 2015-6-13 深圳 晴 南山平山村 曾剑锋 *********************************************************