Pebble ウォッチフェイスとこのウォッチフェイス用の Android アプリをプログラミングしています。私は以前に C でプログラミングしたことがないので、これは私にとって少しトリッキーです。問題は、コールバックのキーとして常に 0 を取得することです。
Pebble 側では、次のようになります。
static AppSync sync;
static uint8_t sync_buffer[32];
...
Tuplet initial_values[] = {
TupletInteger(WEATHER_KEY, (uint8_t) 0),
TupletInteger(TEMP_KEY, (uint8_t) 20),
TupletInteger(PROB_KEY, (uint8_t) 50),
TupletInteger(BATTERY_KEY, (uint8_t) 100),
TupletInteger(RING_MODE_KEY, (uint8_t) 0),
TupletCString(TITLE_KEY, "TITLE"),
TupletCString(ARTIST_KEY, "ARTIST")
};
app_sync_init(&sync, sync_buffer, sizeof(sync_buffer), initial_values, ARRAY_LENGTH(initial_values),
sync_tuple_changed_callback, sync_error_callback, NULL);
そしてコールバック:
void sync_tuple_changed_callback(const uint32_t key, const Tuple* new_tuple, const Tuple* old_tuple, void* context) {
static char temp_buf[] = "aaaaaaaa";
snprintf(temp_buf, sizeof(temp_buf), "%d,%d", (int)key, new_tuple->value->uint8);
text_layer_set_text(title_layer, temp_buf);
switch (key) {
case WEATHER_KEY:
set_weather_state(new_tuple->value->uint8);
break;
case TEMP_KEY:
set_temp(new_tuple->value->uint8);
break;
case PROB_KEY:
set_prob(new_tuple->value->uint8);
break;
case BATTERY_KEY:
vibes_short_pulse();
set_phone_percentage(new_tuple->value->uint8);
break;
case RING_MODE_KEY:
set_ring_state(new_tuple->value->uint8);
break;
case TITLE_KEY:
text_layer_set_text(title_layer, new_tuple->value->cstring);
break;
case ARTIST_KEY:
text_layer_set_text(artist_layer, new_tuple->value->cstring);
break;
}
}
Android 側:
public void sendBatteryInformation(byte state) {
PebbleDictionary data = new PebbleDictionary();
data.addUint8(3, (byte)30);
PebbleKit.sendDataToPebble(getApplicationContext(), PEBBLE_APP_UUID,
data);
}
Android 関数 sendBatteryInformation を呼び出すと、時計のコールバックがトリガーされます。どのケースも実行されなかったので、キーと値を textlayer "title_layer" に出力しました。キーとして「3」を送信しますが、常に「0,20」が出力されます。
私は何を間違っていますか?ご協力ありがとうございました!