狠狠撸

狠狠撸Share a Scribd company logo
CyberGarage
情報家電プロトコルスタック開発の展開
今野 賢 (Satoshi Konno)
skonno@cybergarage.org
http://www.cybergarage.org
2006年05月20日
ESPer2006
CyberGarage
未踏での開発物
CyberGarage未踏での開発物
■概要
組み込みシステム向け情報家電プロトコルスタックとしてUPnPを実装する。
将来の組込みシステムの高性能化を見越した高機能版と、最低限機能を有する
軽量版を実装
C++およびJava版のUPnPプロトコルスタックの開発経験を活かし、軽量なUPnP
プロトコルスタックを開発する。実装はC言語を想定しており、簡便さをそのままに、
実行速度およびプログラムサイズを考慮しながらデバイス回りの必要最低限の
機能から実装する。手順として、WindowsおよびUnixプラットフォームで基本
機能実装確認後、各プラットフォームへの移植する
■高機能版
既に開発済みC++ 版のUPnPプロトコルスタックをベースに、XMLパ-サー等の
軽量化および移植作業をベースに実装。
■軽量版
■対応プラットフォーム
組み込み系 : T-Engine、μITRON、BTRON、WindowsCE
PC系 : Windows(WIN32)、Linux、MacOSX
■概要
2004年度第2回 (2004年11月~2005年8月)
CyberGarageUPnPとは?
■実装機能詳細
機能 詳細 高機能版 軽量版
基本設計 - ○
SSDP ○ ○
GENA ○ ○
SOAP ○ ○
XML ○ ○
HTTP ○ ○
UPnP ○ ○
入出力 ○ -
ネットワーク ○ ○
時刻管理 時間管理仮想化関数 ○ ○
タスク タスク管理仮想化関数 ○ ○
排他制御 排他制御管理仮想化関数 ○ ○
文字操作 文字列操作、トークン分割関数等 ○ ○
データ構造 ベクタ構造?双方向リスト構造関数等 ○ ○
UPnPデバイス発見/応答サーバ?クライアント機能
UPnPサービス要求/応答サーバ?クライアント機能
SOAPメッセージサーバ?クライアント機能
XMLパーサー/ツリー構造操作機能
HTTP/1.1(RFC2616)サーバ?クライアント機能
UPnPデバイス/コントロールポイント関連機能等
ファイル入出力共通関数 / Java互換入出力ストリーム
ソケット(TCP/UDP)仮想化関数、URL処理機能等
■UPnPとは?
家庭ネットワーク規格として、マイクロソフト版ネットワーク版PnPとして提唱。同様な
技術としてはSunのJini、AppleのBonjour等。
規格としてはSOAP等のオープンスタンダードな仕様を組み合わせてたものであり
仕様は一般に公開されている。
CyberGaragePM助言内容/成果
■省サイズ
オブジェクトサイズを100KBとの目標設定に向けて設計および
実装作業を進めたが、UPnP全機能を実装の対象と方向転換
した要因もあり、結果として最終的なオブジェクトサイズは
モジュール選択(コンパイルオプション)により軽量版実績は
230KB~180KBにて完了。
他ベンダーのC言語による実装調査の結果も、200KB程度であり、ある程度妥当な
結果と思われる。ただし、ライブラリ関数領域節約のため、可能なものはマクロ展開
したため、ある程度の可読性は犠牲となった。
■モジュール化
ユーザー側で、組み込みたい機能を取捨選択できるよう軽量版に関してはコンパイル
オプションによるモジュール指定を可能とした。
UPnPデバイス(サーバ)機能/コントロールポイント(クライアント)機能部に大別し、UPnP
デバイス機能も、開発者が取捨選択可能なようコンパイルオプションを導入した。
軽量版
230KB
コンパイルオプション
コントロールポイント機能無効 × ○ ○ ○ ○
デバイス購読機能無効 × × ○ ○ ○
デバイスアクション機能無効 × × × × ○
デバイス問い合わせ機能無効 × × × ○ ○
オブジェクトサイズ 227KB 211KB 194KB 187KB 178KB
有効:○ 無効:×
CyberGarage
■対象ユーザ
成果公開
UPnPによる家庭内ネットワークまたは組み込み機器の相互接続環境構築の必要性の
ある開発者が主対象。対象者は、個人および企業、商用?非商用を問わない。
またオープンソースであるため、各プラットフォーム移植、HTTPクライアント/サーバー
実装等の教育的側面もあり。
■試験公開
No 代表者 所属 貢献内容
1 Aapo Makela Nokia
2 Johannes Gutlebe CERN
3 Theo Beisch 未確認
4 Rosfran Borges 未確認 軽量版評価
軽量版評価/設計アドバイス
軽量版評価/libxml2(XMLパーサ)対応/バグフィックス
軽量版評価/WindowsCE対応/バグフィックス
本公開に先立ち、軽量版を下記ユーザーに試験公開した。試験公開の結果として
以下のような貢献があり、本成果物に反映させた。
No 成果物 URL
1 高機能版 http://www.cybergarage.org/net/upnp/cc/index.html
2 軽量版 http://www.cybergarage.org/net/upnp/c/index.html
■本公開
高機能版/軽量版共にオープンソース(BSDライセンス)として公開予定。SourceForgeとの
併用を予定しており、同サイトの承認が取れ次第下記URLにて公開予定。
CyberGarage特徴(1)
■オブジェクト指向
BOOL upnp_clock_actionreceived(CgUpnpAction *action)
{
char *currTime = …..;
char *actionName = cg_upnp_action_getname(action);
CgUpnpArgument *currTimeArg =
cg_upnp_action_getargumentbyname(action, "CurrentTime");
cg_upnp_argument_setvalue(currTimeArg, sysTimeStr);
return TRUE;
}
<?xml version="1.0"?>
<scpd xmlns="urn:schemas-upnp-org:service-1-0" >
….
<actionList>
<action>
<name>GetTime</name>
…...
</action>
</actionList>
</scpd>
<?xml version="1.0" ?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
……
<device>
<deviceType>urn:schemas-upnp-org:device:clock:1</deviceType>
……
</device>
</root>
/**** デバイス初期化 ****/
CgUpnpDevice *clockDev = cg_upnp_device_new();
/**** デバイス定義情報設定 ****/
cg_upnp_device_parsedescription(clockDev,
    CLOCK_DEVICE_DESC, strlen(CLOCK_DEVICE_DESC));
