打开串口JNI问题,打开老是失败,跪求高手指点。
从网上下载的示例程序中,能够正确的打开串口通讯。
但我的程序却不能正确的打开串口
我比较了一下,当能打开串口时,LOG中没有09-02 05:34:39.385: DEBUG/dalvikvm(13423): +++ not scanning '/system/lib/libsrec_jni.so' for 'open' (wrong CL)
09-02 05:34:39.205: DEBUG/SerialPort(13423): Found new driver: /dev/rfcomm
09-02 05:34:39.205: DEBUG/SerialPort(13423): Found new driver: /dev/tcc-uart
09-02 05:34:39.365: DEBUG/SerialPort(13423): Found new device: /dev/tcc-uart5
09-02 05:34:39.365: DEBUG/SerialPort(13423): Found new device: /dev/tcc-uart4
09-02 05:34:39.365: DEBUG/SerialPort(13423): Found new device: /dev/tcc-uart3
09-02 05:34:39.365: DEBUG/SerialPort(13423): Found new device: /dev/tcc-uart2
09-02 05:34:39.365: DEBUG/SerialPort(13423): Found new device: /dev/tcc-uart1
09-02 05:34:39.365: DEBUG/SerialPort(13423): Found new device: /dev/tcc-uart0
09-02 05:34:39.385: DEBUG/dalvikvm(13423): Trying to load lib /data/data/phone.line/lib/libserial_port.so 0x43c7c8d8
09-02 05:34:39.385: DEBUG/dalvikvm(13423): Added shared lib /data/data/phone.line/lib/libserial_port.so 0x43c7c8d8
09-02 05:34:39.385: DEBUG/dalvikvm(13423): No JNI_OnLoad found in /data/data/phone.line/lib/libserial_port.so 0x43c7c8d8
09-02 05:34:39.385: DEBUG/dalvikvm(13423): +++ not scanning '/system/lib/libwebcore.so' for 'open' (wrong CL)
09-02 05:34:39.385: DEBUG/dalvikvm(13423): +++ not scanning '/system/lib/libmedia_jni.so' for 'open' (wrong CL)
09-02 05:34:39.385: DEBUG/dalvikvm(13423): +++ not scanning '/system/lib/libexif.so' for 'open' (wrong CL)
09-02 05:34:39.385: DEBUG/dalvikvm(13423): +++ not scanning '/system/lib/libsrec_jni.so' for 'open' (wrong CL)09-02 05:34:39.385: WARN/dalvikvm(13423): No implementation found for native Lphone/line/SerialPort;.open (Ljava/lang/String;I)Ljava/io/FileDescriptor;
09-02 05:34:39.395: DEBUG/AndroidRuntime(13423): Shutting down VM
09-02 05:34:39.395: WARN/dalvikvm(13423): threadid=3: thread exiting with uncaught exception (group=0x4001b160)
09-02 05:34:39.395: ERROR/AndroidRuntime(13423): Uncaught handler: thread main exiting due to uncaught exception
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): java.lang.UnsatisfiedLinkError: open
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at phone.line.SerialPort.open(Native Method)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at phone.line.SerialPort.<init>(SerialPort.java:79)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at phone.line.openSerialPort.getSerialPort(openSerialPort.java:84)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at phone.line.phone.initSetialPort(phone.java:58)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at phone.line.phone.onCreate(phone.java:70)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.os.Handler.dispatchMessage(Handler.java:99)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.os.Looper.loop(Looper.java:123)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at android.app.ActivityThread.main(ActivityThread.java:4363)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at java.lang.reflect.Method.invokeNative(Native Method)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at java.lang.reflect.Method.invoke(Method.java:521)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-02 05:34:39.405: ERROR/AndroidRuntime(13423): at dalvik.system.NativeStart.main(Native Method)
09-02 05:34:39.405: INFO/Process(882): Sending signal. PID: 13423 SIG: 3
09-02 05:34:39.415: INFO/dalvikvm(13423): threadid=7: reacting to signal 3
09-02 05:34:39.415: INFO/dalvikvm(13423): Wrote stack trace to '/data/anr/traces.txt'
09-02 05:34:48.645: WARN/ActivityManager(882): Launch timeout has expired, giving up wake lock!
09-02 05:34:48.845: WARN/ActivityManager(882): Activity idle timeout for HistoryRecord{43e29b10 phone.line/.phone}
09-02 05:34:54.245: DEBUG/dalvikvm(940): GC freed 1842 objects / 105160 bytes in 390ms
程序源码是:
public SerialPort getSerialPort() throws SecurityException, IOException //, InvalidParameterException
{
Log.d("chw", "getSerialPort: -------" );
Log.d("chw", "getSerialPort: 1-------" );
String[] entries = mSerialPortFinder.getAllDevices(); // device name
String[] path = mSerialPortFinder.getAllDevicesPath(); //device path.
int nDevice = path.length; int i;
for(i = 0; i <nDevice; i++)
{
Log.d("chw", "Found new driver: " + path[i]+ "\ngetAllDevices :" + entries[i] );
}
int baudrate = 115200;//4800;
mSerialPort = new SerialPort(new File("/dev/tcc-uart0"), baudrate);
}
Log.d("chw", "getSerialPort: ++++++++" );
return mSerialPort;
}
public class SerialPort {
private static final String TAG = "SerialPort";
/*
* Do not remove or rename the field mFd: it is used by native method close();
*/
private FileDescriptor mFd;
private FileInputStream mFileInputStream;
private FileOutputStream mFileOutputStream;
public SerialPort(File device, int baudrate) throws SecurityException, IOException
{
Log.i("chw","SerialPort --------!!!!");
/* Check access permission */
if (!device.canRead() || !device.canWrite()) {
try {
String command = "chmod 777 " + device.getAbsolutePath();
Log.i("chw", "command = " + command + "\ndevice.getAbsolutePath = " + device.getAbsolutePath());
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
} catch (IOException e) {
Log.i("chw","chmod fail!!!!");
e.printStackTrace();
throw new SecurityException();
}
Log.i("chw", "Get serial port read/write permission");
}
Log.i("chw","open SerialPort ----------getAbsolutePath:" + device.getAbsolutePath() );
mFd = open(device.getAbsolutePath(), baudrate);
Log.i("chw","open SerialPort ++++++++++!!!!");
if (mFd == null) {
Log.e("chw", "native open returns null");
throw new IOException();
}
mFileInputStream = new FileInputStream(mFd);
mFileOutputStream = new FileOutputStream(mFd);
Log.i("chw","SerialPort ++++++++!!!!");
}
// Getters and setters
public InputStream getInputStream() {
return mFileInputStream;
}
public OutputStream getOutputStream() {
return mFileOutputStream;
}
// JNI
private native static FileDescriptor open(String path, int baudrate);
public native void close();
static {
System.loadLibrary("serial_port");
}
}