powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port
150 сообщений из 150, показаны все 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
Android Usb Serial Port
    #39262497
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так как я подключаюсь через USB, то научился перебирать USB и получать vendorID. Теперь 2 пути через Com порт (CDC device) или напрямую в USB (форум микроконтроллеров STM32). Собрал полностью проект по ссылке примера выше, пишет - 0 device.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262544
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Библитека поддерживает не все чипы.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262566
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, я убрал проверку на vendorID. У меня получилось открыть serialPort.open() получил true. C PERMISSION разбираюсь...
Пользователь один раз должен подтвердить доступ к USB или ставить галочку запомнить разрешение. Разрешить по умолчанию нельзя?
Если запомнить разрешение, то как убрать?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262589
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon,

лучше все таки разобраться с вендором, по возможности не указывать все устройства.

Без разрешения пользователя никак не обойтись.
Сбросить настройки можно из управления приложениями.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262607
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Разобрался PERMISSION, запрашивает разрешение. Создал BroadcastReceiver, который слушает момент подключения, отключения USB. В момент подключения проверяю device.getVendorId() возвращает 1155, пока на этом остановился. Дальше serialPort.open() возвращает true. Теперь ломаю голову, как послать в порт строку getID + символ перевода строки, а потом прочитать ответ... Не знаю с какой стороны зайти.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262612
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFon,

write и read?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262616
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как писать в порт уже понял serialPort.write("SET VOL 3200\n".getBytes());. Проверил работает. Теперь разбираюсь, как читать. Ура !!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262618
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Я не могу понять, что в скобках писать serialPort.read(?)
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262704
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFonЯ не могу понять, что в скобках писать serialPort.read(?)
Что именно не понятно?
Код: java
1.
read(final byte[] dest, final int timeoutMillis)
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262775
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, я нашел такой код: читает 1 раз... Опять в поток попал..+ final?. Хочу просто строку ответа получить.
Я как понимаю, у нас usbserial.jar разные... твой read не работает. И нужно где-то паузу лупить 1 сек.
И если 2 раз читать, то не работает. В Visual есть чтение из Com порта по строчкам...., тут читает 2 строчки сразу c переносом на новую строчку. Буду ковырять.


UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback(){
public void onReceivedData(byte[] arg) {
String data = null;
try {
data = new String(arg, "UTF-8");
data.concat("/n");
tvAppend(ap,data);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
};

private void tvAppend(TextView tv, CharSequence text) {
final TextView ap = tv;
final CharSequence ftext = text;

runOnUiThread(new Runnable() {
@Override
public void run() {
ap.append(ftext);
}
});
}

Само чтение:

serialPort.read(mCallback);
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262785
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFonтвой read не работает.
Все работает. :)

Просто стоит почитать про работу ком-портов, их устройство и настройки.
А не методом научного тыка...

То, что тут описываешь
AromaFonИ если 2 раз читать, то не работает. В Visual есть чтение из Com порта по строчкам....
называется таймаутами и, скорее всего, надстройкой, которая делает работу по разделению строчек для тебя.

Забудь про это, работай с портом так, будто всегда получаешь сырые данные.
Без задержек и разделения на строки. Строк там вообще не бывает, биты и всё.

Твой код из другой оперы.

Пример, как читаю я:
Код: 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.
private String getAnswer(final int timeout) {
        byte[] buffer = new byte[1024];
        int bufferPos = 0;
        byte[] tmp = new byte[1024];
        int read = 0;
        try {
            do {
                read = mDriver.read(tmp, timeout*1000);
                if (read > 0) {
                    System.arraycopy(tmp, 0, buffer, bufferPos, read);
                    bufferPos += read;
                }
            } while (!isFullAnswer(buffer, bufferPos) && (read != 0));
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(LOG_TAG, "Read error: "+e.getMessage(), e);
            mError = ERROR_READ;
        }
        if (bufferPos > 0) {
            byte[] s = new byte[bufferPos];
            System.arraycopy(buffer, 0, s, 0, bufferPos);
            final String text = new String(s);
            return text;
        } else if (read == 0) {
            mError = ERROR_TIMEOUT;
        } else {
            mError = ERROR_READ;
        }
        return null;
    }


Выделенная функция определяет, что прочитанный пакет полный. В твоем случае это может быть наличие перевода строки.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262790
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ощущение, что ты даже примера не посмотрел... А он там достаточно простой.

Я разобрался с этой библиотекой за пару часов.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262807
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, я собрал полностью проект из твоего примера со всеми типами... Там проверки мое устройство не проходило, ответ 0 - девайс. А это 10 классов... Плюс вывод устройств в список + подбор драйверов... Я даже код не мог прочитать. Я 1 месяц я в Android.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262813
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262949
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, я эту демку и собирал. Мне сейчас не до нее. Вроде за хвост поймал один драйвер, там чтение не как у тебя.

serialPort.read(mCallback); Там нет байтов. Байты выплывают в другом потоке, как я понял:

UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback(){
public void onReceivedData(byte[] arg) {

и тут же получается строка: data = new String(arg, "UTF-8");
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262954
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не могу эту data вытащить. Дальше data засовывается в другой поток runOnUiThread(new Runnable() {

и там уже TextViw.setText(data); А я хочу просто на выходе String получить. А тут интерфейс поток.... И при 2 вызове уже ничего не читает.

Везде скопирован этот код.....
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39262970
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдаюсь...

Ты нашел какую-то библиотеку и хочешь, чтоб с ней помогли. Но без ссылок на нее, без её названия.

Придется самому разбираться.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39263024
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, дело не в библиотеке, там тыкаться некуда. Есть read, ему дай mCallback.... и.т.д. Самое сложное позади. Достучался до устройства. А тут разберем потоки, интервалы, хандлы - главное, чтобы терпения хватило. А ссылка вот она:
http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/

Правда бьюсь уже ночь и день, нужен Хаб, замучился переключать с компа на устройство.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39263025
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFonЯ не могу эту data вытащить. Дальше data засовывается в другой поток runOnUiThread(new Runnable() {

и там уже TextViw.setText(data); А я хочу просто на выходе String получить. А тут интерфейс поток.... И при 2 вызове уже ничего не читает.

Везде скопирован этот код.....

и тут же получается строка: data = new String(arg, "UTF-8");

Не любой поток байт можно привести к строке...
Вы точно знаете спецификацию обмена с вашим устройством...???
Ради примера Фискальный регистратор отвечает
старт байт(типа 0x5) затем длина (0xFA) Затем сама строка(причём в кодировке 866) затем контрольная сумма....
Таким образом строка между 3 байтом и предпоследним data = new String(arg(c 3 по предпоследний), "СP866");
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39263083
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AromaFonПравда бьюсь уже ночь и день, нужен Хаб, замучился переключать с компа на устройство.
Установи genymotion, он умеет пробрасывать usb на виртуалку и работать (отлаживать) станет намного проще.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39263112
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Спасибо. Не догадался попробовать.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39263190
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al, Я тоже к этому пришел, что ошибка вылетает при преобразовании byte к строке. Вот в этой строке ошибка.
output = new String(arg, "UTF-8"); Я с byte никогда не работал. Вроде массив, попробую длину ответа проверять, все что не подходит - не гнать в строку. Спасибо.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39265694
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al, Чтобы найти ошибку пришлось JAR декомпилировать и заносить по классам в проект. Заодно убрал кучу лишнего кода. Ошибка была в строке

// this.buffer = new byte['䀀']; я ее убрал и поставил this.buffer = new byte[16384];

Посылка этого иероглифа сносило чтение, читал 0.... Теперь понятно, что буфер был 䀀 китайский.

Я как понял объявляют массив буфера на чтение. Его тоже подрежу, так как у максимум 1000...

Теперь работает как часы. Отсюда вывод: Не добавляйте JAR к себе, лучше открывайте и заносите себе в проект по классам....

Заодно логи читать можно, исключения добавить, где нужно. И на будущее - всё в ваших руках...
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39266455
AromaFon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Еще раз спасибо за совет пробросить USB на Genymotion. Разобрался с чтением из Com порта. Там запускается поток на чтение. А потом поток автоматически читает порт. Т.е. сначала запускаем 1 раз поток Read, а потом сколько хочешь write и получаешь ответы, считывает он все, что пришло в порт, все строки. Т.е. моя ссылка на JAR работает. Только ее расковырять ее надо.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39313984
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приветствую. скачал обе библиотеки по работе с COM. неправильно считываются данные из буфера и виснет еще, но при записи все проходит успешно. устройство ttyACM0. код:

Код: 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.
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

import android_serialport_api.*;

public class MainActivity extends Activity {

AlertDialog.Builder builder;
int size = 0;

protected SerialPort mSerialPort;
protected SerialPortFinder mSerialPortFinder;
protected OutputStream mOutputStream;
private InputStream mInputStream;

private ReadThread mReadThread;
private SendingThread mSendingThread;

private byte[] buffer = new byte[1024];

private class ReadThread extends Thread {

@Override
public void run() {
super.run();
while(!isInterrupted()) {
if (mInputStream == null) return;
try {
size = mInputStream.read(buffer);
} 
catch (IOException e) {
e.printStackTrace();
}
if (size > 0) {
onDataReceived(buffer, size);
}
}
}
}

private class SendingThread extends Thread {

@Override
public void run() {
Arrays.fill(buffer, (byte)0x09);
while (!isInterrupted()) {
try {
if (mOutputStream != null) {
mOutputStream.write(buffer);
} 
else return;
} 

catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}

protected void onDataReceived(byte[] buffer, int size) {

}

public void onClickTrans(View view) {
mSendingThread = new SendingThread();
mSendingThread.start();

mReadThread = new ReadThread();
mReadThread.start();
}

public void onClickMes(View view) {
if(size == 0) {
builder.setMessage("Не получено");
builder.show();	
}
else {
builder.setMessage("Получено");
builder.show();	
}

}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

builder = new AlertDialog.Builder(MainActivity.this);
builder.setPositiveButton("OK", null);

try {

mSerialPortFinder = new SerialPortFinder();

String[] entries = mSerialPortFinder.getAllDevices();
String[] paths = mSerialPortFinder.getAllDevicesPath();

for(int i = 0; i < paths.length; i++) {
if(paths[i].equals("/dev/ttyACM0")) {
mSerialPort = new SerialPort(new File(paths[i]), 115200, 0);
break;
}
}

if(mSerialPort != null) {
mInputStream = mSerialPort.getInputStream();
mOutputStream = mSerialPort.getOutputStream();

}
}

catch (SecurityException e) {
e.printStackTrace();
} 

catch (IOException e) {
e.printStackTrace();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39313987
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кто-нибудь знает, в чем беда?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314272
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345неправильно считываются данные из буфера
Битность, четность не настроены?

Gennady345и виснет еще
Ну... Придется пользоваться отладчиком.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314440
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
суть такая, что я переключаю между смартфоном и контроллером, и получается отладчик при работе с устройством не посмотришь. флаги установил. когда отправляю, на контроллере срабатывает прерывание, а вот обратно подвисает и выводит иногда странную последовательность. взял две верхние библиотеки, одно и тоже при чтении.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314443
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на контроллере vcom реализован.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314472
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345,

genymotion позволяет пробрасывать порты с компа в андроид. Там и отладка будет приятнее.
Мусор обычно и приходит, если битность и четность не указать.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314473
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На компе нормально работает? Проблема только в андроиде?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314486
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так, в genymotion я не работал, если эмулировал, то на AVD. а в AVD есть проброс портов? а то что-то не находил.

вот тут нахожу устройство, флаг ставлю 0, больше параметров не находится

for(int i = 0; i < paths.length; i++) {
if(paths[i].equals("/dev/ttyACM0")) {
mSerialPort = new SerialPort(new File(paths[i]), 115200, 0);
break;
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314494
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
когда проводил отладку, то без подключения контроллера на реальном устройстве. потом отключал и подключал контроллер. по сути, работает, но при приеме вот этот мусор. и все!
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314497
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345,

в первом сообщении темы есть флаги настроек порта, которые указываются при создании объекта порта.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314557
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, я их выставил mSerialPort = new SerialPort(new File(paths[i]), 115200, 0);, только тот же результат, пробовал 1, то же самое. а в AVD можно пробросить порты или только в genymotion или в vitrualbox проще?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314616
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345,

1 это только четность.

Совсем нет опыта работы с портами?
Вообще есть рабочий пример кода?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314623
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
недавно только начал работать с микроконтроллерами. успел только поработать с uart и virtual com на миландре. я еще брал с github, библиотеку usbserial, там я четко прописывал настройки порта. все-равно приходит мусор.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314624
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто когда делаю OutputStream на контроллере Миландр в отладке норм приходит, а обратно нет.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314625
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выбирал библиотеку AcmCdc, все-равно мусор. в понедельник на работе еще попробую.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314636
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я еще брал приложение с google serial_api, там тоже байты теряются....
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39314659
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки стоит попробовать начать играться с компьютера.
Только затем перебраться на андроид.
Разница не большая, но отладка на ББ проще.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39315034
Максим Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую форумчан, с программированием никак не найду общий язык, поэтому обращаюсь к тем, кто разбирается в этом, с просьбой- "делаю" себе приложение, с использованием всяких учебников и нескольких примеров исходников с github, кое в чем разобрался, конечно, но в основном нет. Прошу помочь переделать класс чтения/записи с устройства "ioio", на класс чтения/записи через обычный serialport с сохранением функционала.


Код: javascript
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.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
package net.littlebigisland.droidibus.ibus;
/**
 * IBusService
 * Communicate with the IBus using the IOIO
 * All Read/Writes are done here
 * 
 * @author Ted S <tass2001@gmail.com>;
 * @package net.littlebigisland.droidibus.ibus.IBusMessageService
 * 
 */
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import net.littlebigisland.droidibus.ibus.systems.BoardMonitorSystem;
import net.littlebigisland.droidibus.ibus.systems.BroadcastSystem;
import net.littlebigisland.droidibus.ibus.systems.FrontDisplay;
import net.littlebigisland.droidibus.ibus.systems.GlobalBroadcastSystem;
import net.littlebigisland.droidibus.ibus.systems.GFXNavigationSystem;
import net.littlebigisland.droidibus.ibus.systems.IKESystem;
import net.littlebigisland.droidibus.ibus.systems.RadioSystem;
import net.littlebigisland.droidibus.ibus.systems.SteeringWheelSystem;
import net.littlebigisland.droidibus.ibus.systems.TelephoneSystem;

import ioio.lib.api.DigitalOutput;
import ioio.lib.api.IOIO;
import ioio.lib.api.Uart;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.util.BaseIOIOLooper;
import ioio.lib.util.IOIOLooper;
import ioio.lib.util.android.IOIOService;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

@SuppressLint("UseSparseArrays")
public class IBusMessageService extends IOIOService{
    
    private final static String TAG = "DroidIBus::IBusMessageService";
    
    private final IBinder mBinder = new IOIOBinder();
    private ArrayList<IBusCommand> mCommandQueue = new ArrayList<IBusCommand>();
    
    private Map<Byte, IBusSystem> IBusSysMap = new HashMap<Byte, IBusSystem>();

    private Map<Byte, String> mDeviceLookup = new HashMap<Byte, String>();
    private boolean mIsIOIOConnected = false;
    private int mClientsConnected = 0;
    
    
    public class IOIOBinder extends Binder{
        public IBusMessageService getService(){
            return IBusMessageService.this;
        }
    }
    
    /**
     * This is the thread on which all the IOIO activity happens. The
     * setup() method will be called right after a connection with the IOIO has
     * been established, which might happen several times! After loop() will
     * be called repetitively until the IOIO is disconnected.
     */
    @Override
    protected IOIOLooper createIOIOLooper(){
        return new BaseIOIOLooper(){
            
            private Uart IBusConn;
            private InputStream busIn;
            private OutputStream busOut;
            
            private DigitalOutput statusLED;
            private DigitalOutput faultPin;
            private DigitalOutput chipSelectPin;
            
            private static final int IBUS_RX_PIN = 10;
            private static final int IBUS_TX_PIN = 13;
            private static final int IBUS_CS_PIN = 11;
            private static final int IBUS_ER_PIN = 12;
            
            // Set the IBus message protocol byte indexes
            private static final int MSG_SRC_IDX = 0;
            private static final int MSG_LEN_IDX = 1;
            private static final int MSG_DEST_IDX = 2;
            
            // Settings in milliseconds
            private static final int BUFFER_TIMEOUT = 75;
            private static final int SEND_WAIT = 100;

            private int msgLength = 0;
            
            private long lastRead;
            private long lastSend;

            private ArrayList<Byte> readBuffer = new ArrayList<Byte>();
            
            /**
             * Called every time a connection with IOIO has been established.
             * Setup the connection to the IBus using the MCP2004
             * 
             * @throws ConnectionLostException When IOIO connection is lost.
             */
            @Override
            protected void setup() throws ConnectionLostException, InterruptedException{
                Log.d(TAG, "IOIO Setup");
                IBusConn = ioio_.openUart(
                    IBUS_RX_PIN, IBUS_TX_PIN, 9600, 
                    Uart.Parity.EVEN, Uart.StopBits.ONE
                );
                statusLED = ioio_.openDigitalOutput(IOIO.LED_PIN, true);
                /* Set these HIGH per the MCP2004 data sheet. 
                 * Not required so long as you put a 10k 
                 * resistor from 3.3V to pin 2 */
                chipSelectPin = ioio_.openDigitalOutput(IBUS_CS_PIN, true);
                chipSelectPin.write(true);
                
                faultPin = ioio_.openDigitalOutput(IBUS_ER_PIN, true);
                faultPin.write(true);
                
                busIn = IBusConn.getInputStream();
                busOut = IBusConn.getOutputStream();
                
                lastRead = getTime();
                // Add 250ms to prevent bus spam 
                lastSend = getTime() + 250;
                mIsIOIOConnected = true;
            }
            
            /**
             * Called repetitively while the IOIO is connected.
             * Reads and writes to the IBus
             * 
             * @throws ConnectionLostException When IOIO connection is lost.
             * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#loop()
             */
            @Override
            public void loop() throws ConnectionLostException, InterruptedException{
                long timeNow = getTime();
                long lastCmdSent = timeNow - lastSend;
                long lastCmdRead = timeNow - lastRead;
                // Clear the buffer if we don't get data for 75ms
                if(lastCmdRead >= BUFFER_TIMEOUT && !readBuffer.isEmpty()){
                    logBufferError("Buffer Timeout", readBuffer);
                    readBuffer.clear();
                }
                try{
                    // Read into buffer when bytes are available
                    if(busIn.available() > 0){
                        statusLED.write(true);
                        lastRead = getTime();
                        readBuffer.add((byte) busIn.read());

                        if(readBuffer.size() > 1){
                            if(readBuffer.size() == 2){
                                msgLength = (int)readBuffer.get(MSG_LEN_IDX);
                                if(msgLength <= 0){
                                    Log.e(TAG, "Invalid buffer size: " + msgLength);
                                    readBuffer.clear();
                                }
                            }
                            if(readBuffer.size() > msgLength + 2){
                                logBufferError("Buffer too large", readBuffer);
                                readBuffer.clear();
                            }
                            // Read until buffer size equals the message length
                            if(readBuffer.size() == msgLength + 2){
                                handleMessage(readBuffer);
                                readBuffer.clear();
                            }
                        }
                        statusLED.write(false);
                    }else if(!mCommandQueue.isEmpty() && lastCmdSent > SEND_WAIT){
                        statusLED.write(true);
                        // Pop out the command from the Array
                        IBusCommand cmd = mCommandQueue.get(0);
                        // Send the message out
                        byte[] cmdBytes = genOutboundMessage(cmd);
                        // Write the message out to the bus byte by byte
                        for(byte cmdByte: cmdBytes){
                            busOut.write(cmdByte);
                        }
                        Log.d(TAG, 
                            String.format(
                                "Sending Command %s: %s",
                                cmd.commandType.toString(),
                                bytesToString(cmdBytes)
                            )
                        );
                        mCommandQueue.remove(0);
                        lastSend = getTime();
                        statusLED.write(false);
                    }
                }catch(IOException e){
                    Log.e(
                       TAG, String.format("Bus IOException: %s", e.getMessage())
                    );
                }
                Thread.sleep(2);
            }
            
            /**
             * Converts an ArrayList of bytes into a String
             * @param msgBuffer
             * @return String octal representation of bytes
             */
            private String bytesToString(ArrayList<Byte> msgBuffer){
                String data = "";
                for(byte msgByte: msgBuffer){
                    data += String.format("%02X ", msgByte);
                }
                return data;
            }
            
            /**
             * Converts a byte array into a String
             * @param msgBuffer
             * @return String octal representation of bytes
             */
            private String bytesToString(byte[] msgBuffer){
                String data = "";
                for(byte msgByte: msgBuffer){
                    data += String.format("%02X ", msgByte);
                }
                return data;
            }
                
            /**
             * Verify that the IBus Message is not corrupt by 
             * XORing all bytes if correct. The return should be 0x00
             * 
             * @param  msgBuffer  The buffer containing bytes
             * @return true if the message isn't corrupt, otherwise false
             */
            private boolean checksumMessage(ArrayList<Byte> msgBuffer){
                byte cksum = 0x00;
                for(byte msg: msgBuffer){
                    cksum = (byte) (cksum ^ msg);
                }
                return (cksum == 0x00) ? true : false;
            }
            
            /**
             * Called when IOIO disconnects
             */
            @Override
            public void disconnected(){
                Log.d(TAG, "IOIO Disconnect");
                IBusConn.close();
                mIsIOIOConnected = false;
            }
            
            /**
             * Generates bytes for the given message
             * 
             * @param command The IBusCommand object to create bytes for
             * @return Array of bytes containing the message for the bus
             */
            private byte[] genOutboundMessage(IBusCommand command){
                byte[] cmdBytes = new byte[]{};
                // Get the command type enum
                IBusCommand.Commands cmdType = command.commandType;
                // Get the instance of the class which implements this method
                IBusSystem clsInstance = IBusSysMap.get(
                    cmdType.getSystem().toByte()
                );
                // Get the command arguments
                Object cmdArgs = command.commandArgs;
                try{
                    Class<? extends IBusSystem> cls = clsInstance.getClass();
                    String methodName = cmdType.getMethodName();
                    // If cmdArgs is null, this send the method statically.
                    if(cmdArgs == null){
                        Method cmdMethod = cls.getMethod(methodName);
                        cmdBytes = (byte[]) cmdMethod.invoke(clsInstance);
                    }else{
                        Method cmdMethod = cls.getMethod(methodName, Object[].class);
                        cmdBytes = (byte[]) cmdMethod.invoke(clsInstance, cmdArgs);
                    }
                }catch(IllegalAccessException | IllegalArgumentException | 
                        InvocationTargetException | NoSuchMethodException e){
                    Log.e(
                        TAG,
                        String.format(
                            "Error invoking method in outbound queue: %s - %s",
                            e.toString(),
                            e.getMessage()
                        )
                    );
                }
                return cmdBytes;
            }
            
            /**
             * Get the current time in milliseconds
             * @return long Time in milliseconds
             */
            private long getTime(){
                return Calendar.getInstance().getTimeInMillis();
            }
                
            /**
             * Send the message to the correct handler 
             * @param msg
             */
            private void handleMessage(ArrayList<Byte> msg){
                byte src = msg.get(MSG_SRC_IDX);
                byte dest = msg.get(MSG_DEST_IDX);
                if(checksumMessage(msg)){
                    Log.d(TAG, String.format(
                        "Received Message (%s -> %s): %s",
                        mDeviceLookup.get(src), mDeviceLookup.get(dest),
                        bytesToString(msg)
                    ));
                    IBusSystem system = IBusSysMap.get(dest);
                    if(system != null){
                        system.mapReceived(msg);
                    }
                }else{
                    logBufferError("Message failed checksum test", msg);
                }
            }
            
            /**
             * Log buffer errors
             * @param err The error message
             * @param msg The buffer at the time of the error
             */
            private void logBufferError(String err, ArrayList<Byte> msg){
                Log.e(TAG, String.format("%s: %s", err, bytesToString(msg)));
            }
            
            
        };
    }
    
    public boolean getLinkState(){
        return mIsIOIOConnected;
    }
    
    public void registerCallback(IBusSystem.Callbacks cb, Handler handler){
        if(!IBusSysMap.isEmpty()){
            for (IBusSystem sys: IBusSysMap.values()){
                sys.registerCallback(cb, handler);
            }
        }
    }
    
    /**
     * Add an action into the queue of message waiting to be sent
     * @param cmd IBusCommand instance to be performed
     */
    public void sendCommand(IBusCommand cmd){
        mCommandQueue.add(cmd);
    }
    
    public void unregisterCallback(IBusSystem.Callbacks cb){
        if(!IBusSysMap.isEmpty()){
            for (IBusSystem sys: IBusSysMap.values()){
                sys.unregisterCallback(cb);
            }
        }
    }
    
    @Override
    public IBinder onBind(Intent intent){
        mClientsConnected++;
        return mBinder;
    }
    
    @Override
    public void onDestroy(){
        super.onDestroy();
        Log.d(TAG, "onDestroy()");
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId){
        super.onStartCommand(intent, flags, startId);
        Log.d(TAG, "onStartCommand()");
        if(mDeviceLookup.isEmpty()){
            for(IBusSystem.Devices d : IBusSystem.Devices.values()){
                mDeviceLookup.put(d.toByte(), d.name());
            }
        }
        // Initiate values for IBus System handlers
        if(IBusSysMap.isEmpty()){
            Log.d(TAG, "Filling IBus System Map");
            IBusSysMap.put(
                IBusSystem.Devices.BoardMonitor.toByte(),
                new BoardMonitorSystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.Broadcast.toByte(),
                new BroadcastSystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.FrontDisplay.toByte(),
                new FrontDisplay()
            );
            IBusSysMap.put(
                IBusSystem.Devices.GFXNavigationDriver.toByte(),
                new GFXNavigationSystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.GlobalBroadcast.toByte(),
                new GlobalBroadcastSystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.InstrumentClusterElectronics.toByte(),
                new IKESystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.Radio.toByte(),
                new RadioSystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.MultiFunctionSteeringWheel.toByte(),
                new SteeringWheelSystem()
            );
            IBusSysMap.put(
                IBusSystem.Devices.Telephone.toByte(),
                new TelephoneSystem()
            );
        }
        return START_STICKY;
    }
    
    @Override
    public boolean onUnbind(Intent intent){
        super.onUnbind(intent);
        Log.d(TAG, "onUnbind()");
        mClientsConnected--;
        if(mClientsConnected == 0){
            stopSelf();
        }
        return false;
    }

}

...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39315089
Максим Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, почему обращаюсь с просьбой, т.к. приложение пишу для себя, занимаюсь им уже год в свободное время, с программированием по жизни никак не связан. С исходниками из которых леплю более менее разобрался, какие классы за что отвечают и как их переделать под себя представляю. Спаял адаптер на ft232 для связи приложения с автомобилем, с терминалом на андроиде и виндовс работает, передает и принимает так, как нужно. Сделал графический интерфейс, принялся за наполнение и тут затык, катастрофически не хватает знаний по программированию. Застрял и не могу сдвинуться с мертвой точки, прочитал несколько книг по java и андроид, но не хватает базовых знаний. Прошу помощи в написании этого класса, чтобы смочь продолжить дальше. Если есть у кого свободное время, с удовольствием бы разобрал данный класс по полочкам, в качестве обучения и понимания, и сам бы его переделал, т.к. с онлайн учебниками и книгами самому не получается. Благодарность не заржавеет.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39315408
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока что есть просьба переписать некий класс, который никому не нужен и его не на чем тестировать.

Проще наверное будет обращаться с конкретным вопросом. Например, "не пишет в порт".

Ну и от себя добавлю, что UsbSerialLibrary проще в понимании, чем SerialPort. И ftdi там поддерживается.
И по примерам можно многое понять https://github.com/mik3y/usb-serial-for-android/tree/master/usbSerialExamples/src/main/java/src/com/hoho/android/usbserial/examples
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39315722
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, блин нашел баг в обработке данных: данные в буфер принимаются, битность и четность там всё нормуль....осталось функцию callback сделать, чтобы прерывание срабатывало! genymotion помогло, virual com пробросил в vbox и все понятно!
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39316564
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, еще момент уточнить. скачал библиотеку доработанную вначале serialport.jar. при компиляции не может найти классы SerialPort. подключал ее в buildpath через variable, external jar. все-равно не видит. В чем здесь беда?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39316581
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345,

подозреваю, что беда в эклипсе.
Я про него забыл, как страшный сон. :)
И давно удалил.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39316661
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, именно так. сейчас просто android studio какой-то "контрофактный" пошёл, то ли компилятор не так собрали, в общем перегрузили его.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39316677
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345сейчас просто android studio какой-то "контрофактный" пошёл
У меня работает как и раньше.

Если по студии есть вопросы, то задавай по ней вопросы. Только в отдельной теме.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320249
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, еще тут вопрос. в общем, при первом считывании size = mInputStream.read(buffer) все проходит успешно. при повторном считывании данные перестают считываться, либо еще раз выдаются предыдущие данные. то ли они в буфере висят, непонятно. поток делал destroy, потом reset, все-равно не передаются и висят в буфере. не знаешь, что может быть?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320365
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345, речь про SerialPort? Я её только тестировал (работала как и ожидается), но в деле не применял.
UsbSerialLibrary мне показалось проще. С ней тоже ничего неожиданного не происходит.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320383
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, да serialport. с UsbSerialLibrary я пробовал, когда начинаю искать драйвер ttyACM0 не находит. в UsbManager устройство находит, а вот драйвер устройства не находит. я и воспользовался SerialPort порт открылся. и вот при повторных чтениях данные в буфере висят. поставил переменную volatile, где буфер, та же ерунда.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320426
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345в UsbManager устройство находит, а вот драйвер устройства не находит
Дак нужно их id подкрутить, раз там ftdi.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320719
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, а VCOM на usb точно ftdi?, а то там да vendor и product нет
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320778
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345а VCOM на usb точно ftdi?
Ошибся, принял за другого участника... :)
Gennady345а то там да vendor и product нет
Не бывает usb девайсов без вендора и продукта.
Какие показываются при подключении к компу (их можно посмотреть в свойствах устройства в диспетчере устройств)?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320802
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, да я смотрел vendor и product, их в списке не было. но VCOM вроде в XdcVcp какой-то висит, но там vendor и product другие.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320813
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345да я смотрел vendor и product
В списке xml? Это-ж скорее как болванка, чем окончательный файл.
Gennady345в UsbManager устройство находит
Что именно он находит на устройстве?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320823
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, вот тут номерок. я на genymotion пробросил на COM1, USB он здесь не видит и ничего не находит. а так если к смартфону подключить, то находит устройство. я почему и взял SerialPort за основу.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320832
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, в SerialPort, я поставил 4 Мбит/с, вроде тянет. вот только в буфере данные прошлые висят? вот сбросить буфер непонятно, только если делать close на serialport.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39320871
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345USB он здесь не видит и ничего не находит
Криво подключено или проброшено. Не нужно как com пробрасывать, оставь имя порта пустым.
И посмотри его данные в демке https://github.com/mik3y/usb-serial-for-android/tree/master/usbSerialExamples/src/main/java/src/com/hoho/android/usbserial/examples
Gennady345вот только в буфере данные прошлые висят?
Так не бывает... По меньшей мере я с таким не сталкивался.
Может устройство глючит, но андроид - вряд-ли. Либо не глючит, а такой функционал и есть, что шлет данные непрерывно.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321616
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, понятно. при дебаге я смотрел происходит следующее: я в потоке запускаю чтение из буфера и при повторном чтении прошлые данные все-равно висят. вот когда закрываю порт и открываю данные могут висеть, но потом новые приходят. вот тут как раз немного непонятно, откуда они там? если я закрываю порт и делаю super.onDestroy() потока.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321625
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345вот тут как раз немного непонятно, откуда они там?
Да мне тоже не понятно... Код ведь никто не показывает.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321664
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, такой код. два потока чтения\записи в буфер, вызываю по кнопке запись и чтение

Код: 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.
private class ReadThread extends Thread {

		@Override
		public void run() {
			super.run();
			try {
				synchronized(buffer) {
					while(!isInterrupted()) {
						//if(!isInterrupted()) {
							//byte[] buf = new byte[100];
							size = mInputStream.read(buffer);
							if (mInputStream != null && size > 0) {
								onDataReceived(buffer, size);
							}
						}
						else return;
					}
				}	
			}	
			catch (IOException e) {
				e.printStackTrace();
			} 
			catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		protected void onDataReceived(byte[] buf, int size) throws InterruptedException {
			//char[] buff = new char[size];

			synchronized(bf) {
				for(int j = 0; j < size; j++) {
					bf[j] = (char)buf[j];
				}
			}
			
			this.currentThread().sleep(5000);
					
		}
	}
		
	private class SendingThread extends Thread {
		
		@Override
		public void run() {
			try	{				
				synchronized(buffer) {
					while (!isInterrupted()) {
						if (mOutputStream != null) {
							mOutputStream.write(buffer);
						} 
						else return;
					} 
				}
			}
				
			catch (IOException e) {	
				e.printStackTrace();
				return;
			}
		}
	}

...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321702
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В демку заглядывал? Там такой код, например:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
private class SendingThread extends Thread {
        @Override
        public void run() {
            while (!isInterrupted() && (mBuffer!= null)) {
                try {
                    if (mOutputStream != null) {
                        mOutputStream.write(mBuffer);
                        mBuffer = null;
                    } else {
                        return;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    return;
                }
            }
        }
    }



В твоем коде нет и намека на обнуление буфера.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321743
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, в общем нашёл в чем дело на примере работы с сокетами. лучше по байтам делать c = mInputStream.read() в цикле и тогда норм считывается вообще. поправил, работает непрерывно, все норм.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321748
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, почему-то когда делал mInputStream.read(buffer), данные в буфере начинают висеть предыдущие. делал Arrays.fill(buffer, (byte)0), все-равно висели. а если по байтам считывать то норм
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39321804
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что и требовалось доказать. Дело было в коде.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39331364
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, еще один вопрос. когда делаешь mInputStream.read(buffer), байты теряются, не знаешь из-за чего может быть?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39331416
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345байты теряются, не знаешь из-за чего может быть?
Байты теряются в двух случаях: их не отправили, их не приняли.
У меня такого не было.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39331465
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, нее, они принимаются, но только кусками. в общем, отправляю аудиотрек байтовый, и когда поступают данные, считывание происходит только некоторой части, а остальные теряются. хотел библиотеку usbserial попробовать, только как ее использовать при отладке с одним портом. использую genymotion, там пробросить не удается. вот тут и проблема.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39331690
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345там пробросить не удается.
Я уже говорил, не именуй порт никак, чтоб он как usb, а не com/tty пробросился.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333245
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, пробовал, (UsbManager)getSystemService(Context.USB_SERVICE); не находит устройство usb в android 4.4, однако в linux ubuntu проходит как usb.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333295
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345не находит устройство usb в android 4.4
Значит что-то не так делаешь, т.к. любое usb устройство находится начиная еще с тройки.

Покажи как подключаешь устройство в VM и что показывает в https://github.com/mik3y/usb-serial-for-android/tree/master/usbSerialExamples/src/main/java/src/com/hoho/android/usbserial/examples ?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333341
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, нашел устройство сейчас, в этой библиотеке usbserial, но порт открываю, выбрасывает сразу. я вот и тогда пробовал, выбрасывает
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333344
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, вот так подключаю
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333359
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, а во открыл порт, сейчас в отладчике Миландр посмотрю, приходит или нет!
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333371
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345выбрасывает сразу
Что такое "выбрасывает"?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333379
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, да, сразу при открытии порта на исключение выбрасывает.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333385
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, тип устройства по сути ftdi или AcmCdc?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333415
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345тип устройства по сути ftdi или AcmCdc?
Дак вот example (из usbserial) и должен показать список доступных стройств.
Gennady345сразу при открытии порта на исключение выбрасывает.
У него обычно бывает текст сообщения. :) Мыжпрограммисты, на слово не верим.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333498
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, вот так он не находит драйвер, только напрямую через класс, передаю device в конструктор и тогда получаю доступ к устройству. ты говорил что-то подкрутить там, в классе usbID vendor присутствует. вот и не пойму, почему на исключение выбрасывает. устройство нашел, но при открытии порта сразу на исключение
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333500
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345при открытии порта сразу на исключение
Исключения всегда содержат название, текст и стэк вызова.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333525
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, при sPort.open(connection) выскакивает exception "Already closed"
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333545
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345при sPort.open(connection) выскакивает exception "Already closed"
В UsbSerial нет такого метода.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333569
Gennady345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, usb-serial-for-android/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbSerialPort.java
а здесь в библиотеке?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39333589
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennady345wadman, usb-serial-for-android/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbSerialPort.java
а здесь в библиотеке?
Ууу... Он за год внес существенные изменения. :)
Хорошо хоть мои замечания учел.

Попробуй эту версию: 16174549
Я в ближайшее время не планирую обновлять на новую версию. Вдруг и у меня не взлетит?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39345635
alenka.fml
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, спасибо за тему, которую вы создали, действительно очень важная и почему-то не очень хорошо освещенная в Интернете тема.

Я правильно понимаю, что есть несколько путей для работы с COM-портом на своем устройстве:
- Использовать SerialPort библиотеку из исходников и доработать под свои нужды
- Использовать ваш доработанный SerialPort, но в виде скопмпилированных классов
- То же самое для UsbSerialLibrary
?

Если так, то у меня возникают вопросы: а что именно нужно дорабатывать в стандартных api, почему они сразу не выкладываются доработанными и как именно пользоваться вашими скомпилированными классами (ведь нужно знать какие методы и с какими параметрами вызывать)?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39345704
alenka.fml
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще есть либа от FTDI:
http://www.ftdichip.com/Android.htm

Мне интересно чем принципиально все эти библиотеки отличаются, ведь COM-порт стар как мир.
И как сделать правильный выбор, помогите советом.
Мне нужно общаться с устройствами посредством FTDI.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39345711
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alenka.fml,

я выбрал путь взять чужое и дописать/исправть под себя. Тут каждый сам решает. Очевидно, стоит попробовать существующие решения и определиться.

UsbSerial вроде поддерживает ftdi.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350774
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

Здравствуйте. Я прочитал ваш блог. Это было очень хорошо. Но когда я получить доступ к /Dev/ttyUSB2 дает permission denied. Я хочу, чтобы подключить USB-модем к моему телефон андроид. Мой телефон Sumsung galaxy s6 rooted. Модем Huawei E173. Что вы советуетесь?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350777
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я использовал SerialPort API. Он может открыть / DEV / ttyUSB0, но остальные не могут. (/DEV/ttyUSB1 и /DEV/ttyUSB2).
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350812
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex90_SKYЯ хочу, чтобы подключить USB-модем к моему телефон андроид.
Модем, скорее всего, определяется и захватывается на уровне ОС.
Эти библиотеки не должны с ним работать.
Если можно снять логкат во время подключения, то можно ответить более точно.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350833
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ohoo. Я нашел тебя. Пожалуйста, дайте мне совет. При подключении USB-модем к Android появляются 3 порта
lsusb:
12d1: 1001
1d6b: 0002
1d6b: 0003

Ls -l / DEV / ttyUSB *
/ DEV / ttyUSB0
/ DEV / ttyUSB1
/ DEV / ttyUSB2
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350837
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думаю, что есть 3 интерфейс. Один из них командный интерфейс, который я могу отправить и получить "at commands". Еще один голосовой интерфейс, который я могу посылать и получать голос.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350844
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С помощью библиотеки, что вы сказали сначала, я могу подключить / DEV / ttyUSB0 и отправить команды. Я посылаю SMS с этим.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350924
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я получил LogCat файл. Я подключать и отключать USB-модем. Пожалуйста, смотрите.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350947
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex90_SKYЯ получил LogCat файл. Я подключать и отключать USB-модем. Пожалуйста, смотрите.
Судя по всему андроид сам выключает модем:
автор11-21 13:53:39.680 3457 4065 D UsbHostManager: beginUsbDeviceAdded(/dev/bus/usb/002/001) is blacklisted.
Почитайте тут про подключение модемов http://4pda.ru/forum/index.php?showtopic=374932&st=160
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350975
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я прочитал эту тему. У них, кажется, работают / DEV / ttyUSB2. Но я не могу получить доступ к этому порту. Потому что на этот порт ответы вызовом. Это показывает, какой номер вызова и т.д.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350977
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я просто хочу, чтобы отправлять и получать смс с USB-модем.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350978
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы знаете, USB модем, какой тип? драйвер CDC ACM?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350982
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хочу знать, если я буду работать вашу вторую библиотеку, какой класс я должен использовать.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39350993
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex90_SKYЯ хочу знать, если я буду работать вашу вторую библиотеку, какой класс я должен использовать.
Для начала стоит решить эту проблему:
11-21 13:53:39.680 3457 4065 D UsbHostManager: beginUsbDeviceAdded(/dev/bus/usb/001/001) is blacklisted.
11-21 13:53:39.680 3457 4065 D UsbHostManager: beginUsbDeviceAdded(/dev/bus/usb/002/001) is blacklisted.

А потом уже разбираться с библиотеками.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39351011
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ohoo. Я не знал. Там те порты, которые мне нужны. Мой USB-модем имеет три порта. Я не знаю, почему Android заблокировал только два. Один из них для команды. Еще один для передачи голоса.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39351240
Alex90_SKY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Г-н Wadman, я не знаю, что делать. Но PPP Widget 3 работает отлично. Как эта программа используеть USB-модем, чтобы получить доступ в Интернет? Там должно быть решение.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39351246
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex90_SKYГ-н Wadman, я не знаю, что делать.
У меня нет опыта работы с модемами. Как вариант предлагаю посмотреть код PPP Widget 3.
Набери в гугле "apk decompiler" и загрузи туда приложение.

Alex90_SKYНо PPP Widget 3 работает отлично.
REQUIREMENTS (read carefully before complaining):

- Needs root access, with "SuperSU" app
- For USB: needs USB host connection (with OTG adapter)
- For USB: needs external USB power
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Android Usb Serial Port
    #39640641
SCOBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

Здравствуйте, у меня возникла необходимость использования функции типа ComBreak (или port.setBreak), т.е. нужно удерживать некоторое время линию в "high", потом в "LOW".

Например на ардуино это выглядит примерно так:
digitalWrite (TX, HIGH);
delay(2000);
digitalWrite (TX, LOW);
delay(25);
digitalWrite (TX, HIGH);
delay(25);
sds.begin(sdsbaud);
//дальше идет передача данных

Это нужно для инициализации шины - без такой инициализации устройство не выходит на связь.

Но как это сделать на андройде?

Для для общения с ком портом использовал вот такую библиотеку https://felhr85.net/2014/11/11/usbserial-a-serial-port-driver-library-for-android-v2-0/

Но она не дает устанавливать уровень в ручную.

Возможно вы сможете мне что-то посоветовать, за рабочий вариант готов заплатить пару сотен долларов.
Заранее спасибо!
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39641233
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой чип на том конце?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39654504
cintakc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SCOBAwadman,
Здравствуйте, у меня возникла необходимость использования функции типа ComBreak (или port.setBreak), т.е. нужно удерживать некоторое время линию в "high", потом в "LOW".
Заранее спасибо!
Добрый день, меня также интересует данная проблема, для управления FTDI UART.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39654679
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cintakcSCOBAwadman,
Здравствуйте, у меня возникла необходимость использования функции типа ComBreak (или port.setBreak), т.е. нужно удерживать некоторое время линию в "high", потом в "LOW".
Заранее спасибо!
Добрый день, меня также интересует данная проблема, для управления FTDI UART.
По ftdi тут исчерпывающая информация: http://read.pudn.com/downloads181/sourcecode/embed/842049/usb/serial/ftdi_sio.h__.htm
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39654693
cintakc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это я читал и знаю, я умею управлять портом и выдавать в него данные со скоростью 200 бит/сек и выше,
но мне нужно выдать например байт 83 hex на скорости 5 бит/сек, так как это невозможно,
это можно сделать с помощью опускания линии в ноль на время задержки не менее 200 мс
на дельфи существует специальная посылка Break, которая роняет линию в ноль,
и с помощью задержек с интервалом 200 мс можно сформировать нужный байт на скорость 5 бит/сек
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39654707
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cintakc,

все таки там есть нужная информация?
автор/*
* BmRequestType: 0100 0000B
* bRequest: FTDI_SIO_SET_DATA
* wValue: Data characteristics (see below)
* wIndex: Port
* wLength: 0
* Data: No
*
* Data characteristics
*
* B0..7 Number of data bits
* B8..10 Parity
* 0 = None
* 1 = Odd
* 2 = Even
* 3 = Mark
* 4 = Space
* B11..13 Stop Bits
* 0 = 1
* 1 = 1.5
* 2 = 2
* B14
Код: plaintext
 *            1 = TX ON (break) 
Код: plaintext
 *            0 = TX OFF (normal state) 
* B15 Reserved
*
*/
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39654710
cintakc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо огромное, возможно просмотрел, буду изучать
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39655392
cintakc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman , спасибо, с FTDI преобразователем разобрался, добавил в драйвера функцию BREAK
может подскажите, где найти такое же описание для CP21xx, CH34x, Prolnfic преобразователей
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39655458
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cintakc,

в интернете. :) поиск, в общем-то, и есть самая затратная операция в данном случае.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39655478
cintakc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понял, спасибо
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Android Usb Serial Port
    #39948843
Артём_59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, приветствую.
На данный момент я разрабатываю приложение чтения данных с кан-шины автомобиля на магнитолу на андроиде, через usb порт.
Но есть проблема. При использовании параллельно программы realdash (панель приборов), я перестаю получать сигналы. Вы можете подсказать, может сталкивались с этим, возможно ли чтение параллельно из двух программ 1 порта?
и 2 вопрос.
У вас был написан код в сообщении 19339142 .
Что за функция isFullAnswer(buffer, bufferPos)?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39948849
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артём_59
возможно ли чтение параллельно из двух программ 1 порта?

Нет, доступ к порту эксклюзивный.
Артём_59
Что за функция isFullAnswer(buffer, bufferPos)?

Там же цитата:
wadman
Выделенная функция определяет, что прочитанный пакет полный. В твоем случае это может быть наличие перевода строки.

В каждом случае свое определение полноты пакета и это зависит от протокола. Где-то есть начало и конец пакета (спец.символы или спец.последовательности), где-то только начало или только конец пакета. Иногда заметный перерыв. Например, между данными-байтами по 20 мс, а между пакетами - 200 мс.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39948850
Артём_59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, понял, спасибо
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39948852
Артём_59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, а как-то ограничение на параллельное чтение можно обойти программно? Или только аппаратно?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39948867
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артём_59,

не интересовался этим вопросом, но думаю, что на андроиде без рута, как минимум, это нереально.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39948915
Артём_59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, он есть и возможность править прошивки тоже есть. Если узнаете, сигнализируйте )
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39963704
Фотография sgretsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman ,

Подскажите плиз, через эту библиотеку возможно напрямую через NDK обращаться к встроенному Ком-порту? Плата Orange PI, на ней два встроенных кома.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39964100
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sgretsch,

я в таком сочетании не использовал. Только обычный смарт с андроидом и явой.
По идее работать должно, но без практики ответ только теоретический.

Но использование ява-моста (эта библиотека лишь обертка) в такой связке как-то не выглядит логичным, т.к. последний как раз дает отсутствующий доступ к железу и дровам, который из ндк должен быть проще.
В общем я-бы рекомендовал найти более нативный доступ к портам.
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39964118
Фотография sgretsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Так как раз android-serialport-api по идее и должен использовать NDK. Во всяком случае в примере который я скачал когда-то давно, так и есть, только не смог его запустить, надо правильно названия функций под NDK сгенерировать.

В целом там есть Сишный файл, который осуществляет доступ из линукса, он компилится в .so и подкладывается в проект, затем методы вызываются из JVM.

Опыта у меня с NDK мало, вот сейчас опять пытаюсь разобраться. В Вашем serialport.jar такая же схема? Или всё таки через USB порт всё прокидывается?
...
Рейтинг: 0 / 0
Android Usb Serial Port
    #39964143
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда надо понимать о чем речь. Одна из библиотек прокидывала сишную реализацию в яву, другая использовала андроидную реализацию прямого доступа с оберткой в ява-класс.

Сишную я особо не пользовал, только удостоверился, что работает и мне не подошла.
С ява-версией проще и привычнее было.

https://github.com/kai-morich/usb-serial-for-android - ява для юсб, к tty и подобному может не подойти.
https://code.google.com/archive/p/android-serialport-api/ - эта сишная, вроде. Из нее можно что-то выдернуть, но я тут не помощник.
...
Рейтинг: 0 / 0
150 сообщений из 150, показаны все 6 страниц
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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