Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2004年度IPA未踏ソフトウェア事業 情報家電プロトコルスタックの開発 最終報告会資料
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoshi Konno
August 24, 2005
Programming
12
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2004年度IPA未踏ソフトウェア事業 情報家電プロトコルスタックの開発 最終報告会資料
Satoshi Konno
August 24, 2005
More Decks by Satoshi Konno
See All by Satoshi Konno
Exploration of Fault Identification and Automatic Recovery in Cloud-based FPGA Systems - ICCE 2024
cybergarage
0
6
Approximate QoS Rule Derivation Based on Root Cause Analysis for Cloud Computing - PRDC 2019
cybergarage
0
14
Cassandra @Yahoo!JAPAN - Cassandra Summit 2016
cybergarage
0
7
情報家電プロトコルスタック開発の展開
cybergarage
0
13
Other Decks in Programming
See All in Programming
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
190
AWSに止められる覚悟してますか?
morizo_1984
2
520
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
110
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
200
mrbgem 三角測量 開発
ogom
0
210
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
340
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
速習iPhone Duo対応
yuukiw00w
2
970
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
How to Ace a Technical Interview
jacobian
280
24k
Code Reviewing Like a Champion
maltzj
529
40k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
4 Signs Your Business is Dying
shpigford
187
23k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Mobile First: as difficult as doing things right
swwweet
225
10k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Transcript
CyberGarage 情報家電プロトコルスタックの開発 最終報告会資料 今野 賢 (Satoshi Konno)
[email protected]
http://www.cybergarage.org 2005年8月24日
2004年度IPA未踏ソフトウェア事業
CyberGarage 応募時目標設定 ▪概要 組み込みシステム向け情報家電プロトコルスタックとしてUPnPを実装する。 開発は、将来の組込みシステムの高性能化を見越した高機能版と、最低限 機能を有する軽量版の実装を目標とする。 C++およびJava版のUPnPプロトコルスタックの開発経験を活かし、軽量なUPnP プロトコルスタックを開発する。実装はC言語を想定しており、簡便さをそのままに、 実行速度およびプログラムサイズを考慮しながらデバイス回りの必要最低限の 機能から実装する。手順として、WindowsおよびUnixプラットフォームで基本
機能実装確認後、各プラットフォームへの移植する ▪高機能版 既に開発済みC++ 版のUPnPプロトコルスタックをベースに、XMLパ-サー等の 軽量化および移植作業をベースに実装する。 ▪軽量版 ▪対応プラットフォーム 組み込み系 : T-Engine、μITRON、BTRON PC系 : Windows(WIN32)、Linux、MacOSX
CyberGarage PM助言内容/成果 ▪省サイズ オブジェクトサイズを100KBとの目標設定に向けて設計および 実装作業を進めたが、UPnP全機能を実装の対象と方向転換 した要因もあり、結果として最終的なオブジェクトサイズは モジュール選択(コンパイルオプション)により軽量版実績は 230KB~180KBにて完了。 他ベンダーのC言語による実装調査の結果も、200KB程度であり、ある程度妥当な 結果と思われる。ただし、ライブラリ関数領域節約のため、可能なものはマクロ展開
したため、ある程度の可読性は犠牲となった。 ▪モジュール化 ユーザー側で、組み込みたい機能を取捨選択できるよう軽量版に関してはコンパイル オプションによるモジュール指定を可能とした。 UPnPデバイス(サーバ)機能/コントロールポイント(クライアント)機能部に大別し、UPnP デバイス機能も、開発者が取捨選択可能なようコンパイルオプションを導入した。 軽量版 230KB コンパイルオプション コントロールポイント機能無効 × ◦ ◦ ◦ ◦ デバイス購読機能無効 × × ◦ ◦ ◦ デバイスアクション機能無効 × × × × ◦ デバイス問い合わせ機能無効 × × × ◦ ◦ オブジェクトサイズ 227KB 211KB 194KB 187KB 178KB 有効:◦ 無効:×
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%作業完了
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移植作業中
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 動作環境 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を開発環境として選択。マルチキャスト機能の不備に より、コンパイル動作確認程度。ただし、タスク/同期等移植可能な部分は全て作業済み。
CyberGarage デモストレーション ▪システム構成 UPnP Clock Sample T-Engine(SH7727) WindowsXP
CyberGarage 開発全体の苦労点 T-Engineではシリアルコンソール経由のソフトウェアデバッガでの開発環境であったため デバッグ作業に時間がかかった。高価ではあるが、もう少し開発機材を充実すべきで あったかもしれない。 ▪デバッグ環境 ▪サポート体制 T-Engineベンダーでは購入後1ヶ月のみの技術サポートしかなく、実質的なサポートが 受けられなかった。μITRONベンダーに関しては、回答に時間がかかり、かつ中々要領が 得られなかった。
基本的にベンダー頼りの開発形態となり、迅速な開発を進める上で、一般公開された 情報が豊富に、個人でも参加できるユーザー会等が存在すると有難かった。 ▪機種選定 各組み込みプラットフォームの事前情報ががなく、資料集めにはベンダー個別に 問い合わせの必要があり、時間を要した。 特にT-Engine/μITRONではマルチキャストに対応しているTCP/IPプロトコルスタックの 選定に要領が得られず、こちらの質問に対するベンダー担当者からの回答がない/ 誤った回答である場合もあり、選定に時間がかかる要因となった。
CyberGarage 今後の展開 今後もオープンソース公開によるユーザー要望の反映およびバグフィックス等により 完成度を上げる活動を継続予定。 ▪プラットフォーム拡充 ▪オープンソース活動の継続 ▪他プログラミング言語対応 特定プラットフォームでメジャーな言語、スクリプト言語への対応を予定。具体的には Objective-C(MacOSX)やRubyへの対応を予定している。特にスクリプト言語に関して は、下記ビジュアル言語実行エンジンとしての布石としたい。
より低価格で処理性能の低いプラットフォームへ対応したい。近々はEmbeddedLinux、 将来的にはワンチップマイコンレベルまで視野に入れ拡充を予定している。 ▪情報家電ビジュアル言語 家庭内の情報家電を相互接続して定型処理 (例:ドアが開けばエアコンが動作)等の設定が、 初心者でも簡単に設定できるようなビジュアル 言語の作成を予定している。 右図は以前開発した3Dコンテンツ用ビジュアル 言語だが、データフローを主として オブジェクト指向的な言語を開発したい。
CyberGarage まとめ 本成果物の公開により、対応プラットフォーム(WindowsCE)、 対応XMLパーサ(libxml2)等の、実施計画書にはない機能 追加の結果となった。 ▪μITRON移植作業遅延 ▪オープンソースによるユーザー貢献 μITRONのネットワーク関連部に関して現在も作業中である。進捗遅延の要因としては 他工程(主としてT-Engine移植作業)増大、ネットワーク部の理解度不足(固定リソースや TCP/UDP関数分離)および開発環境/ベンダーサポート体制の不備等である。
▪BTRON事前調査不備 超漢字4でTCP/IPプロトコル実装の一部機能不備が判明したため、対象プラットフォーム としての優先度を下げた。ただし、マルチキャスト関連部以外のネットワーク機能、その他 タスクや同期管理等の移植可能な機能について作業は完了させ、将来的な拡張に備えた。 ▪UPnP機能全実装 実施計画当初、開発期間の要因もあり、軽量版に関してはUPnPの全機能を実装の 範囲としないことで、組み込みプラットフォームにおける省サイズ/省メモリに重点を 置いていたが、他社製品との相互接続性に問題がある可能性もあり、全機能実装とした。 ただしHTTPクライアント/サーバ機能部に関しては、軽量版はHTTPv1.0を基本とした 実装に留め、機能過多によるオブジェクトサイズ増加を防いだ。 完成自己評価 95%
CyberGarage おわりに 本事業により、個人レベルでの開発に障壁がある組み込み系プラットフォームの経験、 UPnPプロトコルスタックをC言語で新規設計の機械を与えて頂いた事に感謝したい。 またプロジェクトマネージャの坂村健東京大学大学院教授、YRPユビキタスネットワー キング研究所の越塚登/新堂克徳両氏には本プロジェクトにおいて様々なご指導を 頂いた。 また、Aapo Makela、Johannes Gutlebe、Theo
Beisch、Rosfran Borgesには本成果物の 機能および完成度向上に多大な貢献を頂いた。ここに記して感謝したい。