2017-01-14 2 views
2

Я разрабатываю мобильное приложение для связи с модулем Bluetooth. Я отправляю данные через приложение Android &, получая его на модуле BLE.Отправка строки в качестве буфера Uint8

Я использую cordova & BLE центральный плагин для cordova для связи с устройством от android.

Приложение, похоже, работает нормально, но с буфером Uint8 что-то не так.

НА APP ЧАСТЬ:

Я пытаюсь отправить строку следующим образом:

var data : 'action/523'; 

Я использую следующие функции для преобразования строки в буфер массива, прежде чем я, наконец, отправить данные в BLE устройство

function stringToArrayBuffer(str) { 
    // assuming 8 bit bytes 
    var ret = new Uint8Array(str.length); 
    for (var i = 0; i < str.length; i++) { 
     ret[i] = str.charCodeAt(i); 
    } 
    return ret.buffer; 
} 

var data = stringToArrayBuffer(data); 
ble.writeWithoutResponse(app.connectedPeripheral.id, SERVICE_UUID, WRITE_UUID, data, success, failure); 

на устройстве ЧАСТЬ:

Я использую простое устройство специфическую функцию для получения данных о BLE устройства, как следовать

void SimbleeBLE_onReceive(char *data, int len) { 
    Serial.print(data); //prints 'action/523'; 
} 

Теперь это работает отлично, но позже, когда я отправить строку, как следовать

var data : 'action/3'; 

Это просто заменяет первую цифру целого числа & добавить предыдущее целочисленное значение 3 [23] 'action/323/';

Это происходит каждый раз, когда я пытаюсь отправить 2 или mor e сначала цифра с последующим меньшим цифровым значением позже

Почему так? Есть ли что-нибудь такое, как буферный кеш?

ответ

1

На вашей разделит часть, похоже, вы получаете 2 ДАННЫХ:

  1. Сырых данные (символ * не NULL прекращается)
  2. Длины данных

Вы должны NULL прекратить вашу полученную строку

void SimbleeBLE_onReceive(char *data, int len) 
{  
    char tmp[256]={0}; 
    strncpy(tmp,data,min(len,sizeof(tmp)-1)); 
    Serial.print(tmp); 
} 

Таким образом, при вашем втором вызове вы должны увидеть action/3 вместо action/323/

+0

Благодарим за объяснение и ответ! Только одна ошибка. В строке отсутствует отсутствующая скобка: 4 кода. :) Пожалуйста, отредактируйте. благодаря – MANnDAaR

Смежные вопросы