Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port / 25 сообщений из 150, страница 1 из 6
17.06.2014, 11:17
    #38671437
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
Тем, кто желает работать с ком-портом на андроиде посвящается...

Оригинал тут: 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
17.06.2014, 11:46
    #38671476
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
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
29.07.2014, 11:22
    #38707914
Kirr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
wadman
Исходники предоставлю, кому понадобятся. Или доработаю, если где-то что-то всплывет.

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

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

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

Исходники предоставлю, кому понадобятся. Или доработаю, если где-то что-то всплывет.
Интересует исходник с доработкой CP210x usb-serial-for-android
...
Рейтинг: 0 / 0
13.02.2015, 12:03
    #38878943
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
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
13.02.2015, 12:09
    #38878954
sidrva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
wadman , спасибо!
...
Рейтинг: 0 / 0
10.02.2016, 12:05
    #39167442
Cadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
wadmanТем, кто желает работать с ком-портом на андроиде посвящается...
Неплохо было бы проиллюстрировать такой серьезный материал примером проекта для чайников таких, как я. Судя по статье "Программирование USB в Android. Используем для связи интерфейс USB." для работы проекта надо менять даже файл AndroidManifest.xml.
Подскажите - где можно найти исходники с использованием Вашей библиотеки?
...
Рейтинг: 0 / 0
10.02.2016, 12:56
    #39167513
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
CadilПодскажите - где можно найти исходники с использованием Вашей библиотеки?
Это не мои библиотеки, а свободно доступные в интернете.
Исходники, где я работаю с ними не подлежат публикации.
Но могу смело уверить - библиотеки рабочие.
...
Рейтинг: 0 / 0
02.06.2016, 14:34
    #39249143
AromaFon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
wadman, как с вами связаться по mail. У меня устройство, нужно наладить работу Android с устройством через Com порт. Сейчас я делаю интерфейс в Android. Посмотреть проект можно на сайте aromafon.ru.
...
Рейтинг: 0 / 0
02.06.2016, 16:34
    #39249327
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
AromaFon, связаться можно тут. Если это не спам...
...
Рейтинг: 0 / 0
02.06.2016, 19:13
    #39249493
AromaFon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
wadman, Мне нужно организовать связь Android с Com портом устройства. В Visual Studio я справился. После Visual Studio, Android Studio - танцы с целым оркестром обезьян с гранатами. Поэтому прошу помочи. Почему хотел связаться по Mail, чтобы не мусорить эту ветку. Готов договориться об оплате за помочь.
...
Рейтинг: 0 / 0
02.06.2016, 20:55
    #39249535
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Android Usb Serial Port
AromaFon, предлагаю начать с общих вопросов. Может справимся общими усилиями. Деньги всегда успеется потратить.

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

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

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


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