How to read and write data to COM/Serial ports in Android?

南笙酒味 提交于 2019-12-17 22:43:51

问题


I have to read and write data to the COM ports of the device using android, I am using javax.comm package for that but when I installed the apk file, it is not displaying any ports of the device so is there any permission which I need to add in the manifest file?


回答1:


Your problem is one with operating systems. Android runs Linux under the hood, and Linux treats serial ports differently than Windows does. javax.comm also contains win32com.dll, a driver file, which you won't be able to install on an Android device. If you do find a way to achieve what you're trying to do, you can't actually look for a "COM" port in a Linux environment. The serial ports will go by different names.

 Windows Com Port   Linux equivalent  
      COM 1           /dev/ttyS0  
      COM 2           /dev/ttyS1
      COM 3           /dev/ttyS2 

So, hypothetically, if your idea were to work, you have to look for these names.

Luckily for you, Android does have provisions for interfacing with USB devices (Which I assume you want to connect to, as opposed to parallel or RS-232 ports). To do this, you will set up your device as a USB Host. Here's what you'll want to do:

  1. Get a USBManager.
  2. Find your device.
  3. Get the USBInterface and USBEndpoint.
  4. Open a connection.
  5. Transfer data.

Here's my rough estimate of how you'll do it. Your code will, of course, have a more mature way of doing things.

String YOUR_DEVICE_NAME;
byte[] DATA;
int TIMEOUT;

USBManager manager = getApplicationContext().getSystemService(Context.USB_SERVICE);
Map<String, USBDevice> devices = manager.getDeviceList();
USBDevice mDevice = devices.get(YOUR_DEVICE_NAME);
USBDeviceConnection connection = manager.openDevice(mDevice);
USBEndpoint endpoint = device.getInterface(0).getEndpoint(0);

connection.claimInterface(device.getInterface(0), true);
connection.bulkTransfer(endpoint, DATA, DATA.length, TIMEOUT);

Extra material for your reading pleasure: http://developer.android.com/guide/topics/connectivity/usb/host.html




回答2:


I am no expert but for all those looking to connect serial RS-232 Ports or open a Serial port and can't find their device trough the UsbManager, you can find all your devices using an approach like this

mDrivers = new Vector<Driver>();
LineNumberReader r = new LineNumberReader(new FileReader("/proc/tty/drivers"));
        String l;
        while ((l = r.readLine()) != null) {
            String drivername = l.substring(0, 0x15).trim();
            String[] w = l.split(" +");
            if ((w.length >= 5) && (w[w.length - 1].equals("serial"))) {
                mDrivers.add(new Driver(drivername, w[w.length - 4]));
            }
        }

After finding all drivers iterate trough all the drivers to get all of your devices, some thing like this

mDevices = new Vector<File>();
            File dev = new File("/dev");

            File[] files = dev.listFiles();

            if (files != null) {
                int i;
                for (i = 0; i < files.length; i++) {
                    if (files[i].getAbsolutePath().startsWith(mDeviceRoot)) {
                        Log.d(TAG, "Found new device: " + files[i]);
                        mDevices.add(files[i]);
                    }
                }
            }

Here is the Driver Class Constructor with two member variables

public Driver(String name, String root) {
        mDriverName = name;
        mDeviceRoot = root;
    }

For Opening a Serial Port You can use Android Serial Port Api simply open serial port at your device and write ( you must know your device path, and baud rate, My device is ttyMt2 , with baud Rate 96000 )

 int baurate = Integer.parseInt("9600");
 mSerialPort = new SerialPort(mDevice.getPath(), baurate, 0);
        mOutputStream = mSerialPort.getOutputStream();
        byte[] bytes = hexStr2bytes("31CE");
        mOutputStream.write(bytes);

instead of wasting time on this code, you can download the complete project from https://github.com/licheedev/Android-SerialPort-Tool



来源:https://stackoverflow.com/questions/11011515/how-to-read-and-write-data-to-com-serial-ports-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!