Я никогда не делал много C, и я немного в тупике, чтобы наилучшим образом отправить логическое из приложения Android в Pebble Watch.Отправка булевых в Pebble с PebbleKit
У меня есть строки, отлично работающие, но, похоже, не существует метода addBoolean в PebbleDictionary. В качестве работы я пытаюсь использовать addUint8 для отправки 1 или 0, но у меня возникли проблемы с обработкой сообщения в Pebble.
Вот мой Android код:
PebbleDictionary data = new PebbleDictionary();
if (isGPSFix()){
data.addUint8(GPS_HAS_FIX_KEY, Byte.valueOf("1"));
} else {
data.addUint8(GPS_HAS_FIX_KEY, Byte.valueOf("0"));
}
PebbleKit.sendDataToPebble(app.getContext(), UUID, data);
И в моем Pebble у меня-структуру данных:
static struct MyData {
uint8_t haveGPS[1];
.... // other stuff ommitted
AppSync sync;
uint8_t sync_buffer[256];
} s_data;
И тогда я пытаюсь сравнить его, как это в моем sync_tuple_changed обратного вызова.
static void sync_tuple_changed_callback(const uint32_t key, const Tuple* new_tuple, const Tuple* old_tuple, void* context) {
(void) old_tuple;
switch (key) {
case GPS_HAS_FIX_KEY:
if (memcmp(s_data.haveGPS, new_tuple->value->data, 8) == 0){
memcpy(s_data.haveGPS,new_tuple->value->data, new_tuple->length);
vibes_short_pulse();
}
break;
default:
return;
}
}
Часы не падают, он никогда не вибрирует, когда телефон падает или приобретает GPS.
Спасибо @sarfata. Мне не хватало записи в начальных значениях Tuplet. Я не совсем понял memcmp, но если я просто уведомлю о каждом обновлении, я, по крайней мере, сейчас получаю вибрации. –
У меня теперь есть логика сравнения, работающая правильно. См. Мой ответ ниже для работы команд memcmp и memcpy. –