下面是贵公司提供的I2CDemo中的主类。
我将这个demo烧进NanoPi M3小板子中,程序运行崩溃,显示I2C接口打开失败,请帮我看看是什么原因哟,谢谢
public class EEPROMTesting extends Activity implements OnClickListener {
private static final String TAG = "EEPROMTesting";
EditText writeEditor;
EditText readEditor;
TextView statusView;
private Handler messageHandler;
Thread writeThread = null;
Thread readThread = null;
int devFD = -1;
private class MessageHandler extends Handler {
public MessageHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
String result = (String) msg.obj;
if (result.equals("ERROR")) {
statusView.setText("Status: Error");
Log.d(TAG, "Status: Error");
} else if (result.equals("DONE")) {
statusView.setText("Status: Done");
Log.d(TAG, "Status: Done");
} else if (result.startsWith("B")) {
readEditor.append(result.substring(1));
Log.d(TAG, "写入的内容是:" + readEditor.getText().toString());
} else {
statusView.setText("Status: Processing");
Log.d(TAG, "Status: Processing");
}
}
}
@Override
public void onDestroy() {
if (devFD >= 0) {
HardwareControler.close(devFD);
devFD = -1;
}
super.onDestroy();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setContentView(R.layout.eepromtestingactivity_landscape);
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.eepromtestingactivity);
}
writeEditor = (EditText) findViewById(R.id.writeEditor);
writeEditor
.setText("1");
statusView = (TextView) findViewById(R.id.statusView);
readEditor = (EditText) findViewById(R.id.readEditor);
((Button) findViewById(R.id.writeEEPROMButton))
.setOnClickListener(this);
((Button) findViewById(R.id.readEEPROMButton)).setOnClickListener(this);
Looper looper = Looper.myLooper();
messageHandler = new MessageHandler(looper);
devFD = HardwareControler.open("/dev/i2c-1", FileCtlEnum.O_RDWR);
//在下面的判断的时候devFD < 0,表示I2C接口打开失败,这是什么原因呢???
if (devFD < 0) {
Log.d("TAG", "faile to open I2C.");
CommonFuncs.showAlertDialog(this, "Fail to open I2C device.");
//finish();
} else {
if (HardwareControler.setI2CSlave(devFD, 0x40) < 0) {
CommonFuncs.showAlertDialog(this, "Fail to set I2C slave.");
// finish();
} else {
statusView.setText("Status: Ready");
i2cDer.setPWMFreq(devFD, 60);
}
}
}
private void startWriteEEPROMThread(final String num) {
statusView.setText("Status: Processing");
new Thread() {
@Override
public void run() {
String result;
byte[] writeBytes = writeEditor.getText().toString().getBytes();
byte b;
for (int i = 0; i < 256; i++) {
if (i < writeBytes.length) {
b = writeBytes;
} else {
b = 0;
}
if (b != 0 && b != '\n') {
if (b < ' ' || b > 126) {
b = 0;
}
}
if (HardwareControler.writeByteToI2C(devFD, i, b, 10) != 0) {
result = "ERROR";
Message message = Message.obtain();
message.obj = result;
messageHandler.sendMessage(message);
break;
} else {
HardwareControler.writeByteToI2C(devFD, 1, (byte)1, 10);
result = "" + i;
Message message = Message.obtain();
message.obj = result;
messageHandler.sendMessage(message);
}
}
result = "DONE";
Message message = Message.obtain();
message.obj = result;
messageHandler.sendMessage(message);
}
}.start();
}
private void startReadEEPROMThread() {
statusView.setText("Status: Processing");
new Thread() {
@Override
public void run() {
String result;
int ret;
byte b;
boolean bError = false;
for (int i = 0; i < 4; i++) {
ret = HardwareControler.readByteFromI2C(devFD, i, 10);
if (ret < 0) {
result = "ERROR";
Message message = Message.obtain();
message.obj = result;
messageHandler.sendMessage(message);
bError = true;
break;
} else {
result = "" + i;
{
Message message = Message.obtain();
message.obj = result;
messageHandler.sendMessage(message);
}
b = (byte) ret;
if (b == 0) {
break;
}
if (b < ' ' || b > 126) {
if (b != '\n') {
b = '.';
}
}
{
byte[] bs = { b };
String str = new String(bs);
str = "B" + str;
Message message = Message.obtain();
message.obj = str;
messageHandler.sendMessage(message);
}
}
}
if (!bError) {
result = "DONE";
Message message = Message.obtain();
message.obj = result;
messageHandler.sendMessage(message);
}
}
}.start();
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.writeEEPROMButton:
startWriteEEPROMThread("1");
break;
case R.id.readEEPROMButton:
readEditor.setText("");
Log.d(TAG, readEditor.getText().toString());
startReadEEPROMThread();
Log.d(TAG, readEditor.getText().toString());
break;
default:
break;
}
}
}
错误日志信息:
01-05 07:15:37.774: D/TAG(4192): faile to open I2C.
01-05 07:15:50.016: D/FriendlyARM-HW-Lib(4192): ######## ret=-1, errno=9
01-05 07:15:50.033: D/EEPROMTesting(4192): Status: Error
01-05 07:15:50.034: D/EEPROMTesting(4192): Status: Done
01-05 07:15:55.055: D/FriendlyARM-HW-Lib(4192): ######## ret=-1, errno=9
01-05 07:15:55.077: D/EEPROMTesting(4192): Status: Error
01-05 07:15:56.100: D/FriendlyARM-HW-Lib(4192): ######## ret=-1, errno=9
01-05 07:15:56.130: D/EEPROMTesting(4192): Status: Error
01-05 07:02:27.850: D/TAG(3166): faile to open I2C.
01-05 07:02:27.869: D/OpenGLRenderer(3166): Use EGL_SWAP_BEHAVIOR_PRESERVED: true
01-05 07:02:27.873: D/Atlas(3166): Validating map...
01-05 07:02:27.919: D/libEGL(3166): loaded /system/lib/egl/libEGL_vr.so
01-05 07:02:27.921: D/libEGL(3166): loaded /system/lib/egl/libGLESv1_CM_vr.so
01-05 07:02:27.950: D/libEGL(3166): loaded /system/lib/egl/libGLESv2_vr.so
01-05 07:02:27.994: I/OpenGLRenderer(3166): Initialized EGL, version 1.4
01-05 07:02:27.995: D/OpenGLRenderer(3166): Enabling debug mode 0
01-05 07:02:27.997: E/[EGL-ERROR](3166): EGLBoolean __egl_platform_create_surface_window(egl_surface*, mali_base_ctx_handle):933: =========> usage 0x900
01-05 07:02:28.024: E/[EGL-ERROR](3166): EGLBoolean __egl_platform_create_surface_window(egl_surface*, mali_base_ctx_handle):933: =========> usage 0x900
01-05 07:02:28.046: E/[EGL-ERROR](3166): EGLBoolean __egl_platform_create_surface_window(egl_surface*, mali_base_ctx_handle):933: =========> usage 0x900