antonyter
@antonyter

Проблема Bluegiga + Galaxy Note 10.1?

Есть сторонняя плата с чипом Bluegiga на борту. Планшет подключается по Bluetooth к плате и время от времени посылает ей запросы, на которые получает ответы (объем 2-3 сообщения (около 100 байт) в секунду). Все работает стабильно до тех пор, пока плата не начинает передавать команды чаще (раз в 10). При этом планшет в какой-то момент (через 1-2 минуты после установки связи) подвисает, а затем генерирует исключение (причем видно обрывок не дошедшего сообщения). В чем может быть причина? На телефоне Huawei Sonic все работает без подобных глюков. Если связать телефон с планшетом и эмулировать плату на телефоне — тоже все нормально.


Привожу функцию чтения из сокета:

public void run()
{
    final int BufferSize = 0x400;
    byte[] buffer = new byte[BufferSize];
    int bufferCursor = 0;
    int bufferRemainder = 0;
    final int MessageBufferSize = 0x400;
    byte[] message = new byte[MessageBufferSize];
    int cursor = 0;
    int bytes = 0;

    while(true)
    {
        try 
        {                
            if(bufferRemainder == 0)
            {
                bufferCursor = 0;
                bufferRemainder = BufferSize;
            }
                		
            bytes = mmInStream.read(buffer, bufferCursor, bufferRemainder);                			               	
            if(bytes >= 0)
            {     
                bufferCursor += bytes;
                bufferRemainder -= bytes;
                for(int i = bufferCursor - bytes; i < bufferCursor; ++i)
                {
                	message[cursor] = buffer[i];
                	//35 #
                	//36 $
                	//13 \r
                	//10 \n
                	if(cursor == 0)
                	{
                		if(buffer[i] == 35 || buffer[i] == 36)
                			cursor++;                  				
                	}                			
                	else if(buffer[i] == 13)
                	{
                		mHandler.obtainMessage(MESSAGE_READ, cursor, -1, message.clone()).sendToTarget();
                		cursor = 0;  
                	}
                	else if(buffer[i] != 10)
                		cursor++;     
                	if(cursor == BufferSize)
                		cursor = 0;
                }
            }
        } 
		catch(IOException readException)
		{
            if(cursor > 0)
            {
	            message[0] = 111;
	            mHandler.obtainMessage(MESSAGE_READ, cursor, -1, message.clone()).sendToTarget();
	    		cursor = 0;
            }
            Log.e(TAG, "Failed to read from input stream: " + readException.getMessage());
            connectionLost();
            break;
		}
    }
}
  • Вопрос задан
  • 2831 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы