少なくとも一度はガジェットに熱心な%username%を確かに尊敬していましたが、手首のBluetooth時計のような日常的なアクセサリーに注意を払いました。 時計の電話などではなく、Bluetoothアクセサリにあります。 便利な(私の意見では)補助ガジェット。
ブルートゥース時計での私の冒険は3、4年前に始まりました。そのような時計のテーマは、あらゆる種類のガジェットに近いニュースフィードでちらつきました。 当時の人気モデルは、Fossilと共同で開発されたSonyEricsson製品でした。 その時までに、私はすでに化石のそろばんWirst PDAを持っていたので、この会社の製品をもう一度試すことにしました。Amazonで化石のそろばんCallerIDを購入しました。
Fossil Abacus CallerIDは、SonyEricsson MBW-100の完全なアナログです。 可能性としては、電話との時間同期、着信コールの表示(小さな画面での発信者の名前、バイブレーションアラート)、および新しいメッセージの到着を知らせる「エンベロープ」があります。 CallerIDとMBW-100の両方は、SonyEricssonモデルの範囲とのみ互換性があります。
その瞬間、私はSE P1iを職場の電話として使用しましたが、そのような互換性の制限はほとんどありませんでした。 この時計はBluetoothプロファイルを公開していなかったため、それ以上深く掘り下げたくありませんでした。 そのため、Nokia N900まで行きました。 ある時点で、時計とMaemoの統合がひどく欠けているとクリックしました。 もう一度、私は時計で使用されているプロトコルに関する情報を検索エンジンで検索しました...開発が沸騰しました!
わずかに異なる機能を持つさまざまなメーカーの時計のいくつかのモデルが市場に出回っていますが、それらはグループに分けることができます。
-Fossil Abacus CallerID 、
SonyEricsson MBW-100 、
MBW-150および
MBW-200 (User Expirienceの観点からの最後の2つのモデルは、マルチメディアコントロールが存在する場合のみ最初のモデルと異なります)。
-
シチズンi:Virtおよびi:Virt-Mの時計は、日本の国内市場向けに設計されています。 私の意見では、これが最も興味深い解決策です。
-LG Prada Linkは、LG Prada電話専用に販売されているため、非常にまれであり、(私にとっては)特別な興味はありません。
-さまざまな中国の時計とブレスレット。 ここでは、LM Technologies LM957、
LM-958 、およびLM959に注目できますが、ライブインスタンスは1つも見つかりませんでした。 ブレスレットに関しては、極端に湾曲したソフトウェアの実装が異なります。
私のプロジェクトについての話に進む前に、私が開発を可能にした1つの形式または別の情報を提供してくれた他の開発者のプロジェクトに注目したいと思います。
-シック! SymbianのBT-Watch。
-Windows Mobile用の
smartWatchM 。
-クロスプラットフォーム
OpenWatchの開発は、
私の開発と並行して進行します。
私のプロジェクトには、競合他社のプロジェクトと比べてどのような利点がありますか?
主な違いは概念です。 私の最初の要件は、特定のウォッチモデルごとに実装されるUser Expirienceのサポートでした。 つまり、たとえば時計に発信者の番号を表示する機能がある場合、これは代わりに天気予報を掌握する必要があるという意味ではありません。 電話と対話する場合、クロックインターフェイスは、プレゼンテーションレベルではなく、ビジネスレベルのコマンドセットで表されます。
2番目の要件は、ウォッチ機能の最大数をカバーすることです。 たとえば、Citizen i:Virtを使用すると、着信コールの表示、コールの切断と着信コールのドロップ、着信メッセージのリストの表示、時計での着信メッセージの読み取り、電話プロファイルの表示と切り替え、オペレーター名の表示、電話のバッテリー残量を確認できます。 最後に、彼らはさまざまな通知(振動中)、ニュース(原文のまま!)を表示でき、さらにカメラのシャッターを放すこともできます!
3番目の重要な要件は、合理的に考えられたコンパクトなコードの実装です。 私のプロジェクトは、stdlibおよびglib基本ライブラリのみを使用してC / C ++で開発されています。 STL、Boost、GlibMM、およびそれらのような他の人々は、彼らの大騒ぎのために、さまざまな時にプロジェクトから追い出されました。
メモリ、プロセッサのリソースが限られているモバイルデバイスで数か月間動作することを忘れないでください。バッテリーリソースも考慮に入れる必要があります。 リソースの浪費、構造化の悪さ、概念の低さのために、OpenWatchプロジェクトの軟膏にハエを注ぐ準備ができています。
時計はどのように機能しますか?
おもしろいですが、最初はこれがどのように機能するのかはっきりしていませんでしたが、すべてが非常にシンプルであることが判明しました。 自転車の発明なし。
そのようなデバイスのすべての開発者は、BluetoothグループおよびETSIの推奨事項を順守します。通信にはIFCOMMおよびATコマンドを使用します。 日本モバイルコンピューティングプロモーションコンソーシアム(MCPC)は、BTウォッチの実装に関連するいくつかの仕様も公開しています。
FossilとSonyEricssonでは、特定のUUIDを使用してSPPプロファイルを電話に公開する必要があります。 他の製造業者は、HFPプロファイルの拡大を固守しています。
残念ながら、トランクバージョンのBlueZ bluetoothスタックのみがATコマンドの外部エージェントを実装できます。したがって、HFPプロファイルのサポートにはいくつかの不便さが伴います:さまざまなbluetoothオーディオとクロックのサポートを同時に実装することはできません。 (私の実装では、この不便さを最小限に抑えました。HFPサポートは「フラグ」でオンになり、Audio BlueZプラグインはプログラムの間のみ無効になります)。
FossilとSonyEricssonが使用するコマンドのセットは、後者とは異なる電話機のドキュメントで詳しく説明されています。 交換時間と電話のダンプを見て、サポートする必要があるチームを判断するだけです。 しかし、ここでは、キックがないわけではありません。 メディアプレーヤーコントロールをサポートしていない若いモデルには完全なUnicode文字ジェネレーターがありますが、古いモデルにはASCIIしかありません。そのため、発信者の名前はグラフィック形式でのみ表示し、電話でテキストを描画し、ラスターを時計に送信します。 メディアプレーヤーからのメタ情報を使用すると、一般的に歌は次のようになります。クロック内のメタ情報からイベントをスローすると、同じテキストのコマンドで返信されます-ラスターに描画します。
Citizen i:Virtを使用した個別のアドベンチャー。 日本人はとても閉じています。 この時計は日本の国内市場向けに設計されており、シャープソフトバンクとディズニーモバイルの携帯電話でのみ動作します。 ここでは、チームの一部が標準仕様でカバーされており、一部にはMCPC仕様があります。 主なものは、ダンプのリバースエンジニアリングによってのみカバーされます。 現在のところ、ニュースをブロードキャストしたりカメラを制御したりするコマンドは私には不明のままです。これらの機能をサポートする電話を手に入れ、デバイス間のすべてのトラフィックをキャプチャしてさらに分析する必要があります。
Gnome MobileおよびMaemoとの統合
このセクションのタイトルでGnome Mobileを具体的に指摘し、多くのLinuxベースのモバイルプラットフォームの開発はこのプロジェクトに基づいているという事実を強調しました。 この事実により、
Gnome Mobileプロジェクトに基づいて、アプリケーションを他のLinuxプラットフォームに簡単に移植できます。
私のプロジェクトでは、オブジェクトモデルを積極的に使用して機能コンポーネントを実装しています。エージェントと対話する通信層を実装するかなり薄いコアが実装されています-モデムや
テレパシーとの統合など、特定の機能ドメインを実装するコンポーネント
モデムとの直接統合。 私は次の理由でそれを実装しなければなりませんでした:良いことには、ネットワーク上の登録のステータスとオペレーターの名前を表示する必要があり、モデムの着信コールはテレパシーよりもずっと早く表示されます。 さらに、私はこのコンポーネントをテレパシーの実装をマスターするよりもずっと早く開発しました。 N900のモデムAPIは閉じられていますが、必要なものはすべて、BlueZリバースエンジニアリングに基づいたオープンソースから学習できます。
メッセージングサービスとの統合。 Maemoでは、ショートメッセージとIMサービスを使用したすべての作業は、
RTCOMMシステムと密接に関連して
います。 RTCOMMは永続的なログストレージを提供するため、RTCOMM APIを使用して着信メッセージを読み取ることは論理的でした。 さらに、rtcomm-event-loggerは、DBUS信号を使用してデータを追加または変更することを他のプロセスに通知します。
テレパシーとの統合。 Gnome MobileとMaemoには1つの優れた能力があります。 この機能は、3GPP電話サービスの開発の概念にも対応しています。 この機能は、すべてのCSドメインの通話がVoIPサービスとIMに相当し、それらのサービスがテレパシーを通じて実装されることです。 メッセージングサービスおよびモデムとの統合は以前に行われたため、この場合のテレパシーとの統合は、VoIPコールのサービスに必要です。 残念ながら、CのバインディングはTelepathy自体ではあまり文書化されていないため、Impathyプロジェクトのソースに助けを求める必要がありました。 このコンポーネントの主な「フットクロス」はGObjectであり、Telepathy Observerインターフェースを実装しています。
Maemoのマルチメディアプレーヤーは
MAFWフレームワークを使用して実装されており、Media Playerアプリケーションはフロントエンドにすぎません。 プレイリストとボリュームコントロールはMAFWを通じて実装されます。
ATコマンドの基本仕様には、アクセサリステータスとバッテリー充電のレポートが含まれます。 これらはすべてlibhalから取得できます。 プロファイル管理は、libprofileを通じて実装されます。 デバイス間で時刻を同期するには、libtimeを使用する必要がありました。 さて、化石とSEの時計のテキストを描くために-
カイロ 。
今、最も興味深いものについて。 システム、コール制御から通知を受け取ります。 システム内のすべての通知(黄色のティーザー、カレンダー、目覚まし時計など)は、通知デーモンプロセスの
org.freedesktop.Notifications D-BUSインターフェイスによって実装されます。 それでも何かをブラウズまたは点滅する必要がある場合、hildon-sv-notification-daemon(com.nokia.HildonSVNotificationDaemon)が動作し、notification-daemonが対応する呼び出しを行います。 着信時に、Phoneアプリケーションはhildon-sv-notification-daemonを直接呼び出します。
したがって、これらのインターフェイスのメソッドを呼び出すという事実は、
D-BUS低レベルAPIを使用して適切なメッセージフィルターを設定することで見つけることができ
ます 。 どちらの場合も、両方のデーモンがリクエストとして発行したハンドルを知ることが重要です。 つまり、method_call DBUSメッセージだけでなくmethod_returnも追跡し、それらの間の相関を構築する必要があります。 method_returnメッセージのDBUS低レベルAPIではグローバルフィルターを設定することしかできないという事実により、問題は複雑です。そのため、実装されたモニターコードは、このフックのサービスでデバイスに負担をかけないように、非常に高速で超コンパクトでなければなりません。 さらに、欠陥1719に関心のある人にD-BUSに注意を喚起したいと思います。 その存在は、プロセスごとに1つのコールモニターのみを実装する可能性に制限を設定します。
実現した機会
そろばんCallerID、SonyEricsson MBW-100:
-セルラーおよびVoIPの着信-番号と名前、
-着信音のミュート、着信コールのリセット、
-着信IMおよびSMSメッセージ-「コンバーター」。
ソニー・エリクソンMBW-150、MBW-200:
-セルラーおよびVoIPの着信-番号と名前、
-着信音のミュート、着信コールのリセット、
-着信IMおよびSMSメッセージ-「コンバーター」、
-メディアプレーヤーの音量と再生を制御します。
シチズンi:美徳:
-セルラーおよびVoIPの着信-番号と名前、
-着信音のミュート、着信コールのリセット、
-不在着信ログ、
-着信IMおよびSMSメッセージ-「コンバーター」、
-未読のIMおよびSMSメッセージを時計で直接読む、
-電話プロファイル管理-基本的で静かな、
-現在のプロファイルの表示、
-オペレーターの名前とバッテリー残量の表示、
-受信メールの通知、目覚まし時計とカレンダーの通知、他のアプリケーションの通知。
ブレスレットとスタッフ:
...上記のすべて。
結論として、開発プロセス中に撮影したビデオをいくつか紹介します。 私はビデオの品質をおaびします。
Habréの出版を手伝ってくれたみんなに感謝します!