(57)【特許請求の範囲】
【請求項１】
コンピュータで実施される方法であって、
センサハブのセンサハブプロセッサを設定することによって、アプリケーションプロセッサから前記センサハブプロセッサへと複数の機能をアウトソースする段階と、
前記センサハブプロセッサに結合されている１以上のセンサを用いて１以上のコンテキストアウェアアプリケーションを実行する段階と
を備え、
前記センサハブプロセッサを設定することは、前記１以上のコンテキストアウェアアプリケーションに対応する処理に関するトリガ、取得及び処理を含む前記複数の機能を実行するように、複数のプリミティブに基づいて前記センサハブプロセッサを、前記アプリケーションプロセッサが、動的に設定することを含む
コンピュータで実施される方法。
【請求項２】
前記複数のプリミティブのうち１以上のプリミティブを拡張または縮小するべく前記複数のプリミティブのうち前記１以上のプリミティブを更新する段階をさらに備える請求項１に記載のコンピュータで実施される方法。
【請求項３】
前記複数のプリミティブに１以上のプリミティブを追加するか、または、前記複数のプリミティブのうち１以上のプリミティブを削除する段階をさらに備える請求項２に記載のコンピュータで実施される方法。
【請求項４】
前記センサハブプロセッサを動的に設定することは、前記複数のプリミティブのうち１以上のプリミティブを更新すること、または、１以上のプリミティブを追加することに基づいて行われる請求項１から３のいずれか一項に記載のコンピュータで実施される方法。
【請求項５】
アウトソースされた前記複数の機能は、前記センサハブプロセッサによって実行され、
前記センサハブプロセッサは、前記１以上のセンサの動作を管理し、
前記１以上のセンサの動作を管理することは、前記アプリケーションプロセッサがスリープ状態の間に、前記１以上のセンサからデータを取得することを含み、
前記複数の機能は、データの取得、前記１以上のセンサのトリガ、取得した前記データのフィルタリングを含む前記取得したデータの処理、処理した前記データの配信、キャリブレーション、前記取得したデータへの時間サンプリング、および、消費電力を低減することを含む電力の管理のうち１以上を含む請求項１から４のいずれか一項に記載のコンピュータで実施される方法。
【請求項６】
前記動作は、前記１以上のコンテキストアウェアアプリケーションに関連するユーザの動作に基づいている請求項５に記載のコンピュータで実施される方法。
【請求項７】
前記センサハブプロセッサは、一のチップセットまたは複数の別箇のチップセットに設けられている前記アプリケーションプロセッサに結合されている請求項１から６のいずれか一項に記載のコンピュータで実施される方法。
【請求項８】
前記アプリケーションプロセッサは、
前記コンテキストアウェアアプリケーションとして、ジェスチャ認識を要求する場合、加速度計からデータを取得して、前記加速度計から動きが検出されればジャイロスコープをトリガして、前記アプリケーションプロセッサにデータを送信するように、前記センサハブを設定する請求項１から７のいずれか一項に記載のコンピュータで実施される方法。
【請求項９】
センサハブのセンサハブプロセッサと、
前記センサハブプロセッサを設定することによってアプリケーションプロセッサから前記センサハブプロセッサへと複数の機能をアウトソースする第１のロジックと、
前記センサハブプロセッサに結合されている１以上のセンサを用いて１以上のコンテキストアウェアアプリケーションを実行する第２のロジックと
を備え、
前記センサハブプロセッサを設定することは、前記１以上のコンテキストアウェアアプリケーションに対応する処理に関するトリガ、取得及び処理を含む前記複数の機能を実行するように、複数のプリミティブに基づいて前記センサハブプロセッサを、前記アプリケーションプロセッサが、動的に設定することを含むシステム。
【請求項１０】
前記複数のプリミティブのうち１以上のプリミティブを拡張または縮小するべく前記複数のプリミティブのうち前記１以上のプリミティブを更新する第３のロジックをさらに備える請求項９に記載のシステム。
【請求項１１】
前記第３のロジックはさらに、前記複数のプリミティブに１以上のプリミティブを追加するか、または、前記複数のプリミティブのうち１以上のプリミティブを削除する請求項１０に記載のシステム。
【請求項１２】
前記センサハブプロセッサを動的に設定することは、前記複数のプリミティブのうち１以上のプリミティブを更新すること、または、１以上のプリミティブを追加することに基づいて行われる請求項９から１１のいずれか一項に記載のシステム。
【請求項１３】
前記センサハブプロセッサは、前記１以上のセンサの動作を管理し、
前記１以上のセンサの動作を管理することは、前記アプリケーションプロセッサがスリープ状態の間に、前記１以上のセンサからデータを取得することを含み、
前記複数の機能は、データの取得、前記１以上のセンサのトリガ、取得した前記データのフィルタリングを含む前記取得したデータの処理、処理した前記データの配信、キャリブレーション、前記取得したデータへの時間サンプリング、および、消費電力を低減することを含む電力の管理のうち１以上を含む請求項９から１２のいずれか一項に記載のシステム。
【請求項１４】
前記動作は、前記１以上のコンテキストアウェアアプリケーションに関連するユーザの動作に基づいている請求項１３に記載のシステム。
【請求項１５】
前記アプリケーションプロセッサは、
前記コンテキストアウェアアプリケーションとして、ジェスチャ認識を要求する場合、加速度計からデータを取得して、前記加速度計から動きが検出されればジャイロスコープをトリガして、前記アプリケーションプロセッサにデータを送信するように、前記センサハブを設定する請求項９から１４のいずれか一項に記載のシステム。
【請求項１６】
コンピュータに、
センサハブのセンサハブプロセッサを設定することによって、アプリケーションプロセッサから前記センサハブプロセッサへと複数の機能をアウトソースする手順と、
前記センサハブプロセッサに結合されている１以上のセンサを用いて１以上のコンテキストアウェアアプリケーションを実行する手順と
を実行させ、
前記センサハブプロセッサを設定することは、前記１以上のコンテキストアウェアアプリケーションに対応する処理に関するトリガ、取得及び処理を含む前記複数の機能を実行するように、複数のプリミティブに基づいて前記センサハブプロセッサを、前記アプリケーションプロセッサが、動的に設定することを含むプログラム。
【請求項１７】
前記コンピュータにさらに、前記複数のプリミティブのうち１以上のプリミティブを拡張または縮小するべく前記複数のプリミティブのうち前記１以上のプリミティブを更新する手順を実行させる請求項１６に記載のプログラム。
【請求項１８】
前記コンピュータにさらに、前記複数のプリミティブに１以上のプリミティブを追加するか、または、前記複数のプリミティブのうち１以上のプリミティブを削除する手順を実行させる請求項１７に記載のプログラム。
【請求項１９】
前記センサハブプロセッサを動的に設定することは、前記複数のプリミティブのうち１以上のプリミティブを更新すること、または、１以上のプリミティブを追加することに基づいて行われる請求項１６から１８のいずれか一項に記載のプログラム。
【請求項２０】
前記コンピュータに、
前記コンテキストアウェアアプリケーションとして、ジェスチャ認識を要求する場合、加速度計からデータを取得して、前記加速度計から動きが検出されればジャイロスコープをトリガして、前記アプリケーションプロセッサにデータを送信するように、前記センサハブを設定する手順をさらに実行させる請求項１６から１９のいずれか一項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
概してコンピューティングデバイスに関する。具体的には、コンテキストアウェアアプリケーション関連の機能をセンサハブにアウトソースするメカニズムの利用に関する。
【背景技術】
【０００２】
コンテキストアウェアソフトウェアアプリケーションは、手持ちコンピューティングデバイスおよびモバイルコンピューティングデバイスにおいてよく利用されるようになっている。コンテキストアウェアアプリケーションによると、コンピューティングがデバイスの利用とは切り離され、つまり、ユーザとデバイスとのやり取りがない場合には電池寿命を改善するべく「デバイスを電源オフにする」という従来の方法が用いられない。このため、新しい算出パラダイムが得られる。これは、ユーザのコンテキストがユーザの日常生活のさまざまな場面（例えば、ユーザの活動、ユーザの位置、ユーザの社会的交流、ユーザの感情状態等）に関連しているためであり、コンテキストアウェアアプリケーションを持つモバイルデバイスは、（ユーザが「デバイスを電源オフにする」場合でも）常にユーザのコンテキストを取得しなければならず、コンピューティングデバイスは動作を継続し、電力消費も継続される。
【０００３】
例えば、歩数計アプリケーションは、歩数計アプリケーションを含むモバイルデバイスがどのように利用されようと関係なく、１日中ユーザの歩数を測定する。歩数計アプリケーションの要件を満足させるべく、さまざまなデバイスセンサ（例えば、加速度計、ジャイロスコープ、コンパス等）が、長期間にわたって（このため、常に電力を消費する）、モバイルデバイスが「電源オフ」になっておりユーザのポケット内にあるはずの場合であっても、ユーザの動き（例えば、歩数）を感知している必要がある。ユーザが電話とやり取りしていない場合には電源オフになる通常の携帯電話とは異なり、コンテキストアウェアアプリケーションを持つモバイルコンピューティングデバイスは、電源オン状態を維持しなければならず、１日中センサデータを常に取得するべく常に利用する必要がある。コンテキストアウェアアプリケーションは、大量の電力を消費し、コンピューティングデバイスのバッテリーは、１日に何度も充電する必要がある。
【図面の簡単な説明】
【０００４】
本発明の実施形態は、本発明を限定ではなく例示するべく、添付図面に図示している。図中では、同様の参照番号は同様の構成要素を示すものとする。図面は以下の通りである。
【図１】本発明の一実施形態に係るセンサハブを利用するコンピューティングデバイスを示す図である。
【図２】本発明の一実施形態に係るセンサハブハードウェアを持つセンサハブを示す図である。
【図３Ａ】本発明の一実施形態に係るセンサハブソフトウェアを持つセンサハブの実施形態を示す図である。
【図３Ｂ】本発明の一実施形態に係るセンサハブソフトウェアを持つセンサハブの実施形態を示す図である。
【図４】本発明の一実施形態に係るセンサハブにプロセッサのコンテキストアウェアアプリケーション関連の機能をアウトソースする方法を説明するための図である。
【図５】本発明の一実施形態に係るコンピューティングシステムを示す図である。
【発明を実施するための形態】
【０００５】
本発明の実施形態は、センサハブにコンテキストアウェアアプリケーション関連の処理をアウトソースするメカニズムを提供する。本発明の実施形態に係る方法は、センサハブのセンサハブプロセッサを設定することによって、複数の機能をアプリケーションプロセッサからセンサハブプロセッサへとアウトソースする段階と、センサハブプロセッサに結合されている１以上のセンサを用いて１以上のコンテキストアウェアアプリケーションを実行する段階とを備える。
【０００６】
一実施形態によると、コンピューティングデバイスのアプリケーションプロセッサがスリープ状態である場合に動作し、複数の機能をアプリケーションプロセッサから、これらの機能をアプリケーションプロセッサで実行する場合よりはるかに低い電力のセンサハブプロセッサへと、オフロードする機能を持つ低電力感知サブシステム（例えば、プロセッサ、センサ、ハードウェアおよびソフトウェアの組み合わせ等）から構成されるセンサハブが提供される。さらに、一実施形態によると、センサハブは、低電力要件を満足させつつ、センサハブを多岐にわたるコンテキスト機能に合わせて設定するために必要な柔軟性を得るための一連の電力効率プリミティブを公開することによって、多岐にわたるコンテキストアウェアアプリケーションをサポートしている。新型のセンサハブは、従来のシステムに関連付けられている従来の電力に関する問題を克服している。従来のシステムでは、コンテキストアウェアアプリケーション関連のセンサをアプリケーションプロセッサに直接接続する必要があり、大量の電力を消費すると共に、電池寿命が大幅に短くなる。
【０００７】
図１は、本発明の一実施形態に係るセンサハブ１１０を利用するコンピューティングデバイス１００を示す図である。コンピューティングデバイス１００は、コンピューティングデバイス１００の任意のハードウェアまたは物理リソースとユーザとの間のインターフェースとして機能するオペレーティングシステム１０４を有するモバイルデバイス（例えば、スマートフォン、手持ちデバイス、タブレット、ラップトップ等）を備えるとしてよい。コンピューティングデバイス１００はさらに、プロセッサ１０６と、メモリデバイス１０２と、ネットワークデバイス、ドライバ等を備えるとしてよい。プロセッサ１０６は、コンピューティングデバイス１００にサービスを提供するべく設けられているアプリケーションプロセッサ（回路）１０８を有するとしてよい。アプリケーションプロセッサ１０８は、高度コンテキスト処理等、さまざまなタスクを実行するべく、モバイルインターネットデバイス（ＭＩＤ）対応プロセッサ、例えば、Ａｔｏｍ（商標）のプロセッサコアを持つＬｉｎｃｒｏｆｔシステムオンチップ（ＳＯＣ）に基づいているＭｏｏｒｅｓｔｏｗｎ（商標）を含むとしてよい。一実施形態によると、本文献で後述するが、アプリケーションプロセッサ１０８は、（同様の機能をアプリケーションプロセッサで実行する場合に比べて）利用する電力を大幅に低減するべく、センサハブプロセッサに結合されている複数のセンサを用いて、さまざまなコンテキストアウェアアプリケーション関連の機能（アプリケーションプロセッサによって実行されるもの）を実行するべく、所望または必要に応じて、（センサハブハードウェアおよび／またはセンサハブソフトウェアを用いて）センサハブを設定する権限および機能を与えられるとしてよい。「機械」、「デバイス」、「コンピュータ」および「コンピューティングシステム」といった用語は本文献において同義語として用いられることに留意されたい。
【０００８】
一実施形態によると、コンピューティングデバイス１００はさらに、プリミティブとして提供される、センサデータ取得、トリガ、処理、フィルタリング、ストリーミング、格納、転送、キャリブレーション等のさまざまなコンテキストアウェアアプリケーション関連機能を実行するべく、アプリケーションプロセッサ１０８と通信するハードウェア（アーキテクチャ）１１２およびソフトウェア（アーキテクチャ）１１４を有するセンサハブ１１０を備える。これらの機能は、アプリケーションプロセッサ１０８からセンサハブ１１０へとアウトソース、例えば、オフロードされ、コンテキストアウェアアプリケーションの要求が変化しても対応できるよう十分柔軟に実行される。言い換えると、一実施形態によると、プリミティブは、センサハブ１１０で実行され得るが、プロトコル、例えば、センサハブアプリケーションプログラミングインターフェース（ＡＰＩ）を介してアプリケーションプロセッサ１０８によって設定される。
【０００９】
実生活におけるコンテキストアウェアアプリケーションの例を考えると、コンテキストアウェアアプリケーションは、「ジェスチャ認識」を要求すると、トリガされる。この要求は、インタラクティブアプリケーション（ＩＡ）アプリケーションプロセッサ１０８で実行されているミドルウェアにルーティングされる。その後、ミドルウェアは、例えば、加速度計からデータを取得して、加速度計から動きが検出されればジャイロスコープをトリガして、センサハブ１１０上でジェスチャスポッティングを実行して、これらの条件が満たされればデータをミドルウェアに送信するよう、センサハブ１１０を設定する。そして、アプリケーションプロセッサ上のミドルウェアは、データを受信するとアルゴリズム（例えば、隠れマルコフモデル（ＨＭＭ）アルゴリズム）を実行して、最後のジェスチャ認識を実行して、ユーザが「シェイク」ジェスチャをたった今実行したと判断する。言い換えると、一実施形態では、プリミティブ（例えば、トリガ、取得および処理）は、ＩＡアプリケーションプロセッサ１０８で実行されるミドルウェアによって設定されるが、センサハブ１１０のセンサハブソフトウェア１１４で実施され、アプリケーションプロセッサ１０８にあるセンサハブＡＰＩを介して公開され、アプリケーションプロセッサ１０８を介して要求、トリガおよび設定される。これについては、以降の図面を参照しつつ説明する。
【００１０】
本文献で続いて説明するが、センサハブハードウェア１１２は、コンピューティングデバイス１００の電力要件を低減するべくさまざまなコンテキストアウェアアプリケーションに関する機能を実行することを目的としてセンサハブソフトウェア１１４と協働している複数のセンサ（例えば、３Ｄ加速器、ジャイロスコープ、コンパス、気圧計等）に結合されている汎用低電力プロセッサ（例えば、ＳＴＭｉｃｒｏ社のＣｏｒｔｅｘ等）を含むとしてよい。
【００１１】
図２は、本発明の一実施形態に係るセンサハブハードウェア１１２を備えるセンサハブ１１０を示す図である。一実施形態によると、センサハブ１１０は、センサハブハードウェア１１２およびセンサハブソフトウェア１１４を備える。センサハブハードウェア１１２は、非常に低い電流（例えば、マイクロアンペアからミリアンペアの範囲）で動作可能であり、処理需要に基づいて動的にスケールアップ可能である汎用低電力センサハブプロセッサ２０２（例えば、Ｃｏｒｔｅｘ  Ｍ３）を含む。一実施形態によると、コンテキストアウェアアプリケーションに関するさまざまなセンサ２１４−２２８は、例えば、インターインテグレーテッドサーキット（Ｉ２Ｃ）インターフェース、シリアルペリフェラルインターフェース（ＳＰＩ）、汎用入出力（ＧＰＩＯ）、ユニバーサルアシンクロナスレシーバ／トランスミッタ（ＵＡＲＴ）、アナログ型、無線型等、標準のインターフェースを用いてセンサハブプロセッサ２０２に接続されているので、センサハブハードウェア１１２内に位置している。さらに、一実施形態によると、センサハブプロセッサ２０２は、一連のインターフェース（例えば、ＳＰＩ、ユニバーサルシリアルバス（ＵＳＢ）、ＧＰＩＯ等）を介してアプリケーションプロセッサ１０８と通信するように接続および位置しており、共有メモリ空間へのアクセスを維持する。また、図示した実施形態では、センサハブプロセッサ２０２は別のプロセッサとして図示されているが、別の実施形態では、センサハブプロセッサ２０２はアプリケーションプロセッサ１０８内のコアプロセッサとして位置しているとしてもよいし、または、さらに別の実施形態では、チップセット（例えば、Ａｔｏｍ（商標）チップセット、プラットフォームコントローラハブ（ＰＣＨ）等）等に位置しているとしてもよい。
【００１２】
一実施形態によると、センサハブプロセッサ２０２は、センサ２１４−２２８とアプリケーションプロセッサ１０８との間等、処理ヒエラルキー内の中間レベル処理エージェントとして機能する。この中間レベルエージェントによって、アプリケーションプロセッサ１０８が上記のセンサデータ関連のタスクをセンサハブプロセッサ２０２にアウトソースできるようにすることで、センサデータのポーリングおよび処理（例えば、センサデータを収集してしきい値と比較）をアプリケーションプロセッサ１０８が継続的に行う必要性が減る。また、センサハブプロセッサ２０２は、センサハブプロセッサ２０２が無くアプリケーションプロセッサ１０８と直に協働する場合にセンサ２１４−２２８が通常実現し得るレベルより高い柔軟性およびプログラミング可能性を実現する。
【００１３】
センサハブプロセッサ２０２は、コンテキストアウェアアプリケーションの性格および機能に応じて、任意の数で任意の種類のセンサ２１４−２２８と協働するべく利用され得ると考えられる。例えば、歩数計アプリケーション等のコンテキストアウェアアプリケーションは、特定のセンサ（例えば、３Ｄ加速度計２２２、３Ｄジャイロスコープ２２０等）が必要になるとしてよい。一方で、カメラアプリケーション等の別のコンテキストアウェアアプリケーションは、歩数計アプリケーションが必要としたセンサと全く同じセンサが必要でない場合があり、この逆もまた然りである。幾つかの例として、環境マイクロフォン２１６とセンサハブプロセッサ２０２との間でのデータ変換に利用されるコーデック２１４（例えば、Ｍａｘｉｍ社のコーデック）に対応付けられている環境マイクロフォン２１６（例えば、Ｋｎｏｗｌｅｓ社の環境マイクロフォン）、３Ｄコンパス２１８（例えば、Ｈｏｎｅｙｗｅｌｌ社のコンパス）、３Ｄジャイロスコープ２２０（例えば、Ｉｎｖｅｎｓｅ社のジャイロスコープ）、３Ｄ加速度計２２２（例えば、ＳＴＭｉｃｒｏ社の加速度計）、光センサ２２４（例えば、Ｉｎｔｅｒｓｉｌ社の光センサ）、気圧計２２６、およびフラッシュ２２８等が挙げられる。上述した物理センサ２１４−２２８に加えて、さまざまな仮想センサがセンサハブプロセッサ２０２によってサポートされているとしてよい。これらの仮想センサ（例えば、ｘｙ方向、ｚ方向、慣性測定による進行方向、ノイズレベル等）は、物理センサ２１４−２２８で取得したセンサデータを用いて算出または取得するとしてよい。
【００１４】
図３Ａおよび図３Ｂを参照しつつさらに説明するが、一実施形態によると、センサハブプロセッサ２０２が、動的または要望に応じて、さまざまな機能または処理を実行する性能を採用するように、アプリケーションプロセッサ１０８において、任意の数で任意の種類のソフトウェアモジュールをセンサハブソフトウェア１１４の一部として利用する。ソフトウェアモジュールを介して提供されるこれらの機能は、センサハブプリミティブと呼ばれるとしてよい。一実施形態によると、センサデータ取得、トリガ、処理、フィルタリング、ストリーミング、格納、転送、キャリブレーション等のさまざまなコンテキストアウェアアプリケーション関連機能は、プリミティブとして提供され、アプリケーションプロセッサ１０８からセンサハブ１１０へとアウトソース、例えば、オフロードされ、コンテキストアウェアアプリケーションからの要求が変化しても対応できるように十分柔軟に実行される。言い換えると、一実施形態によると、プリミティブはセンサハブ１１０で実行されるとしてよいが、センサハブＡＰＩ等のプロトコルを介してアプリケーションプロセッサ１０８によって設定される。言い換えると、一実施形態では、プリミティブ（例えば、トリガ、取得、処理、取得、フィルタリング等）は、ＩＡアプリケーションプロセッサ１０８上で実行されているミドルウェアによって設定されるが、センサハブ１１０のセンサハブソフトウェア１１４で実行され、アプリケーションプロセッサ１０８にあるセンサハブＡＰＩを介して公開され、アプリケーションプロセッサ１０８を介して要求、トリガおよび設定される。これらについては、以降の図面を参照しつつ説明する。
【００１５】
一実施形態によると、特定のデフォルトプリミティブがセンサハブ１１０の一部として最初に提供されるとしてよい。例えば、センサハブ１１０およびアプリケーションプロセッサ１０８を備えるコンピューティングデバイスの製造時に提供されるとしてよい。しかし、時間が経過すると、特定のプリミティブ（これらの機能または性能に対応するもの）は、センサハブソフトウェア１１４に追加（またはセンサハブソフトウェア１１４から削除）されるとしてよい。例えば、新しい機能（例えば、追加機能）を表す新しいプリミティブ（例えば、新しいコンポーネントの追加）をセンサハブソフトウェア１１４に追加する場合、センサハブソフトウェア１１４は、アプリケーションプロセッサ１０８がセンサハブプロセッサ２０２を動的または需要に応じて（再）設定できるようにして、コンテキストアウェアアプリケーションに関連する今後のトランザクションで利用されるこの新しい機能を採用する。同様に、センサハブプロセッサ２０２は、対応するプリミティブ（例えば、キャリブレータ）がセンサハブソフトウェア１１４によって提供されるプリミティブのリストから削除されると、（センサハブソフトウェア１１４からの支援に応じてアプリケーションプロセッサ１０８によって）動的または需要に応じて（再）設定されて、特定の機能（例えば、キャリブレーション）を削除するとしてよい。一実施形態によると、動的設定とは、任意の数または任意の組み合わせのプリミティブを動的に実行および終了することを意味する。例えば、データの取得は、加速度計２２２を用いて開始されて、その後任意のタイミングで停止させるとしてよい。しかし、取得プリミティブ（例えば、図３Ｂの取得モジュール３２２）はそのままで、実施されないだけであるとしてもよい（例えば、再度必要になるまでアイドル状態を維持する）。さらに、監視すべきイベントを開始するとしてよいが、例えば、加速度計データが特定のしきい値に到達するか、または、特定のしきい値を超えると、アプリケーションプロセッサ１０８がアウェイク状態になるか、または、当該イベントを除去するとしてよい。さらに、センサハブ１１０で実行されているセンサハブソフトウェア１１４を修正して、新しいプリミティブをＡＰＩ（例えば、図３ＡのセンサハブＡＰＩ３１０）に追加してアプリケーションプロセッサ１０８が新しく追加されたプリミティブにアクセスして利用できるようにすることによって、センサハブ機能の拡張で、特定のプリミティブを追加または削除するとしてよい。
【００１６】
図３Ａおよび図３Ｂは、本発明の一実施形態に係るセンサハブソフトウェア１１４を備えるセンサハブ１１０の実施形態を示す図である。図２を参照しつつ上述したが、複数のプリミティブ（「処理モジュール」、「性能モジュール」、「機能モジュール」等とも呼ばれる）は、アプリケーションプロセッサ１０８がセンサハブプロセッサ２０２を設定して関連する機能を採用してさまざまな対応するコンテキストアウェアアプリケーション関連機能を実行できるようにするべく、センサハブソフトウェア１１４およびセンサハブソフトウェアモジュール３０４の一部として利用されるとしてよい。
【００１７】
一実施形態によると、コンピューティングデバイス１００はさらに、さまざまなコンテキストアウェアアプリケーション関連機能、例えば、センサデータ取得、トリガ、処理、フィルタリング、ストリーミング、格納、転送、キャリブレーション等を実行するべく、アプリケーションプロセッサ１０８と通信しているハードウェア（アーキテクチャ）１１２およびソフトウェア（アーキテクチャ）１１４を有するセンサハブ１１０を備える。これらの機能は、プリミティブとして提供され認識されているとしてよい。これらの機能は、アプリケーションプロセッサ１０８からセンサハブ１１０へと、アウトソース、例えば、オフロードされ、コンテキストアウェアアプリケーションの要求が変化しても対応できるように十分柔軟に実行される。言い換えると、一実施形態では、プリミティブはセンサハブ１１０で実行されるが、センサハブＡＰＩ等のプロトコルを介してアプリケーションプロセッサ１０８によって設定される。言い換えると、一実施形態では、プリミティブ（例えば、トリガ、取得、処理、取得、フィルタリング等）は、ＩＡアプリケーションプロセッサ１０８で実行されているミドルウェアによって設定されるが、センサハブ１１０のセンサハブソフトウェア１１４で実行され、アプリケーションプロセッサ１０８にあるセンサハブＡＰＩを介して公開され、アプリケーションプロセッサ１０８を介して要求、トリガおよび設定される。これについては、以降の図面を参照しつつ説明する。
【００１８】
一実施形態によると、プリミティブを用いるアプリケーションプロセッサ１０８によるセンサハブプロセッサ２０２の設定または再設定は、動的に実行されるとしてよい（例えば、プリミティブは、コンテキストアウェアアプリケーションまたはユーザのジェスチャが変化を引き起こす度に、自動的に追加、編集または削除されるとしてよい）し、または、要求に応じて実行されるとしてもよい（例えば、ユーザが、センサハブ１１０を利用するコンピューティングデバイスでの設定を変更することによってプリミティブの変更を行えるようにする）。
【００１９】
プリミティブに加えて（図３Ｂを参照しつつさらに説明する）、他のソフトウェア／ハードウェア／ファームウェアコンポーネントも利用する。例えば、センサハブアプリケーションプログラミングインターフェース３１０（「ＡＰＩ」または単に「インターフェース」と呼ぶ）は、ＩＡ３０６に対応付けられているＩＡドライバ３１２（コンテンツパーサ３１４を含む）が、例えば、センサハブプロセッサ２０２の設定、データの設定等について、センサハブプロセッサ２０２とやり取りできるようにするとしてよい。ドライバ３１４は、例えば、推論エンジン（例えば、Ｓｋｉｎ−Ｓｋｅｌｅｔｏｎ−Ｇｕｔｓ（ＳＳＧ）推論ソフトウェアディベロッパキット（ＳＤＫ））によって利用され得るか、または、例えば、生センサデータが必要な場合にはアプリケーションおよびサービス３１６によって直接利用され得るセンサＡＰＩ３０８を公開するべく利用されるとしてよい。一実施形態によると、センサＡＰＩ３０８および／またはセンサハブＡＰＩ３１０は、センサハブソフトウェア１１４に抽象化を提供する。このため、所定期間にわたってセンサハブソフトウェア１１４が複数の異なるセンサをサポートする必要がある場合には、各センサドライバが公開しているセンサ機能はセンサＡＰＩ３０８および／またはセンサハブＡＰＩ３１０で抽象化される。このように、例えば、センサ２１４−２２８の既存の加速度計を新しい加速度計と交換する場合、既存の加速度計に対応付けられているセンサドライバを単に新しい加速度計に対応付けられているセンサドライバと交換することで、同じ加速度計ＡＰＩを既存のもの（例えば、データ取得、電力低減等）として公開するには十分である。
【００２０】
さらに、ミドルウェア３７０は、高レベルでのコンテキストの格納、検索、通知、データの処理等を実現するとしてよく、さらに、他のアプリケーション、サービスおよびコンポーネント３１６の実装、例えば、推論アルゴリズムの実装、生センサデータの格納（例えば、高データレート）等を実現するとしてよい。同様に、ドライバ３１２、パーサ３１４等のさまざまなコンポーネントは、抽象的なセンサハブの詳細を提供し、複数の消費者をサポートし、コンフリクト解決を実行するべく利用され得る。図１を参照しつつ上述した「ジェスチャ認識」の例に戻ると、「ジェスチャ認識」要求がアプリケーションプロセッサ１０８上で実行されているミドルウェア３７０にルーティングされると、ミドルウェア３７０は、例えば、加速度計からデータを取得して、加速度計から動きが検出されればジャイロスコープをトリガして、センサハブ１１０でジェスチャスポッティングを実行して、これらの条件が満たされればミドルウェア３７０にデータを送信するよう、センサハブ１１０を設定する。アプリケーションプロセッサ１０８上のミドルウェア３７０はこの後、データを受信すればいつでもアルゴリズム（例えば、ＨＭＭアルゴリズム）を実行して、最後のジェスチャ認識を実行して、ユーザがたった今、例えば、「シェイク」ジェスチャを行ったと判断する。ミドルウェア３７０は、本明細書で図示しているコンポーネントのうち一部、例えば、ＩＡ３０６、センサＡＰＩ３０８、センサハブＡＰＩ３１０、ドライバ３１２、他のアプリケーション、サービスおよびコンポーネント３１６、呼受付制御（ＣＡＣ）アプリケーション３５２、ＣＡＣフレームワーク３５４（例えば、ＳＳＧフレームワーク）、推論ＳＤＫ（例えば、ＳＳＧ推論ＳＤＫ）３５６、ＣＡＣクライアントＡＰＩ３５８、ＣＡＣプロバイダＡＰＩ３６０等を含むとしてよい。一方、パーサ３１４は、ドライバ３１２に対応付けられているが、センサハブ１１０で実行されるとしてよい。上述したように、一実施形態によると、センサハブソフトウェアモジュール３０４を介して提供するプリミティブ（例えば、トリガ、取得、処理、取得、フィルタリング等）は、アプリケーションプロセッサ１０８上で実行されているミドルウェア３７０によって設定されるが、センサハブ１１０のセンサハブソフトウェア１１４において実施され、アプリケーションプロセッサ１０８にあるセンサハブＡＰＩ３１０を介して公開され、アプリケーションプロセッサ１０８を介して要求、トリガおよび設定される。
【００２１】
図３Ｂを参照すると、さまざまな機能および／または性能に言及する複数のプリミティブ３２２−３３８が、ソフトウェアモジュール３０４として提供されており、センサハブＡＰＩ３１０を介してセンサハブプロセッサ２０２に対応付けられており、アプリケーションプロセッサ１０８は、コンテキストアウェアアプリケーションのさまざまな要求および／または要件に基づいて、センサハブプロセッサ２０２を（再）設定できる。本明細書で図示しているプリミティブ３２２−３３８に対応付けられているさまざまな機能は、説明を簡潔かつ分かり易くするべく単に一例として挙げられているが、任意の数の他の機能をプリミティブ３２２−３３８のリストに追加し得る（またはプリミティブ３２２−３３８のリストから削除し得る）ものと考えられる。
【００２２】
一実施形態によると、センサハブプリミティブ３２２−３３８は、範囲および所望のサンプリングレートを設定することに加えて、複数のセンサ２１２−２２８のうちいずれを選択してデータを取得するかを決定するべく、取得モジュール３２２を含む。取得モジュール３２２はさらに、センサハブプロセッサ２０２に、不要または非アクティブ状態のセンサ２１４−２２８のいずれかを低電力モードに移行させて、電力を節約できるようにする。別のプリミティブは、輸送効率を維持しつつレイテンシを最適化することを目的としてデータをアプリケーションプロセッサ１０８にストリームするべくセンサハブプロセッサ２０２の設定を容易にするために用いられるデータ配信モジュール３２４を含む。データ配信モジュール３２４またはこのモードは、アプリケーションプロセッサ１０８がウェイク状態またはアクティブ状態である場合に利用されるとしてよい。これに代えて、ユーザ（例えば、モバイルコンピューティングデバイスのエンドユーザ）が（モバイル）コンピューティングデバイスとやり取りしていない場合には、アプリケーションプロセッサ１０８はスリープ状態に移行して、バックグラウンドで関連データを収集して格納媒体でデータを蓄積または保持するようにセンサハブプロセッサ２０２を設定するとしてよい。データ配信モードにおいて、アプリケーションプロセッサ１０８は、周期的にウェイク状態に移行して、格納媒体から格納されているデータを取得して、コンテキスト認識等の必要なタスクを実行するとしてよい。
【００２３】
別のプリミティブは、一実施形態によると、特定のデータ処理機能をセンサ２１４−２２８から取得したセンサデータに適用するようにセンサハブプロセッサ２０２を設定し易くするべくアプリケーションプロセッサ１０８をトリガするために用いられる処理モジュール３２６を含む。これらの処理機能は、柔軟性を高めるべく一連のパラメータを用いて設定可能である（例えば、サンプルの数、スライディングウィンドウ等）。さらに、これらの処理機能は、必要または所望に応じて、プリミティブ調整部３３８を用いて既存の処理モジュール３２６を拡張することによって、比較的容易に拡張が可能である。プリミティブ調整部３３８は、処理モジュール３２６等の既存モジュールの機能を拡張するべく、または、ソフトウェアプログラミングを介した新しいモジュールを追加するべく用いられる機能拡張モジュールを含む。
【００２４】
一実施形態によると、プリミティブ３２２−３３８はさらに、任意の１以上のセンサ２１４−２２８からのセンサデータを組み合わせ、特定の条件の発生についてセンサデータを評価するべくデータ処理機能を実行するようにセンサハブプロセッサ２０２の設定を容易にする条件評価部３２８を含む。これらの条件は、トリガされると、以下の処理のうち１以上が行われる。
（１）  新しいセンサからの取得をトリガ
（２）  データ低減
（３）  イベント検出
「新しいセンサからの取得をトリガ」は、センサ２１４−２２８を用いて異なるセンサからの取得モジュール３２２を利用した取得をトリガすると、一部のセンサは他のセンサよりも消費電力が高いので、電力効率が高くなることを意味する。例えば、コンテキストアウェアアプリケーションのジェスチャ認識の場合、加速度計、ジャイロスコープ等の特定のセンサがジェスチャ認識関連のタスクを実行するために必要である。例えば、加速度計から取得したデータは、ユーザの動きを検出するために用いられる。その結果、ジャイロスコープ（通常は、消費電力が１０倍（１０Ｘ）である）からの取得が開始される。一実施形態によると、アプリケーションプロセッサ１０８の機能はセンサハブプロセッサ２０２にオフロードまたはアウトソースされて、動作時のレイテンシを低く抑える。これは、当該機能がアプリケーションプロセッサ１０８にとどまっている場合には、取得がトリガされる度にアプリケーションプロセッサ１０８をウェイク状態にする必要があるので、不可能である。
【００２５】
「データ低減」および「イベント検出」に関しては、継続的に検出処理を行うので、取得モジュール３２２を用いて所定量のデータが取得されるが、このデータの大半は意味を持たない場合がある。例えば、ジェスチャ認識または音声認識を考えると、加速度計またはマイクロフォン等のセンサは通常、アプリケーションプロセッサ１０８をウェイク状態にする必要がない無用なデータを収集したり、無用なデータを受信したりすることがある。ある時点において、ユーザは、ジェスチャを行うか、または、単語を話すとしてよく、ジェスチャー（または音声）が行われた可能性がある（ジェスチャまたは音声が理解可能である必要はない）とセンサハブ１１０が検出することが出来る場合、センサハブ１１０はアプリケーションプロセッサ１０８をウェイク状態に移行させてデータを送信する。言い換えると、一実施形態では、アプリケーションプロセッサ１０８は、収集されたデータに何らかの意義がある場合に限ってウェイク状態になりデータを受信する。何の意義もない場合には、この処理は、アプリケーションプロセッサ１０８における処理負荷を低減して、コンピューティングデバイスの消費電力を低減するべくセンサハブ１１０にアウトソースされて実行される。
【００２６】
例えば、ジェスチャ認識の場合、ジェスチャ認識パイプラインの最初の２つのステージは、演算の負荷が大きくないので、センサハブ１１０にオフロードすることができる。これらのステージによって、ジェスチャの種類を判断することはできないが、ジェスチャに似た動きがあるか否かを検出することができる。この結果、ジェスチャが実行されていない場合には元のデータの９５％以上を落とすので、ＩＡ、アプリケーションプロセッサ１０８をウェイク状態に移行させる頻度が大幅に少なくなる。残りの５％のデータについては、アプリケーションプロセッサ１０８はウェイク状態に移行するとしてよく、ジェスチャ認識を実行する演算の負荷が非常に大きいステージをＩＡで実行する。この作業負荷分散方法は、検出、音声認識、スピーカ特定等の複数のインターフェースパイプラインについて、一般化することができる。
【００２７】
プリミティブ３０４について続けると、仮想センサ３３０は、生センサデータ（センサ２１４−２２８から取得または算出したもの）に対して、高レベルデータ（例えば、コンピューティングデバイスの表面が上を向いているか否か等）を提供するために利用可能なプリミティブとして機能する。一部の仮想センサ３３０（例えば、向き、進行方向等）は、センサハブ１１０で効率的に算出可能であり、元のセンサデータが必要でない場合にはデータが大幅に削減される。さらに、これらの仮想センサ３３０は、特定のイベントをトリガして、アプリケーションプロセッサ１０８をウェイク状態に移行させるとしてよい。
【００２８】
他のプリミティブ３０４には、キャリブレータ３３２、タイムスタンプモジュール３３４、電力マネージャ３３６およびプリミティブ調整部３３８が含まれる。一部のセンサ（例えば、コンパス）は頻繁にキャリブレーションを行う必要があるので、キャリブレータ３３２は、キャリブレーション機能を適用してさまざまなキャリブレーションタスクを実行してキャリブレーション（または、キャリブレーション済みの）データをアプリケーションプロセッサ１０８に供給するために用いられるとしてよい。正確なコンテキスト認識を可能とするためにはセンササンプルのタイムスタンプを正確に維持することが重要であるので、タイムスタンプモジュール３３４は、センサハブの自身の内蔵クロックと共に利用され、時間データをアプリケーションプロセッサ１０８と周期的に同期させて、コンテキストアウェアアプリケーションに関するさまざまな処理のタイムサンプリングを実行して登録する。時間データは、時間データサンプルと共に送信されるタイムスタンプとして、アプリケーションプロセッサ１０８と共有されるとしてよい。電力マネージャ３３６は、センサハブ１１０における電力の管理を容易にするので、アプリケーションプロセッサ１０８とは別に自発的に行われる。例えば、電力マネージャ３３６は、センサハブ１１０を、（例えば、連続するデータサンプル取得タイミングの間に）低電力状態に切り替えるとしてよい。一方、アプリケーションプロセッサ１０８は、高電力状態にあるとしてよい。プリミティブ調整部３３８によれば、新しいプリミティブをセンサハブプリミティブ３０４のリストにプログラミングすること、および／または、既存のプリミティブ３０４を（再）プログラミングして特定の機能を追加または削除することが可能である。
【００２９】
図４は、本発明の一実施形態に係るセンサハブにプロセッサのコンテキストアウェアアプリケーション関連の機能をアウトソースする方法を説明するための図である。方法４００は、ハードウェア（例えば、回路、専用ロジック、プログラム可能ロジック等）、ソフトウェア（処理デバイスで実行される命令等）、または、これらの組み合わせを含む処理ロジックによって実行されるとしてよい。一実施形態によると、方法４００は、図１のセンサハブ１１０によって実行される。
【００３０】
方法４００は、センサハブをコンピューティングデバイス（例えば、モバイルコンピューティングデバイスまたは手持ちコンピューティングデバイス）のアプリケーションプロセッサに対応付けるブロック４０５で開始される。コンピューティングデバイスは、１以上のコンテキストアウェアアプリケーションをホストしている。一実施形態によると、ブロック４１０において、コンテキストアウェアアプリケーションに関連する複数のセンサは、センサハブのハードウェアアーキテクチャのセンサハブプロセッサに対応付けられている。一実施形態によると、センサハブは、チップセットのうち、アプリケーションプロセッサが位置しているのと同じコアに位置するとしてもよいし、別のチップセットにディスクリートに設けられるとしてもよい。一実施形態によると、一連のソフトウェアモジュールは、ブロック４１５において、プリミティブとしてセンサハブのソフトウェアアーキテクチャにプログラミングされ、コンピューティングシステムのアプリケーションプロセッサに供給される。上述したように、プリミティブ（例えば、トリガ、取得および処理）は、アプリケーションプロセッサで実行されているミドルウェアによって設定されるが、センサハブソフトウェアで実施され、アプリケーションプロセッサのセンサハブＡＰＩを介して公開され、アプリケーションプロセッサを介して要求、トリガおよび設定される。一実施形態によると、図３Ｂを参照しつつ説明したように、センサハブソフトウェアモジュール３０４によって提供されるように、プリミティブ調整部またはプリミティブ調整モジュールを用いて、プリミティブを後に更新するとしてよい。これらのプリミティブの変更または更新は、任意の数の既存のプリミティブの編集、移動および／または削除、ならびに、任意の数で任意の種類の新しいプリミティブの追加を含むとしてよい。
【００３１】
ブロック４２０において、これらのプリミティブはアプリケーションプロセッサに提供されて、アプリケーションプロセッサに新しい機能を提供し、コンピューティングシステムのコンテキストアウェアアプリケーションに対応する処理に関するさまざまな機能およびタスクを実行するようにセンサハブプロセッサを設定する。このように、一実施形態によると、通常はアプリケーションプロセッサによって実行される機能または処理は、ブロック４２５においてセンサハブプロセッサにアウトソースされる。例えば、アプリケーションプロセッサが通常は直接管理するセンサは、一実施形態によると、センサハブプロセッサによって管理されるので、コンテキストアウェアアプリケーションに関するタスクの大半をアプリケーションプロセッサが行わなくて済む。これによって、アプリケーションプロセッサはスリープ状態に移行するので、消費電力が全体的に低減される。
【００３２】
ブロック４３０において、既存のプリミティブのうちいずれかは更新（例えば、拡張または低減）すべきであるか否か、および／または、任意の新しいプリミティブを追加すべきか否かを判断する。更新および／または追加を行う場合、プリミティブ調整部を用いて、更新および／または追加をブロック４３５で実行して、ブロック４２０において、アプリケーションプロセッサによるセンサハブプロセッサの設定を行うようにする。更新および／または追加を行わない場合、ブロック４４０で終了する。
【００３３】
図５は、本発明の一実施形態に係る、図１のセンサハブ１１０を利用可能なコンピューティングシステム５００を示す図である。図５に示すコンピューティングシステムの例は、
１）少なくとも１つが上述した特徴を含む１以上のプロセッサ５０１と、
２）メモリコントロールハブ（ＭＣＨ）５０２と、
３）システムメモリ５０３（異なる種類のシステムメモリも存在する、例えば、ダブルデータレートＲＡＭ（ＤＤＲ  ＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）等）と、
４）キャッシュ５０４と、
５）入出力（Ｉ／Ｏ）コントロールハブ（ＩＣＨ）５０５と、
６）グラフィクスプロセッサ５０６と、
７）ディスプレイ／スクリーン５０７（異なる種類のものが存在する、例えば、陰極線管（ＣＲＴ）、薄膜トランジスタ（ＴＦＴ）、液晶ディスプレイ（ＬＣＤ）、ＤＰＬ等）と、
８）１以上のＩ／Ｏデバイス５０８と
を備える。
【００３４】
１以上のプロセッサ５０１は、コンピューティングシステムが実現するソフトウェアルーチンを実行するべく、命令を実行する。命令は、データに対して実行される何らかの種類の演算を含むことが多い。データおよび命令は共に、システムメモリ５０３およびキャッシュ５０４に格納されている。キャッシュ５０４は通常、システムメモリ５０３よりもレイテンシ時間が短い。例えば、キャッシュ５０４は、プロセッサと同じシリコンチップに集積化されているとしてもよいし、および／または、より高速なスタティックＲＡＭ（ＳＲＡＭ）セルで構成されているとしてもよい。一方、システムメモリ５０３は、より低速のダイナミックＲＡＭ（ＤＲＡＭ）セルで構成されているとしてよい。利用頻度が高い命令およびデータをシステムメモリ５０３ではなくキャッシュ５０４に格納しようとすることで、コンピューティングシステムの全体的な性能効率が改善する。
【００３５】
システムメモリ５０３は意図的に、コンピューティングシステム内の他のコンポーネントによって利用可能な構成になっている。例えば、さまざまなインターフェース（例えば、キーボードおよびマウス、プリンタポート、ローカルエリアネットワーク（ＬＡＮ）ポート、モデムポート等）からコンピューティングシステムで受信したデータ、または、コンピュータシステム（例えば、ハードディスクドライブ）の内部格納要素から取り出したデータは通常、ソフトウェアプログラムの実施に際して１以上のプロセッサ５０１によって演算を行う前に、システムメモリ５０３の待ち行列に一時的に入れる。同様に、ソフトウェアプログラムがコンピューティングシステムから外部のエンティティへとコンピューティングシステムインターフェースのうち１つを介して送信する必要があると判断するデータ、または、内部格納要素に格納されるデータは通常、送信または格納の前にシステムメモリ５０３で一時的に待ち行列に入れられる。
【００３６】
ＩＣＨ５０５は、当該データが適切にシステムメモリ５０３と適切な対応するコンピューティングシステムインターフェースとの間でやり取りされるように処理する（コンピューティングシステムの構成に応じて、内部格納デバイスとのやり取りも処理する）。ＭＣＨ５０２は、プロセッサ５０１、インターフェースおよび内部格納要素からのシステムメモリ５０３へのアクセス要求が互いに近接したタイミングで発生して競合する場合に、これらの要求を管理する。
【００３７】
また、通常のコンピューティングシステムでは１以上のＩ／Ｏデバイス５０８が実現されている。Ｉ／Ｏデバイスは一般的に、コンピューティングシステム（例えば、ネットワーキングアダプタ）との間でデータ転送を行うか、または、大規模不揮発性ストレージの場合には、コンピューティングシステム（例えば、ハードディスクドライブ）内でデータ転送を行う。ＩＣＨ５０５は、自身とＩ／Ｏデバイス５０８との間において、双方向のポイント・ツー・ポイントリンクを持つ。
【００３８】
本発明のさまざまな実施形態の一部は、コンピュータプログラム製品として提供されるとしてよい。コンピュータプログラム製品は、本発明の実施形態に係るプロセスを実行するようコンピュータ（またはその他の電子デバイス）をプログラミングするために用いられるコンピュータプログラム命令を格納しているコンピュータ可読媒体を含むとしてよい。機械可読媒体は、これらに限定されないが、フロッピー（登録商標）ディスケット、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、および、光磁気ディスク、ＲＯＭ、ＲＡＭ、消去可能プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、電気的ＥＰＲＯＭ（ＥＥＰＲＯＭ）、磁気カードまたは光カード、フラッシュメモリ、または、電子命令を格納するのに適した他の種類の媒体／機械可読媒体を含むとしてよい。
【００３９】
上述した説明では、本発明は、具体的な実施形態例を参照しつつ説明した。しかし、上述した説明を、特許請求の範囲に記載した本発明のより広義の意図および範囲から逸脱することなく、さまざまな点で変形および変更し得ることは明らかである。明細書および図面は、本発明を限定するものではなく、例示するものと見なされたい。
【図１】
0005707598.tif 000002
【図２】
0005707598.tif 000003
【図３Ａ】
0005707598.tif 000004
【図３Ｂ】
0005707598.tif 000005
【図４】
0005707598.tif 000006
【図５】
0005707598.tif 000007