Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2004年度IPA未踏ソフトウェア事業 情報家電プロトコルスタックの開発 最終報告会資料

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

2004年度IPA未踏ソフトウェア事業 情報家電プロトコルスタックの開発 最終報告会資料

Avatar for Satoshi Konno

Satoshi Konno

August 24, 2005

More Decks by Satoshi Konno

Other Decks in Programming

Transcript

  1. CyberGarage PM助言内容/成果 ▪省サイズ オブジェクトサイズを100KBとの目標設定に向けて設計および 実装作業を進めたが、UPnP全機能を実装の対象と方向転換 した要因もあり、結果として最終的なオブジェクトサイズは モジュール選択(コンパイルオプション)により軽量版実績は 230KB~180KBにて完了。 他ベンダーのC言語による実装調査の結果も、200KB程度であり、ある程度妥当な 結果と思われる。ただし、ライブラリ関数領域節約のため、可能なものはマクロ展開

    したため、ある程度の可読性は犠牲となった。 ▪モジュール化 ユーザー側で、組み込みたい機能を取捨選択できるよう軽量版に関してはコンパイル オプションによるモジュール指定を可能とした。 UPnPデバイス(サーバ)機能/コントロールポイント(クライアント)機能部に大別し、UPnP デバイス機能も、開発者が取捨選択可能なようコンパイルオプションを導入した。 軽量版 230KB コンパイルオプション コントロールポイント機能無効 × ◦ ◦ ◦ ◦ デバイス購読機能無効 × × ◦ ◦ ◦ デバイスアクション機能無効 × × × × ◦ デバイス問い合わせ機能無効 × × × ◦ ◦ オブジェクトサイズ 227KB 211KB 194KB 187KB 178KB 有効:◦ 無効:×
  2. CyberGarage 実装進捗状況 ▪実装進捗率 No 機能 詳細 高機能版 軽量版 1 基本設計

    - 100% 2 SSDP 100% 100% 3 GENA 100% 100% 4 SOAP 100% 100% 5 XML 100% 100% 6 HTTP 100% 100% 7 UPnP 100% 100% 8 入出力 100% - 9 ネットワーク 100% 100% 10 時刻管理 時間管理仮想化関数 100% 100% 11 タスク タスク管理仮想化関数 100% 100% 12 排他制御 排他制御管理仮想化関数 100% 100% 13 文字操作 文字列操作、トークン分割関数等 100% 100% 14 データ構造 ベクタ構造・双方向リスト構造関数等 100% 100% UPnPデバイス発見/応答サーバ・クライアント機能 UPnPサービス要求/応答サーバ・クライアント機能 SOAPメッセージサーバ・クライアント機能 XMLパーサー/ツリー構造操作機能 HTTP/1.1(RFC2616)サーバ・クライアント機能 UPnPデバイス/コントロールポイント関連機能等 ファイル入出力共通関数 / Java互換入出力ストリーム ソケット(TCP/UDP)仮想化関数、URL処理機能等 基本的実装は 100%作業完了
  3. CyberGarage 移植進捗概要 ▪プラットフォーム別進捗率 No プラットフォーム高機能版 軽量版 備考 1 WindowsXP 100%

    100% 2 Unix 100% 100% 3 MacOSX 100% 100% 4 T-Engine 100% 100% 5 μITRON 95% 95% ミスポ製シュミレータにて作業中 6 BTRON 100% 100% 一部機能実装不可 7 WindowsCE - 100% 実施計画書対応予定外 TCP/UDPプロトコルスタックはKASAGO製 高機能版および軽量版に関する全機能実装および移植作業は完了。主としてこれらの プラットフォームにて各機能のテストを実施。 ▪WindowsXP/Unix/MacOSX ▪T-Engine ▪μITRON 高機能版/軽量版共に、全プラットフォーム依存部をμITRONの関数にて置き換え作業、 タスク/同期関連機能部の動作確認完了。ネットワーク機能部につき動作確認中。 ▪BTRON 開発途中にOSとしてマルチキャスト機能の不備等の問題があったため、作業上は コンパイルを通すレベルにて進捗。将来的にはOSが拡張されれば即時に対応可。 高機能版および軽量版に関する全機能実装および移植作業は完了。主としてこれらの プラットフォームにて各機能のテストを実施。 オープンソース公開の成果として、ユーザー貢献および協力作業にて軽量版の 移植作業完了。 ▪WindowsCE 済 済 済 済 μITRON移植作業中
  4. 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にて公開予定。
  5. 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)
  6. 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を 選択しているため、商用/非商用を問わず同ライセンス下で自由に活動できる。 また、試験公開時にもユーザーからの貢献があり、今後も完成度向上に向けて、 優秀な技術者の協力が得られる点も魅力である。
  7. CyberGarage 動作環境 TCP/IPプロトコルスタックとしてKasago for T-Engineが必須。本プロトコルスタックの選定 理由は、マルチキャストに対応していた為。開発ではパーソナルメディア社製の「T-Engine/ SH7727開発キット」を選択。 ▪T-Engine ▪μITRON ミスポ製μITRONおよび同社のTCP/IPプロトコルスタックが必要。本製品の選定選定理由

    は、ITRON TCP/IP API仕様を独自拡張してマルチキャストに対応していた為。開発では 同社の「NORTi Simulator」を選択。 WindowsXPにて動作確認。基本的にはWIN32プラットフォームでの動作は問題ないと 思われる。WindowsCEに関しても、動作確認済み。 ▪Windows/WindowsCE ▪UNIX Automakeによるソースコンパイルが必要。開発環境としては、主にFedoraCore1および MacOSXにて動作確認。 ▪BTRON パーソナルメディア社製の超漢字4を開発環境として選択。マルチキャスト機能の不備に より、コンパイル動作確認程度。ただし、タスク/同期等移植可能な部分は全て作業済み。
  8. CyberGarage 開発全体の苦労点 T-Engineではシリアルコンソール経由のソフトウェアデバッガでの開発環境であったため デバッグ作業に時間がかかった。高価ではあるが、もう少し開発機材を充実すべきで あったかもしれない。 ▪デバッグ環境 ▪サポート体制 T-Engineベンダーでは購入後1ヶ月のみの技術サポートしかなく、実質的なサポートが 受けられなかった。μITRONベンダーに関しては、回答に時間がかかり、かつ中々要領が 得られなかった。

    基本的にベンダー頼りの開発形態となり、迅速な開発を進める上で、一般公開された 情報が豊富に、個人でも参加できるユーザー会等が存在すると有難かった。 ▪機種選定 各組み込みプラットフォームの事前情報ががなく、資料集めにはベンダー個別に 問い合わせの必要があり、時間を要した。 特にT-Engine/μITRONではマルチキャストに対応しているTCP/IPプロトコルスタックの 選定に要領が得られず、こちらの質問に対するベンダー担当者からの回答がない/ 誤った回答である場合もあり、選定に時間がかかる要因となった。
  9. CyberGarage 今後の展開 今後もオープンソース公開によるユーザー要望の反映およびバグフィックス等により 完成度を上げる活動を継続予定。 ▪プラットフォーム拡充 ▪オープンソース活動の継続 ▪他プログラミング言語対応 特定プラットフォームでメジャーな言語、スクリプト言語への対応を予定。具体的には Objective-C(MacOSX)やRubyへの対応を予定している。特にスクリプト言語に関して は、下記ビジュアル言語実行エンジンとしての布石としたい。

    より低価格で処理性能の低いプラットフォームへ対応したい。近々はEmbeddedLinux、 将来的にはワンチップマイコンレベルまで視野に入れ拡充を予定している。 ▪情報家電ビジュアル言語 家庭内の情報家電を相互接続して定型処理 (例:ドアが開けばエアコンが動作)等の設定が、 初心者でも簡単に設定できるようなビジュアル 言語の作成を予定している。 右図は以前開発した3Dコンテンツ用ビジュアル 言語だが、データフローを主として オブジェクト指向的な言語を開発したい。
  10. CyberGarage まとめ 本成果物の公開により、対応プラットフォーム(WindowsCE)、 対応XMLパーサ(libxml2)等の、実施計画書にはない機能 追加の結果となった。 ▪μITRON移植作業遅延 ▪オープンソースによるユーザー貢献 μITRONのネットワーク関連部に関して現在も作業中である。進捗遅延の要因としては 他工程(主としてT-Engine移植作業)増大、ネットワーク部の理解度不足(固定リソースや TCP/UDP関数分離)および開発環境/ベンダーサポート体制の不備等である。

    ▪BTRON事前調査不備 超漢字4でTCP/IPプロトコル実装の一部機能不備が判明したため、対象プラットフォーム としての優先度を下げた。ただし、マルチキャスト関連部以外のネットワーク機能、その他 タスクや同期管理等の移植可能な機能について作業は完了させ、将来的な拡張に備えた。 ▪UPnP機能全実装 実施計画当初、開発期間の要因もあり、軽量版に関してはUPnPの全機能を実装の 範囲としないことで、組み込みプラットフォームにおける省サイズ/省メモリに重点を 置いていたが、他社製品との相互接続性に問題がある可能性もあり、全機能実装とした。 ただしHTTPクライアント/サーバ機能部に関しては、軽量版はHTTPv1.0を基本とした 実装に留め、機能過多によるオブジェクトサイズ増加を防いだ。 完成自己評価 95%