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-08-25 00:16:14

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 udev porting

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

I.MX6 Linux mipi配置数据合成

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

I.MX6 linux tslib Corrupt calibration data

I.MX6 linux tslib Corrupt calibration data 一.tslib出错 Corrupt calibration data 二.解决方法: ...... if [ -f /etc/pointercal ];then echo "I.MX6 touchscreen have calibrate!" else /usr/bin/ts_calibrate # 一定要注意添加这个同步,否则校正完,快速关机, # 容易报 Corrupt calibration d

I.MX6 Linux 自动获取AR1020 event input节点

/*********************************************************************** * I.MX6 Linux 自动获取AR1020 event input节点 * 说明: * 本文主要记录如何自动获取AR1020 SPI电阻Touch产生的设备节点. * * 2016-4-5 深圳 南山平山村 曾剑锋 ******************************************************************

I.MX6 Linux U-boot 环境变量解析

/********************************************************************************** * I.MX6 Linux U-boot 环境变量解析 * 声明: * 在分析完I.MX6 Manufacturing Tool V2 (MFGTool2)中一些内容之后,这里仅仅是 * 为了验证其中的一些想法: * 1. 如何读取不在分区中的uImage,而是在emmc中1M地址上的uImage: * 2. U-boot的loa

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

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

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 Qt 启动流程跟踪

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