Pebble.js中的自定义Vibe序列?

时间:2014-12-30 23:00:41

标签: pebble-watch pebble-sdk pebble-js watchapp

我开发了一个带Pebble.js的Watchapp,它获取一个包含整数的远程文件,并发出许多“短”Vibe事件。

问题是:如果当前正在进行Vibe事件,则不会发生。我已经使用这样的东西试图将它们展开(BUMP_COUNT_INT ==要发出的Vibes数量):

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

然而,即使900毫秒(* Vibes)也不一致。它们之间有时或多或少有空间,它们有时合并(导致的振动少于预期)。

看起来C SDK能够自定义序列。

我希望有人遇到过更清洁的解决方法,或者更稳定的方式来使用Pebble.js来解决这个问题......?

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

你会做什么?

1 个答案:

答案 0 :(得分:3)

Pebble.js中没有自定义模式,但您可以轻松添加新的&#39;类型&#39; Pebble.js中的vibe,并将其作为Pebble.js的C端的自定义模式实现。

步骤如下:

  1. 在GitHub上克隆Pebble.js项目并获取本地副本。您需要download and install the Pebble SDK在您的计算机上本地编译它(这不适用于CloudPebble)。

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

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

    中创建一种新类型的Vibe
    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;
      }
    }
    
  5. 更好的解决方案是建议一个补丁,以便可以在JavaScript端设计任何自定义模式并发送到手表。