Пользовательская последовательность Vibe в Pebble.js?

Я разработал Watchapp с Pebble.js который выбирает удаленный файл, содержащий целое число, и испускает столько "коротких" событий Vibe.

Проблема в том, что события Vibe не происходят, если они находятся в процессе. Я прибегнул к чему-то вроде этого, чтобы попытаться распространить их (где BUMP_COUNT_INT == количество испускаемых флюидов):

    for (var i = 0; i < BUMP_COUNT_INT; i++) {
      setTimeout(function(){ 
        Vibe.vibrate('short'); 
    }, 900*i);

Однако даже 900 мс ( * Vibes) не соответствуют. Иногда между ними больше или меньше места, и они иногда сливаются (вызывая меньше вибраций, чем ожидалось).

Похоже, что C SDK способен создавать пользовательские последовательности.

Я надеялся, что кто-то наткнулся на более чистый обходной путь или более стабильный способ сделать это с помощью Pebble.js ...?

Должен ли я просто признать, что мне придется распространять Vibes еще дальше, если я захочу продолжить с Pebble.js?

Чтобы ты делал?

1 ответ

Решение

Пользовательские шаблоны не доступны в Pebble.js, но вы можете легко добавить новый тип вибрации в Pebble.js и реализовать его как пользовательский шаблон на стороне C в Pebble.js.

Шаги будут:

  1. Клонируйте проект Pebble.js на GitHub и получите локальную копию. Вам нужно будет скачать и установить Pebble SDK, чтобы скомпилировать его локально на вашем компьютере (это не будет работать в CloudPebble).

  2. Объявите новый тип команды VIBE в src/js/ui/simply-pebble.js (библиотека JavaScript Pebble.js):

    var vibeTypes = [
      'short',
      'long',
      'double',
      'custom'
    ];
    
    var VibeType = makeArrayType(vibeTypes);
    
  3. Создать новый тип Vibe в src/simply/simply_msg.c

    enum VibeType {
      VibeShort = 0,
      VibeLong = 1,
      VibeDouble = 2,
      VibeCustom = 3,
    };
    
  4. А затем расширить обработчик команд Vibe для поддержки этого нового типа src/simply/simply_msg.c

    static void handle_vibe_packet(Simply *simply, Packet *data) {
      VibePacket *packet = (VibePacket*) data;
      switch (packet->type) {
        case VibeShort: vibes_short_pulse(); break;
        case VibeLong: vibes_break_pulse(); break;
        case VibeDouble: vibes_double_pulse(); break;
        case VibeCustom: 
          static const uint32_t const segments[] = { 200, 100, 400 };
          VibePattern pat = {
            .durations = segments,
            .num_segments = ARRAY_LENGTH(segments),
          };
          vibes_enqueue_custom_pattern(pat);
          break;
      }
    }
    

Еще лучшим решением было бы предложить исправление, чтобы любой пользовательский шаблон мог быть разработан на стороне JavaScript и отправлен на часы.

Другие вопросы по тегам