powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port
25 сообщений из 150, страница 2 из 6
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
25 сообщений из 150, страница 2 из 6
Форумы / Android [игнор отключен] [закрыт для гостей] / Android Usb Serial Port
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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