powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port
25 сообщений из 150, страница 1 из 6
Android Usb Serial Port
    #38671437
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем, кто желает работать с ком-портом на андроиде посвящается...

Оригинал тут: https://code.google.com/p/android-serialport-api/
Во вложении немного доработанный вариант, который позволяет изменять не только скорость, но и другие параметры ком-порта.
Эта библиотека хороша тем, что работает даже на "древнем" 2.3.3, т.к. обращается к ком-портам через нативный интерфейс.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class SerialPort {

	public final static int SERIALPORT_NOPARITY	= 0;
	public final static int SERIALPORT_ODDPARITY	= 1;
	public final static int SERIALPORT_EVENPARITY	= 2;
	public final static int SERIALPORT_SIZE5	= 5;
	public final static int SERIALPORT_SIZE6	= 6;
	public final static int SERIALPORT_SIZE7	= 7;
	public final static int SERIALPORT_SIZE8	= 8;
	public final static int SERIALPORT_1STOPBIT	= 1;
	public final static int SERIALPORT_2STOPBIT	= 2;

public SerialPort(File device, int flags) throws SecurityException, IOException {}
public InputStream getInputStream() {}
public OutputStream getOutputStream() {}
public void config(int baudrate, int size, int parity, int stopb) {}
public void close() {}
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38671476
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usb Serial Library, аналогично, доработанная до рабочего состояния (не работала с CP210x).
Оригинал https://github.com/mik3y/usb-serial-for-android

Как подключить к Android Studio:
1. Скопировать файл в папку libs.
2. В build.gradle приложения добавить локальный репозиторий libs:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
allprojects {
    repositories {
        mavenCentral()
        flatDir {
            dirs 'libs'
        }
    }
}

3. В build.gradle модуля добавить зависимость:
Код: plaintext
1.
2.
3.
4.
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name:'usbserial', ext:'aar')
    compile 'com.android.support:appcompat-v7:19.+'
}


И всё.

Исходники предоставлю, кому понадобятся. Или доработаю, если где-то что-то всплывет.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38707914
Kirr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Исходники предоставлю, кому понадобятся. Или доработаю, если где-то что-то всплывет.

А залить обратно на гитхаб не хочешь?
Вроде как в мировом масштабе больше желающих найдётся
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38707929
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KirrА залить обратно на гитхаб не хочешь?
Автор не я, но авторам писал и в ответ получил тишину.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38707983
Kirr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

ясно. Я просто относился к гитхабу как к вещи где копируешь, дописываешь и не забываешь указать предыдущее авторство. А срастит ли предыдущий автор версии - это уже его дело. Хотя это может и не так.

