诸位,有问题如下:要在android中通过jni调用i2c总线驱动,并通过i2c对设备进行简单的读写操作,主要代码如下:
i2cActivity.java:
//主要代码,一些声明什么的我都省略了。
package ....;
import ......;
//openB是我设置的一个button,点击它可以成功打开i2c总线
openB.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
int i = i2c.openI2C();
......
}
});writeB.segOnClickListener(new View.OnClickListener(){
public void onClick(View v){
int buf[] = new int [4];
buf[0]=0x03;
buf[1]=0x13;
buf[2]=0x03;
buf[3]=0x13;
int len = 4;
int i = i2c.write(buf,len);//这里的i2c变量是我在前面声明的i2cCtl类型的变量
if(i != 1){openT.setText("writeToI2c Failed.");}
}
})i2cCtl.java:
    package com.i2cCtl;
    import .......;    public native int openI2C();
    public native int write(int[] buf,int len);
    public native int close();    static{System.loadLibrary("i2c-jni");}
i2c-jni.c
    #include <string.h>
    #include ......//这里包含了包括jni.h, fcntl.h, stdio.h, stdlib.h , unistd.h , linux/i2c.h的头文件  int fd;
   jint Java_com_i2cCtl_i2cCtl_openI2C(JNIEnv* env,jobject thiz)
{
fd = open("/dev/i2c-1",O_RDWR);
}jint Java_com_i2cCtl_i2cCtl_write(JNIEnv* env,jobject thiz,jint buf[],jint len)
{
jint *bufInt;
char *bufByte;
(*env)->GetIntArrayRegion(env,buf,0,len,bufInt);
for(int i = 0;i<len;i++)
{
bufByte[i] = bufInt[i];
}
ioctl(fd,I2_TENBIT,0);
ioctl(fd,I2C_SLAVE,0x58);write(fd,bufByte,len);
return 1;
}.........
执行应用程序的时候,可以打开i2c设备节点,open是可以执行的,但执行write指令的时候,就会提示“应用程序I2CTest意外终止,请重试”的错误,请各位做过的大侠给看看,代码本身是不是有什么硬伤。我是全手打的代码,可能会有些手误,但在eclipse里自动生成的代码,不会有低级错误。