(57)【特許請求の範囲】
【請求項１】
サードパーティからデバイスのためのドライバモデルを受け取り、該ドライバモデルは、前記デバイスに関連する変数のリストと、該変数の１つ以上の特性とを含み、
前記ドライバモデルがフォーマット準拠であるかどうかを判定し、
前記サードパーティがアクセス可能であるドライバテンプレートに少なくとも部分的に基づき、前記ドライバモデルのシンタックスをバリデートし、
前記ドライバモデルがフォーマット準拠であり且つ前記シンタックスが有効であることに応答して、
前記ドライバモデルを代表する検証済みファイルを生成し、該検証済みファイルは、動作中にデバイスアプリケーションモジュールに動的にロードするよう且つ前記デバイスを動的にサポートするようフォーマットされ、
インテグリティチェック値を前記検証済みファイルに付加し、
前記デバイスアプリケーションモジュールを含むユーザ装置へ前記検証済みファイルを伝達し、
前記ドライバモデルがフォーマット準拠でないか、あるいは、前記シンタックスが無効であることに応答して、エラーメッセージを送る
ことを含む方法。
【請求項２】
前記デバイスは、アプライアンスデバイスを含み、
前記ドライバモデルは、前記アプライアンスデバイスから前記変数のうちの１つ以上の値を読み出すよう構成されるgetサブルーチンと、前記アプライアンスデバイスへ前記変数のうちの１つ以上の値を書き込むよう構成されるsetサブルーチンとを更に含む、
請求項１に記載の方法。
【請求項３】
前記検証済みファイルを生成することは、
前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを生成し、該ドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成され、
前記ドライバクラスを含む実行可能なライブラリを合成する
ことを有する、請求項２に記載の方法。
【請求項４】
前記検証済みファイルは、汎用のドライバクラスへの統合のためにフォーマットされた前記ドライバモデルの少なくとも一部分を含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成される、
請求項２に記載の方法。
【請求項５】
前記デバイスは、入力デバイスを含み、
前記検証済みファイルは、
入力をパースし且つユーザの特性に適応するよう構成される汎用のドライバクラスに組み入れられることが可能であるようにフォーマットされた前記ドライバモデル、及び
入来する入力をパースするよう構成され且つ前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを含む合成された実行可能なライブラリ
のうちの１つ以上を含む、請求項１に記載の方法。
【請求項６】
ドライバモデルを代表する検証済みファイルを受け取り、該検証済みファイルは、デバイスに関連する変数のリストと、該変数のうちの１つ以上の１つ以上の変数特性と、前記デバイスから値を読み出すよう構成されるgetサブルーチンと、デバイスアドレスと、１つ以上のプレースホルダ変数とを含み、
動作中にドライバアプリケーションモジュールに前記検証済みファイルの少なくともある部分をロードし、
前記検証済みファイルに少なくとも部分的に基づき、動的ユーザインタフェースのユーザインタフェース（ＵＩ）要素を生成し、
プレースホルダ変数によって前記getサブルーチンにおいて表される前記変数のうちの第１プレースホルダ変数の値を要求するメッセージを前記デバイスアドレスへ送信し、
受信された応答をパースして、該受信された応答が前記getサブルーチンのパターンに一致するかどうかを判定し、
前記パターンが一致することに応答して、前記受信された応答から値を読み出し、該値は、前記getサブルーチンにおいて前記第１プレースホルダ変数によってそれまで保持されていた位置において前記受信された応答内に位置し、前記動的ユーザインタフェースに含まれる情報を当該値により更新する
ことを有する方法。
【請求項７】
前記検証済みファイルは、前記デバイスへ値を書き込むよう構成され、第２プレースホルダ変数及び書き込みデバイスアドレスを含むsetサブルーチンを含み、
当該方法は、
前記デバイスに関する第２値を伝達することができる入力を前記ユーザインタフェースで受け取り、
前記setサブルーチン内の前記第２プレースホルダ変数を前記第２値により置換し、
前記第２プレースホルダ変数が前記第２値により置換された前記setサブルーチンを前記書き込みデバイスアドレスへ送信する
ことを更に有する、請求項６に記載の方法。
【請求項８】
前記検証済みファイルは、合成されたドライバクラスを含んでいる実行可能なライブラリを含み、
前記ドライバクラスは、前記ドライバモデルのコンテンツを更に含み、
前記ドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより値要求を送信するよう構成される、
請求項７に記載の方法。
【請求項９】
前記検証済みファイルは、汎用のドライバクラスに組み入れられることが可能な前記ドライバモデルを含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンによりデータ要求を送信するよう構成される、
請求項７に記載の方法。
【請求項１０】
前記パースすることは、
前記受信された応答のフォーマットが期待されたフォーマットにあるかどうかを判定し、
前記受信された応答がフォーマット準拠であるかどうかをバリデートし、
ホワイトスペース及び新しい行を前記受信された応答から除去し、
前記受信された応答に含まれる特殊文字を標準符号化により置換し、
前記プレースホルダ変数に更に関連する前記第１プレースホルダ変数に関連する前記変数特性に応じて、変数名を正規表現により置換し、
前記正規表現を用いて、前記値をボディデータと照合し、
前記値を１つ以上のグループにより抽出する
ことを含む、請求項６に記載の方法。
【請求項１１】
サードパーティからデバイスのためのドライバモデルを受け取り、該ドライバモデルは、前記デバイスに関連する変数のリストと、該変数の１つ以上の特性とを含み、
前記ドライバモデルがフォーマット準拠であるかどうかを判定し、
前記サードパーティがアクセス可能であるドライバテンプレートに少なくとも部分的に基づき、前記ドライバモデルのシンタックスをバリデートし、
前記ドライバモデルがフォーマット準拠であり且つ前記シンタックスが有効であることに応答して、
前記ドライバモデルを代表する検証済みファイルを生成し、該検証済みファイルは、動作中にデバイスアプリケーションモジュールに動的にロードするよう且つ前記デバイスを動的にサポートするようフォーマットされ、
インテグリティチェック値を前記検証済みファイルに付加し、
前記デバイスアプリケーションモジュールを含むユーザ装置へ前記検証済みファイルを伝達し、
前記ドライバモデルがフォーマット準拠でないか、あるいは、前記シンタックスが無効であることに応答して、エラーメッセージを送る
動作を実行するよう又は該動作の実行を制御するようプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。
【請求項１２】
前記デバイスは、アプライアンスデバイスを含み、
前記ドライバモデルは、前記アプライアンスデバイスから前記変数のうちの１つ以上の値を読み出すよう構成されるgetサブルーチンと、前記アプライアンスデバイスへ前記変数のうちの１つ以上の値を書き込むよう構成されるsetサブルーチンとを更に含む、
請求項１１に記載の非一時的なコンピュータ可読媒体。
【請求項１３】
前記検証済みファイルを生成することは、
前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを生成し、該ドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成され、
前記ドライバクラスを含む実行可能なライブラリを合成する
ことを有する、請求項１２に記載の非一時的なコンピュータ可読媒体。
【請求項１４】
前記検証済みファイルは、汎用のドライバクラスへの統合のためにフォーマットされた前記ドライバモデルの少なくとも一部分を含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成される、
請求項１２に記載の非一時的なコンピュータ可読媒体。
【請求項１５】
前記デバイスは、入力デバイスを含み、
前記検証済みファイルは、
前記ユーザ装置の前記入力デバイスによって伝達されたマルチモーダル入力をパースするよう構成される汎用のドライバクラスに組み入れられることが可能であるようにフォーマットされた前記ドライバモデル、及び
前記ユーザ装置の前記入力デバイスによって伝達された入来するマルチモーダル入力をパースするよう構成され且つ前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを含む合成された実行可能なライブラリ
のうちの１つ以上を含む、請求項１１に記載の非一時的なコンピュータ可読媒体。
【請求項１６】
ドライバモデルを代表する検証済みファイルを受け取り、該検証済みファイルは、デバイスに関連する変数のリストと、該変数のうちの１つ以上の１つ以上の変数特性と、前記デバイスから値を読み出すよう構成されるgetサブルーチンと、デバイスアドレスと、１つ以上のプレースホルダ変数とを含み、
動作中にドライバアプリケーションモジュールに前記検証済みファイルの少なくともある部分をロードし、
前記検証済みファイルに少なくとも部分的に基づき、動的ユーザインタフェースのユーザインタフェース（ＵＩ）要素を生成し、
プレースホルダ変数によって前記getサブルーチンにおいて表される前記変数のうちの第１プレースホルダ変数の値を要求するメッセージを前記デバイスアドレスへ送信し、
受信された応答をパースして、該受信された応答が前記getサブルーチンのパターンに一致するかどうかを判定し、
前記パターンが一致することに応答して、前記受信された応答から値を読み出し、該値は、前記getサブルーチンにおいて前記第１プレースホルダ変数によってそれまで保持されていた位置において前記受信された応答内に位置し、前記動的ユーザインタフェースに含まれる情報を当該値により更新する
動作を実行するよう又は該動作の実行を制御するようプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。
【請求項１７】
前記ドライバモデルは、前記デバイスへ値を書き込むよう構成され、第２プレースホルダ変数及び書き込みデバイスアドレスを含むsetサブルーチンを含み、
前記動作は、
前記デバイスに関する第２値を伝達することができる入力を前記ユーザインタフェースで受け取り、
前記setサブルーチン内の前記第２プレースホルダ変数を前記第２値により置換し、
前記第２プレースホルダ変数が前記第２値により置換された前記setサブルーチンを前記書き込みデバイスアドレスへ送信する
動作を更に有する、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
前記検証済みファイルは、合成されたドライバクラスを含んでいる実行可能なライブラリを含み、
前記ドライバクラスは、前記ドライバモデルのコンテンツを更に含み、
前記ドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより値要求を送信するよう構成される、
請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項１９】
前記検証済みファイルは、汎用のドライバクラスに組み入れられることが可能な前記ドライバモデルを含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンによりデータ要求を送信するよう構成される、
請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項２０】
前記パースすることは、
前記受信された応答のフォーマットが期待されたフォーマットにあるかどうかを判定し、
前記受信された応答がフォーマット準拠であるかどうかをバリデートし、
ホワイトスペース及び新しい行を前記受信された応答から除去し、
前記受信された応答に含まれる特殊文字を標準符号化により置換し、
前記プレースホルダ変数に更に関連する前記第１プレースホルダ変数に関連する前記変数特性に応じて、変数名を正規表現により置換し、
前記正規表現を用いて、前記値をボディデータと照合し、
前記値を１つ以上のグループにより抽出する
ことを含む、請求項１６に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
ここで論じられる実施形態は、動的デバイスドライバに関する。
【背景技術】
【０００２】
スマートデバイスは、ある機能を実行するために環境において実施されてよい。例えば、スマートサーモスタットは、居住環境において快適な温度を保つように、居住環境において実施されてよい。スマートデバイスは、制御デバイスによってしばしば制御される。制御デバイスは、コンピュータネットワークを介してスマートデバイスと通信してよい。なお、スマートデバイスは様々なプロトコルを用いて通信する。プロトコルは、独自仕様であることがある。そのようなスマートデバイスと通信するアプリケーションは、少数のスマートデバイスに制限され得る。然るに、複数のスマートデバイス又は複数組のスマートデバイスを制御することは、制御デバイス上にロードされた複数のアプリケーションを必要とし得る。
【０００３】
ここで請求される対象は、上述されたようないずれかの欠点を解消する実施形態又は上述されたような環境でのみ動作する実施形態に制限されない。むしろ、この背景技術は、ここで記載される幾つかの実施形態が実施され得る技術の一例を説明するためにのみ与えられている。
【発明の概要】
【０００４】
実施形態の一態様に従って、方法は、サードパーティからデバイスのためのドライバモデルを受け取ることを含む。前記ドライバモデルは、前記デバイスに関連する変数のリストと、該変数の１つ以上の特性とを含む。当該方法は、前記ドライバモデルがフォーマット準拠であるかどうかを判定することを更に含む。当該方法は、前記サードパーティがアクセス可能であるドライバテンプレートに少なくとも部分的に基づき、前記ドライバモデルのシンタックスをバリデートすることを含む。前記ドライバモデルがフォーマット準拠であり且つ前記シンタックスが有効であることに応答して、当該方法は、前記ドライバモデルを代表する検証済みファイルを生成することを含む。前記検証済みファイルは、動作中にデバイスアプリケーションモジュールに動的にロードするよう且つ前記デバイスを動的にサポートするようフォーマットされる。当該方法は、前記デバイスアプリケーションモジュールを含むユーザ装置へ前記検証済みファイルを伝達することと、インテグリティチェック値を前記検証済みファイルに付加することとを更に含む。前記ドライバモデルがフォーマット準拠でないか、あるいは、前記シンタックスが無効であることに応答して、当該方法は、エラーメッセージを送ることを含む。
【０００５】
実施形態の目標及び利点は、特許請求の範囲において特に指摘されている要素、特徴、及び組み合わせによって少なくとも実現され達成される。
【０００６】
前述の概要及び以下の詳細な説明はいずれも、例示及び説明であり、請求される発明の限定ではない点が理解されるべきである。
【図面の簡単な説明】
【０００７】
例となる実施形態は、添付の図面の使用を通じて、更なる特定及び詳細をもって記載及び説明される。
【０００８】
【図１】例となる異種デバイスシステム（デバイスシステム）を表す。
【０００９】
【図２】例となるシステムサーバ及び例となるユーザ装置の詳細図を含むデバイスシステムのブロック図である。
【００１０】
【図３Ａ】図１のドライバシステムにおいて実施され得るドライバモデルの例を表す。
【図３Ｂ】図１のドライバシステムにおいて実施され得るドライバモデルの例を表す。
【００１１】
【図４】図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルの統合において含まれ得る、例となる一連のステップを表す。
【００１２】
【図５】図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルの一部分に基づき得る複数のＵＩ要素を含む、例となるユーザインタフェース（ＵＩ）ページを表す。
【００１３】
【図６】図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルの一部分に基づきアプライアンスデバイスで値を設定する（例えば、書き込む）例を表す。
【００１４】
【図７】図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルの一部分に基づきアプライアンスデバイスから値を得る（例えば、読み出す）例を表す。
【００１５】
【図８Ａ】動的ユーザインタフェースに含まれ得る、図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルに基づくＵＩページを例示する。
【図８Ｂ】動的ユーザインタフェースに含まれ得る、図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルに基づくＵＩページを例示する。
【図８Ｃ】動的ユーザインタフェースに含まれ得る、図３Ａ及び図３Ｂのドライバモデルなどのドライバモデルに基づくＵＩページを例示する。
【００１６】
【図９】異種デバイスドライバ統合の方法の例のフロー図である。
【００１７】
【図１０】異種デバイスドライバ統合の方法の他の例のフロー図である。
【００１８】
【図１１】異種デバイスドライバ統合の方法の他の例のフロー図である。
【００１９】
【図１２】受信された応答をパースする方法の他の例のフロー図である。
【００２０】
【図１３Ａ】デバイスドライバを動的に更新する方法の例のフロー図である。
【図１３Ｂ】デバイスドライバを動的に更新する方法の例のフロー図である。
【００２１】
全ては、ここで記載される少なくとも１つの実施形態に従って配置される。
【発明を実施するための形態】
【００２２】
デバイスのネットワークは、特定の機能のために実施されてよい。そのようなネットワークの幾つかでは、デバイスはユーザ装置によって制御されてよい。ユーザ装置は、測定された条件をデバイスから受け取って、コマンドをデバイスへ伝達してよい。コマンドは、デバイスの動作に作用してよい。例えば、デバイスのネットワークは、ホームオートメーションシステム又はスマートエネルギシステムにおいて実施されてよい。それら及び他の例では、ユーザ装置は、測定された条件を受け取るよう且つコマンドをデバイスへ伝達するよう構成される１つ以上のアプリケーションを実行するスマートフォンを含んでよい。
【００２３】
デバイスのネットワークにおいて、デバイスの異種及び多様性は、ユーザ、開発者、及びベンダーにとって面倒なことを起こし得る。例えば、デバイスを制御するよう又は測定された条件をデバイスから受け取るよう書かれた標準規格及びプロトコルは、デバイスの一部に制限されることがある。然るに、ここで記載される幾つかの実施形態は、異なる通信標準規格及びプロトコルを用いて異なるデバイス間で通信を確立する能力を含む。例えば、幾つかの実施形態は、ユーザ体験を妨げることなしに、且つ、デバイスを制御するアプリケーションをコンパイルし直すこと、インストールし直すこと、又は起動し直すことなしに、新しい、未知の、且つ非標準のデバイスをネットワークに組み込むプラットフォームを提供する。加えて、幾つかの実施形態は、ベンダー及び開発者が、デバイス間通信を可能にするデバイスドライバを開発するためのメカニズムを提供する。それら及び他の実施形態は、開発者がドライバテンプレートに従って新しいドライバモデルを記述することを可能にする。パターンマッチングを用いると、ドライバモデルはロードされ、デバイスドライバとして使用される。ドライバモデルは、デバイスに実施されているアプリケーション、アプリケーションのソースコード、又はユーザ装置でのドライバのコンパイルの知識なしに記述されてよい。加えて、それら及び他の実施形態は、ランタイム中にデバイスドライバを動的にロードし、そして、デバイスドライバを使用するための機能性を生成する。それら及び他の実施形態は、添付の図面を参照して記載される。
【００２４】
図１は、例となる異種デバイスシステム（デバイスシステム）１００を表す。デバイスシステム１００では、システムサーバ１２６及び／又はユーザ装置１１２は、アプライアンスデバイス１０６Ａ〜１０６Ｃ（概して、１つ又は複数のアプライアンスデバイス１０６）及び／又は入力デバイス１１８Ａ及び１１８Ｂ（概して、１つ又は複数の入力デバイス１０８）のためのデバイスドライバ１５０を組み込んでよい。アプライアンスデバイス１０６及び入力デバイス１０８は、集合的にデバイス１０６／１１８と呼ばれる。デバイスドライバ１５０を組み込むことによって、ユーザ装置１１２は、デバイス１０６／１１８を介して入力を受け取ってよい。
【００２５】
デバイスドライバ１５０は、ユーザ１０２の体験を妨げることなしに組み込まれてよい。例えば、デバイスドライバ１５０は、ユーザ装置１１２又はユーザ装置１１２で実行されている如何なるアプリケーションもコンパイルし直すこと、インストールし直すこと、又は起動し直すことなしに、組み込まれてよい。デバイスシステム１００では、最終的にユーザ装置１１２に組み込まれ得るデバイスドライバ１５０は、デバイス１０６／１１８で実行されているアプリケーションやアプリケーションのソースコードの知識なしに、且つ、デバイスドライバ１５０をコンパイルすることなしに、開発されてよい。
【００２６】
図１のデバイスシステム１００は、一般的に記載されている。デバイスシステム１００の幾つかのより具体的な実施形態は、デマンドレスポンス（ＤＲ）システム及びホームオートメーションシステムを含んでよい。ＤＲシステムでは、アプライアンスデバイス１０６のうちの１つ以上のエネルギ利用は削減され得る。例えば、アプライアンスデバイス１０６は、空調、給湯装置、暖房、食器洗浄機、照明、プールヒーター、ホットタブ、又はドライヤーを含んでよい。デバイスドライバ１５０は、ユーザ装置１１２がＤＲプログラムに従って、例えば、ＤＲイベントに参加するための要求に応答して、アプライアンスデバイス１０６の動作を制御することを可能にしてよい。アプライアンスデバイス１０６の動作を制御することで、エネルギ消費量を減らすことができる。
【００２７】
ホームオートメーションシステムでは、家の環境条件は、アプライアンスデバイス１０６の動作を通じて調整され得る。ホームオートメーションシステムでは、アプライアンスデバイス１０６は、例えば、スマートサーモスタットを含んでよい。デバイスドライバ１５０は、ユーザ装置１１２が、アプライアンスデバイス１０６の動作を制御し及び／又はその状態をモニタすることを可能にしてよい。例えば、ユーザ装置１１２は、スマートサーモスタットの温度設定を変更するために使用されてよく、且つ／あるいは、住居の現在の温度は、ユーザ装置１１２において表示されてよい。
【００２８】
ＤＲシステム、ホームオートメーションシステム、及びデバイスシステム１００の他の例において、ユーザ装置１１２は、デバイス１０６／１１８を実行するアプリケーション及び／又はソースコードを知らなくてよい。例えば、アプリケーション及び／又はソースコードを知らずに、デバイスドライバ１５０は、開発され、ユーザ装置１１２及び／又はシステムサーバ１２６に組み込まれてよい。更に、ユーザ装置１１２は、アプライアンスデバイス１０６を実行するアプリケーション及び／又はソースコードの認識なしでアプライアンスデバイス１０６を操作してよい。
【００２９】
図１に表されるように、デバイスシステム１００は、システムサーバ１２６、ユーザ装置１１２、アプライアンスデバイス１０６、入力デバイス１１８、及びサードパーティサーバ１２０を含んでよい。加えて、デバイスシステム１００において、サードパーティ１２２はサードパーティサーバ１２０に関連してよく、ユーザ１０２はユーザ装置１１２に関連してよい。
【００３０】
デバイスシステム１００において、システムサーバ１２６、ユーザ装置１１２、アプライアンスデバイス１０６、及びサードパーティサーバ１２０は、ネットワーク１２４を介して通信してよい。ネットワーク１２４は、デバイスシステム１００のコンポーネント（例えば、１０６、１１２、１１８、１２０、及び１２６）のいずれかの間の信号の通信のために構成される如何なる通信ネットワークも含んでよい。
【００３１】
ネットワーク１２４は、有線又は無線であってよい。ネットワーク１２４は、星形配置、トークンリング状配置、又は他の適切な構成を含む多数の構成を有してよい。更に、ネットワーク１２４は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）（例えば、インターネット）、及び／又は複数のデバイスが通信し得る他の相互接続されたデータパスを含んでよい。幾つかの実施形態において、ネットワーク１２４は、ピア・ツー・ピアネットワークを含んでよい。ネットワーク１２４はまた、様々な異なる通信プロトコルにおけるデータの通信を可能にし得る電気通信ネットワークへ結合されるか、あるいは、その部分を含んでよい。
【００３２】
幾つかの実施形態において、ネットワーク１２４は、データを送信及び受信するための１つ以上のタイプの通信ネットワークを含んでよい。例えば、ネットワーク１２４は、Ｂｌｕｅｔｏｏｔｈ（登録商標）通信ネットワーク、メッセージ・キュー・テレメトリ・トランスポート（ＭＱＴＴ；Message  Queue  Telemetry  Transport）通信ネットワーク、ＭＱＴＴ−センサ（ＭＱＴＴ−Ｓ）通信ネットワーク、コンストレインド・アプリケーション・プログラム（ＣｏＡＰ；Constrained  Application  Program）通信ネットワーク、リプレゼンタティブ・ステート・トランスファー・アプリケーション・プロトコル・インタフェース（ＲＥＳＴ  ＡＰＩ；REpresentative  State  Transfer  Application  Protocol  Interface）通信ネットワーク、拡張可能なメッセージ及びプレゼンスのプロトコル（ＸＭＰＰ；eXtensible  Messaging  and  Presence  Protocol）通信ネットワーク、セルラー通信ネットワーク、あらゆる類似の通信ネットワーク、他の通信ネットワーク、又はそれらのあらゆる組み合わせを含んでよい。ネットワーク１２４において通信されるデータは、ショート・メッセージング・サービス（ＳＭＳ；Short  Messaging  Service）、マルチメディア・メッセージング・サービス（ＭＭＳ；Multimedia  Messaging  Service）、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ；HyperText  Transfer  Protocol）、直接データ接続、無線アプリケーションプロトコル（ＷＡＰ；Wireless  Application  Protocol）、電子メール、スマート・エネルギ・プロファイル（ＳＥＰ；Smart  Energy  Profile）、エコーネットライト（Echonet  Lite）、オープンＡＤＲ（OpenADR）、又はアプライアンスデバイス１０６、入力デバイス１１８、他の通信ネットワークデバイス、若しくはそれらのあらゆる組み合わせにより実施され得るあらゆる他のプロトコルで通信されるデータを含んでよい。
【００３３】
デバイスシステム１００において、サードパーティサーバ１２０は、プロセッサ、メモリ、及び通信機能を含むハードウェアサーバを含んでよい。表される実施形態では、サードパーティサーバ１２０は、ユーザ装置１１２、システムサーバ１２６、デバイス１０６／１１８の１つ以上との間でネットワーク１２４を介して情報を送受信するようネットワーク１２４へ結合されてよい。
【００３４】
サードパーティサーバ１２０は、サードパーティ１２２に関連してよい。一般に、サードパーティ１２２は、例えば、デバイス１０６／１１８のうちの１つ以上を提供する（例えば、製造及び／又は販売する）ベンダー又は開発者などの如何なるエンティティも含んでよい。加えて、又は代替的に、サードパーティ１２２は、デバイス１０６／１１８のうちの１つ以上のためのドライバモデルを生成し伝達するエンティティを含んでよい。ドライバモデルは、デバイス１０６／１１８のためのドライバソフトウェアテンプレートを含んでよい。ドライバモデルに基づき、デバイスドライバ１５０は、ユーザ装置１１２に組み込まれてよい。
【００３５】
幾つかの実施形態において、サードパーティ１２２は、デバイス１０６／１１８のうちの１つ以上を開発し販売する企業を含んでよい。他の実施形態では、サードパーティ１２２は、デバイス１０６／１１８のうちの１つ以上のためのテンプレートを開発及び／又は販売する個人を含んでよい。
【００３６】
アプライアンスデバイス１０６は、プロセッサ、メモリ、及び通信機能を含むコンピュータベースのハードウェアデバイスを含んでよい。アプライアンスデバイス１０６のうちの１つ以上は、ユーザ装置１１２、システムサーバ１２６、サードパーティサーバ１２０、入力デバイス１１８、及び他のアプライアンスデバイス１０６のうちの１つ以上と通信するようネットワーク１２４へ結合されてよい。
【００３７】
デバイスシステム１００は、３種類のアプライアンスデバイス１０６、すなわち、ネットワークアプライアンスデバイス１０６Ａ、被制御アプライアンスデバイス１０６Ｂ、及びコントローラアプライアンスデバイス１０６Ｃを含んでよい。一般に、ネットワークアプライアンスデバイス１０６Ａ、被制御アプライアンスデバイス１０６Ｂ、及びコントローラアプライアンスデバイス１０６Ｃは、実質的に同様であってよい。しかし、アプライアンスデバイス１０６がデバイスシステム１００において通信する方法は異なってよい。
【００３８】
ネットワークアプライアンスデバイス１０６Ａは、ネットワーク１２４を介して通信を受けるよう構成されてよい。通信は、コマンド、応答、測定された条件、及び同様のものを含んでよい。コマンドは、ネットワークアプライアンスデバイス１０６Ａの動作を変更するよう構成されてよい。コマンドは、ユーザ装置１１２及び／又はシステムサーバ１２６から直接に伝達されてよい。加えて、ネットワークアプライアンスデバイス１０６Ａは、測定された条件を表す信号をユーザ装置１１２及び／又はシステムサーバ１２６へ送ってよい。測定された条件は、ネットワークアプライアンスデバイス１０６Ａが置かれている環境条件、及び／又はネットワークアプライアンスデバイス１０６Ａの状態を含んでよい。ネットワークアプライアンスデバイス１０６Ａの状態は、設定、デューティサイクル、電圧、動作ステータス、及び同様のものを含んでよい。応答は、測定条件を含んでよく、且つ／あるいは、コマンドが受信／実施されることを示す書き込み応答を含んでよい。
【００３９】
コントローラアプライアンスデバイス１０６Ｃ及び被制御アプライアンスデバイス１０６Ｂは、プロセッサ、メモリ、及び通信機能を含むコンピュータベースのハードウェアデバイスを含んでよい。コントローラアプライアンスデバイス１０６Ｃは、ユーザ装置１１２及び／又はシステムサーバ１２６からコマンドを受け取り、それを表す信号を被制御アプライアンスデバイス１０６Ｂへ送るよう構成されてよい。コマンドは、被制御アプライアンスデバイス１０６Ｂの動作を制御してよい。例えば、コントローラアプライアンスデバイス１０６Ｃは、サーモスタットを含んでよく、被制御アプライアンスデバイス１０６Ｂは、ヒーターを含んでよい。サーモスタットは、ヒーターの動作を少なくとも部分的に制御してよい。
【００４０】
加えて、コントローラアプライアンスデバイス１０６Ｃ及び／又は被制御アプライアンスデバイス１０６Ｂは、測定された条件を表す信号をユーザ装置１１２及び／又はシステムサーバ１２６へ送ってよい。測定された条件は、コントローラアプライアンスデバイス１０６Ｃ及び／又は被制御アプライアンスデバイス１０６Ｂが置かれている環境条件、及び／又はコントローラアプライアンスデバイス１０６Ｃ及び／又は被制御アプライアンスデバイス１０６Ｂの状態を含んでよい。コントローラアプライアンスデバイス１０６Ｃ及び／又は被制御アプライアンスデバイス１０６Ｂの状態は、設定、デューティサイクル、電圧、動作ステータス、及び同様のものを含んでよい。
【００４１】
コントローラアプライアンスデバイス１０６Ｃ及び／又は被制御アプライアンスデバイス１０６Ｂはまた、応答してよい。応答は、測定条件（上記を参照）を含んでよく、且つ／あるいは、コマンドが受信／実施されることを示す書き込み応答を含んでよい。
【００４２】
コントローラアプライアンスデバイス１０６Ｃと被制御アプライアンスデバイス１０６Ｂとの間の通信は、破線矢印１８０によって図１に表されている。被制御アプライアンスデバイス１０６Ｂとコントローラアプライアンスデバイス１０６Ｃとの間の通信１８０は、ネットワーク１２４と実質的に同様のネットワーク、電気接続、機械結合、又はそれらの何らかの組み合わせを介してよい。
【００４３】
アプライアンスデバイス１０６の幾つかの例は、電球、照明システム、ドアロック、給湯装置、スプリンクラーシステム、空調、サーモスタット、目覚まし時計、ブラインド、スイッチ、煙探知機、カメラ、エッグマインダー、電気取り出し口、パーソナルバンク（例えば、貯金箱）、プロパンタンク、警報、近接センサ、ドアセンサ、バイオメトリックセンサ、マットレス、モバイルデバイス、自動車センサ、時計、調理機器、電気遮断器、個人用アラートセンサ、モーションセンサ、カレンダ、テレビジョン、ラジオ、無線周波数識別（ＲＦＩＤ；Radio  Frequency  IDentification）タグ／ＲＦＩＤ検出器、及びサーモメータを含む。コントローラアプライアンスデバイス１０６Ｃの幾つかの更なる例は、遠隔の電気取り出し口、調光器、遮断器作動装置、及び同様のものを含んでよい。
【００４４】
入力デバイス１１８は、ユーザ１０２とユーザ装置１１２との間に入力インタフェースを提供することが可能な入力デバイスを含んでよい。例えば、タッチスクリーン、タッチパッド、マウス、キーボード、マイクロホン、装着型センサ、及び同様のものがあるが、これらに限られない。代替的に、又は更には、入力デバイス１１８は、プロセッサ、メモリ、及び通信機能を含み、ユーザ１０２とユーザ装置１１２との間に入力インタフェースを提供することができるコンピュータベースのハードウェアデバイスを含んでよい。
【００４５】
入力デバイス１１８は、ユーザ１０２から入力を受け取るか、又はユーザ１０２からの入力を測定するデバイスを含んでよい。入力デバイス１１８から伝達される入力はマルチモーダルであってよい。然るに、ユーザ装置１１２は、多数のタイプ又はモードのユーザ入力を受けるよう構成されてよい。多数のタイプ又はモードのユーザ入力は、存続期間において幾らかの重なりを伴って受信及び／又は処理されてよい。
【００４６】
例えば、第１入力デバイス１１８Ａは、ユーザ１０２の音声コマンドを受けるよう構成されるマイクロホンを含んでよい。よって、ユーザ１０２は、オーディオコマンドを第１入力デバイス１１８Ａへ供給してよい。加えて、第２入力デバイス１１８Ｂは、例えば加速度計などの装着型センサを含んでよい。加速度計によって測定されるパターンは、ユーザ装置１１２へコマンドとして伝達されてよい。入力デバイス１１８の幾つかの更なる例は、例えば、身につけることができる、光学式ヘッドマウント型ディスプレイ、スマートフォン、パーソナルコンピュータ、タブレットコンピュータ、及び同様ものなどの他のコンピュータデバイスを含んでよい。
【００４７】
入力デバイス１１８はユーザ装置１１２とは別個に表されているが、入力デバイス１１８のうちの１つ以上はユーザ装置１１２に含まれてよい。例えば、第１入力デバイス１１８は、ユーザ装置１１２のマイクロホンを含んでよい。
【００４８】
ユーザ１０２は、デバイスシステム１００において相互に作用する如何なる個人又はエンティティも含んでよい。ユーザ１０２は、入力を入力デバイス１１８へ及び／又はユーザ装置１１２のディスプレイ／インタフェース１１６へ供給してよい。幾つかの実施形態において、ユーザ１０２は、アプライアンスデバイス１０６が実施され得る場所又は住居を管理している企業又は管理者を含んでよい。
【００４９】
ユーザ１０２は、ユーザ装置１１２に関連してよい。例えば、ユーザ１０２は、ユーザ装置１１２を所有するか、又はそれを定期的に操作してよい。それにより、ユーザ装置１１２から伝達されるデータは、ユーザ１０２によって起こってよく、且つ、ユーザ装置１１２へ伝達されるデータは、ユーザ１０２を対象としてよい。
【００５０】
ユーザ装置１１２は、プロセッサ、メモリ、及びネットワーク通信機能を含むコンピュータ装置を含んでよい。デバイスシステム１００において、ユーザ装置１１２は、システムサーバ１２６、アプライアンスデバイス１０６、及びサードパーティサーバ１２０のうちの１つ以上との通信のために、ネットワーク１２４へ結合されてよい。ユーザ装置１１２の幾つかの例は、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、携帯電話機、パーソナルデジタルアシスタント（ＰＤＡ）、モバイル電子メールデバイス、携帯型ゲーム機、携帯型音楽プレイヤー、１つ以上のプロセッサを埋め込まれているか又は結合されているテレビ受像機、あるいは、ネットワーク１２４を介してアクセス及び通信することが可能な他の電子デバイスを含んでよい。
【００５１】
ユーザ装置１１２は、ディスプレイ／インタフェース１１６を含んでよい。ディスプレイ／インタフェース１１６は、情報及びデータをユーザ１０２へ表示してよい。例えば、アプライアンスデバイス１０６、入力デバイス１１８、システムサーバ１２６、又はそれらのあらゆる組み合わせは、情報をユーザ装置１１２へ送ってよい。情報はディスプレイ／インタフェース１１６において表示されてよい。ユーザ装置１１２に表示されるデータの例は、アプライアンスデバイス１０６のうちの１つによって測定された条件を表す信号を含んでよい。信号は、ユーザ装置１１２へ送られて、ディスプレイ／インタフェース１１６によって表示されてよい。ディスプレイ／インタフェース１１６で表示されるデータ及び情報の他の例は、システムサーバ１２６から伝達されたエラーメッセージを含んでよい。
【００５２】
ディスプレイ／インタフェース１１６は、ユーザ１０２から入力を受けてよい。図１に表される実施形態では、ユーザ１０２は、入力デバイス１１８を介して及び／又はディスプレイ／インタフェース１１６を介してユーザ装置１１２へ入力を供給してよい。例えば、ユーザ１０２は、ディスプレイ／インタフェース１１６に表示されている、例えばアイコンなどのユーザインタフェース（ＵＩ；User  Interface）要素を選択してよい（例えば、タッチ若しくは押下するか、又は別なふうに選択してよい）。この選択は、定義された入力として解釈されてよい。ユーザ１０２から入力を受けるディスプレイ／インタフェース１１６の例は、タッチスクリーン又は他の電子画像ディスプレイを含んでよい。
【００５３】
更に、又は代替的に、ユーザ入力は、入力デバイス１１８を介して伝達されてよい。例えば、入力デバイス１１８は、ユーザ１０２の状態を測定するよう、又はユーザ１０２から入力を受けるよう構成されてよい。入力の表現は、ユーザ装置１１２へ送られてよい。幾つかの実施形態において、ディスプレイ／インタフェース１１６は、入力デバイス１１８によって受け取られた入力を反映してよい。例えば、ＵＩ要素は、入力デバイス１１８のうちの１つによってユーザ装置１１２へ送られたユーザ入力又はその表現を反映するよう変更されてよい。幾つかの実施形態は、入力デバイス１１８を削除してよく、あるいは、ディスプレイ／インタフェース１１６は、ディスプレイ／インタフェース１１６を介して入力を受けるよう構成されなくてよい。よって、それら及び他の実施形態では、ユーザ１０２は、ディスプレイ／インタフェース１１６又は入力デバイス１１８のうちの１つを介してユーザ装置１１２へ入力を供給してよい。
【００５４】
幾つかの実施形態において、ディスプレイ／インタフェース１１６は、表示機能及び入力受け取り機能を動的ユーザインタフェース１２８においてまとめてよい。動的ユーザインタフェース１２８は、アプライアンスデバイス１０６のうちの１つ以上に関する情報及びデータを表示し、且つ／あるいは、アプライアンスデバイス１０６のうちの１つ以上に関するコマンドの入力を可能にするよう、構成されてよい。動的ユーザインタフェース１２８は、ユーザ装置１１２に組み込まれているデバイスドライバ１５０に基づきＵＩ要素を採用又は撤回してよい。例えば、ユーザ装置１１２は、被制御アプライアンスデバイス１０６Ｂのためのデバイスドライバ１５０をロードしてよい。然るに、動的ユーザインタフェース１２８は、ユーザ１０２が被制御アプライアンスデバイス１０６Ｂを制御することを可能にするＵＩ要素を含んでよい。更に、又は代替的に、動的ユーザインタフェース１２８は、被制御アプライアンスデバイス１０６Ｂの現在の設定を表示してよい（例えば、温度設定及び／又は局所的に測定された温度）。
【００５５】
ユーザ装置１１２は、ユーザ応答モジュール１１４を含んでよい。ユーザ統合モジュール１１４は、１つ以上のデバイスドライバ１５０の組み込みのためのコード及びルーチンを含んでよい。図１において、ユーザ統合モジュール１１４は、ユーザ装置１１２に含まれてよい。幾つかの実施形態において、ユーザ統合モジュール１１４、そのある部分、又はそれに属するある機能は、システムサーバ１２６に含まれているサーバ統合モジュール１０４に記憶され、且つ／あるいは、それによって実行されてよい。幾つかの実施形態において、ユーザ統合モジュール１１４は、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ；Field-Programmable  Gate  Array）又は特定用途向け集積回路（ＡＳＩＣ；Application-Specific  Integrated  Circuit）を含むハードウェアを用いて実施されてよい。幾つかの他の例では、ユーザ統合モジュール１１４は、ハードウェアとソフトウェアとの組み合わせを用いて実施されてよい。
【００５６】
ユーザ統合モジュール１１４は、デバイス１０６／１１８のデバイスドライバ１５０をユーザ装置１１２のデバイスアプリケーションモジュール１３０に組み込むよう構成されてよい。例えば、デバイスドライバ１５０の組み込みは、ユーザ装置１１２で受け取られた入力によるアプライアンスデバイス１０６の制御、ユーザ装置１１２でのアプライアンスデバイス１０６によって測定された条件のモニタリング（例えば、そのような条件を表すデータの表示）、入力デバイス１１８からの入力の受け取り、又はそれらの何らかの組み合わせを可能にしてよい。デバイスドライバ１５０の組み込みは、ユーザ装置１１２の動作及びデバイスアプリケーションモジュール１３０の動作の中断を伴わずに、又は最小限若しくは低減された中断によって、実行されてよい。
【００５７】
幾つかの実施形態において、ユーザ統合モジュール１１４は、検証済みファイルを受け取るよう構成されてよい。検証済みファイルは、幾つかの実施形態では、システムサーバ１２６から受け取られてよい。検証済みファイルは、サードパーティ１２２によって生成されたドライバモデルを代表してよい。ドライバモデルは、それが関連するデバイス１０６／１１８に関連する変数のリストを含んでよい。ドライバモデルは、変数の１つ以上の特性、１つ以上のgetサブルーチン、１つ以上のsetサブルーチン、１つ以上のプレースホルダ変数、又はそれらの何らかの組み合わせを更に含んでよい。
【００５８】
ユーザ統合モジュール１１４は、検証済みファイルのある部分をロードするよう構成されてよい。検証済みファイル又はそのある部分がロードされる場合に、それはデバイスアプリケーションモジュール１３０によって使用されてよい。例えば、デバイスアプリケーションモジュール１３０は、アプライアンスデバイス１０６からの情報及びデータにアクセスするか又はそれを取り出すために、検証済みファイルを使用してよい。加えて、又は代替的に、デバイスアプリケーションモジュール１３０は、情報及びデータをアプライアンスデバイス１０６へ書き込むために、検証済みファイルを使用してよい。また更には、検証済みファイルがユーザ装置１１２にロードされた後、デバイスアプリケーションモジュール１３０は、入力デバイス１１８のうちの１つ以上を介して入力を受けてよい。
【００５９】
デバイスアプリケーションモジュール１３０は、デバイス１０６／１１８により１つ以上の具体的な機能を実行するアプリケーションを含んでよい。例えば、デバイスアプリケーションモジュール１３０は、ＤＲアプリケーションモジュール、暖房、換気及び空調（ＨＶＡＣ；Heating,  Ventilation  and  Air-Conditioning）アプリケーションモジュール、並びにホームオートメーションアプリケーションモジュールを含むアプリケーションを含んでよい。
【００６０】
デバイスアプリケーションモジュール１３０が多数のアプリケーションモジュールを含む実施形態では、デバイス１０６／１１８のうちの１つ以上のデバイスドライバ１５０は、２つ以上のアプリケーションモジュールに組み込まれてよい。例えば、デバイスアプリケーションモジュール１３０は、ＤＲアプリケーションモジュール及びＨＶＡＣアプリケーションモジュールを含んでよい。ＤＲアプリケーションモジュール及びＨＶＡＣアプリケーションモジュールの夫々は、例えば空調ユニットなどのアプライアンスデバイス１０６のうちの１つのためのデバイスドライバ１５０を含んでよい。空調ユニットは、デバイスアプリケーションモジュール１３０と通信してよい。この通信は、ＤＲアプリケーションモジュール及びＨＶＡＣアプリケーションモジュールの両方との情報及びコマンドの通信を含んでよい。
【００６１】
デバイスアプリケーションモジュール１３０は、アプライアンスデバイス１０６による使用のためのコード及びルーチンを含んでよい。幾つかの実施形態において、デバイスアプリケーションモジュール１３０は、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）又は特定用途向け集積回路（ＡＳＩＣ）を含むハードウェアにより実施されてよい。幾つかの他の例では、デバイスアプリケーションモジュール１３０は、ハードウェアとソフトウェアとの組み合わせにより実施されてよい。
【００６２】
幾つかの実施形態において、検証済みファイルの使用は、パターンマッチングに基づいてよい。一般に、パターンマッチングは、関心のあるあるデータを含むコンピュータコードをコンピュータコードの期待されるフォーマットと比較することを含んでよい。期待されるフォーマットとコンピュータコードとの間の関係に基づき、特定の値は、コンピュータコードに入力されてよく、且つ／あるいは、コンピュータコードから抽出されてよい。
【００６３】
加えて、ユーザ統合モジュール１１４は、１つ以上のユーザインタフェース（ＵＩ）要素を生成してよい。ＵＩ要素は、検証済みファイルに基づき生成されてよい。例えば、ＵＩ要素は、デバイスアプリケーションモジュール１３０の特定の機能とも関連してよい。然るに、ＵＩ要素の操作は、アプライアンスデバイス１０６の対応する動作をもたらしてよく、且つ／あるいは、アプライアンスデバイス１０６での状態の変化は、ＵＩ要素における対応する変化をもたらしてよい。
【００６４】
システムサーバ１２６は、プロセッサ、メモリ、及び通信機能を含むハードウェアサーバを含んでよい。表される実施形態では、システムサーバ１２６は、ユーザ装置１１２、サードパーティサーバ１２０、及びアプライアンスデバイス１０６のうちの１つ以上との通信のために、ネットワーク１２４へ結合されてよい。
【００６５】
システムサーバ１２６は、サーバ統合モジュール１０４を含んでよい。サーバ統合モジュール１０４は、デバイスドライバ１５０をユーザ装置１１２の１つ以上のシステムに組み込むためのコード及びルーチンを含んでよい。図１において、サーバ統合モジュール１０４はシステムサーバ１２６に含まれる。幾つかの実施形態において、サーバ統合モジュール１０４は、部分的には、ユーザ装置１１２の部分（例えば、ユーザ統合モジュール１１４）において記憶されるか、又はそれを構成し得るシンクライアントアプリケーションとして、そして、部分的には、システムサーバ１２６において記憶され得るコンポーネントとして動作してよい。幾つかの実施形態において、サーバ統合モジュール１０４は、ウェブサービス、クラウドアプリケーション、局所的に記憶されるアプリケーション、及び同様のものを含んでよい。幾つかの実施形態において、サーバ統合モジュール１０４は、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）又は特定用途向け集積回路（ＡＳＩＣ）を含むハードウェアにより実施されてよい。幾つかの他の例では、サーバ統合モジュール１０４は、ハードウェアとソフトウェアとの組み合わせにより実施されてよい。
【００６６】
サーバ統合モジュール１０４は、ドライバモデルを受け取るよう構成されてよい。ドライバモデルは、デバイス１０６／１１８のために構成されてよい。ドライバモデルは、サードパーティ１２２から受け取られてよい。サーバ統合モジュール１０４は、ドライバモデルがフォーマット準拠であるかどうかを判定し、且つ、ドライバモデルのシンタックスをバリデートしてよい。
【００６７】
例えば、幾つかの実施形態において、ドライバモデルは、拡張マークアップ言語（ＸＭＬ；eXtensible  Markup  Language）においてフォーマットされてよい。それら及び他の実施形態では、ドライバモデルがフォーマット準拠であるかどうかに関する判定は、ドライバモデルが適切にフォーマットされているかどうかの判定を含んでよい。少なくともＸＭＬのコンテキストにおいて、適切にフォーマットされたテンプレートは、標準規格（例えば、ＸＭＬ１．０）によって規定されるシンタックスルールに従ってよい。ドライバモデルが適切にフォーマットされているとの決定は、ドライバモデルが標準規格の物理構造及び論理構造を満足していることを示してよい。
【００６８】
サーバ統合モジュール１０４はまた、ドライバモデルを代表する検証済みファイルを生成してよい。検証済みファイルは、ユーザ統合モジュール１１４によりデバイスアプリケーションモジュール１３０に動的にロードするよう、且つ、動的ユーザインタフェース１２８によりデバイス１０６／１１８を動的にサポートするよう、フォーマットされてよい。サーバ統合モジュール１０４は、次いで、検証済みファイルをユーザ装置１１２へ送ってよい。
【００６９】
変更、追加、又は削除は、本開示の適用範囲から逸脱することなしに、デバイスシステム１００に対してなされてよい。例えば、図１は、１人のユーザ１０２に関連する１つのユーザ装置１１２と、３つのアプライアンスデバイス１０６と、２つの入力デバイス１１８と、１つのサードパーティサーバ１２０と、１つのシステムサーバ１２６とを表すが、本開示は、１人以上のユーザ１０２に関連する１つ以上のユーザ装置１１２、１つ以上のアプライアンスデバイス１０６、１つ以上のサードパーティサーバ１２０、１つ以上の入力デバイス１１８、１つ以上のシステムサーバ１２６、又はそれらの如何なる組み合わせも有するデバイスシステムアーキテクチャに適用される。更に、ここで記載される実施形態における様々なコンポーネント及びサーバの分離は、そのような分離が全ての実施形態において起こることを示すものではない。更に、記載されるコンポーネント及びサーバが、一般に、単一のコンポーネント又はサーバに一体化されるか、あるいは、複数のコンポーネント又はサーバに分けられてよいことは、本開示を鑑みて理解され得る。
【００７０】
デバイスシステム１００において、メモリは、ここで記載される機能を提供するためのデータを記憶する非一時的なメモリを含んでよい。メモリは、動的ランダムアクセスメモリ（ＤＲＡＭ）デバイス、静的ランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリ、又は何らかの他のメモリデバイスであってよいストレージに含まれてよい。幾つかの実施形態において、ストレージはまた、不揮発性メモリ又は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、ＤＶＤ−ＲＯＭデバイス、ＤＶＤ−ＲＡＭデバイス、ＤＶＤ−ＲＷデバイス、フラッシュメモリデバイス、若しくは一層永久的に情報を記憶する何らかの他の大容量記憶装置を含む同様の永久記憶装置及び媒体を含む。
【００７１】
図２は、システムサーバ１２６の一例及びユーザ装置１１２の一例の詳細図を含むデバイスシステム１００の一例のブロック図である。システムサーバ１２６は、プロセッサ２３０Ａ、通信ユニット２３２Ａ、メモリ２３６Ａ、及びサーバ統合モジュール１０４を含んでよい。プロセッサ２３０Ａ、通信ユニット２３２Ａ、メモリ２３６Ａ、及びサーバ統合モジュール１０４は、バス２３４Ａによって通信上結合されてよい。
【００７２】
ユーザ装置１１２は、デバイスアプリケーションモジュール１３０、プロセッサ２３０Ｂ、メモリ２３６Ｂ、通信ユニット２３２Ｂ、ユーザ統合モジュール１１４、及び通信モジュール２０８を含んでよい。デバイスアプリケーションモジュール１３０、プロセッサ２３０Ｂ、メモリ２３６Ｂ、通信ユニット２３２Ｂ、ユーザ統合モジュール１１４、及び通信モジュール２０８は、バス２３４Ｂによって通信上結合されてよい。プロセッサ２３０Ａ及び２３０Ｂは、概して、プロセッサ２３０（複数を含む。）と称されてよい。メモリ２３６Ａ及び２３６Ｂは、概して、メモリ２３６と称されてよい。通信ユニット２３２Ａ及び２３２Ｂは、概して通信ユニット２３２（複数を含む。）と称されてよい。バス２３４Ａ及び２３４Ｂは、概して、バス２３４（複数を含む。）と称されてよい。
【００７３】
プロセッサ２３０は、算術演算ユニット（ＡＬＵ；Arithmetic  Logic  Unit）、マイクロプロセッサ、汎用コントローラ、又は計算を実行するよう構成される何らかの他のプロセッサアレイを含んでよい。プロセッサ２３０は、他のコンポーネントとの通信のためにバス２３４へ結合されてよい。プロセッサ２３０は、一般にデータ信号を処理してよく、複数命令セットコンピュータ（ＣＩＳＣ；Complex  Instruction  Set  Computer）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ；Reduced  Instruction  Set  Computer）アーキテクチャ、又は命令セットの組み合わせを実施するアーキテクチャを含む様々な計算アーキテクチャを含んでよい。図２のシステムサーバ１２６及びユーザ装置１１２は単一のプロセッサ２３０を含むが、複数のプロセッサがシステムサーバ１２６及び／又はユーザ装置１１２に含まれてよい。他のプロセッサ及び物理構成が可能であってよい。
【００７４】
メモリ２３６は、プロセッサ２３０によって実行され得る命令及び／又はデータを記憶するよう構成されてよい。メモリ２３６は、他のコンポーネントとの通信のためにバス２３４へ結合されてよい。命令及び／又はデータは、ここで記載される技術又は方法を実行するためのコードを含んでよい。メモリ２３６は、ＤＲＡＭデバイス、ＳＲＡＭデバイス、フラッシュメモリ、又は何らかの他のメモリデバイスであってよい。幾つかの実施形態において、メモリ２３６は、不揮発性メモリ又は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、ＤＶＤ−ＲＯＭデバイス、ＤＶＤ−ＲＡＭデバイス、ＤＶＤ−ＲＷデバイス、フラッシュメモリデバイス、若しくは一層永久的に情報を記憶する何らかの他の大容量記憶装置を含む同様の永久記憶装置及び媒体を更に含む。
【００７５】
通信ユニット２３２は、ユーザ装置１１２、システムサーバ１２６、サードパーティサーバ１２０、及びデバイス１０６／１１８との間でデータを送受信するよう構成されてよい。通信ユニット２３２はバス２３４へ結合されてよい。幾つかの実施形態において、通信ユニット２３２は、図１のネットワーク１２４への、又は他の通信チャネルへの直接的な物理接続のためのポートを含む。例えば、通信ユニット２３２は、ＵＳＢ、ＳＤ、ＣＡＴ−５、又はデバイスシステム１００のコンポーネントとの有線通信のための同様のポートを含んでよい。幾つかの実施形態において、通信ユニット２３２は、ＩＥＥＥ８０２．１１、ＩＥＥＥ８０２．１６、Ｂｌｕｅｔｏｏｔｈ（登録商標）、グローバルシステム・フォー・モバイル（ＧＳＭ(登録商標)；Global  System  for  Mobile）、汎用パケット無線サービス（ＧＰＲＳ；General  Packet  Radio  Service）、ＧＳＭエボリューションのための拡張データレート（ＥＤＧＥ；Enhanced  Data  rates  for  GSM  Evolution）、符号分割多重アクセス（ＣＤＭＡ；Code  Division  Multiple  Access）、ユニバーサル・モバイル・テレコミュニケーションズ・システム（ＵＭＴＳ；Universal  Mobile  Telecommunications  System）、ロングターム・エボリューション（ＬＴＥ；Long-Term  Evolution）、ＬＴＥアドバンスド（ＬＥＴ−Ａ；LTE-Advanced）、ＭＱＴＴ、ＭＱＴＴ−Ｓ、ＣｏＡＰ、ＲＥＳＴ  ＡＰＩ、ＸＭＰＰ、又は他の適切な無線通信方法を含む１つ以上の無線通信方法により通信チャネルを介してデータを交換する無線トランシーバを含む。
【００７６】
幾つかの実施形態において、通信ユニット２３２は、ＳＭＳ、ＭＭＳ、ＨＴＴＰ，直接データ接続、ＷＡＰ、電子メール、又は他の適切なタイプの電子通信を含むセルラー通信ネットワークを介してデータを送信及び受信するためのセルラー通信トランシーバを含む。幾つかの実施形態において、通信ユニット２３２は、有線ポート及び無線トランシーバを含む。通信ユニット２３２はまた、ＴＣＰ／ＩＰ、ＨＴＴＰ、ＨＴＴＰＳ、及びＳＭＴＰなどを含む標準ネットワークプロトコルによるファイル及び／又はメディアオブジェクトの分配のために、図１のネットワーク１２４への他の従来接続を提供してよい。
【００７７】
図２の実施形態では、サードパーティサーバ１２０は、システムサーバ１２６とデータを交換するよう構成されてよい。そのデータは、ドライバテンプレート２２６及びドライバモデル２２８の一方又は両方を含んでよい。幾つかの実施形態において、システムサーバ１２６は、ドライバテンプレート２２６をサードパーティサーバ１２０へ送信するか、あるいは、別なふうにサードパーティサーバ１２０に利用可能にしてよい。ドライバテンプレート２２６は、デバイスドライバ１５０のための擬似コード又はソースコードを含んでよい。ドライバテンプレート２２６は、デバイスドライバ１５０が、複数のアプライアンスデバイス１０６及び／又は複数の入力デバイス１１８のためのドライバテンプレート２２６に基づき開発され得るように汎用であってよい。ドライバテンプレート２２６は、ＸＭＬファイル、カンマ区切り（ＣＳＶ；Comma-Separated  Values）ファイル、ＪＡＶＡ(登録商標)ファイル、又は他の適切な明確に定義された（well-defined）構造を含んでよい。例えば、ドライバテンプレート２２６は、ＸＭＬスキーマ定義（ＸＳＤ；XML  Schema  Definition）及び／又は１つ以上の変数が省略されたＸＭＬファイルを含んでよい。
【００７８】
サードパーティ（例えば、図１のサードパーティ１２２）は、ドライバテンプレート２２６を受け取って、それからドライバモデル２２８を生成してよい。幾つかの実施形態において、ドライバモデル２２８は、例えば開発者又はベンダーなどのサードパーティによって完成されたドライバテンプレート２２６を含んでよい。
【００７９】
ドライバモデル２２８は、デバイス１０６／１１８のうちの１つに特有であってよい。然るに、ドライバモデル２２８は、ユーザ装置１１２にロードされると、デバイス１０６／１１８とのインタラクションを可能にしてよい。例えば、ドライバモデル２２８は、デバイス１０６／１１８に関連する変数のリスト、変数のうちの１つ以上の１つ以上の変数特性、デバイス１０６／１１８から値を読み出すよう構成される１つ以上のgetサブルーチン、読み出されるデバイスのアドレス、１つ以上のプレースホルダ変数、又はそれらの何らかの組み合わせを含んでよい。
【００８０】
サードパーティサーバ１２０は、ドライバモデル２２８をシステムサーバ１２６へ送るか、あるいは、別なふうにシステムサーバ１２６に利用可能にしてよい（例えば、ウェブサイト上にロードする。）。特に、ドライバモデル２２８は、幾つかの実施形態ではサーバ統合モジュール１０４へ送られてよい。サーバ統合モジュール１０４は、ドライバモデル２２８の構造及びコンテンツを確かめるよう１つ以上の動作を実行してよい。例えば、サーバ統合モジュール１０４は、ドライバモデル２２８がフォーマット準拠であるかどうかを判定してよく、ドライバテンプレート２２６を用いて（例えば、ＸＳＤスキーマを用いて）ドライバモデル２２８のシンタックスをバリデートしてよく、ドライバモデル２２８において悪意あるコードがないことを確認してよく、あるいは、それらの組み合わせを実行してよい。
【００８１】
サーバ統合モジュール１０４がドライバモデル２２８のコンテンツ及び構造を確かめることに応答して、サーバ統合モジュール１０４は検証済みファイル２４２を生成してよい。検証済みファイル２４２は、ドライバモデル２２８を代表してよい。検証済みファイル２４２は、ユーザ装置１１２に動的にロードするよう（特に、デバイスアプリケーションモジュール１３０のドライバ層２０４に組み込まれるよう）且つデバイス１０６／１１８を動的にサポートするようフォーマットされてよい。
【００８２】
幾つかの実施形態において、検証済みファイル２４２を生成することは、ドライバクラスを生成することを含んでよい。ドライバクラスは、ドライバモデル２２８の少なくとも一部分を含んでよい。デバイスがアプライアンスデバイス１０６を含む実施形態では、ドライバクラスは、アプライアンスデバイス１０６によって伝達された応答信号２２０をパースするよう構成されてよい。例えば、ユーザ装置１１２によるgetサブルーチンのうちの１つの実行の結果は、データ要求を含むドリブン信号２２２の生成及び出力を含んでよい。ドリブン信号２２２に応答して、アプライアンスデバイス１０６は応答信号２２０を送ってよい。ドライバクラスは、getサブルーチンにおいて要求されている値について応答信号２２０をパースしてよい。加えて、ドライバクラスは、１つ以上のsetサブルーチンによりコマンドを含むドリブン信号を生成してアプライアンスデバイス１０６へ送信するよう構成されてよい。
【００８３】
次いで、サーバ統合モジュール１０４は、ドライバクラスを含む実行可能ライブラリを合成してよい。システムサーバ１２６は、例えばデジタルシグニチャ又はメッセージ認証コード（ＭＡＣ；Message  Authentication  Code）などのインテグリティチェック値を実行可能ライブラリに加えてよい。ここで使用されるように、インテグリティチェック値を含む実行可能ライブラリは、署名されていると言われる。加えて、ドライバクラスを含み、システムサーバ１２６によって署名された実行可能ライブラリは、署名入りドライバクラス２４０と称されてよい。然るに、幾つかの実施形態において、検証済みファイル２４２は、署名入りドライバクラス２４０を含んでよい。署名入りドライバクラス２４０は、ユーザ装置１１２へ送られてよい。
【００８４】
加えて、又は代替的に、幾つかの実施形態において、検証済みファイル２４２は、署名入りモデル２３８を生成するようサーバ統合モジュール１０４によって（例えば、インテグリティチェック値を付加して）署名され得るドライバモデル２２８を含んでよい。然るに、それら及び他の実施形態では、検証済みファイル２４２は、署名入りモデル２３８を含んでよい。署名入りモデル２３８は、ユーザ装置１１２へ送られてよい。
【００８５】
幾つかの実施形態において、ユーザ装置１１２は、通信モジュール２０８を含んでよい。通信モジュール２０８は、ユーザ統合モジュール１１４と、デバイスアプリケーションモジュール１３０と、ユーザ装置１１２の他のコンポーネント（例えば、２３０Ｂ、２３２Ｂ、及び２３６Ｂ）との間の通信を処理するよう構成されてよい。加えて、通信モジュール２０８は、通信ユニット２３２Ｂを介して、アプライアンスデバイス１０６、入力デバイス１１８、サードパーティサーバ１２０、システムサーバ１２６、又はそれらの組み合わせのうちの１つ以上との間でデータを送信及び受信するよう構成されてよい。幾つかの例では、通信モジュール２０８は、通信ユニット２３２Ｂを介して図１のデバイスシステム１００のコンポーネントとの間でデータを受信及び／又は転送するように、他のモジュール（例えば、１１４及び１３０）と協働してよい。幾つかの実施形態において、通信モジュール２０８は、システムサーバ１２６から検証済みファイル２４２を受信又はアクセスするよう構成されてよい。通信モジュール２０８は、検証済みファイル２４２をユーザ統合モジュール１１４へ送ってよい。
【００８６】
ユーザ統合モジュール１１４は、検証済みファイル２４２を受け取り、検証済みファイル２４２をデバイスアプリケーションモジュール１３０に動的にロードしてよい。具体的に、幾つかの実施形態において、ユーザ統合モジュール１１４は、検証済みファイル２４２をデバイスアプリケーションモジュール１３０のドライバ層２０４に及び／又はユーザインタフェース層２０２（図２中“ＵＩ層２０２”）に動的にロードしてよい。検証済みファイル２４２がドライバ層２０４又はユーザインタフェース層２０２にロードされる場合に、デバイスアプリケーションモジュール１３０は、検証済みファイル２４２及び検証済みファイル２４２によって許可される機能を組み入れてよい。
【００８７】
ドライバ層２０４は、１つ以上のデバイスドライバ１５０を実行するよう構成されてよい。例えば、ドライバ層２０４は、１つ以上のget及び／又はsetサブルーチンを実行するよう構成されてよい。ユーザインタフェース層２０２は、ユーザ１０２及び／又は入力デバイス１１８からユーザ入力２２４を受けるよう構成されてよい。次いで、ユーザインタフェース層２０２は、ユーザ入力２２４をドライバ層２０４へ送ってよい。ユーザ入力２２４に応答して、ドライバ層２０４はデバイスドライバ１５０を実行してよい。
【００８８】
例えば、検証済みファイル２４２がロードされた後、デバイスアプリケーションモジュール１３０は、アプライアンスデバイス１０６の動作を制御してよい。加えて、検証済みファイル２４２がロードされた後、デバイスアプリケーションモジュール１３０は応答信号２２０を受信してよい。応答信号２２０は、アプライアンスデバイス１０６の状態を示してよく、且つ／あるいは、setサブルーチンが受け取られて実施されるかどうかを示してよい。加えて、検証済みファイル２４２がロードされた後、デバイスアプリケーションモジュール１３０は、入力デバイス１１８からユーザ入力２２４を受けてよい。
【００８９】
ユーザ統合モジュール１１４は、検証済みファイル２４２を動的にロードしてよい。例えば、デバイスアプリケーションモジュール１３０が動作している間に、検証済みファイル２４２はドライバ層２０４及び／又はユーザインタフェース層２０２にロードされてよい。然るに、デバイスアプリケーションモジュール１３０の動作は、検証済みファイル２４２のロードの間に中断されなくてよい。
【００９０】
検証済みファイル２４２が署名入りモデル２３８を含む実施形態では、ユーザ統合モジュール１１４は、署名入りモデル２３８を汎用ドライバクラスにロードしてよい。汎用ドライバクラスは、次いで、署名入りモデル２３８をデバイスドライバ１５０として組み入れてよい。汎用ドライバクラスはまた、他のデバイスドライバ１５０を組み入れてよい。他のデバイスドライバ１５０は、他のデバイス１０６／１１８の動作のために構成されてよい。デバイスアプリケーションモジュール１３０は、デバイスドライバ１５０が使用されるたびに、署名入りモデル２３８を動的にパースしてよい。検証済みファイル２４２が署名入りドライバクラス２４０を含む実施形態では、ユーザ統合モジュール１１４は、署名入りドライバクラス２４０をデバイスアプリケーションモジュール１３０に動的にロードしてよい。デバイスアプリケーションモジュール１３０は、次いで、署名入りドライバクラス２４０によって提供される方法及び変数に対して動的呼び出しを行ってよい。
【００９１】
検証済みファイル２４２をユーザ統合モジュール１１４にロードすることは、検証済みファイル２４２に基づきＵＩ要素を生成してよい。ＵＩ要素の幾つかの例は、ユーザ入力を受け取るよう及び／又は情報及びデータを表示するよう構成されるＵＩ要素を含んでよい。ＵＩ要素は、例えば図１の動的ユーザインタフェース１２８などの動的ユーザインタフェースに組み込まれてよい。ユーザ入力２２４は、次いで、ユーザインタフェース層２０２を通じて入力されてよい。幾つかの実施形態において、動的ユーザインタフェースは、ユーザインタフェース（ＵＩ）ページのヒエラルキーを含んでよい。
【００９２】
幾つかの実施形態において、ユーザインタフェース層２０２にロードされているデバイスドライバ１５０は、動的に更新されてよい。デバイスドライバ１５０を更新することは、ユーザ入力２２４がユーザ１０２の意図をより良く反映することを可能にしてよい。幾つかの実施形態において、デバイスドライバ１５０を動的に更新することは、ユーザ１０２への個人化を可能にしてよい。例えば、デバイスドライバ１５０は、例えばアクセント、声の抑揚、及び同様のものなどの個人の特徴を補償するように動的に更新されてよい。入力デバイス１１８のうちの幾つかは、何らかのユーザに依存した変動を含み得る入力を受ける。ユーザ入力２２４は、ユーザに依存した変動によりよく適応するように定期的な更新から然るべく恩恵を受けてよい。
【００９３】
例えば、入力デバイス１１８のうちの１つはマイクロホンを含んでよい。ユーザ１０２の声は変化することがあり、ユーザ毎の声は様々であり得る。然るに、マイクロホンからユーザ入力２２４を受けるデバイスドライバ１５０は、ユーザ１０２の意図をより良く反映するように動的に更新されてよい。
【００９４】
それら及び他の実施形態では、デバイスアプリケーションモジュール１３０は、クラウド／サーバインタフェース２０６を含んでよく、ユーザ統合モジュール１１４は、更新モジュール２５０を含んでよく、サーバ統合モジュール１０４は、大域的更新モジュール２５２を含んでよい。加えて、それら及び他の実施形態では、デバイスドライバ１５０は、大域的デバイスモデルと呼ばれる大域的に定義されたバージョンと、局所的デバイスモデルと呼ばれる局所的に定義されたバージョンとを含んでよい。
【００９５】
大域的デバイスモデルは、システムサーバ１２６に含まれ得る遠隔パターンデータベース２５４において記憶されてよい。大域的デバイスモデルは、システム１００と同様の他のシステムにおいて他のユーザによって同時に使用されてよく、新しいユーザのための最初の局所的デバイスモデルあってよい。大域的デバイスモデルは、ユーザ装置１１２の更新モジュール２５０によって受け取られてよい。更新モジュール２５０は、大域的デバイスモデルを局所的デバイスモデルとしてよく、局所的デバイスモデルはドライバ層２０４にロードされてよい。
【００９６】
大域的デバイスモデルが局所的デバイスモデルとされた後、ユーザ入力２２４はユーザ装置１１２で受け取られてよい。ユーザ入力２２４は、動的に更新されるデバイスドライバ１５０に関連する入力デバイス１１８のうちの１つから受け取られてよい。更新モジュール２５０は、次いで、ユーザ入力２２４を処理してよい。処理されたユーザ入力及び採用された局所的デバイスモデルに基づき、更新モジュール２５０はコマンドを検出してよい。加えて、更新モジュール２５０は、ユーザ入力２２４におけるエラーが閾エラー値よりも小さいかどうかを判定してよい。
【００９７】
エラーが閾エラー値よりも大きいことに応答して、更新モジュール２５０はエラーメッセージを送ってよい。エラーが閾エラー値よりも小さいことに応答して、更新モジュール２５０は、ユーザ入力２２４を反映するよう且つエラー率を最小限とするよう局所的デバイスモデルを更新してよい。エラー率は、更新モジュール２５０がコマンドを識別することができないほどにユーザ入力２２４のエラーが十分に大きいことを示してよい。更新モジュール２５０は、次いで、アプライアンスデバイス１０６への伝達のために、ユーザ入力２２４をデバイスアプリケーションモジュール１３０へ送信してよい。更新モジュール２５０は、更新された局所的デバイスモデルが大域的デバイスモデルにおいて反映されているかどうかを判定してよい。更新された局所的デバイスモデルが大域的デバイスモデルにおいて反映されていることに応答して、更新モジュール２５０は、更新された局所的デバイスモデルを局所的デバイスモデルとして使用してよい。更新された局所的デバイスモデルが大域的デバイスモデルにおいて反映されていないことに応答して、更新モジュール２５０は、更新された局所的デバイスモデルを大域的更新モジュール２５２へ送ってよい。大域的更新モジュール２５２は、更新された局所的デバイスモデルをユーザ装置１１２から受け取ってよい。大域的更新モジュール２５２は、更新された局所的デバイスモデルに少なくとも部分的に基づき、入力デバイス１１８で受け取られたマルチモーダル入力のエラー率を最小限とするように、大域的デバイスモデルを更新してよい。大域的更新モジュール２５２は、次いで、更新された局所的デバイスモデルに取って代わるように、更新された大域的デバイスモデルをユーザ装置１１２へ動的にダウンロードしてよい。
【００９８】
上述されたように、大域的デバイスモデルは、他のシステムにおいて他のユーザによって同様に同時に更新されてよい。然るに、大域的デバイスモデルは、複数のユーザからの入力を反映し、そのような入力を、大域的デバイスモデルを用いるシステム間で共有してよい。
【００９９】
図３Ａ及び図３Ｂは、図１のデバイスシステム１００において実施され得るドライバモデル３００の一例を表す。図３Ａを参照して、ドライバモデル３００の第１部分は、ドライバタイプ３０２を含んでよい。例えば、ドライバモデル３００におけるドライバタイプ３０２は“HVAC”である。ドライバモデル３００は、ドライバ名３０４及びドライババージョン３０６を更に含んでよい。ドライバ名３０４はベンダー又はブランドを示してよい。例えば、ドライバモデル３００では、ドライバ名３０４は“Vendor  X’s  HVAC  system（ベンダーＸのＨＶＡＣシステム）”である。ドライババージョン３０６は、特定のデバイスで実行されるアプリケーションのバージョンを含んでよい。例えば、ドライバモデル３００では、ドライババージョン３０６は“1.0”である。加えて、ドライバモデル３００は、変数（variable）３１０Ａ〜３１０Ｆのリスト３０８を含んでよい。リスト３０８は、変数３１０Ａ〜３１０Ｆの１つ以上の特性３１２Ａ〜３１２Ｊを更に含んでよい。例えば、第１変数３１０Ａは、“thermostat  name”を有するサーモスタットを含む。第１変数３１０Ａは、それに関連する第１特性３１２Ａを含む。第１特性３１２Ａは、第１変数３１０Ａが、特性“string”によって示される文字列型の変数であることを特定する。この例に含まれていない幾つかの更なる特性は、アクセス制御、許諾、タイプ、名称、フォーマット、構造、及び同様ものを含んでよい。
【０１００】
図３Ｂは、ドライバモデル３００の第２部分を含む。ドライバモデル３００は、setサブルーチン３１４を含んでよい。setサブルーチンは、図１及び図２のデバイス１０６／１１８へ値を書き込むよう構成されてよい。値をデバイスに書き込むことは、デバイスの動作を制御してよい。ドライバモデル３００はgetサブルーチン３１６を更に含んでよい。getサブルーチン３１６は、デバイスに値をクエリするよう構成されてよい。getサブルーチン３１６は更に、値をユーザ装置へ送ってよい。幾つかの実施形態において、複数のgetサブルーチン及び／又は複数のsetサブルーチンがドライバモデル３００に含まれてよい。それら及び他の実施形態では、getサブルーチンの夫々は、デバイスから値をクエリするよう構成されてよく、且つ／あるいは、setサブルーチンの夫々は、値をデバイスへ書き込むよう構成されてよい。
【０１０１】
getサブルーチン３１６及びsetサブルーチン３１４は、１つ以上のプレースホルダ変数３１８Ａ〜３１８Ｆ（概して、プレースホルダ変数３１８（複数を含む。））を含んでよい。プレースホルダ変数３１８は、getサブルーチン３１６及び／又はsetサブルーチン３１４が実行される場合に値により置換されてよい。setサブルーチン３１４及びgetサブルーチン３１６を実行することの幾つかの詳細は、ここでは別の場所で与えられる。
【０１０２】
図３Ａ及び図３Ｂにおけるドライバモデル３００の部分は、下線を付されている。幾つかの実施形態において、下線を付されていないドライバモデル３００の部分は、ドライバテンプレートに含まれてよい。加えて、それら及び他の実施形態では、下線を付された部分は、例えばベンダーなどのサードパーティがドライバテンプレートに付加することができるドライバモデル３００の部分に相当する。
【０１０３】
幾つかの実施形態において、サードパーティは、変数３１０をドライバモデル３００に更に追加及び／又は定義してよい。例えば、サードパーティは、第４テンプレート３１０Ｄを追加してよい。そうすることにおいて、サードパーティは、例えば<variable>…</variable>などの、第４テンプレート３１０Ｄに関するドライバモデル３００のある部分を追加してよい。
【０１０４】
図４は、図１乃至２のデバイスアプリケーションモジュール１３０のようなデバイスアプリケーションモジュールへの、図３Ａ及び図３Ｂのドライバモデル３００のようなドライバモデルの統合において含まれ得る、例となる一連のステップ４００を表す。図２及び図４を併せて参照して、ドライバモデル２２８はＸＭＬにおいてフォーマットされてよく、これは、図４ではブロック４０２によって表される。サーバ統合モジュール１０４は、ＸＭＬフォーマットのドライバモデル４０２に基づき、ＪＡＶＡドライバクラスを生成してよい。ＪＡＶＡクラスは、図４ではブロック４０４によって表される。ドライバクラスは、幾つかの実施形態ではＣ＋＋又はＣにおいて、あるいは、何らかの他の適切なプログラミング言語において、代替的に、又は追加的に、フォーマットされてよい。ＸＭＬフォーマットのドライバモデル４０２からのＪＡＶＡクラス４０４の生成は、動的なライブラリ合成の一例であってよい。
【０１０５】
ＪＡＶＡクラス４０４は、実行可能ライブラリへとコンパイルされてよい。実行可能ライブラリは、例えば、クラスセレクタ（.class）において、又はオブジェクトファイル（.o）として、フォーマットされてよい。実行可能ライブラリは、図４では項目４０６によって表される。実行可能ライブラリ４０６は、特定のプラットフォームのために準備されてよい。特定のプラットフォームのために実行可能ライブラリ４０６を準備するプロセスにおいて、実行可能ライブラリは、例えば、Dalvik  Executable  Format（.dex）、動的リンクライブラリ（.dll）、又は共有ライブラリ（.so）においてフォーマットされてよい。特定のプラットフォームために準備された実行可能ライブラリは、図４では項目４０８（準備されたライブラリ４０８）によって表される。
【０１０６】
準備されたライブラリ４０８は、クラスローダにより動的にロードされてよい。準備されたライブラリ４０８がクラスローダによりロードされる場合に、ランタイムコード４１０は、ユーザインタフェースに合成され、ドライバとしてデバイスアプリケーションモジュール１３０のデバイスドライバに取り込まれてよい。これは、図４では項目４１２によって表される。
【０１０７】
図５は、ドライバモデル５０４の一部分に基づき得る複数のＵＩ要素５０２Ａ〜５０２Ｃ（ＵＩ要素５０２（複数を含む。））を含む、例となるＵＩページ５００を表す。ドライバモデル５０４は、図３Ａのドライバモデル３００の一部分と同様である。一般に、ＵＩ要素５０２は、ドライバモデル５０４及び／又は検証済みファイル（例えば、図２の検証済みファイル２４２）に基づき自動的に生成されてよい。ＵＩ要素５０２の特性はまた、ドライバモデル５０４及び／又は検証済みファイルにおける特性５１２Ａ〜５１２Ｅに基づいてよい。
【０１０８】
幾つかの実施形態において、幾つかのＵＩ要素５０２は、特定のタイプの各ＵＩページ５００においてデフォルトにより含まれてよい。例えば、ＨＶＡＣに関する全てのＵＩページ５００は、温度ＵＩ要素を含んでよい。それら及び他の実施形態では、デフォルトのＵＩ要素は、ドライバモデル５０４及び／又は検証済みファイルに基づき補完又は変更されてよい。
【０１０９】
図５のドライバモデル５０４では、ドライバタイプ５０６は、ドライバモデル５０４がＨＶＡＣシステムのためのものであることを示してよい。然るに、ＵＩ要素５０２のうちの１つ以上は、デフォルトのＵＩ要素であってよい。例えば、第１ＵＩ要素５０２Ａは、デフォルトのＨＶＡＣのＵＩ要素を含んでよい。
【０１１０】
加えて、変数５１０Ａ〜５１０Ｃ及び／又は変数５１０Ａ〜５１０Ｃの特性５１２Ａ〜５１２Ｅのうちの１つ以上は、ＵＩ要素５０２Ｂ及び５０２Ｃのうちの１つの基礎を成してよい。例えば、第３変数５１０Ｃは、モードＵＩ要素５０２Ｂの基礎を成してよい。モードＵＩ要素５０２Ｂは、オン／オフＵＩ要素を含んでよい。オン／オフＵＩ要素は、ドライバモデル５０４又はそれに基づくデバイスドライバによって駆動されるアプライアンスデバイスのモードを決定してよい。モードＵＩ要素５０２Ｂの１つ以上の特性は、特性５１Ｃ〜５１２Ｅに基づいてよい。同様に、第２変数５１０Ｂは、冷却設定点ＵＩ要素５０２Ｃの基礎を成してよい。冷却設定点ＵＩ要素５０２Ｃは、サーモスタットが設定される温度に対応する数字をユーザが入力することを可能にしてよい。冷却設定点ＵＩ要素５０２Ｃの特性は、第２特性５１２Ｂに基づいてよい。
【０１１１】
図６は、デバイスアプリケーションモジュール１３０のようなデバイスアプリケーションモジュールに組み込まれるドライバモデル又は検証済みファイルの一部分に基づきアプライアンスデバイスで値を設定する（例えば、書き込む）ことの一例を表す。幾つかの実施形態において、アプライアンスデバイスにおいて値を設定するよう、ポストメッセージが、setサブルーチンに含まれるアドレスフィールドへ送信されてよい。アドレスフィールドは、サードパーティによってドライバテンプレート内に入力されてよい。プレースホルダ変数は、ＵＩページにおいて入力される値によって置換されてよい。プレースホルダ変数は、特定の文字又は文字の列によって示されてよい。
【０１１２】
幾つかの実施形態において、書き込み応答は、setサブルーチンの受信を示すデバイスから受け取られてよい。図２において、書き込み応答は、応答信号２２０の一例であってよい。書き込み応答がエラーコードを含むかどうかが判定されてよい。書き込み応答がエラーコードを含むことに応答して、書き込み失敗メッセージが送られてよい。書き込み応答がエラーコードを含まないことに応答して、書き込み完了メッセージが送られてよい。
【０１１３】
図６において、図５のＵＩページ５００は、図３Ｂのsetサブルーチンの一部分とともに表されている。加えて、ポストメッセージ６００が図６には表されている。ポストメッセージ６００はＨＴＴＰ要求を含んでよい。setサブルーチン３１４はＸＭＬで記述されてよい。幾つかの実施形態において、他のソフトウェア言語及び通信プロトコルが実施される。
【０１１４】
図６の例は、例となるＨＶＡＣシステムの動作条件を設定することを表す。同様のプロセスは、他のタイプのシステムにおいて実施されてよい。ポストメッセージ６００は、setサブルーチン３１４のＵＲＩフィールド６０４へ送信されるＨＴＴＰ要求を含む。加えて、ポストメッセージ６００は、setサブルーチン３１４のプレースホルダ変数３１８Ａ〜３１８Ｄに取って代わる、ＵＩページ５００から入力された値を含んでよい。プレースホルダ変数３１８Ａ〜３１８Ｄは“＄”によって示されてよい。
【０１１５】
例えば、第１プレースホルダ変数３１８Ａはモード（mode）を含む。これは、モードＵＩ要素５０２Ｂに対応してよい。モードＵＩ要素５０２Ｂは“オン（on）”である。これは、ポストメッセージ６００における６０８Ａでの“1”による“$mode”の置換に対応してよい。加えて、“オン”は、６０８Ｂでの“1”による“$fan”の置換に対応してよい。同様に、他のプレースホルダ変数３１８Ｃ及び３１８Ｄは、ＵＩページ５００からの値によって置換されてよい。具体的に、冷却設定点ＵＩ要素５０２Ｃは第３プレースホルダ変数３１８Ｃに対応してよく、加熱設定点ＵＩ要素５０２Ｆは第４プレースホルダ変数３１８Ｄに対応してよい。冷却設定点ＵＩ要素５０２Ｃ及び加熱設定点ＵＩ要素５０２Ｆに入力された値は、６０８Ｃ及び６０８Ｄで図６において表されているように、ポストメッセージ６００では、第３プレースホルダ変数３１８Ｃ及び第４プレースホルダ変数３１８Ｄに取って代わってよい。ポストメッセージ６００は、アプライアンスデバイスへ送られてよい。
【０１１６】
図７は、例えばデバイスアプリケーションモジュール１３０のようなデバイスアプリケーションモジュールに組み込まれるドライバモデル又は検証済みファイルの一部分に基づきアプライアンスデバイスから値を得る（例えば、読み出す）ことの一例を表す。幾つかの実施形態において、アプライアンスデバイスで値を得るよう、要求メッセージが、getサブルーチンに含まれるアドレスフィールドへ送信されてよい。アドレスフィールドは、サードパーティによってドライバテンプレート内に入力されてよい。アプライアンスデバイスから伝達された応答は、プレースホルダ変数に取って代わる値を含んでよい。応答はパースされてよく、値は応答から読み出されて、ＵＩページのＵＩ要素に入力されてよい。プレースホルダ変数は、特定の文字又は文字の例によって示されてよい。
【０１１７】
幾つかの実施形態において、応答をパースすることは、１つ以上のステップを含んでよい。例えば、応答のフォーマットが期待されるフォーマットであるかどうかと、応答がフォーマット準拠であるかどうかとが判定されてよい。ホワイトスペース及び新しい行は除去されてよく、特殊文字は標準符号化により置換されてよく、変数名は正規表現により置換されてよい。正規表現によれば、値はボディデータと照合されてよい。幾つかの例では、値はグループを用いて抽出されてよい。グループは、定義されたルールに従うＸＭＬグループを含んでよい。例えば、値が、１０進数として与えられた温度を含む実施形態では、グループは（[0-9]*.[0-9]+）と定義されてよい。グループは、あらゆる数の精度をもって、あらゆる１０進数を照合してよい（例えば、それは、０又は６を除く（１０進数によらない）、０．０００１又は．００００１に対応する。）。
【０１１８】
図７において、図５のＵＩページ５００は、図３Ｂのgetサブルーチン３１６の一部分とともに表されている。加えて、getポストメッセージ７００及び応答７０２が図７には表されている。
【０１１９】
getポストメッセージ７００は、１つ以上の変数の１つ以上の値にアクセスするようデバイス（例えば、デバイス１０６）へ送られるメッセージを含んでよい。getポストメッセージ７００はＨＴＴＰ要求を含んでよい。
【０１２０】
getサブルーチン３１６はＸＭＬにおいて記述されてよい。幾つかの実施形態において、他のソフトウェア言語及び通信プロトコルが実施される。プレースホルダ変数３１８Ｅ及び３１８Ｆは“＄”によって示されてよい。
【０１２１】
図７における例は、例となるＨＶＡＣシステムの検知された条件を得ることを表す。同様のプロセスは、他のタイプのシステムにおいて実施されてよい。getポストメッセージ７００は、setサブルーチン３１４のＵＲＩフィールド７０４へ送信されるＨＴＴＰ要求を含む。アプライアンスデバイスは応答７０２を送ってよい。応答７０２は、getサブルーチン３１６の部分７０６のプレースホルダ変数３１８Ｅ及び３１８Ｆが応答７０２において値７０８Ａ及び７０８Ｂによって置換されていることを除いて、getサブルーチン３１６の部分７０６と同様である。getサブルーチン３１６によれば、値７０８Ａ及び７０８Ｂは読み出され、ＵＩページ５００の対応するＵＩ要素５０２Ｘ及び５０２Ｙに組み込まれてよい。
【０１２２】
例えば、第５プレースホルダ変数３１８Ｅは、センサ名を示してよく、第６プレースホルダ変数３１８Ｆは、センサによって測定される条件を示してよい。これに応答して、第１の値７０８Ａは、センサのセンサ名（例えば、“Thermostat_1”）を示してよく、第２の値７０８Ｂは、センサによって測定される条件を示してよい。プロセッサ（例えば、図２のプロセッサ２３０又はデバイスアプリケーションモジュール１３０）は、プレースホルダ変数３１８Ｅ及び３１８Ｆが値７０８Ａ及び７０８Ｂによって置換されていることを認識する。
【０１２３】
値７０８Ａ及び７０８Ｂは、応答７０２から読み出されてよく、ＵＩページ５００に入力されてよい。例えば、第１の値７０８Ａはセンサを示し、これは、第１のサーモスタットＵＩ要素５０２Ｘに対応する。同様に、第２の値７０８Ｂは、現在温度ＵＩ要素５０２Ｙに対応してよい。値７０８Ａ及び７０８Ｂは、ＵＩ要素５０２Ｘ及び５０２Ｙを変更又は更新するために使用されてよい。
【０１２４】
図８Ａ〜８Ｃは、図１の動的ユーザインタフェース１２８のような動的ユーザインタフェースに含まれ得る、例となるＵＩページ８００Ａ〜８００Ｃ（概して、ＵＩページ８００（複数を含む。））を表す。ＵＩページ８００は、図８Ａ〜８Ｃに関して説明されるように、ヒエラルキーにおいて配置されてよい。図８Ａ〜８Ｃを参照して記載される３つのＵＩページ８００が存在する。幾つかの実施形態において、動的ユーザインタフェースは、３つよりも多い又は３つよりも少ないＵＩページを含んでよい。更に、新しいＵＩページ８００は、新しいデバイス及び／又はデバイスドライバが加えられることに応答して追加されてよい。加えて、ＵＩページ８００は、デバイス及び／又はデバイスドライバの除去に基づき削除されてよい。
【０１２５】
ＵＩページ８００は、スマートフォンで表示されるものとして図８Ａ〜８Ｃに表されている。他の実施形態では、ＵＩページ８００は、ここで別な場所に記載されるように、他のコンピュータデバイス又はユーザ装置（例えば、１１２）で表示されてよい。
【０１２６】
図８Ａは、第１レベルのＵＩページ８００Ａの一例である。第１レベルのＵＩページ８００Ａは、デバイスアプリケーションモジュール（例えば、デバイスアプリケーションモジュール１３０）のタイプに対応してよい。第１レベルのＵＩページ８００Ａは、種々のタイプのデバイスアプリケーションモジュールを示す複数のＵＩ要素８０２を含んでよい。具体的に、第１レベルのＵＩページ８００Ａにおいて、ＵＩ要素８０２は、ＨＶＡＣアプリケーションモジュール、照明アプリケーションモジュール、スマートアプライアンスモジュール、エネルギ節約アプリケーションモジュール、及びＤＲアプリケーションモジュールを含む。加えて、第１レベルのＵＩページ８００Ａは、サマリＵＩ要素８０４を含んでよい。サマリＵＩ要素８０４は、エネルギ利用サマリのＵＩ要素を含む。また更には、第１レベルのＵＩページ８００Ａは、設定ＵＩ要素８０６を含んでよい。設定ＵＩ要素８０６は、デバイスアプリケーションモジュール、ユーザ統合モジュール、サーバ統合モジュール、又は他のシステム若しくはモジュールの１つ以上の設定の操作を可能にするＵＩページへユーザをナビゲートしてよい。
【０１２７】
図８Ｂは、第２レベルのＵＩページ８００Ｂを表す。第２レベルのＵＩページ８００Ｂは、第１レベルのＵＩページ８００Ａよりも狭く及び／又は具体的であってよい。第２レベルのＵＩページ８００Ｂは、特定のシステムに対応してよい。例えば、第２レベルのＵＩページ８００Ｂは、第１レベルのＵＩページ８００ＡにおけるＨＶＡＣ  ＵＩ要素８０２の選択に応答して表示されてよい。
【０１２８】
第２レベルのＵＩページ８００Ｂは、場所又は区域によってグループ化され得る特定の組のデバイス１０６／１１８を示すＵＩ要素８０８Ａ及び８０８Ｂを含んでよい。例えば、図８Ｂの第２レベルのＵＩページ８００Ｂにおいて、区域１のＵＩ要素８０８Ａは、何らかの情報を提供して、区域１にあるアプライアンスデバイスへの何らかのデータの入力を可能にしてよい。同様に、区域２のＵＩ要素８０８Ｂは、何らかの情報を提供して、区域２にあるアプライアンスデバイスへの何らかのデータの入力を可能にしてよい。加えて、区域１のＵＩ要素８０８Ａ又は区域２のＵＩ要素８０８Ｂの選択は、他のＵＩページへユーザをナビゲートしてよい。
【０１２９】
加えて、第２レベルのＵＩページ８００Ｂは、追加ＵＩ要素８１０を含んでよい。追加ＵＩ要素８１０は、区域及び／又は追加される区域に対応するＵＩページの追加を可能にしてよい。加えて、第２レベルのＵＩページ８００Ｂは、サマリＵＩ要素８１２を含んでよい。図８ＢにおけるサマリＵＩ要素８１２は、ＨＶＡＣシステムによるエネルギ利用に制限されるエネルギ利用サマリのＵＩ要素を含む。加えて、第２レベルのＵＩページ８００Ｂは、ホームＵＩ要素８１４を含んでよい。図８ＢにおけるホームＵＩ要素８１４は、第１レベルのＵＩページ８００Ａへユーザをナビゲートしてよい。
【０１３０】
図８Ｃは、第３レベルのＵＩページ８００Ｃを表す。第３レベルのＵＩページ８００Ｃは、ここで別な場所で論じられているＵＩページ５００と同様であってよい。第３レベルのＵＩページ８００Ｃは、第１レベルのＵＩページ８００Ａ及び第２レベルのＵＩページ８００Ｂよりも狭く及び／又は具体的であってよい。第３レベルのＵＩページ８００Ｃは、特定のシステムの部分であり得る特定の区域に対応してよい。例えば、第３レベルのＵＩページ８００Ｃは、第２レベルのＵＩページ８００Ｂにおける区域１のＵＩ要素８０８Ａの選択に応答して表示されてよい。
【０１３１】
第３レベルのＵＩページ８００Ｃは、ＵＩ要素８１６Ａ〜８１６Ｅを含んでよい。ＵＩ要素８１６Ａ〜８１６Ｅの夫々は、１つ以上のアプライアンスデバイスに対応してよい。例えば、ＵＩ要素８１６Ａ〜８１６Ｅは、１つ以上のアプライアンスデバイスによって測定された条件を表示し、且つ／あるいは、１つ以上のアプライアンスデバイスの状態に作用し得るユーザ入力を可能にしてよい。
【０１３２】
加えて、第３レベルのＵＩページ８００Ｃは、エネルギＵＩ要素８１８を含んでよい。図８ＣにおけるエネルギＵＩ要素８１８は、区域１のエネルギ利用を含む。加えて、第３レベルのＵＩページ８００Ｃは、ホームＵＩ要素８１４を含んでよい。
【０１３３】
図９は、ここで記載される少なくとも１つの実施形態に従って配置される、異種デバイスドライバ統合の例となる方法９００のフロー図である。方法９００は、幾つかの実施形態では、図１及び図２を参照して記載されたシステムサーバ１２６によってプログラムにより実行されてよい。システムサーバ１２６は、方法９００を実行するか又はその実行を制御するようプロセッサによって実行可能であるプログラミングコード又は命令を記憶しているか又は符号化されている１つ以上の非一時的なコンピュータ可読媒体（例えば、図１のメモリ２３６）を含むか、あるいは、それに通信上結合されてよい。加えて、又は代替的に、システムサーバ１２６は、方法９００の実行を引き起こすか又は制御するようにコンピュータ命令を実行するよう構成される１つ以上のプロセッサ（例えば、図２のプロセッサ２３０）を含んでよい。たとえ別個のブロックとして表されているとしても、様々なブロックは、望まれる実施に応じて、更なるブロックに分割されても、より少ないブロックにまとめられても、あるいは、削除されてもよい。
【０１３４】
方法９００はブロック９０２から開始してよい。ブロック９０２で、ドライバモデルは受け取られてよい。ドライバモデルは、あるデバイスのために構成されてよく、サードパーティから受け取られてよい。ドライバモデルは、そのデバイスに関連する変数のリストと、変数の１つ以上の特性とを含んでよい。
【０１３５】
ブロック９０４で、ドライバモデルはフォーマット準拠であるかどうかが判定されてよい。ドライバモデルがフォーマット準拠でないこと（ブロック９０４における“ＮＯ”）に応答して、方法９００はブロック９１４へ進んでよい。ドライバモデルがフォーマット準拠であること（ブロック９０４における“ＹＥＳ”）に応答して、方法９００はブロック９０６へ進んでよい。
【０１３６】
ブロック９０６で、ドライバモデルのシンタックスは、ドライバテンプレートを用いてバリデートされてよい。ドライバモデルが有効でないこと（ブロック９０６における“ＮＯ”）に応答して、方法９００はブロック９１４へ進んでよい。ドライバモデルが有効であること（ブロック９０６における“ＹＥＳ”）に応答して、方法９００はブロック９０８へ進んでよい。
【０１３７】
ブロック９０８で、検証済みファイルは生成されてよい。検証済みファイルは、ドライバモデルを代表してよい。検証済みファイルは、ユーザ装置で動的にロードするよう且つデバイスを動的にサポートするようフォーマットされてよい。
【０１３８】
幾つかの実施形態において、デバイスはアプライアンスデバイスを含む。加えて、ドライバモデルは、アプライアンスデバイスから値を読み出すよう構成されるgetサブルーチンと、値をアプライアンスデバイスに書き込むよう構成されるsetサブルーチンとを更に含んでよい。それら及び他の実施形態では、検証済みファイルを生成することは、ドライバクラスを生成することを含んでよい。ドライバクラスは、ドライバモデルのコンテンツの少なくとも一部分を含んでよい。ドライバクラスは、getサブルーチンの実行に応答してアプライアンスデバイスによって伝達された入来する応答をパースするよう且つsetサブルーチンによりアプライアンスデバイスへデータ要求を送信するよう構成されてよい。検証済みファイルを生成することは、ドライバクラスを含む実行可能ライブラリを合成することを更に含んでよい。例えば、ドライバモデルはＸＭＬにおいてフォーマットされてよい。その場合に、ドライバクラスは、ドライバモデルのＸＭＬコンテンツから生成されたＪＡＶＡクラスを含んでよい。加えて、実行可能ライブラリは、.dex、.dll、又は.soのうちの１つにおいてフォーマットされてよい。
【０１３９】
幾つかの実施形態において、検証済みファイルは、汎用ドライバクラスにおいて統合されることが可能であるようフォーマットされたドライバモデルの少なくとも一部分を含んでよい。加えて、それら及び他の実施形態では、汎用ドライバクラスは、getサブルーチンの実行に応答してアプライアンスデバイスによって伝達された入来する応答をパースするよう且つsetサブルーチンによりアプライアンスデバイスへデータ要求を送信するよう構成されてよい。
【０１４０】
幾つかの実施形態において、デバイスは入力デバイス（例えば、図１の入力デバイス１１８）であってよい。それら及び他の実施形態では、検証済みファイルは、マルチモーダル入力をパースするよう構成される汎用ドライバクラスにおいて統合されることが可能であるようフォーマットされたドライバモデルを含んでよい。代替的に、ドライバモデルは、入来する入力をパースするよう構成され且つドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを含む合成された実行可能ライブラリを含んでよい。ドライバクラスはまた、ユーザに適応するよう構成されてよい。例えば、ドライバクラスは、ユーザに個人化されるよう構成されてよい。
【０１４１】
ブロック９１０で、検証済みファイルはユーザ装置へ送られてよい。９１２で、インテグリティチェック値が検証済みファイルに加えられてよい。ブロック９１４で、エラーメッセージが送られてよい。例えば、エラーメッセージは、サードパーティへ送られてよい。
【０１４２】
当業者には明らかであるように、ここで開示されているこのような及び他のプロシージャ及び方法に関して、プロセス及び方法において実行される機能は別の順序で実施されてよい。更に、説明されているステップ及び動作は、例として与えられているにすぎず、ステップ及び動作のうちの幾つかは、開示されている実施形態から逸脱することなしに、任意であっても、より少ないステップ及び動作にまとめられても、あるいは、更なるステップ及び動作に拡張されてもよい。例えば、幾つかの実施形態において、方法９００は、ドライバモデルにおいて悪意あるコードがないことを確認することを含んでよい。
【０１４３】
図１０は、ここで記載される少なくとも１つの実施形態に従って配置される、異種デバイスドライバ統合の方法の他の例１０００のフロー図である。方法１０００は、幾つかの実施形態では、図１及び図２を参照して記載されたユーザ装置１１２によってプログラムにより実行されてよい。ユーザ装置１１２は、方法１０００を実行するか又はその実行を制御するようプロセッサによって実行可能であるプログラミングコード又は命令を記憶しているか又は符号化されている１つ以上の非一時的なコンピュータ可読媒体（例えば、図１のメモリ２３６）を含むか、あるいは、それに通信上結合されてよい。加えて、又は代替的に、ユーザ装置１１２は、方法１０００の実行を引き起こすか又は制御するようにコンピュータ命令を実行するよう構成される１つ以上のプロセッサ（例えば、図２のプロセッサ２３０）を含んでよい。たとえ別個のブロックとして表されているとしても、様々なブロックは、望まれる実施に応じて、更なるブロックに分割されても、より少ないブロックにまとめられても、あるいは、削除されてもよい。
【０１４４】
方法１０００はブロック１００２から開始してよい。ブロック１００２で、検証済みファイルは受け取られてよい。検証済みファイルはドライバモデルを代表してよい。ドライバモデルは、デバイスに関連する変数のリストと、変数のうちの１つ以上の１つ以上の変数特性と、デバイスから値を読み出すよう構成されるgetサブルーチンと、デバイスアドレスと、１つ以上のプレースホルダ変数とを含んでよい。
【０１４５】
幾つかの実施形態において、検証済みファイルは、ドライバクラスが合成されている実行可能ライブラリを含んでよい。ドライバクラスは、ドライバモデルのコンテンツを更に含んでよい。ドライバクラスは、getサブルーチンの実行に応答してデバイスによって伝達された入来する応答をパースするよう構成されてよい。
【０１４６】
幾つかの実施形態において、検証済みファイルはドライバモデルを含んでよい。ドライバモデルは、汎用ドライバクラスにおいて統合されることが可能であってよい。汎用ドライバクラスは、getサブルーチンの実行に応答してデバイスによって伝達された受信される応答をパースするよう構成されてよい。
【０１４７】
ブロック１００４で、検証済みファイルにおけるインテグリティチェック値が確認されてよい。ブロック１００６で、検証済みファイルの少なくともある部分は、動作中にドライバアプリケーションモジュールにロードされてよい。ブロック１００８で、メッセージが送信されてよい。メッセージは、第１プレースホルダ変数によってgetサブルーチンにおいて表される、変数のうちの第１変数の値を要求するデバイスアドレスへ送信されてよい。ブロック１０１０で、受信された応答は、受信された応答のパターンがgetサブルーチンの部分のパターンと一致するかどうかを判定するようパースされてよい。
【０１４８】
パターンが一致すること（ブロック１０１０における“ＹＥＳ”）に応答して、方法１０００はブロック１０１２へ進んでよい。パターンが一致しないこと（ブロック１０１０における“ＮＯ”）に応答して、方法１０００はブロック１０１６へ進んでよい。ブロック１０１２で、値は、受信された応答から読み出されてよい。値は、getサブルーチンの第１プレースホルダ変数によってそれまで保持されていた位置で、受信された応答において見つけられてよい。ブロック１０１４で、動的ユーザインタフェース内に含まれる情報は、その値により更新されてよい。ブロック１０１６で、エラーメッセージが送られてよい。
【０１４９】
加えて、幾つかの実施形態において、方法１０００はＵＩ要素を生成することを含んでよい。ＵＩ要素は、動的ユーザインタフェースに含まれてよく、検証済みファイルに少なくとも部分的に基づいてよい。幾つかの実施形態において、ＵＩ要素を生成することは、ドライバタイプ、変数、及び変数の特性のうちの１つ以上に基づきＵＩ要素を生成することを含んでよい。
【０１５０】
図１１は、ここで記載される少なくとも１つの実施形態に従って配置される、異種デバイスドライバ統合の方法の他の例１１００のフロー図である。方法１１００は、幾つかの実施形態では、図１及び図２を参照して記載されたユーザ装置１１２によってプログラムにより実行されてよい。ユーザ装置１１２は、方法１１００を実行するか又はその実行を制御するようプロセッサによって実行可能であるプログラミングコード又は命令を記憶しているか又は符号化されている１つ以上の非一時的なコンピュータ可読媒体（例えば、図１のメモリ２３６）を含むか、あるいは、それに通信上結合されてよい。加えて、又は代替的に、ユーザ装置１１２は、方法１１００の実行を引き起こすか又は制御するようにコンピュータ命令を実行するよう構成される１つ以上のプロセッサ（例えば、図２のプロセッサ２３０）を含んでよい。たとえ別個のブロックとして表されているとしても、様々なブロックは、望まれる実施に応じて、更なるブロックに分割されても、より少ないブロックにまとめられても、あるいは、削除されてもよい。
【０１５１】
方法１１００はブロック１１０２から開始してよい。ブロック１１０２で、検証済みファイルは受け取られてよい。検証済みファイルはドライバモデルを代表してよい。ドライバモデルは、デバイスに関連する変数のリストと、変数のうちの１つ以上の１つ以上の変数特性と、デバイスに値を書き込むよう構成されるsetサブルーチンとを含んでよく、プレースホルダ変数及び書き込みデバイスアドレスを含んでよい。
【０１５２】
幾つかの実施形態において、検証済みファイルは、ドライバクラスが合成された実行可能ライブラリを含んでよい。ドライバクラスは、ドライバモデルのコンテンツを更に含んでよい。ドライバクラスは、setサブルーチンを用いて値要求を送信するよう構成されてよい。
【０１５３】
幾つかの実施形態において、検証済みファイルは、ドライバモデルを含んでよい。ドライバモデルは、汎用ドライバクラスにおいて統合されることが可能であってよい。汎用ドライバクラスは、setサブルーチンを用いてデータ要求を送信するよう構成されてよい。
【０１５４】
ブロック１１０４で、検証済みファイルにおけるインテグリティチェック値が確認されてよい。ブロック１１０６で、検証済みファイルの少なくともある部分は、動作中にドライバアプリケーションモジュールにロードされてよい。ブロック１１０８で、動的ユーザインタフェースでの入力が受けられてよく、デバイスに関する値を伝達することができる。ブロック１１１０で、プレースホルダ変数は、その値によりsetサブルーチンにおいて置換されてよい。ブロック１１１２で、setサブルーチンは、プレースホルダ変数が値によって置換された状態で、書き込みデバイスアドレスへ送信されてよい。
【０１５５】
ブロック１１１４で、書き込み応答は、setサブルーチンの受け取りを示すようデバイスから受信されてよい。ブロック１１１６で、書き込み応答がエラーコードを含むかどうかが判定されてよい。書き込み応答がエラーコードを含むこと（ブロック１１１６における“ＹＥＳ”）に応答して、方法１１００はブロック１１１８へ進んでよい。書き込み応答がエラーコードを含まないこと（ブロック１１１６における“ＮＯ”）に応答して、方法１１００はブロック１１２０へ進んでよい。ブロック１１１８で、書き込み失敗メッセージが伝達されてよい。ブロック１１２０で、書き込み完了メッセージが伝達されてよい。
【０１５６】
図１２は、ここで記載される少なくとも１つの実施形態に従って配置される、受信された応答をパースする方法の他の例１２００のフロー図である。方法１２００は、幾つかの実施形態では、図１及び図２を参照して記載されたユーザ装置１１２によってプログラムにより実行されてよい。ユーザ装置１１２は、方法１２００を実行するか又はその実行を制御するようプロセッサによって実行可能であるプログラミングコード又は命令を記憶しているか又は符号化されている１つ以上の非一時的なコンピュータ可読媒体（例えば、図１のメモリ２３６）を含むか、あるいは、それに通信上結合されてよい。加えて、又は代替的に、ユーザ装置１１２は、方法１２００の実行を引き起こすか又は制御するようにコンピュータ命令を実行するよう構成される１つ以上のプロセッサ（例えば、図２のプロセッサ２３０）を含んでよい。たとえ別個のブロックとして表されているとしても、様々なブロックは、望まれる実施に応じて、更なるブロックに分割されても、より少ないブロックにまとめられても、あるいは、削除されてもよい。
【０１５７】
方法１２００はブロック１２０２から開始してよい。ブロック１２０２で、受信された応答のフォーマットが期待されたフォーマットであるかどうかが判定されてよい。ブロック１２０４で、応答は、フォーマット準拠であるものとしてバリデートされてよい。ブロック１２０６で、ホワイトスペース及び新しい行は、応答から除去されてよい。ブロック１２０８で、応答に含まれる特殊文字は、標準符号化により置換されてよい。ブロック１２１０で、変数名は、第１プレースホルダ変数に更に関連する値に関連する変数特性に応じて、正規表現により置換されてよい。
【０１５８】
ブロック１２１２で、正規表現を用いて、値はボディデータと照合されてよい。ブロック１２１４で、値はグループを用いて抽出されてよい。グループは、定義されたルールに従うＸＭＬグループを含んでよい。例えば、値が、１小数点の許容誤差で与えられる温度を含む実施形態では、グループは（[0-9]*.[0-9]+）として定義されてよい。
【０１５９】
図１３Ａ及び図１３Ｂは、ここで記載される少なくとも１つの実施形態に従って配置される、デバイスドライバを動的に更新する例となる方法１３００のフロー図である。方法１３００は、幾つかの実施形態では、図１及び図２を参照して記載されたユーザ装置１１２及び／又はシステムサーバ１２６によってプログラムにより実行されてよい。ユーザ装置１１２及び／又はシステムサーバ１２６は、方法１３００を実行するか又はその実行を制御するようプロセッサによって実行可能であるプログラミングコード又は命令を記憶しているか又は符号化されている１つ以上の非一時的なコンピュータ可読媒体（例えば、図１のメモリ２３６）を含むか、あるいは、それに通信上結合されてよい。加えて、又は代替的に、ユーザ装置１１２及び／又はシステムサーバ１２６は、方法１３００の実行を引き起こすか又は制御するようにコンピュータ命令を実行するよう構成される１つ以上のプロセッサ（例えば、図２のプロセッサ２３０）を含んでよい。たとえ別個のブロックとして表されているとしても、様々なブロックは、望まれる実施に応じて、更なるブロックに分割されても、より少ないブロックにまとめられても、あるいは、削除されてもよい。
【０１６０】
図１３Ａを参照して、方法１３００はブロック１３０２から開始してよい。ブロック１３０２で、大域的デバイスモデルが受け取られてよい。ブロック１３０４で、大域的デバイスモデルは、局所的デバイスモデルとされてよい。ブロック１３０６で、マルチモーダル入力が受け取られてよい。例えば、マルチモーダル入力は、ユーザ装置にリンクされている入力デバイスからユーザ装置で受け取られてよい。ブロック１３０８で、マルチモーダル入力は処理されてよい。ブロック１３１０で、コマンドが検出されてよい。幾つかの実施形態において、コマンドは、処理されたマルチモーダル入力及び採用された局所的デバイスモデルに基づき検出されてよい。
【０１６１】
ブロック１３１２で、エラーが閾エラー値よりも小さいかどうかが判定されてよい。エラーが閾エラー値よりも大きいこと（ブロック１３１２における“ＮＯ”）に応答して、方法１３００はブロック１３２２へ進んでよい。ブロック１３２２で、エラーメッセージが伝達されてよい。エラーメッセージは、ユーザにマルチモーダル入力を繰り返すよう促すように、ユーザへ伝達されてよい。
【０１６２】
エラーが閾エラー値よりも小さいこと（ブロック１３１２における“ＹＥＳ”）に応答して、方法１３００はブロック１３１４へ進んでよい。図１３Ｂを参照して、ブロック１３１４で、局所的デバイスモデルは、マルチモーダル入力を反映するよう且つエラー率を最小限とするよう更新されてよい。エラー率を最小限とすることは、局所的デバイスモデルをユーザに個人化してよい。ブロック１３１６で、コマンドがデバイスへ送信されてよい。
【０１６３】
ブロック１３１８で、更新された局所的デバイスモデルが大域的デバイスモデルにおいて反映されているかどうかが判定されてよい。更新された局所的デバイスモデルが大域的デバイスモデルにおいて反映されていること（ブロック１３１８における“ＹＥＳ”）に応答して、方法１３００はブロック１３２０へ進んでよい。ブロック１３２０で、更新された局所的デバイスモデルは、局所的デバイスモデルとして使用されてよい。
【０１６４】
更新された局所的デバイスモデルが大域的デバイスモデルにおいて反映されていないこと（ブロック１３１８における“ＮＯ”）に応答して、方法１３００はブロック１３２４へ進んでよい。ブロック１３２４で、更新された局所的デバイスモデルは、大域的デバイスモデル更新モジュールへ送られてよい。ブロック１３２６で、更新された局所的デバイスモデルはユーザ装置から受け取られてよい。ブロック１３２８で、大域的デバイスモデルは更新されてよい。大域的デバイスモデルは、入力デバイスで受け取られるマルチモーダル入力のエラー率を最小限とするよう更新されてよい。更新は、更新された局所的デバイスモデルに少なくとも部分的に基づいてよい。ブロック１３３０で、更新された大域的デバイスモデルは、更新された局所的デバイスモデルに取って代わるようユーザ装置へ動的にダウンロードされてよい。
【０１６５】
ここで記載される実施形態は、以下でより詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータの使用を含んでよい。
【０１６６】
ここで記載される実施形態は、コンピュータ実行可能な命令又はデータ構造を搬送するか又は記憶しているコンピュータ可読媒体を用いて実施されてよい。そのようなコンピュータ可読媒体は、汎用又は専用のコンピュータによってアクセスされ得る如何なる利用可能な媒体であってもよい。例として、制限なしに、そのようなコンピュータ可読媒体は、ランダムアクセスメモリ（ＲＡＭ；Random  Access  Memory）、読出専用メモリ（ＲＯＭ；Read-Only  Memory）、電気的消去可能なプログラム可能読出専用メモリ（ＥＥＰＲＯＭ；Electrically  Erasable  Programmable  Read-Only  Memory）、コンパクトディスク型読出専用メモリ（ＣＤ−ＲＯＭ；Compact  Disc  Read-Only  Memory）若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又はコンピュータ実行可能な命令若しくはデータ構造の形で所望のプログラムコードを搬送若しくは記憶するのに使用されてよく且つ汎用若しくは専用のコンピュータによってアクセスされ得るあらゆる他の記憶媒体を含む非一時的なコンピュータ可読記憶媒体を含んでよい。上記のものの組み合わせも、コンピュータ可読媒体の適用範囲内に含まれてよい。
【０１６７】
コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ、又は専用プロセッシングデバイス（例えば、１つ以上のプロセッサ）に特定の機能又は機能群を実行させる命令及びデータを含んでよい。対象は、構造的な特徴及び／又は方法的な動作に特有の言語において記載されてきたが、添付の特許請求の範囲で定義される対象は、上記の具体的な特徴又は動作に必ずしも制限されない点が理解されるべきである。むしろ、上記の具体的な特徴及び動作は、特許請求の範囲を実施する形態の例として開示されている。
【０１６８】
ここで使用されるように、用語「モジュール（module）」又は「コンポーネント（component）」は、モジュール若しくはコンポーネントの動作を実行するよう構成される特定のハードウェア実施、並びに／又はコンピュータシステムの汎用ハードウェア（例えば、コンピュータ可読媒体、プロセッシングデバイス、など）によって記憶及び／若しくは実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチンを指してよい。幾つかの実施形態において、ここで記載される種々のコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで（例えば、別個のスレッドとして）実行するオブジェクト又はプロセスとして実施されてよい。ここで記載されるシステム及び方法の幾つかは、（汎用ハードウェアによって記憶及び／又は実行される）ソフトウェアで実施されるものとして概して記載されているが、特定のハードウェア実施又はソフトエアと特定のハードウェア実施との組み合わせも可能であり、考えられている。本明細書において、「コンピューティングエンティティ（computing  entity）」は、ここで先に定義されたあらゆるコンピュータシステム、又はコンピュータシステムで実行されるあらゆるモジュール若しくはモジュールの組み合わせであってよい。
【０１６９】
ここで挙げられている全ての例及び条件付き語は、当該技術を促進することに対して本発明者によって寄与される概念及び発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないものとして解釈されるべきである。本発明の実施形態は詳細に記載されてきたが、様々な変更、置換、及び代替は、本発明の主旨及び適用範囲から逸脱することなしになされてよいことが理解されるべきである。
【０１７０】
上記の実施形態に加えて、以下の付記を開示する。
（付記１）
サードパーティからデバイスのためのドライバモデルを受け取り、該ドライバモデルは、前記デバイスに関連する変数のリストと、該変数の１つ以上の特性とを含み、
前記ドライバモデルがフォーマット準拠であるかどうかを判定し、
前記サードパーティがアクセス可能であるドライバテンプレートに少なくとも部分的に基づき、前記ドライバモデルのシンタックスをバリデートし、
前記ドライバモデルがフォーマット準拠であり且つ前記シンタックスが有効であることに応答して、
前記ドライバモデルを代表する検証済みファイルを生成し、該検証済みファイルは、動作中にデバイスアプリケーションモジュールに動的にロードするよう且つ前記デバイスを動的にサポートするようフォーマットされ、
インテグリティチェック値を前記検証済みファイルに付加し、
前記デバイスアプリケーションモジュールを含むユーザ装置へ前記検証済みファイルを伝達し、
前記ドライバモデルがフォーマット準拠でないか、あるいは、前記シンタックスが無効であることに応答して、エラーメッセージを送る
ことを含む方法。
（付記２）
前記デバイスは、アプライアンスデバイスを含み、
前記ドライバモデルは、前記アプライアンスデバイスから前記変数のうちの１つ以上の値を読み出すよう構成されるgetサブルーチンと、前記アプライアンスデバイスへ前記変数のうちの１つ以上の値を書き込むよう構成されるsetサブルーチンとを更に含む、
付記１に記載の方法。
（付記３）
前記検証済みファイルを生成することは、
前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを生成し、該ドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成され、
前記ドライバクラスを含む実行可能なライブラリを合成する
ことを有する、付記２に記載の方法。
（付記４）
前記検証済みファイルは、汎用のドライバクラスへの統合のためにフォーマットされた前記ドライバモデルの少なくとも一部分を含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成される、
付記２に記載の方法。
（付記５）
前記デバイスは、入力デバイスを含み、
前記検証済みファイルは、
入力をパースし且つユーザの特性に適応するよう構成される汎用のドライバクラスに組み入れられることが可能であるようにフォーマットされた前記ドライバモデル、及び
入来する入力をパースするよう構成され且つ前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを含む合成された実行可能なライブラリ
のうちの１つ以上を含む、付記１に記載の方法。
（付記６）
ドライバモデルを代表する検証済みファイルを受け取り、該検証済みファイルは、デバイスに関連する変数のリストと、該変数のうちの１つ以上の１つ以上の変数特性と、前記デバイスから値を読み出すよう構成されるgetサブルーチンと、デバイスアドレスと、１つ以上のプレースホルダ変数とを含み、
動作中にドライバアプリケーションモジュールに前記検証済みファイルの少なくともある部分をロードし、
前記検証済みファイルに少なくとも部分的に基づき、動的ユーザインタフェースのユーザインタフェース（ＵＩ）要素を生成し、
プレースホルダ変数によって前記getサブルーチンにおいて表される前記変数のうちの第１プレースホルダ変数の値を要求するメッセージを前記デバイスアドレスへ送信し、
受信された応答をパースして、該受信された応答が前記getサブルーチンのパターンに一致するかどうかを判定し、
前記パターンが一致することに応答して、前記受信された応答から値を読み出し、該値は、前記getサブルーチンにおいて前記第１プレースホルダ変数によってそれまで保持されていた位置において前記受信された応答内に位置し、前記動的ユーザインタフェースに含まれる情報を当該値により更新する
ことを有する方法。
（付記７）
前記検証済みファイルは、前記デバイスへ値を書き込むよう構成され、第２プレースホルダ変数及び書き込みデバイスアドレスを含むsetサブルーチンを含み、
当該方法は、
前記デバイスに関する第２値を伝達することができる入力を前記ユーザインタフェースで受け取り、
前記setサブルーチン内の前記第２プレースホルダ変数を前記第２値により置換し、
前記第２プレースホルダ変数が前記第２値により置換された前記setサブルーチンを前記書き込みデバイスアドレスへ送信する
ことを更に有する、付記６に記載の方法。
（付記８）
前記検証済みファイルは、合成されたドライバクラスを含んでいる実行可能なライブラリを含み、
前記ドライバクラスは、前記ドライバモデルのコンテンツを更に含み、
前記ドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより値要求を送信するよう構成される、
付記７に記載の方法。
（付記９）
前記検証済みファイルは、汎用のドライバクラスに組み入れられることが可能な前記ドライバモデルを含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンによりデータ要求を送信するよう構成される、
付記７に記載の方法。
（付記１０）
前記パースすることは、
前記受信された応答のフォーマットが期待されたフォーマットにあるかどうかを判定し、
前記受信された応答がフォーマット準拠であるかどうかをバリデートし、
ホワイトスペース及び新しい行を前記受信された応答から除去し、
前記受信された応答に含まれる特殊文字を標準符号化により置換し、
前記プレースホルダ変数に更に関連する前記第１プレースホルダ変数に関連する前記変数特性に応じて、変数名を正規表現により置換し、
前記正規表現を用いて、前記値をボディデータと照合し、
前記値を１つ以上のグループにより抽出する
ことを含む、付記６に記載の方法。
（付記１１）
サードパーティからデバイスのためのドライバモデルを受け取り、該ドライバモデルは、前記デバイスに関連する変数のリストと、該変数の１つ以上の特性とを含み、
前記ドライバモデルがフォーマット準拠であるかどうかを判定し、
前記サードパーティがアクセス可能であるドライバテンプレートに少なくとも部分的に基づき、前記ドライバモデルのシンタックスをバリデートし、
前記ドライバモデルがフォーマット準拠であり且つ前記シンタックスが有効であることに応答して、
前記ドライバモデルを代表する検証済みファイルを生成し、該検証済みファイルは、動作中にデバイスアプリケーションモジュールに動的にロードするよう且つ前記デバイスを動的にサポートするようフォーマットされ、
インテグリティチェック値を前記検証済みファイルに付加し、
前記デバイスアプリケーションモジュールを含むユーザ装置へ前記検証済みファイルを伝達し、
前記ドライバモデルがフォーマット準拠でないか、あるいは、前記シンタックスが無効であることに応答して、エラーメッセージを送る
動作を実行するよう又は該動作の実行を制御するようプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。
（付記１２）
前記デバイスは、アプライアンスデバイスを含み、
前記ドライバモデルは、前記アプライアンスデバイスから前記変数のうちの１つ以上の値を読み出すよう構成されるgetサブルーチンと、前記アプライアンスデバイスへ前記変数のうちの１つ以上の値を書き込むよう構成されるsetサブルーチンとを更に含む、
付記１１に記載の非一時的なコンピュータ可読媒体。
（付記１３）
前記検証済みファイルを生成することは、
前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを生成し、該ドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成され、
前記ドライバクラスを含む実行可能なライブラリを合成する
ことを有する、付記１２に記載の非一時的なコンピュータ可読媒体。
（付記１４）
前記検証済みファイルは、汎用のドライバクラスへの統合のためにフォーマットされた前記ドライバモデルの少なくとも一部分を含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記アプライアンスデバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより前記アプライアンスデバイスへデータ要求を送信するよう構成される、
付記１２に記載の非一時的なコンピュータ可読媒体。
（付記１５）
前記デバイスは、入力デバイスを含み、
前記検証済みファイルは、
前記ユーザ装置の前記入力デバイスによって伝達されたマルチモーダル入力をパースするよう構成される汎用のドライバクラスに組み入れられることが可能であるようにフォーマットされた前記ドライバモデル、及び
前記ユーザ装置の前記入力デバイスによって伝達された入来するマルチモーダル入力をパースするよう構成され且つ前記ドライバモデルのコンテンツの少なくとも一部分を含むドライバクラスを含む合成された実行可能なライブラリ
のうちの１つ以上を含む、付記１１に記載の非一時的なコンピュータ可読媒体。
（付記１６）
ドライバモデルを代表する検証済みファイルを受け取り、該検証済みファイルは、デバイスに関連する変数のリストと、該変数のうちの１つ以上の１つ以上の変数特性と、前記デバイスから値を読み出すよう構成されるgetサブルーチンと、デバイスアドレスと、１つ以上のプレースホルダ変数とを含み、
動作中にドライバアプリケーションモジュールに前記検証済みファイルの少なくともある部分をロードし、
前記検証済みファイルに少なくとも部分的に基づき、動的ユーザインタフェースのユーザインタフェース（ＵＩ）要素を生成し、
プレースホルダ変数によって前記getサブルーチンにおいて表される前記変数のうちの第１プレースホルダ変数の値を要求するメッセージを前記デバイスアドレスへ送信し、
受信された応答をパースして、該受信された応答が前記getサブルーチンのパターンに一致するかどうかを判定し、
前記パターンが一致することに応答して、前記受信された応答から値を読み出し、該値は、前記getサブルーチンにおいて前記第１プレースホルダ変数によってそれまで保持されていた位置において前記受信された応答内に位置し、前記動的ユーザインタフェースに含まれる情報を当該値により更新する
動作を実行するよう又は該動作の実行を制御するようプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。
（付記１７）
前記ドライバモデルは、前記デバイスへ値を書き込むよう構成され、第２プレースホルダ変数及び書き込みデバイスアドレスを含むsetサブルーチンを含み、
前記動作は、
前記デバイスに関する第２値を伝達することができる入力を前記ユーザインタフェースで受け取り、
前記setサブルーチン内の前記第２プレースホルダ変数を前記第２値により置換し、
前記第２プレースホルダ変数が前記第２値により置換された前記setサブルーチンを前記書き込みデバイスアドレスへ送信する
動作を更に有する、付記１６に記載の非一時的なコンピュータ可読媒体。
（付記１８）
前記検証済みファイルは、合成されたドライバクラスを含んでいる実行可能なライブラリを含み、
前記ドライバクラスは、前記ドライバモデルのコンテンツを更に含み、
前記ドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンにより値要求を送信するよう構成される、
付記１７に記載の非一時的なコンピュータ可読媒体。
（付記１９）
前記検証済みファイルは、汎用のドライバクラスに組み入れられることが可能な前記ドライバモデルを含み、
前記汎用のドライバクラスは、前記getサブルーチンの実行に応答して前記デバイスによって伝達された入来する応答をパースするよう且つ前記setサブルーチンによりデータ要求を送信するよう構成される、
付記１７に記載の非一時的なコンピュータ可読媒体。
（付記２０）
前記パースすることは、
前記受信された応答のフォーマットが期待されたフォーマットにあるかどうかを判定し、
前記受信された応答がフォーマット準拠であるかどうかをバリデートし、
ホワイトスペース及び新しい行を前記受信された応答から除去し、
前記受信された応答に含まれる特殊文字を標準符号化により置換し、
前記プレースホルダ変数に更に関連する前記第１プレースホルダ変数に関連する前記変数特性に応じて、変数名を正規表現により置換し、
前記正規表現を用いて、前記値をボディデータと照合し、
前記値を１つ以上のグループにより抽出する
ことを含む、付記１６に記載の非一時的なコンピュータ可読媒体。
【符号の説明】
【０１７１】
１００                  異種デバイスシステム
１０２                  ユーザ
１０４                  サーバ統合モジュール
１０６                  アプライアンスデバイス
１１２                  ユーザ装置
１１４                  ユーザ統合モジュール
１１８                  入力デバイス
１２０                  サードパーティサーバ
１２２                  サードパーティ
１２４                  ネットワーク
１２６                  システムサーバ
１２８                  動的ユーザインタフェース
１３０                  デバイスアプリケーションモジュール
１５０                  デバイスドライバ
２２０                  応答信号
２２４                  ユーザ入力
２２６                  ドライバテンプレート
２２８，３００，５０４  ドライバモデル
２３８                  署名入りモデル
２４０                  署名入りドライバクラス
２４２                  検証済みファイル
３０８                  リスト
３１０，５１０          変数
３１２，５１２          特性
３１４                  setサブルーチン
３１６                  getサブルーチン
３１８                  プレースホルダ変数
５００，８００          ＵＩページ
５０２                  ＵＩ要素
【図１】
0006493126.tif 000002
【図２】
0006493126.tif 000003
【図３Ａ】
0006493126.tif 000004
【図３Ｂ】
0006493126.tif 000005
【図４】
0006493126.tif 000006
【図５】
0006493126.tif 000007
【図６】
0006493126.tif 000008
【図７】
0006493126.tif 000009
【図８Ａ】
0006493126.tif 000010
【図８Ｂ】
0006493126.tif 000011
【図８Ｃ】
0006493126.tif 000012
【図９】
0006493126.tif 000013
【図１０】
0006493126.tif 000014
【図１１】
0006493126.tif 000015
【図１２】
0006493126.tif 000016
【図１３Ａ】
0006493126.tif 000017
【図１３Ｂ】
0006493126.tif 000018