А сама библиотека нужная на самом деле.
самому требовалось с месяц назад к UART`y подключиться.
Но я побоялся сторонний модуль использовать. Да и ситуация была простой - готовый tty порт.
Поэтому, как по коду в библиотеке, выставил права доступа и открыл дескриптор из jni
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38708026
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KirrДа и ситуация была простой - готовый tty порт.
Поэтому, как по коду в библиотеке, выставил права доступа и открыл дескриптор из jni
SerialPort именно это и делает. Ни какой магии нет.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38878859
sidrva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanUsb Serial Library, аналогично, доработанная до рабочего состояния (не работала с CP210x).

Исходники предоставлю, кому понадобятся. Или доработаю, если где-то что-то всплывет.
Интересует исходник с доработкой CP210x usb-serial-for-android
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38878943
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidrvawadmanUsb Serial Library, аналогично, доработанная до рабочего состояния (не работала с CP210x).

Исходники предоставлю, кому понадобятся. Или доработаю, если где-то что-то всплывет.
Интересует исходник с доработкой CP210x usb-serial-for-android
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
package ru.wadman.usbserial;

/**
 * Created by wadman on 02.06.2014.
 */
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.util.Log;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

public class Cp2102SerialDriver extends CommonUsbSerialDriver {
    private static final String TAG = Cp2102SerialDriver.class.getSimpleName();

    private static final int DEFAULT_BAUD_RATE = 9600;

    private static final int USB_WRITE_TIMEOUT_MILLIS = 5000;

    /*
     * Configuration Request Types
     */
    private static final int REQTYPE_HOST_TO_DEVICE = 0x41;

    /*
     * Configuration Request Codes
     */
    private static final int SILABSER_IFC_ENABLE_REQUEST_CODE = 0x00;
    private static final int SILABSER_SET_BAUDDIV_REQUEST_CODE = 0x01;
    private static final int SILABSER_SET_LINE_CTL_REQUEST_CODE = 0x03;
    private static final int SILABSER_SET_MHS_REQUEST_CODE = 0x07;
    private static final int SILABSER_SET_BAUDRATE = 0x1E;
    private static final int SILABSER_FLUSH_REQUEST_CODE = 0x12;

    private static final int FLUSH_READ_CODE = 0x0a;
    private static final int FLUSH_WRITE_CODE = 0x05;

    /*
     * SILABSER_IFC_ENABLE_REQUEST_CODE
     */
    private static final int UART_ENABLE = 0x0001;
    private static final int UART_DISABLE = 0x0000;

    /*
     * SILABSER_SET_BAUDDIV_REQUEST_CODE
     */
    private static final int BAUD_RATE_GEN_FREQ = 0x384000;

    /*
     * SILABSER_SET_MHS_REQUEST_CODE
     */
    private static final int MCR_DTR = 0x0001;
    private static final int MCR_RTS = 0x0002;
    private static final int MCR_ALL = 0x0003;

    private static final int CONTROL_WRITE_DTR = 0x0100;
    private static final int CONTROL_WRITE_RTS = 0x0200;

    private UsbEndpoint mReadEndpoint;
    private UsbEndpoint mWriteEndpoint;

    public Cp2102SerialDriver(UsbDevice device, UsbDeviceConnection connection) {
        super(device, connection);
    }

    private int setConfigSingle(int request, int value) {
        return mConnection.controlTransfer(REQTYPE_HOST_TO_DEVICE, request, value,
                0, null, 0, USB_WRITE_TIMEOUT_MILLIS);
    }

    @Override
    public void open() throws IOException {
        boolean opened = false;
        try {
            for (int i = 0; i < mDevice.getInterfaceCount(); i++) {
                UsbInterface usbIface = mDevice.getInterface(i);
                if (mConnection.claimInterface(usbIface, true)) {
                    Log.d(TAG, "claimInterface " + i + " SUCCESS");
                } else {
                    Log.d(TAG, "claimInterface " + i + " FAIL");
                }
            }

            UsbInterface dataIface = mDevice.getInterface(mDevice.getInterfaceCount() - 1);
            for (int i = 0; i < dataIface.getEndpointCount(); i++) {
                UsbEndpoint ep = dataIface.getEndpoint(i);
                if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
                    if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
                        mReadEndpoint = ep;
                    } else {
                        mWriteEndpoint = ep;
                    }
                }
            }

            setConfigSingle(SILABSER_IFC_ENABLE_REQUEST_CODE, UART_ENABLE);
            setConfigSingle(SILABSER_SET_MHS_REQUEST_CODE, MCR_ALL | CONTROL_WRITE_DTR | CONTROL_WRITE_RTS);
            setConfigSingle(SILABSER_SET_BAUDDIV_REQUEST_CODE, BAUD_RATE_GEN_FREQ / DEFAULT_BAUD_RATE);
//            setParameters(DEFAULT_BAUD_RATE, DEFAULT_DATA_BITS, DEFAULT_STOP_BITS, DEFAULT_PARITY);
            opened = true;
        } finally {
            if (!opened) {
                close();
            }
        }
    }

    @Override
    public void close() throws IOException {
        setConfigSingle(SILABSER_IFC_ENABLE_REQUEST_CODE, UART_DISABLE);
        mConnection.close();
    }

    @Override
    public int read(byte[] dest, int timeoutMillis) throws IOException {
        final int numBytesRead;
        synchronized (mReadBufferLock) {
            int readAmt = Math.min(dest.length, mReadBuffer.length);
            numBytesRead = mConnection.bulkTransfer(mReadEndpoint, mReadBuffer, readAmt,
                    timeoutMillis);
            if (numBytesRead < 0) {
                // This sucks: we get -1 on timeout, not 0 as preferred.
                // We *should* use UsbRequest, except it has a bug/api oversight
                // where there is no way to determine the number of bytes read
                // in response :\ -- http://b.android.com/28023
                return 0;
            }
            System.arraycopy(mReadBuffer, 0, dest, 0, numBytesRead);
        }
        return numBytesRead;
    }

    @Override
    public int write(byte[] src, int timeoutMillis) throws IOException {
        int offset = 0;

        while (offset < src.length) {
            final int writeLength;
            final int amtWritten;

            synchronized (mWriteBufferLock) {
                final byte[] writeBuffer;

                writeLength = Math.min(src.length - offset, mWriteBuffer.length);
                if (offset == 0) {
                    writeBuffer = src;
                } else {
                    // bulkTransfer does not support offsets, make a copy.
                    System.arraycopy(src, offset, mWriteBuffer, 0, writeLength);
                    writeBuffer = mWriteBuffer;
                }

                amtWritten = mConnection.bulkTransfer(mWriteEndpoint, writeBuffer, writeLength,
                        timeoutMillis);
            }
            if (amtWritten <= 0) {
                throw new IOException("Error writing " + writeLength
                        + " bytes at offset " + offset + " length=" + src.length);
            }

            //Log.d(TAG, "Wrote amt=" + amtWritten + " attempted=" + writeLength);
            offset += amtWritten;
        }
        return offset;
    }

    private void setBaudRate(int baudRate) throws IOException {
        byte[] data = new byte[] {
                (byte) ( baudRate & 0xff),
                (byte) ((baudRate >> 8 ) & 0xff),
                (byte) ((baudRate >> 16) & 0xff),
                (byte) ((baudRate >> 24) & 0xff)
        };
        int ret = mConnection.controlTransfer(REQTYPE_HOST_TO_DEVICE, SILABSER_SET_BAUDRATE,
                0, 0, data, 4, USB_WRITE_TIMEOUT_MILLIS);
        if (ret < 0) {
            throw new IOException("Error setting baud rate.");
        }
    }

    @Override
public void setParameters(int baudRate, int dataBits, int stopBits, int parity)
        throws IOException {
    setBaudRate(baudRate);

    int config = 0;
    switch (dataBits) {
        case DATABITS_5:
            config |= 0x0500;
            break;
        case DATABITS_6:
            config |= 0x0600;
            break;
        case DATABITS_7:
            config |= 0x0700;
            break;
        case DATABITS_8:
            config |= 0x0800;
            break;
        default:
            config |= 0x0800;
            break;
    }

    switch (parity) {
        case PARITY_ODD:
            config |= 0x0010;
            break;
        case PARITY_EVEN:
            config |= 0x0020;
            break;
    }

    switch (stopBits) {
        case STOPBITS_1:
            config |= 0;
            break;
        case STOPBITS_2:
            config |= 2;
            break;
    }
    setConfigSingle(SILABSER_SET_LINE_CTL_REQUEST_CODE, config);

}

    @Override
    public boolean getCD() throws IOException {
        return false;
    }

    @Override
    public boolean getCTS() throws IOException {
        return false;
    }

    @Override
    public boolean getDSR() throws IOException {
        return false;
    }

    @Override
    public boolean getDTR() throws IOException {
        return true;
    }

    @Override
    public void setDTR(boolean value) throws IOException {
    }

    @Override
    public boolean getRI() throws IOException {
        return false;
    }

    @Override
    public boolean getRTS() throws IOException {
        return true;
    }

    @Override
    public boolean purgeHwBuffers(boolean purgeReadBuffers,
                                  boolean purgeWriteBuffers) throws IOException {
        int value = (purgeReadBuffers ? FLUSH_READ_CODE : 0)
                | (purgeWriteBuffers ? FLUSH_WRITE_CODE : 0);

        if (value != 0) {
            setConfigSingle(SILABSER_FLUSH_REQUEST_CODE, value);
        }

        return true;
    }

    @Override
    public void setRTS(boolean value) throws IOException {
    }

    public static Map<Integer, int[]> getSupportedDevices() {
        final Map<Integer, int[]> supportedDevices = new LinkedHashMap<Integer, int[]>();
        supportedDevices.put(Integer.valueOf(UsbId.VENDOR_SILAB),
                new int[] {
                        UsbId.SILAB_CP2102
                });
        return supportedDevices;
    }


}



Остальное без изменений.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #38878954
sidrva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman , спасибо!
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39167442
Cadil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanТем, кто желает работать с ком-портом на андроиде посвящается...
Неплохо было бы проиллюстрировать такой серьезный материал примером проекта для чайников таких, как я. Судя по статье "Программирование USB в Android. Используем для связи интерфейс USB." для работы проекта надо менять даже файл AndroidManifest.xml.
Подскажите - где можно найти исходники с использованием Вашей библиотеки?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39167513
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CadilПодскажите - где можно найти исходники с использованием Вашей библиотеки?
Это не мои библиотеки, а свободно доступные в интернете.
Исходники, где я работаю с ними не подлежат публикации.
Но могу смело уверить - библиотеки рабочие.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39249143
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, как с вами связаться по mail. У меня устройство, нужно наладить работу Android с устройством через Com порт. Сейчас я делаю интерфейс в Android. Посмотреть проект можно на сайте aromafon.ru.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39249327
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon, связаться можно тут. Если это не спам...
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39249493
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Мне нужно организовать связь Android с Com портом устройства. В Visual Studio я справился. После Visual Studio, Android Studio - танцы с целым оркестром обезьян с гранатами. Поэтому прошу помочи. Почему хотел связаться по Mail, чтобы не мусорить эту ветку. Готов договориться об оплате за помочь.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39249535
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon, предлагаю начать с общих вопросов. Может справимся общими усилиями. Деньги всегда успеется потратить.

Если есть вопросы, то готов выслушать.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39249614
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, обязательны ли Root права на телефоне, чтобы слушать и записывать в com port?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39249766
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon, нет. Usb Serial Library работает напрямую с интерфейсом через api.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39250428
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Я выполнил 3 пункта + Добавил class SerialPort, и там в 2 строчках ошибки:
public InputStream getInputStream() {}
public OutputStream getOutputStream() {}

И еще, как постучаться в Com port и получить ответ.... Он читает из файла пишет в файл?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39250441
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon, serialport это для работы с пониманием ndk. Лучше (а я именно её имел в виду про нативность и api) usb serial library взять. 16174549
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39250465
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Я установил usbserial.aar. Класс SerialPot уже удалил. Но как использовать usbserial.aar?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39250522
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFonНо как использовать usbserial.aar?
https://github.com/mik3y/usb-serial-for-android тут пример есть.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39250549
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Буду рыть в другом месте. Кто разобрался пишите на mail, может сторгуемся.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262265
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, С интерфейсом разобрался. Все уперлось в Com порт. Везде примеры с рутованными девайсами. Начну копать этот пример.
У телефона должна быть поддержка OTG кабеля?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262485
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon,

конечно.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262496
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Я как понял, телефон должен поддерживать HOST USB, отсюда вытекает OTG. Если телефон не может быть HOST для других устройств значит кабель OTG ему не нужен. Купил планшет Lenovo для кабеля OTG.
...
Рейтинг: 0 / 0
25 сообщений из 150, страница 1 из 6
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]