/* * Copyright 2009 Cedric Priscal * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android_serialport_api; import java.io.BufferedReader; import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import android.util.Log; 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, int flags) throws SecurityException, IOException { /* Check access permission */ if (!device.canRead() || !device.canWrite()) { try { Log.e(TAG, "1============================"); // Missing read/write permission, trying to chmod the file Process su; su = Runtime.getRuntime().exec("/system/xbin/su"); //String cmd = "chmod 666 " + device.getAbsolutePath() + "\n" //+ "exit\n"; String cmd = "chmod 666 " + device.getAbsolutePath(); Log.e(TAG, "cmd====================="+cmd); Runtime.getRuntime().exec(cmd); //su.getOutputStream().write(cmd.getBytes()); if (/*(su.waitFor() != 0) || */!device.canRead() || !device.canWrite()) { Log.e(TAG, "2====================="); throw new SecurityException(); } } catch (Exception e) { Log.e(TAG, "3================="); e.printStackTrace(); throw new SecurityException(); } //do_exec("su root\n"); //Log.e(TAG, "=============cmd : "+device.getAbsolutePath()); //do_exec("chmod 755 " + device.getAbsolutePath() + "\n"); //do_exec("rm /sdcard/123"); //Runtime.getRuntime().exec("/system/xbin/su"); //Runtime.getRuntime().exec("chmod 755 /dev/ttyS1"); } mFd = open(device.getAbsolutePath(), baudrate, flags); if (mFd == null) { Log.e(TAG, "native open returns null"); throw new IOException(); } mFileInputStream = new FileInputStream(mFd); mFileOutputStream = new FileOutputStream(mFd); } // Getters and setters public InputStream getInputStream() { return mFileInputStream; } public OutputStream getOutputStream() { return mFileOutputStream; } String do_exec(String cmd) { String s = "/n"; try { Process p = Runtime.getRuntime().exec(cmd); BufferedReader in = new BufferedReader( new InputStreamReader(p.getInputStream())); String line = null; while ((line = in.readLine()) != null) { s += line + "/n"; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return cmd; } // JNI private native static FileDescriptor open(String path, int baudrate, int flags); public native void close(); static { try { System.loadLibrary("serial_port"); } catch (Exception e) { e.printStackTrace(); }catch (Throwable e) { e.printStackTrace(); } } /* * iD pos机 */ public SerialPort(String dev, int baudrate, int flags) throws IOException { OpenSerialPort(new File(dev), baudrate, flags); } private void OpenSerialPort(File device, int baudrate, int flags) throws IOException { this.mFd = open(device.getAbsolutePath(), baudrate, flags); if (this.mFd == null) { Log.e("SerialPort", "native open returns null"); throw new IOException(); } this.mFileInputStream = new FileInputStream(this.mFd); this.mFileOutputStream = new FileOutputStream(this.mFd); } }