1

我开发了一个 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)也不一致。它们之间有时会有更多或更少的空间,它们有时会合并(导致比预期更少的 Vibes)。

C SDK 似乎能够自定义序列。

我希望有人遇到了更清洁的解决方法,或更稳定的方法来使用 Pebble.js 实现这一目标......?

如果我想继续使用 Pebble.js,我是否应该接受必须进一步传播 Vibes 的事实?

你会怎么办?

4

1 回答 1

4

自定义模式在 Pebble.js 中不可用,但您可以轻松地在 Pebble.js 中添加新的“类型”氛围,并将其作为自定义模式在 Pebble.js 的 C 端中实现。

步骤是:

  1. 在 GitHub 上克隆 Pebble.js 项目并获取本地副本。您需要下载并安装 Pebble SDK以在您的计算机上本地编译它(这在 CloudPebble 上不起作用)。

  2. src/js/ui/simply-pebble.js(Pebble.js JavaScript 库)中声明一种新型 vibe 命令:

    var vibeTypes = [
      'short',
      'long',
      'double',
      'custom'
    ];
    
    var VibeType = makeArrayType(vibeTypes);
    
  3. src/simply/simply_msg.c

    enum VibeType {
      VibeShort = 0,
      VibeLong = 1,
      VibeDouble = 2,
      VibeCustom = 3,
    };
    
  4. 然后扩展 Vibe 命令处理程序以支持这种新类型的 vibesrc/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 端设计任何自定义模式并将其发送到手表。

于 2015-01-04T11:38:41.610 回答