/**** サービス取得/定義情報設定 ****/
CgUpnpService *timeService =
cg_upnp_device_getservicebyname(clockDev, "urn:schemas-upnp-org:service:timer:1");
cg_upnp_service_parsedescription(timeService, CLOCK_SERVICE_DESC, strlen(CLOCK_SERVICE_DESC);
/**** アクション処理関数設定 ****/
CgUpnpAction *getAction = cg_upnp_service_getactionbyname(timeService, “GetTime”);
cg_upnp_device_setactionlistener(clockDev, upnp_clock_actionreceived);
/**** デバイス開始 ****/
cg_upnp_device_start(clockDev);
……
/**** デバイス停止 ****/
cg_upnp_device_stop(clockDev);
/**** デバイス解放 ****/
cg_upnp_device_delete(clockDev);
UPnP機能を抽象化/隠蔽。開発者はデバイスXML定義およびアクション関数を作成する
だけであり、既存アプリケーションのUPnP対応も容易。
UPnPデバイス定義(CLOCK_DEVICE_DESC)
UPnPサービス定義(CLOCK_SERVICE_DESC)
アクション関数(upnp_clock_actionreceived)
CyberGarage特徴(2)
■軽量性
組み込み系であるT-Engine/μITRONを対象プラットフォームとし、高機能版を含めて軽量性
を重視した。高機能版は従来より軽量化し、軽量版のオブジェクトサイズは220KB。
本成果物を含め、開発者はC/C++/Javaの多様プログラム言語の選択が可能である。また
各プログラミング言語版の基本設計は共通であり、その移行は容易である。
■多言語対応
C++版 Java版 C言語版
using namespace CyberLink;
Device *dev = new Device();
dev->loadDescriptoin(….);
dev->setActionListener(dev);
dev->setQueryListener(dev);
dev->start();
……
dev->stop();
import org.cybergarage.upnp;
Device dev = new Device();
dev.loadDescripton(……);
dev. setActionListener(dev);
dev. setQueryListener(dev);
dev.start();
……
dev.stop();
CgUpnpDevice *dev = cg_upnp_device_new();
cg_upnp_device_parsedescription(dev, ….);
cg_upnp_device_setactionlistener(dev, …);
cg_upnp_device_setquerylistener(dev, …);
cg_upnp_device_start(dev);
……
cg_upnp_device_stop(dev);
■移植性
一般的なWindows(WIN32)やLinuxプラットフォームだけではなく、Unix全般および
組み込み系のT-Engine/μITRONを含む、幅広いプラットフォームを対象としている。
機種依存部は基本機能部のみで、他プラットフォームへの移植対応も容易
■オープンソース
オープンソースの一般的な特徴については割愛するが、公開ライセンスとしてBSDを
選択しているため、商用/非商用を問わず同ライセンス下で自由に活動できる。
また、試験公開時にもユーザーからの貢献があり、今後も完成度向上に向けて、
優秀な技術者の協力が得られる点も魅力である。
CyberGarage成果物利用実績① - Nokia
■ 組み込み機器
Nokia社の今年のQ3発売予定(現時点ではQ4にスリップ)の下記組み込み機器(Nokia 770)
の開発メンバーが試験実装中。
Nokia社とは、今後も共同開発作業を継続。当面の目標としては、軽量版を用いた同アプリ
ケーションの開発および他オープンソースプロジェクトを利用した高機能/信頼性の確保を
主眼とする事で合意。
CyberGarage成果物利用実績② - CERN
■ 研究用途
数多くのパッチ貢献を頂くと共に、本成果物の完成度が評価され、研究用のサービス発見
プロトコルを既存のSLP(Service Location Protocol)からUPnPベースへの移行を本格的に
検討中との連絡もあり、今後の普及に期待。
CyberGarage
未踏後の活動
CyberGarageオープンソース開発
■Nokia
C言語のプロジェクトに、Nokia側の開発者が4名参加。方向性が多少違う部分も
あったが、非常に精力的に参加して頂いていたが .....
今年の3月に、先方の法務から連絡があり、Nokiaの特許などに絡む問題との
問題で、当面はソースツリーへのコミットメント停止。具体的には、配布ライセンス
(現状はBSDライセンス)の修正が先方の要求で、現在は法務からの変更ライセンス
提示待ち。
他のコミッターからも、Nokia主導で配布ライセンスが変更されることに懸念が高し。
基本的には、Nokia社の開発者レベルでは協業したいのだが、まずは変更ライセンス
案をコミッターで協議の上、方向性を決定する。
Nokia者の意向もあるだろうが ......
配布ライセンスは、現状維持が基本
CyberGarageDLNA①
来年度は本成果物のベースとなるプロトコルUPnPおよび、その上位規格UPnP A/Vを
ベースするDLNA市場が急速に立ち上がると予想される。
本成果物の延長として、オープンソースのメディアプレイヤーであるVideoLAN、同じく
オープンソースのHDDレコーダであるMythTVと連携し、UPnP A/V拡張をベースとした
DLNAアプリケーション開発に注力。
■DLNA関連アプリケーション開発
VLCソースツリーに
パッチがマージ
CyberGarageDLNA②
基本的に個人では入会できないため、個人的な活動は困難。前身のDHWGでは個人でも
入会可能であり、関連仕様書も入手可能であったのだが .......
現状、仕様書は非会員でも$500で販売されているが認証の問題を含めると、個人での
活動は現実的ではない。
■DLNAは業界団体
日本でもコピーワンスなどの問題で、個人で開発できる領域ではなくなりつつある。
具体的には、DLNAの場合、ARIBがDTCP-IPでのコンテンツ保護の指針があるが
開発には、DTLAに開発ライセンスとして150万ほど必要であり、開発者(商品提供者)の
コンテンツプロバイダへの補償確約の問題など、個人で対応できるレベルではなく
なっている。
■規格が複雑化
DLNAの個人レベルの開発活動は年々難しくなっている
CyberGarage対応プログラミング言語拡張
Web2.0の要素として、スクリプト言語に代表される軽量プログラミングモデル(Lightweight
Programming Models)の隆盛がある。
この層の開発者を取り組むのを目的として、Perl版を開発し配布
■Perlへの対応
■サンプルアプリケーション
Perl版のサンプルとして、DLNAメディアサーバから動画コンテンツ(MPEG2)を取得して
AppleのiPodに向けたPodcastするシステムを構築。DLNAコンテンツリストからRSSの
変換、MPEG2からH.264への変換が主な機能。
CyberGarage家庭内ネットワークへの対応および拡張
今後家庭内ネットワークが重要視され、各種デジタル家電の商品化が想定されると
個人的に予想して ......
CyberGarageリモートデスクトップの世界
基本的には家庭内でユーザ操作に基づいて自由な
ユーザインタフェースを提供する規格。
画像転送プロトコルは、単純かつクライアント負荷が
少ないXRT2を選択
■RetemoUIへの対応
■Flashへの対応
現状のフレームワークに、Flashからアクセスできる
XMLサーバー機能を追記
市場にはIntel ViiVクライアントとして
今年後半に、登場予定
クライアントはFlashでの実装を想定
CyberGarage家庭内ネットワークゲートウェイ
リモートデスクトップとは異なる方式で、セキュリティを考慮しつつ家庭内ネットワーク
機器を透過的に使えるようなシステムを開発中
■家庭内ネットワークゲートウェイ
■システム構成図
Authentication
CyberGarage UPnP Proxy
UPnP Gateway
(Client Mode)
UPnP Gateway
(Server Mode)
ProxyProxy
Control Point
(Proxy) Control Point
(Proxy)
Virtual
Device
UPnP
Control Point
UPnP
Device
SSDP Search
SSDP
Response
SSDP Notify
HTTP Request
HTTP
Response
SSDP Notify
SSDP Search
SSDP Response
C
re
at
e
Vi
rt
u
al
D
e
vi
c
e
HTTP Proxy
HTTP Requett
HTTP Response
HTTP Request
HTTP
Response
SSDP Search
SSDP
Response
SSDP Notify
AuthenticationLogin
Register Client
CyberGarage組み込み機器への対応
より広範囲のネットワーク機器をサポートするために、uClinux、μITRON、SunSpot
(J2ME)などの組み込み系OSへの対応を予定。
また、家庭内ネットワーク機器制御に特化した専用OSの試作も検討中
■動作環境の拡充
CyberGarage
終わり

More Related Content

ESPer2006 情報家電プロトコルスタック開発の展開