2016-06-02 2 views
0

У меня есть приложение для Android, которое отправляет данные в модуль BLE113. Я получаю данные через характеристику GATT, тип которой является «пользователем». Я могу получить данные как строки. Когда я отправляю целые числа, скажем 24, я получаю его как строку «24». В любом случае я могу преобразовать этот номер строки в целочисленный тип?BGScript: преобразование строки в целое число

Это файл gatt.xml.

<characteristic uuid="xxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx" id="configuration"> 
    <description>Config Register</description> 
    <properties read="true" write="true"/> 
    <value type="user" /> 
</characteristic> 

Это фрагмент с Android-стороны, чтобы написать целочисленное значение «1».

String str = "1"; 
    try { 
     byte[] value = str.getBytes("UTF-8"); 
     chara.setValue(value); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
. 
. 
. 
boolean status = mBluetoothGatt.writeCharacteristic(chara); 

Я хочу получать данные как целое '1' себя в стороне BGScript. Я делаю что-то неправильно с конверсией? Пожалуйста, помогите мне отправить целые числа.

Должен ли он что-либо делать с типом 'USER' характеристики GATT? Если я изменю его на «hex» или «utf-8», проблема будет решена?

+0

Не могли бы вы добавить пример кода, который вы используете? И при отправке, и при получении? Возможно, вы просто столкнетесь с некоторыми проблемами преобразования типа. – SJoshi

+0

Привет, я отредактировал этот вопрос с помощью фрагментов. Пожалуйста, см. –

ответ

0

В файле gatt.xml, изменить тип значения из «пользователь» на «Hex» и дать ему некоторую фиксированную длину, например, так:

<characteristic uuid="xxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx" id="configuration"> 
    <description>Config Register</description> 
    <properties read="true" write="true"/> 
    <value type="hex">00</value> 
</characteristic> 

В вашем Android проекта, предполагая, что chara имеет тип BluetoothGattCharacteristic, вы пишете характеристику что-то вроде:

int newConfigRegValue = 1; 
chara.setValue(newConfigRegValue, BluetoothGattCharacteristic.FORMAT_UINT8, 0); 
boolean status = mBluetoothGatt.writeCharacteristic(chara); 

Тогда в вашем BGScript (я полагаю, вы не сказали, в противном случае), в attributes_value() случае, вы можете сохранить это целое число, как:

dim configRegister 
... 
event attributes_value(connection, reason, handle, offset, value_len, value_data) 
... 
    if handle = configuration then 
     configRegister = value_data(0:value_len)  
    end if 
... 
end 

-Ted

-Begin Edit-

Вы можете сделать это.

Характерным в вашем gatt.xml будет выглядеть следующим образом:.

<characteristic uuid="xxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx" id="configuration"> 
    <description>Config Register</description> 
    <properties read="true" write="true"/> 
    <value type="user">0</value> 
</characteristic> 

Затем в файле BGScript, вам нужно будет указать значение, когда запрос на чтение приходит Это делается в случае attributes_user_read_request() , Например:

event attributes_user_read_request(connection, handle, offset, maxsize) 
    if handle = configuration then 
     # Do something to retreive the configRegister value 
     # If you need to read from external EEPROM or something, save the 'connection' value so you can use it in the callback event 
     call attributes_user_read_response(connection, 0, 1, configRegister(0:1)) 
    end if 
end 
+0

Спасибо Теду. Это помогает мне. Могу ли я узнать, что если я могу сделать это с помощью типа «пользователь»? –

+0

Я обновил свой ответ. См. Отредактированный раздел. – Ted

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