Skip to content

1.1.Pebble

Akira-Sasaki edited this page Oct 6, 2015 · 2 revisions

目次

PebbleプラグインのBuildに必要なパッケージは以下の通りです。

プロジェクト 説明
PebbleApp Pebble側アプリケーション

公式サイトのインストール手順に従ってSDKをインストールします。公式サイトからインストールスクリプトをダウンロードして実行してください。 ※ Pebble SDKは、日々開発が進んでいますので、インストールする方法が変わる可能性がありますので、上記の方法でインストールできない場合には公式サイトをご確認ください。

Google Play からダウンロードした Pebble アプリにて、開発用の設定を行う必要があります。Pebble 本体にプログラムをインストールする前に、Pebble アプリで必要な設定を行ってください。 設定時に表示される IPアドレスは、Pebble 本体へのプログラムアップロード・デバッグに使用します。


MY PEBBLEをタップしてください。



SETTINGSをタップしてください。



Developer…をタップしてください。



Enable Developer Connectionにチェックしてください。



MY PEBBLEをタップしてください。



DEVELOPERをタップしてください。



Enabledにチェックしてください。

PebbleAppは、ターミナル上でビルドします。 src ディレクトリが存在するディレクトリにて、以下を実行してください。実行ファイルは build/dConnectDevicePebble.pbw となります。

pebble build

PebbleSDKのバージョンアップにより、Pebbleアプリの構成が変わることがあります。
その場合、以下のコマンドによりプロジェクト変換する必要があります。
その後、ビルドする場合、前のバイナリーファイルが残っている場合にビルドエラーが発生してしまう恐れがあります。
そのため、一度「pebble clean」を行う必要があります。

pebble convert-project
pebble clean
pebble build

全てを build しなおしたい場合には、以下を実行したのち、再度ビルドしてください。

pebble clean

デバッグ時、Build したプログラムをPebbleにダウンロードするには、以下のコマンドを実行してください。「3.1 スマートフォンでの設定」で取得した IP アドレスを指定します。

pebble install --phone 192.168.0.191

インストールと、その直後にデバッグログ表示を行う場合には、以下のコマンドを実行します。

pebble install --phone 192.168.0.191 --logs

dConnectDevicePebble.pbw をコピーします。 ターミナルから、cp コマンドにてコピーしてください。以下は cp コマンドの例になります。

[例] cp PebbleApp/build/dConnectDevicePebble.pbw dConnectDevicePlugin/dConnectDevicePebble/res/raw/dc_pebble.pbw

コピー後には、プロジェクトをリフレッシュして、再ビルドしてください。



iOSの場合は、以下の場所になります。

(1)使用できない標準関数
toa() strtok_r() 等は用意されていません。
strtok() 等はコンパイルは通るが、実行時エラーが発生します。
strtok()等、内部で static 変数を使っている標準関数は使えない可能性が高いです。
itoa()のかわりに、snprintf(buf, sizeof(buf), "%d", data); を使います。
(2)Pebble のプログラムに ctype.h で定義されている isdigit() isalpha() 等
これらの関数のどれか1つでも使うと、約300byte プログラムサイズが増えます。
現プログラムでは、IsDigit()等の自作関数を使用しています。
(3)コードサイズ
text/data/stack の領域の合計は、24Kbyte以下です。
(4)構造体を定義の、packed 指定
構造体のサイズが最小になるという効果があります。

typedef struct _attribute_((__packed__)) {
  .
  .
} TheStruct ;

(5)bool は 1byte
(6)可変引数マクロ
デバッグ用に以下のようなものを使うと良いです。

#define DEBUG_MODE //リリース時には、コメントにして build
#ifdef DEBUG_MODE
 #define DEBUG_MSG(args...) APP_LOG(APP_LOG_LEVEL_DEBUG, args)
#else
 #define DEBUG_MSG(args...)
#endif

(1)送信側の問題(pebble 共に持っている問題)
受信側は、受信終了後 ACK を送信側に返しても、送信側でその ACK を受け取れないことがあります。
この場合には送信側は送信エラーと判定するが、受信側は受信が正常に終了したと判断することに注意してください。

(2)送受信可能なバイト数は以下の数値に左右される。今回作成したプログラムは、以下の数値以上を設定することが必要です。

const int inbound_size = 128;
const int outbound_size =128;
app_message_open(inbound_size, outbound_size);

現行のPebbleOSでは、PebbleDictionary 自体の最大サイズは、124byteとなっています。
PebbleDictionary に、2つの bytes を登録した場合の最大サイズは、それぞれは 64byte・44byteです。
文字列として送信可能なのは40文字程度です。

以下の設定でも、この制限は変わりません。

int inbound_size = app_message_inbox_size_maximum();
int outbound_size= app_message_outbox_size_maximum();
app_message_open(inbound_size, outbound_size);

(3)連続送信
ハンドラー内では、2回以上の送信は不可能です。
タイマーハンドラー等を使用して、送信を時間的に分割してください。時間は3秒程度を取ってください。後述するBluetooth の速度が高い場合には 1秒程度でも構いません

(4) Bluetooth の通信速度
消費電力の関係で、デフォルトの状態では Bluetooth の動作速度は遅くなっています。この状態だと、Pebble が からの ACK を受信するのに2秒以上かかったり、ACK を取りこぼしたりします。
動作速度を上げる為には、app_message_outbox_begin() の直前に以下の2行を追加してください。
(常にこの2行が必要であることに注意してください。)

  app_comm_set_sniff_interval(SNIFF_INTERVAL_REDUCED);
  app_comm_set_sniff_interval(SNIFF_INTERVAL_NORMAL);

逆に動作速度を下げて消費電力を提言する為には、app_message_outbox_begin()の直前に以下の2行を追加してください。

  app_comm_set_sniff_interval(SNIFF_INTERVAL_NORMAL);
  app_comm_set_sniff_interval(SNIFF_INTERVAL_REDUCED);