(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムの最新バージョンを複数のスモールメモリ装置に、該スモールメモリ装置の生産の間にインストールするシステムであって、
（ａ）当該システムはホスト装置を含み、前記ホスト装置はホストプロセッサ及びワイヤレス送信ユニットを含み、前記ホスト装置は、
‐  前記最新バージョンの最新バージョン番号を各スモールメモリ装置にワイヤレスにブロードキャストし、
‐  前記スモールメモリ装置のうち少なくとも１つから少なくとも１つのインストール始動通信をワイヤレスに受信し、
‐  少なくとも１つのインストール始動通信を受信すると、前記最新バージョンのそれぞれの部分を含む複数のデータパケットを配置し、前記データパケットをワイヤレスに送信する
ように構成され、
（ｂ）各スモールメモリ装置は、
‐  現在バージョン番号を有する前記コンピュータプログラムの現在バージョンを含有するためのメモリであるプログラムメモリと、
‐  前記スモールメモリ装置をブートするように配置されたブートローダを含むブートメモリと、
‐  前記コンピュータプログラムの前記現在バージョンを実行し、前記ブートローダを別個に実行するプロセッサと、
‐  前記ホスト装置からワイヤレスに受信する受信ユニットと、
を含み、
‐  前記コンピュータプログラムの前記現在バージョンの実行の間、前記スモールメモリ装置は、前記ホスト装置から前記最新バージョン番号を受信し、前記現在バージョン番号が前記最新バージョン番号との間で最新であるかを決定し、前記現在バージョン番号が最新でない場合、
‐  前記スモールメモリ装置は、前記スモールメモリ装置をリブートすると前記スモールメモリ装置が前記コンピュータプログラムの前記最新バージョンのインストールを始動することになることを前記ホスト装置に返信し、
‐  前記スモールメモリ装置は、インストール状態フラグを設定し、
‐  前記スモールメモリ装置は、前記リブートを開始し、
‐  前記ブートローダの実行の間、前記ホスト装置から、（ｉ）前記コンピュータプログラムの前記最新バージョンと、（ｉｉ）前記コンピュータプログラムの前記最新バージョンに関連したプログラムメタデータと、を含む複数のデータパケットを受信し、前記ブートローダは、
‐  各データパケットを検出することであって、該検出することは各データパケットを受信することの一部である、ことと、
‐  前記データパケットから、前記コンピュータプログラムの前記最新バージョンと前記プログラムメタデータとを抽出することと、
‐  前記プログラムメタデータに基づいて前記コンピュータプログラムの前記最新バージョンを前記プログラムメモリに記憶し、完了すると、前記インストール状態フラグを再設定し、前記最新バージョンの成功裏のインストールのインジケータを提供することと、
のステップにより前記コンピュータプログラムの前記最新バージョンをインストールするようにさらに配置され、
‐  前記プログラムメモリは、前記コンピュータプログラムを含有するのに十分なサイズであり、前記コンピュータプログラムと前記コンピュータプログラムのさらなるコピーとの双方を含有するのに不十分なサイズである、システム。
【請求項２】
前記ブートローダは、ラウンドロビン方式でデータパケットの集合を受信するように配置され、データパケットの前記集合は単一のラウンドロビン期間内に送信され、前記ブートローダは、前記単一のラウンドロビン期間が連続的に繰り返すことに基づいて前記単一のラウンドロビン期間の任意の段階でデータパケットの前記集合の受信を開始する、
請求項１に記載のシステム。
【請求項３】
前記ブートローダは、前記検出を始動した後、所定のタイムアウト期間内に前記データパケットを検出しないと、インストールを中止するように配置される、
請求項１に記載のシステム。
【請求項４】
前記ブートローダは、前記データパケットを解読するように配置される、
請求項１に記載のシステム。
【請求項５】
前記スモールメモリ装置は、リモート制御装置、ワイヤレス制御可能ランプ、メディアプレーヤ、電子玩具、キッチン電化製品、ウェアラブル電子装置、及び医療装置のうち１つにおいて具現化される、請求項１に記載のシステム。
【請求項６】
前記最新バージョンの成功裏のインストールの前記インジケータは、ＬＥＤの色の変化、サウンド警告、又は振動である、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スモールメモリ装置にコンピュータプログラムをワイヤレスにダウンロードすること及びインストールすることに関する。例えば、スモールメモリ装置は、他のより複雑な電子装置、例えばスマートフォンなどと比較して、小さいメモリを典型的に有する電子装置、例えばリモート制御装置などであり得る。
【背景技術】
【０００２】
リモート制御装置は、種々のテクノロジーを使用して、消費者装置と相互作用することができる。よく知られるレガシー赤外線テクノロジーは、リモート制御装置が消費者装置を制御することを可能にする。リモート制御装置は赤外線送信器を有して、コマンドコードを含む赤外線信号を送信し、消費者装置は赤外線受信器を有して、赤外線信号を受信し、コマンドコードを抽出する。コマンドコードに応答して、消費者装置はアクションを実行することができる。例えば、消費者装置はＴＶであってもよく、リモート制御装置はユーザによってコマンドコードを送るのに使用され、ＴＶが次のチャンネルに切り換わること又はボリュームを上げることが引き起こされる。
【０００３】
近代のリモート制御装置は、無線ベース能力を（さらに）有して家庭内の他の装置と相互作用し、ホスト装置から、リモート制御装置のソフトウェアアップデートをワイヤレスにダウンロードすることができる。例えば、無線ベース能力は、ＺｉｇＢｅｅ（登録商標）  ＲＦ４ＣＥテクノロジーに基づき得る（さらに、2014年5月22日に閲覧された、ＺｉｇＢｅｅアライアンスのウェブサイト：http://www.zigbee.org/Specifications/ZigBeeRF4CE/Overview.aspxを参照）。ソフトウェアアップデートには、様々な装置と相互作用するためのコマンドコードの最新データベースを含む、リモート制御装置のファームウェアが典型的に含まれる。新しいソフトウェアをワイヤレスにダウンロードすること及びインストールすることは、無線ダウンロード（Over-the-Air  Download）（ＯＡＤ）と一般にいわれる。ＯＡＤは、リモート制御装置の生産プロセスの間、リモート制御装置上でソフトウェアを受信し及びインストールすることに使用されることができる。ホスト装置が、リモート制御装置とのワイヤレス接続を確立し、それから、ソフトウェアをリモート制御装置にワイヤレスに送信してもよい。
【０００４】
しかしながら、大量生産プロセス内でリモートコントロール上に新しいソフトウェアをインストールすることは、依然として、生産プロセス内で比較的非効率的な処理である。このことは、特に、生産の低コスト及び高スピードが重要である大量生産プロセス、例えば、リモート制御装置の生産プロセスなどにおいて当てはまる。ＯＡＤを用いた新しいソフトウェアのインストールの間、ホスト装置及びリモート制御装置は、干渉を防止するために、例えば遮蔽ボックスを用いて、付近の他の（リモート制御）装置から遮蔽される必要がある。他のリモート制御装置の各々は、その独自の遮蔽ボックス内でその独自のインストールを、遮蔽ボックスの内側でその独自のホスト装置とペアにされて行う可能性がある。各装置がその独自のソフトウェアインストールを行うための遮蔽ボックスの使用は、面倒であり、生産プロセスのスピードを制限する。生産プロセスの非効率性は、装置自体へのダウンロードが比較的遅い処理であり得るという事実のため、さらに悪化される。
【０００５】
さらに、上記インストールプロセスは、メモリ（及び、ゆえにコスト）の観点から非効率的であり、なぜならば、インストールプロセスの間、さらなるメモリを必要とするからである。新しいソフトウェアのインストールは、最初、リモート制御装置がさらなるメモリに新しいソフトウェアをダウンロードし及び記憶し、それから、ダウンロードされたソフトウェアを検証し、最後、リモート制御装置のメモリ内の既存のソフトウェアを上書きすることを必要とする。ゆえに、さらなるメモリは、新しいソフトウェアをダウンロードすることに主に使用され、他の時間には大部分使用されず、このことは、メモリの使用を非効率的にする。メモリの効率的な使用は、リモート制御装置などのスモールメモリ装置の大量生産プロセスにおいて特に重要であり、これにおいて、メモリサイズは最小限に保たれて、コスト及び材料費を低減させる。
【発明の概要】
【０００６】
目的の技術的課題は、従来技術と比較して向上した効率を有する、スモールメモリ装置にソフトウェアをインストールするシステム、方法、及び装置を提供することである。
【０００７】
本発明の一態様は、装置であって、コンピュータプログラムを含有する（containing）ためのメモリであるプログラムメモリと、当該装置をブートするように配置された（arranged）ブートローダを含むブートメモリと、上記コンピュータプログラム及び上記ブートローダを実行するプロセッサと、データパケットをワイヤレスに受信する受信ユニットであって、上記コンピュータプログラムの部分（portions）がそれぞれの上記データパケットのうち少なくともいくつかによって含まれる、受信ユニットと、を有し、上記ブートローダは、上記コンピュータプログラムをインストールするようにさらに配置され、上記データパケットのうちのデータパケットを検出することであって、該検出することは上記データパケットを受信することの一部である、ことと、上記データパケットから、（ａ）上記コンピュータプログラムの部分、及び該部分に関連した部分メタデータと、（ｂ）上記コンピュータプログラムを集合的に形成する部分の集合に関連したプログラムメタデータと、のうち少なくとも１つを抽出することと、上記部分メタデータに基づいて上記プログラムメモリ内のメモリ位置を決定することと、上記プログラムメモリ内に記憶されている抽出された部分を表す進捗情報を維持することと、上記進捗情報と上記プログラムメタデータとに基づいて部分の上記集合の記憶の完了を決定することと、を含む。
【０００８】
装置は、スモールメモリ装置、例えば、リモートコントロール、電子玩具、ウェアラブル装置、又は音楽プレーヤなどであり得る。スモールコンピュータがそれ自体効率的であるよう、装置は、コンピュータプログラムとブートローダとを実行するプロセッサを含む。装置は、コンピュータプログラムを記憶するプログラムメモリをさらに含む。装置は、装置をブートするブートローダを含むブートメモリをさらに含む。装置は、データパケットを受信する受信ユニットをさらに有する。
【０００９】
プログラムメモリは、コンピュータプログラムを記憶するのに必要とされるメモリよりずっと大きい利用可能メモリを有してはいないことがある。例えば、プログラムメモリは、コンピュータプログラムを含有するのに十分なほど大きく、同時に、コンピュータプログラムのさらなるコピーをさらに含有するのには非常に小さい可能性がある（しかし、そうである必要はない）。後者の場合、ゆえに、プログラムメモリは、コンピュータプログラムとコンピュータプログラムのさらなるコピーとを含有することはできず、したがって、ブートローダは、最初、プログラムメモリに事前インストールされたコンピュータプログラムを上書きする前に、コンピュータプログラムをダウンロードすることができない。インストールされる必要があるコンピュータプログラムは、例えば、装置の新しいファームウェアを含むことがあり、設定の更新されたデータベースをさらに含むことがある。
【００１０】
ブートローダは、その典型的タスクである装置のブートに対して追加で、装置にコンピュータプログラムをインストールするようにさらに配置される。ブートローダは、プロセッサにより実行されるときに、下記のとおり機能し得る。ブートローダは、受信ユニットを使用して、データパケットを含むワイヤレス信号について嗅ぎ付ける（スニフする）（sniff）。データパケットが検出されるとき、ブートローダは、受信ユニットを介してデータパケットをさらに受信することができる。それから、ブートローダは、データパケットから、コンピュータプログラムの部分と、該部分に関連した部分メタデータとを抽出することができる。次いで、ブートローダは、部分メタデータに基づいて、部分を記憶するためのプログラムメモリ内のメモリ位置を決定することができる。例えば、データパケットは、部分に関連した相対メモリ位置を含むヘッダを有してもよい。ブートローダは、ゆえに、プログラムメモリの所定の開始メモリ位置に相対メモリ位置を加算することによって、プログラムメモリ内の（絶対）メモリ位置を決定することができる。それから、部分は、決定されたメモリ位置に記憶されることができる。
【００１１】
ブートローダは、コンピュータプログラムのインストールが完了されたとブートローダが決定するまで、他のデータパケットを同様の方法で進めることができる。コンピュータプログラムのインストールは、コンピュータプログラムを集合的に形成する部分の集合がプログラムメモリ上に記憶されたとき、完了される。換言すると、インストールは、コンピュータプログラムを集合的に形成するすべての部分がプログラムメモリ内に記憶されたとき、完了される。ブートローダは、コンピュータプログラムのインストールを完了すると、それから、新たにインストールされたコンピュータプログラムを実行することによって装置をさらにブートすることができる。
【００１２】
ブートローダは、データパケットから、コンピュータプログラムを集合的に形成する部分の集合に関連したプログラムメタデータを抽出することができる。例えば、プログラムメタデータは、コンピュータプログラムを集合的に形成する部分の合計量を表す数を含んでもよい。さらに、ブートローダは、プログラムメモリ内に記憶されている抽出された部分を表す進捗情報を維持することができる。例えば、ブートローダが、該プログラムローダがプログラムメモリ内にインストールした部分の数の総数を保持してもよく、ゆえに、進捗情報は上記総数であり得る。ブートローダは、進捗情報とプログラム情報とに基づいて部分の集合の記憶の完了を決定することができる。例えば、記憶された部分の上記総数が部分の合計量に合致するとき、ブートローダは、コンピュータプログラムを集合的に形成するすべての部分がプログラムメモリ内に記憶されたと決定する。
【００１３】
データパケットは、部分、及び該部分に関連した部分メタデータと、プログラムメタデータとを含むことができる。別法として、データパケットが、（ａ）部分、及び部分メタデータ、又は（ｂ）プログラムメタデータ、のいずれかを含んでもよい。後者の場合、あらゆるデータパケットがコンピュータプログラムの部分を含みはしない。
【００１４】
本発明の効果は、ブートローダによるコンピュータプログラムのスモールメモリ装置へのインストールが、メモリの観点から、向上した効率を有することである。プログラムメモリは、コンピュータプログラムを記憶するのに十分なほど大きいことしか求められない。コンピュータプログラムのインストールに関して、コンピュータプログラムの追加コピーをさらに記憶するためのプログラムメモリ内の追加空間は必要とされない。したがって、インストールは、メモリの観点から、向上した効率を有する。
【００１５】
場合により、ブートローダは、ラウンドロビン方式でデータパケットの集合を受信するように配置され、データパケットの集合は、部分の集合を集合的に含み、データパケットの集合は、単一のラウンドロビン期間内に送信される。コンピュータプログラムを集合的に形成するすべての部分が、単一のラウンドロビン期間内に受信されることができ、しかしながら、いくつかの部分の受信が何らかの理由で失敗する場合、こうした部分は任意の次のラウンドロビン期間の間に受信されることができる。結果として、部分の受信は、失敗した受信部分に関してロバストになり、インストールの間の失敗のために装置が「使えないもの（bricked）」になることを防止する。さらに、このことは、インストールの失敗の場合に、装置が再起動されることを可能にし、したがって、ブートローダはコンピュータプログラムのインストールを再開することができる。
【００１６】
場合により、部分の集合は、コンピュータプログラムを連続的に形成する連続部分であり、部分メタデータは、連続部分内の部分のランク（rank）に関連した情報を含む。例えば、集合が、部分＃１、部分＃２、・・・、部分＃１００までである１００個の連続部分を含む。それから、例えば、部分＃６０の部分メタデータが、番号６０であってもよく、この番号６０は、連続部分の中の部分＃６０のランクを表す。ゆえに、部分は、そのランクに従って連続的に受信され得る。
【００１７】
本発明の別の態様が、装置にコンピュータプログラムをインストールするシステムであって、データパケットを送信するように配置されたホスト装置、を含み、上記データパケットのうち少なくともいくつかが、上記コンピュータプログラムのそれぞれの部分を含み、上記ホスト装置は、上記データパケットをワイヤレスに送信する送信ユニットを有し、上記装置は、コンピュータプログラムを含有するためのメモリであるプログラムメモリと、上記装置をブートするように配置されたブートローダを含むブートメモリと、上記コンピュータプログラム及び上記ブートローダを実行するプロセッサと、上記データパケットをワイヤレスに受信する受信ユニットと、を有し、上記ブートローダは、上記コンピュータプログラムをインストールするようにさらに配置され、上記データパケットのうちのデータパケットを検出することであって、該検出することは上記データパケットを受信することの一部である、ことと、上記データパケットから、（ａ）上記コンピュータプログラムの部分、及び該部分に関連した部分メタデータと、（ｂ）上記コンピュータプログラムを集合的に形成する部分の集合に関連したプログラムメタデータと、のうち少なくとも１つを抽出することと、上記部分メタデータに基づいて上記プログラムメモリ内のメモリ位置を決定することと、上記プログラムメモリ内に記憶されている抽出された部分を表す進捗情報を維持することと、上記進捗情報と上記プログラムメタデータとに基づいて部分の上記集合の記憶の完了を決定することと、を含む。
【００１８】
ゆえに、システムは、ブートローダを含む装置（本発明の一態様である上記の装置と整合する）と、ホスト装置とを含む。ホスト装置はデータパケットを送信することができ、該データパケットは装置によって受信され得る。例えば、システムがリモート装置の生産ラインの一部であってもよく、ホスト装置が、リモート制御装置である装置に新しいファームウェアのそれぞれの部分を含むパケットを送信してもよい。
【００１９】
場合により、システムは、上記装置に従う複数の装置を含み、複数の装置の各々は、部分の集合のうちそれぞれの異なる初期部分に対応するそれぞれの異なる時点に上記検出を始動する。一効果は、コンピュータプログラムが複数のスモールメモリ装置にインストールされているとき、インストールが速度の観点から、向上した効率を有することである。装置のうち１つがそのインストールを、付近の複数の装置のうち別の装置のインストールと同時に実行することができる。各装置は、そのそれぞれの独自のホスト装置とのペアにされた接続を必要としない。代わって、複数の装置は、同じ単一のホスト装置から同じデータパケットを独立してスニフし、受信することができる。結果として、複数の装置が、データパケットを受信できるように単一のホスト装置の範囲内にある限り、コンピュータプログラムを同時にインストールすることができる複数の装置の量に対する制限は、存在しない。したがって、複数の装置にコンピュータプログラムをインストールする速度が、従来技術と比較して大きく増加する。
【００２０】
本発明の別の態様が、システムにおいて使用されるホスト装置であって、
ラウンドロビン方式でデータパケットの集合を送信するように配置されたプロセッサであって、上記データパケットのうちの各データパケットがコンピュータプログラムの部分を含み、上記データパケットの上記集合は、上記コンピュータプログラムを集合的に形成する部分の集合を集合的に含み、データパケットの上記集合は、単一のラウンドロビン期間内に送信される、プロセッサと、上記データパケットをワイヤレスに送信する送信ユニットと、を含む。このことは、複数の装置が並列にコンピュータプログラムをインストールすることを可能にするだけでなく、さらに、複数の装置の各々がインストールをラウンドロビン期間の間又は次のラウンドロビン期間の間の任意の時間に開始することを可能にする。このことは、コンピュータプログラムの複数の装置へのインストールについて、速度とより実用的であることとの双方の観点から、効率をさらに増大させる。
【００２１】
本発明の別の態様が、命令を含むコンピュータプログラム製品であって、上記命令がホスト装置のプロセッサにより実行されるときに、上記命令は上記プロセッサに、上記コンピュータプログラムからの部分を決定するステップと、上記部分に関連した部分メタデータを決定するステップと、上記部分と上記部分メタデータとを含むデータパケットを組み立てる（composing）ステップと、を実行させる。
【００２２】
本発明の別の態様が、装置にコンピュータプログラムをインストールする方法であって、上記装置は、コンピュータプログラムを含有するためのメモリであるプログラムメモリと、上記装置をブートするように配置されたブートローダを含むブートメモリと、上記コンピュータプログラム及び上記ブートローダを実行するプロセッサと、データパケットをワイヤレスに受信する受信ユニットであって、上記コンピュータプログラムの部分がそれぞれの上記データパケットのうち少なくともいくつかによって含まれ、当該方法は、上記データパケットのうちのデータパケットを検出するステップであって、該検出するステップは上記データパケットを受信することの一部である、ステップと、上記データパケットから、（ａ）上記コンピュータプログラムの部分、及び該部分に関連した部分メタデータと、（ｂ）上記コンピュータプログラムを集合的に形成する部分の集合に関連したプログラムメタデータと、のうち少なくとも１つを抽出するステップと、上記部分メタデータに基づいて上記プログラムメモリ内のメモリ位置を決定するステップと、上記プログラムメモリ内に記憶されている抽出された部分を表す進捗情報を維持するステップと、上記進捗情報と上記プログラムメタデータとに基づいて部分の上記集合の記憶の完了を決定するステップと、を含む。
【００２３】
本発明の別の態様が、命令を含むブートローダを含むコンピュータプログラム製品であって、上記ブートローダがプロセッサにより実行されるときに、上記ブートローダは上記プロセッサに請求項１４に記載の方法を実行させる。
【図面の簡単な説明】
【００２４】
本発明の上記及び他の態様が、以降に説明される実施形態から明らかになり、該実施形態を参照して説明される。
【００２５】
異なる図において同じ参照番号を有するアイテムは、同じ構造的特徴及び同じ機能を有することが留意されるべきである。こうしたアイテムの機能及び／又は構造が説明されている場合、詳細な説明において該アイテムの説明が繰り返される必要がない。
【図１ａ】スモールメモリ装置にコンピュータプログラムをインストールするシステムを例示する。
【図１ｂ】複数のスモールメモリ装置を含むシステムを例示する。
【図２ａ】コンピュータプログラムのラウンドロビンインストールの間の、２つのスモールメモリ装置のメモリとホスト装置のメモリとを例示する。
【図２ｂ】コンピュータプログラムのインストールの完了におけるスモールメモリ装置のメモリを例示する。
【図２ｃ】コンピュータプログラムの別のラウンドロビンインストールの間の、スモールメモリ装置及びホスト装置のメモリを例示する。
【図２ｄ】コンピュータプログラムの最後の部分を記憶し、かつ部分を再順序付けする前の、スモールメモリ装置のメモリを例示する。
【図３】スモールメモリ装置にコンピュータプログラムをインストールする方法を例示する。
【発明を実施するための形態】
【００２６】
図１ａは、スモールメモリ装置（small-memory  device）ＤＥＶ１１０にコンピュータプログラムをインストールするシステム１００を例示している。システム１００は、ホスト装置ＨＳＴ１８０（以降：ホストＨＳＴ）、及びスモールメモリ装置ＤＥＶ（以降：装置ＤＥＶ）を含む。ホストＨＳＴは、送信ユニットＳＮＤ１９０を有する。装置ＤＥＶは、受信ユニットＲＣＶ１７０、ブートメモリＭＢＯＯＴ１２０、プログラムメモリＭＰＲＯＧ１３０、アクティブメモリＭＡＣＴ１４０、及びプロセッサＰＲＯＣ１５０を有する。プロセッサＰＲＯＣは、ブートメモリＭＢＯＯＴ、プログラムメモリＭＰＲＯＧ、アクティブメモリＭＡＣＴ、及び受信ユニットＲＣＶと、接続１５２−１５３及び１７１それぞれを通してデータを交換することができる。
【００２７】
ホストＨＳＴは、部分単位で送信ユニットＳＮＤ１９０を介してコンピュータプログラムを送信することができ、各部分は、それぞれのデータパケットにより含まれる。ゆえに、コンピュータプログラムは全体として、データパケットの集合により、集合的に含まれる。ホストＨＳＴはワイヤレス信号１９１を送信し、ワイヤレス信号１９１はデータパケットを含有し得る。ホストＨＳＴは、図１ａに図示されていない他の要素、例えば、プロセッサ、ホストメモリ、及び、別のネットワーク及び／又はインターネットに接続するネットワーク通信ユニットなどを含んでもよい。
【００２８】
ホストＨＳＴは、そのホストメモリに記憶されたコンピュータプログラムを有することができ、コンピュータプログラムからのデータパケットを下記のとおり決定することができる。ホストＨＳＴは、最初、コンピュータプログラムを連続した部分へと分割する。上記部分は、サイズが異なってもよく、あるいは等しいサイズのものであってもよい。ホストは、部分に対するヘッダを先頭に付加すること（pre-pending）によって、データパケットを組み立てる。ヘッダは、部分に関連した部分メタデータを含むことができる。例えば、ヘッダは、パケット識別子と、部分を記憶する相対メモリ位置と、データパケットにより含まれる部分の（バイト単位における）サイズとを含んでもよい。ヘッダは、コンピュータプログラムを集合的に形成する部分の集合に関連したプログラムメタデータを代わって含んで（あるいは、さらに含んで）もよい。例えば、プログラムメタデータは、コンピュータプログラムを集合的に形成する部分の合計数を含んでもよい。あるいは、別の例として、プログラムメタデータは、コンピュータプログラムのバイト単位における合計サイズを含んでもよい。
【００２９】
一実施形態において、各データパケットは、同様のフォーマット及び内容を有する。例えば、各データパケットは、部分と、関連した部分メタデータと、さらにプログラムメタデータとを含んでもよい。別の実施形態において、２つのタイプのデータパケットが存在してもよい。第１のタイプのデータパケットが、部分と関連部分メタデータとを含有してもよく、第２のタイプのデータパケットが、プログラムメタデータを含有してもよい。プロセッサＰＲＯＣが、各々の連続したデータパケット内で同じプログラムメタデータを受信する必要がないとき、ホストＨＳＴは、時おりのみ、第２のタイプのデータパケットを送信してもよい。
【００３０】
下記のデータパケットの例について検討する。パケット識別子は、番号であり得る。コンピュータプログラムの第１の部分を含むデータパケットが、番号１であるパケット識別子を有し得る。第２の部分を含むデータパケットが、番号２であるパケット識別子を有し得る、などする。例えば、コンピュータプログラムが５００キロバイトを含み、上記５００キロバイトが各々１０２４バイト（１ｋｂ）の５００個の部分に分割されてもよく、データパケットの合計数を５００にすることになる。それから、５００個のデータパケットの集合は、コンピュータプログラムを集合的に含むすべての部分を集合的に含み、ゆえに、上記集合の各データパケットは、コンピュータプログラムのそれぞれの部分を含む。部分の相対メモリ位置は、プログラムメモリＭＰＲＯＧ内の開始位置に相対した、メモリ内でのその位置を示すことができる。例えば、コンピュータプログラムの第１の部分を含むデータパケットは、相対メモリ位置００００（ゼロ）を有することがあり、コンピュータプログラムの第２の部分を含むデータパケットは、相対メモリ位置１０２４を有することがあり、それから、第３の部分は、メモリ位置２０４８に関連する等である。さらに、データパケットヘッダが例えば６４バイトの固定サイズを有する場合、データパケットのサイズは１０８８になることに留意する。
【００３１】
部分は、同じサイズのものであってもよいが、サイズにおいて異なってもよい。すべての部分が同じサイズである場合、部分の相対メモリ位置は、上記サイズとそれぞれのパケット番号とに基づいて率直な方法で計算されることができる。すなわち、相対メモリ位置は、（パケット番号−１）×部分サイズとして計算される。それから、相対メモリ位置は、ヘッダ内に明示的に含まれる必要がない。別法として、上記部分は、それぞれ異なるサイズである。この場合、相対メモリ位置の計算はあまり率直でなくなり、ゆえに、ヘッダ内に相対メモリ位置を含むことが有益であり得る。
【００３２】
別法として、データパケットは、相対メモリ位置でなく、プログラムメモリＭＰＲＯＧ内で部分を記憶する絶対メモリ位置を含んでもよい。それから、部分は、プログラムメモリＭＰＲＯＧ内の絶対メモリ位置に直接記憶される。
【００３３】
装置ＤＥＶは、ブートメモリＭＢＯＯＴを有し、ブートメモリＭＢＯＯＴは、ブートローダを含む不揮発メモリであり得る。ブートローダは、装置ＤＥＶをブートするのに役立つソフトウェアを含む。装置ＤＥＶのブートは、プロセッサＰＲＯＣがブートローダをアクティブメモリＭＡＣＴにロードし、その後ブートローダを実行するとき、実行される。装置ＤＥＶをブートすることに対して追加で、本発明におけるブートローダは、コンピュータプログラムのインストールを実行するソフトウェア機能をさらに含む。コンピュータプログラムのインストールは、不揮発メモリであるプログラムメモリＭＰＲＯＧにコンピュータプログラムを記憶することを含む。
【００３４】
ブートローダをプロセッサＰＲＯＣにより実行するとき、装置ＤＥＶは、下記のとおり動作し得る。
【００３５】
プロセッサＰＲＯＣがブートローダを実行するとき、装置ＤＥＶは、ホストＨＳＴにより送信されているデータパケットについて「嗅ぎ付け（スニフ）（sniffing）」を開始する。データパケットのスニフは、装置ＤＥＶが受信ユニットＲＣＶを介してワイヤレス信号１９１を受信し、データパケットの存在についてワイヤレス信号を調べることを暗に示す。例えば、プロセッサは、ホストＨＳＴからの任意のデータパケットの始まりを特色づける所定のデータシーケンスを検出することによって、データパケットを検出することができる。それから、装置ＤＥＶは、データパケット全体を受信することができる。例えば、各データパケットが所定のバイト数に制限されてもよく、したがって、プロセッサＤＥＶは、データパケット全体を受信するためには、データパケットの上記始まりから上記所定のバイト数を受信することを必要とされる。
【００３６】
データパケットは、アクティブメモリＭＡＣＴに書き込まれることができる。データパケットは固定のヘッダサイズを有することができ、プロセッサＰＲＯＣはデータパケットからヘッダを抽出することができる。ヘッダは、部分のサイズを含んでもよく（例えば、部分は１０２４バイトから成る）、したがって、プロセッサＰＲＯＣは、部分を含有するアクティブメモリ内のメモリ位置を決定することができる。それから、プロセッサＰＲＯＣは、アクティブメモリＭＡＣＴから部分を読み出すことができる。それから、プロセッサＰＲＯＣは、ヘッダと部分との双方をデータパケットから抽出する。
【００３７】
上記の実施形態は、揮発メモリであるアクティブメモリＭＡＣＴを含むが、技術的に、代わって不揮発メモリを使用することがさらに可能であり得る。現在、揮発メモリは、不揮発メモリと比較して揮発メモリからの読み出し及び揮発メモリへの書き込みがかなりより高速であるため、多くのアプリケーションに対して典型的に好まれる。しかしながら、ハードウェア革新に起因して、将来の不揮発メモリが、現在の不揮発メモリと比較してより大きい速度を有することが自然に予期される。いくつかの実施形態について、将来の不揮発メモリの速度は、アクティブメモリＭＡＣＴにおける使用に対して受け入れ可能になり得る。将来の不揮発メモリを使用した実施形態の一例が、可能性として、消費者装置（consumer  device）を制御するリモート制御装置である装置ＤＥＶであり得る。
【００３８】
データパケットの完全性を検証するために、ヘッダは、パケットチェックサムをさらに含んでもよい。プロセッサＰＲＯＣは、パケットチェックサムと受信したデータパケットとが整合的であるかどうかを検証することができる。このことが当てはまらない場合、プロセッサＰＲＯＣは、受信したデータパケットが壊されていると結論づけることができ、応答において、データパケットのさらなる処理を中止することができる。それから、プロセッサＰＲＯＣは、別のデータパケットについてスニフすることで続行してもよい。プロセッサＰＲＯＣは、上記で言及されたとおり、ヘッダから相対メモリ位置をさらに抽出してもよい。それから、プロセッサＰＲＯＣは、部分を記憶するためのプログラムメモリＭＰＲＯＧ内の絶対メモリ位置を決定してもよい。上記絶対メモリ位置は、プログラムメモリ内の所定の開始メモリ位置に対して相対メモリ位置を加算することによって決定されることができる。それから、プロセッサＰＲＯＣは、プログラムメモリＭＰＲＯＧ内の上記絶対メモリ位置に、抽出された部分を記憶する（書き込む）ことができる。
【００３９】
下記において、「プログラムメモリＭＰＲＯＧ内に部分を記憶すること」は、「部分をインストールすること」ともいわれることが留意されるべきである。同様に、コンピュータプログラムは、コンピュータプログラムを集合的に形成するすべての部分がプログラムメモリＭＰＲＯＧ内に記憶されているとき、「インストールされて」おり、各部分は、プログラムメモリＭＰＲＯＧ内のその適切なメモリ位置に記憶される。
【００４０】
部分をインストールした後、又はインストールしている間、プロセッサＰＲＯＣは、次のデータパケットについてスニフすることと、該次パケットについて上記の処理を繰り返すこととで続行することができる。プロセッサＰＲＯＣは、コンピュータプログラムを集合的に形成するすべての部分がインストールされるまで、データパケットを受信することとそれぞれの部分をインストールすることとの処理を継続することができる。それから、装置ＤＥＶにコンピュータプログラムをインストールすることが完了される。
【００４１】
すべての部分の記憶の完了の決定は、下記のとおり作用し得る。プロセッサＰＲＯＣは、インストールされたコンピュータプログラムのすべての部分の記録をつけることができる。下記の例について検討する。プロセッサＰＲＯＣは、データパケットのヘッダから、部分の合計量が５００であると決定する。ゆえに、プログラムメタデータは、５００である上記合計量を含む。それから、プロセッサＰＲＯＣは、各フラグがパケット番号に対応する５００個のフラグのリストを維持することによって記録をつけ、対応する部分がすでにインストールされているかどうかを明示することができる。例えば、フラグ＃２５はパケット番号＃２５に対応し、部分＃２５がインストールされているかどうかを明示する。ゆえに、プログラムメタデータはパケット番号＃２５を含み、この番号がしたがって、連続した部分＃１〜＃５００の、ランク＃２５の部分を表す。第１の部分をインストールする前、リストは、該リストのすべてのフラグを０（ゼロ）に設定することによって初期化される。それから、プロセッサＰＲＯＣが部分を毎回インストールするたび、プロセッサＰＲＯＣは、該部分の対応フラグを１（イチ）に設定する。プロセッサＰＲＯＣは、上記リストのすべてのフラグが１に設定されたと決定すると、すべての５００個の部分がインストールされたと決定する。
【００４２】
別法として、プログラムメタデータは、コンピュータプログラムにより含まれる合計バイト数を含む。プロセッサＰＲＯＣは、プログラムメモリＭＰＲＯＧに記憶されている部分の累積バイト数の総数を保持することができる。累積バイト数が合計バイト数に合致するような最後の部分をインストールすると、プロセッサＰＲＯＣは、コンピュータプログラムを集合的に形成するすべての部分がプログラムメモリＭＰＲＯＧに記憶されたと決定することができる。
【００４３】
ホストＨＳＴは、いわゆるラウンドロビン方式（round-robin  fashion）で部分を送信することができる。このことは、ホストＨＳＴがすべての部分を周期的な仕方で送信することを暗に示す。再び、部分の合計量が５００である下記の例を検討する。５００個の部分は、合計数５００のそれぞれのデータパケットに対応する。５００個のデータパケットをラウンドロビン方式で送信することは、ホストＨＳＴがすべての５００個のデータパケットを単一のラウンドロビン期間内に連続的に送信し、それから次のラウンドロビン期間に進むことを暗に示し、これにおいて、ホストＨＳＴは、再びになるが、すべてのデータパケットを連続的に送信する。ラウンドロビン期間内に、ホストＨＳＴは、データパケット＃１を最初送信し、それからデータパケット＃２を送信し、それからデータパケット＃３を送信する、などする。データパケット＃５００を送信した後、ホストＨＳＴは、次の期間を、再度データパケット＃１を、それからデータパケット＃２を、などと送信することで開始する。
【００４４】
結果として、装置ＤＥＶは、同様にラウンドロビン方式で部分を受信することができ、結果として、これに応じてラウンドロビン方式でそれぞれの部分をさらにインストールすることができる。装置ＤＥＶは、ラウンドロビン期間内の任意の段階でスニフ及び受信を開始してよい。例えば、装置ＤＥＶがその第１のデータパケットを受信し、該第１のデータパケットはデータパケット＃１００であり、部分＃１００を含む。ゆえに、装置ＤＥＶが、ホストＨＳＴにより連続的に送信される部分を受信し及びインストールする場合、装置ＤＥＶは、最初に第１のラウンドロビン期間の間に部分＃１００乃至＃５００を、それから第２のラウンドロビン期間の間に部分＃１乃至＃９９をインストールする。
【００４５】
装置ＤＥＶが、何らかの理由で、第１のラウンドロビン期間の間にデータパケットを受信し及び／又はインストールすることを失敗した場合、装置ＤＥＶは、次のラウンドロビン期間の間、該データパケットを単に受信し及びインストールしてもよい。前の例で続けると、装置ＤＥＶが第１のラウンドロビン期間の間にデータパケット＃２００を受信することを失敗した場合、次のラウンドロビン期間は、下記のとおり進むことになる：装置ＤＥＶが（上記のとおり）部分＃１乃至＃９９をインストールし、それから部分＃１００乃至＃１９９をスキップし、最後、部分＃２００を受信し、インストールする。
【００４６】
図１ｂは、複数のスモールメモリ装置１１０〜１１３を含むシステム１９９を例示している。システム１９９は、実際、システム１００と３つのさらなる（スモールメモリ）装置１１１〜１１３とを含む。ラウンドロビン方式で部分をインストールすることは、複数の装置１１０〜１１３を有するシステム１９９において特に有用である。複数の装置１１０〜１１３の各々は、データパケットの受信を、ラウンドロビン期間の（又は、その事項についての次のラウンドロビン期間の）異なる段階において開始することができる。しかしながら、複数の装置１１０〜１１３の各々は、同じ単一のホストＨＳＴから同じデータパケットを同時に受信し、その後、それぞれの同じ部分をインストールしてもよい。システム１００又はシステム１９９に対して追加され得る（スモールメモリ）装置の量に対して、装置の各々が並列にホストＨＳＴから部分を受信し及びインストールするとき、制限はない。唯一の要件は、複数の装置の各々が、ホストＨＳＴにより送信されるデータパケットを受信するように、ホストＨＳＴの範囲内であることである。このことは、装置の大きいグループである複数の装置へのコンピュータプログラムのインストールをスピードアップするという意味において大きな利益を提示する。
【００４７】
図２ａは、コンピュータプログラムのラウンドロビンインストールの間のホストメモリＭＨＳＴ２００と２つのプログラムメモリＭＰＲＯＧ１  ２１０及びＭＰＲＯＧ２  ２２０とを例示している。プログラムメモリＭＰＲＯＧ１及びＭＰＲＯＧ２は、それぞれ、２つのスモールメモリ装置ＤＥＶ１及びＤＥＶ２のメモリである。ホストメモリＭＨＳＴは、ホストＨＳＴのメモリである。ホストメモリＭＨＳＴは、（８個の）部分Ａ〜Ｈの形式のコンピュータプログラムを、それぞれのメモリ位置２０１〜２０８に含有する。部分Ａ〜Ｈは、コンピュータプログラムを集合的に形成する。ホストＨＳＴは、部分Ａ〜Ｈをラウンドロビン方式で送信することができる。それから、装置ＤＥＶ１及びＤＥＶ２は、ホストＨＳＴからの部分をそれぞれのプログラムメモリＭＰＲＯＧ１及びＭＰＲＯＧ２内に受信し、インストールすることができる。
【００４８】
ホストＨＳＴは、ホストメモリＭＨＳＴのメモリ位置２０３に現在の読み出し位置を有する。現在の読み出し位置は、ポインタＣＵＲＲ０によって示される。ホストＨＳＴは、部分Ｃを読み出し、部分Ｃと相対メモリ位置（を有するヘッダ）とを含有するデータパケットを組み立て、このデータパケットを送信ユニットＳＮＤを介して送信する。
【００４９】
装置ＤＥＶ１は、データパケットを受信し、（ａ）部分と（ｂ）相対メモリ位置とを抽出する。装置ＤＥＶ１は、その開始メモリ位置２１１に相対メモリ位置を加算することによって絶対メモリ位置２１３を決定する。例えば、開始メモリ位置が値１２８を有し、相対メモリ位置が値２０４８を有し、したがって、絶対メモリ位置の値は２１７６になる。結果として、装置ＤＥＶ１はその現在の書き込み位置を、ポインタＣＵＲＲ１により示される絶対メモリ位置に設定し、それから、プログラムメモリＭＰＲＯＧ１のメモリ位置２１３に部分Ｃを記憶する（書き込む）。装置ＤＥＶ２は、同様の処理を実行する。すなわち、装置ＤＥＶ２は、データパケットを受信し、（絶対）メモリ位置２２３を決定し、メモリ位置２２３に部分Ｃを記憶する。ポインタＣＵＲＲ２は、装置ＤＥＶ２の現在の書き込み位置を示す。
【００５０】
ホストＨＳＴは、矢印２６０により示されるとおり、ラウンドロビン方式で部分を送信する。この例において、ホストＨＳＴは、部分Ｃをちょうど送信したところである。ゆえに、ホストＨＳＴにより送信されるべき次の部分は、部分Ｄであることになり、その後、部分Ｅなどである。部分Ｈを送信した後、それから、ホストＨＳＴは、再度部分Ａを送信することで続行することになる。
【００５１】
ＤＥＶ１が最初スニフを開始した後、ホストＨＳＴが、同じラウンドロビン期間内の現在の部分Ｃを送信するほんの直前に、部分Ｂを送信した。したがって、装置ＤＥＶ１は、部分Ｂを含むデータパケットを最初検出し、結果として、部分Ｂが、ＤＥＶ１によりインストールされる最初の部分である。この例において、装置ＤＥＶ１は、目下、部分Ｂ及びＣをインストールし終えている。ポインタＳＴＡＲＴ１は、第１の部分が装置ＤＥＶ１によってメモリ位置２１２に記憶されることを示している。プログラムメモリＭＰＲＯＧ１内のパターンフィルされたエリアは、部分Ｂ及びＣがメモリ位置２１２及び２１３それぞれに記憶されていることを示す。矢印２６１は、装置ＤＥＶ１が部分を順序Ｂ、Ｃにおいてインストールしたことを示す。
【００５２】
ＤＥＶ２は、ホストＨＳＴが部分Ｇを送信する直前、前のラウンドロビン期間の間にスニフを最初開始している。したがって、装置ＤＥＶ２は、部分Ｇを含むデータパケットを最初検出し、結果として、部分Ｇが、ＤＥＶ２によりインストールされる最初の部分である。この例において、装置ＤＥＶ２は、目下、部分Ｇ、Ｈ、Ａ、Ｂ、及びＣをインストールし終えている。ポインタＳＴＡＲＴ２は、装置ＤＥＶ２がその第１の部分をメモリ位置２２７に記憶したことを示している。プログラムメモリＭＰＲＯＧ２内のパターンフィルされたエリアは、部分Ｇ、Ｈ、Ａ、Ｂ、及びＣがメモリ位置２２７、２２８、２２１、２２２、及び２２３それぞれに記憶されていることを示す。矢印２６２は、ＤＥＶ２が部分を順序Ｇ、Ｈ、Ａ、Ｂ、Ｃにおいてインストールしたことを示す。
【００５３】
ＤＥＶ１は依然として、「残りの（to  go）」６つの部分を有し、ゆえにＤＥＶ１は依然として、すべての部分Ａ〜Ｈのインストールを完了するために、部分Ｄ〜Ｈ及びＡをインストールする必要がある。ＤＥＶ２は、「残りの」部分を３つだけ有し、ゆえにＤＥＶ２は依然として、すべての部分Ａ〜Ｈのインストールを完了するために、部分Ｄ〜Ｆをインストールする必要がある。装置ＤＥＶ１及びＤＥＶ２が双方、ラウンドロビン方式でホストＨＳＴにより送信される次の部分を受信し及びインストールする場合、ＤＥＶ２は、すべての部分のインストールを、ＤＥＶ１が完了する前に完了することになる。図２ｂは、コンピュータプログラムのインストールを完了したプログラムメモリＭＰＲＯＧ１及びＭＰＲＯＧ２を例示している。メモリＭＰＲＯＧ１及びＭＰＲＯＧ２の双方が、それぞれのメモリ位置２１１〜２１８と２２１〜２２８とにそれぞれ、すべての部分Ａ〜Ｈを含む。
【００５４】
図２ｃは、コンピュータプログラムの別のラウンドロビンインストールの間の、２つのプログラムメモリＭＰＲＯＧ１  ２１０及びＭＲＰＯＧ２  ２２０とホストメモリＭＨＳＴ２００とを例示している。図２ｃにおいて、ホストＨＳＴとそのホストメモリＭＨＳＴとは、図２ａのものと同一である。図２ａの状況との差は、装置ＤＥＶ１及びＤＥＶ２がその開始メモリ位置２１１及び２２１それぞれで、部分の記憶を開始していることである。装置ＤＥＶ１及びＤＥＶ２は、そのそれぞれのプログラムメモリＭＰＲＯＧ１及びＭＰＲＯＧ２内の連続的なメモリ位置に、連続的な部分を、該部分を受信した順序に従って記憶する。ゆえに、装置ＤＥＶ１は、次の部分Ｄ〜Ｈ及びＡを、それぞれの連続的なメモリ位置２１３〜２１８に記憶する。同様に、装置ＤＥＶ２は、連続的な部分Ｄ〜Ｆを、それぞれの連続的なメモリ位置２２５〜２２８に記憶する。すべての部分Ａ〜Ｈを記憶した後、装置ＤＥＶ１及びＤＥＶ２は、後に、そのそれぞれのプログラムメモリＭＰＲＯＧ１及びＭＰＲＯＧ２内の部分を、該部分の順序が図２ｂに従ったものになるように再順序付けする。
【００５５】
図２ｄは、コンピュータプログラムのすべての部分を記憶した後、かつ部分を再順序付けする前の、２つのプログラムメモリＭＰＲＯＧ１及びＭＰＲＯＧ２を例示している。装置ＤＥＶ１は、そのメモリ内にすべての部分Ａ〜Ｈが記憶されていると決定すると、プログラムメモリＭＰＲＯＧ１内に部分Ａ〜Ｈが図２ｂに表されたとおり記憶されるように、部分を再順序付けする。同様に、装置ＤＥＶ２は、そのメモリ内にすべての部分Ａ〜Ｈが記憶されていると決定すると、プログラムメモリＭＰＲＯＧ２内に部分Ａ〜Ｈが図２ｂに表されたとおり記憶されるように、部分を再順序付けする。
【００５６】
図２ｃにおいて、装置ＤＥＶ１及びＤＥＶ２は、図２ａとは別様に、部分を記憶する絶対メモリ位置を決定する。例えば、第１の部分Ｂについて、装置ＤＥＶ１は、部分Ｂを記憶するための絶対位置が開始メモリ位置２１１であると決定する。次の部分Ｃを受信した後、装置ＤＥＶ１は、部分Ｃを記憶するための絶対メモリ位置が次のメモリ位置、メモリ位置２１２であると決定する。同様に、次の部分Ｄ〜Ｈ及びＡが、次のメモリ位置２１３〜２１８にそれぞれ記憶される。装置ＤＥＶ１は、パケット番号と、部分がプログラムメモリＭＰＲＯＧ１に記憶されている順序を表すそれぞれのメモリ位置とのリストを維持することができる。この場合、上記リストは、部分が（図２ｄに示されるとおり）順序Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ａにおいて記憶されていると示す。上記リスト内の情報に基づいて、装置ＤＥＶ１は、それから、部分Ａをメモリ位置２１８からメモリ位置２１１に移動し、部分Ｂをメモリ位置２１１からメモリ位置２１２に移動し、部分Ｃをメモリ位置２１２からメモリ位置２１３に移動する、などすることができる。
【００５７】
ホストＨＳＴが部分をラウンドロビン方式で送信する順序は、典型的に、上記で説明されたとおりである。ラウンドロビン期間内に部分を送信する典型的順序は、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈである。別法として、部分を送信する順序は、上記の典型的順序とは異なってもよい。例えば、順序が反対にされ、あるいはランダム化されてもよい。例えば、順序のランダム化の結果として、ホストがあるラウンドロビン期間内に順序Ｅ、Ｄ、Ａ、Ｃ、Ｇ、Ｂ、Ｈ、Ｆにおいて部分を送信することがあり、ホストが別のラウンドロビン期間内に別の順序Ｂ、Ｆ、Ｇ、Ｅ、Ｄ、Ｈ、Ｃ、Ａにおいて部分を送信することがある。
【００５８】
コンピュータプログラムのインストールは、様々な方法において始動され得る。例えば、ブートローダが実行されているとき、ブートローダが装置ＤＥＶにデータパケットのスニフを開始させてもよい。ブートローダは、所定のタイムアウト期間を有してもよく、したがって、スニフを開始した後、上記タイムアウト期間内にデータパケットが検出されないとき、装置ＤＥＶはスニフを中止し、装置ＤＥＶのブートを進める。対照的に、データパケットが上記タイムアウト期間内に検出される場合、装置ＤＥＶは、データパケットにより含まれる部分をインストールし、次のデータパケットについてスニフを開始する。
【００５９】
別の例として、ブートローダは、装置ＤＥＶに、正当なコンピュータプログラムがプログラムメモリＭＰＲＯＧ内に記憶されているかどうかを検証させてもよく、正当なコンピュータプログラムがインストールされていないと決定するとスニフを開始してもよい。別の例として、ブートローダは、装置ＤＥＶに、装置を動作するためのいかなるコンピュータプログラムもプログラムメモリＭＰＲＯＧ内に記憶されているかどうかを検証させてもよい。装置ＤＥＶは、コンピュータプログラムがインストールされていないと決定すると、プログラムメモリが「空」である（例えば、ゼロのみで埋められている）と決定すると、スニフを開始してもよい。
【００６０】
別の例として、ブートローダは、装置ＤＥＶに、インストールフラグがインストール状態に設定されていると検出するとスニフを始動させてもよい。インストールフラグがインストール状態に設定されているとき、このことは、コンピュータプログラムのインストールが必要とされることを表す。インストールフラグが非インストール状態に設定されているとき、このことは、コンピュータプログラムのインストールが必要とされないことを表す。インストールフラグは、装置ＤＥＶの一部であり得る。インストールフラグは、外部入力に応答してインストール状態に設定されてもよい。例えば、装置ＤＥＶがリモート制御装置である場合、外部入力がリモート制御装置に所定コードを打ち込むユーザにより提供されて、リモート制御装置に（ａ）インストールフラグをインストール状態に設定することと、（ｂ）リブートを行うことと、を実行させることができる。上述されたとおり、それから、装置ＤＥＶは、（リ）ブートの間にインストールフラグがインストール状態に設定されていると検出し、応答において、データパケットのスニフを開始する。コンピュータプログラムのインストールを完了すると、装置ＤＥＶは、インストールフラグを非インストール状態に設定することができる。別法として、外部入力が、インストールフラグを表す装置ＤＥＶ上の手動スイッチを介して提供されてもよい。ユーザは、手動スイッチを第１の位置又は第２の位置に手動で設定することができる。第１の位置がインストール状態に対応してもよく、第２の位置が非インストール状態に対応してもよい。
【００６１】
本発明の文脈において、装置ＤＥＶが「データパケットのスニフを開始する」とき、このことは、装置ＤＥＶがコンピュータプログラムのインストールを開始したことを暗に示し、コンピュータプログラムをインストールしたことは、コンピュータプログラムがプログラムメモリＭＰＲＯＧ内に記憶されていることを暗に示すことが留意されるべきである。
【００６２】
セキュリティの目的で、データパケットは暗号化を含んでもよい。例えば、ホストＨＳＴは、コンピュータプログラムの部分を暗号化し、ヘッダと暗号化された部分とを用いてデータパケットを組み立ててもよい。装置ＤＥＶは、データパケットを受信し、データパケットから暗号化された部分を抽出し、暗号化された部分を解読することによって部分を取得することができる。暗号化は、装置ＤＥＶ又は同様の装置のみが部分を受信し及びインストールし得ることを確保することができる。
【００６３】
一実施形態において、装置ＤＥＶは、リモート制御装置を生産する生産設備内のリモート制御装置である。生産設備は、様々な生産ステートにおけるリモート制御装置を有する生産ラインを含み得る。ラインの終わりにおいて、各リモート制御装置は、最新のファームウェアのインストールを必要とする。図１ｂにより概略的に例示されたのと同様の設定において、ホストＨＳＴは、該ホストＨＳＴにより送信されるデータパケットを複数のリモート制御装置が受信することができるように、生産ラインの付近にある。ホストＨＳＴは、例えば、データパケットを送信するパーソナルコンピュータ又は何らかの専用装置であり得る。生産設備内の他の機器との干渉のリスクを最小化するために、ホストＨＳＴ及びリモート制御装置は、他の機器によって使用されていない通信又は周波数バンドを使用してもよい。しかしながら、複数のリモート制御装置間における相互干渉は問題でなく、なぜならば、複数のリモート装置は、同じホストＨＳＴから並列にデータパケットを単に受信しており、受信するからである。
【００６４】
一実施形態において、装置ＤＥＶは、コンピュータプログラムのインストールを完了するとフィードバックを提供するインジケータを有する。例えば、装置ＤＥＶは、上記完了において点灯するＬＥＤを有する。一変形として、上記ＬＥＤが、その色を上記完了において赤から緑に変える。別の例として、装置ＤＥＶは、上記完了において通知又は警告を生成するスピーカーを有する。別の例として、装置ＤＥＶは、上記完了において振動する手段を有してもよい。
【００６５】
一実施形態において、装置ＤＥＶは、ワイヤレスに制御可能であるランプ、例えば、フィリップスにより生産される「ヒューパーソナルワイヤレスライティング（Hue  Personal  Wireless  Lighting）」製品などである。ランプのライティング特性が、中央制御ボックスによって制御されることができ、あるいはランプは、スマートフォンによって直接制御されることができる。中央制御ボックスが、上記で説明されたとおりのホストＨＳＴを含んでもよい。ユーザは、明るさ、色相、及び／又は彩度を、各ランプについて別個に、又はすべてのランプについて連帯的に制御したいことがある。典型的に、リビングルームが、複数のこうしたワイヤレス制御可能ランプを有するであろう。中央制御ボックスが、新しいファームウェアが複数のランプについて利用可能であると検出することができるとき、中央制御ボックスは、下記のとおりファームウェアアップグレードを始動させることができる。中央制御ボックスは、新しいファームウェアのバージョン番号を各ランプに送信し、応答において、各ランプは、新しいファームウェアの上記バージョン番号がそのインストールされたファームウェアに合致するかどうかを確認する。複数のランプのうちの一ランプが、該ランプのファームウェアが最新でないと検出する場合、このランプは、中央制御ボックスに、新しいファームウェアのインストールを始動することになると返信することができる。すなわち、このランプは、そのインストールフラグを「インストール状態」に設定し、リブートを実行する。リブートすると、上記ランプはそれから、中央制御ボックスからのデータパケットについてスニフを開始する。同様に、古いファームウェアを同様に有する他のランプが同じことを行い、並列に、さらにリブートし、新しいファームウェアのインストールを始動させてもよい。中央制御ボックスが少なくとも１つのランプから、新しいソフトウェアのインストールを始動させることを受信したとき、中央制御ボックスは、新しいファームウェアを、例えば製造業者のウェブサイトからダウンロードする。それから、中央制御ボックスは、新しいファームウェアを含むデータパケットの送信を開始する。上記ランプは、それから、中央制御ボックスにより送信されるデータパケットを検出し及び受信し、本発明に従うファームウェアのインストールを開始する。
【００６６】
前の実施形態の一変形として、新しいランプが、リビングルーム内の上記複数のランプに対して追加されることがあり、そのファームウェアが最新であるかどうかを確認することがある。新しいランプは、アーマチュア（armature）内に取り付けられ、ゆえに、このアーマチュアを介して電気的に電力供給される。電力供給されると、新しいランプは、中央制御ボックスとワイヤレスに連絡することができる。前の実施形態と同様の方法で、中央制御ボックスは、複数のランプのうちの他のランプにインストールされている最新のファームウェアを通信し、新しいランプのファームウェアが最新でない場合、中央制御ボックスと新しいランプとは、本発明に従う新しいファームウェアのインストールを開始する。
【００６７】
一実施形態において、小売店が、メディアプレーヤである複数のスモールメモリ装置を有する。小売商は、ショップフロアですべてのメディアプレーヤに最新のファームウェアをインストールしたいことがある。小売商は、ホストＨＳＴとして機能するように配置されたスマートフォンを有する。最新のファームウェアは、スマートフォン上にダウンロードされることができ、スマートフォンは、ラウンドロビン方式でコンピュータプログラムの部分の送信を開始することができる。メディアプレーヤに電力供給することによって、メディアプレーヤはリブートし（ゆえに、ブートローダを実行し）、それからブートローダの一部としてスニフを始動させ、その後、上記部分を受信し及びインストールすることができる。スマートフォンがラウンドロビン方式で部分を送信し続けるとき、メディアプレーヤは１つずつ電力供給されてもよく、各メディアプレーヤは、ラウンドロビン期間のうち異なる段階において、及び／又は異なるラウンドロビン期間内でさえ、ファームウェアのインストールを始動させることができる。ゆえに、それぞれのメディアプレーヤのインストールは同期的である必要がなく、このことは、手順全体を実用的にする。上記のファームウェアを更新する手順は、そのワイヤレスの及び自動的な性質のため、簡便である。さらに、上記手順は、メディアプレーヤ上のファームウェアの更新が並列に行われるため、高速でもある。
【００６８】
装置ＤＥＶは、本発明に従う任意のスモールメモリ装置であり得る。多くのこうした装置が、現今、例えば、ホーム環境内、医療環境内、又は車の中の、他の装置に接続する無線能力を有する。ゆえに、装置は相互接続されることができ、例えば、互いに、及び／又は装置のローカルネットワーク内のユーザと、及び／又はインターネットと相互作用することができる。スモールメモリ装置ＤＥＶの例は、リモート制御装置、ワイヤレス制御可能ランプ（例えば、上記のもの）、メディアプレーヤ、ポータブルメディアプレーヤ、電子玩具、デジタルウォッチ、キッチン電化製品、冷蔵庫又はオーブンなどのキッチン装置、及びウェアラブル電子装置である。装置ＤＥＶは、医療目的の装置、例えば、血液飽和計測器、ウェアラブル心拍モニタ、又は、患者の生理学的又は身体的パラメータを監視する別のスモールメモリ装置などであり得る。さらに別の例として、装置ＤＥＶは、ワイヤレスに制御可能なデジタルタグ、例えば、個人識別のための名前タグとして、又は小売店で価格を示す価格タグとしての役割を果たすデジタルタグであり得る。
【００６９】
ホストＨＳＴ及び装置ＤＥＶにより使用されるワイヤレステクノロジーは、任意の適切なワイヤレステクノロジー、例えば、ＲＦ４ＣＥ  Ｚｉｇｂｅｅ、ＷｉＦｉ（登録商標）、又はペアリングを必要としないＢｌｕｅＴｏｏｔｈ（登録商標）の一変形などであり得る。本発明の利益は、ブートローダによるコンピュータプログラムのインストールがいわゆるＭＡＣレベルで作用し得るものであり、ゆえにブートローダ内にＲＦ４ＣＥソフトウェアスタックを必要としないという意味で、ブートローダがとても簡素であり得ることであることが留意されるべきである。
【００７０】
プログラムメモリＭＰＲＯＧは、該プログラムメモリＭＰＲＯＧがコンピュータプログラムとさらにコンピュータプログラムのコピーとの双方を同時に含有するのに不十分なサイズであるという意味で小さい（スモールな）ものであり得ることが上記で言及されている。しかしながら、本発明は、明らかに、プログラムメモリＭＰＲＯＧがコンピュータプログラムと上記コピーとの双方を含有するのに十分なサイズであるようにプログラムメモリＭＰＲＯＧが大きいとき、同様に作用することになる。一実施形態において、プログラムメモリＭＰＲＯＧは実際大きく、しかしそれにかかわらず、プログラムメモリＭＰＲＯＧのうち小さい一部のみ利用可能であることがあり、なぜならば、残りが他の目的に使用されるためである。
【００７１】
ホストＨＳＴは、データパケットを組み立てる命令を含むソフトウェアを実行することができる。このソフトウェアは、コンピュータプログラム製品、例えば、ＣＤ−ＲＯＭ又はソリッドステートメモリなどに具現化されることができる。コンピュータプログラム製品は、命令がプロセッサにより実行されるときにホストＨＳＴのプロセッサに下記のステップを実行させる該命令を含み得る：コンピュータプログラムから部分を決定するステップ、部分に関連した部分メタデータを決定するステップ、及び、部分と部分メタデータとを含むデータパケットを組み立てるステップ。
【００７２】
図３は、スモールメモリ装置ＤＥＶにコンピュータプログラムをインストールする方法３００を例示している。方法３００は、ステップ３０１〜３０５を含む。ステップ３０１は、複数のデータパケットのうちのデータパケットを検出することを含み、該検出することは、上記データパケットを受信することの一部である。ステップ３０２は、上記データパケットから、（ａ）コンピュータプログラムの部分、及び該部分に関連した部分メタデータと、（ｂ）コンピュータプログラムを集合的に形成する部分の集合に関連したプログラムメタデータと、のうち少なくとも１つを抽出することを含む。ステップ３０３は、上記部分メタデータに基づいてプログラムメモリ内のメモリ位置を決定することを含む。ステップ３０４は、プログラムメモリ内に記憶されている抽出された部分を表す進捗情報を維持することを含む。ステップ３０５は、進捗情報とプログラムメタデータとに基づいて部分の集合の記憶の完了を決定することを含む。方法３００は、システム１００において及び装置１００によって実行され得るステップと整合する。
【００７３】
方法３００は、コンピュータプログラム製品に具現化されてもよい。上記コンピュータプログラム製品は、命令を含むブートローダを含み、ブートローダは、該ブートローダがプロセッサＰＲＯＣにより実行されるとき、プロセッサＰＲＯＣに方法３００を実行させる。コンピュータプログラム製品は、例えば、ＣＤ−ＲＯＭ又はソリッドステートメモリであり得る。上述された実施形態は、本発明を限定するのでなく例示していることと、別記の特許請求の範囲から逸脱することなく、多くの代替的な実施形態を当業者が設計可能であろうこととが留意されるべきである。本発明に係る上述された実施形態、実装、及び／又は態様のうち２つ以上が、有用と思われる任意の方法で組み合わせられてもよいことが当業者により十分理解されるであろう。
【００７４】
システム、装置、ホスト装置、方法、又はコンピュータプログラム製品の修正及び変形は、説明された、監視サブシステムの修正及び変形に対応し、本説明に基づいて当業者により実行されることができる。
【００７５】
請求項において、丸括弧の間に置かれたいかなる参照符号も、請求項を限定するものとみなされるべきではない。動詞「含む」及びその活用の使用は、請求項に明示された要素又はステップ以外の要素又はステップの存在を除外するものではない。要素の前にある冠詞「一の（a，an）」は、複数のこうした要素の存在を除外するものではない。本発明は、いくつかの区別可能な要素を含むハードウェアによって、及び適切にプログラムされたコンピュータによって実装されることができる。いくつかの手段を列挙する装置（又はシステム）クレームにおいて、上記手段のうちいくつかが、１つの及び同じアイテムのハードウェアによって具現化されてもよい。特定の方策が相互に異なる従属請求項に記載されているという単なる事実は、こうした方策の組み合わせが利益をもたらすのに使用され得ないことを示すものではない。
【００７６】
本発明は、独立請求項内に定義される。有益な、しかし任意的な実施形態が、従属請求項内に定義される。
【図１ａ】
0006660311.tif 000002
【図１ｂ】
0006660311.tif 000003
【図２ａ】
0006660311.tif 000004
【図２ｂ】
0006660311.tif 000005
【図２ｃ】
0006660311.tif 000006
【図２ｄ】
0006660311.tif 000007
【図３】
0006660311.tif 000008