Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

При приеме сообщения по bluetooth отутствует последний байт - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Работа c Bluetooth. Не получается найти новые устройства http://www.cyberforum.ru/android-dev/thread1710410.html
Пишу код, где по нажатию кнопки необходимо вывести список спаренных устройств, а также вместе с выводом произвести поиск и добавить новые устройства в выводимый список. Пока получилось вывести список...
Программирование Android Search Json (result) Добрый ночи. Такая проблема небольшая возникла. Сделал поиск информации, при нажатии на кнопку у меня идет запрос в базу вот пример нажатии. ... http://www.cyberforum.ru/android-dev/thread1710176.html
Необходимо прочитать штрих-код Программирование Android
Можете подсказать какой - нибудь пример с чтением PDF417 штрих - кода. Заранее благодарен.
Программирование Android скрыть клавиатуру
как сделать, чтобы после нажатия кнопки лупы (на клавиатуре) клавиатура пряталась автоматически?
Программирование Android После обновления HAXM не запускаются эмуляторы http://www.cyberforum.ru/android-dev/thread1709806.html
Всем привет! Обновил AS до 2.0, эмуляторы работали. Сегодня обновил HAXM, как он попросил. После этого эмуляторы стартуют невизуально, стабильно напрягают процессор, но не отображаются, логов по ним...
Программирование Android Загрузка листалки Создал swf под Андроид. Хочу загрузить в него другой swf с листалкой, который тоже сделан под Андроид. Если при компиляции назначение родительского swf Flash Player 20, то грузится нормально. Но... подробнее

Показать сообщение отдельно
foxis
5 / 5 / 0
Регистрация: 11.07.2011
Сообщений: 122

При приеме сообщения по bluetooth отутствует последний байт - Программирование Android

13.04.2016, 11:58. Просмотров 119. Ответов 0
Метки (Все метки)

Здравствуйте
необходимо по bluetooth связываться с МК (микрокон-ер) и андроид устройством, отправлять и получать сообщения в виде определенных команд (по протоколу).

В качестве базы взял за основу пример программы от гугл BluetoothChat.
Немного под редактировал ее, чтобы отправлять ни текстовые сообщения, а байты
данных.

Программа BluetoothChat для обмена сообщениями между двумя устройствами
пользуется потоком Handler.

В частности для чтения полученных данных из потока используется код:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
                // construct a string from the valid bytes in the buffer
                String readMessage = new String(readBuf, 0, msg.arg1);
//              mConversationArrayAdapter.add(mConnectedDeviceName + ":  "
//                      + readMessage);
 
                //My chnages
                mConversationArrayAdapter.add(mConnectedDeviceName);
                for (int i = 0; i < readBuf.length;i++){
                    mConversationArrayAdapter.add( ( Integer.toHexString( (int) readBuf[i] & 255 ) )  );
                    if (readBuf[i] == 0 && i > 25)
                        break;
                }
                //=====================
 
 
                break;


Здесь полный код обработчика:

Кликните здесь для просмотра всего текста
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
// The Handler that gets information back from the BluetoothChatService
    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MESSAGE_STATE_CHANGE:
                if (D)
                    Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
                switch (msg.arg1) {
                case BluetoothChatService.STATE_CONNECTED:
                    setStatus(getString(R.string.title_connected_to,
                            mConnectedDeviceName));
                    mConversationArrayAdapter.clear();
                    break;
                case BluetoothChatService.STATE_CONNECTING:
                    setStatus(R.string.title_connecting);
                    break;
                case BluetoothChatService.STATE_LISTEN:
                case BluetoothChatService.STATE_NONE:
                    setStatus(R.string.title_not_connected);
                    break;
                }
                break;
            case MESSAGE_WRITE:
                byte[] writeBuf = (byte[]) msg.obj;
                // construct a string from the buffer
                String writeMessage = new String(writeBuf);
//              mConversationArrayAdapter.add("Me:  " + writeMessage);
 
 
                // My changes
                mConversationArrayAdapter.add("Me: ");
                for (int i = 0; i < writeBuf.length;i++){
                    mConversationArrayAdapter.add( ( Integer.toHexString( (int) writeBuf[i] & 255 ) )  );
                }
                //========================
 
 
                break;
            case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
                // construct a string from the valid bytes in the buffer
                String readMessage = new String(readBuf, 0, msg.arg1);
//              mConversationArrayAdapter.add(mConnectedDeviceName + ":  "
//                      + readMessage);
 
                //My chnages
                mConversationArrayAdapter.add(mConnectedDeviceName);
                for (int i = 0; i < readBuf.length;i++){
                    mConversationArrayAdapter.add( ( Integer.toHexString( (int) readBuf[i] & 255 ) )  );
                    if (readBuf[i] == 0 && i > 25)
                        break;
                }
                //=====================
 
 
                break;
            case MESSAGE_DEVICE_NAME:
                // save the connected device's name
                mConnectedDeviceName = msg.getData().getString(DEVICE_NAME);
                Toast.makeText(getApplicationContext(),
                        "Connected to " + mConnectedDeviceName,
                        Toast.LENGTH_SHORT).show();
                break;
            case MESSAGE_TOAST:
                Toast.makeText(getApplicationContext(),
                        msg.getData().getString(TOAST), Toast.LENGTH_SHORT)
                        .show();
                break;
            }
        }
    };


Возникает следующая проблема:
msg.obj содержит сообщение ответа пришедшего на андроид устройство с
МК .

Но в некоторых случаях это сообщение содержится там не полностью, почему-то выпадает
последний байт (содержащий 2ую половину контрольной суммы).

Причем это ни проблема со связью, эта ошибка (отсутствие последнего байта с ответного сообщения) появляется постоянно, если приходит ответ определенного вида (т.е. строго определенная последовательность байтов).

Я понимаю, конечно последний байт (контрольную сумму) можно самостоятельно подкорректировать ,зная само
сообщение, посчитав эту сумму самостоятельно.

Но все-таки хотел бы узнать, с чем связано отсутствие последнего байта для некоторых сообщений ?
Почему одни сообщения приходят нормально, а другие с отсутствующим последним байтом ?


Вдогонку: бывает еще такой баг, msg.arg1 обычно содержит длину сообщения пришедшего
на андроид устройство. Но иногда это значение длины отличается от истинного.

Это конечно тоже не критично потому как в самом сообщении уже имеется информация про длину сообщения,
но все таки хотелось бы узнать от чего зависит значение msg.arg1 когда на
андроид устройство приходит сообщение ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru